From 72d4be8b5d8650f1f3c1c32f2a728a22c7f6ad1f Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Thu, 15 Jan 2015 09:14:34 -0800 Subject: Ensure that when running under systemd, cloud-init.service is run before we display any getty on the console so that the cloud-init output doesn't get written on top of a login prompt. --- systemd/cloud-init.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 6b0c7229..64471cdf 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -1,7 +1,7 @@ [Unit] Description=Initial cloud-init job (metadata service crawler) After=local-fs.target network.target cloud-init-local.service -Before=sshd.service sshd-keygen.service +Before=sshd.service sshd-keygen.service getty.target Requires=network.target Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service -- cgit v1.2.3 From df288bf65a436f42509b10b604a1e169c44c49e6 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Fri, 16 Jan 2015 08:36:30 -0800 Subject: Use systemd-user-sessions.service for sequencing, not getty.target, for correct race-free ordering --- systemd/cloud-init.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 64471cdf..398b90ea 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -1,7 +1,7 @@ [Unit] Description=Initial cloud-init job (metadata service crawler) After=local-fs.target network.target cloud-init-local.service -Before=sshd.service sshd-keygen.service getty.target +Before=sshd.service sshd-keygen.service systemd-user-sessions.service Requires=network.target Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service -- cgit v1.2.3 From ccdf4ff9966b020a8fd30e5bec87fa82dc20c214 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 17 Mar 2015 15:50:00 -0400 Subject: systemd: update config and final to run even if init jobs fail LP: #1432758 --- systemd/cloud-config.service | 5 ++--- systemd/cloud-config.target | 3 ++- systemd/cloud-final.service | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-config.service b/systemd/cloud-config.service index 41a86147..ac25c776 100644 --- a/systemd/cloud-config.service +++ b/systemd/cloud-config.service @@ -1,8 +1,7 @@ [Unit] Description=Apply the settings specified in cloud-config -After=network.target syslog.target cloud-config.target -Requires=cloud-config.target -Wants=network.target +After=network.target cloud-config.target syslog.target +Wants=network.target cloud-config.target [Service] Type=oneshot diff --git a/systemd/cloud-config.target b/systemd/cloud-config.target index 28f5bcf1..ae9b7d02 100644 --- a/systemd/cloud-config.target +++ b/systemd/cloud-config.target @@ -7,4 +7,5 @@ [Unit] Description=Cloud-config availability -Requires=cloud-init-local.service cloud-init.service +Wants=cloud-init-local.service cloud-init.service +After=cloud-init-local.service cloud-init.service diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service index ef0f52b9..bbcdf30b 100644 --- a/systemd/cloud-final.service +++ b/systemd/cloud-final.service @@ -1,8 +1,7 @@ [Unit] Description=Execute cloud user/final scripts -After=network.target syslog.target cloud-config.service rc-local.service -Requires=cloud-config.target -Wants=network.target +After=network.target cloud-config.service syslog.target rc-local.service +Wants=network.target cloud-config.service [Service] Type=oneshot -- cgit v1.2.3 From f4789639af50ea631cf75af526ad013b05670caa Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 9 Apr 2015 11:54:01 -0400 Subject: systemd: use network-online instead of network.target (LP: #1440180) don't declare a Wants/Requires on network.target; this is a passive target that should only be pulled in by implementors of the networking service. The requirement for network needs to be expressed as a dependency on network-online.target. LP: #1440180 --- ChangeLog | 2 ++ systemd/cloud-config.service | 4 ++-- systemd/cloud-final.service | 4 ++-- systemd/cloud-init.service | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) (limited to 'systemd') diff --git a/ChangeLog b/ChangeLog index 6651b8eb..ff525337 100644 --- a/ChangeLog +++ b/ChangeLog @@ -30,6 +30,8 @@ - SmartOS: use v2 metadata service (LP: #1436417) [Daniel Watkins] - NoCloud: fix local datasource claiming found without explicit dsmode - Snappy: add support for installing snappy packages and configuring. + - systemd: use network-online instead of network.target (LP: #1440180) + [Steve Langasek] 0.7.6: - open 0.7.6 - Enable vendordata on CloudSigma datasource (LP: #1303986) diff --git a/systemd/cloud-config.service b/systemd/cloud-config.service index ac25c776..f9f1996e 100644 --- a/systemd/cloud-config.service +++ b/systemd/cloud-config.service @@ -1,7 +1,7 @@ [Unit] Description=Apply the settings specified in cloud-config -After=network.target cloud-config.target syslog.target -Wants=network.target cloud-config.target +After=network-online.target cloud-config.target syslog.target +Wants=network-online.target cloud-config.target [Service] Type=oneshot diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service index bbcdf30b..c023ad94 100644 --- a/systemd/cloud-final.service +++ b/systemd/cloud-final.service @@ -1,7 +1,7 @@ [Unit] Description=Execute cloud user/final scripts -After=network.target cloud-config.service syslog.target rc-local.service -Wants=network.target cloud-config.service +After=network-online.target cloud-config.service syslog.target rc-local.service +Wants=network-online.target cloud-config.service [Service] Type=oneshot diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 398b90ea..48920283 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -1,8 +1,8 @@ [Unit] Description=Initial cloud-init job (metadata service crawler) -After=local-fs.target network.target cloud-init-local.service +After=local-fs.target network-online.target cloud-init-local.service Before=sshd.service sshd-keygen.service systemd-user-sessions.service -Requires=network.target +Requires=network-online.target Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service [Service] -- cgit v1.2.3 From f512c0126aac5c8708065c6e8aa5510f83574657 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Mon, 30 Nov 2015 15:33:28 -0500 Subject: systemd/power_state: fix power_state when cloud-final exited failure if a runcmd exited failure, then power_state would not work. This was because systemd was killing off subprocesses, and cloud-init implemented power off with a subprocess that waited for the parent to exit. LP: #1449318 --- ChangeLog | 2 ++ systemd/cloud-final.service | 1 + 2 files changed, 3 insertions(+) (limited to 'systemd') diff --git a/ChangeLog b/ChangeLog index f41412fa..0ba16492 100644 --- a/ChangeLog +++ b/ChangeLog @@ -69,6 +69,8 @@ as install from server or desktop ISO. (LP: #1177432) - cc_mounts: use 'nofail' if system uses systemd. (LP: #1514485) - Azure: get instance id from dmi instead of SharedConfig (LP: #1506187) + - systemd/power_state: fix power_state to work even if cloud-final + exited non-zero (LP: #1449318) 0.7.6: - open 0.7.6 - Enable vendordata on CloudSigma datasource (LP: #1303986) diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service index c023ad94..bcbdd36f 100644 --- a/systemd/cloud-final.service +++ b/systemd/cloud-final.service @@ -8,6 +8,7 @@ Type=oneshot ExecStart=/usr/bin/cloud-init modules --mode=final RemainAfterExit=yes TimeoutSec=0 +KillMode=process # Output needs to appear in instance console output StandardOutput=journal+console -- cgit v1.2.3 From 2a73e674605916077cf6a87410f4ad0829938400 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Mon, 29 Feb 2016 23:10:44 -0500 Subject: add cloud-init.target, update service files accordingly This adds cloud-init.target which is a single target to encompass all the services of cloud-init. --- systemd/cloud-config.service | 2 +- systemd/cloud-final.service | 2 +- systemd/cloud-init-local.service | 2 +- systemd/cloud-init.service | 2 +- systemd/cloud-init.target | 16 ++++++++++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 systemd/cloud-init.target (limited to 'systemd') diff --git a/systemd/cloud-config.service b/systemd/cloud-config.service index f9f1996e..45d2a63b 100644 --- a/systemd/cloud-config.service +++ b/systemd/cloud-config.service @@ -13,4 +13,4 @@ TimeoutSec=0 StandardOutput=journal+console [Install] -WantedBy=multi-user.target +WantedBy=cloud-init.target diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service index bcbdd36f..bfb08d4a 100644 --- a/systemd/cloud-final.service +++ b/systemd/cloud-final.service @@ -14,4 +14,4 @@ KillMode=process StandardOutput=journal+console [Install] -WantedBy=multi-user.target +WantedBy=cloud-init.target diff --git a/systemd/cloud-init-local.service b/systemd/cloud-init-local.service index a31985c6..73aa46f6 100644 --- a/systemd/cloud-init-local.service +++ b/systemd/cloud-init-local.service @@ -13,4 +13,4 @@ TimeoutSec=0 StandardOutput=journal+console [Install] -WantedBy=multi-user.target +WantedBy=cloud-init.target diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 48920283..1f656f7f 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -15,4 +15,4 @@ TimeoutSec=0 StandardOutput=journal+console [Install] -WantedBy=multi-user.target +WantedBy=cloud-init.target diff --git a/systemd/cloud-init.target b/systemd/cloud-init.target new file mode 100644 index 00000000..03f61002 --- /dev/null +++ b/systemd/cloud-init.target @@ -0,0 +1,16 @@ +# cloud-init target is enabled by cloud-init-generator +# To disable it you can either: +# a.) boot with kernel cmdline of 'cloudinit=disabled' +# b.) touch a file /etc/cloud/cloud-init.disabled +# cloud-init normally emits a "cloud-config" upstart event to inform third +# parties that cloud-config is available, which does us no good when we're +# using systemd. cloud-config.target serves as this synchronization point +# instead. Services that would "start on cloud-config" with upstart can +# instead use "After=cloud-config.target" and "Wants=cloud-config.target" +# as appropriate. + +[Unit] +Description=Cloud-init target +Wants=cloud-init-local.service cloud-init.service +After=cloud-init-local.service cloud-init.service + -- cgit v1.2.3 From df2d690341ba3e5e1c1ed87f12c206f3cfa0ab45 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Mon, 29 Feb 2016 23:12:19 -0500 Subject: systemd/cloud-init-generator: add a generator to support disabling This gets installed in /lib/systemd/system/cloud-init.target and then is called to generate the symlink (or not generate the symlink) for the cloud-init target. The end result is cloud-init can be completely disabled by: touch /etc/cloud/cloud-init.disabled or a kernel command line with 'cloud-init=disabled' --- systemd/cloud-init-generator | 123 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 systemd/cloud-init-generator (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator new file mode 100755 index 00000000..0c698d6b --- /dev/null +++ b/systemd/cloud-init-generator @@ -0,0 +1,123 @@ +#!/bin/sh +set -f + +LOG="" +DEBUG_LEVEL=2 +LOG_D="/run" +ENABLE="enabled" +DISABLE="disabled" +CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target" +CLOUD_TARGET_NAME="cloud-init.target" + +debug() { + local lvl="$1" + shift + [ "$lvl" -gt "$DEBUG_LEVEL" ] && return + if [ -z "$LOG" ]; then + local log="$LOG_D/${0##*/}-generator.log" + { : > "$log"; } >/dev/null 2>&1 && LOG="$log" || + LOG="/dev/kmsg" + fi + echo "$@" >> "$LOG" +} + +etc_file() { + local pprefix="${1:-/etc/cloud/cloud-init.}" + _RET="unset" + [ -f "${pprefix}.$ENABLE" ] && _RET="$ENABLE" && return 0 + [ -f "${pprefix}.$DISABLE" ] && _RET="$DISABLE" && return 0 + return 0 +} + +read_proc_cmdline() { + local out="" + if [ "$container" = "lxc" ]; then + _RET="" + return 0 + fi + + if systemd-detect-virt --container --quiet; then + _RET="" + return 0 + fi + + read _RET < /proc/cmdline +} + +kernel_cmdline() { + local cmdline="" tok="" + if [ -n "${KERNEL_CMDLINE+$KERNEL_CMDLINE}" ]; then + cmdline=${KERNEL_CMDLINE} + debug 1 "kernel command line from env KERNEL_CMDLINE: $cmdline" + elif read_proc_cmdline; then + read_proc_cmdline && cmdline="$_RET" + debug 1 "kernel command line from /proc/cmdline: $cmdline" + fi + _RET="unset" + cmdline=" $cmdline " + tok=${cmdline##* cloud-init=} + [ "$tok" = "$cmdline" ] && _RET="unset" + tok=${tok%% *} + [ "$tok" = "$ENABLE" -o "$tok" = "$DISABLE" ] && _RET="$tok" + return 0 +} + +default() { + _RET="$ENABLE" +} + +main() { + local normal_d="$1" early_d="$2" late_d="$3" + local target_name="multi-user.target" gen_d="$early_d" + local link_path="$gen_d/${target_name}.wants/${CLOUD_TARGET_NAME}" + + #LOG_D="${gen_d:-${LOG_D}}" + debug 1 "$0 normal=$normal_d early=$early_d late=$late_d" + debug 2 "$0 $*" + + local search result="error" ret="" + for search in kernel_cmdline etc_file default; do + if $search; then + debug 1 "$search found $_RET" + [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] && result=$_RET + else + ret=$? + debug 0 "search $search returned $ret" + fi + done + + if [ "$result" = "$ENABLE" ]; then + if [ -e "$link_path" ]; then + debug 1 "already enabled: no change needed" + else + [ -d "${link_path%/*}" ] || mkdir -p "${link_path%/*}" || + debug 0 "failed to make dir $link_path" + if ln -snf "$CLOUD_SYSTEM_TARGET" "$link_path"; then + debug 1 "enabled via $link_path -> $CLOUD_SYSTEM_TARGET" + else + ret=$? + debug 0 "[$ret] enable failed:" \ + "ln $CLOUD_SYSTEM_TARGET $link_path" + fi + fi + elif [ "$result" = "$DISABLE" ]; then + if [ -f "$link_path" ]; then + if rm -f "$link_path"; then + debug 1 "disabled. removed existing $link_path" + else + ret=$? + debug 0 "[$ret] disable failed, remove $link_path" + fi + else + debug 1 "already disabled: no change needed" + fi + else + debug 0 "unexpected result '$result'" + ret=3 + fi + return $ret +} + +main "$@" + +# vi: ts=4 expandtab -- cgit v1.2.3 From 4b22f00f02c6cccd88a81f05db8cc33a4e9a7419 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Mon, 29 Feb 2016 23:20:01 -0500 Subject: be less verbose by default --- systemd/cloud-init-generator | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index 0c698d6b..c9900394 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -2,7 +2,7 @@ set -f LOG="" -DEBUG_LEVEL=2 +DEBUG_LEVEL=1 LOG_D="/run" ENABLE="enabled" DISABLE="disabled" @@ -71,7 +71,6 @@ main() { local target_name="multi-user.target" gen_d="$early_d" local link_path="$gen_d/${target_name}.wants/${CLOUD_TARGET_NAME}" - #LOG_D="${gen_d:-${LOG_D}}" debug 1 "$0 normal=$normal_d early=$early_d late=$late_d" debug 2 "$0 $*" -- cgit v1.2.3 From af5d2a102c029da4b853a3bc42a6e23ce3a40fe6 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Mon, 29 Feb 2016 23:38:40 -0500 Subject: remove unused var --- systemd/cloud-init-generator | 1 - 1 file changed, 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index c9900394..d97b58d9 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -30,7 +30,6 @@ etc_file() { } read_proc_cmdline() { - local out="" if [ "$container" = "lxc" ]; then _RET="" return 0 -- cgit v1.2.3 From af3653032704f79f418e976d02994c273e25f87f Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 1 Mar 2016 00:28:52 -0500 Subject: 2 fixups --- systemd/cloud-init-generator | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index d97b58d9..d976ae0b 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -24,8 +24,8 @@ debug() { etc_file() { local pprefix="${1:-/etc/cloud/cloud-init.}" _RET="unset" - [ -f "${pprefix}.$ENABLE" ] && _RET="$ENABLE" && return 0 - [ -f "${pprefix}.$DISABLE" ] && _RET="$DISABLE" && return 0 + [ -f "${pprefix}$ENABLE" ] && _RET="$ENABLE" && return 0 + [ -f "${pprefix}$DISABLE" ] && _RET="$DISABLE" && return 0 return 0 } @@ -77,7 +77,8 @@ main() { for search in kernel_cmdline etc_file default; do if $search; then debug 1 "$search found $_RET" - [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] && result=$_RET + [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] && + result=$_RET && break else ret=$? debug 0 "search $search returned $ret" -- cgit v1.2.3 From f4c25ab96c572e0a503bb211a11cd2641ac321a3 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 3 Mar 2016 16:53:49 -0500 Subject: consume KERNEL_CMDLINE even if set to "". explain 'container' --- systemd/cloud-init-generator | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index d976ae0b..b09924ac 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -8,6 +8,8 @@ ENABLE="enabled" DISABLE="disabled" CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target" CLOUD_TARGET_NAME="cloud-init.target" +# lxc sets 'container', but lets make that explicitly a global +CONTAINER="${container}" debug() { local lvl="$1" @@ -30,7 +32,7 @@ etc_file() { } read_proc_cmdline() { - if [ "$container" = "lxc" ]; then + if [ "$CONTAINER" = "lxc" ]; then _RET="" return 0 fi @@ -45,7 +47,8 @@ read_proc_cmdline() { kernel_cmdline() { local cmdline="" tok="" - if [ -n "${KERNEL_CMDLINE+$KERNEL_CMDLINE}" ]; then + if [ -n "${KERNEL_CMDLINE+x}" ]; then + # use KERNEL_CMDLINE if present in environment even if empty cmdline=${KERNEL_CMDLINE} debug 1 "kernel command line from env KERNEL_CMDLINE: $cmdline" elif read_proc_cmdline; then -- cgit v1.2.3 From 72c71196d701a1398963b52a30e9ab34a2579a49 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 3 Mar 2016 17:23:13 -0500 Subject: do not duplicate '-generator' in log ame --- systemd/cloud-init-generator | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index b09924ac..3bd2d6b3 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -16,7 +16,7 @@ debug() { shift [ "$lvl" -gt "$DEBUG_LEVEL" ] && return if [ -z "$LOG" ]; then - local log="$LOG_D/${0##*/}-generator.log" + local log="$LOG_D/${0##*/}.log" { : > "$log"; } >/dev/null 2>&1 && LOG="$log" || LOG="/dev/kmsg" fi -- cgit v1.2.3 From fa5c11836cec515dd23efcfabe9b736edd47c22a Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 3 Mar 2016 17:49:01 -0500 Subject: generator: be more clear on where kernel cmdline came from --- systemd/cloud-init-generator | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index 3bd2d6b3..eb0e1a77 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -33,15 +33,18 @@ etc_file() { read_proc_cmdline() { if [ "$CONTAINER" = "lxc" ]; then + _RET_MSG="ignored: \$container=$CONTAINER" _RET="" return 0 fi if systemd-detect-virt --container --quiet; then + _RET_MSG="ignored: detect-virt is container" _RET="" return 0 fi + _RET_MSG="/proc/cmdline" read _RET < /proc/cmdline } @@ -53,7 +56,7 @@ kernel_cmdline() { debug 1 "kernel command line from env KERNEL_CMDLINE: $cmdline" elif read_proc_cmdline; then read_proc_cmdline && cmdline="$_RET" - debug 1 "kernel command line from /proc/cmdline: $cmdline" + debug 1 "kernel command line ($_RET_MSG): $cmdline" fi _RET="unset" cmdline=" $cmdline " -- cgit v1.2.3 From 77a9dbb4aa7e555d4c033c54a60b7084b2ab3373 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 3 Mar 2016 17:49:10 -0500 Subject: cloud-init.target should not do anything no wants or after or before. --- systemd/cloud-init.target | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init.target b/systemd/cloud-init.target index 03f61002..a63babb0 100644 --- a/systemd/cloud-init.target +++ b/systemd/cloud-init.target @@ -2,15 +2,5 @@ # To disable it you can either: # a.) boot with kernel cmdline of 'cloudinit=disabled' # b.) touch a file /etc/cloud/cloud-init.disabled -# cloud-init normally emits a "cloud-config" upstart event to inform third -# parties that cloud-config is available, which does us no good when we're -# using systemd. cloud-config.target serves as this synchronization point -# instead. Services that would "start on cloud-config" with upstart can -# instead use "After=cloud-config.target" and "Wants=cloud-config.target" -# as appropriate. - [Unit] Description=Cloud-init target -Wants=cloud-init-local.service cloud-init.service -After=cloud-init-local.service cloud-init.service - -- cgit v1.2.3 From d02a257063db96f487510b9841a9a396ef2675af Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 3 Mar 2016 22:46:37 -0500 Subject: mention link path in generator --- systemd/cloud-init-generator | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index eb0e1a77..9d1e22f0 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -114,7 +114,7 @@ main() { debug 0 "[$ret] disable failed, remove $link_path" fi else - debug 1 "already disabled: no change needed" + debug 1 "already disabled: no change needed [no $link_path]" fi else debug 0 "unexpected result '$result'" -- cgit v1.2.3 From 2eb86ca13cb658b51440bb28cab47205b641d0ee Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 10 Mar 2016 10:32:08 -0500 Subject: initial systemd service suggestions provided by pitti This should mean that cloud-init-local is running earlier now (DefaultDependencies=no). And also blocking networking coming up (Before=network-pre.target) cloud-init.service should now actually block network-online.target from being made (meaning it will run before anything that expects that) but after networking.service, which is what actually does the bringup on ifupdown / ubuntu. --- systemd/cloud-init-local.service | 4 ++++ systemd/cloud-init.service | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-local.service b/systemd/cloud-init-local.service index 73aa46f6..475a2e11 100644 --- a/systemd/cloud-init-local.service +++ b/systemd/cloud-init-local.service @@ -1,7 +1,11 @@ [Unit] Description=Initial cloud-init job (pre-networking) +DefaultDependencies=no Wants=local-fs.target After=local-fs.target +Conflicts=shutdown.target +Before=network-pre.target +Before=shutdown.target [Service] Type=oneshot diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 1f656f7f..6fb655e6 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -1,8 +1,8 @@ [Unit] Description=Initial cloud-init job (metadata service crawler) -After=local-fs.target network-online.target cloud-init-local.service -Before=sshd.service sshd-keygen.service systemd-user-sessions.service -Requires=network-online.target +After=cloud-init-local.service networking.service +Before=network-online.target sshd.service sshd-keygen.service systemd-user-sessions.service +Requires=networking.service Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service [Service] -- cgit v1.2.3 From 2f29e70d99906dd7bff0c64109a77f609577f063 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 10 Mar 2016 10:35:17 -0500 Subject: generator: support reading cmdline of pid 1 in a container This might need cleaning up in the future as I believe in some containers /proc/cmdline is provided, and in that case it would be preferred to pid 1's command line. --- systemd/cloud-init-generator | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index 9d1e22f0..b7a2f17a 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -32,15 +32,16 @@ etc_file() { } read_proc_cmdline() { - if [ "$CONTAINER" = "lxc" ]; then - _RET_MSG="ignored: \$container=$CONTAINER" - _RET="" - return 0 - fi - - if systemd-detect-virt --container --quiet; then - _RET_MSG="ignored: detect-virt is container" + # return /proc/cmdline for non-container, and /proc/1/cmdline for container + local ctname="systemd" + if [ -n "$CONTAINER" ] && ctname=$CONTAINER || systemd-detect-virt --container --quiet; then + local + if _RET=$(tr '\0' ' ' < /proc/1/cmdline) >/dev/null 2>&1; then + _RET_MSG="container[$ctname]: pid 1 cmdline" + return + fi _RET="" + _RET_MSG="container[$ctname]: pid 1 cmdline not available" return 0 fi -- cgit v1.2.3 From b1d9c92f5bc6f711e104ceb981ded658249c3255 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 10 Mar 2016 10:41:48 -0500 Subject: generator: use /run/cloud-init instead of /run --- systemd/cloud-init-generator | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'systemd') diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator index b7a2f17a..8156db58 100755 --- a/systemd/cloud-init-generator +++ b/systemd/cloud-init-generator @@ -3,7 +3,7 @@ set -f LOG="" DEBUG_LEVEL=1 -LOG_D="/run" +LOG_D="/run/cloud-init" ENABLE="enabled" DISABLE="disabled" CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target" @@ -17,7 +17,8 @@ debug() { [ "$lvl" -gt "$DEBUG_LEVEL" ] && return if [ -z "$LOG" ]; then local log="$LOG_D/${0##*/}.log" - { : > "$log"; } >/dev/null 2>&1 && LOG="$log" || + { [ -d "$LOG_D" ] || mkdir -p "$LOG_D"; } && + { : > "$log"; } >/dev/null 2>&1 && LOG="$log" || LOG="/dev/kmsg" fi echo "$@" >> "$LOG" -- cgit v1.2.3