Lamar Owen wrote:
On Saturday, June 11, 2011 01:56:33 PM Les Mikesell wrote:
On 6/11/11 11:54 AM, Lamar Owen wrote:
You should install Revisor, and master your own Live media with EPEL or ATrpms or ELrepo or rpmforge or remi or whatnot packages; it's not that hard.
Is revisor scriptable to the point where people could share their list of repos/packages and anyone could run the script and get an identical (but up to date) iso?
AFAIK, it uses a kickstart file to compose. The docs are on the FedoraProject's pages.
I used livecd-tools package from EPEL and Fedora howto: http://fedoraproject.org/wiki/How_to_create_and_use_a_Live_CD
I took CentOS official LiveCD .ks file and adapted it for desired packages and repos.
I have attached my .ks file. It uses my plnet repository for some extra packages. Also attached is centos-livecd-desktop.ks with only official repositories, so you can compare and see what I have changed.
Ljubomir
lang en_US.UTF-8 keyboard us timezone US/Eastern auth --useshadow --enablemd5 selinux --disabled firewall --enabled repo --name=a-base --baseurl=http://mirror.centos.org/centos/5/os/$basearch repo --name=a-updates --baseurl=http://mirror.centos.org/centos/5/updates/$basearch repo --name=a-extras --baseurl=http://mirror.centos.org/centos/5/extras/$basearch repo --name=a-centosplus --baseurl=http://centos.plnet.rs/mrepo/plnet-centos5-i386/RPMS.centosplus repo --name=a-live --baseurl=http://www.nanotechnologies.qc.ca/propos/linux/centos-live/$basearch/live repo --name=a-epel --baseurl=http://centos.plnet.rs/mrepo/plnet-centos5-i386/RPMS.epel repo --name=a-elrepo --baseurl=http://centos.plnet.rs/mrepo/plnet-centos5-i386/RPMS.elrepo repo --name=a-plnet-downloaded --baseurl=http://rpms.plnet.rs/centos5-i386/RPMS.plnet-downloaded repo --name=a-plnet-releases --baseurl=http://rpms.plnet.rs/centos5-i386/RPMS.plnet-releases repo --name=a-plnet --baseurl=http://rpms.plnet.rs/centos5-i386/RPMS.plnet xconfig --startxonboot part / --size 4096 services --enabled=cups,haldaemon,mcstrans,NetworkManager,portmap,restorecond,mdmonitor,bluetooth,netfs,network --disabled=anacron,auditd,cpuspeed,gpm,hidd,ip6tables,microcode_ctl,nfslock,readahead_early,readahead_later,rpcgssd,rpcidmapd,sshd
%packages syslinux kernel
@admin-tools #packages removed from @admin-tools -sabayon -system-config-kdump #@admin-tools <end of package list>
@base #package added to @base squashfs-tools #packages removed from @base -amtu -bind-utils -ccid -conman -coolkey -crash -dump -ibmasm -iptstate -jwhois -kexec-tools -ksh -lftp -libaio -logwatch -mailcap -nc -nss_db -nss_ldap -oddjob -pax -pkinit-nss -psacct -quota -redhat-lsb -sendmail -specspo -stunnel -talk -tcpdump -tree -yum-updatesd -vixie-cron #@base <end of package list>
@base-x #packages removed from @base-x -bitstream-vera-fonts -linuxwacom -rhgb -vnc-server -xorg-x11-server-Xnest -xorg-x11-twm -xterm #@base-x <end of package list>
@core #packages removed from @core -ed -gnu-efi -libhugetlbfs #@core <end of package list>
@dialup #packages added to @dialup statserial #@dialup <end of package list>
@gnome-desktop #packages added to @gnome-desktop compiz gnome-bluetooth gnome-pilot-conduits gnome-spell gnome-themes #packages removed from @gnome-desktop -esc -eog -gimp-print-utils -gtkhtml3 -gnome-backgrounds -gnome-user-share -gok -nautilus-sendto -orca -sabayon-apply -vino #@gnome-desktop <end of package list>
@graphical-internet #packages added to @graphical-internet gftp pidgin thunderbird xchat #ktorrent #d4x #skype #@graphical-internet <end of package list>
@graphics #packages removed from @graphics -gimp-data-extras -gimp-help #@graphics <end of package list>
@mysql #packages added to @mysql php-mysql #@mysql <end of package list>
@office #packages added to @office #ooo3-en-US #ooo3-sh #packages removed from @office -evolution -evolution-connector -evolution-webcal -openoffice.org-*2.3* #@office <end of package list>
@printing #packages added to @printing bluez-utils-cups #@printing <end of package list>
@sound-and-video #packages added to @sound-and-video #amarok-extras-freeworld #smplayer #packages removed from @sound-and-video -rhythmbox -vorbis-tools #@sound-and-video <end of package list>
@system-tools #packages added to @system-tools nmap-frontend rdesktop tsclient #packages removed from @system-tools -bluez-hcidump -OpenIPMI -openldap-clients -xdelta -zisofs-tools -zsh #@system-tools <end of package list>
@text-internet #packages removed from @text-internet -elinks -fetchmail -mutt -slrn #@text-internet <end of package list>
@web-server #packages removed from @web-server -httpd-manual -tux -webalizer #@web-server <end of package list>
# Other packages we don't want to include in the Live CD -*debuginfo -bind-libs -compat* -exim -gamin-python -nscd -oddjob-libs -procmail -python-ldap -rmt -tclx -yp-tools
# For the x86_64 version, one could want to remove i386 and i686 libs #-*.i386 #-*.i686
# other usefull packages Cluster_Administration-en-US Deployment_Guide-en-US Global_File_System-en-US Virtualization-en-US busybox mailx memtest86+ patch yum-fastestmirror yum-metadata-parser krusader gparted k3b kdiff3 krename yumex gftp fuse-ntfs-3g isomaster system-config-lvm mc #webmin #shorewall ghostscript kmod-nvidia nvidia-x11-drv fglrx* gksu #plnet-centos-bundle #plnet-release madwifi madwifi-kmdl-* #smart
# LiveCD bits to set up the livecd and be able to install # Installation from the livecd requires anaconda >= 11.2.0.66 #anaconda #anaconda-runtime livecd-installer
%post
## locales for the Live CD PRIMARY_LANGUAGE="en" PRIMARY_LOCALE="en_US" SECONDARY_LANGUAGE="fr" SECONDARY_LOCALE="fr_CA"
## default LiveCD user LIVECD_USER="centos"
######################################################################## # Create a sub-script so the output can be captured # Must change "$" to "$" and "`" to "`" to avoid shell quoting ######################################################################## cat > /root/post-install << EOF_post #!/bin/bash
echo ################################################################### echo ## Creating the centos-live init script echo ###################################################################
cat > /etc/rc.d/init.d/centos-live << EOF_initscript #!/bin/bash # # live: Init script for live image # # chkconfig: 345 00 99 # description: Init script for live image.
. /etc/init.d/functions
if ! strstr "\`cat /proc/cmdline\`" liveimg || [ "\$1" != "start" ] || [ -e /.liveimg-configured ] ; then exit 0 fi
exists() { which \$1 >/dev/null 2>&1 || return \$* }
# read some variables out of /proc/cmdline for o in \`cat /proc/cmdline\` ; do case \$o in xdriver=*) xdriver="--set-driver=\${o#xdriver=}" ;; esac done
touch /.liveimg-configured
# mount live image if [ -b /dev/live ]; then mkdir -p /mnt/live mount -o ro /dev/live /mnt/live fi
# enable swaps unless requested otherwise swaps=\`blkid -t TYPE=swap -o device\` if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then for s in \$swaps ; do action "Enabling swap partition \$s" swapon \$s done fi
## fix various bugs and issues # configure X, allowing user to override xdriver exists system-config-display --noui --reconfig --set-depth=24 \$xdriver
# unmute sound card exists alsaunmute 0 2> /dev/null
# turn off firstboot for livecd boots echo "RUN_FIRSTBOOT=NO" > /etc/sysconfig/firstboot
# create a patch for kudzu init script cat > /tmp/kudzu.patch << EOF_kudzupatch --- kudzu.orig 2007-07-27 20:27:03.000000000 -0400 +++ kudzu 2007-07-27 20:27:23.000000000 -0400 @@ -35,6 +35,10 @@ action "" /bin/false fi
+ # Reconfigure the keyboard + . /etc/sysconfig/keyboard + /usr/bin/system-config-keyboard \\\$KEYTABLE 2&> /dev/null + # We don't want to run this on random runlevel changes. touch /var/lock/subsys/kudzu # However, if they did configure X and want runlevel 5, let's EOF_kudzupatch
# patch kudzu init script /usr/bin/patch /etc/rc.d/init.d/kudzu /tmp/kudzu.patch > /dev/null rm -f /tmp/kudzu.patch
# stopgap fix for RH #217966; should be fixed in HAL instead touch /media/.hal-mtab
# workaround clock syncing on shutdown that we don't want (RH #297421) sed -i -e 's/hwclock/no-such-hwclock/g' /etc/rc.d/init.d/halt
# workaround avahi segfault (RH #273301) touch /etc/resolv.conf /sbin/restorecon /etc/resolv.conf
# set the LiveCD hostname sed -i -e 's/HOSTNAME=localhost.localdomain/HOSTNAME=livecd.localdomain/g' /etc/sysconfig/network /bin/hostname livecd.localdomain
## create the LiveCD default user # add default user with no password /usr/sbin/useradd -c "LiveCD default user" $LIVECD_USER /usr/bin/passwd -d $LIVECD_USER > /dev/null # give default user sudo privileges echo "$LIVECD_USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
## configure default user's desktop # set up timed auto-login at 10 seconds sed -i -e 's/[daemon]/[daemon]\nTimedLoginEnable=true\nTimedLogin=$LIVECD_USER\nTimedLoginDelay=10/' /etc/gdm/custom.conf # disable screensaver locking gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-screensaver/lock_enabled false >/dev/null # add documentation shortcuts mkdir -p /home/$LIVECD_USER/Desktop/Documentation cp /usr/share/applications/Cluster_Administration-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Deployment_Guide-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Global_File_System-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Virtualization-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cat > /home/$LIVECD_USER/Desktop/Documentation/Additional_Documentation.desktop << EOF_documentation [Desktop Entry] Name=Additional Documentation Comment=Enterprise Linux Exec=firefox http://www.centos.org/docs/5/ Icon=/usr/share/pixmaps/redhat-web-browser.png Categories=Documentation; Type=Application Encoding=UTF-8 Terminal=false EOF_documentation # add keyboard configuration utility to the desktop cp /usr/share/applications/system-config-keyboard.desktop /home/$LIVECD_USER/Desktop/
CreateDesktopIconHD() { mkdir -p /home/$LIVECD_USER/Desktop >/dev/null
cat > /home/$LIVECD_USER/Desktop/Local\ hard\ drives.desktop << EOF_HDicon [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Link Name=Local hard drives Name[en_US]=Local hard drives Name[fr_CA]=Disques durs locaux URL=/mnt/disc Icon=/usr/share/icons/Bluecurve/48x48/devices/gnome-dev-harddisk.png EOF_HDicon
chmod 755 /home/$LIVECD_USER/Desktop/Local\ hard\ drives.desktop }
CreateDesktopIconLVM() { mkdir -p /home/$LIVECD_USER/Desktop >/dev/null
cat > /home/$LIVECD_USER/Desktop/Local\ logical\ volumes.desktop << EOF_LVMicon [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Link Name=Local logical volumes Name[en_US]=Local logical volumes Name[fr_CA]=Volumes logiques locaux URL=/mnt/lvm Icon=/usr/share/icons/Bluecurve/48x48/devices/gnome-dev-harddisk.png EOF_LVMicon
chmod 755 /home/$LIVECD_USER/Desktop/Local\ logical\ volumes.desktop }
MOUNTOPTION="ro" HARD_DISKS=\`egrep "[sh]d.\$" /proc/partitions | tr -s ' ' | sed 's/^ *//' | cut -d' ' -f4\`
echo "Mounting hard disk partitions... " for DISK in \$HARD_DISKS; do # Get the device and system info from fdisk (but only for fat and linux partitions). FDISK_INFO=\`fdisk -l /dev/\$DISK | tr [A-Z] [a-z] | egrep "fat|linux" | egrep -v "swap|extended|lvm" | sed 's/*//' | tr -s ' ' | tr ' ' ':' | cut -d':' -f1,6-\` for FDISK_ENTRY in \$FDISK_INFO; do PARTITION=\`echo \$FDISK_ENTRY | cut -d':' -f1\` MOUNTPOINT="/mnt/disc/\${PARTITION##/dev/}" mkdir -p \$MOUNTPOINT MOUNTED=FALSE
# get the partition type case \`echo \$FDISK_ENTRY | cut -d':' -f2-\` in *fat*) FSTYPES="vfat" EXTRAOPTIONS=",uid=500";; *) FSTYPES="ext3 ext2" EXTRAOPTIONS="";; esac
# try to mount the partition for FSTYPE in \$FSTYPES; do if mount -o "\${MOUNTOPTION}\${EXTRAOPTIONS}" -t \$FSTYPE \$PARTITION \$MOUNTPOINT &>/dev/null; then echo "\$PARTITION \$MOUNTPOINT \$FSTYPE noauto,\${MOUNTOPTION}\${EXTRAOPTIONS} 0 0" >> /etc/fstab echo -n "\$PARTITION " MOUNTED=TRUE CreateDesktopIconHD fi done [ \$MOUNTED = "FALSE" ] && rmdir \$MOUNTPOINT done done echo
FSTYPES="ext3 ext2"
echo "Scanning for logical volumes..." if ! lvm vgscan 2>&1 | grep "No volume groups"; then echo "Activating logical volumes ..." modprobe dm_mod >/dev/null echo "mkdmnod" | nash --quiet lvm vgchange -ay LOGICAL_VOLUMES=\`lvm lvdisplay -c | sed "s/^ *//" | cut -d: -f1\` if [ ! -z "\$LOGICAL_VOLUMES" ]; then echo "Making device nodes ..." lvm vgmknodes echo -n "Mounting logical volumes ... " for VOLUME_NAME in \$LOGICAL_VOLUMES; do VG_NAME=\`echo \$VOLUME_NAME | cut -d/ -f3\` LV_NAME=\`echo \$VOLUME_NAME | cut -d/ -f4\` MOUNTPOINT="/mnt/lvm/\${VG_NAME}-\${LV_NAME}" mkdir -p \$MOUNTPOINT
MOUNTED=FALSE for FSTYPE in \$FSTYPES; do if mount -o \$MOUNTOPTION -t \$FSTYPE \$VOLUME_NAME \$MOUNTPOINT &>/dev/null; then echo "\$VOLUME_NAME \$MOUNTPOINT \$FSTYPE defaults,\${MOUNTOPTION} 0 0" >> /etc/fstab echo -n "\$VOLUME_NAME " MOUNTED=TRUE CreateDesktopIconLVM break fi done [ \$MOUNTED = FALSE ] && rmdir \$MOUNTPOINT done echo
else echo "No logical volumes found" fi fi
# give back ownership to the default user chown -R $LIVECD_USER:$LIVECD_USER /home/$LIVECD_USER EOF_initscript
chmod 755 /etc/rc.d/init.d/centos-live /sbin/restorecon /etc/rc.d/init.d/centos-live /sbin/chkconfig --add centos-live
echo ################################################################### echo ## Configure the firewall echo ################################################################### cat > /etc/sysconfig/iptables << EOF_iptables # Firewall configuration *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT EOF_iptables
echo ################################################################### echo ## Trim down the LiveCD to save some space echo ################################################################### # remove unneeded initrd file(s) rm -f /boot/initrd* # temporary RPM databases can be removed rm -f /usr/var/lib/rpm/__db.00* # make sure there aren't core files lying around rm -f /core*
# remove files for unsupported languages in various applications (cd /var/lib/scrollkeeper; \ if [ `ls | wc -w` -gt 11 ]; then \ mkdir ../temp_dir; \ mv C $PRIMARY_LANGUAGE $SECONDARY_LANGUAGE index scrollkeeper_docs TOC ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi) (cd /usr/lib/locale; \ if [ `ls | wc -w` -gt 8 ]; then \ mkdir ../temp_dir; \ mv $PRIMARY_LOCALE* $SECONDARY_LOCALE* ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ /usr/sbin/build-locale-archive; \ sync; \ fi) (cd /usr/share/locale; \ if [ `ls | wc -w` -gt 10 ]; then \ mkdir ../temp_dir; \ mv locale.alias ../temp_dir; \ mv $PRIMARY_LANGUAGE $PRIMARY_LOCALE $SECONDARY_LANGUAGE $SECONDARY_LOCALE ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi)
# remove rarely used documentation files (cd /usr/share/doc; \ if find . -maxdepth 1 -mmin -60 >/dev/null; then \ find . -iname changelog* -exec rm -f {} ; ;\ find . -iname changes -exec rm -f {} ; ;\ find . -iname news -exec rm -f {} ; ;\ sync; \ fi)
# remove manual pages for unsupported languages (cd /usr/share/man; \ if [ `ls | wc -w` -gt 16 ]; then \ mkdir ../temp_dir; \ mv man* $PRIMARY_LANGUAGE $SECONDARY_LANGUAGE ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi) EOF_post
/bin/bash -x /root/post-install 2>&1 | tee /root/post-install.log
%post --nochroot
######################################################################## # Create a sub-script so the output can be captured # Must change "$" to "$" and "`" to "`" to avoid shell quoting ######################################################################## cat > /root/postnochroot-install << EOF_postnochroot #!/bin/bash
# add livecd-iso-to-disk utility on the LiveCD # only works on x86, x86_64 if [ "$(uname -i)" = "i386" -o "$(uname -i)" = "x86_64" ]; then if [ ! -d $LIVE_ROOT/LiveOS ]; then mkdir -p $LIVE_ROOT/LiveOS ; fi cp /usr/bin/livecd-iso-to-disk $LIVE_ROOT/LiveOS fi
# customize boot menu entries grep -A4 'label linux0' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/default.txt grep -A2 'label memtest' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/memtest.txt grep -A2 'label local' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/localboot.txt
sed "s/label linux0/label linuxtext0/" $LIVE_ROOT/isolinux/default.txt > $LIVE_ROOT/isolinux/textmode.txt sed -i "s/Boot/Boot (text mode)/" $LIVE_ROOT/isolinux/textmode.txt sed -i "s/liveimg/liveimg 3/" $LIVE_ROOT/isolinux/textmode.txt sed -i "/menu default/d" $LIVE_ROOT/isolinux/textmode.txt
touch $LIVE_ROOT/isolinux/installer.txt if [ -e $INSTALL_ROOT/boot/livecd-installer.img -a -e $INSTALL_ROOT/boot/vmlinuz-installer* ]; then mv $INSTALL_ROOT/boot/livecd-installer.img $LIVE_ROOT/isolinux/install.img mv $INSTALL_ROOT/boot/vmlinuz-installer* $LIVE_ROOT/isolinux/vminst cat > $LIVE_ROOT/isolinux/installer.txt << EOF_installer label installer menu label Network Installation kernel vminst append initrd=install.img text EOF_installer fi
cat $LIVE_ROOT/isolinux/default.txt $LIVE_ROOT/isolinux/memtest.txt $LIVE_ROOT/isolinux/localboot.txt > $LIVE_ROOT/isolinux/current.txt diff $LIVE_ROOT/isolinux/isolinux.cfg $LIVE_ROOT/isolinux/current.txt | sed '/^[0-9][0-9]*/d; s/^. //; /^---$/d' > $LIVE_ROOT/isolinux/cleaned.txt cat $LIVE_ROOT/isolinux/cleaned.txt $LIVE_ROOT/isolinux/default.txt $LIVE_ROOT/isolinux/textmode.txt $LIVE_ROOT/isolinux/installer.txt $LIVE_ROOT/isolinux/memtest.txt $LIVE_ROOT/isolinux/localboot.txt > $LIVE_ROOT/isolinux/isolinux.cfg rm -f $LIVE_ROOT/isolinux/*.txt
EOF_postnochroot
/bin/bash -x /root/postnochroot-install 2>&1 | tee /root/postnochroot-install.log
lang en_US.UTF-8 keyboard us timezone US/Eastern auth --useshadow --enablemd5 selinux --enforcing firewall --enabled repo --name=a-base --baseurl=http://mirror.centos.org/centos/5/os/$basearch repo --name=a-updates --baseurl=http://mirror.centos.org/centos/5/updates/$basearch #repo --name=a-extras --baseurl=http://mirror.centos.org/centos/5/extras/$basearch repo --name=a-live --baseurl=http://www.nanotechnologies.qc.ca/propos/linux/centos-live/$basearch/live xconfig --startxonboot part / --size 4096 services --enabled=cups,haldaemon,mcstrans,NetworkManager,portmap,restorecond --disabled=anacron,auditd,bluetooth,cpuspeed,gpm,hidd,ip6tables,mdmonitor,microcode_ctl,netfs,network,nfslock,readahead_early,readahead_later,rpcgssd,rpcidmapd,sshd
%packages syslinux kernel
@admin-tools #packages removed from @admin-tools -sabayon -system-config-kdump #@admin-tools <end of package list>
@base #package added to @base squashfs-tools #packages removed from @base -amtu -bind-utils -ccid -conman -coolkey -crash -dump -ibmasm -iptstate -jwhois -kexec-tools -ksh -lftp -libaio -logwatch -mailcap -nc -nss_db -nss_ldap -oddjob -pax -pkinit-nss -psacct -quota -redhat-lsb -sendmail -specspo -stunnel -talk -tcpdump -tree -yum-updatesd -vixie-cron #@base <end of package list>
@base-x #packages removed from @base-x -bitstream-vera-fonts -linuxwacom -rhgb -vnc-server -xorg-x11-server-Xnest -xorg-x11-twm -xterm #@base-x <end of package list>
@core #packages removed from @core -ed -gnu-efi -libhugetlbfs #@core <end of package list>
@dialup #packages added to @dialup statserial #@dialup <end of package list>
@gnome-desktop #packages added to @gnome-desktop compiz gnome-bluetooth gnome-pilot-conduits gnome-spell gnome-themes #packages removed from @gnome-desktop -esc -eog -gimp-print-utils -gtkhtml3 -gnome-backgrounds -gnome-user-share -gok -nautilus-sendto -orca -sabayon-apply -vino #@gnome-desktop <end of package list>
@graphical-internet #packages added to @graphical-internet gftp pidgin thunderbird xchat #@graphical-internet <end of package list>
@graphics #packages removed from @graphics -gimp-data-extras -gimp-help #@graphics <end of package list>
@mysql #packages added to @mysql php-mysql #@mysql <end of package list>
@office #packages removed from @office -evolution -evolution-connector -evolution-webcal -openoffice.org-draw -openoffice.org-graphicfilter #@office <end of package list>
@printing #packages added to @printing bluez-utils-cups #@printing <end of package list>
@sound-and-video #packages removed from @sound-and-video -rhythmbox -vorbis-tools #@sound-and-video <end of package list>
@system-tools #packages added to @system-tools nmap-frontend rdesktop tsclient #packages removed from @system-tools -bluez-hcidump -hwbrowser -OpenIPMI -openldap-clients -xdelta -zisofs-tools -zsh #@system-tools <end of package list>
@text-internet #packages removed from @text-internet -elinks -fetchmail -mutt -slrn #@text-internet <end of package list>
@web-server #packages removed from @web-server -httpd-manual -tux -webalizer #@web-server <end of package list>
# Other packages we don't want to include in the Live CD -*debuginfo -bind-libs -compat* -exim -gamin-python -nscd -oddjob-libs -procmail -python-ldap -rmt -tclx -yp-tools
# For the x86_64 version, one could want to remove i386 and i686 libs #-*.i386 #-*.i686
# other usefull packages Cluster_Administration-en-US Deployment_Guide-en-US Global_File_System-en-US Virtualization-en-US busybox mailx memtest86+ patch yum-fastestmirror yum-metadata-parser
# LiveCD bits to set up the livecd and be able to install # Installation from the livecd requires anaconda >= 11.2.0.66 #anaconda #anaconda-runtime livecd-installer
%post
## locales for the Live CD PRIMARY_LANGUAGE="en" PRIMARY_LOCALE="en_US" SECONDARY_LANGUAGE="fr" SECONDARY_LOCALE="fr_CA"
## default LiveCD user LIVECD_USER="centos"
######################################################################## # Create a sub-script so the output can be captured # Must change "$" to "$" and "`" to "`" to avoid shell quoting ######################################################################## cat > /root/post-install << EOF_post #!/bin/bash
echo ################################################################### echo ## Creating the centos-live init script echo ###################################################################
cat > /etc/rc.d/init.d/centos-live << EOF_initscript #!/bin/bash # # live: Init script for live image # # chkconfig: 345 00 99 # description: Init script for live image.
. /etc/init.d/functions
if ! strstr "\`cat /proc/cmdline\`" liveimg || [ "\$1" != "start" ] || [ -e /.liveimg-configured ] ; then exit 0 fi
exists() { which \$1 >/dev/null 2>&1 || return \$* }
# read some variables out of /proc/cmdline for o in \`cat /proc/cmdline\` ; do case \$o in xdriver=*) xdriver="--set-driver=\${o#xdriver=}" ;; esac done
touch /.liveimg-configured
# mount live image if [ -b /dev/live ]; then mkdir -p /mnt/live mount -o ro /dev/live /mnt/live fi
# enable swaps unless requested otherwise swaps=\`blkid -t TYPE=swap -o device\` if ! strstr "\`cat /proc/cmdline\`" noswap -a [ -n "\$swaps" ] ; then for s in \$swaps ; do action "Enabling swap partition \$s" swapon \$s done fi
## fix various bugs and issues # configure X, allowing user to override xdriver exists system-config-display --noui --reconfig --set-depth=24 \$xdriver
# unmute sound card exists alsaunmute 0 2> /dev/null
# turn off firstboot for livecd boots echo "RUN_FIRSTBOOT=NO" > /etc/sysconfig/firstboot
# create a patch for kudzu init script cat > /tmp/kudzu.patch << EOF_kudzupatch --- kudzu.orig 2007-07-27 20:27:03.000000000 -0400 +++ kudzu 2007-07-27 20:27:23.000000000 -0400 @@ -35,6 +35,10 @@ action "" /bin/false fi
+ # Reconfigure the keyboard + . /etc/sysconfig/keyboard + /usr/bin/system-config-keyboard \\\$KEYTABLE 2&> /dev/null + # We don't want to run this on random runlevel changes. touch /var/lock/subsys/kudzu # However, if they did configure X and want runlevel 5, let's EOF_kudzupatch
# patch kudzu init script /usr/bin/patch /etc/rc.d/init.d/kudzu /tmp/kudzu.patch > /dev/null rm -f /tmp/kudzu.patch
# stopgap fix for RH #217966; should be fixed in HAL instead touch /media/.hal-mtab
# workaround clock syncing on shutdown that we don't want (RH #297421) sed -i -e 's/hwclock/no-such-hwclock/g' /etc/rc.d/init.d/halt
# workaround avahi segfault (RH #273301) touch /etc/resolv.conf /sbin/restorecon /etc/resolv.conf
# set the LiveCD hostname sed -i -e 's/HOSTNAME=localhost.localdomain/HOSTNAME=livecd.localdomain/g' /etc/sysconfig/network /bin/hostname livecd.localdomain
## create the LiveCD default user # add default user with no password /usr/sbin/useradd -c "LiveCD default user" $LIVECD_USER /usr/bin/passwd -d $LIVECD_USER > /dev/null # give default user sudo privileges echo "$LIVECD_USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
## configure default user's desktop # set up timed auto-login at 10 seconds sed -i -e 's/[daemon]/[daemon]\nTimedLoginEnable=true\nTimedLogin=$LIVECD_USER\nTimedLoginDelay=10/' /etc/gdm/custom.conf # disable screensaver locking gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-screensaver/lock_enabled false >/dev/null # add documentation shortcuts mkdir -p /home/$LIVECD_USER/Desktop/Documentation cp /usr/share/applications/Cluster_Administration-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Deployment_Guide-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Global_File_System-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cp /usr/share/applications/Virtualization-en-US.desktop /home/$LIVECD_USER/Desktop/Documentation/ cat > /home/$LIVECD_USER/Desktop/Documentation/Additional_Documentation.desktop << EOF_documentation [Desktop Entry] Name=Additional Documentation Comment=Enterprise Linux Exec=firefox http://www.centos.org/docs/5/ Icon=/usr/share/pixmaps/redhat-web-browser.png Categories=Documentation; Type=Application Encoding=UTF-8 Terminal=false EOF_documentation # add keyboard configuration utility to the desktop cp /usr/share/applications/system-config-keyboard.desktop /home/$LIVECD_USER/Desktop/
CreateDesktopIconHD() { mkdir -p /home/$LIVECD_USER/Desktop >/dev/null
cat > /home/$LIVECD_USER/Desktop/Local\ hard\ drives.desktop << EOF_HDicon [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Link Name=Local hard drives Name[en_US]=Local hard drives Name[fr_CA]=Disques durs locaux URL=/mnt/disc Icon=/usr/share/icons/Bluecurve/48x48/devices/gnome-dev-harddisk.png EOF_HDicon
chmod 755 /home/$LIVECD_USER/Desktop/Local\ hard\ drives.desktop }
CreateDesktopIconLVM() { mkdir -p /home/$LIVECD_USER/Desktop >/dev/null
cat > /home/$LIVECD_USER/Desktop/Local\ logical\ volumes.desktop << EOF_LVMicon [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Link Name=Local logical volumes Name[en_US]=Local logical volumes Name[fr_CA]=Volumes logiques locaux URL=/mnt/lvm Icon=/usr/share/icons/Bluecurve/48x48/devices/gnome-dev-harddisk.png EOF_LVMicon
chmod 755 /home/$LIVECD_USER/Desktop/Local\ logical\ volumes.desktop }
MOUNTOPTION="ro" HARD_DISKS=\`egrep "[sh]d.\$" /proc/partitions | tr -s ' ' | sed 's/^ *//' | cut -d' ' -f4\`
echo "Mounting hard disk partitions... " for DISK in \$HARD_DISKS; do # Get the device and system info from fdisk (but only for fat and linux partitions). FDISK_INFO=\`fdisk -l /dev/\$DISK | tr [A-Z] [a-z] | egrep "fat|linux" | egrep -v "swap|extended|lvm" | sed 's/*//' | tr -s ' ' | tr ' ' ':' | cut -d':' -f1,6-\` for FDISK_ENTRY in \$FDISK_INFO; do PARTITION=\`echo \$FDISK_ENTRY | cut -d':' -f1\` MOUNTPOINT="/mnt/disc/\${PARTITION##/dev/}" mkdir -p \$MOUNTPOINT MOUNTED=FALSE
# get the partition type case \`echo \$FDISK_ENTRY | cut -d':' -f2-\` in *fat*) FSTYPES="vfat" EXTRAOPTIONS=",uid=500";; *) FSTYPES="ext3 ext2" EXTRAOPTIONS="";; esac
# try to mount the partition for FSTYPE in \$FSTYPES; do if mount -o "\${MOUNTOPTION}\${EXTRAOPTIONS}" -t \$FSTYPE \$PARTITION \$MOUNTPOINT &>/dev/null; then echo "\$PARTITION \$MOUNTPOINT \$FSTYPE noauto,\${MOUNTOPTION}\${EXTRAOPTIONS} 0 0" >> /etc/fstab echo -n "\$PARTITION " MOUNTED=TRUE CreateDesktopIconHD fi done [ \$MOUNTED = "FALSE" ] && rmdir \$MOUNTPOINT done done echo
FSTYPES="ext3 ext2"
echo "Scanning for logical volumes..." if ! lvm vgscan 2>&1 | grep "No volume groups"; then echo "Activating logical volumes ..." modprobe dm_mod >/dev/null echo "mkdmnod" | nash --quiet lvm vgchange -ay LOGICAL_VOLUMES=\`lvm lvdisplay -c | sed "s/^ *//" | cut -d: -f1\` if [ ! -z "\$LOGICAL_VOLUMES" ]; then echo "Making device nodes ..." lvm vgmknodes echo -n "Mounting logical volumes ... " for VOLUME_NAME in \$LOGICAL_VOLUMES; do VG_NAME=\`echo \$VOLUME_NAME | cut -d/ -f3\` LV_NAME=\`echo \$VOLUME_NAME | cut -d/ -f4\` MOUNTPOINT="/mnt/lvm/\${VG_NAME}-\${LV_NAME}" mkdir -p \$MOUNTPOINT
MOUNTED=FALSE for FSTYPE in \$FSTYPES; do if mount -o \$MOUNTOPTION -t \$FSTYPE \$VOLUME_NAME \$MOUNTPOINT &>/dev/null; then echo "\$VOLUME_NAME \$MOUNTPOINT \$FSTYPE defaults,\${MOUNTOPTION} 0 0" >> /etc/fstab echo -n "\$VOLUME_NAME " MOUNTED=TRUE CreateDesktopIconLVM break fi done [ \$MOUNTED = FALSE ] && rmdir \$MOUNTPOINT done echo
else echo "No logical volumes found" fi fi
# give back ownership to the default user chown -R $LIVECD_USER:$LIVECD_USER /home/$LIVECD_USER EOF_initscript
chmod 755 /etc/rc.d/init.d/centos-live /sbin/restorecon /etc/rc.d/init.d/centos-live /sbin/chkconfig --add centos-live
echo ################################################################### echo ## Configure the firewall echo ################################################################### cat > /etc/sysconfig/iptables << EOF_iptables # Firewall configuration *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT EOF_iptables
echo ################################################################### echo ## Trim down the LiveCD to save some space echo ################################################################### # remove unneeded initrd file(s) rm -f /boot/initrd* # temporary RPM databases can be removed rm -f /usr/var/lib/rpm/__db.00* # make sure there aren't core files lying around rm -f /core*
# remove files for unsupported languages in various applications (cd /var/lib/scrollkeeper; \ if [ `ls | wc -w` -gt 11 ]; then \ mkdir ../temp_dir; \ mv C $PRIMARY_LANGUAGE $SECONDARY_LANGUAGE index scrollkeeper_docs TOC ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi) (cd /usr/lib/locale; \ if [ `ls | wc -w` -gt 8 ]; then \ mkdir ../temp_dir; \ mv $PRIMARY_LOCALE* $SECONDARY_LOCALE* ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ /usr/sbin/build-locale-archive; \ sync; \ fi) (cd /usr/share/locale; \ if [ `ls | wc -w` -gt 10 ]; then \ mkdir ../temp_dir; \ mv locale.alias ../temp_dir; \ mv $PRIMARY_LANGUAGE $PRIMARY_LOCALE $SECONDARY_LANGUAGE $SECONDARY_LOCALE ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi)
# remove rarely used documentation files (cd /usr/share/doc; \ if find . -maxdepth 1 -mmin -60 >/dev/null; then \ find . -iname changelog* -exec rm -f {} ; ;\ find . -iname changes -exec rm -f {} ; ;\ find . -iname news -exec rm -f {} ; ;\ sync; \ fi)
# remove manual pages for unsupported languages (cd /usr/share/man; \ if [ `ls | wc -w` -gt 16 ]; then \ mkdir ../temp_dir; \ mv man* $PRIMARY_LANGUAGE $SECONDARY_LANGUAGE ../temp_dir; \ rm -rf *; mv ../temp_dir/* .; rmdir ../temp_dir; \ sync; \ fi) EOF_post
/bin/bash -x /root/post-install 2>&1 | tee /root/post-install.log
%post --nochroot
######################################################################## # Create a sub-script so the output can be captured # Must change "$" to "$" and "`" to "`" to avoid shell quoting ######################################################################## cat > /root/postnochroot-install << EOF_postnochroot #!/bin/bash
# add livecd-iso-to-disk utility on the LiveCD # only works on x86, x86_64 if [ "$(uname -i)" = "i386" -o "$(uname -i)" = "x86_64" ]; then if [ ! -d $LIVE_ROOT/LiveOS ]; then mkdir -p $LIVE_ROOT/LiveOS ; fi cp /usr/bin/livecd-iso-to-disk $LIVE_ROOT/LiveOS fi
# customize boot menu entries grep -A4 'label linux0' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/default.txt grep -A2 'label memtest' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/memtest.txt grep -A2 'label local' $LIVE_ROOT/isolinux/isolinux.cfg > $LIVE_ROOT/isolinux/localboot.txt
sed "s/label linux0/label linuxtext0/" $LIVE_ROOT/isolinux/default.txt > $LIVE_ROOT/isolinux/textmode.txt sed -i "s/Boot/Boot (text mode)/" $LIVE_ROOT/isolinux/textmode.txt sed -i "s/liveimg/liveimg 3/" $LIVE_ROOT/isolinux/textmode.txt sed -i "/menu default/d" $LIVE_ROOT/isolinux/textmode.txt
touch $LIVE_ROOT/isolinux/installer.txt if [ -e $INSTALL_ROOT/boot/livecd-installer.img -a -e $INSTALL_ROOT/boot/vmlinuz-installer* ]; then mv $INSTALL_ROOT/boot/livecd-installer.img $LIVE_ROOT/isolinux/install.img mv $INSTALL_ROOT/boot/vmlinuz-installer* $LIVE_ROOT/isolinux/vminst cat > $LIVE_ROOT/isolinux/installer.txt << EOF_installer label installer menu label Network Installation kernel vminst append initrd=install.img text EOF_installer fi
cat $LIVE_ROOT/isolinux/default.txt $LIVE_ROOT/isolinux/memtest.txt $LIVE_ROOT/isolinux/localboot.txt > $LIVE_ROOT/isolinux/current.txt diff $LIVE_ROOT/isolinux/isolinux.cfg $LIVE_ROOT/isolinux/current.txt | sed '/^[0-9][0-9]*/d; s/^. //; /^---$/d' > $LIVE_ROOT/isolinux/cleaned.txt cat $LIVE_ROOT/isolinux/cleaned.txt $LIVE_ROOT/isolinux/default.txt $LIVE_ROOT/isolinux/textmode.txt $LIVE_ROOT/isolinux/installer.txt $LIVE_ROOT/isolinux/memtest.txt $LIVE_ROOT/isolinux/localboot.txt > $LIVE_ROOT/isolinux/isolinux.cfg rm -f $LIVE_ROOT/isolinux/*.txt
EOF_postnochroot
/bin/bash -x /root/postnochroot-install 2>&1 | tee /root/postnochroot-install.log