From 3ad122912b9062d3fefcc340edf10b8492bd906a Mon Sep 17 00:00:00 2001 From: daniceexi Date: Wed, 21 Sep 2011 06:47:20 +0000 Subject: [PATCH] code drop for fedora15 support. Support the systemd and dracut 009 git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10579 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/anaconda.pm | 33 ++- .../install/fedora/compute.fedora15.pkglist | 1 + .../xcat/install/fedora/compute.fedora15.tmpl | 1 + .../netboot/fedora/compute.fedora15.pkglist | 1 + .../xcat/netboot/fedora/dracut_009/check | 1 + .../netboot/fedora/dracut_009/install.netboot | 1 + .../fedora/dracut_009/install.statelite | 1 + .../netboot/fedora/dracut_009/installkernel | 1 + .../netboot/fedora/dracut_009/xcat-cmdline.sh | 4 + .../fedora/dracut_009/xcat-prepivot.sh | 89 ++++++++ .../xcat/netboot/fedora/dracut_009/xcatroot | 194 ++++++++++++++++++ xCAT-server/share/xcat/netboot/rh/genimage | 143 +++++++------ 12 files changed, 403 insertions(+), 67 deletions(-) create mode 120000 xCAT-server/share/xcat/install/fedora/compute.fedora15.pkglist create mode 120000 xCAT-server/share/xcat/install/fedora/compute.fedora15.tmpl create mode 120000 xCAT-server/share/xcat/netboot/fedora/compute.fedora15.pkglist create mode 120000 xCAT-server/share/xcat/netboot/fedora/dracut_009/check create mode 120000 xCAT-server/share/xcat/netboot/fedora/dracut_009/install.netboot create mode 120000 xCAT-server/share/xcat/netboot/fedora/dracut_009/install.statelite create mode 120000 xCAT-server/share/xcat/netboot/fedora/dracut_009/installkernel create mode 100644 xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-cmdline.sh create mode 100755 xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-prepivot.sh create mode 100755 xCAT-server/share/xcat/netboot/fedora/dracut_009/xcatroot diff --git a/xCAT-server/lib/xcat/plugins/anaconda.pm b/xCAT-server/lib/xcat/plugins/anaconda.pm index f63e9fe69..e8b87bdce 100644 --- a/xCAT-server/lib/xcat/plugins/anaconda.pm +++ b/xCAT-server/lib/xcat/plugins/anaconda.pm @@ -71,6 +71,7 @@ my %distnames = ( "1257725234.740991" => "fedora12", #x86_64 DVD ISO "1273712675.937554" => "fedora13", #x86_64 DVD ISO "1287685820.403779" => "fedora14", #x86_64 DVD ISO + "1305315870.828212" => "fedora15", #x86_64 DVD ISO "1194512200.047708" => "rhas4.6", "1194512327.501046" => "rhas4.6", @@ -179,6 +180,27 @@ sub process_request } } +# Check whether the dracut is supported by this os +sub using_dracut +{ + my $os = shift; + if ($os =~ /(rhels|rhel)(\d+)/) { + if ($2 >= 6) { + return 1; + } + } elsif ($os =~ /fedora(\d+)/) { + if ($1 >= 12) { + return 1; + } + } elsif ($os =~ /SL(\d+)/) { + if ($1 >= 6) { + return 1; + } + } + + return 0; +} + sub mknetboot { my $xenstyle=0; @@ -341,7 +363,6 @@ sub mknetboot ); } - if ( ! $linuximagetab ) { $linuximagetab = xCAT::Table->new('linuximage'); } @@ -360,7 +381,6 @@ sub mknetboot ); } } - #print"osvr=$osver, arch=$arch, profile=$profile, imgdir=$rootimgdir\n"; unless ($osver and $arch and $profile) { @@ -457,7 +477,6 @@ sub mknetboot $donetftp{$osver,$arch,$profile} = 1; } - if ($statelite) { my $initrdloc = "/$tftpdir/xcat/netboot/$osver/$arch/$profile/"; if ($rootfstype eq "ramdisk") { @@ -566,9 +585,7 @@ sub mknetboot } # special case for redhat6, fedora12/13/14 - if ($osver =~ m/rhel6/ || $osver =~ m/rhels6/ - || $osver =~ m/fedora12/ || $osver =~ m/fedora13/ - || $osver =~ m/fedora14/ || $osver =~ m/SL6/) { + if (&using_dracut($osver)) { $kcmdline = "root=nfs:$nfssrv:$nfsdir/rootimg:ro STATEMNT="; } else { $kcmdline = "NFSROOT=$nfssrv:$nfsdir STATEMNT="; @@ -742,9 +759,7 @@ sub mknetboot my $initrdstr = "xcat/netboot/$osver/$arch/$profile/initrd-stateless.gz"; $initrdstr = "xcat/netboot/$osver/$arch/$profile/initrd-statelite.gz" if ($statelite); # special case for the dracut-enabled OSes - if ($osver =~ m/rhels6/ || $osver =~ m/rhel6/ - || $osver =~ m/fedora12/ || $osver =~ m/fedora13/ - || $osver =~ m/fedora14/ || $osver =~ m/SL6/) { + if (&using_dracut($osver)) { if($statelite and $rootfstype eq "ramdisk") { $initrdstr = "xcat/netboot/$osver/$arch/$profile/initrd-stateless.gz"; } diff --git a/xCAT-server/share/xcat/install/fedora/compute.fedora15.pkglist b/xCAT-server/share/xcat/install/fedora/compute.fedora15.pkglist new file mode 120000 index 000000000..7101667e8 --- /dev/null +++ b/xCAT-server/share/xcat/install/fedora/compute.fedora15.pkglist @@ -0,0 +1 @@ +compute.fedora14.pkglist \ No newline at end of file diff --git a/xCAT-server/share/xcat/install/fedora/compute.fedora15.tmpl b/xCAT-server/share/xcat/install/fedora/compute.fedora15.tmpl new file mode 120000 index 000000000..334df473d --- /dev/null +++ b/xCAT-server/share/xcat/install/fedora/compute.fedora15.tmpl @@ -0,0 +1 @@ +compute.fedora14.tmpl \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/compute.fedora15.pkglist b/xCAT-server/share/xcat/netboot/fedora/compute.fedora15.pkglist new file mode 120000 index 000000000..7101667e8 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/compute.fedora15.pkglist @@ -0,0 +1 @@ +compute.fedora14.pkglist \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/check b/xCAT-server/share/xcat/netboot/fedora/dracut_009/check new file mode 120000 index 000000000..87ffb9d77 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/check @@ -0,0 +1 @@ +../../rh/dracut/check \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.netboot b/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.netboot new file mode 120000 index 000000000..642f46713 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.netboot @@ -0,0 +1 @@ +../../rh/dracut/install.netboot \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.statelite b/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.statelite new file mode 120000 index 000000000..a29fbcca1 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/install.statelite @@ -0,0 +1 @@ +../../rh/dracut/install.statelite \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/installkernel b/xCAT-server/share/xcat/netboot/fedora/dracut_009/installkernel new file mode 120000 index 000000000..65990228e --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/installkernel @@ -0,0 +1 @@ +../../rh/dracut/installkernel \ No newline at end of file diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-cmdline.sh b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-cmdline.sh new file mode 100644 index 000000000..80d088557 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-cmdline.sh @@ -0,0 +1,4 @@ +root=1 +rootok=1 +netroot=xcat +echo '[ -e $NEWROOT/proc ]' > $hookdir/initqueue/finished/xcatroot.sh diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-prepivot.sh b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-prepivot.sh new file mode 100755 index 000000000..f6571b82f --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcat-prepivot.sh @@ -0,0 +1,89 @@ +#!/bin/sh +NEWROOT=/sysroot +SERVER=${SERVER%%/*} +SERVER=${SERVER%:} +RWDIR=.statelite +if [ ! -z $STATEMNT ]; then #btw, uri style might have left future options other than nfs open, will u se // to detect uri in the future I guess + SNAPSHOTSERVER=${STATEMNT%:*} + SNAPSHOTROOT=${STATEMNT#*/} + #echo $SNAPSHOTROOT + #echo $SNAPSHOTSERVER + # may be that there is not server and just a directory. + if [ -z $SNAPSHOTROOT ]; then + SNAPSHOTROOT=$SNAPSHOTSERVER + SNAPSHOTSERVER= + fi +fi + +echo Setting up Statelite +mkdir -p $NEWROOT + +# now we need to mount the rest of the system. This is the read/write portions +# echo Mounting snapshot directories + +MAXTRIES=7 +ITER=0 +if [ ! -e "$NEWROOT/$RWDIR" ]; then + echo "" + echo "This NFS root directory doesn't have a /$RWDIR directory for me to mount a rw filesystem. You'd better create it... " + echo "" + /bin/sh +fi + +if [ ! -e "$NEWROOT/etc/init.d/statelite" ]; then + echo "" + echo "$NEWROOT/etc/init.d/statelite doesn't exist. Perhaps you didn't create this image with th e -m statelite mode" + echo "" + /bin/sh +fi + +mount -t tmpfs rw $NEWROOT/$RWDIR +mkdir -p $NEWROOT/$RWDIR/tmpfs +ME=`hostname` + +# mount the SNAPSHOT directory here for persistent use. +if [ ! -z $SNAPSHOTSERVER ]; then + mkdir -p $NEWROOT/$RWDIR/persistent + MAXTRIES=5 + ITER=0 + if [ -z $MNTOPTS ]; then + MNT_OPTIONS="nolock,rsize=32768,tcp,nfsvers=3,timeo=14" + else + MNT_OPTIONS=$MNTOPTS + fi + while ! mount $SNAPSHOTSERVER:/$SNAPSHOTROOT $NEWROOT/$RWDIR/persistent -o $MNT_OPTIONS; do + ITER=$(( ITER + 1 )) + if [ "$ITER" == "$MAXTRIES" ]; then + echo "Your are dead, rpower $ME boot to play again." + echo "Possible problems: +1. $SNAPSHOTSERVER is not exporting $SNAPSHOTROOT ? +2. Is DNS set up? Maybe that's why I can't mount $SNAPSHOTSERVER." + /bin/sh + exit + fi + RS= $(( $RANDOM % 20 )) + echo "Trying again in $RS seconds..." + sleep $RS + done +fi + +# TODO: handle the dhclient/resolv.conf/ntp, etc +$NEWROOT/etc/init.d/statelite +READONLY=yes +export READONLY +fastboot=yes +export fastboot +keep_old_ip=yes +export keep_old_ip +mount -n --bind /dev $NEWROOT/dev +mount -n --bind /proc $NEWROOT/proc +mount -n --bind /sys $NEWROOT/sys + +if [ -d "$NEWROOT/etc/sysconfig" -a ! -e "$NEWROOT/etc/sysconfig/selinux" ]; then + echo "SELINUX=disabled" >> "$NEWROOT/etc/sysconfig/selinux" +fi + +# inject new exit_if_exists +echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/xcat.sh +# force udevsettle to break +> $hookdir/initqueue/work diff --git a/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcatroot b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcatroot new file mode 100755 index 000000000..ad17dc2f6 --- /dev/null +++ b/xCAT-server/share/xcat/netboot/fedora/dracut_009/xcatroot @@ -0,0 +1,194 @@ +#!/bin/sh +NEWROOT=$3 +RWDIR=.statelite +XCATMASTER=$XCAT + +if [ ! -z "$imgurl" ]; then + if [ xhttp = x${imgurl%%:*} ]; then + NFS=0 + FILENAME=${imgurl##*/} + while [ ! -r "$FILENAME" ]; do + echo Getting $imgurl... + if ! wget $imgurl; then + rm -f $FILENAME + sleep 27 + fi + done + elif [ xnfs = x${imgurl%%:*} ]; then + NFS=1 + SERVER=${imgurl#nfs:} + SERVER=${SERVER#/} + SERVER=${SERVER#/} + ROOTDIR=$SERVER + SERVER=${SERVER%%/*} + SERVER=${SERVER%:} + ROOTDIR=/${ROOTDIR#*/} + fi +fi +#echo 0 > /proc/sys/vm/zone_reclaim_mode #Avoid kernel bug + +if [ -r /rootimg.sfs ]; then + echo Setting up squashfs with ram overlay. + mknod /dev/loop0 b 7 0 + mkdir -p /ro + mkdir -p /rw + mount -t squashfs /rootimg.sfs /ro + mount -t tmpfs rw /rw + mount -t aufs -o dirs=/rw:/ro mergedroot $NEWROOT + mkdir -p $NEWROOT/ro + mkdir -p $NEWROOT/rw + mount --move /ro $NEWROOT/ro + mount --move /rw $NEWROOT/rw +elif [ -r /rootimg.gz ]; then + echo Setting up RAM-root tmpfs. + mount -t tmpfs rootfs $NEWROOT + cd $NEWROOT + echo -n "Extracting root filesystem:" + if [ -x /bin/cpio ]; then + gzip -cd /rootimg.gz |/bin/cpio -idum + else + gzip -cd /rootimg.gz |cpio -idum + fi + echo Done +elif [ -r /rootimg-statelite.gz ]; then + echo Setting up RAM-root tmpfs for statelite mode. + mount -t tmpfs rootfs $NEWROOT + cd $NEWROOT + echo -n "Extracting root filesystem:" + if [ -x /bin/cpio ]; then + gzip -cd /rootimg-statelite.gz |/bin/cpio -idum + else + gzip -cd /rootimg-statelite.gz |cpio -idum + fi + echo Done + # then, the statelite staffs will be processed + echo Setting up Statelite + modprobe nfs + MAXTRIES=7 + ITER=0 + if [ ! -e "$NEWROOT/$RWDIR" ]; then + echo "" + echo "The /$RWDIR directory doesn't exist in the rootimg... " + echo "" + /bin/sh + fi + + if [ ! -e "$NEWROOT/etc/init.d/statelite" ]; then + echo "" + echo "$NEWROOT/etc/init.d/statelite doesn't exist... " + echo "" + /bin/sh + fi + + mount -t tmpfs rw $NEWROOT/$RWDIR + mkdir -p $NEWROOT/$RWDIR/tmpfs + ME=`hostname` + + # mount the SNAPSHOT directory here for persistent use. + if [ ! -z $STATEMNT ]; then + SNAPSHOTSERVER=${STATEMNT%:*} + SNAPSHOTROOT=${STATEMNT#*/} + if [ -z $SNAPSHOTROOT ]; then + SNAPSHOTROOT=$SNAPSHOTSERVER + SNAPSHOTSERVER= + fi + fi + + if [ ! -z $SNAPSHOTSERVER ]; then + mkdir -p $NEWROOT/$RWDIR/persistent + MAXTRIES=5 + ITER=0 + if [ -z $MNTOPTS ]; then + MNT_OPTIONS="nolock,rsize=32768,tcp,timeo=14" + else + MNT_OPTIONS=$MNTOPTS + fi + while ! mount $SNAPSHOTSERVER:/$SNAPSHOTROOT $NEWROOT/$RWDIR/persistent -o $MNT_OPTIONS; do + ITER=$(( ITER + 1 )) + if [ "$ITER" == "$MAXTRIES" ]; then + echo "You are dead, rpower $ME boot to play again." + echo "Possible problems: +1. $SNAPSHOTSERVER is not exporting $SNAPSHOTROOT ? +2. Is DNS set up? Maybe that's why I can't mount $SNAPSHOTSERVER." + /bin/sh + exit + fi + RS=$(( $RANDOM % 20 )) + echo "Trying again in $RS seconds ..." + sleep $RS + done + fi + + $NEWROOT/etc/init.d/statelite + fastboot=yes + export fastboot + keep_old_ip=yes + export keep_old_ip + + mount -n --bind /dev $NEWROOT/dev + mount -n --bind /proc $NEWROOT/proc + mount -n --bind /sys $NEWROOT/sys + +else + echo -n Failed to download image, panicing in 5... + for i in 4 3 2 1 0; do + /bin/sleep 1 + echo -n $i... + done + echo + echo "You're dead. rpower nodename reset to play again. + +* Did you packimage with -m cpio, -m squashfs, or -m nfs? +* If using -m squashfs did you include aufs.ko with geninitrd? + e.g.: -n tg3,squashfs,aufs,loop +* If using -m nfs did you export NFS and sync rootimg? And + did you include the aufs and nfs modules in the proper order: + e.g.: -n tg3,aufs,loop,sunrpc,lockd,nfs_acl,nfs + +" + /bin/dash + exit +fi +cd / + +if [ -z $STATEMNT ]; then + for lf in /tmp/dhclient.*.lease; do + netif=${lf#*.} + netif=${netif%.*} + cp $lf "$NEWROOT/var/lib/dhclient/dhclient-$netif.leases" + done + + if [ ! -z "$ifname" ]; then + MACX=${ifname#*:} + ETHX=${ifname%:$MACX*} + elif [ ! -z "$netdev" ]; then + ETHX=$netdev + MACX=`ip link show $netdev | grep ether | awk '{print $2}'` + elif [ ! -z "$BOOTIF" ]; then + MACX=$BOOTIF + ETHX=`ifconfig |grep -i $BOOTIF | awk '{print $1}'` + fi + + if [ ! -z "$MACX" ] && [ ! -z "$ETHX" ]; then + if [ ! -e $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX ]; then + touch $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX + fi + echo "DEVICE=$ETHX" > $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX + echo "BOOTPROTO=dhcp" >> $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX + echo "HWADDR=$MACX" >> $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX + echo "ONBOOT=yes" >> $NEWROOT/etc/sysconfig/network-scripts/ifcfg-$ETHX + fi +fi + +cp /etc/resolv.conf "$NEWROOT/etc/" + +if [ -d "$NEWROOT/etc/sysconfig" -a ! -e "$NEWROOT/etc/sysconfig/selinux" ]; then + echo "SELINUX=disabled" >> "$NEWROOT/etc/sysconfig/selinux" +fi + +# inject new exit_if_exists +echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/initqueue/xcat.sh +echo "$hookdir/initqueue/xcat.sh" +cat $hookdir/initqueue/xcat.sh +# force udevsettle to break +> $hookdir/initqueue/work diff --git a/xCAT-server/share/xcat/netboot/rh/genimage b/xCAT-server/share/xcat/netboot/rh/genimage index bf1dc23fc..54641f35e 100755 --- a/xCAT-server/share/xcat/netboot/rh/genimage +++ b/xCAT-server/share/xcat/netboot/rh/genimage @@ -22,6 +22,7 @@ Getopt::Long::Configure("bundling"); Getopt::Long::Configure("pass_through"); my $dracutmode; #Indicate whether this is a dracut style initrd +my $dracutdir = "dracut"; # The default directory name of dracut my $prinic; #TODO be flexible on node primary nic my $othernics; #TODO be flexible on node primary nic my $netdriver; @@ -438,6 +439,16 @@ close($moddeps); unlink "/tmp/genimage.$$.yum.conf"; if (-d "$rootimg_dir/usr/share/dracut") { $dracutmode = 1; + # get dracut version + my $dracutver = `rpm -R $rootimg_dir -qi dracut | grep Version | awk -F' ' '{print \$3}'`; + if ($dracutver =~ /^\d\d\d$/) { + if ($dracutver >= "009") { + $dracutdir = "dracut_009"; + } else { + $dracutdir = "dracut"; # The default directory + } + } + print "Enter the dracut mode. Dracut version: $dracutver. Dracut directory: $dracutdir.\n"; } #-- run postinstall script @@ -546,13 +557,13 @@ unless ($dracutmode) { #in dracut mode, we delegate all this activity } if ($dracutmode) { - # backup etc/rc.sysinit file before modifing it - system("cp -a $rootimg_dir/etc/rc.sysinit $rootimg_dir/etc/rc.sysinit.backup"); # modify etc/rc.sysinit, prevent remounting # TODO: need to find one way to prevent remounting my $SYSINITFILE; my $TMPSYSINITFILE; if (-f "$rootimg_dir/etc/rc.sysinit") { + # backup etc/rc.sysinit file before modifing it + system("cp -a $rootimg_dir/etc/rc.sysinit $rootimg_dir/etc/rc.sysinit.backup"); open($SYSINITFILE, "$rootimg_dir/etc/rc.sysinit"); open($TMPSYSINITFILE, '>', "/tmp/rc.sysinit.tmp"); # find the following lines, @@ -614,8 +625,8 @@ sub mkinitrd_dracut { my $dracutmpath = "$rootimg_dir/usr/share/dracut/modules.d/97xcat"; mkpath($dracutmpath); - my $perm = (stat("$fullpath/dracut/check"))[2]; - cp("$fullpath/dracut/check", $dracutmpath); + my $perm = (stat("$fullpath/$dracutdir/check"))[2]; + cp("$fullpath/$dracutdir/check", $dracutmpath); chmod($perm&07777, "$dracutmpath/check"); foreach (@ndrivers) { s/\.ko$//; } @@ -625,12 +636,12 @@ sub mkinitrd_dracut { if ($mode eq "statelite") { # for statelite - cp("$fullpath/dracut/install.statelite","$dracutmpath/install"); - $perm = (stat("$fullpath/dracut/install.statelite"))[2]; + cp("$fullpath/$dracutdir/install.statelite","$dracutmpath/install"); + $perm = (stat("$fullpath/$dracutdir/install.statelite"))[2]; chmod($perm&07777, "$dracutmpath/install"); - cp("$fullpath/dracut/xcat-prepivot.sh",$dracutmpath); - $perm = (stat("$fullpath/dracut/xcat-prepivot.sh"))[2]; + cp("$fullpath/$dracutdir/xcat-prepivot.sh",$dracutmpath); + $perm = (stat("$fullpath/$dracutdir/xcat-prepivot.sh"))[2]; chmod($perm&07777, "$dracutmpath/xcat-prepivot.sh"); # update etc/dracut.conf @@ -640,12 +651,12 @@ sub mkinitrd_dracut { print $DRACUTCONF qq{filesystems+="nfs"\n}; close $DRACUTCONF; } elsif ($mode eq "stateless") { - cp("$fullpath/dracut/install.netboot","$dracutmpath/install"); - $perm = (stat("$fullpath/dracut/install.netboot"))[2]; + cp("$fullpath/$dracutdir/install.netboot","$dracutmpath/install"); + $perm = (stat("$fullpath/$dracutdir/install.netboot"))[2]; chmod($perm&07777, "$dracutmpath/install"); - cp("$fullpath/dracut/xcat-cmdline.sh","$dracutmpath/"); - $perm = (stat("$fullpath/dracut/xcat-cmdline.sh"))[2]; + cp("$fullpath/$dracutdir/xcat-cmdline.sh","$dracutmpath/"); + $perm = (stat("$fullpath/$dracutdir/xcat-cmdline.sh"))[2]; chmod($perm&07777, "$dracutmpath/xcat-cmdline.sh"); if ($prinic) { @@ -655,12 +666,12 @@ sub mkinitrd_dracut { close $optspec; } - cp("$fullpath/dracut/xcatroot","$dracutmpath/"); - $perm = (stat("$fullpath/dracut/xcatroot"))[2]; + cp("$fullpath/$dracutdir/xcatroot","$dracutmpath/"); + $perm = (stat("$fullpath/$dracutdir/xcatroot"))[2]; chmod($perm&07777, "$dracutmpath/xcatroot"); - cp("$fullpath/dracut/installkernel", "$dracutmpath/"); - $perm = (stat("$fullpath/dracut/installkernel"))[2]; + cp("$fullpath/$dracutdir/installkernel", "$dracutmpath/"); + $perm = (stat("$fullpath/$dracutdir/installkernel"))[2]; chmod($perm&07777, "$dracutmpath/installkernel"); # update etc/dracut.conf @@ -1296,6 +1307,19 @@ sub postscripts { chmod '0755', "$rootimg_dir/opt/xcat/xcatdsklspost"; } + +sub using_systemd { + my $os = shift; + if ($os =~ /fedora(\d+)/) { + if ($1 >= 15) { + return 1; + } + } + + return 0; +} + + sub generic_post { #This function is meant to leave the image in a state approximating a normal install my $cfgfile; unlink("$rootimg_dir/dev/null"); @@ -1306,12 +1330,14 @@ sub generic_post { #This function is meant to leave the image in a state approxi print $cfgfile "proc /proc proc defaults 0 0\n"; print $cfgfile "sysfs /sys sysfs defaults 0 0\n"; - if ($tmplimit) { - print $cfgfile "tmpfs /tmp tmpfs defaults,size=$tmplimit 0 2\n"; - print $cfgfile "tmpfs /var/tmp tmpfs defaults,size=$tmplimit 0 2\n"; - } else { - print $cfgfile "tmpfs /tmp tmpfs defaults,size=10m 0 2\n"; - print $cfgfile "tmpfs /var/tmp tmpfs defaults,size=10m 0 2\n"; + if (!&using_systemd($osver)) { + if ($tmplimit) { + print $cfgfile "tmpfs /tmp tmpfs defaults,size=$tmplimit 0 2\n"; + print $cfgfile "tmpfs /var/tmp tmpfs defaults,size=$tmplimit 0 2\n"; + } else { + print $cfgfile "tmpfs /tmp tmpfs defaults,size=10m 0 2\n"; + print $cfgfile "tmpfs /var/tmp tmpfs defaults,size=10m 0 2\n"; + } } my $rootfs_name=$profile."_".$arch; @@ -1339,13 +1365,13 @@ sub generic_post { #This function is meant to leave the image in a state approxi close($cfgfile); } - # securetty not needed on s390x - if ($arch ne "s390x") { - open($cfgfile,">>","$rootimg_dir/etc/securetty"); - print $cfgfile "ttyS0\n"; - print $cfgfile "ttyS1\n"; - close($cfgfile); - } + # securetty not needed on s390x + if ($arch ne "s390x") { + open($cfgfile,">>","$rootimg_dir/etc/securetty"); + print $cfgfile "ttyS0\n"; + print $cfgfile "ttyS1\n"; + close($cfgfile); + } my @passwd; open($cfgfile,"<","$rootimg_dir/etc/passwd"); @@ -1369,38 +1395,39 @@ sub generic_post { #This function is meant to leave the image in a state approxi symlink "/etc/init.d/network","$rootimg_dir/etc/rc3.d/S10network"; } - # gettyset is not found on s390x - if ($arch ne "s390x") { - open($cfgfile,">","$rootimg_dir/etc/init.d/gettyset"); - print $cfgfile "#!/bin/bash\n"; - print $cfgfile "for i in `cat /proc/cmdline`; do\n"; - print $cfgfile ' KEY=`echo $i|cut -d= -f 1`'."\n"; - print $cfgfile " if [ \"\$KEY\" == \"console\" -a \"\$i\" != \"console=tty0\" ]; then\n"; - print $cfgfile " VALUE=`echo \$i | cut -d= -f 2`\n"; - print $cfgfile " COTTY=`echo \$VALUE|cut -d, -f 1`\n"; - print $cfgfile " COSPEED=`echo \$VALUE|cut -d, -f 2|cut -dn -f 1`\n"; - print $cfgfile " if echo \$VALUE | grep n8r; then\n"; - print $cfgfile " FLOWFLAG=\"-h\"\n"; - print $cfgfile " fi\n"; - print $cfgfile " if [ -x /sbin/initctl ]; then\n"; # Upstart style - print $cfgfile " initctl emit --no-wait fedora.serial-console-available \$COTTY \$COSPEED\n"; - print $cfgfile " else\n"; - print $cfgfile " echo xco:2345:respawn:/sbin/agetty \$FLOWFLAG \$COTTY \$COSPEED xterm >> /etc/inittab\n"; - print $cfgfile " init q\n"; - print $cfgfile " fi\n"; - print $cfgfile " fi\n"; - print $cfgfile "done\n"; + # gettyset is not found on s390x + if ($arch ne "s390x") { + if (!&using_systemd($osver)) { + open($cfgfile,">","$rootimg_dir/etc/init.d/gettyset"); + print $cfgfile "#!/bin/bash\n"; + print $cfgfile "for i in `cat /proc/cmdline`; do\n"; + print $cfgfile ' KEY=`echo $i|cut -d= -f 1`'."\n"; + print $cfgfile " if [ \"\$KEY\" == \"console\" -a \"\$i\" != \"console=tty0\" ]; then\n"; + print $cfgfile " VALUE=`echo \$i | cut -d= -f 2`\n"; + print $cfgfile " COTTY=`echo \$VALUE|cut -d, -f 1`\n"; + print $cfgfile " COSPEED=`echo \$VALUE|cut -d, -f 2|cut -dn -f 1`\n"; + print $cfgfile " if echo \$VALUE | grep n8r; then\n"; + print $cfgfile " FLOWFLAG=\"-h\"\n"; + print $cfgfile " fi\n"; + print $cfgfile " if [ -x /sbin/initctl ]; then\n"; # Upstart style + print $cfgfile " initctl emit --no-wait fedora.serial-console-available \$COTTY \$COSPEED\n"; + print $cfgfile " else\n"; + print $cfgfile " echo xco:2345:respawn:/sbin/agetty \$FLOWFLAG \$COTTY \$COSPEED xterm >> /etc/inittab\n"; + print $cfgfile " init q\n"; + print $cfgfile " fi\n"; + print $cfgfile " fi\n"; + print $cfgfile "done\n"; - close($cfgfile); + close($cfgfile); - chmod(0755,"$rootimg_dir/etc/init.d/gettyset"); - system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/gettyset S60gettyset"); + chmod(0755,"$rootimg_dir/etc/init.d/gettyset"); + system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/gettyset S60gettyset"); + } - copy("$installroot/postscripts/xcatpostinit", "$rootimg_dir/etc/init.d/xcatpostinit"); - chmod(0755, "$rootimg_dir/etc/init.d/xcatpostinit"); - system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/xcatpostinit S61xcatpostinit"); - } - + copy("$installroot/postscripts/xcatpostinit", "$rootimg_dir/etc/init.d/xcatpostinit"); + chmod(0755, "$rootimg_dir/etc/init.d/xcatpostinit"); + system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/xcatpostinit S61xcatpostinit"); + } }