#
# 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}
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
if [ ! $1 ]
then
- echo "usage: $0 [tizen-3.0-image(tar.gz)]"
+ echo "usage: $0 [tizen-image-update(tar.gz)]"
exit
fi
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 ]
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}
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
[Service]
Type=oneshot
-ExecStart=/system-update/update-init.sh
+ExecStart=/usr/share/upgrade/update-init.sh
[Service]
Type=simple
-ExecStart=/system-update/update.sh
+ExecStart=/usr/share/upgrade/update.sh
--- /dev/null
+#!/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
+}
# 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
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