supermin cannot configure network on Bionic onward.
This bug is a combination of supermin package and
/etc/dhcp/dhclient-enter-hooks.d/resolved script from systemd,
present on Bionic onward.
When supermin creates the appliance does chroot and executes its init script.
If networking is enabled init will call dhclient sript to configure the network.
On Bionic onward the make_resolv_conf function of dhclient_script is overwritten
in /etc/dhcp/dhclient-eneter-hooks.d/resolved which before exiting restarts
the systemd.resolved service.
However, this happening in chroot environment fails with
"System has not been booted with systemd as init system (PID 1). Can't operate."
and network is left unconfigured.
Test Case
$ sudo guestfish -a xenial-server-cloudimg-amd64-disk1.img --network -v << EOF
run
mount /dev/sda1 /
command 'apt update'
EOF
libguestfs: launch: program=guestfish
libguestfs: launch: version=1.36.13
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
...
supermin: deleting initramfs files
supermin: chroot
Starting /init script ...
...
+ dhclient --version
+ dhclient eth0
System has not been booted with systemd as init system (PID 1). Can't operate.
...
commandrvf: apt update
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
1) Assume that libguestfs is installed, if not :
$ sudo apt-get install libguestfs-tools
2) Move the base.tar.gz to a temp dir, extract and remove tarball
$ sudo mv /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/base.tar.gz ~/tempdir/
$ cd ~/tempdir
$ sudo tar -xzvf base.tar.gz
$ sudo rm base.tar.gz
3) Remove the etc/dhcp/dhclient-enter-hooks.d/resolved file
$ sudo rm etc/dhcp/dhclient-enter-hooks.d/resolved
4) Create tarball again
$ sudo tar -czvf base.tar.gz etc
5) Move it back to installation dir
$ sudo mv base.tar.gz /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/
Description
supermin cannot configure network on Bionic onward.
This bug is a combination of supermin package and dhclient- enter-hooks. d/resolved script from systemd,
/etc/dhcp/
present on Bionic onward.
When supermin creates the appliance does chroot and executes its init script.
If networking is enabled init will call dhclient sript to configure the network.
On Bionic onward the make_resolv_conf function of dhclient_script is overwritten dhclient- eneter- hooks.d/ resolved which before exiting restarts
in /etc/dhcp/
the systemd.resolved service.
However, this happening in chroot environment fails with
"System has not been booted with systemd as init system (PID 1). Can't operate."
and network is left unconfigured.
Test Case
$ sudo guestfish -a xenial- server- cloudimg- amd64-disk1. img --network -v << EOF
run
mount /dev/sda1 /
command 'apt update'
EOF
libguestfs: launch: program=guestfish
libguestfs: launch: version=1.36.13
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
...
supermin: deleting initramfs files
supermin: chroot
Starting /init script ...
...
+ dhclient --version
+ dhclient eth0
System has not been booted with systemd as init system (PID 1). Can't operate.
...
commandrvf: apt update
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
W: Failed to fetch http:// archive. ubuntu. com/ubuntu/ dists/xenial/ InRelease Temporary failure resolving 'archive. ubuntu. com' archive. ubuntu. com/ubuntu/ dists/xenial- updates/ InRelease Temporary failure resolving 'archive. ubuntu. com' archive. ubuntu. com/ubuntu/ dists/xenial- backports/ InRelease Temporary failure resolving 'archive. ubuntu. com' security. ubuntu. com/ubuntu/ dists/xenial- security/ InRelease Temporary failure resolving 'security. ubuntu. com'
W: Failed to fetch http://
W: Failed to fetch http://
W: Failed to fetch http://
W: Some index files failed to download. They have been ignored, or old ones used instead.
...
Workaround
1) Assume that libguestfs is installed, if not :
$ sudo apt-get install libguestfs-tools
2) Move the base.tar.gz to a temp dir, extract and remove tarball x86_64- linux-gnu/ guestfs/ supermin. d/base. tar.gz ~/tempdir/
$ sudo mv /usr/lib/
$ cd ~/tempdir
$ sudo tar -xzvf base.tar.gz
$ sudo rm base.tar.gz
3) Remove the etc/dhcp/ dhclient- enter-hooks. d/resolved file dhclient- enter-hooks. d/resolved
$ sudo rm etc/dhcp/
4) Create tarball again
$ sudo tar -czvf base.tar.gz etc
5) Move it back to installation dir x86_64- linux-gnu/ guestfs/ supermin. d/
$ sudo mv base.tar.gz /usr/lib/
6) Clean cache
$ sudo rm -rf /var/tmp/.guestfs*