diff --git a/data/lang_install.sh b/data/lang_install.sh index 626a9fc..867d847 100644 --- a/data/lang_install.sh +++ b/data/lang_install.sh @@ -1,8 +1,19 @@ #!/bin/sh +INST_FLAG_FN=/tmp/lang_patch.log + DIR_PATCH=/etc/crontabs/patches DIR_BACKUP=$DIR_PATCH/lang_backup +TARGET1_DIR=/usr/share/xiaoqiang +MIRROR1_DIR=/tmp/_usr_share_xiaoqiang +SYNCOBJECT1=$MIRROR1_DIR.sync + +TARGET2_DIR=/usr/lib/lua/luci +MIRROR2_DIR=/tmp/_usr_lib_lua_luci +SYNCOBJECT2=$MIRROR2_DIR.sync + + if [ `find /tmp -maxdepth 1 -name 'base.*.lmo' | wc -l` -eq 0 ]; then return 1 fi @@ -23,28 +34,28 @@ fi if [ $CLEAN_INSTALL = 1 ]; then NEED_RESTORE_MNT=0 - if mount | grep -q ' on /usr/lib/lua/luci' ; then - umount -l /usr/lib/lua/luci + if mount | grep -q " on $TARGET1_DIR" ; then + umount -l $TARGET1_DIR NEED_RESTORE_MNT=1 fi - if [ -f /usr/lib/lua/luci/i18n/base.en.lmo ]; then - # INT firmware may contain a file "base.en.lmo" - echo "1" > $DIR_BACKUP/skip_base_en + if grep -q "option CHANNEL 'stable'" $TARGET1_DIR/xiaoqiang_version ; then + echo '1' > $DIR_BACKUP/fw_stable fi - cp -f /usr/lib/lua/luci/view/web/inc/sysinfo.htm $DIR_BACKUP/ - cp -f /usr/lib/lua/luci/i18n/base.*.lmo $DIR_BACKUP/ - [ $NEED_RESTORE_MNT = 1 ] && mount --bind /tmp/_usr_lib_lua_luci /usr/lib/lua/luci + [ $NEED_RESTORE_MNT = 1 ] && mount --bind $MIRROR1_DIR $TARGET1_DIR fi if [ $CLEAN_INSTALL = 1 ]; then NEED_RESTORE_MNT=0 - if mount | grep -q ' on /usr/share/xiaoqiang' ; then - umount -l /usr/share/xiaoqiang + if mount | grep -q " on $TARGET2_DIR" ; then + umount -l $TARGET2_DIR NEED_RESTORE_MNT=1 fi - if grep -q "option CHANNEL 'stable'" /usr/share/xiaoqiang/xiaoqiang_version ; then - echo '1' > $DIR_BACKUP/fw_stable + if [ -f $TARGET2_DIR/i18n/base.en.lmo ]; then + # INT firmware may contain a file "base.en.lmo" + echo "1" > $DIR_BACKUP/skip_base_en fi - [ $NEED_RESTORE_MNT = 1 ] && mount --bind /tmp/_usr_share_xiaoqiang /usr/share/xiaoqiang + cp -f $TARGET2_DIR/view/web/inc/sysinfo.htm $DIR_BACKUP/ + cp -f $TARGET2_DIR/i18n/base.*.lmo $DIR_BACKUP/ + [ $NEED_RESTORE_MNT = 1 ] && mount --bind $MIRROR2_DIR $TARGET2_DIR fi if [ -f $DIR_BACKUP/skip_base_en ]; then @@ -105,6 +116,7 @@ fi uci set luci.main.lang=en #uci commit luci -# run patch +# forced run patch +rm -f $INST_FLAG_FN $DIR_PATCH/lang_patch.sh diff --git a/data/lang_patch.sh b/data/lang_patch.sh index 9477b3c..f325f64 100644 --- a/data/lang_patch.sh +++ b/data/lang_patch.sh @@ -1,48 +1,64 @@ #!/bin/sh -[ -e "/tmp/lang_patch.log" ] && return 0 +INST_FLAG_FN=/tmp/lang_patch.log + +[ -e "$INST_FLAG_FN" ] && return 0 DIR_PATCH=/etc/crontabs/patches DIR_BACKUP=$DIR_PATCH/lang_backup -SYNC_OBJ=/tmp/_patch_sync + +TARGET1_DIR=/usr/share/xiaoqiang +MIRROR1_DIR=/tmp/_usr_share_xiaoqiang +SYNCOBJECT1=$MIRROR1_DIR.sync + +TARGET2_DIR=/usr/lib/lua/luci +MIRROR2_DIR=/tmp/_usr_lib_lua_luci +SYNCOBJECT2=$MIRROR2_DIR.sync + if [ `find $DIR_PATCH -maxdepth 1 -name 'base.*.lmo' | wc -l` -eq 0 ]; then return 0 fi -while true; do - STATE=`mkdir $SYNC_OBJ 2>&1` - if [[ "$STATE" != *"can't create"* ]]; then - break - fi +for i in $(seq 1 45); do + mkdir $SYNCOBJECT1 &> /dev/null && break sleep 1 done - -if ! mount | grep -q ' on /usr/lib/lua/luci' ; then - mkdir -p /tmp/_usr_lib_lua_luci - cp -rf /usr/lib/lua/luci/* /tmp/_usr_lib_lua_luci/ - mount --bind /tmp/_usr_lib_lua_luci /usr/lib/lua/luci +if ! mount | grep -q " on $TARGET1_DIR" ; then + mkdir -p $MIRROR1_DIR + cp -rf $TARGET1_DIR/* $MIRROR1_DIR/ + mount --bind $MIRROR1_DIR $TARGET1_DIR fi -if ! mount | grep -q ' on /usr/lib/lua/luci' ; then - rm -rf $SYNC_OBJ +if ! mount | grep -q " on $TARGET1_DIR" ; then + rm -rf $SYNCOBJECT1 return 1 # error fi -if [ ! -f /tmp/_usr_lib_lua_luci/i18n.lua ]; then - rm -rf $SYNC_OBJ +if [ ! -f $MIRROR1_DIR/xiaoqiang_version ]; then + rm -rf $SYNCOBJECT1 return 1 # error fi -if ! mount | grep -q ' on /usr/share/xiaoqiang' ; then - mkdir -p /tmp/_usr_share_xiaoqiang - cp -rf /usr/share/xiaoqiang/* /tmp/_usr_share_xiaoqiang/ - mount --bind /tmp/_usr_share_xiaoqiang /usr/share/xiaoqiang +# unlock change luci.main.lang +sed -i "s/option CHANNEL 'stable'/option CHANNEL 'release'/g" $TARGET1_DIR/xiaoqiang_version + +rm -rf $SYNCOBJECT1 + + +for i in $(seq 1 45); do + mkdir $SYNCOBJECT2 &> /dev/null && break + sleep 1 +done +if ! mount | grep -q " on $TARGET2_DIR" ; then + mkdir -p $MIRROR2_DIR + cp -rf $TARGET2_DIR/* $MIRROR2_DIR/ + mount --bind $MIRROR2_DIR $TARGET2_DIR fi -if ! mount | grep -q ' on /usr/share/xiaoqiang' ; then - rm -rf $SYNC_OBJ +if ! mount | grep -q " on $TARGET2_DIR" ; then + rm -rf $SYNCOBJECT2 return 1 # error fi -if [ ! -f /tmp/_usr_share_xiaoqiang/xiaoqiang_version ]; then - rm -rf $SYNC_OBJ +if [ ! -f $MIRROR2_DIR/i18n.lua ]; then + rm -rf $SYNCOBJECT2 return 1 # error fi @@ -51,11 +67,10 @@ cp -f $DIR_PATCH/base.*.lmo /usr/lib/lua/luci/i18n/ # unlock WEB lang menu sed -i 's/ and features\["system"\]\["i18n"\] == "1" //' /usr/lib/lua/luci/view/web/inc/sysinfo.htm -# unlock change luci.main.lang -sed -i "s/option CHANNEL 'stable'/option CHANNEL 'release'/g" /usr/share/xiaoqiang/xiaoqiang_version +rm -rf $SYNCOBJECT2 + -echo "lang patched" > /tmp/lang_patch.log -rm -rf $SYNC_OBJ +echo "lang patched" > $INST_FLAG_FN MAIN_LANG=$( uci -q get luci.main.lang ) [ "$MAIN_LANG" == "" ] && uci set luci.main.lang=en diff --git a/data/lang_uninstall.sh b/data/lang_uninstall.sh index cc5be9d..f6ccca2 100644 --- a/data/lang_uninstall.sh +++ b/data/lang_uninstall.sh @@ -1,8 +1,18 @@ #!/bin/sh +INST_FLAG_FN=/tmp/lang_patch.log + DIR_PATCH=/etc/crontabs/patches DIR_BACKUP=$DIR_PATCH/lang_backup +TARGET1_DIR=/usr/share/xiaoqiang +MIRROR1_DIR=/tmp/_usr_share_xiaoqiang +SYNCOBJECT1=$MIRROR1_DIR.sync + +TARGET2_DIR=/usr/lib/lua/luci +MIRROR2_DIR=/tmp/_usr_lib_lua_luci +SYNCOBJECT2=$MIRROR2_DIR.sync + if [ -d $DIR_BACKUP ]; then if [ -f $DIR_BACKUP/fw_stable ]; then sed -i "s/option CHANNEL 'release'/option CHANNEL 'stable'/g" /usr/share/xiaoqiang/xiaoqiang_version @@ -28,7 +38,9 @@ uci commit firewall rm -rf $DIR_BACKUP rm -f $DIR_PATCH/lang_patch.sh rm -f $DIR_PATCH/base.*.lmo -rm -f /tmp/lang_patch.log +rm -f $INST_FLAG_FN +rm -f $SYNCOBJECT1 +rm -f $SYNCOBJECT2 luci-reload rm -f /tmp/luci-indexcache diff --git a/install_lang.py b/install_lang.py index f16d658..9a8d738 100644 --- a/install_lang.py +++ b/install_lang.py @@ -228,4 +228,5 @@ gw.run_cmd(f"rm -f {fn_remote} ; rm -f {fn_remote_i} ; rm -f {fn_remote_u}") if full_install: gw.run_cmd(f"rm -f {fn_www_remote}") -print("Ready! The language files are installed.") +prefix = '' if action == 'install' else 'un' +print(f"Ready! The language files are {prefix}installed.")