———
|
CentOS Live CD HowtoThis CD is based of CentOS 4.4 (http://www.centos.org) In addition to CentOS packages file system drivers unionfs, SquashFS. The following non-open source software is installed on the LiveCD. Dell_SAS_RAID_Storage_Manager-1.18-00 (Download Link: ftp://ftp.us.dell.com/sysman/SSM_Linux_1.18-00.tar.gz ftp://ftp.jp.dell.com/sysman/SSM_Linux_1.18-00.tar.gz ftp://ftp.euro.dell.com/sysman/SSM_Linux_1.18-00.tar.gz ftp://ftp.dell.com/sysman/SSM_Linux_1.18-00.tar.gz ) dell-pediags-2.7.0-193 (Download Link: ftp://ftp.us.dell.com/diags/dell-pediags-linux-2.7.0.193-A01.tar.gz ftp://ftp.jp.dell.com/diags/dell-pediags-linux-2.7.0.193-A01.tar.gz ftp://ftp.euro.dell.com/diags/dell-pediags-linux-2.7.0.193-A01.tar.gz ftp://ftp.dell.com/diags/dell-pediags-linux-2.7.0.193-A01.tar.gz ) All these are in the OM_5.1_ManNode_LIN_A00.tar.gz package available on http://support.dell.com. srvadmin-cm-5.1.0-354 srvadmin-omilcore-5.1.0-354 srvadmin-deng-5.1.0-354 srvadmin-odf-5.1.0-354 srvadmin-jre-5.1.0-354 instsvc-drivers-5.1.0-354 srvadmin-isvc-5.1.0-354 srvadmin-omhip-5.1.0-354 srvadmin-ipmi-5.1.0-354.rhel4 srvadmin-hapi-5.1.0-354 srvadmin-omacore-5.1.0-354 srvadmin-iws-5.1.0-354 srvadmin-old-5.1.0-354 (Download link: ftp://ftp.us.dell.com/sysman/OM_5.1_ManNode_LIN_A00.tar.gz ftp://ftp.jp.dell.com/sysman/OM_5.1_ManNode_LIN_A00.tar.gz ftp://ftp.euro.dell.com/sysman/OM_5.1_ManNode_LIN_A00.tar.gz ftp://ftp.dell.com/sysman/OM_5.1_ManNode_LIN_A00.tar.gz ) srvadmin-storage-5.1.0-392 (Download link: ftp://ftp.us.dell.com/sysman/srvadmin-storage-5.1.0-392.i386.rpm ftp://ftp.jp.dell.com/sysman/srvadmin-storage-5.1.0-392.i386.rpm ftp://ftp.euro.dell.com/sysman/srvadmin-storage-5.1.0-392.i386.rpm ftp://ftp.dell.com/sysman/srvadmin-storage-5.1.0-392.i386.rpm ) Available source code is in the “SRPMS” folder, patches and dev.tar.gz is in the “files” folder. A quick How-To describing how this CD came to life: This how-to is heavily based on this Gentoo LiveCD how-to - http://forums.gentoo.org/viewtopic-t-410389.html First a short description on how the CD works:
And now some more details: NOTE! I wrote this how-to from memory; it is possible that I have missed something. 1. Install a build environment; I used CentOS 4.4 and chose to install all development packages in the build environment. 2. We need to add SquashFS and UnionFS support. Source RPM's for UnionFS and SquashFS can be downloaded here: ftp://ftp.psi.ch/psi/livecd/SRPMS - Install src.rpm's with rpm -i <pacage-name>. - Go to /usr/src/redhat/SPECS/ - Run command $ rpmbuild -ba –target=i686 unionfs.spec - Run command $ rpmbuild -ba –target=i686 squashfts.spec This will build the driver for the running kernel. If you are running a different kernel look in the .spec files to se how you can build for a different kernel. Now install the rpm's we just built. $ cd /usr/src/redhat/RPMS/i686 $ rpm -Uhv kernel-module-squashfs-<kernel-release>.sl4.psi.i686.rpm $ rpm -Uhv squashfs-3.1.2-1.sl4.psi.i686.rpm $ rpm -Uhv –nodeps unionfs-1.1.5-2.sl4.psi.i686.rpm $ rpm -Uhv kernel-module-unionfs-<kernel-release>.sl4.psi.i686.rpm NOTE: The kernel-module-unionfs package and the unionfs package is dependen of each other so we get a “chicken or the egg” situation. Just install one of the packages with the –nodeps options, then install the other package afterwards. 3. We need to build openipmi drivers for OMSA. Install DKMS $ rpm -i dkms-2.0.13-1.noarch.rpm $ rpm -i openipmi-33.13.RHEL4-1dkms.noarch.rpm $ dkms mkrpm -m openipmi -v 33.13.RHEL4 An rpm package with module built for your running kernel is created in /usr/src/redhat/RPMS/noarch/. 5. Creat another installation of CentOS on a nother system, or a dual boot environment. 6. Install dkms and openipmi drivers using the rpm created previously in the build environment. 7. Installed the following software in the LiveCD environment. OMSA 5.1 (OM_5.1_ManNode_LIN_A00.tar.gz) OMSA Storage patch. (srvadmin-storage-5.1.0-392.i386.rpm) Dell PowerEdge Diagnostics (dell-pediags-linux-2.7.0.193-A01.tar.gz) Dell SAS RAID Storage Manager (SSM_Linux_1.18-00.tar.gz) 8. To make networking work on all systems We need to edit the following file: /etc/sysconfig/network-scripts/ifcfg-eth0 Remove the line with the MAC address. (I also created ifcfg-ethX files for 3 additional NIC's.) 9. Apply the following patch to rc.sysinit. This will add autoconfiguration of X and a prompt for root's password during boot. (The patch is available in “files” directory.) --- /etc/rc.d/rc.sysinit 2006-11-22 10:08:57.000000000 +0100 +++ /mnt/livecd/etc/rc.d/rc.sysinit 2006-11-30 06:05:01.000000000 +0100 @@ -975,6 +975,16 @@ #} #fi +# Autoconfigure xorg.conf +echo "Autoconfiguring X Windows" +system-config-display --noui --reconfig --set-resolution=1024x768 + +# Ask user to set the root's password +echo "" +echo "Please set the password for root: " +passwd root + + # Let rhgb know that we're leaving rc.sysinit if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then /usr/bin/rhgb-client --sysinit 10. I also commented a lot of /etc/init.d/halt to disable umount during shutdown. See patch file halt.diff in “files” directory. Ugly, but effective… :) 11. Edit /etc/fstab The /etc/fstab file should include only the following: unionfs / unionfs defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 12. Create the initrd (Initial ram drive.) Reboot to the build environment. Creating the initrd
$ dd if=/dev/zero of=initrd BS=1M count=8 $ mke2fs initrd $ mkdir /mnt/loop $ mount -o loop initrd /mnt/loop
$ mkdir etc dev lib bin proc new cdrom static dynamic union $ touch linuxrc $ chmod +x linuxrc $ touch etc/mtab $ touch etc/fstab
cat chroot insmod mkdir mount pivot_root sh tar umount usleep To figure out what files should go in /mnt/loop/lib (The initrd /lib directory) use the ldd command. Example: $ ldd /bin/sh Will output: linux-gate.so.1 => (0xffffe000) libreadline.so.5 => /lib/libreadline.so.5 (0xb7f72000) libhistory.so.5 => /lib/libhistory.so.5 (0xb7f6b000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7f33000) libdl.so.2 => /lib/libdl.so.2 (0xb7f2f000) libc.so.6 => /lib/libc.so.6 (0xb7e42000) /lib/ld-linux.so.2 (0xb7fad000) So, sh need the above list of libraries to run, copy them into place. NOTE! Ignore linux-gate.so.1 In addition to this wee need to copy our unionfs drive module and the modules.dep file into /lib $ cp /lib/modules/'uname -r'/kernel/fs/unionfs.ko /mnt/loop/lib $ cp /lib/modules/'uname -r'/kernel/fs/squashfs.ko /mnt/loop/lib $ cp /lib/modules/'uname -r'/kernel/drivers/block/loop.ko /mnt/loop/lib $ cp /lib/modules/<kernel>/modules.dep /mnt/loop/lib Populate the /dev directory in our initial ram disk: $ mknod /mnt/loop/dev/console c 5 1 $ mknod /mnt/loop/dev/null c 1 3 $ mknod /mnt/loop/dev/hda b 3 0 $ mknod /mnt/loop/dev/hdb b 3 64 $ mknod /mnt/loop/dev/hdc b 22 0 $ mknod /mnt/loop/dev/hdd b 22 64 $ mknod /mnt/loop/dev/scd0 b 11 0 $ mknod /mnt/loop/dev/scd1 b 11 1 $ mknod /mnt/loop/dev/scd2 b 11 2 $ mknod /mnt/loop/dev/scd3 b 11 3 $ mknod /mnt/loop/dev/sda b 8 0 $ mknod /mnt/loop/dev/sdb b 8 16 $ mknod /mnt/loop/dev/sdc b 8 32 $ mknod /mnt/loop/dev/sdd b 8 48 $ mknod /mnt/loop/dev/sde b 8 64 $ mknod /mnt/loop/dev/sdf b 8 80 $ mknod /mnt/loop/dev/tty c 4 0 $ mknod /mnt/loop/dev/loop0 b 7 0 Create/Edit the linuxrc script that will find the CD, mount the file systems and execute init in the end: #!/bin/sh export PATH=/bin echo "Wait 5 seconds for slower USB CD-ROM devices to be detected..." for x in 1 2 3 4 5 do usleep 1000000 echo -n " $x" done echo "" for x in hda hdb hdc hdd sda sdb sdc sdd sde sdf scd0 scd1 scd2 scd3 do mount -t iso9660 /dev/${x} /cdrom if [ "$?" == "0" ] then CDROM=${x} break fi done if [ "${CDROM}" == "" ] then echo "FATAL --- LIVECD NOT FOUND" exec /bin/sh exit fi echo "LiveCD found in /dev/${CDROM}" insmod /lib/loop.ko insmod /lib/squashfs.ko insmod /lib/unionfs.ko mount -t squashfs -o loop /cdrom/livecd.squashfs /static mount -t tmpfs -o size=300M none /dynamic mount -t unionfs -o dirs=/dynamic=rw:/static=ro unionfs /union cd /union /bin/pivot_root . initrd mount --move /initrd/dynamic /mnt/dynamic mount --move /initrd/static /mnt/static mount --move /initrd/cdrom /mnt/cdrom mount -t tmpfs -o size=50M none /tmp mount -t proc none /proc cat /proc/mounts > /etc/mtab umount /proc exec /usr/sbin/chroot . /bin/sh <<- EOF >dev/console umount /initrd echo "Startng init!" exec /sbin/init EOF Finally we need to unmount the initrd, and compress it with gzip. $ ummount /mnt/loop $ gzip initrd 13. We need to copy out bzImage, ISOLINUX and initrd into what will be the BOOT directory on the CD $ mkdir boot $ mkdir boot/isolinux $ cp <path-to-isolinux.bin> boot/isolinux/ $ touch boot/isolinux/isolinux.cfg $ cp initrd.gz boot/isolinux/ $ cp /boot/'uname -r' boot/isolinux/vmlinuz 14. Edit the isolinux.cfg file: timeout 1 default Linux label Linux kernel vmlinuz append initrd=initrd.gz init=/linuxrc root=/dev/ram0 15. Preparing the CDROOT directory $ mkdir cdroot $ cp -a boot cdroot/ 16. Before we create the squashfs filesystem we need to populate /dev on the LiveCD install. mount /dev/(s/h)dXX /mnt/livecd tar xvzf dev.tar.gz -C /mnt/livecd (dev.tar.gz is available in the “files” folder.) 17. Creating the SquashFS file system $ cd cdroot/ $ mksquashfs /mnt/livecd livecd.squashfs $ cd .. 18. Create a bootable CD ISO image using mkisofs $ mkisofs -R -b boot/isolinux/isolinux.bin -no-emul-boot -boot-load-size \ 4 -boot-info-table -c boot/isolinux/boot.cat -iso-level 3 -o livecd.iso cdroot/ Once this ISO I created it is time to burn it to a CD and test it. FilesLinks |