lorax/rewrite/orig/scripts/upd-instroot

1031 lines
27 KiB
Plaintext
Raw Normal View History

#!/bin/bash
#
# upd-instroot
#
# Copyright (C) 2007, 2008 Red Hat, Inc. All rights reserved.
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
ORIGDIR=`pwd`
DEBUG=""
ARCH=`uname -m`
while [ $# -gt 0 ]; do
case $1 in
--debug)
DEBUG="--debug"
shift
;;
--arch)
ARCH=$2
shift; shift
;;
--imgdir)
DEST=$2
shift; shift
;;
# a filesystem tree to use as updates. could be the output
# of 'make install' from anaconda...
--updates)
UPDATES=$2
shift; shift
;;
--nogr)
echo "*** DeprecationWarning: ignoring --nogr option." >&2
shift
;;
--mindir)
echo "*** DeprecationWarning: ignoring --mindir option." >&2
shift; shift
;;
--stg2dir)
echo "*** DeprecationWarning: please use --imgdir instead of --stg2dir." >&2
shift; shift
;;
*)
yumconf=$1
shift
;;
esac
done
if [ -z "$yumconf" ]; then
echo "upd-instroot: updates instimage from a Red Hat RPMS directory"
echo "usage: $0 [--debug] [--arch arch] [--imgdir imgdir] [yumconf]"
exit 1
fi
if [ $ARCH = x86_64 -o $ARCH = s390x -o $ARCH = ppc64 ]; then
LIBDIR=lib64
else
LIBDIR=lib
fi
if [ -z "$DEST" ]; then
DEST=`mktemp -d ${TMPDIR:-/tmp}/dest.XXXXXX`
fi
if [ ! -f $yumconf ]; then
echo "Unable to find yum repo information!"
exit 1
fi
. $(dirname $0)/buildinstall.functions
expandPackageSet() {
YUMCONF=$1
YUMDIR=$2
RPMS=$3
PKGDEST=$4
KEEPFILES=$5
[ -d $PKGDEST ] || die "ERROR: directory missing: $PKGDEST"
if [ -z "$DEBUG" ]; then outlvl="--quiet" ; else outlvl="--verbose"; fi
yum $outlvl -c $YUMCONF -y --installroot=$YUMDIR install $RPMS 2>&1 || die "ERROR: could not install packages"
if [ -n "$UPDATES" ]; then
(cd $UPDATES; find) | (cd $UPDATES ; /bin/cpio --quiet -pmdu $YUMDIR)
fi
# figure out the theme to keep
if [ -f $YUMDIR/etc/gtk-2.0/gtkrc ]; then
gtktheme=$(grep "gtk-theme-name" $YUMDIR/etc/gtk-2.0/gtkrc | awk {'print $3;'} | sed -e 's/"//g')
echo "usr/share/themes/$gtktheme" >> $KEEPFILES
# find gtk engine needed
for engine in `grep engine $YUMDIR/usr/share/themes/$gtktheme/gtk-2.0/gtkrc | awk {'print $2;'} | sed -e 's/"//g' | sort -u` ; do
echo "usr/$LIBDIR/gtk-2.0/*/engines/*$engine*" >> $KEEPFILES
done
theme=$(grep "gtk-icon-theme-name" $YUMDIR/etc/gtk-2.0/gtkrc | awk {'print $3;'} | sed -e 's/"//g')
while [ -n "$theme" ]; do
echo "usr/share/icons/$theme" >> $KEEPFILES
theme=$(grep Inherits $YUMDIR/usr/share/icons/$theme/index.theme | cut -d = -f 2)
done
fi
echo `date` "Installing files"
pushd $YUMDIR >/dev/null
cat $KEEPFILES | while read spec ; do
#Pull off path
path=`echo "$spec" | sed 's,\([^[*\?]*\)/.*,\1,'`
for filespec in `find ./$path -path "./$spec" 2> /dev/null` ; do
if [ ! -e $filespec ]; then
continue
elif [ ! -d $filespec ]; then
instFile $filespec $PKGDEST
else
for i in `find $filespec -type f 2> /dev/null` ; do instFile $i $PKGDEST ; done
for i in `find $filespec -type l 2> /dev/null` ; do instFile $i $PKGDEST ; done
for d in `find $filespec -type d 2> /dev/null` ; do instDir $d $PKGDEST ; done
fi
done
done
popd >/dev/null
}
die () {
echo "$@"
echo "Aborting instroot creation..."
exit 1
}
PACKAGES="GConf2 NetworkManager ORBit2 PolicyKit VLGothic-fonts acl anaconda
anaconda-yum-plugins at-spi atk attr audit-libs bash bitmap-fonts-cjk
booty busybox-anaconda bzip2 bzip2-libs cairo cjkunifonts-ukai
comps-extras coreutils cpio cracklib-dicts cracklib-python
cryptsetup-luks db4 dbus dbus-python dejavu-fonts device-mapper
device-mapper-libs dhclient dhcpv6-client dmapi dmraid dmraid-libs
dogtail dosfstools e2fsprogs e2fsprogs-libs echo-icon-theme
elfutils-libelf expat firstboot fontconfig fonts-arabic fonts-bengali
fonts-chinese fonts-gujarati fonts-hindi fonts-indic fonts-ISO8859-2
fonts-kannada fonts-oriya fonts-punjabi
fonts-sinhala fonts-tamil fonts-telugu freetype gail gdk-pixbuf
gfs2-utils glib2 glibc-common gnome-python2-canvas gnome-python2-gconf
gnome-python2-gtkhtml2 gnome-themes gpm gtk2 gtk2-engines gtkhtml2 hal
hdparm hwdata initscripts iproute iputils iscsi-initiator-utils
jfsutils keyutils-libs krb5-libs libICE libSM libX11 libXau
libXaw libXcursor libXdmcp libXevie libXext libXfixes libXfont libXft
libXi libXinerama libXmu libXpm libXrandr libXrender libXt libXtst
libXxf86misc libacl libart_lgpl libattr libbdevid libbdevid-python
libbonobo libdhcp libdhcp4client libdhcp6client libfontenc libgcc
libglade2 libgnomecanvas libgcrypt libgpg-error libjpeg liblbxutil libnl
libpixman libpng libselinux libselinux-python libsemanage
libsemanage-python libsepol libstdc++ libtermcap libthai libuser
libuser-python libvolume_id libxcb libxkbfile libxml2 lvm2 mdadm
mesa-dri-drivers mkinitrd module-init-tools nash ncurses neon net-tools
newt newt-python nfs-utils nspr nss pam pango parted pciutils pcre
policy policycoreutils popt prelink procps pycairo pygobject2 pygtk2
pygtk2-libglade pykickstart pyparted pyspi python python-bugzilla
python-elementtree python-libs python-pyblock python-sqlite
python-urlgrabber pyxf86config raidtools readline redhat-artwork
reiserfs-utils rhpl rpm rpm-libs rpm-python sed selinux-policy-targeted
setup slang smc-fonts-meera specspo sqlite synaptics system-config-date
system-config-keyboard system-logos system-release taipeifonts
tcp_wrappers ttfonts-bn ttfonts-gu ttfonts-hi ttfonts-ja ttfonts-ko
ttfonts-pa ttfonts-ta ttfonts-zh_CN ttfonts-zh_TW tzdata udev
un-core-fonts-dotum urw-fonts
util-linux-ng vnc-libs vnc-server wpa_supplicant xkeyboard-config
xfsdump xfsprogs xorg-x11 xorg-x11-auth xorg-x11-base
xorg-x11-drivers xorg-x11-font-utils xorg-x11-fonts-100dpi
xorg-x11-fonts-75dpi xorg-x11-fonts-ISO8859-1-75dpi
xorg-x11-fonts-ISO8859-15-75dpi xorg-x11-fonts-ISO8859-2-75dpi
xorg-x11-fonts-ISO8859-9-75dpi xorg-x11-fonts-cyrillic
xorg-x11-fonts-ethiopic xorg-x11-fonts-misc xorg-x11-libs
xorg-x11-libs-data xorg-x11-server-utils xorg-x11-server-Xorg
xorg-x11-xkb-utils xorg-x11-xkbdata xorg-x11-xfs yum yum-fedorakmod
yum-metadata-parser zenity zlib /etc/gtk-2.0/gtkrc"
if [ $ARCH = i386 ]; then
PACKAGES="$PACKAGES glibc.i386 openssl.i386"
else
PACKAGES="$PACKAGES glibc openssl"
fi
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
PACKAGES="$PACKAGES pcmciautils grub"
fi
if [ $ARCH = i386 -o $ARCH = x86_64 -o $ARCH = ia64 ]; then
PACKAGES="$PACKAGES dmidecode efibootmgr"
fi
if [ $ARCH = ia64 ]; then
# XXX this needs to switch to grub at some point...
PACKAGES="$PACKAGES elilo"
fi
if [ $ARCH = s390 -o $ARCH = s390x ]; then
PACKAGES="$PACKAGES s390utils binutils libgcc tcp_wrappers
sed net-tools openssh openssh-server coreutils
login initscripts bash portmap pam
login mount grep modutils gawk
strace xorg-x11-xauth xorg-x11-libs"
fi
if [ $ARCH = ppc -o $ARCH = ppc64 ]; then
PACKAGES="$PACKAGES pcmciautils pdisk yaboot hfsutils"
fi
#
# stuff ONLY included for rescue mode
#
# these packages are combined with the PACKAGES for big stage 2
#
PACKAGESRESCUE="bzip2 bzip2-libs dump libidn
findutils ftp gzip iputils joe krb5-libs less man
modutils mtools mt-st mtr net-tools open smartmontools
openssh openssh-clients pciutils rsh traceroute tar rsync
device-mapper device-mapper-libs dmraid ntfsprogs samba-client
firstaidkit-plugin-all"
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
PACKAGESRESCUE="$PACKAGESRESCUE gpart grub"
fi
#
# add bootloader for particular arch
#
if [ $ARCH = sparc ]; then
PACKAGES="$PACKAGES tilo silo"
fi
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
PACKAGES="$PACKAGES syslinux memtest86+ grub"
fi
if [ $ARCH = alpha ]; then
PACKAGES="$PACKAGES aboot"
fi
if [ $ARCH = ppc ]; then
PACKAGES="$PACKAGES fbset yaboot ppc64-utils"
fi
#
# KEEPFILE is all files to keep from the packages in PACKAGES
#
# The files in this list define the install image used for all installation
# methods.
#
# The rescue mode of anaconda uses these files as well as those defined
# by KEEPFILERESCUE below. The total size of this image should be
# under the size of the miniature CD used for the rescue CD (around 68MB).
#
KEEPFILE=${TMPDIR:-/tmp}/keepfile.$$
cat > $KEEPFILE <<EOF
$LIBDIR/bdevid
$LIBDIR/dbus-1
$LIBDIR/libfreebl3.so
$LIBDIR/libnss3.so
$LIBDIR/libnss_dns*
$LIBDIR/libnss_files*
$LIBDIR/libnssckbi.so
$LIBDIR/libnsspem.so
$LIBDIR/libsmime3.so
$LIBDIR/libsoftokn3.so
$LIBDIR/libssl3.so
bin/bash
bin/cat
bin/chmod
bin/cp
bin/cpio
bin/dbus-daemon
bin/dbus-uuidgen
bin/dd
bin/df
bin/du
bin/fdisk*
bin/ln
bin/ls
bin/mkdir
bin/mount
bin/mv
bin/ps
bin/rm
bin/rpm
bin/sed
bin/touch
bin/umount
boot/*.b
boot/bootlx
boot/efi/EFI/redhat/elilo.efi
boot/efi/EFI/redhat/grub.efi
boot/efika.forth
boot/memtest86*
etc/NetworkManager/nm-system-settings.conf
etc/NetworkManager/dispatcher.d
etc/PolicyKit/*
etc/dbus-1/*
etc/dbus-1/system.d/*
etc/fb.modes
etc/fonts
etc/group
etc/gtk-2.0/gtkrc*
etc/hal
etc/im_palette.pal
etc/imrc
etc/iscsid.conf
etc/man.config
etc/mke2fs.conf
etc/nsswitch.conf
etc/pango
etc/passwd
etc/pcmcia
etc/prelink.conf
etc/protocols
etc/rc.d/init.d/functions
etc/rpm/macros.prelink
etc/selinux/targeted
etc/services
etc/shells
etc/sysconfig/network-scripts/network-functions*
etc/udev
etc/wpa_supplicant/wpa_supplicant.conf
etc/yum.repos.d/*
etc/yum/pluginconf.d/blacklist.conf
etc/yum/pluginconf.d/fedorakmod.conf
etc/yum/pluginconf.d/whiteout.conf
lib/terminfo
lib/udev
sbin/*gfs*
sbin/arping
sbin/badblocks
sbin/busybox.anaconda
sbin/clock
sbin/consoletype
sbin/cryptsetup
sbin/debugfs
sbin/dhclient
sbin/dhclient-script
sbin/dhcp6c
sbin/dosfslabel
sbin/dumpe2fs
sbin/e2fsadm
sbin/e2fsck
sbin/e2label
sbin/fdisk
sbin/fsck
sbin/fsck.ext2
sbin/fsck.ext3
sbin/fsck.jfs
sbin/fsck.reiserfs
sbin/fsck.xfs
sbin/hdparm
sbin/hwclock
sbin/ifconfig
sbin/ip
sbin/iscsiadm
sbin/iscsid
sbin/iscsistart
sbin/jfs_tune
sbin/ldconfig
sbin/lspci
sbin/lvm*
sbin/mdadm
sbin/mkdosfs
sbin/mke2fs
sbin/mkfs.ext2
sbin/mkfs.ext3
sbin/mkfs.gfs2
sbin/mkfs.jfs
sbin/mkfs.msdos
sbin/mkfs.vfat
sbin/mkfs.xfs
sbin/mkraid
sbin/mkreiserfs
sbin/mkswap
sbin/mount.nfs*
sbin/parted
sbin/pcmcia-socket-startup
sbin/pdisk
sbin/probe
sbin/reiserfsck
sbin/reiserfstune
sbin/resize2fs
sbin/setfiles
sbin/sfdisk
sbin/silo
sbin/tune2fs
sbin/udev*
sbin/umount.nfs*
sbin/xfs_repair
sbin/xfsdump
sbin/xfsrestore
usr/$LIBDIR/NetworkManager
usr/$LIBDIR/dri
usr/$LIBDIR/gconv
usr/$LIBDIR/gdk-pixbuf/loaders/*la*
usr/$LIBDIR/gdk-pixbuf/loaders/*png*
usr/$LIBDIR/gdk-pixbuf/loaders/*xpm*
usr/$LIBDIR/gtk-2.0/*/engines/libclearlooks.so
usr/$LIBDIR/gtk-2.0/*/loaders/*la*
usr/$LIBDIR/gtk-2.0/*/loaders/*png*
usr/$LIBDIR/gtk-2.0/*/loaders/*xpm*
usr/$LIBDIR/gtk-2.0/immodules
usr/$LIBDIR/hal
usr/$LIBDIR/libuser/*
usr/$LIBDIR/pango
usr/$LIBDIR/python?.?
usr/$LIBDIR/python?.?/email
usr/$LIBDIR/python?.?/site-packages/*.pth
usr/$LIBDIR/python?.?/site-packages/*selinux*
usr/$LIBDIR/python?.?/site-packages/*sqlite*
usr/$LIBDIR/python?.?/site-packages/_dbus*
usr/$LIBDIR/python?.?/site-packages/bdevid.so
usr/$LIBDIR/python?.?/site-packages/block
usr/$LIBDIR/python?.?/site-packages/cElementTree.so
usr/$LIBDIR/python?.?/site-packages/cairo
usr/$LIBDIR/python?.?/site-packages/firstboot
usr/$LIBDIR/python?.?/site-packages/gtk*
usr/$LIBDIR/python?.?/site-packages/gtk*/gtk
usr/$LIBDIR/python?.?/site-packages/ixf86configmodule.so
usr/$LIBDIR/python?.?/site-packages/libusermodule.so
usr/$LIBDIR/python?.?/site-packages/partedmodule.so
usr/$LIBDIR/python?.?/site-packages/rhpl
usr/$LIBDIR/python?.?/site-packages/rpmmodule.so
usr/$LIBDIR/python?.?/site-packages/xf86config.py
usr/$LIBDIR/python?.?/xml/etree/
usr/$LIBDIR/rpm/rpmpopt
usr/$LIBDIR/libsqlite3.so*
usr/$LIBDIR/xorg/modules
usr/$LIBDIR/xserver/SecurityPolicy
usr/bin/Xorg
usr/bin/Xvnc
usr/bin/chattr*
usr/bin/gdialog
usr/bin/gdk-pixbuf-query-loaders*
usr/bin/gtk-query*
usr/bin/gtk-update-icon-cache*
usr/bin/hattrib
usr/bin/hcopy
usr/bin/head
usr/bin/hformat
usr/bin/hmount
usr/bin/humount
usr/bin/logger
usr/bin/lsattr*
usr/bin/lshal
usr/bin/maketilo
usr/bin/mini-wm
usr/bin/mkzimage
usr/bin/pango*
usr/bin/python
usr/bin/python?.?
usr/bin/reduce-font
usr/bin/setxkbmap
usr/bin/syslinux
usr/bin/tac
usr/bin/tail
usr/bin/tilo
usr/bin/udevinfo
usr/bin/uniq
usr/bin/vncconfig
usr/bin/vncpasswd
usr/bin/xkbcomp
usr/bin/xrandr
usr/bin/zenity
usr/lib/anaconda
usr/lib/anaconda-runtime
usr/lib/anaconda/installclasses
usr/lib/anaconda/iw
usr/lib/anaconda/textw
usr/lib/booty
usr/lib/kernel-wrapper
usr/lib/locale
usr/lib/python?.?/site-packages/bugzilla*
usr/lib/python?.?/site-packages/cracklibmodule.so
usr/lib/python?.?/site-packages/dbus
usr/lib/python?.?/site-packages/dbus_bindings.py*
usr/lib/python?.?/site-packages/elementtree
usr/lib/python?.?/site-packages/iniparse
usr/lib/python?.?/site-packages/pykickstart
usr/lib/python?.?/site-packages/repomd
usr/lib/python?.?/site-packages/rpmUtils
usr/lib/python?.?/site-packages/urlgrabber
usr/lib/python?.?/site-packages/yum
usr/lib/rpm/macros
usr/lib/rpm/rpmpopt
usr/lib/rpm/rpmrc
usr/lib/syslinux
usr/lib/yaboot
usr/lib/yum-plugins/blacklist.py*
usr/lib/yum-plugins/fedorakmod.py*
usr/lib/yum-plugins/whiteout.py*
usr/libexec/convertdb1
usr/libexec/hal*
usr/libexec/nm-crash-logger
usr/libexec/nm-dhcp-client.action
usr/libexec/nm-dispatcher.action
usr/libexec/polkit*
usr/sbin/NetworkManager
usr/sbin/nm-system-settings
usr/sbin/addRamDisk
usr/sbin/anaconda
usr/sbin/chroot
usr/sbin/ddcprobe
usr/sbin/dmidecode
usr/sbin/efibootmgr
usr/sbin/fbset
usr/sbin/genhomedircon
usr/sbin/gptsync
usr/sbin/hald
usr/sbin/load_policy
usr/sbin/lvm
usr/sbin/mkofboot
usr/sbin/ofpath
usr/sbin/prelink
usr/sbin/semodule
usr/sbin/showpart
usr/sbin/smartctl
usr/sbin/wpa_passphrase
usr/sbin/wpa_supplicant
usr/sbin/wrapper
usr/sbin/xfs_admin
usr/sbin/xfs_check
usr/sbin/xfs_copy
usr/sbin/xfs_db
usr/sbin/ybin
usr/share/PolicyKit/policy/*
usr/share/X11/XKeysymDB
usr/share/X11/fonts/TTF/GohaTibebZemen.ttf
usr/share/X11/fonts/misc/6x13*
usr/share/X11/fonts/misc/cursor*
usr/share/X11/fonts/misc/fonts*
usr/share/X11/fonts/misc/olcursor*
usr/share/X11/locale
usr/share/X11/rgb*
usr/share/X11/xkb
usr/share/anaconda
usr/share/anaconda/anaconda.conf
usr/share/cracklib
usr/share/dbus-1
usr/share/fonts/*/lklug.ttf
usr/share/fonts/*/lohit_bn.ttf
usr/share/fonts/*/lohit_gu.ttf
usr/share/fonts/*/lohit_hi.ttf
usr/share/fonts/*/lohit_kn.ttf
usr/share/fonts/*/lohit_or.ttf
usr/share/fonts/*/lohit_pa.ttf
usr/share/fonts/*/lohit_ta.ttf
usr/share/fonts/*/lohit_te.ttf
usr/share/fonts/VLGothic/VL-Gothic-Regular.ttf
usr/share/fonts/cjkunifonts-uming/uming*.ttf
usr/share/fonts/dejavu/DejaVuSans-Bold.ttf
usr/share/fonts/dejavu/DejaVuSans.ttf
usr/share/fonts/dejavu/DejaVuSansMono.ttf
usr/share/fonts/kacst/KacstFarsi.ttf
usr/share/fonts/kacst/KacstQura.ttf
usr/share/fonts/un-core/UnDotum.ttf
usr/share/fonts/smc/Meera*.ttf
usr/share/hal
usr/share/hwdata/MonitorsDB
usr/share/hwdata/pci.ids
usr/share/hwdata/usb.ids
usr/share/hwdata/videoaliases
usr/share/hwdata/videodrivers
usr/share/locale/*/LC_MESSAGES/anaconda.mo
usr/share/locale/*/LC_MESSAGES/gtk20.mo
usr/share/locale/*/LC_MESSAGES/libc.mo
usr/share/locale/*/LC_MESSAGES/parted.mo
usr/share/locale/*/LC_MESSAGES/redhat-dist.mo
usr/share/locale/*/LC_MESSAGES/rhpl.mo
usr/share/locale/*/LC_MESSAGES/system-config-date.mo
usr/share/locale/*/LC_MESSAGES/system-config-keyboard.mo
usr/share/locale/*/LC_MESSAGES/zenity.mo
usr/share/locale/locale.alias
usr/share/pixmaps/comps/*.png
usr/share/pixmaps/gnome-default-dlg.png
usr/share/pixmaps/gnome-error.png
usr/share/pixmaps/gnome-info.png
usr/share/pixmaps/gnome-question.png
usr/share/pixmaps/gnome-warning.png
usr/share/pixmaps/no.xpm
usr/share/pixmaps/yes.xpm
usr/share/ppc64-utils
usr/share/system-config-date
usr/share/system-config-date/zonetab.py*
usr/share/system-config-keyboard
usr/share/terminfo/l/linux
usr/share/terminfo/v/vt100
usr/share/terminfo/v/vt100-nav
usr/share/terminfo/v/vt320
usr/share/terminfo/v/vt320-w
usr/share/terminfo/x/xterm
usr/share/xorg/extramodes
usr/share/xorg/vesamodes
usr/share/zenity
usr/share/zoneinfo/zone.tab
var/cache/hald
var/lib/PolicyKit*
var/lib/dbus
var/lib/hal
var/lib/misc/PolicyKit*
var/run/PolicyKit
var/run/dbus
EOF
if [ $ARCH = s390 -o $ARCH = s390x ]; then
cat >> $KEEPFILE <<EOF
usr/share/terminfo/a/ansi
usr/share/terminfo/d/dumb
usr/share/terminfo/k/kterm
usr/share/terminfo/s/screen
usr/share/terminfo/v/vt102
usr/share/terminfo/v/vt320
usr/share/terminfo/v/vt320-w
usr/share/terminfo/x/xterm
usr/share/terminfo/x/xterm-color
usr/bin/strace
usr/bin/ldd
usr/sbin/chroot
usr/sbin/sshd
usr/sbin/glibc_post_upgrade
sbin/cmsfslst
sbin/cmsfscat
sbin/busybox.anaconda
sbin/ifconfig
sbin/route
sbin/portmap
sbin/fdasd
sbin/dasdfmt
sbin/swapon
sbin/swapoff
sbin/mkswap
bin/bash
bin/dd
bin/gawk
bin/mount
bin/umount
bin/mknod
bin/sleep
bin/login
bin/cat
bin/chmod
bin/sort
lib/modules/ibm
etc/pam.d/sshd
etc/pam.d/other
etc/security/limits.conf
etc/security/pam_env.conf
lib/security
$LIBDIR/security/pam_*
usr/bin/xauth
EOF
fi
# more dogtail stuff...
cat >> $KEEPFILE <<EOF
usr/$LIBDIR/gtk-2.0/modules/libatk-bridge.so
usr/$LIBDIR/gtk-2.0/modules/libgail.so
usr/libexec/bonobo-activation-server
usr/libexec/at-spi-registryd
usr/$LIBDIR/bonobo/servers
usr/libexec/gconfd-2
usr/$LIBDIR/GConf/2/libgconfbackend-xml.so
usr/$LIBDIR/python?.?/site-packages/gtk-2.0/atk.so
usr/$LIBDIR/python?.?/site-packages/gtk-2.0/gconf.so
usr/$LIBDIR/python?.?/site-packages/atspi.so
usr/lib/python?.?/site-packages/dogtail/*.py
EOF
#
# KEEPFILERESCUE is all files to keep from the packages in PACKAGESRESCUE
#
# This defines the files in addition to KEEPFILE that make up
# the install images for NFS and CD/DVD based rescue mode installs. This
# image is not loaded into memory so it can be considerably larger.
#
# NOTE: hd, ftp, and http rescue mode use and image based on KEEPFILE since
# it has to be much smaller due to memory usage.
#
KEEPFILERESCUE=${TMPDIR:-/tmp}/keepfilerescue.$$
cat > $KEEPFILERESCUE <<EOF
bin/find
bin/gunzip
bin/gzip
bin/mt
bin/ping
bin/sync
bin/tar
bin/zcat
etc/joe
sbin/arp
sbin/blkid
sbin/depmod
sbin/dmraid
sbin/dmsetup
sbin/dump
sbin/ifconfig
sbin/insmod
sbin/lsmod
sbin/modinfo
sbin/modprobe
sbin/netstat
sbin/restore
sbin/rrestore
sbin/rmmod
sbin/route
sbin/mount.cifs
sbin/umount.cifs
usr/bin/bunzip2
usr/bin/bzcat
usr/bin/bzip2
usr/bin/emacs
usr/bin/find
usr/bin/ftp
usr/bin/jmacs
usr/bin/joe
usr/bin/jpico
usr/bin/less
usr/bin/mattrib
usr/bin/mbadblocks
usr/bin/mcd
usr/bin/mcopy
usr/bin/mdel
usr/bin/mdeltree
usr/bin/mdir
usr/bin/mdu
usr/bin/mformat
usr/bin/minfo
usr/bin/mlabel
usr/bin/mmd
usr/bin/mmount
usr/bin/mmove
usr/bin/mpartition
usr/bin/mrd
usr/bin/mread
usr/bin/mren
usr/bin/mshowfat
usr/bin/mtools
usr/bin/mtype
usr/bin/mzip
usr/bin/open
usr/bin/rcp
usr/bin/rlogin
usr/bin/rsh
usr/bin/rsync
usr/bin/scp
usr/bin/sftp
usr/bin/shred
usr/bin/ssh
usr/bin/termidx
usr/bin/xargs
usr/bin/ntfscat
usr/bin/ntfscluster
usr/bin/ntfscmp
usr/bin/ntfsdecrypt
usr/bin/ntfsdump_logfile
usr/bin/ntfsfix
usr/bin/ntfsinfo
usr/bin/ntfsls
usr/bin/ntfsmftalloc
usr/bin/ntfsmove
usr/bin/ntfstruncate
usr/bin/ntfswipe
usr/bin/firstaidkit
usr/sbin/mkntfs
usr/sbin/ntfsclone
usr/sbin/ntfscp
usr/sbin/ntfslabel
usr/sbin/ntfsresize
usr/sbin/ntfsundelete
usr/sbin/mtr
usr/sbin/smartctl
usr/sbin/traceroute
usr/$LIBDIR/firstaidkit/plugins/
usr/lib/python?.?/site-packages/pyfirstaidkit/
EOF
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
cat >> $KEEPFILERESCUE <<-EOF
sbin/grub
usr/bin/gpart
usr/share/grub
EOF
fi
echo "Assembling package list..."
RPMS="$PACKAGES $PACKAGESRESCUE"
[ -n "$DEBUG" ] && echo "RPMS are $RPMS"
rm -rf $DEST; mkdir -p $DEST/usr/sbin $DEST/var/lib $DEST/boot
ln -s /tmp $DEST/var/lib/xkb
#
# concat KEEPFILE and KEEPFILERESCUE lists
#
cat $KEEPFILERESCUE >> $KEEPFILE
echo `date` "Expanding packages..."
YUMDIR=${TMPDIR:-/tmp}/yumdir.$$
mkdir -p $YUMDIR/var/log
mkdir -p $YUMDIR/var/lib/yum
expandPackageSet $yumconf $YUMDIR "$RPMS" $DEST $KEEPFILE
echo `date` "Done Expanding packages..."
# Dogtail will check this
echo "Creating customized GConf2 settings for root"
mkdir -p $DEST/.gconf/desktop/gnome/interface
touch $DEST/.gconf/desktop/%gconf.xml
touch $DEST/.gconf/desktop/gnome/%gconf.xml
cat > $DEST/.gconf/desktop/gnome/interface/%gconf.xml <<EOF
<?xml version="1.0"?>
<gconf>
<entry name="accessibility" mtime="1176200664" type="bool" value="true">
</entry>
</gconf>
EOF
rm -rf $YUMDIR
chown -R root:root $DEST
chmod -R a+rX-w $DEST
# Remove locales unused during the install
cat $DEST/usr/lib/anaconda/lang-table* | awk '
{ gsub("-", "", $4);
print $4;
print gensub(/\..*$/,"","",$4);
print gensub(/_.*$/,"","",$4);
if (split ($4, a, ".") > 1) {
print gensub(/\..*$/,tolower("." a[2]),"",$4);
};
print $2;
}
' | sed -e 's/latn/Latn/g' | LC_ALL=C sort -u > $DEST/locales
for p in lib share; do (
cd $DEST/usr/$p/locale && {
ls | grep -v locale.alias | grep -v locale-archive | LC_ALL=C sort > $DEST/locales.list
LC_ALL=C comm -13 $DEST/locales $DEST/locales.list | xargs rm -rf
}
); done
rm -f $DEST/locales $DEST/locales.list
# fixup joe links
if [ -d "$DESTDIR"/etc/joe ]; then
ln -fs jpicorc $DEST/etc/joe/picorc
ln -fs jpicorc $DEST/etc/joe/jnanorc
ln -fs jpicorc $DEST/etc/joe/nanorc
ln -fs jmacsrc $DEST/etc/joe/emacsrc
ln -fs jmacs $DEST/usr/bin/emacs
ln -fs jpico $DEST/usr/bin/pico
ln -fs jpico $DEST/usr/bin/nano
fi
# fix up some links for man page related stuff
for file in nroff groff iconv geqn gtbl gpic grefer ; do
ln -fs /mnt/sysimage/usr/bin/$file $DEST/usr/bin/$file
done
# create selinux config
if [ -e $DEST/etc/selinux/targeted ]; then
cat > $DEST/etc/selinux/config <<EOF
SELINUX=permissive
SELINUXTYPE=targeted
EOF
fi
echo "Creating libuser.conf"
cat > $DEST/etc/libuser.conf <<EOF
[defaults]
skeleton = /mnt/sysimage/etc/skel
mailspooldir = /mnt/sysimage/var/mail
crypt_style = md5
modules = files shadow
create_modules = files shadow
[files]
directory = /mnt/sysimage/etc
[shadow]
directory = /mnt/sysimage/etc
EOF
sed -i 's|\(installforallkernels\) = 0|\1 = 1|' $DEST/etc/yum/pluginconf.d/fedorakmod.conf
#
# Manual pages in rescue: We dont have man pages in the image, so we point everything (The pages
# and the man scripts to the /mnt/sysimage. We want the man command to depend only on the
# man.conf file, so we don't use the $MANPATH env variable. The executables stay unchanged as
# they will be soft links to /mnt/sysimage.
#
echo "Fixing up /etc/man.config to point into /mnt/sysimage"
#
# Lets avoid the lines with MANPATH_MAP for now
#
sed -i "s,^MANPATH[^_MAP][ \t]*,&/mnt/sysimage," $DEST/etc/man.config
#
# Lets change the lines with MANPATH_MAP. Don't know how much of a difference this will make.
#
sed -i "s,^MANPATH_MAP[ \t]*[a-zA-Z0-9/]*[ \t]*,&/mnt/sysimage," $DEST/etc/man.config
echo "Scrubbing tree..." "$DEST"
mkdir -p $DEST/lib
mkdir -p $DEST/firmware
ln -snf /modules $DEST/lib/modules
ln -snf /firmware $DEST/lib/firmware
cp $DEST/usr/lib/anaconda/raidstart-stub $DEST/usr/bin/raidstart
cp $DEST/usr/lib/anaconda/raidstop-stub $DEST/usr/bin/raidstop
cp $DEST/usr/lib/anaconda/losetup-stub $DEST/usr/bin/losetup
cp $DEST/usr/lib/anaconda/list-harddrives-stub $DEST/usr/bin/list-harddrives
cp $DEST/usr/lib/anaconda/loadkeys-stub $DEST/usr/bin/loadkeys
cp $DEST/usr/lib/anaconda/mknod-stub $DEST/usr/bin/mknod
cp $DEST/usr/lib/anaconda/syslogd-stub $DEST/usr/bin/syslogd
mv $DEST/usr/sbin/anaconda $DEST/usr/bin/anaconda
mv $DEST/usr/lib/anaconda-runtime/lib* $DEST/usr/$LIBDIR 2>/dev/null
mv $DEST/etc/yum.repos.d $DEST/etc/anaconda.repos.d
rm -f $DEST/usr/$LIBDIR/libunicode-lite*
find $DEST -type d | xargs chmod 755
if [ -f $DEST/bin/bash ]; then
rm -f $DEST/bin/ash
ln -s bash $DEST/bin/sh
else
ln -sf busybox $DEST/bin/sh
fi
[ -d $DEST/bin ] || die "ERROR: directory missing: $DEST/bin"
[ -d $DEST/sbin ] || die "ERROR: directory missing: $DEST/sbin"
(cd $DEST/bin; find) | (cd $DEST/bin; /bin/cpio --quiet -pdmu $DEST/usr/bin)
(cd $DEST/sbin; find) | (cd $DEST/sbin; /bin/cpio --quiet -pdmu $DEST/usr/sbin)
rm -rf $DEST/bin
rm -rf $DEST/sbin
# Fix relative links like /usr/bin/udevinfo -> ../../sbin/udevadm
for brokenlink in $(find $DEST/usr/{bin,sbin} -follow -lname '*') ; do
target="$(readlink $brokenlink)"
for pathbit in bin sbin; do
# if it starts with "../../sbin/", remove that
newtarget="${target##../../$pathbit/}"
# if we removed something, replace it with the proper path
if [ "$newtarget" != "$target" ]; then
# make it ../sbin/ instead
ln -sf "../$pathbit/$newtarget" "$brokenlink"
fi
done
done
# copy bootloader files for sparc
if [ $ARCH = sparc ]; then
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
[ -d $DEST/boot ] || die "ERROR: directory missing: $DEST/boot"
(cd $DEST/boot; find -name "*.b") | (cd $DEST/boot; /bin/cpio --quiet -pdmu $DEST/usr/lib/anaconda-runtime/boot)
fi
# copy bootloader file for ppc
if [ $ARCH = ppc -o $ARCH = ppc64 ]; then
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
cp -af $DEST/boot/efika.forth $DEST/usr/lib/anaconda-runtime/boot
fi
# copy bootloader file for alpha
if [ $ARCH = alpha ]; then
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
cp -af $DEST/boot/bootlx $DEST/usr/lib/anaconda-runtime/boot
fi
# copy bootloader files for ia64
if [ $ARCH = ia64 ]; then
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
cp -af $DEST/boot/efi/EFI/redhat//* $DEST/usr/lib/anaconda-runtime/boot
fi
# copy bootloader files for i386/x86_64
if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
mkdir -p $DEST/usr/lib/anaconda-runtime/boot
cp -af $DEST/boot/memtest* $DEST/usr/lib/anaconda-runtime/boot
fi
rm -rf $DEST/boot $DEST/home $DEST/root $DEST/tmp
find $DEST -name "*.a" | grep -v kernel-wrapper/wrapper.a | xargs rm -rf
find $DEST -name "lib*.la" |grep -v "usr/$LIBDIR/gtk-2.0" | xargs rm -rf
# nuke some python stuff we don't need
for d in idle distutils bsddb lib-old hotshot doctest.py pydoc.py site-packages/japanese site-packages/japanese.pth ; do
rm -rf $DEST/$d
done
$DEST/usr/lib/anaconda-runtime/scrubtree $DEST
echo "Creating debug dir"
mkdir -p $DEST/usr/lib/debug
mkdir -p $DEST/usr/src/debug
find $DEST -name "*.py" | while read fn; do
rm -f ${fn}o
rm -f ${fn}c
ln -sf /dev/null ${fn}c
done
# some python stuff we don't need for install image
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/distutils/
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/lib-dynload/japanese
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/encodings/
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/compiler/
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/email/test/
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/curses/
rm -rf $DEST/usr/$LIBDIR/python?.?/site-packages/pydoc.py