Prepatch: restore passwd files 45/139045/7 accepted/tizen/4.0/unified/20170816.013025 accepted/tizen/4.0/unified/20170829.015911 accepted/tizen/unified/20170721.024542 submit/tizen/20170720.093148 submit/tizen_4.0/20170811.094300 submit/tizen_4.0/20170828.100004 submit/tizen_4.0/20170828.110004
authorSunmin Lee <sunm.lee@samsung.com>
Mon, 17 Jul 2017 05:14:36 +0000 (14:14 +0900)
committerSunmin Lee <sunm.lee@samsung.com>
Wed, 19 Jul 2017 04:31:42 +0000 (13:31 +0900)
From Tizen 4.0, passwd files (/etc/{passwd,shadow,group,gshadow})
were moved to RW partition (/opt/etc).
Therefore, they needed to be recovered during update process.

Change-Id: I3ef0f525adf5b45b9ec77d047f16f5c572fe46ab
Signed-off-by: Sunmin Lee <sunm.lee@samsung.com>
packaging/initrd-fota.spec
scripts/40-fota.list
scripts/backup-passwd.sh [new file with mode: 0755]
scripts/fus_rw-init.sh
scripts/restore-passwd.sh [new file with mode: 0755]

index 54e1710..e62e7a1 100755 (executable)
@@ -1,7 +1,7 @@
 Name:       initrd-fota
 Summary:    package for building ramdisk-recovery.img
-Version:    0.1.1
-Release:    2
+Version:    0.1.2
+Release:    3
 Group:      System/Utilities
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
@@ -36,6 +36,9 @@ mkdir -p %{buildroot}/opt/usr/data/recovery
 mkdir -p %{buildroot}%{init_script_dir}
 cp ./scripts/fota-init.sh %{buildroot}%{init_script_dir}/fota-init.sh
 cp ./scripts/fus_rw-init.sh %{buildroot}%{init_script_dir}/
+# Pre-patch script
+cp ./scripts/backup-passwd.sh %{buildroot}%{init_script_dir}/
+cp ./scripts/restore-passwd.sh %{buildroot}%{init_script_dir}/
 
 mkdir -p %{buildroot}%{_datadir}/initrd-recovery/initrd.list.d
 cp ./scripts/40-fota.list %{buildroot}%{_datadir}/initrd-recovery/initrd.list.d
index 6f15fbb..7a481d0 100755 (executable)
@@ -2,6 +2,7 @@
 VERBATIMS="
 /usr/lib/initrd-recovery/fota/fota-init.sh
 /usr/lib/initrd-recovery/fota/fus_rw-init.sh
+/usr/lib/initrd-recovery/fota/restore-passwd.sh
 "
 
 LIBONLYS="
@@ -28,6 +29,7 @@ WITHLIBS="
 /bin/sleep
 /bin/sync
 /bin/umount
+/bin/cp
 "
 
 # LinkFileName:Target
diff --git a/scripts/backup-passwd.sh b/scripts/backup-passwd.sh
new file mode 100755 (executable)
index 0000000..f6fc09a
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+PREPATCH_FILES="
+/opt/etc/passwd
+/opt/etc/passwd-
+/opt/etc/passwd.old
+/opt/etc/shadow
+/opt/etc/shadow-
+/opt/etc/shadow.old
+/opt/etc/group
+/opt/etc/group-
+/opt/etc/group.old
+/opt/etc/gshadow
+/opt/etc/gshadow-
+/opt/etc/gshadow.old
+"
+PREPATCH_BACKUP_DIR=/usr/share/upgrade/prepatch
+
+mkdir -p "$PREPATCH_BACKUP_DIR"
+for FILE in $PREPATCH_FILES; do
+       cp -af "$FILE" "$PREPATCH_BACKUP_DIR"
+done
index 02b8e6e..69473d9 100755 (executable)
@@ -65,6 +65,9 @@ do_reboot() {
 do_rw_update() {
        echo "Change into rw update mode" >> ${INT_LOG_FILE}
 
+       # Pre-patches
+       /usr/lib/initrd-recovery/fota/restore-passwd.sh
+
        # Go to system-update.target
        if [ $$ = 1 ]; then
                cd ${FAKE_ROOT}
diff --git a/scripts/restore-passwd.sh b/scripts/restore-passwd.sh
new file mode 100755 (executable)
index 0000000..e048d95
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+FAKE_ROOT="/system"
+BACKUP_DIR="/usr/share/upgrade/prepatch"
+
+# Restore etc links
+cp -af "$FAKE_ROOT/$BACKUP_DIR/passwd" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/passwd-" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/passwd.old" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/shadow" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/shadow-" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/shadow.old" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/group" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/group-" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/group.old" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/gshadow" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/gshadow-" "$FAKE_ROOT/opt/etc"
+cp -af "$FAKE_ROOT/$BACKUP_DIR/gshadow.old" "$FAKE_ROOT/opt/etc"