mirror of
https://github.com/Slava-Shchipunov/awg-openwrt.git
synced 2026-03-14 01:13:09 +00:00
Compare commits
13 Commits
tech/updat
...
fb008b93c8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb008b93c8 | ||
|
|
1607241233 | ||
|
|
09256b1cc5 | ||
|
|
2c4fe317b3 | ||
|
|
676c821362 | ||
|
|
aa17c7a25c | ||
|
|
46f0cba90b | ||
|
|
ad4c3e27c0 | ||
|
|
d64ea7b53e | ||
|
|
e075dcb43f | ||
|
|
449988b8e6 | ||
|
|
9591ffdebe | ||
|
|
3498354348 |
45
.github/workflows/build-module.yml
vendored
45
.github/workflows/build-module.yml
vendored
@@ -12,18 +12,19 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'OpenWRT version (e.g., 24.10.3)'
|
||||
description: 'OpenWRT version (e.g., 24.10.5)'
|
||||
required: true
|
||||
type: string
|
||||
targets:
|
||||
description: 'Targets (comma-separated, e.g., "stm32,ramips")'
|
||||
required: true
|
||||
description: 'Targets (comma-separated, optional)'
|
||||
required: false
|
||||
type: string
|
||||
subtargets:
|
||||
description: 'Subtargets (comma-separated, e.g., "stm32mp1,mt7621")'
|
||||
required: true
|
||||
description: 'Subtargets (comma-separated, optional)'
|
||||
required: false
|
||||
type: string
|
||||
|
||||
|
||||
jobs:
|
||||
generate-config:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -38,16 +39,22 @@ jobs:
|
||||
with:
|
||||
node-version: '20.16.0'
|
||||
|
||||
- name: Get OpenWRT version from tag
|
||||
id: get_version
|
||||
- name: Get OpenWRT version from inputs or tag
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
||||
echo "TARGETS=${{ inputs.targets }}" >> $GITHUB_ENV
|
||||
echo "SUBTARGETS=${{ inputs.subtargets }}" >> $GITHUB_ENV
|
||||
elif [ "${{ github.event_name }}" == "workflow_call" ]; then
|
||||
VERSION="${{ inputs.tag_name }}"
|
||||
echo "VERSION=${VERSION#v}" >> $GITHUB_ENV
|
||||
|
||||
if [ -n "${{ inputs.targets }}" ]; then
|
||||
echo "TARGETS=${{ inputs.targets }}" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
if [ -n "${{ inputs.subtargets }}" ]; then
|
||||
echo "SUBTARGETS=${{ inputs.subtargets }}" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
elif [ "${{ github.event_name }}" = "workflow_call" ]; then
|
||||
echo "VERSION=${{ inputs.tag_name }}" >> $GITHUB_ENV
|
||||
|
||||
else
|
||||
echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
|
||||
fi
|
||||
@@ -174,7 +181,7 @@ jobs:
|
||||
make package/amneziawg-tools/compile V=s
|
||||
|
||||
echo "Build completed. Checking for built packages..."
|
||||
find bin/ -name "*.ipk" | grep -E "(amneziawg|luci-proto-amneziawg|luci-i18n-amneziawg)" | head -10
|
||||
find bin/ -name "*.?pk" | grep -E "(amneziawg|luci-proto-amneziawg|luci-i18n-amneziawg)" | head -10
|
||||
|
||||
- name: Prepare artifacts
|
||||
run: |
|
||||
@@ -185,10 +192,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_*.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"
|
||||
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"
|
||||
|
||||
echo "Built packages:"
|
||||
ls -la awgrelease/
|
||||
@@ -196,5 +203,5 @@ jobs:
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: awgrelease/*.ipk
|
||||
files: awgrelease/*.?pk
|
||||
tag_name: v${{ matrix.build_env.tag }}
|
||||
|
||||
66
.github/workflows/run-release.yml
vendored
66
.github/workflows/run-release.yml
vendored
@@ -1,66 +0,0 @@
|
||||
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,17 +23,16 @@ 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)
|
||||
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)
|
||||
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) из форка)
|
||||
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
|
||||
@@ -91,17 +90,16 @@ 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)
|
||||
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)
|
||||
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)
|
||||
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,20 +2,127 @@
|
||||
|
||||
#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"
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
install_awg_packages() {
|
||||
# Получение pkgarch с наибольшим приоритетом
|
||||
PKGARCH=$(opkg print-architecture | awk 'BEGIN {max=0} {if ($3 > max) {max = $3; arch = $2}} END {print arch}')
|
||||
PKGARCH=$(get_pkgarch)
|
||||
|
||||
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="_v${VERSION}_${PKGARCH}_${TARGET}_${SUBTARGET}.ipk"
|
||||
PKGPOSTFIX_BASE="_v${VERSION}_${PKGARCH}_${TARGET}_${SUBTARGET}"
|
||||
BASE_URL="https://github.com/Slava-Shchipunov/awg-openwrt/releases/download/"
|
||||
|
||||
# Определяем версию AWG протокола (2.0 для OpenWRT >= 23.05.6 и >= 24.10.3)
|
||||
@@ -23,7 +130,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 ] || \
|
||||
@@ -38,22 +145,19 @@ install_awg_packages() {
|
||||
|
||||
AWG_DIR="/tmp/amneziawg"
|
||||
mkdir -p "$AWG_DIR"
|
||||
|
||||
if opkg list-installed | grep -q kmod-amneziawg; then
|
||||
|
||||
if is_pkg_installed "kmod-amneziawg"; then
|
||||
echo "kmod-amneziawg already installed"
|
||||
else
|
||||
KMOD_AMNEZIAWG_FILENAME="kmod-amneziawg${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${KMOD_AMNEZIAWG_FILENAME}"
|
||||
wget -O "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
KMOD_AMNEZIAWG_FILENAME=$(download_package "kmod-amneziawg" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
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
|
||||
|
||||
opkg install "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME"
|
||||
|
||||
install_local_pkg "$AWG_DIR/$KMOD_AMNEZIAWG_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "kmod-amneziawg installed successfully"
|
||||
@@ -63,13 +167,10 @@ install_awg_packages() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if opkg list-installed | grep -q amneziawg-tools; then
|
||||
if is_pkg_installed "amneziawg-tools"; then
|
||||
echo "amneziawg-tools already installed"
|
||||
else
|
||||
AMNEZIAWG_TOOLS_FILENAME="amneziawg-tools${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${AMNEZIAWG_TOOLS_FILENAME}"
|
||||
wget -O "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
AMNEZIAWG_TOOLS_FILENAME=$(download_package "amneziawg-tools" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools file downloaded successfully"
|
||||
else
|
||||
@@ -77,7 +178,7 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
opkg install "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME"
|
||||
install_local_pkg "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools installed successfully"
|
||||
@@ -86,15 +187,12 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Проверяем оба возможных названия пакета
|
||||
if opkg list-installed | grep -q "luci-proto-amneziawg\|luci-app-amneziawg"; then
|
||||
if is_pkg_installed "luci-proto-amneziawg" || is_pkg_installed "luci-app-amneziawg"; then
|
||||
echo "$LUCI_PACKAGE_NAME already installed"
|
||||
else
|
||||
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"
|
||||
|
||||
LUCI_AMNEZIAWG_FILENAME=$(download_package "$LUCI_PACKAGE_NAME" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$LUCI_PACKAGE_NAME file downloaded successfully"
|
||||
else
|
||||
@@ -102,7 +200,7 @@ install_awg_packages() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
opkg install "$AWG_DIR/$LUCI_AMNEZIAWG_FILENAME"
|
||||
install_local_pkg "$AWG_DIR/$LUCI_AMNEZIAWG_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$LUCI_PACKAGE_NAME installed successfully"
|
||||
@@ -119,16 +217,13 @@ install_awg_packages() {
|
||||
INSTALL_RU_LANG=${INSTALL_RU_LANG:-n}
|
||||
|
||||
if [ "$INSTALL_RU_LANG" = "y" ] || [ "$INSTALL_RU_LANG" = "Y" ]; then
|
||||
if opkg list-installed | grep -q luci-i18n-amneziawg-ru; then
|
||||
if is_pkg_installed "luci-i18n-amneziawg-ru"; then
|
||||
echo "luci-i18n-amneziawg-ru already installed"
|
||||
else
|
||||
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"
|
||||
|
||||
LUCI_I18N_AMNEZIAWG_RU_FILENAME=$(download_package "luci-i18n-amneziawg-ru" "$PKGPOSTFIX_BASE" "$AWG_DIR" "${BASE_URL}v${VERSION}/")
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-i18n-amneziawg-ru file downloaded successfully"
|
||||
opkg install "$AWG_DIR/$LUCI_I18N_AMNEZIAWG_RU_FILENAME"
|
||||
install_local_pkg "$AWG_DIR/$LUCI_I18N_AMNEZIAWG_RU_FILENAME"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-i18n-amneziawg-ru installed successfully"
|
||||
else
|
||||
@@ -182,7 +277,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
|
||||
@@ -193,7 +288,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
|
||||
@@ -261,8 +356,11 @@ 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
|
||||
@@ -275,5 +373,3 @@ 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.20250903
|
||||
PKG_VERSION:=1.0.20260223
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
30
index.js
30
index.js
@@ -52,19 +52,27 @@ async function getSubtargets(target) {
|
||||
}
|
||||
|
||||
async function getDetails(target, subtarget) {
|
||||
const packagesUrl = `${url}${target}/${subtarget}/packages/`;
|
||||
const $ = await fetchHTML(packagesUrl);
|
||||
let vermagic = '';
|
||||
// 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
|
||||
}
|
||||
|
||||
$('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];
|
||||
}
|
||||
// vermagic from kmods directory name (more reliable than parsing kernel filename)
|
||||
const kmodsUrl = `${url}${target}/${subtarget}/kmods/`;
|
||||
const $ = await fetchHTML(kmodsUrl);
|
||||
let vermagic = '';
|
||||
|
||||
$('table tr td.n a').each((_, el) => {
|
||||
const name = $(el).attr('href');
|
||||
if (name && name.endsWith('/')) {
|
||||
vermagic = name.slice(0, -1);
|
||||
return false; // break
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=kmod-amneziawg
|
||||
PKG_VERSION:=1.0.20251104
|
||||
PKG_VERSION:=1.0.20260210
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
@@ -66,9 +66,9 @@ function generateDescription(name, texts) {
|
||||
}
|
||||
|
||||
function buildSVGQRCode(data, code) {
|
||||
// pixel size larger than 4 clips right and bottom edges of complex configs
|
||||
// pixel size 3 for mobile browser
|
||||
const options = {
|
||||
pixelSize: 4,
|
||||
pixelSize: 3,
|
||||
whiteColor: 'white',
|
||||
blackColor: 'black'
|
||||
};
|
||||
@@ -934,7 +934,7 @@ return network.registerProtocol('amneziawg', {
|
||||
}, [
|
||||
E('div', {
|
||||
'class': 'qr-code',
|
||||
'style': 'width:320px;flex:0 1 320px;text-align:center'
|
||||
'style': 'text-align:center'
|
||||
}, [
|
||||
E('em', { 'class': 'spinning' }, [ _('Generating QR code…') ])
|
||||
]),
|
||||
|
||||
Reference in New Issue
Block a user