This issue was originally reported by a customer, who investigated it as follows:
##### "If you run up a 16.04 cloud image using EC2 compatible user-data containing a simple shell script. #!/bin/sh sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y update sudo DEBIAN_FRONTEND=noninteractive apt-get install -q -y apache2 sudo nc -k -l -d 443& then the apache2 daemon will rarely start - if ever. (You get the same problem running the equivalent 'cloud-config' script). This is because 'cloud-init' runs the script when the run level is 'unknown', and the 'invoke-rc.d' script has no case for handling 'unknown' run levels - so it defaults to not starting anything. I've seen this a few times with packages that have old style SysV init scripts and that start a daemon automatically in the 'postinst' script. cloud-init should defer running scripts and cloud-config installs until systemd has achieved a defined run level - or the SysV backward compatibility needs improving so that it can deal with systemd being between run levels." ### I could consistently reproduce across 20+ tests using the user data supplied by the customer; either: #cloud-config packages: - apache2 runcmd: - "nc -k -l -d 443&" or: #!/bin/sh output_runlevel() { echo -n "Current runlevel is " sudo /sbin/runlevel } output_runlevel sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y update #sudo sed -ie 's/set +e$/& -x/' /usr/sbin/invoke-rc.d output_runlevel sudo DEBIAN_FRONTEND=noninteractive apt-get install -q -y apache2 output_runlevel sudo nc -k -l -d 443& Apache 2 is correctly installed, but never started (nc is started as expected): $ sudo systemctl status apache2; sudo netstat -A inet -lnp | grep 443 ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: inactive (dead) Docs: man:systemd-sysv-generator(8) tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 2657/nc Runlevel output is as per the customer's description (unknown). Edited excerpt from cloud-init-output.log on a VM that ran the script: [snip] Reading package lists... Current runlevel is unknown # <-- output of output_runlevel(), as per above Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: apache2-bin apache2-data apache2-utils libapr1 libaprutil1 [snip] -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1575572 Title: apache2 fails to start if installed via cloud config (on Xenial) To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1575572/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs