CentosWorkstation
How to make a Centos Workstation (VM)
Warning Do not install the Xen virtualisation package within the virtual Centos as it will crash during boot when running inside the VirtualBox VM!
A virtual machine makes installation and testing faster and easier, especially since it makes it easy to make and revert to snapshots.
Building the VM (Virtual Machine)
For serving the image to lychee, VirtualBox needs to be run as root because the NAT port forwarding from 873/TCP on the host to 873/TCP on the virtual machine is only possible in Linux if the VirtualBox processes are run by root. It is probably best to run VirtualBox as root for other stages, just for VirtualBox's own internal consistency.
- Inside VirtualBox (F7|C5) server, add users to vboxgroup (/etc/group), run
VirtualBox
, register product, create new virtual machine- "Centos Workstation"
- Linux, Red Hat 64-bit
- 1536MB RAM
- Boot hard disk (Primary master)
- Create new hard disk
- Dynamically expanding storage
- Location: /data/virtualbox/CentosHDD.vdi
- Size: 40.0 GB
- Create new hard disk
- This creates a $HOME/.VirtualBox directory, which contains all the information about the VM
- Further settings
- General: Enable 3D acceleration
- Hard Disks: Enable Additional Controller: SATA (AHCI). Slot: SATA Port 0
- CD/DVD-ROM: Mount Centos 5.3 DVD iso
Installing Centos
- Start VM
- Press Enter at Centos installation screen
- Skip media check
- Ignore colour mode message
- Centos Installation screen (GUI)
- Language: English
- US English
- Click OK to erase ALL DATA on device sda VBOX HARDDISK 40955MB? Yes
- Create custom layout
- Partitioning
- Note: I found that making a separate /usr partition stuffed up systemimager.
- /dev/sda1, /boot, ext3, 100MB, Fixed size, Force to be a primary partition
- /dev/sda2, /, ext3, 36000MB, Fixed size, Force to be a primary partition
- /dev/sda3, swap, 2048MB, Fixed size, Force to be a primary partition
- /dev/sda4, /data, ext3, Fill to maximum allowable size, Force to be a primary partition
- The Grub boot loader will be installed on /dev/sda
- (tick) CentOS /dev/sda2
- Network
- Active on boot, eth0, DHCP, Auto
- Hostname:
- Automatically via DHCP
- Time
- Australia/Brisbane time
- System clock uses UTC
- Root password
<standard workstation root password>
- Installation (only the following!)
- Desktop - Gnome
- Desktop - KDE
- (tick) Customize later
- Begin!
- Wait ~20 minutes
- Reboot (unmounting ISO)
- Post Installation Configuration
- Firewall: Disabled
- SELinux: Disabled
- NTP: Enabled, 130.102.2.15, 130.102.128.43, Synchronise system clock, Local time source
- Create User: Use Network Login: LDAP for both User Information & Authentication:
- LDAP Search Base DN: dc=md,dc=smms,dc=uq,dc=edu,dc=au
- LDAP Server: ldap://lychee.md.smms.uq.edu.au/
- Sound should be OK
- Reboot
- Power off VM
- Turn off VirtualBox
Installing Imaging System
After installation of the base system, we need to perform some one-time steps to set it up to allow it to be imaged to real machines. VM stands for commands run on Virtual Centos (Virtual Machine), H stands for commands run on the host, such as commands to the VirtualBox application itself.
- H: Forward port 873/TCP on the host to the VM
- Note: e1000 below is because the virtual Intel 1Gb adapter is used (this is the default). Check that this is indeed the case.
- VBoxManage setextradata "Centos Workstation" "VBoxInternal/Devices/e1000/0/LUN#0/Config/rsync/Protocol" TCP
- VBoxManage setextradata "Centos Workstation" "VBoxInternal/Devices/e1000/0/LUN#0/Config/rsync/GuestPort" 873
- VBoxManage setextradata "Centos Workstation" "VBoxInternal/Devices/e1000/0/LUN#0/Config/rsync/HostPort" 873
- H: Start VirtualBox
- H: Start Centos Workstation
- VM: chkconfig yum-updatesd off
- VM: scp -r lychee.md.smms.uq.edu.au:/etc/yum.repos.d/\* /etc/yum.repos.d/
- VM: yum install --nogpgcheck rpmforge-release
- VM: yum install perl-AppConfig
- VM: rpm -iv systemconfigurator-2.2.11-1.noarch.rpm systemimager-common-4.1.6-1.noarch.rpm systemimager-client-4.1.6-1.noarch.rpm systemimager-x86_64initrd_template-4.1.6-1.noarch.rpm
- VM: We don't need to open port 873/TCP (for serving the image) as no firewall is turned on
- VM: Modify the virtual Centos to include another kernel in /boot, which is the kernel used for systemimager. Grub will be later modified to present this kernel as an option to boot into.
- scp -r lychee.md.smms.uq.edu.au:'/usr/share/systemimager/boot/x86_64/standard/{kernel,initrd.img}' /boot/
- H: Make sure 873/TCP is open if a firewall is enabled
Editing Centos' initrd.img to read real workstation HDD drives
Installing Centos on a given machine will affect which drivers are stored in the initrd.img file that is included by the kernel as it boots. These drivers are used to give the kernel access to the hard disk/filesystems which store the / partitions, etc. The virtual machine probably has different hardware to the real workstation, so the drivers needed for the real workstation must be added to the initrd.img file in our Centos.
- VM: Determine running kernel version and extract corresponding initrd file:
- export KVERSION=`uname -r`
- echo $KVERSION
- mkdir -p /tmp/$KVERSION && cd /tmp/$KVERSION && gunzip -c /boot/initrd-$KVERSION.img | cpio -iv
- VM: Copy in required drivers into directory structure. Our real workstations use a different SATA controller to the ahci.ko and ata_piix.ko modules used for the VM. This was discovered by exploring the contents of a Centos installation (initrd.img file) on a real workstation.
- cp /lib/modules/$KVERSION/kernel/drivers/ata/sata_nv.ko ./lib/
- chmod 600 ./lib/sata_nv.ko
- VM: Edit init, after "insmod /lib/ata_piix.ko" insert:
echo "Loading sata_nv.ko module"
insmod /lib/sata_nv.ko
Repackage initrd.img file
- VM: Shutdown to avoid repackaging initrd.img while kernel is running
- shutdown -h now
Create System Rescue CD VM
- Create new VirtualBox VM
- "System Rescue CD"
- Linux/Gentoo (64 bit)
- 512 MB RAM
- Boot Hard Disk
- Use existing: CentosHDD.vdi
- Settings: CD/DVD ROM
- Mount CD/DVD Drive to ISO: systemrescuecd-x86-1.1.7.iso
Load System Rescue CD VM and Repackage initrd.img
- boot: <Enter>
- Keyboard: <Enter>
- mkdir /mnt/sda1 /mnt/sda2
- mount -t ext3 /dev/sda1 /mnt/sda1
- mount -t ext3 /dev/sda2 /mnt/sda2
- cd /mnt/sda2/tmp/$KVERSION # where $KVERSION is defined as above
- find ./ | cpio -o -H newc | gzip -9 > /mnt/sda1/initrd-$KVERSION.img.new
- cd /mnt/sda1
- mv initrd-$KVERSION.img{,.old}
- mv initrd-$KVERSION.img{.new,}
- shutdown -h now
Creating Initial Image and Sending to Image Server (Initial Image uses Bootable CD)
The initial image ("centos_golden_client") is for imaging a real workstation for the first time, as it performs a disk partitioning. It shouldn't need to be regenerated unless Centos undergoes a major revision. The update image ("centos_golden_client_update", which boots from Grub on an imaged workstation) does not perform partitioning. How this is created is described in a later section. VM stands for commands run on Virtual Centos (Virtual Machine) and IS stands for commands to the image server.
- VM: Prepare the image for image server, currently on lychee (IP Address 152.98.195.188). This initiates an rsync server process.
- /usr/sbin/si_prepareclient --server 152.98.195.188
- Continue? y
- Continue? y
- /usr/sbin/si_prepareclient --server 152.98.195.188
- IS: Grab the image from the virtual Centos running on the VirtualBox VM on the host computer (this case uqmd13, which has IP address 152.98.195.144).
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client -ip-assignment static -autodetect-disks
- Continue? y
- [An image named centos_golden_client already exists ... Update? y]
- Press <Enter> to continue ... <Enter>
- [Update autoinstall script? y]
- [Run si_clusterconfig? n]
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client -ip-assignment static -autodetect-disks
- VM: No longer needed
- IS: Fix disk partitioning information
- Edit: /systemimager/images/centos_golden_client/etc/systemimager/autoinstallscript.conf
- Alter partitioning to use full disk (should be at least 250 GB):
- Edit: /systemimager/images/centos_golden_client/etc/systemimager/autoinstallscript.conf
<disk dev="/dev/sda" label_type="msdos" unit_of_measurement="%">
<!--
This disk's output was brought to you by the partition tool "parted",
and by the numbers 4 and 5 and the letter Q.
-->
<part num="1" size="0.1" p_type="primary" p_name="-" flags="boot" />
<part num="2" size="20" p_type="primary" p_name="-" flags="-" />
<part num="3" size="1" p_type="primary" p_name="-" flags="-" />
<part num="4" size="*" p_type="primary" p_name="-" flags="-" />
</disk>
- Recreate installer script:
- /usr/sbin/si_mkautoinstallscript -image centos_golden_client -force -ip-assignment static -post-install beep
- Recreate installer script:
- IS: Make bootable CD that will download the image from the image server
- Put a writable CD into the image server
- Generate ISO
- /usr/bin/si_mkautoinstallcd --out-file /tmp/systemimager.iso --kernel /usr/share/systemimager/boot/x86_64/standard/kernel --initrd /usr/share/systemimager/boot/x86_64/standard/initrd.img --append "IMAGESERVER=152.98.195.188 IMAGENAME=centos_golden_client SKIP_LOCAL_CFG=y"
- Burn ISO to CD (to find the CD recorder device run: cdrecord -scanbus)
- cdrecord -v -eject speed=16 dev=1,0,0 /tmp/systemimager.iso
- IS: Create the file /var/lib/systemimager/scripts/post-install/98centos_golden_client.grubfix containing the following text:
cat >> /boot/grub/grub.conf <<EOF
title Update Image (SystemImager) (/data is preserved)
root (hd0,0)
kernel /kernel noexec=off root=/dev/ram ramdisk_blocksize=1024 ramdisk_size=80000 IMAGESERVER=152.98.195.188 IMAGENAME=centos_golden_client_update SKIP_LOCAL_CFG=y
initrd /initrd.img
EOF
- IS: Start rsync server
- To check status: /etc/init.d/systemimager-server-rsyncd status
- To start: /etc/init.d/systemimager-server-rsyncd start
- IS: The initial image is now ready to be served to the real workstations
Creating Update Image and Sending to Image Server (Update Image boots from Grub)
These steps are for creating and sending the update image ("centos_golden_client_update"), which can be installed on a real workstation from the grub menu once the initial image has been loaded. These steps can be run any number of times. This image does not perform a partitioning on the real workstation local disk. VM stands for commands run on Virtual Centos (Virtual Machine) and IS stands for commands to the image server.
- VM: Edit /etc/systemimager/updateclient.local.exclude to specify any directories the contents of which should not be copied onto the real workstation, such as the contents to external nfs mounts (e.g. /melon1/*)
- VM: Prepare the image for image server, currently on lychee (IP Address 152.98.195.188). This initiates an rsync server process. The partitioning on disk /dev/sda is excluded
- /usr/sbin/si_prepareclient --server 152.98.195.188 -e sda
- Continue? y
- Continue? y
- /usr/sbin/si_prepareclient --server 152.98.195.188 -e sda
- IS: Grab the image from the virtual Centos running on the VirtualBox VM on the host computer (this case uqmd13, which has IP address 152.98.195.144).
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client_update -ip-assignment static
- Continue? y
- [An image named centos_golden_client_update already exists ... Update? y]
- Press <Enter> to continue ... <Enter>
- [Update autoinstall script? y]
- [Run si_clusterconfig? n]
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client_update -ip-assignment static
- VM: No longer needed
- IS: Fix disk partitioning information
- Edit: /systemimager/images/centos_golden_client_update/etc/systemimager/autoinstallscript.conf
- Add
format="no"
to tag containingreal_dev="/dev/sda4"
- Add
- Recreate installer script:
- /usr/sbin/si_mkautoinstallscript -image centos_golden_client_update -force -ip-assignment static -post-install beep
- Edit: /systemimager/images/centos_golden_client_update/etc/systemimager/autoinstallscript.conf
- IS: Create the file /var/lib/systemimager/scripts/post-install/98centos_golden_client_update.grubfix containing the following text:
cat >> /boot/grub/grub.conf <<EOF
title Update Image (SystemImager) (/data is preserved)
root (hd0,0)
kernel /kernel noexec=off root=/dev/ram ramdisk_blocksize=1024 ramdisk_size=80000 IMAGESERVER=152.98.195.188 IMAGENAME=centos_golden_client_update SKIP_LOCAL_CFG=y
initrd /initrd.img
EOF
- IS: Start rsync server
- To check status: /etc/init.d/systemimager-server-rsyncd status
- To start: /etc/init.d/systemimager-server-rsyncd start
- IS: The update image is now ready to be served to the real workstations
Software
Kernel Updates
Note: Any kernel updates will probably require also rebuilding initrd.img as described above (#Editing Centos' initrd.img to read real workstation HDD drives). In addition, the nvidia driver will probably need to be reinstalled. As such it is suggested that the system is updated without any kernel updates:
- yum update --exclude=kernel
NVIDIA Graphics Driver
- Log in to virtual Centos from console (i.e. not through gdm), this can be obtained using Ctrl-Alt-F1
- init 3
- sh NVIDIA-Linux-x86_64-180.51-pkg2.run
- init 5
Other
- yum install pymol zsh lyx fonts-chinese gcc
- pymol fix (Dirty hack): As the one above gives the python shared object in 32-bit, we need to rebuild it. This involves running, inside the pymol source, python setup.py build. Then, copying the libpymol.so built to /usr/lib/python2.4/site-packages/pymol/_cmd.so.
How to make a Centos Workstation (Real Machine)
Initial Image ("centos_golden_client
")
Warning! Make sure that the local disk does not have anything important on it as it will be wiped
- Boot from boot CD created in #Creating Initial Image and Sending to Image Server (Initial Image uses Bootable CD)
- Change /etc/X11/xorg.conf : generic to nvidia TEST
Update Image ("centos_golden_client_update
")
Note: The /data partition will not be changed
- Boot from
Update Image (SystemImager) (/data is preserved)
in grub menu
How to move the VirtualBox VM to another computer
- Move the $HOME/.VirtualBox directory and the /data/virtualbox directory. This is how it can be backed up also.