lorax/rewrite/scratch/mk-images

793 lines
26 KiB
Bash
Executable File

#!/bin/bash
#
# mk-images
#
# Copyright (C) 2007 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/>.
#
# Stuff that we need
TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
GENINITRDSZ=$IMGPATH/usr/lib/anaconda-runtime/geninitrdsz
MKS390CDBOOT=$IMGPATH/usr/lib/anaconda-runtime/mk-s390-cdboot
GENMODINFO=$IMGPATH/usr/lib/anaconda-runtime/genmodinfo
KEYMAPS=$TMPDIR/keymaps-$BUILDARCH.$$
SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
MODINFO=$TMPDIR/modinfo-$BUILDARCH.$$
LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
REQUIREMENTS="$TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GENMODINFO
$LANGTABLE $GETKEYMAPS"
dieLater=
for n in $REQUIREMENTS; do
if [ ! -f $n ]; then
echo "$n doesn't exist"
dieLater=1
fi
done
for n in $BOOTDISKDIR; do
if [ ! -d $n ]; then
echo "$n doesn't exist"
dieLater=1
fi
done
if [ -n "$dieLater" ]; then exit 1; fi
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
# go ahead and create the keymaps so we only have to do it once
if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
echo "Found keymap override, using it"
cp $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH $KEYMAPS
else
echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH"
$GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH
if [ $? != 0 ]; then
echo "Unable to create keymaps and thus can't create initrd."
exit 1
fi
fi
fi
findPackage() {
name=$1
pkg=$(repoquery --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}" -c $yumconf --archlist=$KERNELARCH $name.$KERNELARCH)
if [ -n "$pkg" ]; then
echo $pkg
return
fi
echo "cannot find package $name" >&2
}
rundepmod () {
where=$1
$FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
-b $where $version
}
# This loops to make sure it resolves dependencies of dependencies of...
resdeps () {
items="$*"
deplist=""
for item in $items ; do
deps=$(awk -F ':' "/$item.ko: / { print gensub(\".*/$item.ko: \",\"\",\"g\") }" $KERNELROOT/lib/modules/$version/modules.dep)
for dep in $deps ; do
depfile=${dep##*/}
depname=${dep%%.ko}
deplist="$deplist $depname"
done
done
items=$(for n in $items $deplist; do echo $n; done | sort -u)
echo $items
}
expandModuleSet() {
SET=""
for name in $1; do
char=$(echo $name | cut -c1)
if [ $char = '=' ]; then
NAME=$(echo $name | cut -c2-)
SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
else
SET="$SET $name"
fi
done
echo $SET
}
makemoduletree() {
MMB_DIR=$1
MMB_MODULESET=$(resdeps $2)
mkdir -p $MMB_DIR/lib
mkdir -p $MMB_DIR/modules
mkdir -p $MMB_DIR/firmware
ln -snf ../modules $MMB_DIR/lib/modules
ln -snf ../firmware $MMB_DIR/lib/firmware
echo "Copying kernel modules..."
cp -a $KERNELROOT/lib/modules/* $MMB_DIR/lib/modules/
echo "Removing extraneous modules..."
find $MMB_DIR/lib/modules/ -name *.ko | while read module ; do
m=${module##*/}
modname=${m%%.ko}
echo $MMB_MODULESET | grep -wq $modname || {
rm -f $module
}
done
# Copy in driver firmware we want during installation. NOTE: This isn't
# the ideal solution, but we'll do this for now. What we really want is
# for the kernel modules to include a modinfo field that names the firmware
# file we should have. If we can get that it would make it even easier to
# push the kernel people to depend on the firmware packages in the kernel,
# but we have to take small steps first.
for module in $MODSET ; do
case $module in
ipw2100)
cp $KERNELROOT/lib/firmware/ipw2100* $MBD_DIR/firmware
;;
ipw2200)
cp $KERNELROOT/lib/firmware/ipw2200* $MBD_DIR/firmware
;;
iwl3945)
cp $KERNELROOT/lib/firmware/iwlwifi-3945* $MBD_DIR/firmware
;;
iwl4965)
cp $KERNELROOT/lib/firmware/iwlwifi-4965* $MBD_DIR/firmware
;;
atmel)
cp $KERNELROOT/lib/firmware/atmel_*.bin $MBD_DIR/firmware
;;
zd1211rw)
cp -r $KERNELROOT/lib/firmware/zd1211 $MBD_DIR/firmware
;;
qla2xxx)
cp $KERNELROOT/lib/firmware/ql* $MBD_DIR/firmware
;;
esac
done
# clean up leftover cruft
find -H $MMB_DIR/lib/modules -type d -exec rmdir -f {} \; 2>/dev/null
$MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
$MMB_MODULESET > $MMB_DIR/lib/modules/module-info
# compress modules
find -H $MMB_DIR/lib/modules -type f -name *.ko -exec gzip -9 {} \;
rundepmod $MMB_DIR
rm -f $MMB_DIR/lib/modules/*/modules.*map
rm -f $MMB_DIR/lib/modules/*/{build,source}
# create the pci.ids, from modules.alias and the X driver aliases
awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
$TRIMPCIIDS $MMB_DIR/lib/modules/*/modules.alias $XDRIVERS/* > ../pci.ids
}
makeproductfile() {
root=$1
rm -f $root/.buildstamp
echo $IMAGEUUID > $root/.buildstamp
echo $PRODUCT >> $root/.buildstamp
echo $VERSION >> $root/.buildstamp
if [ -n "$BUGURL" ]; then
echo $BUGURL >> $root/.buildstamp
fi
}
instbin() {
ROOT=$1
BIN=$2
DIR=$3
DEST=$4
install -s -m 755 $ROOT/$BIN $DIR/$DEST
get_dso_deps $ROOT "$BIN"
local DEPS="$DSO_DEPS"
mkdir -p $DIR/$LIBDIR
for x in $DEPS ; do
cp -Lfp $ROOT/$x $DIR/$LIBDIR
done
pushd $DIR/$LIBDIR
if [ -f ld-linux.so.2 ]; then
rm -f ld-linux.so.2
linker="$(ls -1 ld-*.*.*.so)"
found=$(echo $linker | wc -l)
if [ $found -ne 1 ]; then
echo "Found too many dynamic linkers:" >&2
echo $linker >&2
exit 1
fi
ln -s $linker ld-linux.so.2
fi
popd
}
setupShellEnvironment() {
echo "tcp 6 TCP" > $MBD_DIR/etc/protocols
# PAM configuration
for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do
cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security
done
cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
cat > $MBD_DIR/etc/pam.d/login << EOF
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth required pam_deny.so
account required pam_unix.so
password sufficient pam_unix.so nullok use_authtok md5 shadow
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
EOF
cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd
cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote
cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
# key generation takes ages on s390, you really don't want this for every
# installation attempt. These are NOT the keys of the installed system!
mkdir -m 0700 -p $MBD_DIR/etc/ssh
echo -n "Generating SSH1 RSA host key: "
/usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
-C '' -N '' >&/dev/null
echo
echo -n "Generating SSH2 RSA host key: "
/usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
-C '' -N '' >&/dev/null
echo
echo -n "Generating SSH2 DSA host key: "
/usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
-C '' -N '' >&/dev/null
echo
(cd $MBD_DIR/etc/ssh; \
chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
Port 22
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
PermitRootLogin yes
IgnoreRhosts yes
StrictModes yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
XAuthLocation /sbin/xauth
KeepAlive yes
SyslogFacility AUTHPRIV
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords yes
PermitUserEnvironment yes
EOF
chmod 600 $MBD_DIR/etc/ssh/sshd_config
# copy in the binaries
instbin $IMGPATH /usr/bin/login $MBD_DIR /sbin/login
instbin $IMGPATH /usr/sbin/sshd $MBD_DIR /sbin/sshd
instbin $IMGPATH /usr/bin/busybox $MBD_DIR /sbin/busybox
# make some symlinks
(cd $MBD_DIR/sbin;
set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\.\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
while [ -n "$1" ]; do
if [ $1 != "busybox" -a $1 != "sh" ]; then
# if file doesnt already exist, link to busybox
if [ ! -f "$1" ]; then
ln -sf ./busybox $1
else
[ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
fi
fi
shift
done )
}
makeinitrd() {
EXTRAINITRDPATH=""
INITRDSIZE=""
KEEP=""
PADSIZE=""
LOADERBIN=""
INITRDMODULES=""
MYLANGTABLE=$LANGTABLE
MYLOADERTR=loader.tr
while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
if [ $1 = "--initrdto" ]; then
EXTRAINITRDPATH=$2
shift; shift
continue
elif [ $1 = "--keep" ]; then
KEEP=yes
shift
continue
elif [ $1 = "--initrdsize" ]; then
INITRDSIZE=$2
shift; shift
continue
elif [ $1 = "--loaderbin" ]; then
LOADERBIN=$2
shift; shift
continue
elif [ $1 = "--modules" ]; then
INITRDMODULES=$2
shift; shift
continue
fi
echo "Unknown option passed to makeinitrd"
exit 1
done
if [ -z "$LOADERBIN" ]; then
echo "no loader binary specified!" >&2
exit 1
fi
if [ -z "$INITRDMODULES" ]; then
echo "warning: no loader modules specified!" >&2
fi
if [ -z "$INITRDSIZE" ]; then
echo "I don't know how big to make the initrd image!" >&2
exit 1
fi
MBD_DIR=$TMPDIR/makebootdisk.dir.$$
MBD_FSIMAGE=$TMPDIR/makebootdisk.initrdimage.$$
MBD_BOOTTREE=$TMPDIR/makebootdisk.tree.$$
rm -rf $MBD_DIR $MBD_FSIMAGE
mkdir -p $MBD_DIR/modules
mkdir -p $MBD_DIR/sbin
mkdir -p $MBD_DIR/dev
mkdir -p $MBD_DIR/etc
mkdir -p $MBD_DIR/etc/udev/rules.d
mkdir -p $MBD_DIR/lib/udev/rules.d
mkdir -p $MBD_DIR/proc
mkdir -p $MBD_DIR/selinux
mkdir -p $MBD_DIR/sys
mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
mkdir -p $MBD_DIR/tmp
mkdir -p $MBD_DIR/usr/libexec
mkdir -p $MBD_DIR/usr/$LIBDIR/NetworkManager
mkdir -p $MBD_DIR/usr/share/dbus-1/system-services
mkdir -p $MBD_DIR/var/cache/hald
mkdir -p $MBD_DIR/var/lib/dbus
mkdir -p $MBD_DIR/var/lib/dhclient
mkdir -p $MBD_DIR/var/lock/rpm
mkdir -p $MBD_DIR/var/run
mkdir -p $MBD_DIR/var/run/dbus
mkdir -p $MBD_DIR/var/run/hald
mkdir -p $MBD_DIR/var/run/NetworkManager
mkdir -p $MBD_DIR/etc/dbus-1/system.d
mkdir -p $MBD_DIR/etc/modprobe.d
mkdir -p $MBD_DIR/etc/NetworkManager/dispatcher.d
mkdir -p $MBD_DIR/$LIBDIR/dbus-1
mkdir -p $MBD_DIR/etc/sysconfig/network-scripts
mkdir -p $MBD_DIR/usr/share/PolicyKit/policy
mkdir -p $MBD_DIR/etc/PolicyKit
mkdir -p $MBD_DIR/var/lib/misc
mkdir -p $MBD_DIR/etc/hal/fdi
mkdir -p $MBD_DIR/usr/share/hal/fdi
mkdir -p $MBD_DIR/usr/share/hwdata
mkdir -p $MBD_DIR/etc/rc.d/init.d
mkdir -p $MBD_DIR/usr/sbin
mkdir -p $MBD_DIR/var/run/wpa_supplicant
if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
mkdir -m 111 -p $MBD_DIR/var/empty/sshd
mkdir -p $MBD_DIR/etc/{pam.d,security}
mkdir -p $MBD_DIR/$LIBDIR/security
cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
ln -s /tmp $MBD_DIR/var/state/xkb
cp $IMGPATH/usr/bin/xauth $MBD_DIR/sbin/xauth
cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
fi
if [ -n "$INITRDMODULES" ]; then
MODSET=`expandModuleSet "$INITRDMODULES"`
makemoduletree $MBD_DIR "$MODSET"
fi
# set up the arch bits
echo $arch > $MBD_DIR/etc/arch
echo "Setting up arch bits"
instbin $IMGPATH ${LOADERBINDIR##$IMGPATH}/$LOADERBIN $MBD_DIR /sbin/loader
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
instbin $IMGPATH ${LOADERBINDIR##$IMGPATH}/init $MBD_DIR /sbin/init
ln -s ./init $MBD_DIR/sbin/reboot
ln -s ./init $MBD_DIR/sbin/halt
ln -s ./init $MBD_DIR/sbin/poweroff
else
instbin $IMGPATH ${LOADERBINDIR##IMGPATH}/shutdown $MBD_DIR /sbin/shutdown
instbin $IMGPATH /usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR /sbin/init
instbin $IMGPATH /usr/sbin/dasdfmt $MBD_DIR /sbin/dasdfmt
fi
if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
fi
install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
install -m 644 $IMGPATH/etc/passwd $MBD_DIR/etc/passwd
install -m 644 $IMGPATH/etc/group $MBD_DIR/etc/group
install -m 644 $IMGPATH/etc/nsswitch.conf $MBD_DIR/etc/nsswitch.conf
instbin $IMGPATH /usr/bin/mount $MBD_DIR /sbin/mount
instbin $IMGPATH /usr/sbin/mount.nfs $MBD_DIR /sbin/mount.nfs
instbin $IMGPATH /usr/bin/umount $MBD_DIR /sbin/umount
ln -s mount.nfs $MBD_DIR/sbin/umount.nfs
instbin $IMGPATH /usr/sbin/udevd $MBD_DIR /sbin/udevd
instbin $IMGPATH /usr/sbin/udevadm $MBD_DIR /sbin/udevadm
instbin $IMGPATH /usr/bin/udevinfo $MBD_DIR /sbin/udevinfo
ln -s udevadm $MBD_DIR/sbin/udevsettle
instbin $IMGPATH /usr/bin/bash $MBD_DIR /sbin/bash
( cd $MBD_DIR/sbin ; ln -sf bash sh )
instbin $IMGPATH /usr/sbin/consoletype $MBD_DIR /sbin/consoletype
instbin $IMGPATH /usr/bin/logger $MBD_DIR /sbin/logger
( cd $IMGPATH/etc/rc.d/init.d
cp -a functions $MBD_DIR/etc/rc.d/init.d
)
( cd $IMGPATH/etc/sysconfig/network-scripts
cp -a network-functions $MBD_DIR/etc/sysconfig/network-scripts
cp -a network-functions-ipv6 $MBD_DIR/etc/sysconfig/network-scripts
)
( cd $MBD_DIR/etc ; ln -sf /etc/rc.d/init.d init.d )
# DHCP and DHCPv6 client daemons and support programs
instbin $IMGPATH /usr/sbin/dhclient $MBD_DIR /sbin/dhclient
cp -a $IMGPATH/usr/sbin/dhclient-script $MBD_DIR/sbin/dhclient-script
chmod 0755 $MBD_DIR/sbin/dhclient-script
instbin $IMGPATH /usr/sbin/dhcp6c $MBD_DIR /sbin/dhcp6c
instbin $IMGPATH /usr/sbin/arping $MBD_DIR /sbin/arping
instbin $IMGPATH /usr/sbin/ifconfig $MBD_DIR /sbin/ifconfig
instbin $IMGPATH /usr/sbin/ip $MBD_DIR /sbin/ip
touch $MBD_DIR/etc/resolv.conf
# hwdata
cp -a $IMGPATH/usr/share/hwdata/pci.ids $MBD_DIR/usr/share/hwdata/pci.ids
cp -a $IMGPATH/usr/share/hwdata/usb.ids $MBD_DIR/usr/share/hwdata/usb.ids
# hal
instbin $IMGPATH /usr/sbin/hald $MBD_DIR /sbin/hald
( cd $IMGPATH/usr/libexec
for f in hald-runner hald-generate-fdi-cache hal*storage* ; do
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
done
)
touch $MBD_DIR/var/run/hald.acl-list
cp -a $IMGPATH/usr/share/hal/fdi/* $MBD_DIR/usr/share/hal/fdi
cp -a $IMGPATH/etc/hal/fdi/* $MBD_DIR/etc/hal/fdi
cp -a $IMGPATH/etc/dbus-1/system.d/hal.conf $MBD_DIR/etc/dbus-1/system.d
# PolicyKit
( cd $IMGPATH/etc/PolicyKit
cp -a PolicyKit.conf $MBD_DIR/etc/PolicyKit
)
( cd $IMGPATH/usr/share/dbus-1/system-services
cp -a org.freedesktop.PolicyKit.service $MBD_DIR/usr/share/dbus-1/system-services
)
( cd $IMGPATH/usr/share/PolicyKit/policy
cp -a org.freedesktop.policykit.policy $MBD_DIR/usr/share/PolicyKit/policy
)
( cd $IMGPATH/var/lib/misc
cp -a PolicyKit.reload $MBD_DIR/var/lib/misc
)
# dbus
instbin $IMGPATH /usr/bin/dbus-uuidgen $MBD_DIR /sbin/dbus-uuidgen
instbin $IMGPATH /usr/bin/dbus-daemon $MBD_DIR /sbin/dbus-daemon
cp -a $IMGPATH/etc/dbus-1/system.conf $MBD_DIR/etc/dbus-1/system.conf
cp -a $IMGPATH/$LIBDIR/dbus-1/dbus-daemon-launch-helper $MBD_DIR/$LIBDIR/dbus-1
chown root:dbus $MBD_DIR/$LIBDIR/dbus-1/dbus-daemon-launch-helper
chmod 04750 $MBD_DIR/$LIBDIR/dbus-1/dbus-daemon-launch-helper
# wpa_supplicant
instbin $IMGPATH /usr/sbin/wpa_passphrase $MBD_DIR /usr/sbin/wpa_passphrase
instbin $IMGPATH /usr/sbin/wpa_supplicant $MBD_DIR /usr/sbin/wpa_supplicant
cp -a $IMGPATH/etc/dbus-1/system.d/wpa_supplicant.conf $MBD_DIR/etc/dbus-1/system.d
cp -a $IMGPATH/etc/wpa_supplicant/wpa_supplicant.conf $MBD_DIR/etc/wpa_supplicant
( cd $IMGPATH/usr/share/dbus-1/system-services
cp -a fi.epitest.hostap.WPASupplicant.service $MBD_DIR/usr/share/dbus-1/system-services
)
# NetworkManager
instbin $IMGPATH /usr/sbin/NetworkManager $MBD_DIR /usr/sbin/NetworkManager
instbin $IMGPATH /usr/sbin/nm-system-settings $MBD_DIR /usr/sbin/nm-system-settings
cp -a $IMGPATH/etc/dbus-1/system.d/nm-*.conf $MBD_DIR/etc/dbus-1/system.d
cp -a $IMGPATH/etc/dbus-1/system.d/NetworkManager.conf $MBD_DIR/etc/dbus-1/system.d
cp -a $IMGPATH/etc/NetworkManager/nm-system-settings.conf $MBD_DIR/etc/NetworkManager
instbin $IMGPATH /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so \
$MBD_DIR /usr/$LIBDIR/NetworkManager/libnm-settings-plugin-ifcfg-fedora.so
( cd $IMGPATH/usr/libexec
for f in nm-* ; do
instbin $IMGPATH /usr/libexec/$f $MBD_DIR /usr/libexec/$f
done
)
( cd $IMGPATH/usr/share/dbus-1/system-services
cp -a org.freedesktop.NetworkManagerSystemSettings.service $MBD_DIR/usr/share/dbus-1/system-services
cp -a org.freedesktop.nm_dispatcher.service $MBD_DIR/usr/share/dbus-1/system-services
)
# Indirect dependencies
install -m 755 $IMGPATH/$LIBDIR/libfreebl3.so $MBD_DIR/$LIBDIR/
install -m 755 $IMGPATH/$LIBDIR/libsoftokn3.so $MBD_DIR/$LIBDIR/
install -m 755 $IMGPATH/usr/$LIBDIR/libsqlite3.so.0 $MBD_DIR/usr/$LIBDIR/
install -m 755 $IMGPATH/$LIBDIR/libnss_dns.so.2 $MBD_DIR/$LIBDIR/
install -m 755 $IMGPATH/$LIBDIR/libnss_files.so.2 $MBD_DIR/$LIBDIR/
install -m 755 $IMGPATH/$LIBDIR/libgcc_s.so.1 $MBD_DIR/$LIBDIR/
install -m 644 $IMGPATH/etc/udev/udev.conf $MBD_DIR/etc/udev/udev.conf
for i in $IMGPATH/lib/udev/rules.d/*.rules ; do
install -m 644 $i $MBD_DIR/lib/udev/rules.d/${i##*/}
done
for i in $IMGPATH/etc/udev/rules.d/*.rules ; do
install -m 644 $i $MBD_DIR/etc/udev/rules.d/${i##*/}
done
for i in $IMGPATH/lib/udev/*; do
if [ -f $i ]; then install -m 755 $i $MBD_DIR/lib/udev/${i##*/}; fi
done
rm -f $MBD_DIR/lib/udev/rules.d/*persistent*
rm -f $MBD_DIR/lib/udev/rules.d/*generator*
install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr
for i in a/ansi d/dumb l/linux s/screen v/vt100 v/vt100-nav v/vt102 x/xterm x/xterm-color g/gnome ; do
[ -f $IMGPATH/usr/share/terminfo/$i ] && \
install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i
done
makeproductfile $MBD_DIR
for n in insmod rmmod modprobe; do
instbin $IMGPATH /usr/sbin/$n $MBD_DIR /sbin/$n
done
ln -s /sbin/init $MBD_DIR/init
ln -s /proc/mounts $MBD_DIR/etc/mtab
ln -s sbin $MBD_DIR/bin
mkdir -p $MBD_DIR/var/lib
ln -s ../../tmp $MBD_DIR/var/lib/xkb
# s390/s390x need sshd setup
if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
setupShellEnvironment
fi
cat > $MBD_DIR/.profile <<EOF
PATH=/bin:/usr/bin:/usr/sbin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
export PATH
EOF
rm -f $MBD_FSIMAGE
(cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
if [ -n "$EXTRAINITRDPATH" ]; then
mkdir -p `dirname $EXTRAINITRDPATH`
cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
fi
if [ -z "$KEEP" ]; then
rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
fi
}
makemainimage () {
imagename=$1
type=$2
mmi_tmpimage=$TMPDIR/instimage.img.$$
mmi_mntpoint=$TMPDIR/instimage.mnt.$$
rm -rf $mmi_tmpimage $mmi_mntpoint
mkdir $mmi_mntpoint
if [ $type = "ext2" ]; then
SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }')
if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then
ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
SIZE=$(expr $SIZE - $ERROR)
fi
if [ -d $IMGPATH/usr/lib/syslinux ]; then
ERROR=$(du -sk $IMGPATH/usr/lib/syslinux | awk '{ print $1 }')
SIZE=$(expr $SIZE - $ERROR)
fi
dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
mke2fs -q -F $mmi_tmpimage > /dev/null
tune2fs -c0 -i0 $mmi_tmpimage >/dev/null
mount -o loop $mmi_tmpimage $mmi_mntpoint
(cd $IMGPATH; find . |
fgrep -v "./usr/lib/anaconda-runtime" |
fgrep -v "./usr/lib/syslinux"
cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
makeproductfile $mmi_mntpoint
umount $mmi_mntpoint
rmdir $mmi_mntpoint
elif [ $type = "squashfs" ]; then
makeproductfile $IMGPATH
echo "Running mksquashfs $IMGPATH $mmi_tmpimage -all-root -no-fragments -no-progress"
mksquashfs $IMGPATH $mmi_tmpimage -all-root -no-fragments -no-progress
chmod 0644 $mmi_tmpimage
SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
elif [ $type = "cramfs" ]; then
makeproductfile $IMGPATH
echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
mkfs.cramfs $CRAMBS $IMGPATH $mmi_tmpimage
SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
fi
cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
chmod 644 $INSTIMGPATH/${imagename}.img
echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
relpath=${INSTIMGPATH#$TOPDESTPATH/}
echo "mainimage = ${relpath}/${imagename}.img" >> $TOPDESTPATH/.treeinfo
rm $mmi_tmpimage
}
makeSecondStage() {
echo "[stage2]" >> $TOPDESTPATH/.treeinfo
echo "Building install.img"
makemainimage "install" "squashfs"
[ $? = 0 ] || exit 1
}
doPostImages() {
/bin/true
}
# this gets overloaded if we're on an EFI-capable arch (... with grub)
makeEfiImages()
{
/bin/true
}
# source the architecture specific mk-images file so we can call functions
# in it
if [ ${BUILDARCH} = s390x ]; then
# FIXME: this is a bad hack for s390, but better than copying for now
source $TOPDIR/mk-images.s390
elif [ ${BUILDARCH} = ppc64 ]; then
# ... and similar for ppc64
source $TOPDIR/mk-images.ppc
elif [ ${BUILDARCH} = "x86_64" -o ${BUILDARCH} = "i386" ]; then
source $TOPDIR/mk-images.x86
source $TOPDIR/mk-images.efi
else
source $TOPDIR/mk-images.${BUILDARCH}
fi
# Find the kernel, unpack it, and verify it
kerneltags="kernel"
efiarch=""
arches="$BUILDARCH"
if [ "$BUILDARCH" = "ppc" ]; then
arches="ppc64 ppc"
elif [ "$BUILDARCH" = "i386" ]; then
arches="i586"
efiarch="ia32"
kerneltags="kernel kernel-PAE"
kernelxen="kernel-PAE"
elif [ "$BUILDARCH" = "x86_64" ]; then
kerneltags="kernel"
efiarch="x64"
elif [ "$BUILDARCH" = "ia64" ]; then
kerneltags="kernel"
efiarch="ia64"
fi
foundakernel=""
for KERNELARCH in $arches; do
for kernelvers in $kerneltags; do
kpackage=$(findPackage $kernelvers)
if [ "$KERNELARCH" = "i586" -a -z "$kpackage" ]; then
echo "No i586 kernel, trying i686..."
KERNELARCH="i686"
kpackage=$(findPackage $kernelvers)
fi
if [ -z "$kpackage" ]; then
echo "Unable to find kernel package $kernelvers"
continue
fi
yumdownloader -c $yumconf --archlist=$KERNELARCH $kpackage
kpackage="$kpackage.rpm"
if [ ! -f "$kpackage" ]; then
echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping"
continue
fi
KERNELROOT=$KERNELBASE/$KERNELARCH
mkdir -p $KERNELROOT
foundakernel="yes"
if [ "$BUILDARCH" = "ia64" ]; then
vmlinuz=$(rpm --nodigest --nosignature -qpl $kpackage |grep ^/boot/efi/EFI/redhat/vmlinuz | head -n 1)
version=${vmlinuz##/boot/efi/EFI/redhat/vmlinuz-}
else
vmlinuz=$(rpm --nodigest --nosignature -qpl $kpackage |grep ^/boot/vmlinuz | head -n 1)
version=${vmlinuz##/boot/vmlinuz-}
fi
arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
rm -f $kpackage
# expand out any available firmware too
for p in $(repoquery -c $yumconf '*firmware*') ; do yumdownloader -c $yumconf $p ; rpm2cpio *firmware*.rpm | (cd $KERNELROOT; cpio --quiet -iumd) ; rm -f *firmware*.rpm ; done
if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
exit 1
fi
if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
exit 1
fi
allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
rundepmod $KERNELROOT
$GENMODINFO $KERNELROOT/lib/modules/$version > $MODINFO
# make the boot images
makeBootImages
makeEfiImages $yumconf
done
done
if [ -n "$foundakernel" ]; then
makeSecondStage
rm -rf $KERNELBASE
fi
doPostImages
cd $TOPDIR