Package: fai-server
Version: 5.6
When running fai-make-nfsroot on amd64 or i386 architecture using e.g.
FAI_DEBOOTSTRAP_OPTS="--exclude=wget --arch armhf"
it does not use qemu-user-static option.
When running fai-make-nfsroot on amd64 or i386 architecture using e.g.
FAI_DEBOOTSTRAP_OPTS="--exclude=wget --arch=armhf"
it does use qemu-user-static option.
While both of above syntax are correct the following line within
fai-make-nfsroot only applies to "--arch=armhf":
263: targetarch=$(expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch=\([^[:space:]]*\)' || true)
My suggestion is to replace this line with the following which handles
both types of given --arch parameter:
targetarch=$(echo "$(expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch=\([^[:space:]]*\)' || expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch\s\([^[:space:]]*\)' || echo true)" | tail -n 1)
If "$targetarch" was set correctly fai-make-nfsroot fails with
following error if executed using e.g.
FAI_DEBOOTSTRAP_OPTS="--exclude=wget --arch=armhf":
Running hooks in /etc/ca-certificates/update.d...
done.
install_packages: executing chroot /srv/fai/nfsroot-armhf1 apt-get clean
install_packages: executing chroot /srv/fai/nfsroot-armhf1 dpkg
--configure --pending
install_packages: executing chroot /srv/fai/nfsroot-armhf1 dpkg -C
install_packages: executing chroot /srv/fai/nfsroot-armhf1 apt-get clean
chmod: missing operand after ‘a+r’
Try 'chmod --help' for more information.
ERROR: No initrd was created. Check the package name of the
linux-image package in /etc/fai/NFSROOT.
Log file written to /var/log/fai/fai-make-nfsroot.log
This is because armhf may be using vlinu?-* & initrd.img-* files for
booting, but not mandatory.
I have worked around this by not copy vlinu?-* & initrd.img-* if
FAI_DEBOOTSTRAP_OPTS is defined for armhf.
(Maybe there is a more general solution for this)
Below is the patch file content which applies the described changes:
--- fai-make-nfsroot 2018-04-08 12:00:46.608172000 +0200
+++ fai-make-nfsroot2 2018-04-08 12:22:15.749502200 +0200
@@ -260,7 +260,7 @@
echo "Creating base system using debootstrap version $dversion"
# Check if we need cross architecture debootstrap
- targetarch=$(expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch=\([^[:space:]]*\)' || true)
+ targetarch=$(echo "$(expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch=\([^[:space:]]*\)' || expr "$FAI_DEBOOTSTRAP_OPTS" :
'.*--arch\s\([^[:space:]]*\)' || echo true)" | tail -n 1)
hostarch1=$(dpkg --print-architecture)
hostarch2=$(dpkg --print-foreign-architectures)
@@ -543,8 +543,10 @@
# tftp environment
rm -f $NFSROOT/boot/*.bak
mkdir -p $TFTPROOT/pxelinux.cfg
+ if [[ ! "${FAI_DEBOOTSTRAP_OPTS}" =~ '--arch'.'armhf' ]];then
chmod a+r $NFSROOT/boot/initrd.img-* || die 9 "No initrd was
created. Check the package name of the linux-image package in
/etc/fai/NFSROOT."
cp -p $v $NFSROOT/boot/vmlinu?-* $NFSROOT/boot/initrd.img-* $TFTPROOT
+ fi
cp -u $v $NFSROOT/usr/lib/PXELINUX/pxelinux.0 $TFTPROOT
if [ -f $NFSROOT/usr/lib/syslinux/modules/bios/ldlinux.c32 ]; then
cp -u $NFSROOT/usr/lib/syslinux/modules/bios/ldlinux.c32 $TFTPROOT
Thank you for your support