Automate the Download of Windows VMs for Testing IE6, IE7, IE8, IE9, IE10 and IE11 with ievms

I am working on some client-side Javascript and I need to be able to test it in all of the currently extant versions of Internet Explorer.  A collegue of mine pointed me to the ievms project by Greg Thornton (xdissent) that automates the download of multiple Windows vms provided by Microsoft to facilitate testing in multiple versions of IE.

https://github.com/xdissent/ievms

To get it working under Fedora (RedHad, CentOS):

   . The script requires unar but is not readily available for FC18.  I found a page that indicated 7za provided by p7zip works to unzip the large VM files.
   . cd /
   . Installed p7zip:
      . # yum install p7zip
   . Modified the ievms.sh:

# Check for the `unar` command, downloading and installing it if not found.
check_unar() {
    if [ “${kernel}” == “Darwin” ]
    then
        hash unar 2>&- || install_unar
    else
        #
        # Commented out to use 7za instead
        #
        # hash unar 2>&- || fail “Linux support requires unar (sudo apt-get install for Ubuntu/Debian)”
        echo “using 7za . . . “
    fi
}

    log “Checking for existing OVA at ${ievms_home}/${ova}”
    if [[ ! -f “${ova}” ]]
    then
        download “OVA ZIP” “${url}” “${archive}”

        log “Extracting OVA from ${ievms_home}/${archive}”
        #
        # Use 7za instead of unar
        #
        # unar “${archive}” || fail “Failed to extract ${archive} to ${ievms_home}/${ova}, unar command returned error code $?”
        7za e “${archive}” || fail “Failed to extract ${archive} to ${ievms_home}/${ova}, unar command returned error code $?”
    fi

Services That Can Be Turned Off in a CentOS 6, Minimal Server

Following is a list of services that can (for most applications) be turned off if you are setting up a bare-bones CentOS 6.4 server:

Automatic bug reporting services:
abrt-ccpp
abrt-oops
abrtd

Power control and features, query battery and config status
acpid

Controls ‘at’ command queing, examining, or deleting jobs for later execution.  Anything atd can do, cron can do
atd

File auditing
auditd

Auto fs mounting
autofs

Printing
cups

For desktop environments:
netfs

Network filesystems:
nfslock
rpcbind
rpcgssd
rpcidmapd

MTA
postfix

ip6tables

Sends anonymized usage stats:
udev-post

Setting Up Passwordless SSH Under CentOS 6 Running Selinux

I am setting up a cluster of KVM virtual machines and want to be able to ssh to them as the root user on the vm without having to enter a password.

The first thing that I did was create keys on the box from which I was going to make connections (A):

