Patch for 3.0 to 4.0 68/139268/3
authorSunmin Lee <sunm.lee@samsung.com>
Tue, 18 Jul 2017 00:04:42 +0000 (09:04 +0900)
committerSunmin Lee <sunm.lee@samsung.com>
Wed, 19 Jul 2017 00:33:57 +0000 (09:33 +0900)
From Tizen 4.0, there are some changes in system RW update:
 - No /system-update link: use /usr/share/upgrade directly
 - RW update helper macro is introduced
 - No need to backup home directory

Change-Id: Icd49e260674383a5e8c887583d6381180134232c
Signed-off-by: Sunmin Lee <sunm.lee@samsung.com>
make_upgrade_image.sh [changed mode: 0644->0755]
packaging/system-rw-update.spec
units/init-update.service
units/offline-update.service
upgrade/rw-update-macro.inc [new file with mode: 0755]
upgrade/update-init.sh
upgrade/update.sh

old mode 100644 (file)
new mode 100755 (executable)
index b6f1433..8a0326c
@@ -2,17 +2,26 @@
 #
 # make_upgrade_image.sh
 #
-#  Convert Tizen 3.0 platform image to upgrade image (2.4 -> 3.0)
+#  Convert Tizen platform image to upgrade image
 
 # For sdb debugging
 
-sdb_debugging=0
+sdb_debugging=1
 sdb_rule='SUBSYSTEM=="switch", ATTR{name}=="usb_cable", ATTR{state}=="1", RUN+="/usr/bin/direct_set_debug.sh --sdb-set"\nSUBSYSTEM=="switch", ATTR{name}=="usb_cable", ATTR{state}=="0", RUN+="/usr/bin/direct_set_debug.sh --sdb-unset"'
 
-# Back up /home/owner & rpm db
+# Back up data
 backup () {
-       echo "Back up home & rpm db"
+       if [ $# -lt 2 ]; then
+               echo "No backup data"
+               return 0
+       fi
 
+       echo "Back up file at $2"
+       cat $2
+
+       # Push data for pre-patch (works in initrd)
+       local backup_path="/usr/share/upgrade/prepatch/data"
+       local backup_files="$(cat $2)"
        local tmp_path=$1
 
        umount ${tmp_path}
@@ -23,11 +32,10 @@ backup () {
        mount system-data.img ${tmp_path}/opt
        mount user.img ${tmp_path}/opt/usr
 
-       mkdir ${tmp_path}/usr/share/upgrade/data/home
-       cp -af ${tmp_path}/opt/usr/home/owner ${tmp_path}/usr/share/upgrade/data/home
-
-       mkdir ${tmp_path}/usr/share/upgrade/data/rpm
-       cp -af ${tmp_path}/opt/var/lib/rpm/* ${tmp_path}/usr/share/upgrade/data/rpm
+       mkdir -p ${tmp_path}/$backup_path
+       for file in $backup_files; do
+               cp -afv ${tmp_path}/$file ${tmp_path}/$backup_path
+       done
 
        sync
 
@@ -48,7 +56,7 @@ fi
 
 if [ ! $1 ]
 then
-       echo "usage: $0 [tizen-3.0-image(tar.gz)]"
+       echo "usage: $0 [tizen-image-update(tar.gz)]"
        exit
 fi
 
@@ -60,10 +68,7 @@ echo "Mount rootfs.img"
 mount rootfs.img ${tmp_root}
 
 cwd=`pwd`
-backup ${cwd}/${tmp_root}
-
-echo "Make /system-update"
-ln -s /usr/share/upgrade/ ${tmp_root}/system-update
+backup ${cwd}/${tmp_root} $2
 
 # For sdb debugging
 if [ ${sdb_debugging} -eq 1 ]
@@ -80,7 +85,15 @@ umount ${tmp_root}
 
 upgrade_img=`echo $1 | sed -e 's/\.tar\.gz//'`-upgrade.tar.gz
 echo "Compressing upgrade image ${upgrade_img}"
-tar zcf ${upgrade_img} dzImage modules.img rootfs.img
+
+ro_imgs=
+for img in ${imgs}; do
+       if [ "${img}" != "system-data.img" ] && [ "${img}" != "user.img" ]; then
+               ro_imgs="${ro_imgs} ${img}"
+       fi
+done
+
+tar zcf ${upgrade_img} ${ro_imgs}
 
 echo "Remove dummies"
 rm -rf ${imgs} ${tmp_root}
index ad74085130b0981bd6f6247b45c1aed429b22448..c6da85c33fe71b33b6c8b272922fc756d4c05b2c 100644 (file)
@@ -2,8 +2,8 @@
 
 Name:       system-rw-update
 Summary:    System RW update management
-Version:    0.1
-Release:    0
+Version:    0.1.1
+Release:    2
 Group:      Base/Startup
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.bz2
index 672a76a12027e42514751aec34705734703418ba..713f9a96ff0cedc890572d5ccab91b4705ae766f 100644 (file)
@@ -7,4 +7,4 @@ Before=sdbd.service
 
 [Service]
 Type=oneshot
-ExecStart=/system-update/update-init.sh
+ExecStart=/usr/share/upgrade/update-init.sh
index adc8f12bd1c9349803ddffb611b632545c33fb8f..062085357f1142efc3826957f75f4061220c0b7b 100644 (file)
@@ -6,4 +6,4 @@ After=sysinit.target init-update.service
 
 [Service]
 Type=simple
-ExecStart=/system-update/update.sh
+ExecStart=/usr/share/upgrade/update.sh
diff --git a/upgrade/rw-update-macro.inc b/upgrade/rw-update-macro.inc
new file mode 100755 (executable)
index 0000000..00946fb
--- /dev/null
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+OLD_VER=
+NEW_VER=
+OLD_REL=
+NEW_REL=
+OLD_VER_INFO="/inform/version"
+
+write_version_info() {
+       OLD_VER=$(cat /etc/config/model-config.xml | grep platform.version \
+                       | sed -e 's/.*>\(.*\)<.*/\1/')
+       OLD_REL=$(cat /etc/info.ini | grep Date | sed -e 's/Date=//' -e 's/\_.*//')
+       echo "OLD_VER=$OLD_VER" > $OLD_VER_INFO
+       echo "OLD_REL=$OLD_REL" >> $OLD_VER_INFO
+}
+
+get_version_info() {
+       if [ -f $OLD_VER_INFO ]; then
+               source $OLD_VER_INFO
+       fi
+       NEW_VER=$(cat /etc/config/model-config.xml | grep platform.version \
+                       | sed -e 's/.*>\(.*\)<.*/\1/')
+       NEW_REL=$(cat /etc/info.ini | grep Date | sed -e 's/Date=//' -e 's/\_.*//')
+}
+
+restore_backup_file() {
+
+       BACKUP_ZIP="/usr/system/RestoreDir/opt.zip"
+       REC=0
+       DEST="/"
+
+       while [ "$1" != "" ]; do
+               case $1 in
+               -r )
+                       REC=1
+                       ;;
+               -d )
+                       shift
+                       DEST=$1
+                       ;;
+               *)
+                       RESTORE_PATH=$1
+                       ;;
+               esac
+               shift
+       done
+
+       MOD_PATH=$(echo $RESTORE_PATH | sed -e "s/^\///")
+
+       if [ "$REC" = "1" ]; then
+               REC_FILES=$(unzip -l $BACKUP_ZIP | grep $MOD_PATH | awk '{print $4}')
+               for REC_FILE in $REC_FILES; do
+                       restore_backup_file $REC_FILE -d $DEST
+               done
+               exit
+       fi
+
+       unzip -nX $BACKUP_ZIP $MOD_PATH -d $DEST
+       TMP=$(mktemp /tmp/smackinfo.XXXXXX)
+       PATH_FOR_SMACK=$(echo $MOD_PATH | sed -e "s/\/$//")
+       if [ "z$DEST" = "z" ]; then
+               grep $PATH_FOR_SMACK'\ ' /usr/system/RestoreDir/smack_label.txt > $TMP
+       else
+               FILE_PATH="$DEST/$PATH_FOR_SMACK"
+               SMACK_VAL=$(grep $PATH_FOR_SMACK'\ ' /usr/system/RestoreDir/smack_label.txt | \
+                               awk '{print $2 $3}')
+               echo "$FILE_PATH $SMACK_VAL" > $TMP
+       fi
+       rstsmack $TMP
+       rm $TMP
+}
index 371abfe83c83e84171756262f998142609f4f963..14cee021fcb74e100c4e6b2289df56c9227d19e3 100755 (executable)
@@ -3,24 +3,15 @@
 # RW update initialize script
 #
 PATH=/bin:/usr/bin:/sbin:/usr/sbin
