From 9f19ddd0c42a509018340a82bd7dc13a0996e6f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Guido=20G=C3=BCnther?= Date: Tue, 30 Jun 2009 15:01:14 +0200 Subject: [PATCH] Build Debian based appliance using debirf --- appliance/make.sh.in | 236 +++++++++++++++++++++++++------------------------ appliance/update.sh.in | 26 ++++-- 2 files changed, 139 insertions(+), 123 deletions(-) diff --git a/appliance/make.sh.in b/appliance/make.sh.in index 637bd07..e98c325 100755 --- a/appliance/make.sh.in +++ b/appliance/make.sh.in @@ -22,125 +22,131 @@ unset CDPATH set -e -cd @top_builddir@ - -# Decide on names for the final output. These have to match Makefile.am. -output=appliance/initramfs.@REPO@.@host_cpu@.img -koutput=appliance/vmlinuz.@REPO@.@host_cpu@ -rm -f $output -rm -f $koutput - -# Create the basic initramfs. -exec 5= 11, it pulls in all of Perl from somewhere. Nuke from orbit. -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/perl5 /usr/lib64/perl5 - -# Anaconda? JPEG images? -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/anaconda-runtime - -# Don't need any firmware. -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/firmware - -# Don't need any keyboard maps. -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/kbd - -# Remove anything in home directory. Because this is potentially -# liable to monstrous fuck-ups, we don't put a slash before 'home'. -(cd initramfs && echo home/*) | - xargs @FEBOOTSTRAP_RUN@ initramfs -- rm -rf - -# Remove /var/lib/yum stuff. -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /var/lib/yum - -# Remove some unreadable binaries which are incompatible with -# the supermin appliance. Since these binaries can't be read -# from the host filesystem, they generate warnings like: -# cpio: ./usr/bin/chfn: Cannot open: Permission denied -# These binaries are not needed for operation of the appliance. -@FEBOOTSTRAP_RUN@ initramfs -- rm -f \ - /usr/bin/chfn \ - /usr/bin/chsh \ - /usr/libexec/pt_chown \ - /usr/sbin/groupdel \ - /usr/sbin/groupadd \ - /usr/sbin/useradd \ - /usr/sbin/tzdata-update \ - /usr/sbin/userdel \ - /usr/sbin/usermod \ - /usr/sbin/groupmod \ - /usr/sbin/groupmems \ - /sbin/unix_update \ - $(cd initramfs && echo usr/sbin/glibc_post_upgrade.*) - -# Kernel modules take up nearly half of the image. Only include ones -# which are on the whitelist. -exec 5 hosts.new <<'__EOF__' -127.0.0.1 guestfs localhost.localdomain localhost -::1 localhost6.localdomain6 localhost6 +if [ "@DIST@" = "REDHAT" ]; then + cd @top_builddir@ + # Decide on names for the final output. These have to match Makefile.am. + output=appliance/initramfs.@REPO@.@host_cpu@.img + koutput=appliance/vmlinuz.@REPO@.@host_cpu@ + rm -f $output + rm -f $koutput + + # Create the basic initramfs. + exec 5= 11, it pulls in all of Perl from somewhere. Nuke from orbit. + @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/perl5 /usr/lib64/perl5 + + # Anaconda? JPEG images? + @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/anaconda-runtime + + # Don't need any firmware. + @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/firmware + + # Don't need any keyboard maps. + @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /lib/kbd + + # Remove anything in home directory. Because this is potentially + # liable to monstrous fuck-ups, we don't put a slash before 'home'. + (cd initramfs && echo home/*) | + xargs @FEBOOTSTRAP_RUN@ initramfs -- rm -rf + + # Remove /var/lib/yum stuff. + @FEBOOTSTRAP_RUN@ initramfs -- rm -rf /var/lib/yum + + # Remove some unreadable binaries which are incompatible with + # the supermin appliance. Since these binaries can't be read + # from the host filesystem, they generate warnings like: + # cpio: ./usr/bin/chfn: Cannot open: Permission denied + # These binaries are not needed for operation of the appliance. + @FEBOOTSTRAP_RUN@ initramfs -- rm -f \ + /usr/bin/chfn \ + /usr/bin/chsh \ + /usr/libexec/pt_chown \ + /usr/sbin/groupdel \ + /usr/sbin/groupadd \ + /usr/sbin/useradd \ + /usr/sbin/tzdata-update \ + /usr/sbin/userdel \ + /usr/sbin/usermod \ + /usr/sbin/groupmod \ + /usr/sbin/groupmems \ + /sbin/unix_update \ + $(cd initramfs && echo usr/sbin/glibc_post_upgrade.*) + + # Kernel modules take up nearly half of the image. Only include ones + # which are on the whitelist. + exec 5 hosts.new <<'__EOF__' + 127.0.0.1 guestfs localhost.localdomain localhost + ::1 localhost6.localdomain6 localhost6 __EOF__ - @FEBOOTSTRAP_INSTALL@ initramfs hosts.new /etc/hosts 0644 root.root - rm hosts.new -fi + @FEBOOTSTRAP_INSTALL@ initramfs hosts.new /etc/hosts 0644 root.root + rm hosts.new + fi -if [ ! -f initramfs/etc/fstab ]; then - @FEBOOTSTRAP_RUN@ initramfs -- touch /etc/fstab -fi + if [ ! -f initramfs/etc/fstab ]; then + @FEBOOTSTRAP_RUN@ initramfs -- touch /etc/fstab + fi + + echo nameserver 10.0.2.3 > resolv.conf.new + @FEBOOTSTRAP_INSTALL@ initramfs resolv.conf.new /etc/resolv.conf 0644 root.root + rm resolv.conf.new -echo nameserver 10.0.2.3 > resolv.conf.new -@FEBOOTSTRAP_INSTALL@ initramfs resolv.conf.new /etc/resolv.conf 0644 root.root -rm resolv.conf.new + # Create the init script. + @FEBOOTSTRAP_INSTALL@ initramfs appliance/init /init 0755 root.root -# Create the init script. -@FEBOOTSTRAP_INSTALL@ initramfs appliance/init /init 0755 root.root + # Just in case the kernel isn't looking for /init, make /sbin/init + # be our script, not the real init. + #@FEBOOTSTRAP_RUN@ initramfs -- ln -f /init /sbin/init -# Just in case the kernel isn't looking for /init, make /sbin/init -# be our script, not the real init. -#@FEBOOTSTRAP_RUN@ initramfs -- ln -f /init /sbin/init + ls -lh $koutput -ls -lh $koutput + # Now directly run the update script to copy/update the daemon in the + # initramfs. + cd appliance && bash update.sh + +elif [ "@DIST@" = "DEBIAN" ]; then + cd @top_builddir@/appliance + debirf make -n debian +fi -# Now directly run the update script to copy/update the daemon in the -# initramfs. -cd appliance && bash update.sh diff --git a/appliance/update.sh.in b/appliance/update.sh.in index 3b779f8..4fbd651 100755 --- a/appliance/update.sh.in +++ b/appliance/update.sh.in @@ -23,14 +23,24 @@ unset CDPATH set -e -cd @top_builddir@ +if [ "@DIST@" = "REDHAT" ]; then + cd @top_builddir@ + output=appliance/initramfs.@REPO@.@host_cpu@.img -output=appliance/initramfs.@REPO@.@host_cpu@.img + # Copy the daemon into the filesystem. + @FEBOOTSTRAP_INSTALL@ initramfs daemon/guestfsd /sbin/guestfsd 0755 root.root -# Copy the daemon into the filesystem. -@FEBOOTSTRAP_INSTALL@ initramfs daemon/guestfsd /sbin/guestfsd 0755 root.root + # Generate final image. + @FEBOOTSTRAP_TO_INITRAMFS@ initramfs > $output-t + mv $output-t $output + ls -lh $output +elif [ "@DIST@" = "DEBIAN" ]; then + cd @top_builddir@/appliance + + output=initramfs.@REPO@.@host_cpu@.img + vmlinuz=vmlinuz.@REPO@.@host_cpu@ + + ln -sf debian/debirf-libguestfs_@REPO@*.cgz $output + ln -sf debian/vmlinuz-* $vmlinuz +fi -# Generate final image. -@FEBOOTSTRAP_TO_INITRAMFS@ initramfs > $output-t -mv $output-t $output -ls -lh $output -- 1.8.3.1