summaryrefslogtreecommitdiffstats
path: root/meta-phosphor/recipes-core
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2018-08-31 06:25:51 -0400
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2018-09-06 07:44:12 -0400
commitff075f6ee795a590b244d70a90cc312ba1f2d83d (patch)
treea617790bdbfdeef960665ba0242e1f0c93e5301a /meta-phosphor/recipes-core
parent3e4da38c127bb7e7641adc2fc41f4c33744cb918 (diff)
downloadtalos-openbmc-ff075f6ee795a590b244d70a90cc312ba1f2d83d.tar.gz
talos-openbmc-ff075f6ee795a590b244d70a90cc312ba1f2d83d.zip
meta-phosphor: Move layer content from common/
Adopt a more conventional directory hierarchy. meta-phosphor is still a _long_ way from suitable for hosting on yoctoproject.org but things like this don't help. (From meta-phosphor rev: 471cfcefa74b8c7ceb704cb670e6d915cf27c63b) Change-Id: I3f106b2f6cdc6cec734be28a6090800546f362eb Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'meta-phosphor/recipes-core')
-rw-r--r--meta-phosphor/recipes-core/base-files/base-files/fstab9
-rw-r--r--meta-phosphor/recipes-core/base-files/base-files_%.bbappend7
-rw-r--r--meta-phosphor/recipes-core/busybox/busybox/0001-Stop-watchdog-first-on-startup.patch63
-rw-r--r--meta-phosphor/recipes-core/busybox/busybox/busybox.cfg6
-rw-r--r--meta-phosphor/recipes-core/busybox/busybox/flash.cfg4
-rw-r--r--meta-phosphor/recipes-core/busybox/busybox/mountpoint.cfg1
-rw-r--r--meta-phosphor/recipes-core/busybox/busybox_%.bbappend5
-rw-r--r--meta-phosphor/recipes-core/dropbear/dropbear/0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch42
-rw-r--r--meta-phosphor/recipes-core/dropbear/dropbear/0001-dropbear-Add-c-command-option-to-force-a-specific-co.patch91
-rw-r--r--meta-phosphor/recipes-core/dropbear/dropbear/dropbearkey.service18
-rw-r--r--meta-phosphor/recipes-core/dropbear/dropbear_%.bbappend7
-rw-r--r--meta-phosphor/recipes-core/glib-2.0/glib-2.0%.bbappend4
-rw-r--r--meta-phosphor/recipes-core/os-release/os-release.bbappend35
-rw-r--r--meta-phosphor/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend6
-rw-r--r--meta-phosphor/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend1
-rw-r--r--meta-phosphor/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend12
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets.bb91
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-hard-poweroff@.target11
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powered-off@.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweroff@.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweron@.target12
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powerreset@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control-ready@.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-watchdog-takeover.target6
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fans-ready.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-crash@.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-quiesce@.target6
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reboot@.target10
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset-running@.target5
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-shutdown@.target6
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start@.target10
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-started@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-starting@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-startmin@.target10
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target8
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop@.target11
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopping@.target10
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-timeout@.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-mapper.target4
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-off@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-on@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-reset-on@.target5
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start@.target7
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop@.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-standby.target9
-rw-r--r--meta-phosphor/recipes-core/systemd/obmc-targets/obmc-webserver-pre.target2
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd/0001-sd-bus-Don-t-automatically-add-ObjectManager.patch56
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd/0003-basic-Factor-out-string-checking-from-name_to_prefix.patch103
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd/0004-basic-Use-path-escaping-when-mangling-path-instances.patch69
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd/0005-dont-return-error-if-unable-to-create-network-namespace.patch39
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd/default.network4
-rw-r--r--meta-phosphor/recipes-core/systemd/systemd_%.bbappend22
58 files changed, 948 insertions, 0 deletions
diff --git a/meta-phosphor/recipes-core/base-files/base-files/fstab b/meta-phosphor/recipes-core/base-files/base-files/fstab
new file mode 100644
index 000000000..4a0766876
--- /dev/null
+++ b/meta-phosphor/recipes-core/base-files/base-files/fstab
@@ -0,0 +1,9 @@
+# openbmc fstab
+
+/dev/root / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+tmpfs /media tmpfs defaults 0 0
+/var/persist/home /home none bind 0 0
diff --git a/meta-phosphor/recipes-core/base-files/base-files_%.bbappend b/meta-phosphor/recipes-core/base-files/base-files_%.bbappend
new file mode 100644
index 000000000..4b48dc78b
--- /dev/null
+++ b/meta-phosphor/recipes-core/base-files/base-files_%.bbappend
@@ -0,0 +1,7 @@
+FILESEXTRAPATHS_prepend_df-obmc-ubi-fs := "${THISDIR}/${PN}:"
+
+RDEPENDS_${PN}_append_df-obmc-ubi-fs = " preinit-mounts"
+
+do_install_append() {
+ install -d ${D}/srv
+}
diff --git a/meta-phosphor/recipes-core/busybox/busybox/0001-Stop-watchdog-first-on-startup.patch b/meta-phosphor/recipes-core/busybox/busybox/0001-Stop-watchdog-first-on-startup.patch
new file mode 100644
index 000000000..7128b8108
--- /dev/null
+++ b/meta-phosphor/recipes-core/busybox/busybox/0001-Stop-watchdog-first-on-startup.patch
@@ -0,0 +1,63 @@
+From a4c493ae42926ab36fdc805a5da9f0682bb98b45 Mon Sep 17 00:00:00 2001
+From: Matt Spinler <spinler@us.ibm.com>
+Date: Tue, 13 Jun 2017 15:26:49 -0500
+Subject: [PATCH] Stop watchdog first on startup
+
+Some watchdog implementations may do things other than issue
+a reboot on a watchdog timeout. In this case, there's the
+possibility of restarting this program from the state of
+the watchdog device not being properly stopped (done by writing
+a 'V' and closing the device). Since it wasn't stopped, the
+driver may not be able to restart the watchdog when this program
+reopens it and starts pinging it.
+
+To fix this, the code will always first issue the stop when it
+starts up.
+
+Signed-off-by: Matt Spinler <spinler@us.ibm.com>
+---
+ miscutils/watchdog.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c
+index 07ae64e52..223e3c32d 100644
+--- a/miscutils/watchdog.c
++++ b/miscutils/watchdog.c
+@@ -53,6 +53,24 @@ static void watchdog_shutdown(int sig UNUSED_PARAM)
+ _exit(EXIT_SUCCESS);
+ }
+
++static void watchdog_open(const char* device)
++{
++ static const char magic_value = 'V';
++
++ /* If the watchdog driver can do something other than cause a reboot
++ * on a timeout, then it's possible this program may be starting from
++ * a state when the watchdog hadn't been previously stopped with
++ * the magic write followed by a close. In this case the driver may
++ * not start properly, so always do the proper stop first just in case.
++ */
++
++ /* Use known fd # - avoid needing global 'int fd' */
++ xmove_fd(xopen(device, O_WRONLY), 3);
++ write(3, &magic_value, 1);
++ close(3);
++ xmove_fd(xopen(device, O_WRONLY), 3);
++}
++
+ int watchdog_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int watchdog_main(int argc, char **argv)
+ {
+@@ -88,8 +106,7 @@ int watchdog_main(int argc, char **argv)
+
+ bb_signals(BB_FATAL_SIGS, watchdog_shutdown);
+
+- /* Use known fd # - avoid needing global 'int fd' */
+- xmove_fd(xopen(argv[argc - 1], O_WRONLY), 3);
++ watchdog_open(argv[argc - 1]);
+
+ /* WDIOC_SETTIMEOUT takes seconds, not milliseconds */
+ htimer_duration = htimer_duration / 1000;
+--
+2.11.0
+
diff --git a/meta-phosphor/recipes-core/busybox/busybox/busybox.cfg b/meta-phosphor/recipes-core/busybox/busybox/busybox.cfg
new file mode 100644
index 000000000..99e83dbd9
--- /dev/null
+++ b/meta-phosphor/recipes-core/busybox/busybox/busybox.cfg
@@ -0,0 +1,6 @@
+CONFIG_DEVMEM=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_FEATURE_LESS_TRUNCATE=y
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_WATCHDOG=y
+CONFIG_EXPAND=y
diff --git a/meta-phosphor/recipes-core/busybox/busybox/flash.cfg b/meta-phosphor/recipes-core/busybox/busybox/flash.cfg
new file mode 100644
index 000000000..39ba10d74
--- /dev/null
+++ b/meta-phosphor/recipes-core/busybox/busybox/flash.cfg
@@ -0,0 +1,4 @@
+CONFIG_FLASHCP=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+CONFIG_FLASH_ERASEALL=y
diff --git a/meta-phosphor/recipes-core/busybox/busybox/mountpoint.cfg b/meta-phosphor/recipes-core/busybox/busybox/mountpoint.cfg
new file mode 100644
index 000000000..8b009511a
--- /dev/null
+++ b/meta-phosphor/recipes-core/busybox/busybox/mountpoint.cfg
@@ -0,0 +1 @@
+CONFIG_MOUNTPOINT=y
diff --git a/meta-phosphor/recipes-core/busybox/busybox_%.bbappend b/meta-phosphor/recipes-core/busybox/busybox_%.bbappend
new file mode 100644
index 000000000..e6678fc8a
--- /dev/null
+++ b/meta-phosphor/recipes-core/busybox/busybox_%.bbappend
@@ -0,0 +1,5 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+SRC_URI += "file://busybox.cfg"
+SRC_URI += "file://flash.cfg"
+SRC_URI += "file://mountpoint.cfg"
+SRC_URI += "file://0001-Stop-watchdog-first-on-startup.patch"
diff --git a/meta-phosphor/recipes-core/dropbear/dropbear/0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch b/meta-phosphor/recipes-core/dropbear/dropbear/0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch
new file mode 100644
index 000000000..e32baec83
--- /dev/null
+++ b/meta-phosphor/recipes-core/dropbear/dropbear/0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch
@@ -0,0 +1,42 @@
+From 95eff1ca0beea55259c2cdc7f1bb9f930bf57bc8 Mon Sep 17 00:00:00 2001
+From: CamVan Nguyen <ctnguyen@us.ibm.com>
+Date: Tue, 13 Feb 2018 15:37:47 -0600
+Subject: [PATCH 1/1] Only load dropbear default host keys if a key is not
+ specified
+
+---
+ svr-runopts.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/svr-runopts.c b/svr-runopts.c
+index 8f60059..c5c2148 100644
+--- a/svr-runopts.c
++++ b/svr-runopts.c
+@@ -488,17 +488,21 @@ void load_all_hostkeys() {
+ m_free(hostkey_file);
+ }
+
++ /* Only load default host keys if a host key is not specified by the
++ * user */
++ if (0 == svr_opts.num_hostkey_files) {
+ #ifdef DROPBEAR_RSA
+- loadhostkey(RSA_PRIV_FILENAME, 0);
++ loadhostkey(RSA_PRIV_FILENAME, 0);
+ #endif
+
+ #ifdef DROPBEAR_DSS
+- loadhostkey(DSS_PRIV_FILENAME, 0);
++ loadhostkey(DSS_PRIV_FILENAME, 0);
+ #endif
+
+ #ifdef DROPBEAR_ECDSA
+- loadhostkey(ECDSA_PRIV_FILENAME, 0);
++ loadhostkey(ECDSA_PRIV_FILENAME, 0);
+ #endif
++ }
+
+ #ifdef DROPBEAR_DELAY_HOSTKEY
+ if (svr_opts.delay_hostkey) {
+--
+1.8.2.2
+
diff --git a/meta-phosphor/recipes-core/dropbear/dropbear/0001-dropbear-Add-c-command-option-to-force-a-specific-co.patch b/meta-phosphor/recipes-core/dropbear/dropbear/0001-dropbear-Add-c-command-option-to-force-a-specific-co.patch
new file mode 100644
index 000000000..88d0ac0bb
--- /dev/null
+++ b/meta-phosphor/recipes-core/dropbear/dropbear/0001-dropbear-Add-c-command-option-to-force-a-specific-co.patch
@@ -0,0 +1,91 @@
+From b4e094381ec846f4387dc6a3c210c2205a8db58a Mon Sep 17 00:00:00 2001
+From: Jeremy Kerr <jk@ozlabs.org>
+Date: Tue, 12 Apr 2016 11:11:40 +0800
+Subject: [PATCH] dropbear: Add -c <command> option to force a specific command
+
+This change adds a -c option to dropbear, to force the session to use a
+specific command, in a similar fashion to OpenSSH's ForceCommand
+configuration option.
+
+This is useful to provide a simple fixed service over ssh, without
+requiring an authorized key file for the per-key forced_command option.
+
+This setting takes precedence over the channel session's provided
+command, and the per-key forced_command setting.
+
+Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
+---
+ runopts.h | 2 ++
+ svr-chansession.c | 12 ++++++++++--
+ svr-runopts.c | 5 +++++
+ 3 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/runopts.h b/runopts.h
+index f7c869d..ffb573e 100644
+--- a/runopts.h
++++ b/runopts.h
+@@ -114,6 +114,8 @@ typedef struct svr_runopts {
+ buffer * banner;
+ char * pidfile;
+
++ char * command;
++
+ } svr_runopts;
+
+ extern svr_runopts svr_opts;
+diff --git a/svr-chansession.c b/svr-chansession.c
+index bfaf7f6..d6c9330 100644
+--- a/svr-chansession.c
++++ b/svr-chansession.c
+@@ -671,8 +671,16 @@ static int sessioncommand(struct Channel *channel, struct ChanSess *chansess,
+ }
+ }
+
+- /* take public key option 'command' into account */
+- svr_pubkey_set_forced_command(chansess);
++
++ /* take global command into account */
++ if (svr_opts.command) {
++ chansess->original_command = chansess->cmd ? : m_strdup("");
++ chansess->cmd = m_strdup(svr_opts.command);
++ } else {
++ /* take public key option 'command' into account */
++ svr_pubkey_set_forced_command(chansess);
++ }
++
+
+ #ifdef LOG_COMMANDS
+ if (chansess->cmd) {
+diff --git a/svr-runopts.c b/svr-runopts.c
+index 8f60059..f845300 100644
+--- a/svr-runopts.c
++++ b/svr-runopts.c
+@@ -79,6 +79,7 @@ static void printhelp(const char * progname) {
+ #ifdef ENABLE_SVR_REMOTETCPFWD
+ "-k Disable remote port forwarding\n"
+ "-a Allow connections to forwarded ports from any host\n"
++ "-c command Force executed command\n"
+ #endif
+ "-p [address:]port\n"
+ " Listen on specified tcp port (and optionally address),\n"
+@@ -125,6 +126,7 @@ void svr_getopts(int argc, char ** argv) {
+ /* see printhelp() for options */
+ svr_opts.bannerfile = NULL;
+ svr_opts.banner = NULL;
++ svr_opts.command = NULL;
+ svr_opts.forkbg = 1;
+ svr_opts.norootlogin = 0;
+ svr_opts.noauthpass = 0;
+@@ -177,6 +179,9 @@ void svr_getopts(int argc, char ** argv) {
+ case 'b':
+ next = &svr_opts.bannerfile;
+ break;
++ case 'c':
++ next = &svr_opts.command;
++ break;
+ case 'd':
+ case 'r':
+ next = &keyfile;
+--
+2.5.0
+
diff --git a/meta-phosphor/recipes-core/dropbear/dropbear/dropbearkey.service b/meta-phosphor/recipes-core/dropbear/dropbear/dropbearkey.service
new file mode 100644
index 000000000..dfeb17f41
--- /dev/null
+++ b/meta-phosphor/recipes-core/dropbear/dropbear/dropbearkey.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=SSH Key Generation
+
+[Service]
+# Set the default RSA key path then load environment variables from the
+# environment file, which might override the default RSA key path.
+Environment="DROPBEAR_RSAKEY_DIR=/etc/dropbear"
+EnvironmentFile=-/etc/default/dropbear
+Type=oneshot
+ExecStart=@BASE_BINDIR@/sh -c \
+ "if [[ ! -f ${DROPBEAR_RSAKEY_DIR}/dropbear_rsa_host_key ]]; then \
+ @BASE_BINDIR@/mkdir -p ${DROPBEAR_RSAKEY_DIR}; \
+ @SBINDIR@/dropbearkey -t rsa -f ${DROPBEAR_RSAKEY_DIR}/dropbear_rsa_host_key; \
+ fi"
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-phosphor/recipes-core/dropbear/dropbear_%.bbappend b/meta-phosphor/recipes-core/dropbear/dropbear_%.bbappend
new file mode 100644
index 000000000..80714977b
--- /dev/null
+++ b/meta-phosphor/recipes-core/dropbear/dropbear_%.bbappend
@@ -0,0 +1,7 @@
+# 0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch
+# has been upstreamed. This patch can be removed once we upgrade
+# to yocto 2.5 or later which will pull in the latest dropbear code.
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+SRC_URI += "file://dropbearkey.service \
+ file://0001-dropbear-Add-c-command-option-to-force-a-specific-co.patch \
+ file://0001-Only-load-dropbear-default-host-keys-if-a-key-is-not.patch"
diff --git a/meta-phosphor/recipes-core/glib-2.0/glib-2.0%.bbappend b/meta-phosphor/recipes-core/glib-2.0/glib-2.0%.bbappend
new file mode 100644
index 000000000..f003a6b43
--- /dev/null
+++ b/meta-phosphor/recipes-core/glib-2.0/glib-2.0%.bbappend
@@ -0,0 +1,4 @@
+## We do not currently use any gio-modules, set clear this variable to prevent
+## the postinstall hook from being done. The postinstall hook prevents
+## the read-only-rootfs IMAGE_FEATURE.
+GIO_MODULE_PACKAGES = ""
diff --git a/meta-phosphor/recipes-core/os-release/os-release.bbappend b/meta-phosphor/recipes-core/os-release/os-release.bbappend
new file mode 100644
index 000000000..77249fc50
--- /dev/null
+++ b/meta-phosphor/recipes-core/os-release/os-release.bbappend
@@ -0,0 +1,35 @@
+# WARNING!
+#
+# These modifications to os-release disable the bitbake parse
+# cache (for the os-release recipe only). Before copying
+# and pasting into another recipe ensure it is understood
+# what that means!
+
+def run_git(d, cmd):
+ try:
+ oeroot = d.getVar('COREBASE', True)
+ return bb.process.run("git --work-tree %s --git-dir %s/.git %s"
+ % (oeroot, oeroot, cmd))[0].strip('\n')
+ except:
+ pass
+
+python() {
+ version_id = run_git(d, 'describe --dirty --long')
+ if version_id:
+ d.setVar('VERSION_ID', version_id)
+ versionList = version_id.split('-')
+ version = versionList[0] + "-" + versionList[1]
+ d.setVar('VERSION', version)
+
+ build_id = run_git(d, 'describe --abbrev=0')
+ if build_id:
+ d.setVar('BUILD_ID', build_id)
+}
+
+OS_RELEASE_FIELDS_append = " BUILD_ID"
+
+# Ensure the git commands run every time bitbake is invoked.
+BB_DONT_CACHE = "1"
+
+# Make os-release available to other recipes.
+SYSROOT_DIRS_append = " ${sysconfdir}"
diff --git a/meta-phosphor/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-phosphor/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
new file mode 100644
index 000000000..96236ca73
--- /dev/null
+++ b/meta-phosphor/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
@@ -0,0 +1,6 @@
+RDEPENDS_${PN}_append = " \
+ nativesdk-autoconf-archive \
+ nativesdk-phosphor-dbus-interfaces-yaml \
+ nativesdk-sdbus++ \
+ nativesdk-phosphor-logging-elog \
+ "
diff --git a/meta-phosphor/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend b/meta-phosphor/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend
new file mode 100644
index 000000000..7eef4f9bb
--- /dev/null
+++ b/meta-phosphor/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend
@@ -0,0 +1 @@
+RRECOMMENDS_${PN}_append = " gtest sdbusplus phosphor-logging libstdc++-staticdev"
diff --git a/meta-phosphor/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend b/meta-phosphor/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend
new file mode 100644
index 000000000..78b78e40b
--- /dev/null
+++ b/meta-phosphor/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend
@@ -0,0 +1,12 @@
+RDEPENDS_${PN}_remove = " \
+ lttng-tools \
+ lttng-ust \
+ lttng-modules \
+ powertop \
+ latencytop \
+ "
+
+RRECOMMENDS_${PN}_remove = " \
+ perf \
+ trace-cmd \
+ "
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets.bb b/meta-phosphor/recipes-core/systemd/obmc-targets.bb
new file mode 100644
index 000000000..ac7835e6b
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets.bb
@@ -0,0 +1,91 @@
+SUMMARY = "Phosphor Systemd targets"
+DESCRIPTION = "Provides well known Systemd synchronization points for OpenBMC."
+HOMEPAGE = "http://github.com/openbmc"
+PR = "r1"
+
+inherit obmc-phosphor-systemd
+inherit obmc-phosphor-license
+inherit allarch
+
+# Chassis power synchronization targets
+# - start-pre: Services to run before we start power on process
+# - start: Services to run to do the chassis power on
+# - on: Services to run once power is on
+# - stop-pre,stop,off: Same as above but applied to powering off
+# - reset-on: Services to check if chassis power is on after bmc reset
+CHASSIS_SYNCH_TARGETS = "start-pre start on stop-pre stop off reset-on"
+
+# Chassis action power targets
+# - on: Services to run to power on the chassis
+# - off: Services to run to power off the chassis
+# - powered-off: Services to run once chassis power is off
+# - reset: Services to check chassis power state and update chassis "on" target
+# - hard-off: Services to force an immediate power off of the chassis
+CHASSIS_ACTION_TARGETS = "poweron poweroff powered-off powerreset hard-poweroff"
+
+# Track all host synchronization point targets
+# - start-pre: Services to run before we start host boot
+# - starting: Services to run to do the host boot
+# - started: Services to run once the host is booted
+# - stop-pre,stopping,stopped: Same as above but applied to shutting down the host
+# - reset-running: Services to check if host is running after bmc reset
+HOST_SYNCH_TARGETS = "start-pre starting started stop-pre stopping stopped reset-running"
+
+# Track all host action targets
+# - start: Will run startmin target, this target used for any additional
+# services that user needs for an initial power on of host.
+# For example, resetting the host reboot count could be put in
+# this target so on any fresh power on, this count is reset.
+# - startmin: Minimum services required to start the host. This target will
+# be called by reboot and start target.
+# - stop: Services to run to shutdown the host
+# - quiesce: Target to enter on host boot failure
+# - shutdown: Tell host to shutdown, then stop system
+# - reset: Services to check if host is running and update host "start" target
+# - crash: Target to run when host crashes. it is very much similar to
+# quiesce target but the only delta is that this target contains
+# multiple services and one of them is the quiesce target.
+# - timeout: Target to run when host watchdog times out
+# - reboot: Reboot the host
+HOST_ACTION_TARGETS = "start startmin stop quiesce reset shutdown crash timeout reboot"
+
+CHASSIS_SYNCH_FMT = "obmc-power-{0}@.target"
+CHASSIS_ACTION_FMT = "obmc-chassis-{0}@.target"
+HOST_SYNCH_FMT = "obmc-host-{0}@.target"
+HOST_ACTION_FMT = "obmc-host-{0}@.target"
+
+CHASSIS_LINK_SYNCH_FMT = "${CHASSIS_SYNCH_FMT}:obmc-power-{0}@{1}.target"
+CHASSIS_LINK_ACTION_FMT = "${CHASSIS_ACTION_FMT}:obmc-chassis-{0}@{1}.target"
+HOST_LINK_SYNCH_FMT = "${HOST_SYNCH_FMT}:obmc-host-{0}@{1}.target"
+HOST_LINK_ACTION_FMT = "${HOST_ACTION_FMT}:obmc-host-{0}@{1}.target"
+FAN_LINK_FMT = "obmc-fan-control-ready@.target:obmc-fan-control-ready@{0}.target"
+
+# Targets to be executed on checkstop and watchdog timeout
+HOST_ERROR_TARGETS = "crash timeout"
+
+QUIESCE_TMPL = "obmc-host-quiesce@.target"
+CRASH_TIMEOUT_TGTFMT = "obmc-host-{0}@{1}.target"
+QUIESCE_INSTFMT = "obmc-host-quiesce@{1}.target"
+QUIESCE_FMT = "../${QUIESCE_TMPL}:${CRASH_TIMEOUT_TGTFMT}.wants/${QUIESCE_INSTFMT}"
+
+SYSTEMD_SERVICE_${PN} += " \
+ obmc-mapper.target \
+ obmc-webserver-pre.target \
+ obmc-fans-ready.target \
+ obmc-fan-control.target \
+ obmc-fan-control-ready@.target \
+ obmc-fan-watchdog-takeover.target \
+ obmc-standby.target \
+ "
+
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'CHASSIS_SYNCH_FMT', 'CHASSIS_SYNCH_TARGETS')}"
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'CHASSIS_ACTION_FMT', 'CHASSIS_ACTION_TARGETS')}"
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'HOST_SYNCH_FMT', 'HOST_SYNCH_TARGETS')}"
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'HOST_ACTION_FMT', 'HOST_ACTION_TARGETS')}"
+
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'CHASSIS_LINK_SYNCH_FMT', 'CHASSIS_SYNCH_TARGETS', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'CHASSIS_LINK_ACTION_FMT', 'CHASSIS_ACTION_TARGETS', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'HOST_LINK_SYNCH_FMT', 'HOST_SYNCH_TARGETS', 'OBMC_HOST_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'HOST_LINK_ACTION_FMT', 'HOST_ACTION_TARGETS', 'OBMC_HOST_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FAN_LINK_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'QUIESCE_FMT', 'HOST_ERROR_TARGETS', 'OBMC_HOST_INSTANCES')}"
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-hard-poweroff@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-hard-poweroff@.target
new file mode 100644
index 000000000..48fc44169
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-hard-poweroff@.target
@@ -0,0 +1,11 @@
+[Unit]
+Description=Chassis%i (Hard Power Off)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+After=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+Conflicts=obmc-chassis-poweron@%i.target
+Conflicts=obmc-chassis-powerreset@%i.target
+Conflicts=obmc-host-shutdown@%i.target
+Conflicts=xyz.openbmc_project.Ipmi.Internal.SoftPowerOff.service
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powered-off@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powered-off@.target
new file mode 100644
index 000000000..84c1ddab1
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powered-off@.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Chassis%i (Powered Off)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+After=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+Conflicts=obmc-chassis-poweron@%i.target
+Conflicts=obmc-chassis-powerreset@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweroff@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweroff@.target
new file mode 100644
index 000000000..080d72456
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweroff@.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Chassis%i (Power Off)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+After=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+Conflicts=obmc-chassis-poweron@%i.target
+Conflicts=obmc-chassis-powerreset@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweron@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweron@.target
new file mode 100644
index 000000000..55f6d919b
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-poweron@.target
@@ -0,0 +1,12 @@
+[Unit]
+Description=Chassis%i (Power On)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+After=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+Wants=mapper-subtree-remove@-xyz-openbmc\x5fproject-software\x3Axyz.openbmc_project.Software.ActivationBlocksTransition.service
+After=mapper-subtree-remove@-xyz-openbmc\x5fproject-software\x3Axyz.openbmc_project.Software.ActivationBlocksTransition.service
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStop=yes
+OnFailure=obmc-chassis-poweroff@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powerreset@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powerreset@.target
new file mode 100644
index 000000000..8d7c47e6b
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-chassis-powerreset@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Chassis%i (Reset Check)
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStop=yes
+
+[Install]
+WantedBy={SYSTEMD_DEFAULT_TARGET}
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control-ready@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control-ready@.target
new file mode 100644
index 000000000..e041a5508
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control-ready@.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Fan Control Ready
+RefuseManualStop=yes
+Conflicts=obmc-chassis-powered-off@%i.target
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control.target
new file mode 100644
index 000000000..50665db4a
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-control.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Fan Control
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-watchdog-takeover.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-watchdog-takeover.target
new file mode 100644
index 000000000..803408334
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fan-watchdog-takeover.target
@@ -0,0 +1,6 @@
+#The system implementation should start this target when dynamic fan control
+#is no longer desired or possible. It should also add units to this target
+#that enabled continued operation after dynamic fan control is no longer
+#desired or possible.
+[Unit]
+Description=Fan watchdog takeover target
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fans-ready.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fans-ready.target
new file mode 100644
index 000000000..59e61c626
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-fans-ready.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Fans Ready
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-crash@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-crash@.target
new file mode 100644
index 000000000..ea3798b52
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-crash@.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Host instance %i crashed
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-quiesce@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-quiesce@.target
new file mode 100644
index 000000000..4f10419ab
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-quiesce@.target
@@ -0,0 +1,6 @@
+[Unit]
+Description=Quiesce Target
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+RefuseManualStop=yes
+Conflicts=obmc-chassis-poweroff@%i.target
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reboot@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reboot@.target
new file mode 100644
index 000000000..dc280ea65
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reboot@.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=Reboot Host%i
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+Conflicts=obmc-host-startmin@%i.target
+RefuseManualStop=yes
+OnFailure=obmc-chassis-poweroff@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset-running@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset-running@.target
new file mode 100644
index 000000000..94bb2b130
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset-running@.target
@@ -0,0 +1,5 @@
+[Unit]
+Description=Host%i running after reset
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset@.target
new file mode 100644
index 000000000..ca95d843c
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-reset@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Host%i (Reset Check)
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStop=yes
+
+[Install]
+WantedBy={SYSTEMD_DEFAULT_TARGET}
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-shutdown@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-shutdown@.target
new file mode 100644
index 000000000..4768a567f
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-shutdown@.target
@@ -0,0 +1,6 @@
+[Unit]
+Description=Power%i Host Off
+Wants={SYSTEMD_DEFAULT_TARGET}
+RefuseManualStop=yes
+OnFailure=obmc-chassis-poweroff@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target
new file mode 100644
index 000000000..2bc270c14
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Start Host%i (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start@.target
new file mode 100644
index 000000000..144b63387
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-start@.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=Start Host%i
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStop=yes
+OnFailure=obmc-host-quiesce@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-started@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-started@.target
new file mode 100644
index 000000000..eb0a9383b
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-started@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Host%i (Started)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-starting@%i.target
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-starting@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-starting@.target
new file mode 100644
index 000000000..408139dd4
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-starting@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Host%i (Starting)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-start-pre@%i.target
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-startmin@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-startmin@.target
new file mode 100644
index 000000000..6e924adcd
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-startmin@.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=Start Host%i Minimum
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+Conflicts=obmc-host-stop@%i.target
+RefuseManualStop=yes
+OnFailure=obmc-host-quiesce@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target
new file mode 100644
index 000000000..e88d3ea58
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target
@@ -0,0 +1,8 @@
+[Unit]
+Description=Stop Host%i (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Before=obmc-host-stopping@%i.target
+Conflicts=obmc-host-startmin@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop@.target
new file mode 100644
index 000000000..8e99bccdb
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stop@.target
@@ -0,0 +1,11 @@
+[Unit]
+Description=Stop Host%i
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+After=obmc-chassis-poweroff@%i.target
+Conflicts=obmc-host-startmin@%i.target
+RefuseManualStop=yes
+OnFailure=obmc-chassis-poweroff@%i.target
+OnFailureJobMode=flush
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target
new file mode 100644
index 000000000..74039fc25
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Host%i (Stopped)
+Wants={SYSTEMD_DEFAULT_TARGET}
+Wants=obmc-host-stopping@%i.target
+After=obmc-host-stopping@%i.target
+Before=obmc-power-stop-pre@%i.target
+Conflicts=obmc-host-startmin@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopping@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopping@.target
new file mode 100644
index 000000000..f087dea72
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-stopping@.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=Host%i (Stopping)
+Wants={SYSTEMD_DEFAULT_TARGET}
+Wants=obmc-host-stop-pre@%i.target
+After=obmc-host-stop-pre@%i.target
+Before=obmc-host-stopped@%i.target
+Conflicts=obmc-host-startmin@%i.target
+Conflicts=obmc-host-starting@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-timeout@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-timeout@.target
new file mode 100644
index 000000000..b87507bf1
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-host-timeout@.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Host instance %i timed out refreshing Watchdog
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-mapper.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-mapper.target
new file mode 100644
index 000000000..5e52f4cd5
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-mapper.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Phosphor Object Mapper
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-off@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-off@.target
new file mode 100644
index 000000000..c47b21e47
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-off@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i (Off)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-power-stop@%i.target
+Conflicts=obmc-chassis-poweron@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-on@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-on@.target
new file mode 100644
index 000000000..52135ffc9
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-on@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i (On)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-power-start@%i.target
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-reset-on@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-reset-on@.target
new file mode 100644
index 000000000..d24d401bf
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-reset-on@.target
@@ -0,0 +1,5 @@
+[Unit]
+Description=Chassis%i power on after reset
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target
new file mode 100644
index 000000000..1a1ea6319
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i On (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start@.target
new file mode 100644
index 000000000..a977d5ad3
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-start@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i On
+After=obmc-power-start-pre@%i.target
+Wants={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-poweroff@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target
new file mode 100644
index 000000000..50d5050bb
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Power%i Off (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=obmc-host-stopped@%i.target
+After=obmc-host-stopped@%i.target
+Conflicts=obmc-chassis-poweron@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop@.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop@.target
new file mode 100644
index 000000000..f0429d786
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-power-stop@.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Power%i Off
+Wants=obmc-power-stop-pre@%i.target
+After=obmc-power-stop-pre@%i.target
+Wants={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-poweron@%i.target
+Conflicts=fsi-disable.service
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-standby.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-standby.target
new file mode 100644
index 000000000..95044a404
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-standby.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Phosphor System - Standby
+Requires=multi-user.target
+RefuseManualStart=yes
+RefuseManualStop=yes
+AllowIsolate=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-webserver-pre.target b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-webserver-pre.target
new file mode 100644
index 000000000..ea5200c00
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/obmc-targets/obmc-webserver-pre.target
@@ -0,0 +1,2 @@
+[Unit]
+Description=Webserver (pre)
diff --git a/meta-phosphor/recipes-core/systemd/systemd/0001-sd-bus-Don-t-automatically-add-ObjectManager.patch b/meta-phosphor/recipes-core/systemd/systemd/0001-sd-bus-Don-t-automatically-add-ObjectManager.patch
new file mode 100644
index 000000000..f8f5b08a9
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd/0001-sd-bus-Don-t-automatically-add-ObjectManager.patch
@@ -0,0 +1,56 @@
+From 44562e33655668033a8ee0a7a686671226da2110 Mon Sep 17 00:00:00 2001
+From: Brad Bishop <bradleyb@fuzziesquirrel.com>
+Date: Tue, 13 Mar 2018 15:34:30 -0400
+Subject: [PATCH] sd-bus: Don't automatically add ObjectManager
+
+Even though sdbus helps manage org.freedesktop.DBus.ObjectManager
+it must still be explicitly enabled by a library client.
+
+As such do not automatically add ObjectManager to GetManagedObjects
+method call responses or InterfacesAdded/Removed signals. Bus
+service client applications can potentially react to the appearance
+of ObjectManager in these messages and follow up with a method call
+on the interface, which isn't actually implemented on the objects
+within the subtree, below the manager.
+---
+ src/libsystemd/sd-bus/bus-objects.c | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
+index 6e00255b2..59f698402 100644
+--- a/src/libsystemd/sd-bus/bus-objects.c
++++ b/src/libsystemd/sd-bus/bus-objects.c
+@@ -1076,10 +1076,6 @@ static int object_manager_serialize_path(
+ if (r < 0)
+ return r;
+
+- r = sd_bus_message_append(reply, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
+- if (r < 0)
+- return r;
+-
+ found_something = true;
+ }
+
+@@ -2302,9 +2298,6 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p
+ if (r < 0)
+ return r;
+ r = sd_bus_message_append(m, "{sa{sv}}", "org.freedesktop.DBus.Properties", 0);
+- if (r < 0)
+- return r;
+- r = sd_bus_message_append(m, "{sa{sv}}", "org.freedesktop.DBus.ObjectManager", 0);
+ if (r < 0)
+ return r;
+
+@@ -2473,9 +2466,6 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char
+ if (r < 0)
+ return r;
+ r = sd_bus_message_append(m, "s", "org.freedesktop.DBus.Properties");
+- if (r < 0)
+- return r;
+- r = sd_bus_message_append(m, "s", "org.freedesktop.DBus.ObjectManager");
+ if (r < 0)
+ return r;
+
+--
+2.14.3
+
diff --git a/meta-phosphor/recipes-core/systemd/systemd/0003-basic-Factor-out-string-checking-from-name_to_prefix.patch b/meta-phosphor/recipes-core/systemd/systemd/0003-basic-Factor-out-string-checking-from-name_to_prefix.patch
new file mode 100644
index 000000000..cd4dcad16
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd/0003-basic-Factor-out-string-checking-from-name_to_prefix.patch
@@ -0,0 +1,103 @@
+From 899173e241f781ad4dfb6b40e7c5f35104164435 Mon Sep 17 00:00:00 2001
+From: Brad Bishop <bradleyb@fuzziesquirrel.com>
+Date: Thu, 12 Jan 2017 09:56:54 -0500
+Subject: [PATCH 1/2] basic: Factor out string checking from
+ name_to_prefix/instance
+
+Add two new functions: string_to_prefix/instance that enable
+prefix/instance extraction from a name before the name is
+mangled.
+
+Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
+---
+ src/basic/unit-name.c | 48 +++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 31 insertions(+), 17 deletions(-)
+
+diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
+index 0a6efa4..93c4838 100644
+--- a/src/basic/unit-name.c
++++ b/src/basic/unit-name.c
+@@ -135,42 +135,46 @@ bool unit_suffix_is_valid(const char *s) {
+ return true;
+ }
+
+-int unit_name_to_prefix(const char *n, char **ret) {
++static int string_to_prefix(const char *s, char **ret) {
+ const char *p;
+- char *s;
++ char *r;
+
+- assert(n);
++ assert(s);
+ assert(ret);
+
+- if (!unit_name_is_valid(n, UNIT_NAME_ANY))
+- return -EINVAL;
+-
+- p = strchr(n, '@');
++ p = strchr(s, '@');
+ if (!p)
+- p = strrchr(n, '.');
++ p = strrchr(s, '.');
+
+ assert_se(p);
+
+- s = strndup(n, p - n);
+- if (!s)
++ r = strndup(s, p - s);
++ if (!r)
+ return -ENOMEM;
+
+- *ret = s;
++ *ret = r;
+ return 0;
+ }
+
+-int unit_name_to_instance(const char *n, char **instance) {
+- const char *p, *d;
+- char *i;
+-
++int unit_name_to_prefix(const char *n, char **ret) {
+ assert(n);
+- assert(instance);
++ assert(ret);
+
+ if (!unit_name_is_valid(n, UNIT_NAME_ANY))
+ return -EINVAL;
+
++ return string_to_prefix(n, ret);
++}
++
++static int string_to_instance(const char *s, char **instance) {
++ const char *p, *d;
++ char *i;
++
++ assert(s);
++ assert(instance);
++
+ /* Everything past the first @ and before the last . is the instance */
+- p = strchr(n, '@');
++ p = strchr(s, '@');
+ if (!p) {
+ *instance = NULL;
+ return 0;
+@@ -190,6 +194,16 @@ int unit_name_to_instance(const char *n, char **instance) {
+ return 1;
+ }
+
++int unit_name_to_instance(const char *n, char **instance) {
++ assert(n);
++ assert(instance);
++
++ if (!unit_name_is_valid(n, UNIT_NAME_ANY))
++ return -EINVAL;
++
++ return string_to_instance(n, instance);
++}
++
+ int unit_name_to_prefix_and_instance(const char *n, char **ret) {
+ const char *d;
+ char *s;
+--
+1.8.3.1
+
diff --git a/meta-phosphor/recipes-core/systemd/systemd/0004-basic-Use-path-escaping-when-mangling-path-instances.patch b/meta-phosphor/recipes-core/systemd/systemd/0004-basic-Use-path-escaping-when-mangling-path-instances.patch
new file mode 100644
index 000000000..fca28de59
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd/0004-basic-Use-path-escaping-when-mangling-path-instances.patch
@@ -0,0 +1,69 @@
+From b7565b3f2d3b13c4ae5734407a2c3f27658c7b4b Mon Sep 17 00:00:00 2001
+From: Brad Bishop <bradleyb@fuzziesquirrel.com>
+Date: Thu, 12 Jan 2017 08:52:42 -0500
+Subject: [PATCH 2/2] basic: Use path escaping when mangling path instances
+
+Allow path instances with dashes in them to be unescaped
+properly.
+
+Fixes systemd/systemd#5072
+
+Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
+---
+ src/basic/unit-name.c | 18 ++++++++++++++++++
+ src/test/test-unit-name.c | 3 +++
+ 2 files changed, 21 insertions(+)
+
+diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
+index 93c4838..c91b0e7 100644
+--- a/src/basic/unit-name.c
++++ b/src/basic/unit-name.c
+@@ -684,6 +684,8 @@ static char *do_escape_mangle(const char *f, UnitNameMangle allow_globs, char *t
+ * If @allow_globs, globs characters are preserved. Otherwise, they are escaped.
+ */
+ int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, const char *suffix, char **ret) {
++ _cleanup_free_ char *instance = NULL;
++ _cleanup_free_ char *prefix = NULL;
+ char *s, *t;
+ int r;
+
+@@ -723,6 +725,22 @@ int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, c
+ return r;
+ }
+
++ r = string_to_instance(name, &instance);
++ if(r < 0 && r != -EINVAL)
++ return r;
++
++ if(instance && path_is_absolute(instance)) {
++ r = string_to_prefix(name, &prefix);
++ if(r < 0 && r != -EINVAL)
++ return r;
++
++ r = unit_name_from_path_instance(prefix, instance, suffix, ret);
++ if (r >= 0)
++ return 1;
++ if (r != -EINVAL)
++ return r;
++ }
++
+ s = new(char, strlen(name) * 4 + strlen(suffix) + 1);
+ if (!s)
+ return -ENOMEM;
+diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
+index 2fd83f3..f2cb047 100644
+--- a/src/test/test-unit-name.c
++++ b/src/test/test-unit-name.c
+@@ -192,6 +192,9 @@ static void test_unit_name_mangle(void) {
+ test_unit_name_mangle_one(UNIT_NAME_GLOB, "foo", "foo.service", 1);
+ test_unit_name_mangle_one(UNIT_NAME_GLOB, "foo*", "foo*", 0);
+ test_unit_name_mangle_one(UNIT_NAME_GLOB, "ü*", "\\xc3\\xbc*", 1);
++ test_unit_name_mangle_one(UNIT_NAME_GLOB, "foo@/bar.service", "foo@bar.service", 1);
++ test_unit_name_mangle_one(UNIT_NAME_GLOB, "foo@/bar/baz-boo.service", "foo@bar-baz\\x2dboo.service", 1);
++ test_unit_name_mangle_one(UNIT_NAME_GLOB, "foo@bar/baz-boo.service", "foo@bar-baz-boo.service", 1);
+ }
+
+ static int test_unit_printf(void) {
+--
+1.8.3.1
+
diff --git a/meta-phosphor/recipes-core/systemd/systemd/0005-dont-return-error-if-unable-to-create-network-namespace.patch b/meta-phosphor/recipes-core/systemd/systemd/0005-dont-return-error-if-unable-to-create-network-namespace.patch
new file mode 100644
index 000000000..d83bf72ef
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd/0005-dont-return-error-if-unable-to-create-network-namespace.patch
@@ -0,0 +1,39 @@
+From 870b79559cd5841b3f680c914b4b2e770a9961cf Mon Sep 17 00:00:00 2001
+From: Ratan Gupta <ratagupt@in.ibm.com>
+Date: Thu, 20 Jul 2017 11:59:14 +0530
+Subject: [PATCH] Don't return the error if unable to create the network
+ namespace
+
+On systems where kernel is not configured with namespace support
+then don't return error during setting up network namespace.
+
+Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
+---
+ src/core/namespace.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/namespace.c b/src/core/namespace.c
+index 1195e9a..f30dacf 100644
+--- a/src/core/namespace.c
++++ b/src/core/namespace.c
+@@ -986,7 +986,7 @@ int setup_netns(int netns_storage_socket[2]) {
+ /* Nothing stored yet, so let's create a new namespace */
+
+ if (unshare(CLONE_NEWNET) < 0) {
+- r = -errno;
++ r = 0;
+ goto fail;
+ }
+
+@@ -994,7 +994,7 @@ int setup_netns(int netns_storage_socket[2]) {
+
+ netns = open("/proc/self/ns/net", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (netns < 0) {
+- r = -errno;
++ r = 0;
+ goto fail;
+ }
+
+--
+1.9.1
+
diff --git a/meta-phosphor/recipes-core/systemd/systemd/default.network b/meta-phosphor/recipes-core/systemd/systemd/default.network
new file mode 100644
index 000000000..c75c3d60d
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd/default.network
@@ -0,0 +1,4 @@
+[Match]
+Name=eth*
+[Network]
+DHCP=ipv4
diff --git a/meta-phosphor/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/recipes-core/systemd/systemd_%.bbappend
new file mode 100644
index 000000000..b403069a5
--- /dev/null
+++ b/meta-phosphor/recipes-core/systemd/systemd_%.bbappend
@@ -0,0 +1,22 @@
+FILES_${PN}-catalog-extralocales = \
+ "${exec_prefix}/lib/systemd/catalog/*.*.catalog"
+PACKAGES =+ "${PN}-catalog-extralocales"
+PACKAGECONFIG_append = " networkd coredump"
+PACKAGECONFIG_remove = "machined hibernate ldconfig binfmt backlight localed \
+ quotacheck kdbus ima smack polkit logind bootchart utmp \
+ manpages"
+FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
+SRC_URI += "file://default.network"
+SRC_URI += "file://0001-sd-bus-Don-t-automatically-add-ObjectManager.patch"
+SRC_URI += "file://0003-basic-Factor-out-string-checking-from-name_to_prefix.patch"
+SRC_URI += "file://0004-basic-Use-path-escaping-when-mangling-path-instances.patch"
+#TODO upstream the below patch via below issue
+#https://github.com/openbmc/openbmc/issues/2016
+SRC_URI += "file://0005-dont-return-error-if-unable-to-create-network-namespace.patch"
+
+RRECOMMENDS_${PN} += "obmc-targets"
+FILES_${PN} += "${systemd_unitdir}/network/default.network"
+
+do_install_append() {
+ install -m 644 ${WORKDIR}/default.network ${D}${systemd_unitdir}/network/
+}
OpenPOWER on IntegriCloud