-OWNER_HOME=/opt/usr/home/owner
+RW_MACRO=/usr/share/upgrade/rw-update-macro.inc
 
-USER_DISK=`ls /dev/disk/by-partlabel/ | grep -i user`
-USER_MNT=/opt/usr
-
-# Mount user partition (specific to lazy mount)
-mount | grep "$USER_MNT" > /dev/null
-
-if [ $? != "0" ]
-then
-       /usr/bin/mount PARTLABEL=$USER_DISK $USER_MNT
+if [ -f $RW_MACRO ]; then
+       source $RW_MACRO
+       get_version_info
 fi
 
-# Create home directory
-test ! -e /opt/usr/home && mkdir -p /opt/usr/home
-chsmack -a "_" /opt/usr/home
-cp -af /usr/share/upgrade/data/home/owner /opt/usr/home
-
-# Copy 3.0 rpm db
-rm -rf /var/lib/rpm/*
-cp -af /usr/share/upgrade/data/rpm/* /var/lib/rpm
+if [ "$NEW_VER" = "4.0" ]; then
+       # Restore rpm db
+       rm -rf /var/lib/rpm/*
+       restore_backup_file -r /opt/var/lib/rpm
+fi
index 0985749b7d45d897de25ce2e7a3b761174d5d3be..c3dc8e19699b3c61f525b71141bf59ffe1d7c376 100755 (executable)
@@ -5,13 +5,9 @@
 PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
 PATCH_DIR=/usr/share/upgrade/scripts
-RESULT_FILE=/upgrade_result
+RESULT_FILE=/opt/data/recovery/rw_result
 RUN=/bin/sh
 
-# Change to normal mode from next booting
-rm /system-update
-rm /usr/lib/udev/rules.d/99-sdb-switch.rules
-
 # Execute update scripts
 if [ ! -d ${PATCH_DIR} ]
 then