X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=appliance%2Fmake.sh.in;h=10609da61614adc47594dd24ff472887b6b12a69;hp=b39b13d6dfb155b0ab309066ab44dd89925a3557;hb=b5516dc9d4a1418ad683aa7f046aa7fa30152721;hpb=2e25c4255746b144932f84b7b6671d7d03f52278 diff --git a/appliance/make.sh.in b/appliance/make.sh.in index b39b13d..10609da 100755 --- a/appliance/make.sh.in +++ b/appliance/make.sh.in @@ -1,6 +1,6 @@ #!/bin/bash - # @configure_input@ -# Copyright (C) 2009 Red Hat Inc. +# Copyright (C) 2009-2010 Red Hat Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,164 +16,50 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# This is called from the Makefile to build the initramfs. - 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 +# XXX Distro-dependent in future. +excludes="--exclude ^perl --exclude ^python --exclude ^fedora-logos --exclude ^redhat-logos --exclude ^dracut --exclude ^upstart --exclude ^plymouth --exclude ^systemd --exclude ^linux-firmware --exclude ^kbd-misc" -# Anaconda? JPEG images? -@FEBOOTSTRAP_RUN@ initramfs -- rm -rf /usr/lib/anaconda-runtime +# For Debian: +excludes="$excludes --exclude ^file-rc" -# 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 -__EOF__ - @FEBOOTSTRAP_INSTALL@ initramfs hosts.new /etc/hosts 0644 root.root - rm hosts.new +# Run febootstrap on the package list. +if [ "x@FEBOOTSTRAP_YUM_CONFIG@" != "xno" ]; then + extra="--yum-config @FEBOOTSTRAP_YUM_CONFIG@" fi -if [ ! -f initramfs/etc/fstab ]; then - @FEBOOTSTRAP_RUN@ initramfs -- touch /etc/fstab +echo @FEBOOTSTRAP@ -v -o supermin.d --names $(< packagelist ) $excludes $extra +@FEBOOTSTRAP@ -v -o supermin.d --names $(< packagelist ) $excludes $extra + +# Remove some things that we don't want in the appliance. This is +# copied from the old febootstrap-minimize. However minimization is +# not so important now that we are caching the appliance. +< supermin.d/hostfiles \ +grep -v '^/usr/lib/locale' | +grep -v '^/usr/share/locale' | +grep -v '^/usr/lib/gconv' | +grep -v '^/usr/lib64/gconv' | +grep -v '^/usr/bin/localedef' | +grep -v '^/usr/sbin/build-locale-archive' | +grep -v '^/usr/share/man/' | +grep -v '^/usr/share/doc/' | +grep -v '^/usr/share/info/' | +grep -v '^/usr/share/gnome/help/' | +grep -v '^/usr/share/cracklib/' | +grep -v '^/usr/share/i18n/' > supermin.d/hostfiles-t + +# XXX resolv.conf? The old script had: +# echo nameserver 169.254.2.3 > resolv.conf +if ! grep -q /etc/resolv.conf supermin.d/hostfiles-t; then + echo /etc/resolv.conf >> supermin.d/hostfiles-t 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 +# Include any Augeas lenses from the host. +if grep -q /usr/share/augeas/lenses supermin.d/hostfiles-t; then + echo "/usr/share/augeas/lenses/*.aug" >> supermin.d/hostfiles-t fi -exec guestfsd -f -__EOF__ - -@FEBOOTSTRAP_INSTALL@ initramfs init.new /init 0755 root.root -rm init.new - -# 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 - -# 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 -ls -lh $koutput +mv supermin.d/hostfiles-t supermin.d/hostfiles