122 lines
4.9 KiB
Bash
Executable File
122 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
#安装和更新软件包
|
||
UPDATE_PACKAGE() {
|
||
local PKG_NAME=$1
|
||
local PKG_REPO=$2
|
||
local PKG_BRANCH=$3
|
||
local PKG_SPECIAL=${4:-}
|
||
local PKG_LIST=("$PKG_NAME" $5) # 第5个参数为自定义名称列表
|
||
local REPO_NAME=${PKG_REPO#*/}
|
||
|
||
echo " "
|
||
|
||
# 删除本地可能存在的不同名称的软件包
|
||
for NAME in "${PKG_LIST[@]}"; do
|
||
# 查找匹配的目录
|
||
echo "Search directory: $NAME"
|
||
local FOUND_DIRS=$(find ../feeds/luci/ ../feeds/packages/ -maxdepth 3 -type d -iname "*$NAME*" 2>/dev/null)
|
||
|
||
# 删除找到的目录
|
||
if [ -n "$FOUND_DIRS" ]; then
|
||
while read -r DIR; do
|
||
rm -rf "$DIR"
|
||
echo "Delete directory: $DIR"
|
||
done <<< "$FOUND_DIRS"
|
||
else
|
||
echo "Not fonud directory: $NAME"
|
||
fi
|
||
done
|
||
|
||
# 克隆 GitHub 仓库
|
||
git clone --depth=1 --single-branch --branch $PKG_BRANCH "https://github.com/$PKG_REPO.git"
|
||
|
||
# 处理克隆的仓库
|
||
if [[ "$PKG_SPECIAL" == "pkg" ]]; then
|
||
find ./$REPO_NAME/*/ -maxdepth 3 -type d -iname "*$PKG_NAME*" -prune -exec cp -rf {} ./ \;
|
||
rm -rf ./$REPO_NAME/
|
||
elif [[ "$PKG_SPECIAL" == "name" ]]; then
|
||
mv -f $REPO_NAME $PKG_NAME
|
||
fi
|
||
}
|
||
|
||
# 调用示例
|
||
# UPDATE_PACKAGE "OpenAppFilter" "destan19/OpenAppFilter" "master" "" "custom_name1 custom_name2"
|
||
# UPDATE_PACKAGE "open-app-filter" "destan19/OpenAppFilter" "master" "" "luci-app-appfilter oaf" 这样会把原有的open-app-filter,luci-app-appfilter,oaf相关组件删除,不会出现coremark错误。
|
||
|
||
# UPDATE_PACKAGE "包名" "项目地址" "项目分支" "pkg/name,可选,pkg为从大杂烩中单独提取包名插件;name为重命名为包名"
|
||
UPDATE_PACKAGE "argon" "sbwml/luci-theme-argon" "openwrt-25.12"
|
||
UPDATE_PACKAGE "aurora" "eamonxg/luci-theme-aurora" "master"
|
||
UPDATE_PACKAGE "aurora-config" "eamonxg/luci-app-aurora-config" "master"
|
||
UPDATE_PACKAGE "kucat" "sirpdboy/luci-theme-kucat" "master"
|
||
UPDATE_PACKAGE "kucat-config" "sirpdboy/luci-app-kucat-config" "master"
|
||
|
||
UPDATE_PACKAGE "homeproxy" "VIKINGYFY/homeproxy" "main"
|
||
UPDATE_PACKAGE "momo" "nikkinikki-org/OpenWrt-momo" "main"
|
||
UPDATE_PACKAGE "nikki" "nikkinikki-org/OpenWrt-nikki" "main"
|
||
UPDATE_PACKAGE "openclash" "vernesong/OpenClash" "dev" "pkg"
|
||
UPDATE_PACKAGE "passwall" "Openwrt-Passwall/openwrt-passwall" "main" "pkg"
|
||
UPDATE_PACKAGE "passwall2" "Openwrt-Passwall/openwrt-passwall2" "main" "pkg"
|
||
|
||
UPDATE_PACKAGE "luci-app-tailscale" "asvow/luci-app-tailscale" "main"
|
||
|
||
UPDATE_PACKAGE "ddns-go" "sirpdboy/luci-app-ddns-go" "main"
|
||
UPDATE_PACKAGE "diskman" "lisaac/luci-app-diskman" "master"
|
||
UPDATE_PACKAGE "easytier" "EasyTier/luci-app-easytier" "main"
|
||
UPDATE_PACKAGE "fancontrol" "rockjake/luci-app-fancontrol" "main"
|
||
UPDATE_PACKAGE "gecoosac" "lwb1978/openwrt-gecoosac" "main"
|
||
UPDATE_PACKAGE "mosdns" "sbwml/luci-app-mosdns" "v5" "" "v2dat"
|
||
UPDATE_PACKAGE "netspeedtest" "sirpdboy/luci-app-netspeedtest" "master" "" "homebox speedtest"
|
||
UPDATE_PACKAGE "openlist2" "sbwml/luci-app-openlist2" "main"
|
||
UPDATE_PACKAGE "partexp" "sirpdboy/luci-app-partexp" "main"
|
||
UPDATE_PACKAGE "qbittorrent" "sbwml/luci-app-qbittorrent" "master" "" "qt6base qt6tools rblibtorrent"
|
||
UPDATE_PACKAGE "qmodem" "FUjr/QModem" "main"
|
||
UPDATE_PACKAGE "quickfile" "sbwml/luci-app-quickfile" "main"
|
||
UPDATE_PACKAGE "viking" "VIKINGYFY/packages" "main" "" "luci-app-timewol luci-app-wolplus"
|
||
UPDATE_PACKAGE "vnt" "lmq8267/luci-app-vnt" "main"
|
||
|
||
#更新软件包版本
|
||
UPDATE_VERSION() {
|
||
local PKG_NAME=$1
|
||
local PKG_MARK=${2:-false}
|
||
local PKG_FILES=$(find ./ ../feeds/packages/ -maxdepth 3 -type f -wholename "*/$PKG_NAME/Makefile")
|
||
|
||
if [ -z "$PKG_FILES" ]; then
|
||
echo "$PKG_NAME not found!"
|
||
return
|
||
fi
|
||
|
||
echo -e "\n$PKG_NAME version update has started!"
|
||
|
||
for PKG_FILE in $PKG_FILES; do
|
||
local PKG_REPO=$(grep -Po "PKG_SOURCE_URL:=https://.*github.com/\K[^/]+/[^/]+(?=.*)" $PKG_FILE)
|
||
local PKG_TAG=$(curl -sL "https://api.github.com/repos/$PKG_REPO/releases" | jq -r "map(select(.prerelease == $PKG_MARK)) | first | .tag_name")
|
||
|
||
local OLD_VER=$(grep -Po "PKG_VERSION:=\K.*" "$PKG_FILE")
|
||
local OLD_URL=$(grep -Po "PKG_SOURCE_URL:=\K.*" "$PKG_FILE")
|
||
local OLD_FILE=$(grep -Po "PKG_SOURCE:=\K.*" "$PKG_FILE")
|
||
local OLD_HASH=$(grep -Po "PKG_HASH:=\K.*" "$PKG_FILE")
|
||
|
||
local PKG_URL=$([[ "$OLD_URL" == *"releases"* ]] && echo "${OLD_URL%/}/$OLD_FILE" || echo "${OLD_URL%/}")
|
||
|
||
local NEW_VER=$(echo $PKG_TAG | sed -E 's/[^0-9]+/\./g; s/^\.|\.$//g')
|
||
local NEW_URL=$(echo $PKG_URL | sed "s/\$(PKG_VERSION)/$NEW_VER/g; s/\$(PKG_NAME)/$PKG_NAME/g")
|
||
local NEW_HASH=$(curl -sL "$NEW_URL" | sha256sum | cut -d ' ' -f 1)
|
||
|
||
echo "old version: $OLD_VER $OLD_HASH"
|
||
echo "new version: $NEW_VER $NEW_HASH"
|
||
|
||
if [[ "$NEW_VER" =~ ^[0-9].* ]] && dpkg --compare-versions "$OLD_VER" lt "$NEW_VER"; then
|
||
sed -i "s/PKG_VERSION:=.*/PKG_VERSION:=$NEW_VER/g" "$PKG_FILE"
|
||
sed -i "s/PKG_HASH:=.*/PKG_HASH:=$NEW_HASH/g" "$PKG_FILE"
|
||
echo "$PKG_FILE version has been updated!"
|
||
else
|
||
echo "$PKG_FILE version is already the latest!"
|
||
fi
|
||
done
|
||
}
|
||
|
||
#UPDATE_VERSION "软件包名" "测试版,true,可选,默认为否"
|
||
UPDATE_VERSION "sing-box"
|
||
#UPDATE_VERSION "tailscale"
|