init: Add init script to setup /etc mount before starting systemd

Systemd requires /etc mounted and ready at init time. Previously, we
were mounting /etc as an overlay from the persistant filesystem after
systemd started. This caused a variety of issues with systemd and
associated applications (journal, etc).
This change also adds factory reset functionality.

Resolves openbmc/openbmc#2542

Change-Id: Ib8a38e99df39f833026fe4475670a7ec2b9c8d4d
Signed-off-by: Edward A. James <eajames@us.ibm.com>
diff --git a/common/recipes-phosphor/preinit-mounts/preinit-mounts/init b/common/recipes-phosphor/preinit-mounts/preinit-mounts/init
new file mode 100644
index 0000000..91f8038
--- /dev/null
+++ b/common/recipes-phosphor/preinit-mounts/preinit-mounts/init
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+if ! mount ubi0:rwfs /var -t ubifs -o defaults; then
+  if ! mount ubi0:rwfs /var -t ubifs -o defaults,ro; then
+    mount tmpfs /var -t tmpfs -o defaults
+  fi
+fi
+
+mkdir -p /var/persist/etc /var/persist/etc-work /var/persist/home/root
+
+rm -rf /var/persist/etc-work/*
+# rm -rf specifically skips . and .. directories; pipe all output to null to avoid the error message
+rm -rf /var/persist/etc-work/.* > /dev/null 2>&1
+
+if ! mount overlay /etc -t overlay -o defaults,lowerdir=/etc,upperdir=/var/persist/etc,workdir=/var/persist/etc-work; then
+  mount overlay /etc -t overlay -o defaults,lowerdir=/etc:/var/persist/etc
+fi
+
+exec /lib/systemd/systemd