Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1c2fea0533 | |||
| 07527fa8a7 | |||
| 9dfb6b410f | |||
| 142340739a | |||
| e4a2410725 | |||
| db953963cd | |||
| 3569850f7a | |||
| 9d8012ccc8 | |||
| 29e1ea8c4c | |||
| 62dadf7eba | |||
| edbaa3160d |
@@ -20,7 +20,7 @@ https://podkop.net/
|
|||||||
|
|
||||||
Вкратце, достаточно одного скрипта для установки и обновления:
|
Вкратце, достаточно одного скрипта для установки и обновления:
|
||||||
```
|
```
|
||||||
sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/main/install.sh)
|
sh <(wget -O - https://git.ownsrv.ru/yanistyle/podkop/raw/branch/main/install.sh))
|
||||||
```
|
```
|
||||||
|
|
||||||
# ToDo
|
# ToDo
|
||||||
|
|||||||
206
install.sh
206
install.sh
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
REPO="https://api.github.com/repos/itdoginfo/podkop/releases/latest"
|
# --- Настройки ---
|
||||||
|
REPO_API="https://git.ownsrv.ru/api/v1/repos/yanistyle/podkop/releases"
|
||||||
DOWNLOAD_DIR="/tmp/podkop"
|
DOWNLOAD_DIR="/tmp/podkop"
|
||||||
COUNT=3
|
COUNT=3
|
||||||
|
|
||||||
@@ -11,9 +12,79 @@ msg() {
|
|||||||
printf "\033[32;1m%s\033[0m\n" "$1"
|
printf "\033[32;1m%s\033[0m\n" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- Проверка и установка зависимостей ---
|
||||||
|
install_dependencies() {
|
||||||
|
deps="curl jq wget"
|
||||||
|
for dep in $deps; do
|
||||||
|
if ! command -v $dep >/dev/null 2>&1; then
|
||||||
|
msg "$dep не найден. Пытаемся установить..."
|
||||||
|
opkg update
|
||||||
|
opkg install $dep || { msg "Не удалось установить $dep"; exit 1; }
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Проверка системы ---
|
||||||
|
check_system() {
|
||||||
|
MODEL=$(cat /tmp/sysinfo/model 2>/dev/null || echo "Unknown")
|
||||||
|
msg "Router model: $MODEL"
|
||||||
|
|
||||||
|
openwrt_version=$(cat /etc/openwrt_release 2>/dev/null | grep DISTRIB_RELEASE | cut -d"'" -f2 | cut -d'.' -f1)
|
||||||
|
if [ "$openwrt_version" = "23" ]; then
|
||||||
|
msg "OpenWrt 23.05 не поддерживается начиная с podkop 0.5.0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
AVAILABLE_SPACE=$(df /overlay | awk 'NR==2 {print $4}')
|
||||||
|
REQUIRED_SPACE=15360
|
||||||
|
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
|
||||||
|
msg "Error: Insufficient space in flash"
|
||||||
|
msg "Available: $((AVAILABLE_SPACE/1024))MB, Required: $((REQUIRED_SPACE/1024))MB"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! nslookup google.com >/dev/null 2>&1; then
|
||||||
|
msg "DNS not working"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if opkg list-installed | grep -q https-dns-proxy; then
|
||||||
|
msg "Сonflicting package detected: https-dns-proxy. Remove?"
|
||||||
|
while true; do
|
||||||
|
read -r -p '' DNSPROXY
|
||||||
|
case $DNSPROXY in
|
||||||
|
yes|y|Y)
|
||||||
|
opkg remove --force-depends luci-app-https-dns-proxy https-dns-proxy luci-i18n-https-dns-proxy*
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg "Exit"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Проверка и обновление sing-box ---
|
||||||
|
sing_box() {
|
||||||
|
if ! opkg list-installed | grep -q "^sing-box"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
||||||
|
required_version="1.12.4"
|
||||||
|
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
||||||
|
msg "sing-box version $sing_box_version is older than required $required_version"
|
||||||
|
msg "Removing old version..."
|
||||||
|
opkg remove sing-box
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Основная логика ---
|
||||||
main() {
|
main() {
|
||||||
check_system
|
check_system
|
||||||
sing_box
|
sing_box
|
||||||
|
install_dependencies
|
||||||
|
|
||||||
/usr/sbin/ntpd -q -p 194.190.168.1 -p 216.239.35.0 -p 216.239.35.4 -p 162.159.200.1 -p 162.159.200.123
|
/usr/sbin/ntpd -q -p 194.190.168.1 -p 216.239.35.0 -p 216.239.35.4 -p 162.159.200.1 -p 162.159.200.123
|
||||||
|
|
||||||
@@ -25,45 +96,45 @@ main() {
|
|||||||
msg "Installed podkop..."
|
msg "Installed podkop..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if command -v curl &> /dev/null; then
|
# --- Получаем последний релиз из Gitea ---
|
||||||
check_response=$(curl -s "https://api.github.com/repos/itdoginfo/podkop/releases/latest")
|
msg "Fetching latest release info from Gitea..."
|
||||||
|
LATEST_TAG=$(curl -s "$REPO_API" | jq -r '.[0].tag_name')
|
||||||
if echo "$check_response" | grep -q 'API rate limit '; then
|
if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ]; then
|
||||||
msg "You've reached rate limit from GitHub. Repeat in five minutes."
|
msg "Не удалось получить последний релиз"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
msg "Последний релиз: $LATEST_TAG"
|
||||||
|
|
||||||
|
# --- Получаем список всех assets ---
|
||||||
|
ASSETS=$(curl -s "$REPO_API" | jq -r '.[0].assets[].name')
|
||||||
|
|
||||||
download_success=0
|
download_success=0
|
||||||
while read -r url; do
|
for filename in $ASSETS; do
|
||||||
filename=$(basename "$url")
|
|
||||||
filepath="$DOWNLOAD_DIR/$filename"
|
filepath="$DOWNLOAD_DIR/$filename"
|
||||||
|
|
||||||
attempt=0
|
attempt=0
|
||||||
while [ $attempt -lt $COUNT ]; do
|
while [ $attempt -lt $COUNT ]; do
|
||||||
msg "Download $filename (count $((attempt+1)))..."
|
msg "Download $filename (attempt $((attempt+1)))..."
|
||||||
if wget -q -O "$filepath" "$url"; then
|
wget -q -O "$filepath" "https://git.ownsrv.ru/yanistyle/podkop/releases/download/$LATEST_TAG/$filename"
|
||||||
if [ -s "$filepath" ]; then
|
if [ -s "$filepath" ]; then
|
||||||
msg "$filename successfully downloaded"
|
msg "$filename successfully downloaded"
|
||||||
download_success=1
|
download_success=1
|
||||||
break
|
break
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
msg "Download error $filename. Retry..."
|
msg "Download error $filename. Retry..."
|
||||||
rm -f "$filepath"
|
rm -f "$filepath"
|
||||||
attempt=$((attempt+1))
|
attempt=$((attempt+1))
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $attempt -eq $COUNT ]; then
|
if [ $attempt -eq $COUNT ]; then
|
||||||
msg "Failed to download $filename after $COUNT attempts"
|
msg "Failed to download $filename after $COUNT attempts"
|
||||||
fi
|
fi
|
||||||
done < <(wget -qO- "$REPO" | grep -o 'https://[^"[:space:]]*\.ipk')
|
done
|
||||||
|
|
||||||
if [ $download_success -eq 0 ]; then
|
if [ $download_success -eq 0 ]; then
|
||||||
msg "No packages were downloaded successfully"
|
msg "No packages were downloaded successfully"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# --- Установка пакетов ---
|
||||||
for pkg in podkop luci-app-podkop; do
|
for pkg in podkop luci-app-podkop; do
|
||||||
file=$(ls "$DOWNLOAD_DIR" | grep "^$pkg" | head -n 1)
|
file=$(ls "$DOWNLOAD_DIR" | grep "^$pkg" | head -n 1)
|
||||||
if [ -n "$file" ]; then
|
if [ -n "$file" ]; then
|
||||||
@@ -76,25 +147,25 @@ main() {
|
|||||||
ru=$(ls "$DOWNLOAD_DIR" | grep "luci-i18n-podkop-ru" | head -n 1)
|
ru=$(ls "$DOWNLOAD_DIR" | grep "luci-i18n-podkop-ru" | head -n 1)
|
||||||
if [ -n "$ru" ]; then
|
if [ -n "$ru" ]; then
|
||||||
if opkg list-installed | grep -q luci-i18n-podkop-ru; then
|
if opkg list-installed | grep -q luci-i18n-podkop-ru; then
|
||||||
msg "Upgraded ru translation..."
|
msg "Upgraded ru translation..."
|
||||||
opkg remove luci-i18n-podkop*
|
opkg remove luci-i18n-podkop*
|
||||||
opkg install "$DOWNLOAD_DIR/$ru"
|
opkg install "$DOWNLOAD_DIR/$ru"
|
||||||
else
|
else
|
||||||
msg "Русский язык интерфейса ставим? y/n (Need a Russian translation?)"
|
msg "Русский язык интерфейса ставим? y/n"
|
||||||
while true; do
|
while true; do
|
||||||
read -r -p '' RUS
|
read -r -p '' RUS
|
||||||
case $RUS in
|
case $RUS in
|
||||||
y)
|
y)
|
||||||
opkg remove luci-i18n-podkop*
|
opkg remove luci-i18n-podkop*
|
||||||
opkg install "$DOWNLOAD_DIR/$ru"
|
opkg install "$DOWNLOAD_DIR/$ru"
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
n)
|
n)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Введите y или n"
|
echo "Введите y или n"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@@ -103,69 +174,4 @@ main() {
|
|||||||
find "$DOWNLOAD_DIR" -type f -name '*podkop*' -exec rm {} \;
|
find "$DOWNLOAD_DIR" -type f -name '*podkop*' -exec rm {} \;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_system() {
|
|
||||||
# Get router model
|
|
||||||
MODEL=$(cat /tmp/sysinfo/model)
|
|
||||||
msg "Router model: $MODEL"
|
|
||||||
|
|
||||||
# Check OpenWrt version
|
|
||||||
openwrt_version=$(cat /etc/openwrt_release | grep DISTRIB_RELEASE | cut -d"'" -f2 | cut -d'.' -f1)
|
|
||||||
if [ "$openwrt_version" = "23" ]; then
|
|
||||||
msg "OpenWrt 23.05 не поддерживается начиная с podkop 0.5.0"
|
|
||||||
msg "Для OpenWrt 23.05 используйте podkop версии 0.4.11 или устанавливайте зависимости и podkop вручную"
|
|
||||||
msg "Подробности: https://podkop.net/docs/install/#%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%bd%d0%b0-2305"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check available space
|
|
||||||
AVAILABLE_SPACE=$(df /overlay | awk 'NR==2 {print $4}')
|
|
||||||
REQUIRED_SPACE=15360 # 15MB in KB
|
|
||||||
|
|
||||||
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
|
|
||||||
msg "Error: Insufficient space in flash"
|
|
||||||
msg "Available: $((AVAILABLE_SPACE/1024))MB"
|
|
||||||
msg "Required: $((REQUIRED_SPACE/1024))MB"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! nslookup google.com >/dev/null 2>&1; then
|
|
||||||
msg "DNS not working"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if opkg list-installed | grep -q https-dns-proxy; then
|
|
||||||
msg "Сonflicting package detected: https-dns-proxy. Remove?"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
read -r -p '' DNSPROXY
|
|
||||||
case $DNSPROXY in
|
|
||||||
|
|
||||||
yes|y|Y|yes)
|
|
||||||
opkg remove --force-depends luci-app-https-dns-proxy https-dns-proxy luci-i18n-https-dns-proxy*
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
msg "Exit"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
sing_box() {
|
|
||||||
if ! opkg list-installed | grep -q "^sing-box"; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
|
||||||
required_version="1.12.4"
|
|
||||||
|
|
||||||
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
|
||||||
msg "sing-box version $sing_box_version is older than required $required_version"
|
|
||||||
msg "Removing old version..."
|
|
||||||
opkg remove sing-box
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
main
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ SB_MAIN_OUTBOUND_TAG="main-out"
|
|||||||
SB_REJECT_RULE_TAG="reject-rule-tag"
|
SB_REJECT_RULE_TAG="reject-rule-tag"
|
||||||
|
|
||||||
## Lists
|
## Lists
|
||||||
GITHUB_RAW_URL="https://raw.githubusercontent.com/itdoginfo/allow-domains/main"
|
GITHUB_RAW_URL="https://git.ownsrv.ru/yanistyle/allow-domains/src/branch/main"
|
||||||
SRS_MAIN_URL="https://github.com/itdoginfo/allow-domains/releases/latest/download"
|
SRS_MAIN_URL="https://git.ownsrv.ru/yanistyle/allow-domains/releases/latest"
|
||||||
DOMAINS_RU_INSIDE="${GITHUB_RAW_URL}/Russia/inside-dnsmasq-nfset.lst"
|
DOMAINS_RU_INSIDE="${GITHUB_RAW_URL}/Russia/inside-dnsmasq-nfset.lst"
|
||||||
DOMAINS_RU_OUTSIDE="${GITHUB_RAW_URL}/Russia/outside-dnsmasq-nfset.lst"
|
DOMAINS_RU_OUTSIDE="${GITHUB_RAW_URL}/Russia/outside-dnsmasq-nfset.lst"
|
||||||
DOMAINS_UA="${GITHUB_RAW_URL}/Ukraine/inside-dnsmasq-nfset.lst"
|
DOMAINS_UA="${GITHUB_RAW_URL}/Ukraine/inside-dnsmasq-nfset.lst"
|
||||||
|
|||||||
Reference in New Issue
Block a user