rc.local runs earlier than cloud-init.service
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
cloud-init (Ubuntu) |
Won't Fix
|
High
|
Unassigned |
Bug Description
per https:/
| The rc.local script is executed at the end of each multiuser runlevel.
Generally speaking people expect rc.local to be run as "the last thing in boot".
currently it is being run by systemd much earlier.
Provided in the attached is user-data that tells cloud-init to write a file in /usr/local/
On current wily, under most scenarios the script will not be executed as rc.local will most likely run before the cloud-init service has a chance to update /etc/rc.local.
To reproduce:
a.) launch an instance with provided user-data
Expected behavior would be:
1. /run/rc-
2. /rc-local-
3. /var/log/
[
4. console log should also have message like in 3 with '/dev/console'
4 is broken as rc.local output is not sent to console as reported separately at bug 1468102.
Related bugs:
* bug 1468102: rc.local output does not go to console
ProblemType: Bug
DistroRelease: Ubuntu 15.10
Package: systemd 220-7ubuntu1
ProcVersionSign
Uname: Linux 3.19.0-22-generic x86_64
ApportVersion: 2.17.3-0ubuntu4
Architecture: amd64
Date: Tue Jun 23 20:21:50 2015
Ec2AMI: ami-00000434
Ec2AMIManifest: FIXME
Ec2Availability
Ec2InstanceType: m1.small
Ec2Kernel: aki-00000002
Ec2Ramdisk: ari-00000002
Lsusb: Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
MachineType: OpenStack Foundation OpenStack Nova
ProcEnviron:
TERM=xterm-
PATH=(custom, no user)
XDG_RUNTIME_
LANG=en_US.UTF-8
SHELL=/bin/bash
ProcKernelCmdLine: BOOT_IMAGE=
SourcePackage: systemd
UdevLog: Error: [Errno 2] No such file or directory: '/var/log/udev'
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 01/01/2011
dmi.bios.vendor: Bochs
dmi.bios.version: Bochs
dmi.chassis.type: 1
dmi.chassis.vendor: Bochs
dmi.modalias: dmi:bvnBochs:
dmi.product.name: OpenStack Nova
dmi.product.
dmi.sys.vendor: OpenStack Foundation
Changed in hundredpapercuts: | |
status: | New → Confirmed |
Changed in cloud-init (Ubuntu): | |
importance: | Undecided → High |
Changed in hundredpapercuts: | |
importance: | Undecided → High |
no longer affects: | systemd (Ubuntu) |
> Generally speaking people expect rc.local to be run as "the last thing in boot".
This can't be taken literally, as services can and do come and go (stop and start) all the time, and as any service can declare dependencies to run after "your thing" this can't be enforced either.
For example, could-final.service has an "After= rc-local. service" which I assume is deliberate. So we can't do a thing like "run rc-local.service after multi-user.target" as that would be an unresolvable ordering with cloud-final. service.
Thus I suggest to add an After=rc- local.service to cloud-init.service. This is explicit and unambiguous.