[rchapin@A .ssh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/usr/local2/home/rchapin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /usr/local2/home/rchapin/.ssh/id_rsa.
Your public key has been saved in /usr/local2/home/rchapin/.ssh/id_rsa.pub.
The key fingerprint is:
6a:ca:57:31:23:30:67:8c:9d:de:78:53:14:90:16:6e rchapin@A
The key’s randomart image is:
+–[ RSA 2048]—-+
|     + .o=o.     |
|    + *.o .      |
|     * +E.       |
|      +.B        |
|       oS=       |
|       ..        |
|      o.         |
|   . o.          |
|    o.           |
+—————–+

After which I scp the id_rsa.pub file to the remote box

[rchapin@A ~]$ scp ./id_rsa.pub root@B:/root/

Then ssh to the remote box, create the ~/.ssh directory, copy the contents of the id_rsa.pub file into ~/.ssh/authorized_keys and set the permissions on all of the files.

[root@B ~]# mkdir .ssh
[root@B ~]# chmod 700 .ssh
[root@B ~]# cat ~/id_rsa.pub > authorized_keys
[root@B ~]# chmod 600 authorized_keys

The first problem was that it wasn’t accepting the key and was giving me the password prompt.

After a quick search regarding passwordless ssh and Selinux I did the following:

[root@B .ssh]# restorecon -R -v /root/.ssh/
restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /root/.ssh/authorized_keys2 context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0

Now I received the error:

[rchapin@A .ssh]$ ssh root@B
Agent admitted failure to sign using the key.

Another quick search and all I had to do was add the key on the A box and I was all set

[rchapin@A.ssh]$ ssh-add
[rchapin@A.ssh]$ ssh root@B
Last login: Thu Aug 22 20:40:54 2013 from A
[root@B ~]#

Running VisualVM to Examine a JVM on a Remote Host Via an SSH Tunnel/Proxy Connection

VisualVM is a great tool for peering into a running JVM.  In many cases, it won’t be one that is running on your local box.
The first thing to be done is to get jstatd running on the remote machine:
Create a security policy file on the remote machine (this assumes that you have an additional layer of security and that the outside world cannot access these ports and/or you have a VPN set-up and you are operating in that enclave):
$ cd ~

$ more jstatd.all.policy

grant codebase “file:${java.home}/../lib/tools.jar” {

   permission java.security.AllPermission;

};
Next run jstatd on the remote machine:
$ jstatd -J-Djava.security.policy=/fully/qualified/path/to/jstatd.all.policy
On the local machine set up an SSH connection through which you will tunnel your VisualVM connection:
$ ssh -D localhost:9696 rchapin@remote.machine.to.proxy.to
On the local machine fire up jvisualvm
$ jvisualvm
Go to:  Tools > Options > Network:
Check ‘Manual proxy settings’:
Add localhost and port 9696 to the SOCKS Proxy setting
Under the Applications Tab, Right-click on ‘Remote’ and select ‘Add Remote Host’
Add the remote user name or ip (if you are running the RMI registry on a different port select Advanced and configure as necessary).
Once added the remote JVMs that are running as the same user as your local user will be displayed and you can connect to them as normal

Setting up an HTTP Proxy over SSH in Chrome under Fedora Core 18 Linux

At least under the FC 18 distro, there was no fancy GUI controls in the Advanced Settings for setting up an HTTP proxy over SSH for Chrome.

To get it all set up:

  • Establish and ssh connection to the server to which you want to proxy:
    • $ ssh -D localhost:1234 username@remote.server,  where 1234 is the port number you want to use for the proxy
  • Run google-chrome from the command line passing it the proxy setting:

    • $ google-chrome –proxy-server=socks5://localhost:1234

Screen Cheat Sheet

I have recently be introduced to the *nix screen command.  Incredibly powerful tool for managing windows which mulitplexes a physical terminal between one or many processes.  One of the uses it to maintain interactive shells on a remote server between remote connections to the machine.

It is enormously helpful when executing long running commands on remote servers.  Especially those that timeout your ssh connection and or from machines that you are going to either disconnect from the net or shutdown.

Basically, it allows you to create a session from which you can detach and then attach from a shell that you will then exit.  It is an alternative for using nohup and provides the added benefit that you can reconnect to the command-line session.

Following is my current cheat sheet of notes regarding it’s usage.  Full details can be found searching the web for tutorials and reading the man page.

—————————————
— Legend
 
C-a = Control+A
C-D = Control+D
—————————————
— Commands
 
Create a screen:
$ screen -S [session-name]
 
 
Detach from screen:
$ C-a d
 
 
Terminate a screen session (from within the screen session):
$ C-a k
 
 
List screens (from within a standard shell session):
$ screen -ls
 
 
Connect to an existing screen:
$ screen -r [session-name]
 
If there is only one screen and no session-name is given it will connect to it
 
Re-connect to an ‘attached’ screen:  This sometimes happen if you kill the window you are in without first detaching from the screen session
$ screen -d -r [session-name]
 
 
Split screens:
 
Create two named screen sessions:
 
Enter one of the screens via $ screen -r [session-name]
 
Horizontal split (once in a screen):
$ C-a S
 
Move to next region:
$ C-a tab
In the new region, (there will be no command prompt in a newly created region)
Create a new session (this seems to create a new un-named session):
$ C-a c
 
Return to full-size screen:
Switch to the half you want to keep
$ C-a Q

Quick and Dirty HTTP Server to Transfer Files

If you need to stand up a quick HTTP Server to enable someone on your LAN to transfer some files use the following command in the directory that you want to ‘share’:

python -m SimpleHTTPServer

The default port is 8000, but you can run it as follows to specify a port

python -m SimpleHTTPServer 8080

Making the Switch to a Standing Desk

A few years back I had an office mate who used a standing desk.  He said that he had been using a standing desk for many years and that once he got used to it he liked it much better.  Since then, I have noticed a number of studies that indicate sitting for extended periods of time is just plain bad for you.

For a while I have been wanting to make the switch, and today I took the plunge.

I’ve still got a number of issues to sort out to get things right:

  • I’ve got to get the height correct for my keyboard and mouse
  • I’ve got to get another MicroSoft Natural Keyboard Elite (which looks like isn’t in production any more but is the best keyboard I’ve ever used
  • Get a proper set of shoes for standing
  • Depending on the shoes, get a stress matt

I will post some photos and a follow up once I’ve got everything sorted out.

The Proper Shoes

Links:

  • http://www.bestshoesforstandingallday.com/work-shoes-for-standing-all-day/