source /etc/tizen-platform.conf
+CERT_DB_NAME=.pkgmgr_cert.db
+CERT_BACKUP_DB_NAME=.pkgmgr_cert_backup.db
+CERT_BACKUP_DB_PATH=$TZ_SYS_DB/$CERT_BACKUP_DB_NAME
+CERT_DB_PATH=$TZ_SYS_DB/$CERT_DB_NAME
+CERT_TEMP_FILEPATH=/tmp
+
PARSER_DB_NAME=.pkgmgr_parser.db
PARSER_BACKUP_DB_NAME=.pkgmgr_parser_backup.db
PARSER_DB_PATH=$TZ_SYS_DB/$PARSER_DB_NAME
function backup_db(){
echo "#backup previous DB"
mv $PARSER_DB_PATH $PARSER_BACKUP_DB_PATH
+ mv $CERT_DB_PATH $CERT_BACKUP_DB_PATH
}
function create_restriction_db(){
local package=$1
cp -af $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/lib
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
}
function move_user_tpk_rw_files(){
local package=$1
- mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
- mkdir $DEFAULT_USER_APPS_RW/$package/shared
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
-
- mv $DEFAULT_PKG_APP_LOCATION/$package/cache $DEFAULT_USER_APPS_RW/$package/
- mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
- chmod g+s $DEFAULT_USER_APPS_RW/$package/data
- chmod 771 $DEFAULT_USER_APPS_RW/$package/data
- mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
- mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
-
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/cache
- chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
- chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
-
- chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
-
- #remove shared/cache
- echo "deleting $DEFAULT_PKG_APP_LOCATION/$package/shared/cache"
- rm -rf $DEFAULT_PKG_APP_LOCATION/$package/shared/cache
+
+ local target="$DEFAULT_USER_APPS_RW/$package"
+ local source="$OPT_USR_APPS/$package"
+
+ rm -rf $source/shared/cache
+ cp -Rf $source/cache/* $target/cache/
+ cp -Rf $source/data/* $target/data/
+ cp -Rf $source/shared/* $target/shared/
+ rm -rf $source
}
function copy_user_tpk_manifest(){
function move_user_tpk_files(){
echo "#move user TPK's files"
- echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type='tpk' COLLATE NOCASE;" |
+ echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_type COLLATE NOCASE IN ('tpk', 'rpm');" |
sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
while read package
do
echo "processing user tpk $package..."
move_user_tpk_ro_files $package
- move_user_tpk_rw_files $package
copy_user_tpk_manifest $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
local package=$1
cp -af --no-preserve=ownership $OPT_USR_APPS/$package $DEFAULT_PKG_APP_LOCATION/
chown -R $DEFAULT_RO_OWNER_GROUP $DEFAULT_PKG_APP_LOCATION/$package
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/bin
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::RO $DEFAULT_PKG_APP_LOCATION/$package/res
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_PKG_APP_LOCATION/$package/shared
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_PKG_APP_LOCATION/$package/tmp
}
function move_user_wgt_rw_files(){
local package=$1
- mkdir -m 751 $DEFAULT_USER_APPS_RW/$package
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
-
- mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/shared
- mkdir -m 751 $DEFAULT_USER_APPS_RW/$package/cache
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
+ local target="$DEFAULT_USER_APPS_RW/$package"
+ local source="$OPT_USR_APPS/$package"
- mv $DEFAULT_PKG_APP_LOCATION/$package/data $DEFAULT_USER_APPS_RW/$package/
- mv $DEFAULT_PKG_APP_LOCATION/$package/shared/data $DEFAULT_USER_APPS_RW/$package/shared/
- mv $DEFAULT_PKG_APP_LOCATION/$package/shared/trusted $DEFAULT_USER_APPS_RW/$package/shared/
- chmod 751 $DEFAULT_USER_APPS_RW/$package/shared/trusted
- chmod g+s $DEFAULT_USER_APPS_RW/$package/data
- chmod 771 $DEFAULT_USER_APPS_RW/$package/data
-
- chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package/shared
- chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/shared/data
-
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
- chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package::SharedRO $DEFAULT_USER_APPS_RW/$package/shared/data
+ rm -rf $source/shared/cache
+ cp -Rf $source/cache/* $target/cache/
+ cp -Rf $source/data/* $target/data/
+ cp -Rf $source/shared/* $target/shared/
+ rm -r $source
}
do
echo "processing user wgt $package..."
move_user_wgt_ro_files $package
- move_user_wgt_rw_files $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
-function remove_previous_files(){
- echo "#remove files from previous location"
- echo "SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE;" |
- sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
-
- while read package
- do
- rm -rf $OPT_USR_APPS/$package
- done < $DB_RESULT_FILE
- rm -f $DB_RESULT_FILE
-}
-
function initdb(){
echo "#pkg_initdb"
pkg_initdb --ro --partial-rw
while read package
do
echo "processing preload pkg $package..."
- cp -af $OPT_USR_APPS/$package $DEFAULT_USER_APPS_RW/
- chown -R $DEFAULT_RW_OWNER_GROUP $DEFAULT_USER_APPS_RW/$package
- chown -R $OWNER_SYSTEM_SHARE $DEFAULT_USER_APPS_RW/$package/data
- chmod g+s $DEFAULT_USER_APPS_RW/$package/data
- chmod 771 $DEFAULT_USER_APPS_RW/$package/data
- rm -rf $OPT_USR_APPS/$package
-
- rm -rf $DEFAULT_USER_APPS_RW/$package/shared/cache
- rm -rf $DEFAULT_USER_APPS_RW/$package/shared/data
-
- chsmack -r -t -a $DEFAULT_RO_SMACK_LABEL $DEFAULT_USER_APPS_RW/$package
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/cache
- chsmack -r -t -a $DEFAULT_RW_SMACK_LABEL$package $DEFAULT_USER_APPS_RW/$package/data
- if [ -d $DEFAULT_USER_APPS_RW/$package/shared/trusted ];
- then
- chsmack -r -t -a $TRUSTED_LABEL $DEFAULT_USER_APPS_RW/$package/shared/trusted
- fi
-
+ local source="$OPT_USR_APPS/$package"
+ local target="$DEFAULT_USER_APPS_RW/$package"
+ rm -rf $source/shared/cache
+ cp -Rf $source/cache/* $target/cache/
+ cp -Rf $source/data/* $target/data/
+ cp -Rf $source/shared $target/shared/
+
+ rm -rf $source
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
function remove_backup_db(){
rm $PARSER_BACKUP_DB_PATH
+ rm $CERT_BACKUP_DB_PATH
}
function init_user_tpk_preload_rw_packages() {
echo "#init tpk preload rw packages"
echo ".separator \" \"
- SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type='tpk';" |
+ SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='true' COLLATE NOCASE AND package_type COLLATE NOCASE IN ('tpk', 'rpm');" |
sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
while read package
do
echo "init tpk preload rw package $package..."
+ echo "SELECT cert_info FROM package_cert_index_info WHERE cert_id=(SELECT dist_root_cert FROM package_cert_info WHERE package='$package');" |
+ sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
tpk-backend -y $package --preload-rw
+ rm -f $CERT_TEMP_FILEPATH/$package.txt
+ migrate_cert_info $package
+ move_user_tpk_rw_files $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
do
echo "init wgt preload rw package $package..."
wgt-backend -y $package --preload-rw
+ move_user_wgt_rw_files $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
+function insert_cert_index_info() {
+ local cert_index=$1
+ if [ ! $cert_index ] || [ $cert_index -eq 0 ]; then
+ echo "given cert_index is null"
+ return
+ fi
+
+ local cert_value=`sqlite3 $CERT_BACKUP_DB_PATH "SELECT cert_info FROM package_cert_index_info WHERE cert_id=$cert_index"`
+ if [ ! $cert_value ]; then
+ echo "retrieved cert value with id [$cert_index] is null."
+ return
+ fi
+
+ sqlite3 $CERT_DB_PATH "INSERT OR REPLACE INTO package_cert_index_info(cert_info, cert_id, cert_ref_count)
+ VALUES('$cert_value',
+ (SELECT cert_id FROM package_cert_index_info WHERE cert_info='$cert_value'),
+ COALESCE(((SELECT cert_ref_count FROM package_cert_index_info WHERE cert_info='$cert_value')+1), 1))"
+}
+
+function insert_cert_info() {
+ local package=$1
+ local author_root_index=$2
+ local author_im_index=$3
+ local author_signer_index=$4
+ local dist_root_index=$5
+ local dist_im_index=$6
+ local dist_signer_index=$7
+ local dist2_root_index=$8
+ local dist2_im_index=$9
+ local dist2_signer_index=${10}
+
+ local dist_root_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_root_index')"`
+ local dist_im_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_im_index')"`
+ local dist_signer_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist_signer_index')"`
+
+ local dist2_root_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_root_index')"`
+ local dist2_im_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_im_index')"`
+ local dist2_signer_value=`sqlite3 $CERT_DB_PATH "ATTACH database '$CERT_BACKUP_DB_PATH' as backup;
+ SELECT cert_id FROM package_cert_index_info WHERE cert_info=
+ (SELECT cert_info FROM backup.package_cert_index_info WHERE cert_id='$dist2_signer_index')"`
+
+ #update dist, dist2 value of package_cert_info determined by given pkg
+ local is_update_needed=""
+ local query="UPDATE package_cert_info SET "
+ if [ "$dist_root_value" != "" ]; then
+ is_update_needed="true"
+ query=$query"dist_root_cert='$dist_root_value'"
+ fi
+
+ if [ "$dist_im_value" != "" ]; then
+ is_update_needed="true"
+ query=$query", dist_im_cert='$dist_im_value'"
+ fi
+
+ if [ "$dist_signer_value" != "" ]; then
+ is_update_needed="true"
+ query=$query", dist_signer_cert='$dist_signer_value'"
+ fi
+
+ if [ "$dist2_root_value" != "" ]; then
+ is_update_needed="true"
+ query=$query"dist2_root_cert='$dist2_root_value'"
+ fi
+
+ if [ "$dist2_im_value" != "" ]; then
+ is_update_needed="true"
+ query=$query", dist2_im_cert='$dist2_im_value'"
+ fi
+
+ if [ "$dist2_signer_value" != "" ]; then
+ is_update_needed="true"
+ query=$query", dist2_signer_cert='$dist2_signer_value'"
+ fi
+
+ if [ "$is_update_needed" != "true" ]; then
+ echo "no update needed"
+ return
+ fi
+
+ query=$query" WHERE package='$package'"
+ sqlite3 $CERT_DB_PATH "$query"
+}
+
+function migrate_cert_info() {
+ local package=$1
+
+ #get certificate value from old cert db and insert into new cert db
+ echo ".separator \" \"
+ SELECT author_root_cert, author_im_cert, author_signer_cert, dist_root_cert, dist_im_cert, dist_signer_cert, dist2_root_cert, dist2_im_cert, dist2_signer_cert
+ FROM package_cert_info WHERE package='$package';" |
+ sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
+ while read author_root_cert author_im_cert author_signer_cert dist_root_cert dist_im_cert dist_signer_cert dist2_root_cert dist2_im_cert dist2_signer_cert
+ do
+ insert_cert_index_info $author_root_cert
+ insert_cert_index_info $author_im_cert
+ insert_cert_index_info $author_signer_cert
+ insert_cert_index_info $dist_root_cert
+ insert_cert_index_info $dist_im_cert
+ insert_cert_index_info $dist_signer_cert
+ insert_cert_index_info $dist2_root_cert
+ insert_cert_index_info $dist2_im_cert
+ insert_cert_index_info $dist2_signer_cert
+
+ insert_cert_info $package $author_root_cert $author_im_cert $author_signer_cert $dist_root_cert $dist_im_cert $dist_signer_cert $dist2_root_cert $dist2_im_cert $dist2_signer_cert
+ done < $CERT_TEMP_FILEPATH/$package.txt
+ rm -f $CERT_TEMP_FILEPATH/$package.txt
+}
+
function init_user_tpk_packages() {
echo "#init user tpk packages"
echo ".separator \" \"
- SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND package_preload='false' COLLATE NOCASE AND package_type='tpk';" |
+ SELECT package FROM package_info WHERE package_readonly='false' COLLATE NOCASE AND
+ package_preload='false' COLLATE NOCASE AND package_type='tpk';" |
sqlite3 $PARSER_BACKUP_DB_PATH > $DB_RESULT_FILE
while read package
do
echo "init user tpk package $package..."
+
+ echo "SELECT cert_info FROM package_cert_index_info WHERE cert_id=
+ (SELECT dist_root_cert FROM package_cert_info WHERE package='$package');" |
+ sqlite3 $CERT_BACKUP_DB_PATH > $CERT_TEMP_FILEPATH/$package.txt
+
tpk-backend -y $package
+ rm -f $CERT_TEMP_FILEPATH/$package.txt
+
+ migrate_cert_info $package
+ move_user_tpk_rw_files $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
do
echo "init user wgt package $package..."
wgt-backend -y $package
+ move_user_wgt_rw_files $package
done < $DB_RESULT_FILE
rm -f $DB_RESULT_FILE
}
function migrate_external_info(){
echo "#migrate external storage info"
echo "ATTACH DATABASE '$PARSER_BACKUP_DB_PATH' AS backup;
- UPDATE package_info set installed_storage='installed_external' WHERE package IN (SELECT package FROM backup.package_info WHERE installed_storage='installed_external' COLLATE NOCASE);" |
+ UPDATE package_info set installed_storage='installed_external' WHERE package IN
+ (SELECT package FROM backup.package_info WHERE installed_storage='installed_external' COLLATE NOCASE);" |
sqlite3 $PARSER_DB_PATH
}
move_user_tpk_files
move_user_wgt_files
-remove_previous_files
initdb
init_user_tpk_packages