Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions scripts/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#特殊固件识别及标记
[ -f "/etc/storage/started_script.sh" ] && { #老毛子固件
systype=Padavan
systype=Padavan
initdir='/etc/storage/started_script.sh'
}
[ -d "/jffs" ] && { #华硕固件
Expand Down Expand Up @@ -83,8 +83,8 @@ done
setconfig versionsh_l $version
#生成用于执行启动服务的变量文件
[ ! -f "$CRASHDIR"/configs/command.env ] && {
echo 'TMPDIR=/tmp/ShellCrash' > "$CRASHDIR"/configs/command.env
echo "BINDIR=$CRASHDIR" >> "$CRASHDIR"/configs/command.env
echo 'TMPDIR=/tmp/ShellCrash' >"$CRASHDIR"/configs/command.env
echo "BINDIR=$CRASHDIR" >>"$CRASHDIR"/configs/command.env
}
if [ -n "$(grep 'crashcore=singbox' "$CFG_PATH")" ]; then
COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
Expand All @@ -102,7 +102,7 @@ grep -q 'firewall_mod' "$CRASHDIR/configs/ShellClash.cfg" 2>/dev/null || {
[ -n "$url" ] && setconfig update_url "$url"
[ -n "$release_type" ] && setconfig release_type "$release_type"
#设置语言
[ -n "$language" ] && echo "$language" > "$CRASHDIR/configs/i18n.cfg"
[ -n "$language" ] && echo "$language" >"$CRASHDIR/configs/i18n.cfg"
#设置环境变量
[ -w /opt/etc/profile ] && [ "$systype" = "Padavan" ] && profile=/opt/etc/profile
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
Expand Down Expand Up @@ -130,11 +130,11 @@ fi
#镜像化OpenWrt(snapshot)额外设置
if [ "$systype" = "mi_snapshot" -o "$systype" = "ng_snapshot" ]; then
chmod 755 "$CRASHDIR"/starts/snapshot_init.sh
if [ "$systype" = "mi_snapshot" ];then
if [ "$systype" = "mi_snapshot" ]; then
path="/data/shellcrash_init.sh"
sed -i "s#^CRASHDIR=.*#CRASHDIR=$CRASHDIR#" "$CRASHDIR"/starts/snapshot_init.sh
mv -f "$CRASHDIR"/starts/snapshot_init.sh "$path"
[ ! -f /data/auto_start.sh ] && echo '#用于自定义需要开机启动的功能或者命令,会在开机后自动运行' > /data/auto_start.sh
[ ! -f /data/auto_start.sh ] && echo '#用于自定义需要开机启动的功能或者命令,会在开机后自动运行' >/data/auto_start.sh
else
path="$CRASHDIR"/starts/snapshot_init.sh
fi
Expand Down Expand Up @@ -166,14 +166,14 @@ fi
setconfig firewall_mod 'nftables'
setconfig release_type 'master'
setconfig start_old 'OFF'
echo "$CRASHDIR/menu.sh" >> /etc/profile
cat > /usr/bin/crash <<'EOF'
echo "$CRASHDIR/menu.sh" >>/etc/profile
cat >/usr/bin/crash <<'EOF'
#!/bin/sh
CRASHDIR=${CRASHDIR:-/etc/ShellCrash}
export CRASHDIR
exec "$CRASHDIR/menu.sh" "$@"
EOF
chmod 755 /usr/bin/crash
chmod 755 /usr/bin/crash
}
setconfig systype $systype
#删除临时文件
Expand All @@ -189,7 +189,7 @@ for file in config.yaml.bak user.yaml proxies.yaml proxy-groups.yaml rules.yaml
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/yamls/"$file" 2>/dev/null
done
[ ! -L "$CRASHDIR"/config.yaml ] && mv -f "$CRASHDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml 2>/dev/null
for file in fake_ip_filter mac web_save servers_chs.list servers_en.list fake_ip_filter.list singbox_providers.list clash_providers.list; do
for file in fake_ip_filter mac servers_chs.list servers_en.list fake_ip_filter.list singbox_providers.list clash_providers.list; do
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/configs/"$file" 2>/dev/null
done
#迁移任务状态文件到新目录
Expand Down Expand Up @@ -239,7 +239,7 @@ sed -i "s/redir_mod=Tun模式/redir_mod=Tun/g" "$CFG_PATH"
sed -i "s/redir_mod=混合模式/redir_mod=Mix/g" "$CFG_PATH"
sed -i "s/redir_mod=纯净模式/firewall_area=4/g" "$CFG_PATH"
#变量统一使用ON/OFF
sed -i 's/=\(已启用\|已开启\)$/=ON/' "$CFG_PATH"
sed -i 's/=\(已启用\|已开启\)$/=ON/' "$CFG_PATH"
sed -i 's/=\(未启用\|未开启\)$/=OFF/' "$CFG_PATH"

printf '\033[32m脚本初始化完成,请输入\033[30;47m %s \033[0;33m命令开始使用!\033[0m\n' "$my_alias"
12 changes: 2 additions & 10 deletions scripts/libs/web_restore.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

#
put_save() { #推送面板选择
[ -z "$3" ] && request_type=PUT || request_type=$3
Expand All @@ -8,13 +7,6 @@ put_save() { #推送面板选择
wget -q --method="$request_type" --header="Authorization: Bearer $secret" --header="Content-Type:application/json" --body-data="$2" "$1" >/dev/null
fi
}
web_restore() { #还原面板选择
num=$(cat "$CRASHDIR"/configs/web_save | wc -l)
i=1
while [ "$i" -le "$num" ]; do
group_name=$(awk -F ',' 'NR=="'${i}'" {print $1}' "$CRASHDIR"/configs/web_save | sed 's/ /%20/g')
now_name=$(awk -F ',' 'NR=="'${i}'" {print $2}' "$CRASHDIR"/configs/web_save)
put_save "http://127.0.0.1:${db_port}/proxies/${group_name}" "{\"name\":\"${now_name}\"}"
i=$((i + 1))
done
web_restore() { #还原面板配置(恢复 cache.db 到 $TMPDIR;tmpfs 已有则跳过,避免覆盖更新的)
[ ! -f "$TMPDIR"/cache.db ] && [ -s "$BINDIR"/configs/cache.db ] && cp -f "$BINDIR"/configs/cache.db "$TMPDIR"/cache.db
}
60 changes: 21 additions & 39 deletions scripts/libs/web_save.sh
Original file line number Diff line number Diff line change
@@ -1,42 +1,24 @@
get_save() { #获取面板信息并内部处理所有异常
local response exit_code
if curl --version >/dev/null 2>&1; then
response=$(curl -sf -H "Authorization: Bearer ${secret}" -H "Content-Type:application/json" "$1" 2>&1)
exit_code=$?
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
echo "$response"
return 0
}
return 1
elif [ -n "$(wget --help 2>&1 | grep '\-\-method')" ]; then
response=$(wget -q --header="Authorization: Bearer ${secret}" --header="Content-Type:application/json" -O - "$1" 2>&1)
exit_code=$?
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
echo "$response"
return 0
}
return 1
fi
return 1
local response exit_code
if curl --version >/dev/null 2>&1; then
response=$(curl -sf -H "Authorization: Bearer ${secret}" -H "Content-Type:application/json" "$1" 2>&1)
exit_code=$?
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
echo "$response"
return 0
}
return 1
elif [ -n "$(wget --help 2>&1 | grep '\-\-method')" ]; then
response=$(wget -q --header="Authorization: Bearer ${secret}" --header="Content-Type:application/json" -O - "$1" 2>&1)
exit_code=$?
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
echo "$response"
return 0
}
return 1
fi
return 1
}

