[Fai-commit] r4897 - in people/faiguy/bugfixes: . 480830 480830/bin
meissner-guest at alioth.debian.org
meissner-guest at alioth.debian.org
Mon May 12 10:16:15 UTC 2008
Author: meissner-guest
Date: 2008-05-12 10:16:14 +0000 (Mon, 12 May 2008)
New Revision: 4897
Added:
people/faiguy/bugfixes/480830/
people/faiguy/bugfixes/480830/bin/
people/faiguy/bugfixes/480830/bin/fai-cd
Log:
create dir for bug #480930 and copy the file which has to be modified
Copied: people/faiguy/bugfixes/480830/bin/fai-cd (from rev 4896, trunk/bin/fai-cd)
===================================================================
--- people/faiguy/bugfixes/480830/bin/fai-cd (rev 0)
+++ people/faiguy/bugfixes/480830/bin/fai-cd 2008-05-12 10:16:14 UTC (rev 4897)
@@ -0,0 +1,298 @@
+#!/bin/bash
+
+# $Id$
+#*********************************************************************
+#
+# fai-cd -- make a fai CD, a bootable CD that performs the FAI
+#
+# This script is part of FAI (Fully Automatic Installation)
+# (c) 2004-2008 by Thomas Lange, lange at informatik.uni-koeln.de
+# Universitaet zu Koeln
+#
+# based on a script called make-fai-bootcd by Niall Young <niall at holbytla.org>
+#
+#*********************************************************************
+# 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.
+#
+# A copy of the GNU General Public License is available as
+# `/usr/share/common-licences/GPL' in the Debian GNU/Linux distribution
+# or on the World Wide Web at http://www.gnu.org/copyleft/gpl.html. You
+# can also obtain it by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#*********************************************************************
+
+set -e
+version="fai-cd 3.3.1, 4-may-2008"
+
+forceremoval=0;
+burn=0
+keep=0
+makeiso=1
+makeusb=0
+hidedirs="/usr/share/locale /usr/share/doc /var/lib/apt /var/cache/apt /usr/share/man /var/lib/dpkg/info /media/mirror/aptcache /media/mirror/.apt-move"
+
+# we need FAI_CONFIGDIR, NFSROOT
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+usage() {
+
+ cat <<-EOF
+ $version. Copyright (C) 2004-2007 Thomas Lange
+ Report bugs to <fai at informatik.uni-koeln.de>.
+
+ Usage: fai-cd [OPTIONS] -m MIRRORDIR ISONAME
+ Create a fai CD, a bootable CD that performs the FAI.
+ Read the man pages pages fai-cd(8).
+EOF
+exit 0
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+die() {
+
+ local e=$1 # first parameter is the exit code
+ shift
+
+ echo "ERROR: $@" # print error message
+ exit $e
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+create_grub_image() {
+
+ mkdir -p $tmp/boot/grub $nfsrootdir/live/filesystem.dir
+
+ [ -d $NFSROOT/usr/lib/grub ] && cp $NFSROOT/usr/lib/grub/*-pc/stage2_eltorito $tmp/boot/grub/
+ [ -d $NFSROOT/usr/lib/grub ] && cp $NFSROOT/usr/lib/grub/*-pc/stage{1,2} $tmp/boot/grub/
+ cp $grub_config $tmp/boot/grub/menu.lst
+ # insert date into grub menu
+ perl -pi -e "s/_VERSIONSTRING_/ $isoversion /" $tmp/boot/grub/menu.lst
+ cp $NFSROOT/boot/vmlinuz-$kernelversion $tmp/boot/vmlinuz
+ cp $NFSROOT/boot/initrd.img-$kernelversion $tmp/boot/initrd.img
+ cp $NFSROOT/boot/config-$kernelversion $tmp/boot/
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+customize_nfsroot() {
+
+ # hide some dirs to save space and make the CD image smaller
+ local d
+
+ mkdir $tmp/empty
+ for d in $hidedirs; do
+ if [ -d $nfsrootdir/$d ]; then
+ [ "$debug" ] && echo "hiding $d"
+ mount --bind $tmp/empty $nfsrootdir/$d
+ fi
+ done
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+unhide_dirs() {
+
+ set +e
+ for d in $hidedirs; do
+ if [ -d $nfsrootdir/$d ]; then
+ [ "$debug" ] && echo "disclosing $d"
+ umount $nfsrootdir/$d 2>/dev/null
+ fi
+ done
+ set -e
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+umount_dirs() {
+
+ set +e
+ local d
+ local dirs="boot $FAI media/mirror etc/apt/sources.list"
+ for d in $dirs; do
+ umount $nfsrootdir/$d 2>/dev/null
+ done
+ rm -f $nfsrootdir/etc/RUNNING_FROM_FAICD
+ [ -d $nfsrootdir ] && umount $nfsrootdir
+ set -e
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+sleep_now() {
+
+ sleep 6666 || true
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+mkiso() {
+
+ if [ $makeiso -eq 1 ]; then
+ echo "Writing FAI CD-ROM image to $isoname. This may need some time."
+ mkisofs -V "$vname" -A "$aname" -log-file /dev/null -quiet -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $isoname $tmp || die 12 "mkisofs failed."
+ echo -n "ISO image size and filename: "; du -h $isoname
+ fi
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+mkusb(){
+
+ if [ $makeusb -eq 1 ]; then
+ # TODO: If usbdir is a device (matches /dev/) mount it
+ [ -d $usbdir ] || die 17 "$usbdir does not exist."
+ echo "Writing FAI data to USB device $usbdir"
+ cp -a $tmp/live $tmp/boot $usbdir 2>/dev/null || true
+ echo $isoversion > $usbdir/.FAI-CD-VERSION
+
+ # now make the USB device bootable
+ rootpartition=$(find_fai_data 2>/dev/null | grep -A 1 'find /.FAI-CD-VERSION' | grep -v 'find /.FAI-CD-VERSION')
+ usbdev=$(echo $rootpartition | sed -e 's/,[[:digit:]]//')
+ echo "Root partition is $rootpartition, device is: $usbdev"
+ if [ -n "$rootpartition" -a -n "$usbdev" ]; then
+ echo "Installing grub."
+ grub --batch >/dev/null << EOM
+root $rootpartition
+setup $usbdev
+EOM
+ else
+ echo "Device could not be detemined. Installing grub will be skipped."
+ fi
+ fi
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+create_iso() {
+
+ # Create the El Torito bootable iso9660 cdrom image
+ # or copy all FAI data to directory (for USB)
+
+ echo "Bind mounting all required parts"
+
+ mount --bind $NFSROOT $nfsrootdir && echo "NFSROOT $NFSROOT mounted"
+ mkdir -p $nfsrootdir/media/mirror || true
+
+ > $nfsrootdir/etc/RUNNING_FROM_FAICD
+ mount --bind $FAI_CONFIGDIR $nfsrootdir/$FAI && echo "Config space $FAI_CONFIGDIR mounted"
+ mount --bind $mirrordir $nfsrootdir/media/mirror && echo "Mirror $mirrordir mounted"
+# TODO: customize /etc/apt, copy apt preferences etc.
+
+ # this will be the sources.list for the CD
+ tmp1=$(mktemp) || exit 12
+ cat > $tmp1 <<EOF
+# mirror location for fai CD, file generated by fai-cd
+EOF
+
+ dists=$(find $mirrordir -name "Packages*" | grep binary | sed 's/binary-.*//' | \
+ sed "s#$mirrordir/*dists/##" | xargs -n 1 dirname | uniq )
+
+ for i in $dists ; do
+ comp=$(find $mirrordir/dists/$i -maxdepth 2 -type d -name "binary-*" | \
+ sed -e "s#$mirrordir/*dists/$i/##" -e 's#/binary-.*##' | tr '\n' " ")
+ echo "deb file:/media/mirror $i $comp" >> $tmp1
+ done
+
+ mount --bind $tmp1 $nfsrootdir/etc/apt/sources.list
+ customize_nfsroot
+
+ if [ $keep -eq 1 ]; then
+ echo "fai-cd script stopped for 6666 seconds. The filesystem is now available in $tmp."
+ echo "To continue the script and call the cleanup call: pkill -f 'sleep 6666'"
+ sleep_now 2>/dev/null || true
+ echo "Continue cleanup."
+ fi
+
+ mkiso
+ mkusb
+ rm $tmp1
+ unhide_dirs
+ umount_dirs
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+find_fai_data() {
+
+ grub --batch <<EOM
+find /.FAI-CD-VERSION
+EOM
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+burniso() {
+
+ cdrecord -v -eject $isoname
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - -
+# main program
+
+# Parse commandline options
+while getopts "nkfhg:bm:C:u:" opt ; do
+ case "$opt" in
+ C) cdir=$OPTARG ;;
+ f) forceremoval=1 ;;
+ h) usage ;;
+ g) grub_config="$OPTARG" ;;
+ k) keep=1 ;;
+ m) mirrordir="$OPTARG" ;;
+ n) makeiso=0 ;;
+ b) burn=1 ;;
+ u) usbdir="$OPTARG"
+ makeusb=1
+ makeiso=0
+ [ -e $usbdir/live ] && die 11 "Please remove $usbdir/live. Aborting."
+ ;;
+ ?) usage ;;
+ esac
+done
+shift $(($OPTIND - 1))
+isoname=$1
+
+[ $makeiso -eq 1 -a "$#" -eq 0 ] && die 2 "Please specify the output file for the ISO image."
+[ -z "$mirrordir" ] && die 4 "Please specify the directory of your mirror using -m"
+[ -d "$mirrordir" ] || die 5 "$mirrordir is not a directory"
+[ -f "$isoname" ] && [ $forceremoval -eq 1 ] && rm $isoname
+[ -f "$isoname" ] && die 3 "Outputfile $isoname already exists. Please remove it or use -f."
+[ $(id -u) != "0" ] && die 9 "Run this program as root."
+
+if [ $makeiso -eq 1 ]; then
+ [ -x "$(which mkisofs)" ] || die 8 "mkisofs not found. Please install package."
+fi
+
+# use FAI_ETC_DIR from environment variable
+if [ -n "$FAI_ETC_DIR" -a -z "$cdir" ]; then
+ echo "Using environment variable \$FAI_ETC_DIR."
+ cfdir=$FAI_ETC_DIR
+fi
+[ -n "$cdir" ] && cfdir=$cdir
+${cfdir:=/etc/fai}
+cfdir=$(readlink -f $cfdir) # canonicalize path
+if [ ! -d "$cfdir" ]; then
+ echo "$cfdir is not a directory"
+ exit 6
+fi
+[ "$verbose" ] && echo "Using configuration files from $cfdir"
+. $cfdir/fai.conf
+export NFSROOT=$(source $cfdir/make-fai-nfsroot.conf; echo $NFSROOT)
+NFSROOT="$NFSROOT/live/filesystem.dir"
+
+[ -d "$NFSROOT/etc/fai" ] || die 10 "Please create NFSROOT by calling make-fai-nfsroot or fai-setup."
+
+# if -g is a file name, add prefix
+
+[ -z "$grub_config" ] && grub_config="$cfdir/menu.lst" # set default if undefined
+# if grub_config contains / do not change it, else add prefix $cfdir
+echo $grub_config | grep -q '/' || grub_config="$cfdir/$grub_config"
+[ -f "$grub_config" ] || die 13 "Grub menu file $grub_config not found."
+
+[ -z "$FAI_CONFIGDIR" ] && die 14 "Variable \$FAI_CONFIG not set."
+[ -d $FAI_CONFIGDIR ] || die 15 "Can't find config space $FAI_CONFIGDIR."
+[ -d $FAI_CONFIGDIR/class ] || die 16 "Config space $FAI_CONFIGDIR seems to be empty."
+
+tmp=$(mktemp -t -d fai-cd.XXXXXX) || exit 13
+nfsrootdir=$tmp/live/filesystem.dir
+kernelversion=$(ls -tr $NFSROOT/boot/vmlinu?-* | tail -1 | sed -e 's#.*/vmlinuz-##')
+
+faiversion=$(dpkg --root=$NFSROOT -l fai-client|grep fai-client|awk '{print $3}')
+isoversion="FAI $faiversion -- build $(date '+%c')"
+vname="Fully Automatic Installation CD"
+aname="Fully Automatic Installation by Thomas Lange, $isoversion"
+
+create_grub_image
+
+trap "unhide_dirs;umount_dirs" EXIT ERR
+create_iso
+rm -rf $tmp
+[ "$burn" -eq 1 ] && burniso
+exit 0
More information about the Fai-commit
mailing list