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
- Hard disk
- Create custom layout
- sda 40955MB VBOX HARDDISK
- 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
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
- VirtualBox &
- H: Start Centos 5.3 Workstation
- VM: scp -r -P 2023 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: yum update
- 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 -P 2023 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`
- mkdir -p /tmp/$KVERSION && cd /tmp/$KVERSION && gunzip -c /boot/initrd-$KVERSION.img | cpio -iv
- VM: Copy in required drivers into directory structure. The list below may need to be added to for different hardware. In the case where it does not work, extracting the initrd.img file of Centos manually installed on the real hardware will tell you which .ko's are needed.
for i in ata_generic.ko ehci-hcd.ko ext3.ko jbd.ko libata.ko mbcache.ko ohci-hcd.ko pata_amd.ko sata_nv.ko scsi_mod.ko scsi_wait_scan.ko sd_mod.ko uhci-hcd.ko; do \
locate $i | grep $KVERSION | while read kofile; do \
cp $kofile ./lib/; \
done; \
done;
- VM: Repackage initrd.img file with new drivers
- find ./ | cpio -o -H newc | gzip -9 > /boot/initrd-$KVERSION.img
- VM: Fix up permissions
- chmod 600 /boot/initrd-$KVERSION.img
Creating Initial Image and Sending to Image Server (Initial Workstation 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>
- Run si_clusterconfig? n
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client -ip-assignment static -autodetect-disks
- VM: shutdown -h now # Also kills rsync daemon used for serving the image
- 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>
- centos_golden_client_update: Remove whole <disk> ... </disk> block to disable partitioning
- Recreate installer script:
- /usr/sbin/si_mkautoinstallscript -image centos_golden_client -force -ip-assignment static -post-install beep
- 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: Edit /systemimager/images/centos_golden_client/boot/grub/grub.conf, adding these lines to the end:
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
- 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
Software
- yum install pymol zsh lyx
- yum install fonts-chinese
- TODO: yum install fonts-chinese
- pymol: (Dirty hack). yum install pymol. As the one from sorbonne repository 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.
Creating Image and Sending to Image Server (Update Image boots from Grub)
These steps can be run once the first image has been loaded. 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 exclude certain directories, e.g. nfs mounts:
- VM: Prepare the image for image server, currently on lychee (IP Address 152.98.195.188)
- /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
- Press <Enter> to continue ... <Enter>
- Run si_clusterconfig? n
- /usr/sbin/si_getimage -golden-client 152.98.195.144 -image centos_golden_client -ip-assignment static -autodetect-disks
- VM: shutdown -h now # Also kills rsync daemon used for serving the image
- IS: Fix disk partitioning information
- Edit: /systemimager/images/centos_golden_client/etc/systemimager/autoinstallscript.conf
- Replace all: /dev/hda (VM disk) with /dev/sda (Real SATA disk)
- Alter partitioning to use whole disk space:
- 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="10" p_type="primary" p_name="-" flags="-" />
<part num="3" size="10" p_type="primary" p_name="-" flags="-" />
<part num="4" size="*" p_type="extended" p_name="-" flags="-" />
<part num="5" size="1" p_type="logical" p_name="-" flags="-" />
<part num="6" size="*" p_type="logical" p_name="-" flags="-" />
</disk>
- /usr/sbin/si_mkautoinstallscript -image centos_golden_client -force -ip-assignment static -post-install beep
- IS: Make bootable CD that will download the image from the image server
- Put a writable CD into the image server
- Generate ISO
- /usr/sbin/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: [Re]Start rsync server
- To check status: /etc/init.d/systemimager-server-rsyncd status
- To start: /etc/init.d/systemimager-server-rsyncd start
- To restart: /etc/init.d/systemimager-server-rsyncd restart
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 Image and Sending to Image Server (Initial Workstation Image using 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.