web_save() { #最小化保存面板节点选择
#使用get_save获取面板节点设置,失败自动退出
response=$(get_save "http://127.0.0.1:${db_port}/proxies") || return 1

echo "$response" | sed 's/{}//g' | sed 's/:{/\
/g' | grep -aE '"Selector"' >"$TMPDIR"/web_proxies

>"$TMPDIR"/web_save
[ -s "$TMPDIR"/web_proxies ] && while read line; do
def=$(echo "$line" | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
now=$(echo "$line" | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
[ "$def" != "$now" ] && {
name=$(echo "$line" | grep -oE '"name".*",' | awk -F "[\"]" '{print $4}')
echo "${name},${now}" >>"$TMPDIR"/web_save
}
done <"$TMPDIR"/web_proxies
rm -f "$TMPDIR"/web_proxies
. "$CRASHDIR"/libs/compare.sh && compare "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
[ "$?" = 0 ] && rm -f "$TMPDIR"/web_save || mv -f "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
web_save() { #保存面板配置(备份 cache.db 到 $BINDIR/configs;小内存模式跳过)
[ "$BINDIR" != "$TMPDIR" ] && [ -s "$TMPDIR"/cache.db ] && cp -f "$TMPDIR"/cache.db "$BINDIR"/configs/cache.db
}
76 changes: 40 additions & 36 deletions scripts/menus/task_cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
# Copyright (C) Juewuy

#加载全局变量
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
[ -z "$CRASHDIR" ] && CRASHDIR=$(
cd $(dirname $0)
cd ..
pwd
)
. "$CRASHDIR"/libs/get_config.sh
#加载工具
. "$CRASHDIR"/libs/check_cmd.sh
Expand All @@ -14,59 +18,59 @@

load_lang task_cmd

task_logger(){
task_logger() {
[ "$task_push" = 1 ] && push= || push=off
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
[ "$3" = 'off' ] && push=off
echo "$1" |grep -qE "($TASK_CMD_EVERY|$TASK_CMD_HOURLY)([1-9]|[1-9][0-9])$TASK_CMD_MIN" && {
echo "$1" | grep -qE "($TASK_CMD_EVERY|$TASK_CMD_HOURLY)([1-9]|[1-9][0-9])$TASK_CMD_MIN" && {
push=off
cover=on
}
logger "$1" 0 "$push" "$cover"
}

#任务命令
check_update(){ #检查更新工具
check_update() { #检查更新工具
get_bin "$TMPDIR"/crashversion "$1" echooff
[ "$?" = "0" ] && . "$TMPDIR"/crashversion 2>/dev/null
rm -rf "$TMPDIR"/crashversion
}
update_core(){ #自动更新内核
update_core() { #自动更新内核
#检查版本
check_update bin/version
crash_v_new=$(eval echo \$${crashcore}_v)
if [ -z "$crash_v_new" -o "$crash_v_new" = "$core_v" ];then
if [ -z "$crash_v_new" -o "$crash_v_new" = "$core_v" ]; then
task_logger "$TASK_CMD_CORE_SKIP"
return 0
else
. "$CRASHDIR"/libs/core_tools.sh && core_webget #调用下载工具
case "$?" in
0)
task_logger "$TASK_CMD_CORE_DONE"
"$CRASHDIR"/start.sh start
return 0
;;
1)
task_logger "$TASK_CMD_CORE_DL_FAIL"
return 1
;;
*)
task_logger "$TASK_CMD_CORE_VERIFY_FAIL"
"$CRASHDIR"/start.sh start
return 1
;;
0)
task_logger "$TASK_CMD_CORE_DONE"
"$CRASHDIR"/start.sh start
return 0
;;
1)
task_logger "$TASK_CMD_CORE_DL_FAIL"
return 1
;;
*)
task_logger "$TASK_CMD_CORE_VERIFY_FAIL"
"$CRASHDIR"/start.sh start
return 1
;;
esac
fi
}
update_scripts(){ #自动更新脚本
update_scripts() { #自动更新脚本
#检查版本
check_update version
if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ];then
if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ]; then
task_logger "$TASK_CMD_SCRIPT_SKIP"
return 0
else
get_bin "$TMPDIR"/ShellCrash.tar.gz "ShellCrash.tar.gz"
if [ "$?" != "0" ];then
if [ "$?" != "0" ]; then
rm -rf "$TMPDIR"/ShellCrash.tar.gz
task_logger "$TASK_CMD_CORE_DL_FAIL"
return 1
Expand All @@ -75,7 +79,7 @@ update_scripts(){ #自动更新脚本
"$CRASHDIR"/start.sh stop
#解压
tar -zxf "$TMPDIR"/ShellCrash.tar.gz ${tar_para} -C "$CRASHDIR"/
if [ $? -ne 0 ];then
if [ $? -ne 0 ]; then
rm -rf "$TMPDIR"/ShellCrash.tar.gz
task_logger "$TASK_CMD_SCRIPT_UNZIP_FAIL"
"$CRASHDIR"/start.sh start
Expand All @@ -88,19 +92,19 @@ update_scripts(){ #自动更新脚本
fi
fi
}
update_mmdb(){ #自动更新数据库
getgeo(){
update_mmdb() { #自动更新数据库
getgeo() {
#检查版本
check_update bin/version
geo_v="$(echo $2 | awk -F "." '{print $1}')_v" #获取版本号类型比如Country_v
geo_v_new=$GeoIP_v
geo_v_now=$(eval echo \$$geo_v)
if [ -z "$geo_v_new" -o "$geo_v_new" = "$geo_v_now" ];then
if [ -z "$geo_v_new" -o "$geo_v_new" = "$geo_v_now" ]; then
task_logger "$TASK_CMD_DB_SKIP_PREFIX$2$TASK_CMD_DB_SKIP_SUFFIX"
else
#更新文件
get_bin "$TMPDIR"/$1 "bin/geodata/$2"
if [ "$?" != "0" ];then
if [ "$?" != "0" ]; then
task_logger "$TASK_CMD_DB_DL_FAIL_PREFIX$2$TASK_CMD_DB_DL_FAIL_SUFFIX"
rm -rf "$TMPDIR"/$1
else
Expand All @@ -118,24 +122,24 @@ update_mmdb(){ #自动更新数据库
[ -n "${geosite_cn_v}" -a -s "$CRASHDIR"/geosite.db ] && getgeo geosite.db geosite_cn.db
return 0
}
reset_firewall(){ #重设透明路由防火墙
reset_firewall() { #重设透明路由防火墙
"$CRASHDIR"/start.sh stop_firewall
"$CRASHDIR"/start.sh afstart
}
ntp(){
ntp() {
ckcmd ntpd && ntpd -n -q -p 203.107.6.88 >/dev/null 2>&1 || exit 0
}
web_save_auto(){
web_save_auto() {
. "$CRASHDIR"/libs/web_save.sh && web_save
}
update_config() { #更新订阅并重启
. "$CRASHDIR"/starts/core_config.sh && get_core_config && "$CRASHDIR"/start.sh start
}
hotupdate() { #热更新订阅
. "$CRASHDIR"/starts/core_config.sh && get_core_config &&
. "$CRASHDIR"/starts/check_core.sh && check_core &&
. "$CRASHDIR"/starts/"$target"_modify.sh && modify_"$format" && rm -rf "$TMPDIR"/CrashCore &&
. "$CRASHDIR"/libs/web_restore.sh && put_save "http://127.0.0.1:$db_port/configs" "{\"path\":\"$CRASHDIR/config.$format\"}"
. "$CRASHDIR"/starts/check_core.sh && check_core &&
. "$CRASHDIR"/starts/"$target"_modify.sh && modify_"$format" && rm -rf "$TMPDIR"/CrashCore &&
. "$CRASHDIR"/libs/web_restore.sh && put_save "http://127.0.0.1:$db_port/configs" "{\"path\":\"$CRASHDIR/config.$format\"}"
exit $?
}

Expand All @@ -146,8 +150,8 @@ case "$1" in
#task_logger "任务$task_name 开始执行"
eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL"
task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res"
;;
;;
*)
"$1"
;;
;;
esac
Loading