Mount vendor image sandbox/jkryszyn/vendor
authorJacek Kryszyn <j.kryszyn@samsung.com>
Tue, 11 Mar 2025 13:31:31 +0000 (14:31 +0100)
committerJacek Kryszyn <j.kryszyn@samsung.com>
Tue, 11 Mar 2025 13:31:31 +0000 (14:31 +0100)
If /opt/vendor.img exists, mount it to /opt/vendor
and overlay /hal with /opt/vendor/hal, /usr with
/opt/vendor/usr and /root with /opt/vendor/root.
The vendor rpm database will be in /opt/vendor/rpm.

Change-Id: I963e06fde6a1666477cce808483474d903036699

scripts/init.sh

index f6b277259eab89da3b010b196a089292f30f0d38..08c4158a231d30e6e90b2101bd835e25e3ab230f 100755 (executable)
@@ -500,6 +500,33 @@ function change_root()
         INIT_BINARY=/usr/lib/systemd/systemd
     fi
 
+    if [ -f "${DATAFS_MNT}"/vendor.img ]; then
+        echo "[VENDOR] Found vendor.img. Trying to mount and set overlays..."
+        if ! mkdir -p "${DATAFS_MNT}"/vendor; then
+            echo "[VENDOR] Unable to create /opt/vendor"
+        else
+            echo "System::Privileged" > /proc/self/attr/current
+
+            if ! mount "${DATAFS_MNT}"/vendor.img "${DATAFS_MNT}"/vendor; then
+                echo "[VENDOR] Unable to mount vendor.img"
+            else
+                # lib has to be after usr. Otherwise usr will cover lib overlay
+                dirs=("hal" "usr" "root")
+
+                for t in ${dirs[@]}; do
+                    if [ -d "${DATAFS_MNT}"/vendor/"${t}" ]; then
+                        if ! mount -t overlay overlay -o lowerdir="${DATAFS_MNT}"/vendor/"${t}":"${ROOTFS_MNT}"/"${t}" "${ROOTFS_MNT}"/"${t}"; then
+                            echo "[VENDOR] Unable to overlay /${t}"
+                        fi
+                    fi
+                done
+
+                mount $MODULES $ROOTFS_MNT/usr/lib/modules
+                echo "[VENDOR] Finished setting vendor image."
+            fi
+        fi
+    fi
+
     if [ $$ = 1 ]
     then
         if [ "$IN_INITRD" = "1" ]