mirror of
https://github.com/Slava-Shchipunov/awg-openwrt.git
synced 2026-03-14 09:23:10 +00:00
Compare commits
1 Commits
master
...
tech/updat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
311ce2290b |
57
.github/workflows/build-module.yml
vendored
57
.github/workflows/build-module.yml
vendored
@@ -127,34 +127,35 @@ jobs:
|
||||
|
||||
- name: Setup SDK and feeds
|
||||
run: |
|
||||
# Find SDK directory
|
||||
SDK_DIR=$(find . -maxdepth 1 -name "openwrt-sdk-*" -type d | head -n1)
|
||||
|
||||
if [ -z "$SDK_DIR" ]; then
|
||||
echo "SDK directory not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get absolute paths
|
||||
[ -z "$SDK_DIR" ] && echo "SDK directory not found" && exit 1
|
||||
|
||||
WORKSPACE_DIR=$(pwd)
|
||||
|
||||
cd "$SDK_DIR"
|
||||
|
||||
# Update feeds to include LuCI
|
||||
./scripts/feeds update -a
|
||||
./scripts/feeds install -a
|
||||
|
||||
# Copy current repository packages directly to package directory
|
||||
|
||||
# Remove unstable feeds
|
||||
sed -i '/telephony/d' feeds.conf.default
|
||||
sed -i '/routing/d' feeds.conf.default
|
||||
|
||||
# Update only required feeds
|
||||
./scripts/feeds update base packages luci
|
||||
./scripts/feeds install -p base
|
||||
./scripts/feeds install -p packages
|
||||
./scripts/feeds install -p luci
|
||||
|
||||
# Copy packages
|
||||
cp -r "$WORKSPACE_DIR/kmod-amneziawg" package/
|
||||
cp -r "$WORKSPACE_DIR/amneziawg-tools" package/
|
||||
cp -r "$WORKSPACE_DIR/luci-proto-amneziawg" package/
|
||||
|
||||
# Configure packages to build
|
||||
echo "CONFIG_PACKAGE_kmod-amneziawg=m" > .config
|
||||
echo "CONFIG_PACKAGE_amneziawg-tools=y" >> .config
|
||||
echo "CONFIG_PACKAGE_luci-proto-amneziawg=y" >> .config
|
||||
echo "CONFIG_PACKAGE_luci-i18n-amneziawg-ru=y" >> .config
|
||||
|
||||
|
||||
# Config
|
||||
cat > .config <<EOF
|
||||
CONFIG_PACKAGE_kmod-amneziawg=m
|
||||
CONFIG_PACKAGE_amneziawg-tools=y
|
||||
CONFIG_PACKAGE_luci-proto-amneziawg=y
|
||||
CONFIG_PACKAGE_luci-i18n-amneziawg-ru=y
|
||||
EOF
|
||||
|
||||
make defconfig
|
||||
|
||||
- name: Build AmneziaWG packages
|
||||
@@ -181,7 +182,7 @@ jobs:
|
||||
make package/amneziawg-tools/compile V=s
|
||||
|
||||
echo "Build completed. Checking for built packages..."
|
||||
find bin/ -name "*.?pk" | grep -E "(amneziawg|luci-proto-amneziawg|luci-i18n-amneziawg)" | head -10
|
||||
find bin/ -name "*.ipk" | grep -E "(amneziawg|luci-proto-amneziawg|luci-i18n-amneziawg)" | head -10
|
||||
|
||||
- name: Prepare artifacts
|
||||
run: |
|
||||
@@ -192,10 +193,10 @@ jobs:
|
||||
postfix="v${{ matrix.build_env.tag }}_${{ matrix.build_env.pkgarch}}_${{ matrix.build_env.target}}_${{ matrix.build_env.subtarget}}"
|
||||
|
||||
# Copy built packages
|
||||
find "$SDK_DIR/bin/packages" -name "amneziawg-tools*.?pk" -exec sh -c 'file="$1"; postfix="$2"; ext="${file##*.}"; cp "$file" "awgrelease/amneziawg-tools_${postfix}.${ext}"' _ {} "${postfix}" \; || echo "amneziawg-tools package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-proto-amneziawg*.?pk" -exec sh -c 'file="$1"; postfix="$2"; ext="${file##*.}"; cp "$file" "awgrelease/luci-proto-amneziawg_${postfix}.${ext}"' _ {} "${postfix}" \; || echo "luci-proto-amneziawg package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-i18n-amneziawg-ru*.?pk" -exec sh -c 'file="$1"; postfix="$2"; ext="${file##*.}"; cp "$file" "awgrelease/luci-i18n-amneziawg-ru_${postfix}.${ext}"' _ {} "${postfix}" \; || echo "luci-i18n-amneziawg-ru package not found"
|
||||
find "$SDK_DIR/bin/targets" -name "kmod-amneziawg*.?pk" -exec sh -c 'file="$1"; postfix="$2"; ext="${file##*.}"; cp "$file" "awgrelease/kmod-amneziawg_${postfix}.${ext}"' _ {} "${postfix}" \; || echo "kmod-amneziawg package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "amneziawg-tools_*.ipk" -exec cp {} awgrelease/amneziawg-tools_${postfix}.ipk \; || echo "amneziawg-tools package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-proto-amneziawg_*.ipk" -exec cp {} awgrelease/luci-proto-amneziawg_${postfix}.ipk \; || echo "luci-proto-amneziawg package not found"
|
||||
find "$SDK_DIR/bin/packages" -name "luci-i18n-amneziawg-ru_*.ipk" -exec cp {} awgrelease/luci-i18n-amneziawg-ru_${postfix}.ipk \; || echo "luci-i18n-amneziawg-ru package not found"
|
||||
find "$SDK_DIR/bin/targets" -name "kmod-amneziawg_*.ipk" -exec cp {} awgrelease/kmod-amneziawg_${postfix}.ipk \; || echo "kmod-amneziawg package not found"
|
||||
|
||||
echo "Built packages:"
|
||||
ls -la awgrelease/
|
||||
@@ -203,5 +204,5 @@ jobs:
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: awgrelease/*.?pk
|
||||
files: awgrelease/*.ipk
|
||||
tag_name: v${{ matrix.build_env.tag }}
|
||||
|
||||
66
.github/workflows/run-release.yml
vendored
Normal file
66
.github/workflows/run-release.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
name: Sync OpenWRT Releases
|
||||
|
||||
on:
|
||||
# schedule:
|
||||
# - cron: '0 0 */3 * *' # Проверка новых релизов раз в три дня
|
||||
# workflow_dispatch: # Возможность вручную запустить Action
|
||||
|
||||
jobs:
|
||||
sync-releases:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_exists: ${{ steps.check_release.outputs.release_exists }}
|
||||
release_tag: ${{ steps.get_release.outputs.release_tag }}
|
||||
steps:
|
||||
- name: Checkout your repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get the latest release from OpenWRT
|
||||
id: get_release
|
||||
run: |
|
||||
curl -s https://api.github.com/repos/openwrt/openwrt/releases/latest > latest_release.json
|
||||
RELEASE_TAG=$(jq -r .tag_name latest_release.json)
|
||||
RELEASE_NAME=$(jq -r .name latest_release.json)
|
||||
echo "::set-output name=release_tag::$RELEASE_TAG"
|
||||
echo "::set-output name=release_name::$RELEASE_NAME"
|
||||
|
||||
- name: Check if release exists in your repo
|
||||
id: check_release
|
||||
run: |
|
||||
RELEASE_EXISTS=$(curl -s https://api.github.com/repos/Slava-Shchipunov/awg-openwrt/releases/tags/${{ steps.get_release.outputs.release_tag }} | jq -r .tag_name)
|
||||
if [ "$RELEASE_EXISTS" == "null" ]; then
|
||||
echo "::set-output name=release_exists::false"
|
||||
else
|
||||
echo "::set-output name=release_exists::true"
|
||||
fi
|
||||
|
||||
- name: Create release in your repo
|
||||
if: steps.check_release.outputs.release_exists == 'false'
|
||||
run: |
|
||||
ART="
|
||||
\`\`\`
|
||||
_______ ________ __
|
||||
| |.-----.-----.-----.| | | |.----.| |_
|
||||
| - || _ | -__| || | | || _|| _|
|
||||
|_______|| __|_____|__|__||________||__| |____|
|
||||
|__| A M N E Z I A W I R E G U A R D
|
||||
-----------------------------------------------------
|
||||
OpenWrt ${{ steps.get_release.outputs.release_tag }}
|
||||
-----------------------------------------------------
|
||||
\`\`\`"
|
||||
|
||||
curl -X POST https://api.github.com/repos/Slava-Shchipunov/awg-openwrt/releases \
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$(jq -n --arg tag "${{ steps.get_release.outputs.release_tag }}" \
|
||||
--arg name "Build amnezia wg for all devices with openwrt ${{ steps.get_release.outputs.release_tag }}" \
|
||||
--arg body "$ART" \
|
||||
'{ tag_name: $tag, name: $name, body: $body }')"
|
||||
|
||||
run-build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: sync-releases
|
||||
if: needs.sync-releases.outputs.release_exists == 'false'
|
||||
uses: Slava-Shchipunov/awg-openwrt/.github/workflows/build-module.yml@master
|
||||
with:
|
||||
tag_name: ${{ needs.sync-releases.outputs.release_tag }}
|
||||
18
README.md
18
README.md
@@ -23,16 +23,17 @@ sh <(wget -O - https://raw.githubusercontent.com/Slava-Shchipunov/awg-openwrt/re
|
||||
5) [23.05.4](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.4)
|
||||
6) [23.05.5](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.5)
|
||||
7) AWG-2.0 [23.05.6](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.6)
|
||||
8) [24.10.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.0) ([AWG-2.0 для 24.10.0](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.0) из форка, если кому-то понадобится)
|
||||
9) [24.10.1](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.1) ([AWG-2.0 для 24.10.1](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.1) из форка)
|
||||
10) [24.10.2](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.2) ([AWG-2.0 для 24.10.2](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.2) из форка)
|
||||
8) [24.10.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.0)
|
||||
9) [24.10.1](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.1)
|
||||
10) [24.10.2](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.2)
|
||||
11) AWG-2.0 [24.10.3](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.3)
|
||||
12) AWG-2.0 [24.10.4](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.4)
|
||||
13) AWG-2.0 [24.10.5](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.5)
|
||||
14) AWG-2.0 [25.12.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v25.12.0)
|
||||
|
||||
Также запускал сборку для версии [22.03.7](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v22.03.7), но там для двух платформ сборка завершилась ошибкой. Так как это достаточно старая версия OpenWRT, я не стал разбираться, в чем проблема.
|
||||
|
||||
В дальнейшем при выходе новых релизов OpenWRT будут автоматически создаваться релизы с пакетами AmneziaWG и запускаться сборка пакетов под все устройства, поддерживаемые новой версией. Github action для проверки появления нового релиза запускается автоматически раз в 3 дня, а также может быть запущен вручную.
|
||||
|
||||
## Выбор пакетов для своего устройства
|
||||
В соответствии с пунктом [Указываем переменные для сборки](https://github.com/itdoginfo/domain-routing-openwrt/wiki/Amnezia-WG-Build#%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D0%BC-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B4%D0%BB%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8)
|
||||
определить `target` и `subtarget` вашего устройства. Далее перейти на страницу релиза, соответствующего вашей версии OpenWRT, затем поиском по странице (Ctrl+F) найти 3 пакета, название которых оканчивается на `target_subtarget.ipk`, соответствующие вашему устройству. Для версии AWG 2.0 также доступен пакет русификации luci-i18n-amneziawg-ru
|
||||
@@ -90,16 +91,17 @@ At the moment I have collected packages for all devices for OpenWRT versions:
|
||||
5) [23.05.4](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.4)
|
||||
6) [23.05.5](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.5)
|
||||
7) AWG-2.0 [23.05.6](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.6)
|
||||
8) [24.10.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.0) ([AWG-2.0 for 24.10.0](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.0) from fork)
|
||||
9) [24.10.1](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.1) ([AWG-2.0 for 24.10.1](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.1) from fork)
|
||||
10) [24.10.2](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.2) ([AWG-2.0 for 24.10.2](https://github.com/yanjore/awg-openwrt/releases/tag/v24.10.2) from fork)
|
||||
8) [24.10.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.0)
|
||||
9) [24.10.1](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.1)
|
||||
10) [24.10.2](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.2)
|
||||
11) AWG-2.0 [24.10.3](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.3)
|
||||
12) AWG-2.0 [24.10.4](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.4)
|
||||
13) AWG-2.0 [24.10.5](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v24.10.5)
|
||||
14) AWG-2.0 [25.12.0](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v25.12.0)
|
||||
|
||||
I also ran the build for version [22.03.7](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v22.03.7), but the build ended with an error for two platforms. Since this is a fairly old version of OpenWRT, I did not bother to figure out what the problem was.
|
||||
|
||||
In the future, when new OpenWRT releases are released, releases with AmneziaWG packages will be automatically created and the package build will be launched for all devices supported by the new version. Github action for checking for a new release is launched automatically every 3 days, and can also be launched manually.
|
||||
|
||||
## Automatic package build for SNAPSHOT version
|
||||
A github action is configured in the repository, which runs every 4 hours and checks the [snapshots page](https://downloads.openwrt.org/snapshots/targets/) of the OpenWRT website. At the same time, if a snapshot with a newer kernel version is found for some platform, the package build for this platform is launched, and the new files replace the old ones. In order to save resources and speed up the build process, packages are built only for popular platforms, which are specified in the `SNAPSHOT_SUBTARGETS_TO_BUILD` array in the index.js file.
|
||||
|
||||
|
||||
@@ -2,127 +2,20 @@
|
||||
|
||||
#set -x
|
||||
|
||||
PKG_MANAGER=""
|
||||
PKG_EXT=""
|
||||
|
||||
detect_package_manager() {
|
||||
if command -v apk >/dev/null 2>&1; then
|
||||
PKG_MANAGER="apk"
|
||||
PKG_EXT="apk"
|
||||
elif command -v opkg >/dev/null 2>&1; then
|
||||
PKG_MANAGER="opkg"
|
||||
PKG_EXT="ipk"
|
||||
else
|
||||
printf "\033[32;1mNo supported package manager found (apk/opkg).\033[0m\n"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_update() {
|
||||
if [ "$PKG_MANAGER" = "apk" ]; then
|
||||
apk update
|
||||
else
|
||||
opkg update
|
||||
fi
|
||||
}
|
||||
|
||||
is_pkg_installed() {
|
||||
pkg_name="$1"
|
||||
if [ "$PKG_MANAGER" = "apk" ]; then
|
||||
apk info -e "$pkg_name" >/dev/null 2>&1
|
||||
else
|
||||
opkg list-installed 2>/dev/null | grep -q "^${pkg_name} "
|
||||
fi
|
||||
}
|
||||
|
||||
install_local_pkg() {
|
||||
pkg_file="$1"
|
||||
if [ "$PKG_MANAGER" = "apk" ]; then
|
||||
apk add --allow-untrusted "$pkg_file"
|
||||
else
|
||||
opkg install "$pkg_file"
|
||||
fi
|
||||
}
|
||||
|
||||
get_pkgarch() {
|
||||
PKGARCH_UBUS=$(ubus call system board 2>/dev/null | jsonfilter -e '@.release.arch' 2>/dev/null)
|
||||
if [ -n "$PKGARCH_UBUS" ]; then
|
||||
echo "$PKGARCH_UBUS"
|
||||
return
|
||||
fi
|
||||
|
||||
if command -v opkg >/dev/null 2>&1; then
|
||||
opkg print-architecture | awk 'BEGIN {max=0} {if ($3 > max) {max = $3; arch = $2}} END {print arch}'
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -f /etc/openwrt_release ]; then
|
||||
PKGARCH_RELEASE=$(grep "^DISTRIB_ARCH='" /etc/openwrt_release | cut -d"'" -f2)
|
||||
if [ -n "$PKGARCH_RELEASE" ]; then
|
||||
echo "$PKGARCH_RELEASE"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
if command -v apk >/dev/null 2>&1; then
|
||||
apk --print-arch
|
||||
return
|
||||
fi
|
||||
|
||||
uname -m
|
||||
}
|
||||
|
||||
download_package() {
|
||||
pkg_base_name="$1"
|
||||
pkg_postfix_base="$2"
|
||||
awg_dir="$3"
|
||||
base_url="$4"
|
||||
|
||||
preferred_file="${pkg_base_name}${pkg_postfix_base}.${PKG_EXT}"
|
||||
preferred_url="${base_url}${preferred_file}"
|
||||
if wget -q -O "$awg_dir/$preferred_file" "$preferred_url" && [ -s "$awg_dir/$preferred_file" ]; then
|
||||
echo "$preferred_file"
|
||||
return 0
|
||||
fi
|
||||
rm -f "$awg_dir/$preferred_file"
|
||||
|
||||
if [ "$PKG_EXT" = "apk" ]; then
|
||||
fallback_ext="ipk"
|
||||
else
|
||||
fallback_ext="apk"
|
||||
fi
|
||||
|
||||
fallback_file="${pkg_base_name}${pkg_postfix_base}.${fallback_ext}"
|
||||
fallback_url="${base_url}${fallback_file}"
|
||||
if wget -q -O "$awg_dir/$fallback_file" "$fallback_url" && [ -s "$awg_dir/$fallback_file" ]; then
|
||||
echo "$fallback_file"
|
||||
return 0
|
||||
fi
|
||||
rm -f "$awg_dir/$fallback_file"
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
#Репозиторий OpenWRT должен быть доступен для установки зависимостей пакета kmod-amneziawg
|
||||
check_repo() {
|
||||
printf "\033[32;1mChecking OpenWrt repo availability...\033[0m\n"
|
||||
if [ "$PKG_MANAGER" = "apk" ]; then
|
||||
pkg_update >/dev/null 2>&1 || \
|
||||
{ printf "\033[32;1mapk failed. Check internet or date. Command for force ntp sync: ntpd -p ptbtime1.ptb.de\033[0m\n"; exit 1; }
|
||||
else
|
||||
pkg_update | grep -q "Failed to download" && \
|
||||
printf "\033[32;1mopkg failed. Check internet or date. Command for force ntp sync: ntpd -p ptbtime1.ptb.de\033[0m\n" && exit 1
|
||||
fi
|
||||
opkg update | grep -q "Failed to download" && printf "\033[32;1mopkg failed. Check internet or date. Command for force ntp sync: ntpd -p ptbtime1.ptb.de\033[0m\n" && exit 1
|
||||
}
|
||||
|
||||
install_awg_packages() {
|
||||
# Получение pkgarch с наибольшим приоритетом
|
||||
PKGARCH=$(get_pkgarch)
|
||||
PKGARCH=$(opkg print-architecture | awk 'BEGIN {max=0} {if ($3 > max) {max = $3; arch = $2}} END {print arch}')
|
||||
|
||||
TARGET=$(ubus call system board | jsonfilter -e '@.release.target' | cut -d '/' -f 1)
|
||||
SUBTARGET=$(ubus call system board | jsonfilter -e '@.release.target' | cut -d '/' -f 2)
|
||||
VERSION=$(ubus call system board | jsonfilter -e '@.release.version')
|
||||
PKGPOSTFIX_BASE="_v${VERSION}_${PKGARCH}_${TARGET}_${SUBTARGET}"
|
||||
PKGPOSTFIX="_v${VERSION}_${PKGARCH}_${TARGET}_${SUBTARGET}.ipk"
|
||||
BASE_URL="https://github.com/Slava-Shchipunov/awg-openwrt/releases/download/"
|
||||
|
||||
# Определяем версию AWG протокола (2.0 для OpenWRT >= 23.05.6 и >= 24.10.3)
|
||||
@@ -130,7 +23,7 @@ install_awg_packages() {
|
||||
MAJOR_VERSION=$(echo "$VERSION" | cut -d '.' -f 1)
|
||||
MINOR_VERSION=$(echo "$VERSION" | cut -d '.' -f 2)
|
||||
PATCH_VERSION=$(echo "$VERSION" | cut -d '.' -f 3)
|
||||
|
||||
|
||||
if [ "$MAJOR_VERSION" -gt 24 ] || \
|
||||
[ "$MAJOR_VERSION" -eq 24 -a "$MINOR_VERSION" -gt 10 ] || \
|
||||
[ "$MAJOR_VERSION" -eq 24 -a "$MINOR_VERSION" -eq 10 -a "$PATCH_VERSION" -ge 3 ] || \
|
||||
@@ -145,19 +38,22 @@ install_awg_packages() {
|
||||
|
||||
AWG_DIR="/tmp/amneziawg"
|
||||
mkdir -p "$AWG_DIR"
|
||||
|
||||
if is_pkg_installed "kmod-amneziawg"; then
|
||||
|
||||
if opkg list-installed | grep -q kmod-amneziawg; then
|
||||
echo "kmod-amneziawg already installed"
|
||||
else
|
||||
KMOD_AMNEZIAWG_FILENAME=$(download_package "kmod-amneziawg" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
KMOD_AMNEZIAWG_FILENAME="kmod-amneziawg${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${KMOD_AMNEZIAWG_FILENAME}"
|
||||
wget -O "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "kmod-amneziawg file downloaded successfully"
|
||||
else
|
||||
echo "Error downloading kmod-amneziawg. Please, install kmod-amneziawg manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_local_pkg "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME"
|
||||
|
||||
opkg install "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "kmod-amneziawg installed successfully"
|
||||
@@ -167,10 +63,13 @@ install_awg_packages() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if is_pkg_installed "amneziawg-tools"; then
|
||||
if opkg list-installed | grep -q amneziawg-tools; then
|
||||
echo "amneziawg-tools already installed"
|
||||
else
|
||||
AMNEZIAWG_TOOLS_FILENAME=$(download_package "amneziawg-tools" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
AMNEZIAWG_TOOLS_FILENAME="amneziawg-tools${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${AMNEZIAWG_TOOLS_FILENAME}"
|
||||
wget -O "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools file downloaded successfully"
|
||||
else
|
||||
@@ -178,7 +77,7 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_local_pkg "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME"
|
||||
opkg install "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools installed successfully"
|
||||
@@ -187,12 +86,15 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Проверяем оба возможных названия пакета
|
||||
if is_pkg_installed "luci-proto-amneziawg" || is_pkg_installed "luci-app-amneziawg"; then
|
||||
if opkg list-installed | grep -q "luci-proto-amneziawg\|luci-app-amneziawg"; then
|
||||
echo "$LUCI_PACKAGE_NAME already installed"
|
||||
else
|
||||
LUCI_AMNEZIAWG_FILENAME=$(download_package "$LUCI_PACKAGE_NAME" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
LUCI_AMNEZIAWG_FILENAME="${LUCI_PACKAGE_NAME}${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${LUCI_AMNEZIAWG_FILENAME}"
|
||||
wget -O "$AWG_DIR/$LUCI_AMNEZIAWG_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$LUCI_PACKAGE_NAME file downloaded successfully"
|
||||
else
|
||||
@@ -200,7 +102,7 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_local_pkg "$AWG_DIR/$LUCI_AMNEZIAWG_FILENAME"
|
||||
opkg install "$AWG_DIR/$LUCI_AMNEZIAWG_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$LUCI_PACKAGE_NAME installed successfully"
|
||||
@@ -217,13 +119,16 @@ install_awg_packages() {
|
||||
INSTALL_RU_LANG=${INSTALL_RU_LANG:-n}
|
||||
|
||||
if [ "$INSTALL_RU_LANG" = "y" ] || [ "$INSTALL_RU_LANG" = "Y" ]; then
|
||||
if is_pkg_installed "luci-i18n-amneziawg-ru"; then
|
||||
if opkg list-installed | grep -q luci-i18n-amneziawg-ru; then
|
||||
echo "luci-i18n-amneziawg-ru already installed"
|
||||
else
|
||||
LUCI_I18N_AMNEZIAWG_RU_FILENAME=$(download_package "luci-i18n-amneziawg-ru" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
LUCI_I18N_AMNEZIAWG_RU_FILENAME="luci-i18n-amneziawg-ru${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${LUCI_I18N_AMNEZIAWG_RU_FILENAME}"
|
||||
wget -O "$AWG_DIR/$LUCI_I18N_AMNEZIAWG_RU_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-i18n-amneziawg-ru file downloaded successfully"
|
||||
install_local_pkg "$AWG_DIR/$LUCI_I18N_AMNEZIAWG_RU_FILENAME"
|
||||
opkg install "$AWG_DIR/$LUCI_I18N_AMNEZIAWG_RU_FILENAME"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-i18n-amneziawg-ru installed successfully"
|
||||
else
|
||||
@@ -277,7 +182,7 @@ configure_amneziawg_interface() {
|
||||
read -r -p "Enter H2 value (from [Interface]):"$'\n' AWG_H2
|
||||
read -r -p "Enter H3 value (from [Interface]):"$'\n' AWG_H3
|
||||
read -r -p "Enter H4 value (from [Interface]):"$'\n' AWG_H4
|
||||
|
||||
|
||||
# AWG 2.0 новые параметры
|
||||
if [ "$AWG_VERSION" = "2.0" ]; then
|
||||
read -r -p "Enter S3 value (from [Interface]) [optional, leave blank to skip]:"$'\n' AWG_S3
|
||||
@@ -288,7 +193,7 @@ configure_amneziawg_interface() {
|
||||
read -r -p "Enter I4 value (from [Interface]) [optional, leave blank to skip]:"$'\n' AWG_I4
|
||||
read -r -p "Enter I5 value (from [Interface]) [optional, leave blank to skip]:"$'\n' AWG_I5
|
||||
fi
|
||||
|
||||
|
||||
uci set network.${INTERFACE_NAME}=interface
|
||||
uci set network.${INTERFACE_NAME}.proto=$PROTO
|
||||
uci set network.${INTERFACE_NAME}.private_key=$AWG_PRIVATE_KEY_INT
|
||||
@@ -356,11 +261,8 @@ configure_amneziawg_interface() {
|
||||
uci set firewall.@forwarding[-1].family='ipv4'
|
||||
uci commit firewall
|
||||
fi
|
||||
|
||||
service network restart
|
||||
}
|
||||
|
||||
detect_package_manager
|
||||
check_repo
|
||||
|
||||
install_awg_packages
|
||||
@@ -373,3 +275,5 @@ if [ "$IS_SHOULD_CONFIGURE_AWG_INTERFACE" = "y" ] || [ "$IS_SHOULD_CONFIGURE_AWG
|
||||
else
|
||||
printf "\033[32;1mSkipping amneziawg interface configuration.\033[0m\n"
|
||||
fi
|
||||
|
||||
service network restart
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=amneziawg-tools
|
||||
PKG_VERSION:=1.0.20260223
|
||||
PKG_VERSION:=1.0.20250903
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
30
index.js
30
index.js
@@ -52,27 +52,19 @@ async function getSubtargets(target) {
|
||||
}
|
||||
|
||||
async function getDetails(target, subtarget) {
|
||||
// pkgarch from packages/index.json
|
||||
// for apk-based is required change (should work also for ipk-based)
|
||||
const indexUrl = `${url}${target}/${subtarget}/packages/index.json`;
|
||||
let pkgarch = '';
|
||||
try {
|
||||
const { data } = await axios.get(indexUrl, { responseType: 'json' });
|
||||
pkgarch = data.architecture || '';
|
||||
} catch (e) {
|
||||
// keep pkgarch empty
|
||||
}
|
||||
|
||||
// vermagic from kmods directory name (more reliable than parsing kernel filename)
|
||||
const kmodsUrl = `${url}${target}/${subtarget}/kmods/`;
|
||||
const $ = await fetchHTML(kmodsUrl);
|
||||
const packagesUrl = `${url}${target}/${subtarget}/packages/`;
|
||||
const $ = await fetchHTML(packagesUrl);
|
||||
let vermagic = '';
|
||||
let pkgarch = '';
|
||||
|
||||
$('table tr td.n a').each((_, el) => {
|
||||
const name = $(el).attr('href');
|
||||
if (name && name.endsWith('/')) {
|
||||
vermagic = name.slice(0, -1);
|
||||
return false; // break
|
||||
$('a').each((index, element) => {
|
||||
const name = $(element).attr('href');
|
||||
if (name && name.startsWith('kernel_')) {
|
||||
const vermagicMatch = name.match(/kernel_\d+\.\d+\.\d+(?:-\d+)?[-~]([a-f0-9]+)(?:-r\d+)?_([a-zA-Z0-9_-]+)\.ipk$/);
|
||||
if (vermagicMatch) {
|
||||
vermagic = vermagicMatch[1];
|
||||
pkgarch = vermagicMatch[2];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=kmod-amneziawg
|
||||
PKG_VERSION:=1.0.20260210
|
||||
PKG_VERSION:=1.0.20251104
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
@@ -66,9 +66,9 @@ function generateDescription(name, texts) {
|
||||
}
|
||||
|
||||
function buildSVGQRCode(data, code) {
|
||||
// pixel size 3 for mobile browser
|
||||
// pixel size larger than 4 clips right and bottom edges of complex configs
|
||||
const options = {
|
||||
pixelSize: 3,
|
||||
pixelSize: 4,
|
||||
whiteColor: 'white',
|
||||
blackColor: 'black'
|
||||
};
|
||||
@@ -934,7 +934,7 @@ return network.registerProtocol('amneziawg', {
|
||||
}, [
|
||||
E('div', {
|
||||
'class': 'qr-code',
|
||||
'style': 'text-align:center'
|
||||
'style': 'width:320px;flex:0 1 320px;text-align:center'
|
||||
}, [
|
||||
E('em', { 'class': 'spinning' }, [ _('Generating QR code…') ])
|
||||
]),
|
||||
|
||||
Reference in New Issue
Block a user