X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=appliance%2Fmake.sh.in;h=a132ed88872e2bf4a44c3684f4d6bc74d1de089e;hp=9c52830b5b56a858eccb2ffc102ab2bf6f211cb6;hb=a11cb4ac38cf245472d93e8df13c5ac630b883a7;hpb=3ed322c7c8f1b7342af095ba6a8fb60a8e9a076b;ds=sidebyside diff --git a/appliance/make.sh.in b/appliance/make.sh.in index 9c52830..a132ed8 100755 --- a/appliance/make.sh.in +++ b/appliance/make.sh.in @@ -21,162 +21,128 @@ unset CDPATH set -e - -cd @top_builddir@ - -modules=" --i augeas-libs --i bash --i binutils --i coreutils --i dosfstools --i file --i grub --i iputils --i kernel --i lvm2 --i MAKEDEV --i module-init-tools --i net-tools --i ntfs-3g --i ntfsprogs --i procps --i strace --i util-linux-ng --i zerofree -" - -# 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. -@FEBOOTSTRAP@ $modules -u @UPDATES@ @REPO@ initramfs @MIRROR@ - -# /sysroot is where the guest root filesystem will be mounted. -@FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /sysroot - -# Create /tmp if it is missing. -@FEBOOTSTRAP_RUN@ initramfs -- mkdir -p --mode=0777 /tmp - -# Nuke some stuff. The kernel pulls mkinitrd and plymouth which pulls in -# all of Python. Sheez. -(cd initramfs && find -name '*plymouth*' -print0) | - xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf -(cd initramfs && find -name '*python*' -print0) | - xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm -rf - -# In Fedora >= 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 - -# Modules take up nearly half of the image. It's a rough guess that -# we don't need many drivers (which take up most of the space). -(cd initramfs && find lib/modules/*/kernel \ - -name '*.ko' \ - -a ! -name 'virtio.ko' \ - -a ! -name 'virtio_net.ko' \ - -a ! -name 'virtio_pci.ko' \ - -a ! -name 'virtio_ring.ko' \ - -a ! -name 'ext2.ko' \ - -a ! -name 'ext3.ko' \ - -a ! -name 'ext4*.ko' \ - -a ! -name 'crc16.ko' \ - -a ! -name 'jbd.ko' \ - -a ! -name 'jbd2.ko' \ - -a ! -name 'fuse.ko' \ - -a ! -name 'vfat.ko' \ - -a ! -name 'fat.ko' \ - -a ! -name 'udf.ko' \ - -a ! -name 'crc_itu_t.ko' \ - -a ! -name 'nls_utf8.ko' \ - -a ! -name 'dm-*.ko' \ - -a ! -name 'cramfs.ko' \ - -a ! -name 'squashfs.ko' \ - -a ! -name 'hfsplus.ko' \ - -a ! -name 'ufs.ko' \ - -a ! -name 'exportfs.ko' \ - -a ! -name 'xfs.ko' \ - -a -print0 ) | - xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm - -# Pull the kernel out into the current directory. We don't want it in -# the initramfs image. -cp initramfs/boot/vmlinuz* $koutput -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf boot - -# Minimize the image. -@FEBOOTSTRAP_MINIMIZE@ initramfs - -# Add some missing configuration files. -if [ ! -f initramfs/etc/hosts ]; then - cat > hosts.new <<'__EOF__' -127.0.0.1 guestfs localhost.localdomain localhost -::1 localhost6.localdomain6 localhost6 +set -x + +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 of the potential for disaster + # 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 - -# Create the init script. -cat > init.new <<'__EOF__' -#!/bin/sh -echo Starting /init script ... -PATH=/sbin:/usr/sbin:$PATH -mount -t tmpfs none /dev -mkdir /dev/pts /dev/shm /dev/mapper -MAKEDEV mem null port zero core full ram tty console fd \ - hda hdb hdc hdd sda sdb sdc sdd loop sd -mknod /dev/ptmx c 5 2; chmod 0666 /dev/ptmx -mknod /dev/random c 1 8; chmod 0666 /dev/random -mknod /dev/urandom c 1 9; chmod 0444 /dev/urandom -mount -t proc /proc /proc -mount -t sysfs /sys /sys -mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts -ln -sf /proc/self/fd/0 /dev/stdin -ln -sf /proc/self/fd/1 /dev/stdout -ln -sf /proc/self/fd/2 /dev/stderr -modprobe virtio_pci -modprobe virtio_net -modprobe dm_mod ||: -/sbin/ifconfig lo 127.0.0.1 -/sbin/ifconfig eth0 10.0.2.10 -/sbin/route add default gw 10.0.2.2 -lvm vgscan --ignorelockingfailure -lvm vgchange -ay --ignorelockingfailure -if grep -sq guestfs_rescue=1 /proc/cmdline; then - bash -i -fi -exec guestfsd -f -__EOF__ + 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 -@FEBOOTSTRAP_INSTALL@ initramfs init.new /init 0755 root.root -rm init.new + ls -lh $koutput -# 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 + # Now directly run the update script to copy/update the daemon in the + # initramfs. + cd appliance && bash update.sh -ls -lh $koutput +elif [ "@DIST@" = "DEBIAN" ]; then + cd @top_builddir@/appliance + debirf make -n debian + mkdir -p @top_builddir@/initramfs + touch @top_builddir@/initramfs/fakeroot.log +fi -# Now directly run the update script to copy/update the daemon in the -# initramfs. -cd appliance && bash update.sh