+++ /dev/null
-#!/bin/bash
-LANG=C
-
-PATH=$PATH:/sbin:/usr/sbin
-IMAGEUUID=$(date +%Y%m%d%H%M).$(uname -i)
-
-usage () {
- echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]"
- exit 0
-}
-
-DEBUG=""
-if [ "$1" == "--debug" ]; then
- DEBUG="--debug"
- shift
-fi
-
-if [ -z "$1" -o -z "$2" -o -z "$3" -o -z "$4" -o -z "$5" -o -z "$6" -o -z "$7" -o -z "$8" ]; then usage; fi
-
-PRODUCT=$6
-VERSION=$7
-PRODUCTPATH=$8
-if [ -n "$9" ]; then
- BUGURL=$9
-fi
-
-TOPDIR=$(echo $0 | sed "s,/[^/]*$,,")
-if [ $TOPDIR = $0 ]; then
- $TOPDIR="."
-fi
-TOPDIR=$(cd $TOPDIR; pwd)
-
-# modules that are needed. this is the generic "needed for every arch" stuff
-COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs"
-USBMODS="ohci-hcd uhci-hcd ehci-hcd hid mousedev usb-storage sd_mod sr_mod ub"
-FIREWIREMODS="ieee1394 ohci1394 sbp2"
-IDEMODS="ide-cd"
-SCSIMODS="sr_mod sg st sd_mod scsi_mod iscsi_tcp"
-FSMODS="fat msdos vfat ext3 reiserfs jfs xfs"
-LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror"
-RAIDMODS="md raid0 raid1 raid5 raid6"
-SECSTAGE="$RAIDMODS $LVMMODS $FSMODS $IDEMODS $SCSIMODS"
-BTERMMODS="vga16fb"
-PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
-INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $BTERMMODS $COMMONMODS $PCMCIASOCKMODS =scsi =net"
-
-# Set, verify, and create paths
- KERNELPATH=$1
- TOPDESTPATH=$2
- IMAGEPATH=$TOPDESTPATH/images
- FULLMODPATH=/tmp/instimagemods.$$
- FINALFULLMODPATH=$4/modules
- INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base
- INSTIMGTEMPLATE=$3
- IMGPATH=$4
- KERNELBASE=/tmp/updboot.kernel.$$
- MODDEPS=$KERNELBASE/moddeps
- MODALIAS=$KERNELBASE/modules.alias
- BUILDARCH=$5
-
- KERNELNAME=vmlinuz
-
- if [ "$BUILDARCH" = "ia64" ]; then
- KERNELDIR="/boot/efi/EFI/redhat"
- else
- KERNELDIR="/boot"
- fi
-
- if [ "$BUILDARCH" = "sparc64" ]; then
- BASEARCH=sparc
- else
- BASEARCH=$BUILDARCH
- fi
-
- # explicit block size setting for some arches (FIXME: we compose
- # ppc64-ish trees as ppc, so we have to set the "wrong" block size)
- if [ "$BUILDARCH" = "sparc64" ]; then
- CRAMBS="--blocksize 8192"
- elif [ "$BUILDARCH" = "sparc" ]; then
- CRAMBS="--blocksize 4096"
- else
- CRAMBS=""
- fi
-
- if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
- LIBDIR=lib64
- else
- LIBDIR=lib
- fi
-
- FONTARCH=${BASEARCH}
- if [ $FONTARCH = i686 ]; then
- FONTARCH=i386
- fi
-
- rm -rf $IMAGEPATH
- rm -rf $FULLMODPATH
- rm -rf $FINALFULLMODPATH
- rm -rf $KERNELBASE
- mkdir -p $IMAGEPATH
- mkdir -p $FULLMODPATH
- mkdir -p $FINALFULLMODPATH
- mkdir -p $KERNELBASE
- mkdir -p $INSTIMGPATH
-
-# Stuff that we need
- TRIMMODALIAS=$IMGPATH/usr/lib/anaconda-runtime/trimmodalias
- TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
- GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
- KEYMAPS=/tmp/keymaps-$BUILDARCH.$$
- SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${FONTARCH}.gz
- GETMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/moddeps
- MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
- MODINFO=$IMGPATH/usr/lib/anaconda-runtime/loader/module-info
- FILTERMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/filtermoddeps
- 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
- CACHE=$KERNELBASE/.cache
- MODULESUSED=$KERNELBASE/modules-used
-
- touch $MODULESUSED
-
- REQUIREMENTS="$TRIMMODALIAS $TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GETMODDEPS $MODINFO
- $FILTERMODDEPS $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() {
- dir=$1
- name=$2
-
- for n in $dir/$name*{$KERNELARCH,noarch}.rpm; do
- thisName=$(rpm --nodigest --nosignature --qf '%{NAME}' -qp $n)
- if [ -z "$thisName" ]; then
- continue
- fi
- if [ $thisName = $name ]; then
- echo $n
- return
- fi
- done
-
- echo "cannot find package $name in path $dir" >&2
-}
-
-findmodule () {
- if [ ! -f $CACHE ]; then
- find $KERNELROOT/lib/modules/ > $CACHE
- fi
-
- grep "/$1\.ko" $CACHE
-}
-
-rundepmod () {
- what=$1
- final=$2
-
- $FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
- -b $KERNELROOT $version
- mv $KERNELROOT/lib/modules/$version/modules.alias $MODALIAS
-
- cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final
-}
-
-getmoddeps () {
- what=$1
- final=$2
-
- for mod in $what ; do
- mod=$(echo $mod | sed 's/\.ko */|^/g;s/\.ko$//;s/.*\///')
- egrep $mod $MODDEPS >> $final.foo
- done
- mv $final.foo $final
-}
-
-intcopymodules () {
- dir=$2
-
- for n in $1; do
- m=$(findmodule $n)
- if [ -z "$m" ]; then
- [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2
- else
- echo $n >> $MODULESUSED
- for o in $m ; do
- echo $n
- ver=$(echo $o |cut -d / -f 7)
- myarch=$(echo $o |cut -d / -f 4)
- if ! [ -d $dir/$ver/$myarch ] ; then mkdir -p $dir/$ver/$myarch ; fi
- if ! cp $o $dir/$ver/$myarch; then
- echo "Failed to copy $o to $dir/$ver/$myarch (for module $n)" >&2
- fi
- done
- fi
- done
-}
-
-# This loops to make sure it resolves dependencies of dependencies of...
-resdeps () {
- items="$*"
-
- before=1
- after=2
-
- while [ $before != $after ]; do
- before=`echo $items | wc -c`
-
- if [ $? != "0" ] ; then
- kill -9 $$
- fi
- list=`$GETMODDEPS -m $MODDEPS $items`
- items=$(for n in $items $list; do echo $n; done | sort -u)
- after=`echo $items | wc -c`
- done
-
- 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)"
- elif [ $char = '+' ]; then
- NAME=$(echo $name | cut -c2-)
-
- # all of the modules of this type
- $MODLIST --modinfo-file $MODINFO $NAME > /tmp/emsAll.$$
- # the modules used that are of this type
- sort -u $MODULESUSED | cat - /tmp/emsAll.$$ | sort |
- uniq -d > /tmp/emsUsed.$$
- # the modules that are of this type, but not used
- SET="$SET $(cat /tmp/emsAll.$$ /tmp/emsUsed.$$ | sort | uniq -u)"
-
- rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$
- else
- SET="$SET $name"
- fi
- done
-
- echo $SET
-}
-
-makemoduleball() {
- unset MMB_DD
- MMB_MODINFO="module-info"
- MMB_NAME="modules.cgz"
-
- while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
- if [ "$1" = "--dd" ]; then
- MMB_DD="$2"
- shift; shift
- MMB_MODINFO="modinfo"
- continue
- elif [ "$1" = "--name" ]; then
- MMB_NAME="$2"
- shift; shift
- continue
- fi
- echo "unknown option passed to $0"
- exit 1
- done
-
- MMB_DIR=$1
- MMB_MODULESET=$(resdeps $2)
-
- rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep $MMB_DIR/modules.alias \
- $MMB_DIR/modules.pcimap $MMB_DIR/pcitable $MMB_DIR/$MMB_MODINFO \
- $MMB_DIR/pci.ids
- mkdir -p $MMB_DIR/modules
-
- MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules)
-
- pushd $MMB_DIR/modules > /dev/null
-
- $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
- $MMB_MODULESET > ../$MMB_MODINFO
-
- getmoddeps "$(find . -name *.ko)" ../modules.dep
-
- # create the modules.alias file
- $TRIMMODALIAS $(find . -name *.ko -exec basename {} \;) < $MODALIAS > ../modules.alias
-
- # 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 ../modules.alias $XDRIVERS/* > ../pci.ids
-
- if [ -n "$MMB_DD" ]; then
- echo $MMB_DD > $MMB_DIR/rhdd
- fi
-
- find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME
- cd ..
- rm -rf modules
- chmod 644 *
- popd > /dev/null
-}
-
-makeproductfile() {
- root=$1
-
- rm -f $root/.buildstamp
- echo $IMAGEUUID > $root/.buildstamp
- echo $PRODUCT >> $root/.buildstamp
- echo $VERSION >> $root/.buildstamp
- echo $PRODUCTPATH >> $root/.buildstamp
- if [ -n "$BUGURL" ]; then
- echo $BUGURL >> $root/.buildstamp
- fi
-}
-
-setupShellEnvironment() {
- # setup password/group entries
- cat > $MBD_DIR/etc/passwd << EOF
-root::0:0::/:/sbin/loader
-debug::0:0:debug shell:/:/bin/bash
-sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-EOF
- cat > $MBD_DIR/etc/group << EOF
-root:x:0:root
-tty:x:5:
-EOF
- echo "sshd:x:74:" >> $MBD_DIR/etc/group
- echo "telnet 23/tcp" > $MBD_DIR/etc/services
- 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/
-
- # setup xinetd for telnet
- cp -f $IMGPATH/etc/xinetd.conf $MBD_DIR/etc/xinetd.conf
- mkdir -p $MBD_DIR/etc/xinetd.d
- cat > $MBD_DIR/etc/xinetd.d/telnet <<EOF
-service telnet
-{
- flags = REUSE
- socket_type = stream
- wait = no
- user = root
- server = /sbin/in.telnetd
- log_on_failure += USERID
- disable = no
-}
-EOF
-
- # 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
- cp -f $IMGPATH/bin/login $MBD_DIR/sbin/login
- cp -f $IMGPATH/usr/sbin/sshd $MBD_DIR/sbin/sshd
- cp -f $IMGPATH/usr/sbin/xinetd $MBD_DIR/sbin/xinetd
- cp -f $IMGPATH/usr/sbin/in.telnetd $MBD_DIR/sbin/in.telnetd
- cp -f $IMGPATH/bin/bash $MBD_DIR/sbin/bash
- cp -f $IMGPATH/bin/busybox $MBD_DIR/sbin/busybox
-
- # make some symlinks
- ln -sf bash $MBD_DIR/bin/sh
- (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 )
-
- # and copy libraries too
- mkdir -p $MBD_DIR/$LIBDIR
- for lib in $IMGPATH/$LIBDIR/libc.so* \
- $IMGPATH/$LIBDIR/libc-*.so* \
- $IMGPATH/$LIBDIR/ld-*.so* \
- $IMGPATH/$LIBDIR/ld.so* \
- $IMGPATH/$LIBDIR/ld64.so* \
- $IMGPATH/$LIBDIR/libtermcap.so* \
- $IMGPATH/$LIBDIR/libpam.so* \
- $IMGPATH/$LIBDIR/libdl.so* \
- $IMGPATH/$LIBDIR/libdl-*.so* \
- $IMGPATH/$LIBDIR/libnss_files* \
- $IMGPATH/$LIBDIR/libnsl* \
- $IMGPATH/$LIBDIR/libutil.so* \
- $IMGPATH/$LIBDIR/libutil-*.so* \
- $IMGPATH/$LIBDIR/libcrypt*so* \
- $IMGPATH/$LIBDIR/libselinux*so* \
- $IMGPATH/$LIBDIR/libsepol*so* \
- $IMGPATH/$LIBDIR/libattr*so* \
- $IMGPATH/$LIBDIR/libresolv.so* \
- $IMGPATH/$LIBDIR/libresolv-*.so* \
- $IMGPATH/$LIBDIR/libm.so* \
- $IMGPATH/$LIBDIR/libm-*.so* \
- $IMGPATH/usr/$LIBDIR/libz.so* \
- $IMGPATH/$LIBDIR/libssl* \
- $IMGPATH/$LIBDIR/libcom_err* \
- $IMGPATH/$LIBDIR/libe2p* \
- $IMGPATH/$LIBDIR/libuuid* \
- $IMGPATH/usr/$LIBDIR/libwrap*.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libX11.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libXmuu.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libXext.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libXt.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libSM.so* \
- $IMGPATH/usr/X11R6/$LIBDIR/libICE.so* ; do
- if [ -e $lib ]; then cp -df $lib $MBD_DIR/$LIBDIR/ ; fi
- done
-
- mkdir -p $MBD_DIR/usr/$LIBDIR
- for lib in $IMGPATH/usr/$LIBDIR/libkrb5.so* \
- $IMGPATH/usr/$LIBDIR/libkrb5support.so* \
- $IMGPATH/usr/$LIBDIR/libgssapi_krb5.so* \
- $IMGPATH/usr/$LIBDIR/libk5crypto.so* \
- $IMGPATH/usr/$LIBDIR/libcom_err.so* ; do
- if [ -e $lib ]; then cp -df $lib $MBD_DIR/usr/$LIBDIR/ ; fi
- done
-}
-
-makeinitrd() {
- EXTRAINITRDPATH=""
- INITRDSIZE=""
- KEEP=""
- PADSIZE=""
- LOADERBIN=""
- INITRDMODULES=""
- MODULEBALLNAME="modules.cgz"
- 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
- elif [ $1 = "--moduleballname" ]; then
- MODULEBALLNAME=$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=/tmp/makebootdisk.dir.$$
- MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$
- MBD_BOOTTREE=/tmp/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/proc
- mkdir -p $MBD_DIR/selinux
- mkdir -p $MBD_DIR/sys
- mkdir -p $MBD_DIR/tmp
- mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
- mkdir -p $MBD_DIR/var/state
- mkdir -p $MBD_DIR/var/run
- mkdir -p $MBD_DIR/var/lock/rpm
-
- if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
- mkdir -p $MBD_DIR/dev/iseries
- fi
-
- 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/X11R6/bin/xauth $MBD_DIR/sbin/xauth
- cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
- fi
-
- if [ -n "$INITRDMODULES" ]; then
- MODSET=`expandModuleSet "$INITRDMODULES"`
- makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET"
- fi
-
- cat > $MBD_DIR/etc/passwd << EOF
- root::0:0:root:/:/bin/bash
-EOF
-
- # set up the arch bits
- echo $arch > $MBD_DIR/etc/arch
-
- install -s -m 755 $LOADERBINDIR/$LOADERBIN $MBD_DIR/sbin/loader
- strip $MBD_DIR/sbin/loader
- if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
- install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin
- strip $MBD_DIR/sbin/init
- ln -s ./init $MBD_DIR/sbin/shutdown
- ln -s ./init $MBD_DIR/sbin/halt
- ln -s ./init $MBD_DIR/sbin/poweroff
- else
- install -s -m 755 $LOADERBINDIR/shutdown $MBD_DIR/sbin/shutdown
- install -m 755 $IMGPATH/usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR/sbin/init
- install -m 755 $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 $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 b/bterm 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
- ln -s loader $MBD_DIR/sbin/$n
- done
-
- ln -s /usr/bin/sh $MBD_DIR/sbin/sh
- 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/telnet setup
- if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
- setupShellEnvironment
- fi
-
-cat > $MBD_DIR/.profile <<EOF
-PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/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
-}
-
-makeinstimage () {
- imagename=$1
- type=$2
- tmpdir=/tmp/instimage.dir.$$
-
- rm -rf $tmpimage $tmpdir
- mkdir -p $mntpoint $tmpdir
-
- mkdir -p $tmpdir
- (cd $INSTIMGTEMPLATE; find . | cpio --quiet -p $tmpdir)
- makeproductfile $tmpdir
-
- if [ -z "$type" -o "$type" = "cramfs" ]; then
- echo "Running mkcramfs $CRAMBS $tmpdir $INSTIMGPATH/${imagename}2.img"
- mkfs.cramfs $CRAMBS $tmpdir /tmp/${imagename}2.img.$$
- elif [ "$type" = "squashfs" ]; then
- echo "Running mksquashfs $tmpdir /tmp/${imagename}2.img -all-root"
- mksquashfs $tmpdir /tmp/${imagename}2.img.$$ -all-root
- chmod 0644 /tmp/${imagename}2.img.$$
- fi
- cp /tmp/${imagename}2.img.$$ $INSTIMGPATH/${imagename}2.img
- size=$(ls -l $INSTIMGPATH/${imagename}2.img | awk '{print $5}')
- size=$(expr $size / 1024)
- echo "Wrote $INSTIMGPATH/${imagename}2.img (${size}k)..."
- rm -rf $tmpdir
-}
-
-makemainimage () {
- imagename=$1
- type=$2
- mmi_tmpimage=/tmp/instimage.img.$$
- mmi_mntpoint=/tmp/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
- 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" |
- 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"
- mksquashfs $IMGPATH $mmi_tmpimage -all-root
- 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)"
-
- rm $mmi_tmpimage
-}
-
-makeSecondStage() {
- echo "Building minstg.img"
- makeinstimage "minstg" "squashfs"
- [ $? = 0 ] || exit 1
- echo "Building stage2.img"
- makemainimage "stage2" "squashfs"
- [ $? = 0 ] || exit 1
-}
-
-doPostImages() {
- /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} = i686 ]; then
- source $TOPDIR/mk-images.i386
-else
- source $TOPDIR/mk-images.${BUILDARCH}
-fi
-
-# Find the kernel, unpack it, and verify it
-kerneltags="kernel"
-if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
- arches="ppc64pseries ppc64 ppc64iseries ppc"
-elif [ "$BUILDARCH" = "i686" ]; then
- arches="i386 i586 i686"
- kerneltags="kernel kernel-xenU"
-elif [ "$BUILDARCH" = "x86_64" ]; then
- arches="x86_64"
- kerneltags="kernel kernel-xenU"
-else
- arches="$BUILDARCH"
-fi
-
-foundakernel=""
-for KERNELARCH in $arches; do
- for kernelvers in $kerneltags; do
- kpackage=$(findPackage $KERNELPATH $kernelvers)
- if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
- echo "No i586 kernel, trying i686..."
- KERNELARCH="i686"
- kpackage=$(findPackage $KERNELPATH $kernelvers)
- fi
-
- if [ ! -f "$kpackage" ]; then
- echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping"
- continue
- fi
-
- KERNELROOT=$KERNELBASE/$KERNELARCH
- mkdir -p $KERNELROOT/lib/modules/misc
-
- foundakernel="yes"
-
- if [ "${kernelvers}" = "kernel-xenU" ]; then kerneltag="xenU" ; fi
-
- version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kerneltag}
- arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
- echo "unpacking $kpackage.$arch"
-
- rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
-
- 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 "$allmods" $MODDEPS
- find $KERNELROOT/lib/modules/$version > $CACHE
-
- # make the boot images
- makeBootImages
- done
-done
-
-doPostImages
-
-# do some clean up before making the cramfs of the second stage
-rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
-
-if [ -n "$foundakernel" ]; then
- # make the second stage
- find $KERNELBASE/*/lib/modules/ > $CACHE
- makeSecondStage
- rm -rf $KERNELBASE
-fi
-
-cd $TOPDIR