From e1775355f5382880aebadbc90a9093154cd55c4b Mon Sep 17 00:00:00 2001 From: immarvin Date: Fri, 12 Aug 2016 21:11:48 -0400 Subject: [PATCH 1/3] refine the tar options --- xCAT-server/lib/xcat/plugins/packimage.pm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/packimage.pm b/xCAT-server/lib/xcat/plugins/packimage.pm index c6d96ebb5..82e4411f3 100755 --- a/xCAT-server/lib/xcat/plugins/packimage.pm +++ b/xCAT-server/lib/xcat/plugins/packimage.pm @@ -484,14 +484,14 @@ sub process_request { $oldmask = umask 0077; } elsif ($method =~ /tar/) { if (!$exlistloc) { - $excludestr = "find . -xdev -print0 | tar --selinux --xattrs-include='*' --null -T - -c | $compress -c - > ../rootimg.$suffix"; + $excludestr = "find . -xdev -print0 | tar --selinux --xattrs-include='*' --no-recursion --use-compress-program=$compress --null -T - -cf ../rootimg.$suffix"; } else { chdir("$rootimg_dir"); system("$excludestr >> $xcat_packimg_tmpfile"); if ($includestr) { system("$includestr >> $xcat_packimg_tmpfile"); } - $excludestr = "cat $xcat_packimg_tmpfile| tar --selinux --xattrs-include='*' -T - -c | $compress -c - > ../rootimg.$suffix"; + $excludestr = "cat $xcat_packimg_tmpfile| tar --selinux --xattrs-include='*' --no-recursion --use-compress-program=$compress -T - -cf ../rootimg.$suffix"; } $oldmask = umask 0077; } elsif ($method =~ /squashfs/) { @@ -508,8 +508,15 @@ sub process_request { return 1; } chdir("$rootimg_dir"); - my $outputmsg = `$excludestr`; - $callback->({ info => ["$outputmsg"] }); + my $outputmsg = `$excludestr 2>&1`; + unless($?){ + $callback->({ info => ["$outputmsg"] }); + }else{ + $callback->({ info => ["$outputmsg"] }); + $callback->({ error => ["packimage failed while running: \n $excludestr"], errorcode => [1] }); + system("rm -rf $xcat_packimg_tmpfile"); + return 1; + } if ($method =~ /cpio/) { chmod 0644, "$destdir/rootimg.$suffix"; if ($dotorrent) { From 5699b025dd0602f54124d382265803a3bbe9fae7 Mon Sep 17 00:00:00 2001 From: immarvin Date: Sat, 13 Aug 2016 00:30:56 -0400 Subject: [PATCH 2/3] fix issue [FVT]on rhels6.8, rootimg.tar.gz is only 20 bytes after run packimage -m tar rhels6.8-ppc64-netboot-compute ; fix issue #1689 [FVT]:diskless provision broken using rootimg.tar.gz created by packimage -m tar osimage #1688 --- xCAT-server/share/xcat/netboot/rh/dracut/xcatroot | 4 ++-- xCAT-server/share/xcat/netboot/rh/dracut_033/xcatroot | 4 ++-- xCAT-server/share/xcat/netboot/rh/genimage | 4 ++-- xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot | 4 ++-- xCAT-server/share/xcat/netboot/sles/genimage | 4 ++-- xCAT-server/share/xcat/netboot/ubuntu/dracut/xcatroot | 4 ++-- xCAT-server/share/xcat/netboot/ubuntu/genimage | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/rh/dracut/xcatroot b/xCAT-server/share/xcat/netboot/rh/dracut/xcatroot index 4d20531fa..367625618 100755 --- a/xCAT-server/share/xcat/netboot/rh/dracut/xcatroot +++ b/xCAT-server/share/xcat/netboot/rh/dracut/xcatroot @@ -106,9 +106,9 @@ elif [ -r /rootimg.tar.gz ] || [ -r /rootimg.tar.xz ]; then cd $NEWROOT echo -n "Extracting root filesystem:" if [ -r /rootimg.tar.gz ]; then - tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz + tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz elif [ -r /rootimg.tar.xz ]; then - tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz + tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz fi $NEWROOT/etc/init.d/localdisk echo Done diff --git a/xCAT-server/share/xcat/netboot/rh/dracut_033/xcatroot b/xCAT-server/share/xcat/netboot/rh/dracut_033/xcatroot index 0bc2ebcd9..58a33895e 100755 --- a/xCAT-server/share/xcat/netboot/rh/dracut_033/xcatroot +++ b/xCAT-server/share/xcat/netboot/rh/dracut_033/xcatroot @@ -110,9 +110,9 @@ elif [ -r /rootimg.tar.gz ] || [ -r /rootimg.tar.xz ]; then [ "$xcatdebugmode" > "0" ] && logger -t xcat -p debug "Extracting root filesystem:" echo -n "Extracting root filesystem:" if [ -r /rootimg.tar.gz ]; then - tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz + tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz elif [ -r /rootimg.tar.xz ]; then - tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz + tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz fi $NEWROOT/etc/init.d/localdisk [ "$xcatdebugmode" > "0" ] && logger -t xcat -p debug "Done...." diff --git a/xCAT-server/share/xcat/netboot/rh/genimage b/xCAT-server/share/xcat/netboot/rh/genimage index aa13d2855..bc5104c41 100755 --- a/xCAT-server/share/xcat/netboot/rh/genimage +++ b/xCAT-server/share/xcat/netboot/rh/genimage @@ -1640,9 +1640,9 @@ EOMS print $inifile " cd \$NEWROOT\n"; print $inifile " echo -n \"Extracting root filesystem:\"\n"; print $inifile " if [ -r /rootimg.tar.gz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz\n"; + print $inifile " tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz\n"; print $inifile " elif [ -r /rootimg.tar.xz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz\n"; + print $inifile " tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz\n"; print $inifile " fi\n"; print $inifile " echo Done\n"; print $inifile "else\n"; diff --git a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot index acd7b3ebf..b12eb9a3f 100755 --- a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot +++ b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot @@ -108,9 +108,9 @@ elif [ -r /rootimg.tar.gz ] || [ -r /rootimg.tar.xz ]; then [ "$xcatdebugmode" > "0" ] && logger -t xcat -p debug "Extracting root filesystem:" echo -n "Extracting root filesystem:" if [ -r /rootimg.tar.gz ]; then - tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz + tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz elif [ -r /rootimg.tar.xz ]; then - tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz + tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz fi $NEWROOT/etc/init.d/localdisk [ "$xcatdebugmode" > "0" ] && logger -t xcat -p debug "Done...." diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 3fbe3c6c2..23ca97d2c 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -1658,9 +1658,9 @@ EOMS print $inifile " cd \$NEWROOT\n"; print $inifile " echo -n \"Extracting root filesystem:\"\n"; print $inifile " if [ -r /rootimg.tar.gz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz\n"; + print $inifile " tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz\n"; print $inifile " elif [ -r /rootimg.tar.xz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz\n"; + print $inifile " tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz\n"; print $inifile " fi\n"; print $inifile " echo Done\n"; print $inifile "else\n"; diff --git a/xCAT-server/share/xcat/netboot/ubuntu/dracut/xcatroot b/xCAT-server/share/xcat/netboot/ubuntu/dracut/xcatroot index 67f40c8ed..2c76d7690 100755 --- a/xCAT-server/share/xcat/netboot/ubuntu/dracut/xcatroot +++ b/xCAT-server/share/xcat/netboot/ubuntu/dracut/xcatroot @@ -64,9 +64,9 @@ elif [ -r /rootimg.tar.gz ] || [ -r /rootimg.tar.xz ]; then cd $NEWROOT echo -n "Extracting root filesystem:" if [ -r /rootimg.tar.gz ]; then - tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz + tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz elif [ -r /rootimg.tar.xz ]; then - tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz + tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz fi echo Done elif [ -r /rootimg-statelite.gz ]; then diff --git a/xCAT-server/share/xcat/netboot/ubuntu/genimage b/xCAT-server/share/xcat/netboot/ubuntu/genimage index 8934e44b1..e2ba372f0 100755 --- a/xCAT-server/share/xcat/netboot/ubuntu/genimage +++ b/xCAT-server/share/xcat/netboot/ubuntu/genimage @@ -1480,9 +1480,9 @@ EOMS print $inifile " ([ \"\$xcatdebugmode\" = \"1\" ] || [ \"\$xcatdebugmode\" = \"2\" ]) && logger -t xcat -p debug \"Extracting root filesystem:\"\n"; print $inifile " echo -n \"Extracting root filesystem:\"\n"; print $inifile " if [ -r /rootimg.tar.gz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -zxvf /rootimg.tar.gz\n"; + print $inifile " /bin/tar --selinux --xattrs-include='*' -zxf /rootimg.tar.gz\n"; print $inifile " elif [ -r /rootimg.tar.xz ]; then\n"; - print $inifile " tar --selinux --xattrs-include='*' -Jxvf /rootimg.tar.xz\n"; + print $inifile " /bin/tar --selinux --xattrs-include='*' -Jxf /rootimg.tar.xz\n"; print $inifile " fi\n"; print $inifile " ([ \"\$xcatdebugmode\" = \"1\" ] || [ \"\$xcatdebugmode\" = \"2\" ]) && logger -t xcat -p debug \"Done...\"\n"; print $inifile " echo Done\n"; @@ -1624,7 +1624,7 @@ EOMS } # add rsync for statelite - foreach ("usr/bin/dig", "bin/busybox", "bin/bash", "sbin/mount.nfs", "usr/bin/rsync", "sbin/insmod", "sbin/udevd", "sbin/udevadm", "sbin/modprobe", "sbin/blkid", "sbin/depmod", "usr/bin/wget", "usr/bin/xz", "usr/bin/gzip", "usr/bin/tar") { + foreach ("usr/bin/dig", "bin/busybox", "bin/bash", "sbin/mount.nfs", "usr/bin/rsync", "sbin/insmod", "sbin/udevd", "sbin/udevadm", "sbin/modprobe", "sbin/blkid", "sbin/depmod", "usr/bin/wget", "usr/bin/xz", "bin/gzip", "bin/tar") { getlibs($_); push @filestoadd, $_; } From be77e5f43f5f55e26da22b9d226972367e4f7287 Mon Sep 17 00:00:00 2001 From: immarvin Date: Sat, 13 Aug 2016 02:53:05 -0400 Subject: [PATCH 3/3] fix issue [DEV] it is ambiguous to determine which compressed rootimg to use among rootimg.tar.gz,rootimg.cpio.gz,rootimg.tar.xz... #1695; update the manpage and usage info of packimage --- .../admin-guides/references/man1/packimage.1.rst | 14 +++++++++++--- xCAT-client/pods/man1/packimage.1.pod | 9 ++++++--- xCAT-server/lib/xcat/plugins/packimage.pm | 12 +++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/docs/source/guides/admin-guides/references/man1/packimage.1.rst b/docs/source/guides/admin-guides/references/man1/packimage.1.rst index 20651fbda..4507bdc5c 100644 --- a/docs/source/guides/admin-guides/references/man1/packimage.1.rst +++ b/docs/source/guides/admin-guides/references/man1/packimage.1.rst @@ -23,7 +23,7 @@ SYNOPSIS \ **packimage [-v| -**\ **-version]**\ -\ **packimage**\ \ *imagename*\ +\ **packimage**\ [\ **-m | -**\ **-method**\ \ *cpio|tar*\ ] [\ **-c | -**\ **-compress**\ \ *gzip|pigz|xz*\ ] \ *imagename*\ *********** @@ -62,9 +62,9 @@ OPTIONS \ **-a**\ Architecture (ppc64,x86_64,etc) -\ **-m**\ Archive Method (cpio,tar,squashfs, default is cpio) +\ **-m| -**\ **-method**\ Archive Method (cpio,tar,squashfs, default is cpio) -\ **-c**\ Compress Method (pigz,gzip,xz, default is pigz) +\ **-c| -**\ **-compress**\ Compress Method (pigz,gzip,xz, default is pigz/gzip) ************ @@ -90,6 +90,14 @@ EXAMPLES packimage rhels7.1-x86_64-netboot-compute +2. To pack the osimage rhels7.1-x86_64-netboot-compute with "tar" to archive and "pigz" to compress: + + +.. code-block:: perl + + packimage -m tar -c pigz rhels7.1-x86_64-netboot-compute + + ***** FILES diff --git a/xCAT-client/pods/man1/packimage.1.pod b/xCAT-client/pods/man1/packimage.1.pod index 60b34fe6f..4daa2d03a 100644 --- a/xCAT-client/pods/man1/packimage.1.pod +++ b/xCAT-client/pods/man1/packimage.1.pod @@ -8,7 +8,7 @@ B B -B I +B [B<-m>|B<--method> I] [B<-c>|B<--compress> I] I =head1 DESCRIPTION @@ -36,9 +36,9 @@ B<-p> Profile (compute,service) B<-a> Architecture (ppc64,x86_64,etc) -B<-m> Archive Method (cpio,tar,squashfs, default is cpio) +B<-m| --method> Archive Method (cpio,tar,squashfs, default is cpio) -B<-c> Compress Method (pigz,gzip,xz, default is pigz) +B<-c| --compress> Compress Method (pigz,gzip,xz, default is pigz/gzip) =head1 RETURN VALUE @@ -53,6 +53,9 @@ B<-c> Compress Method (pigz,gzip,xz, default is pigz) packimage rhels7.1-x86_64-netboot-compute +2. To pack the osimage rhels7.1-x86_64-netboot-compute with "tar" to archive and "pigz" to compress: + + packimage -m tar -c pigz rhels7.1-x86_64-netboot-compute =head1 FILES diff --git a/xCAT-server/lib/xcat/plugins/packimage.pm b/xCAT-server/lib/xcat/plugins/packimage.pm index 82e4411f3..60062d26d 100755 --- a/xCAT-server/lib/xcat/plugins/packimage.pm +++ b/xCAT-server/lib/xcat/plugins/packimage.pm @@ -79,7 +79,7 @@ sub process_request { @ARGV = @{$args}; } if (scalar(@ARGV) == 0) { - $callback->({ info => ["Usage:\n packimage \n packimage [-h| --help]\n packimage [-v| --version]"] }); + $callback->({ info => ["Usage:\n packimage [-m| --method=cpio|tar] [-c| --compress=gzip|pigz|xz] \n packimage [-h| --help]\n packimage [-v| --version]"] }); return 0; } @@ -114,7 +114,7 @@ sub process_request { return 0; } if ($help) { - $callback->({ info => ["Usage:\n packimage \n packimage [-h| --help]\n packimage [-v| --version]"] }); + $callback->({ info => ["Usage:\n packimage [-m| --method=cpio|tar] [-c| --compress=gzip|pigz|xz] \n packimage [-h| --help]\n packimage [-v| --version]"] }); return 0; } @@ -468,8 +468,12 @@ sub process_request { } $suffix = $method.".".$suffix; - unlink("$destdir/rootimg.$suffix"); unlink("$destdir/rootimg.sfs"); + unlink("$destdir/rootimg.cpio.xz"); + unlink("$destdir/rootimg.cpio.gz"); + unlink("$destdir/rootimg.tar.xz"); + unlink("$destdir/rootimg.tar.gz"); + if ($method =~ /cpio/) { if (!$exlistloc) { $excludestr = "find . -xdev -print0 | cpio -H newc -o -0 | $compress -c - > ../rootimg.$suffix"; @@ -507,6 +511,7 @@ sub process_request { $callback->({ error => ["Invalid archive method '$method' requested"], errorcode => [1] }); return 1; } + chdir("$rootimg_dir"); my $outputmsg = `$excludestr 2>&1`; unless($?){ @@ -517,6 +522,7 @@ sub process_request { system("rm -rf $xcat_packimg_tmpfile"); return 1; } + if ($method =~ /cpio/) { chmod 0644, "$destdir/rootimg.$suffix"; if ($dotorrent) {