You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
#!/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
 | 
						|
 | 
						|
if [ ! -d $DIR_PATCH ]; then
 | 
						|
	mkdir -p $DIR_PATCH
 | 
						|
	chown root $DIR_PATCH
 | 
						|
	chmod 0755 $DIR_PATCH
 | 
						|
fi
 | 
						|
 | 
						|
CLEAN_INSTALL=0
 | 
						|
if [ ! -d $DIR_BACKUP ]; then
 | 
						|
	CLEAN_INSTALL=1
 | 
						|
	mkdir -p $DIR_BACKUP
 | 
						|
	MAIN_LANG=`uci get luci.main.lang`
 | 
						|
	echo "$MAIN_LANG" > $DIR_BACKUP/main_lang
 | 
						|
fi
 | 
						|
 | 
						|
if [ $CLEAN_INSTALL = 1 ]; then
 | 
						|
	NEED_RESTORE_MNT=0
 | 
						|
	if mount | grep -q " on $TARGET1_DIR" ; then
 | 
						|
		umount -l $TARGET1_DIR
 | 
						|
		NEED_RESTORE_MNT=1
 | 
						|
	fi
 | 
						|
	if grep -q "option CHANNEL 'stable'" $TARGET1_DIR/xiaoqiang_version ; then
 | 
						|
		echo '1' > $DIR_BACKUP/fw_stable
 | 
						|
	fi
 | 
						|
	[ $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 $TARGET2_DIR" ; then
 | 
						|
		umount -l $TARGET2_DIR
 | 
						|
		NEED_RESTORE_MNT=1
 | 
						|
	fi
 | 
						|
	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
 | 
						|
	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
 | 
						|
	# INT firmware may contain a file "base.en.lmo"
 | 
						|
	rm -f /tmp/base.en.lmo
 | 
						|
fi
 | 
						|
mv -f /tmp/base.*.lmo $DIR_PATCH/
 | 
						|
mv -f /tmp/lang_patch.sh $DIR_PATCH/
 | 
						|
chmod +x $DIR_PATCH/lang_patch.sh
 | 
						|
 | 
						|
INSTALL_METHOD=2
 | 
						|
if [ ! -e "/usr/lib/os-release" ]; then
 | 
						|
	# older routers
 | 
						|
	INSTALL_METHOD=0
 | 
						|
fi
 | 
						|
 | 
						|
FILE_PATCHED=0
 | 
						|
 | 
						|
if [ $INSTALL_METHOD = 0 ]; then
 | 
						|
	FILE_PATCHED=1
 | 
						|
	FILE_FOR_EDIT=/etc/init.d/boot
 | 
						|
	NEW_CMD="\[ -f \/etc\/crontabs\/patches\/lang_patch.sh \] && sh \/etc\/crontabs\/patches\/lang_patch.sh"
 | 
						|
	HAVE_PATCH=$(grep '/lang_patch.sh' $FILE_FOR_EDIT)
 | 
						|
	if [ -z "$HAVE_PATCH" ]; then
 | 
						|
		FILE_PATCHED=0
 | 
						|
		UCI_CFG=$(grep 'apply_uci_config' $FILE_FOR_EDIT)
 | 
						|
		if [ -n "$UCI_CFG" ]; then
 | 
						|
			sed -i "/apply_uci_config$/i$NEW_CMD" $FILE_FOR_EDIT
 | 
						|
			FILE_PATCHED=2
 | 
						|
		fi
 | 
						|
		UCI_DEF=$(grep 'uci_apply_defaults' $FILE_FOR_EDIT)
 | 
						|
		if [ -n "$UCI_DEF" -a $FILE_PATCHED == 0 ]; then
 | 
						|
			sed -i "/uci_apply_defaults$/i$NEW_CMD" $FILE_FOR_EDIT
 | 
						|
			FILE_PATCHED=3
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ $INSTALL_METHOD = 1 ]; then
 | 
						|
	FILE_FOR_EDIT=/etc/crontabs/root
 | 
						|
	grep -v "/lang_patch.sh" $FILE_FOR_EDIT > $FILE_FOR_EDIT.new
 | 
						|
	echo "*/1 * * * * $DIR_PATCH/lang_patch.sh >/dev/null 2>&1" >> $FILE_FOR_EDIT.new
 | 
						|
	mv $FILE_FOR_EDIT.new $FILE_FOR_EDIT
 | 
						|
	/etc/init.d/cron restart
 | 
						|
	FILE_PATCHED=10
 | 
						|
fi
 | 
						|
 | 
						|
if [ $INSTALL_METHOD = 2 ]; then
 | 
						|
	uci set firewall.auto_lang_patch=include
 | 
						|
	uci set firewall.auto_lang_patch.type='script'
 | 
						|
	uci set firewall.auto_lang_patch.path="$DIR_PATCH/lang_patch.sh"
 | 
						|
	uci set firewall.auto_lang_patch.enabled='1'
 | 
						|
	uci commit firewall
 | 
						|
	FILE_PATCHED=20
 | 
						|
fi
 | 
						|
 | 
						|
# set main lang
 | 
						|
uci set luci.main.lang=en
 | 
						|
#uci commit luci
 | 
						|
 | 
						|
# forced run patch
 | 
						|
rm -f $INST_FLAG_FN
 | 
						|
$DIR_PATCH/lang_patch.sh
 | 
						|
 |