mirror of
https://github.com/Slava-Shchipunov/awg-openwrt.git
synced 2026-03-14 09:23:10 +00:00
Compare commits
63 Commits
feat/auto-
...
feat/add-i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1d01bdafa | ||
|
|
0e0ba052de | ||
|
|
8006d6eb1e | ||
|
|
9102844b6f | ||
|
|
7195728872 | ||
|
|
9d1e5e5f70 | ||
|
|
6a40d3af6a | ||
|
|
b3bcad0d5d | ||
|
|
2de5a7406e | ||
|
|
727d873870 | ||
|
|
e538a4cd3b | ||
|
|
2d0ce4148d | ||
|
|
bdcc13cb62 | ||
|
|
f4361730a1 | ||
|
|
bde01b77c4 | ||
|
|
37f4fc71e2 | ||
|
|
12ffd61390 | ||
|
|
4dc8ea2b6a | ||
|
|
4add339eba | ||
|
|
e5696ca1e3 | ||
|
|
90508ad0b1 | ||
|
|
aec74cab7d | ||
|
|
9ae861fe88 | ||
|
|
77e16b164c | ||
|
|
0ac5434a63 | ||
|
|
9c44a73425 | ||
|
|
f8d852d9d7 | ||
|
|
cd0e27204e | ||
|
|
09bbe44557 | ||
|
|
811154ea36 | ||
|
|
b416e511c3 | ||
|
|
66b6a8f7ce | ||
|
|
521f0626d2 | ||
|
|
47c3466084 | ||
|
|
8b611ec73c | ||
|
|
77ee2bf7cc | ||
|
|
3b8de3d5f8 | ||
|
|
fa7bf7cfb0 | ||
|
|
2b1de64324 | ||
|
|
8c467935c4 | ||
|
|
96b8dddbd1 | ||
|
|
c7be95682f | ||
|
|
128a6054c2 | ||
|
|
ef86be910a | ||
|
|
d0727b534e | ||
|
|
e55641a754 | ||
|
|
922f929ad0 | ||
|
|
e7c7d2d8a7 | ||
|
|
a4dad7e585 | ||
|
|
1b130609a3 | ||
|
|
4c9a389abf | ||
|
|
78ee14fbf2 | ||
|
|
c0f2e1f908 | ||
|
|
14397a5914 | ||
|
|
438a18f0d1 | ||
|
|
bf75542e2b | ||
|
|
4dec00bf18 | ||
|
|
62aa0be06c | ||
|
|
9528b226b1 | ||
|
|
5531cf217f | ||
|
|
8d6795c32c | ||
|
|
51707f91bf | ||
|
|
a02fb5219b |
15
.github/workflows/build-module.yml
vendored
15
.github/workflows/build-module.yml
vendored
@@ -1,9 +1,14 @@
|
||||
name: Create Release on Tag
|
||||
# on: [workflow_dispatch]
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*.*.*"
|
||||
workflow_call:
|
||||
inputs:
|
||||
tag_name:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
generate-config:
|
||||
@@ -21,7 +26,13 @@ jobs:
|
||||
|
||||
- name: Get OpenWRT version from tag
|
||||
id: get_version
|
||||
run: echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_call" ]; then
|
||||
echo "VERSION=${{ inputs.tag_name }}" >> $GITHUB_ENV
|
||||
echo "VERSION=${VERSION#v}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
@@ -9,6 +9,7 @@ on:
|
||||
- "SNAPSHOT"
|
||||
schedule:
|
||||
- cron: '0 */4 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
generate-config:
|
||||
@@ -46,11 +47,12 @@ jobs:
|
||||
run: |
|
||||
postfix="${{ matrix.build_env.tag }}_${{ matrix.build_env.vermagic }}_${{ matrix.build_env.pkgarch}}_${{ matrix.build_env.target}}_${{ matrix.build_env.subtarget}}"
|
||||
RELEASE_FILE="kmod-amneziawg_${postfix}.ipk"
|
||||
TAG=${{ matrix.build_env.tag }}
|
||||
|
||||
echo "Checking for release file: $RELEASE_FILE"
|
||||
echo "Checking for release file: $RELEASE_FILE in release: $TAG"
|
||||
|
||||
# Используем GitHub CLI для проверки наличия файла в релизе
|
||||
if gh release view $matrix.build_env.tag --repo Slava-Shchipunov/awg-openwrt --json assets --jq ".assets | .[].name" | grep -q "$RELEASE_FILE"; then
|
||||
if gh release view "$TAG" --repo Slava-Shchipunov/awg-openwrt --json assets --jq ".assets | .[].name" | grep -q "$RELEASE_FILE"; then
|
||||
echo "Release file $RELEASE_FILE already exists. Skipping job."
|
||||
echo "FILE_EXISTS=true" >> $GITHUB_ENV
|
||||
else
|
||||
@@ -165,16 +167,16 @@ jobs:
|
||||
- name: Delete old release assets
|
||||
if: env.FILE_EXISTS == 'false'
|
||||
run: |
|
||||
postfix="${{ matrix.build_env.pkgarch}}_${{ matrix.build_env.target}}_${{ matrix.build_env.subtarget}}"
|
||||
postfix="${{ matrix.build_env.pkgarch }}_${{ matrix.build_env.target }}_${{ matrix.build_env.subtarget }}"
|
||||
echo "Looking for old release files ending with: ${postfix}"
|
||||
|
||||
# Получаем список всех артефактов релиза
|
||||
assets=$(gh release view "${{ matrix.build_env.tag }}" --repo Slava-Shchipunov/awg-openwrt --json assets --jq ".assets | .[] | select(.name | endswith(\"$postfix.ipk\")) | .id")
|
||||
# Получаем список всех артефактов релиза по имени
|
||||
assets=$(gh release view "${{ matrix.build_env.tag }}" --repo Slava-Shchipunov/awg-openwrt --json assets --jq ".assets | .[] | select(.name | endswith(\"$postfix.ipk\")) | .name")
|
||||
|
||||
# Удаляем найденные артефакты
|
||||
for asset_id in $assets; do
|
||||
echo "Deleting asset with ID: $asset_id"
|
||||
gh release delete-asset "${{ matrix.build_env.tag }}" "$asset_id" --repo Slava-Shchipunov/awg-openwrt
|
||||
# Удаляем найденные артефакты по имени
|
||||
for asset_name in $assets; do
|
||||
echo "Deleting asset with name: $asset_name"
|
||||
gh release delete-asset "${{ matrix.build_env.tag }}" "$asset_name" --repo Slava-Shchipunov/awg-openwrt
|
||||
done
|
||||
|
||||
- name: Release
|
||||
@@ -182,3 +184,4 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: awgrelease/*.ipk
|
||||
tag_name: ${{ 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 }}
|
||||
27
README.md
27
README.md
@@ -1,6 +1,12 @@
|
||||
# Автоматическая настройка AmneziaWG для OpenWRT версии 23.05.0 и более новых
|
||||
Для автоматической настройки рекомендую использовать [скрипт](https://github.com/itdoginfo/domain-routing-openwrt) от пользователя itdog. Этот скрипт позволяет автоматически скачать нужные пакеты из собранных здесь и настроить [точечный обход блокировок по доменам](https://habr.com/ru/articles/767464/).
|
||||
|
||||
Если же вам нужно только установить пакеты, я добавил скрипт amneziawg-install - он автоматически скачает пакеты из этого репозитория под ваше устройство (только для стабильной версии OpenWRT), а также предложит сразу настроить интерфейс с протоколом AmneziaWG. Если пользователь согласится, нужно будет ввести параметры конфига, которые запросит скрипт. При этом скрипт создаст интерфейс, настроит для него правила фаерволла, а также **включит перенаправление всего траффика через тунель AmneziaWG** (установит в настройках Peer галочку Route Allowed IPs).
|
||||
Для запуска скрипта подключитесь к роутеру по SSH, введите команду и следуйте инструкциям на экране:
|
||||
```
|
||||
sh <(wget -O - https://raw.githubusercontent.com/Slava-Shchipunov/awg-openwrt/refs/heads/feat/add-install-script/amneziawg-install.sh)
|
||||
```
|
||||
|
||||
# Сборка пакетов для всех устройств, поддерживающих OpenWRT
|
||||
В репозиторий добавлен скрипт, который парсит данные о поддерживаемых платформах со страницы OpenWRT и автоматически запускает сборку пакетов AmneziaWG для всех устройств.
|
||||
На данный момент я собрал пакеты для всех устройств для OpenWRT версий:
|
||||
@@ -9,9 +15,17 @@
|
||||
3) [23.05.2](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.2)
|
||||
4) [23.05.3](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.3)
|
||||
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)
|
||||
|
||||
И собрал пакеты для популярных устройств для OpenWRT [SNAPSHOT](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/SNAPSHOT)
|
||||
|
||||
Также запускал сборку для версии [22.03.7](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v22.03.7), но там для двух платформ сборка завершилась ошибкой. Так как это достаточно старая версия OpenWRT, я не стал разбираться, в чем проблема.
|
||||
|
||||
В дальнейшем при выходе новых релизов OpenWRT будут автоматически создаваться релизы с пакетами AmneziaWG и запускаться сборка пакетов под все устройства, поддерживаемые новой версией. Github action для проверки появления нового релиза запускается автоматически раз в 3 дня, а также может быть запущен вручную.
|
||||
|
||||
## Автоматическая сборка пакетов для SNAPSHOT версии
|
||||
В репозитории настроен github action, который запускается каждые 4 часа и проверяет [страницу снапшотов](https://downloads.openwrt.org/snapshots/targets/) сайта OpenWRT. При этом, если для какой-то платформы обнаруживается снапшот с более новой версией ядра, запускается сборка пакетов под эту платформу, а новые файлы заменяют старые. В целях экономии ресурсов и ускорения процесса сборки, пакеты собираются только для популярных платформ, которые указаны в массиве `SNAPSHOT_SUBTARGETS_TO_BUILD` в файле index.js.
|
||||
|
||||
## Выбор пакетов для своего устройства
|
||||
В соответствии с пунктом [Указываем переменные для сборки](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`, соответствующие вашему устройству.
|
||||
@@ -34,6 +48,12 @@
|
||||
# Automatic configuration of AmneziaWG for OpenWRT version 23.05.0 and newer
|
||||
For automatic configuration, I recommend using the [script](https://github.com/itdoginfo/domain-routing-openwrt) from the user itdog. This script allows you to automatically download the necessary packages from those collected here and configure [point-by-point bypass of blocking by domains](https://habr.com/ru/articles/767464/) (instructions in Russian).
|
||||
|
||||
If you only need to install packages, I added the amneziawg-install script - it will automatically download packages from this repository for your device (only for the stable version of OpenWRT), and also offer to immediately configure the interface with the AmneziaWG protocol. If the user agrees, you will need to enter the config parameters that the script will request. The script will create an interface, configure firewall rules for it, and also **enable redirection of all traffic through the AmneziaWG tunnel** (check the Route Allowed IPs box in the Peer settings).
|
||||
To run the script, connect to the router via SSH, enter the command and follow the instructions on the screen:
|
||||
```
|
||||
sh <(wget -O - https://raw.githubusercontent.com/Slava-Shchipunov/awg-openwrt/refs/heads/feat/add-install-script/amneziawg-install.sh)
|
||||
```
|
||||
|
||||
# Building packages for all devices that support OpenWRT
|
||||
A script has been added to the repository that parses data on supported platforms from the OpenWRT page and automatically starts building AmneziaWG packages for all devices.
|
||||
At the moment I have collected packages for all devices for OpenWRT versions:
|
||||
@@ -43,8 +63,15 @@ At the moment I have collected packages for all devices for OpenWRT versions:
|
||||
4) [23.05.3](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.3)
|
||||
5) [23.05.4](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/v23.05.4)
|
||||
|
||||
And collected packages for popular devices for OpenWRT [SNAPSHOT](https://github.com/Slava-Shchipunov/awg-openwrt/releases/tag/SNAPSHOT)
|
||||
|
||||
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.
|
||||
|
||||
## Selecting packages for your device
|
||||
In accordance with the paragraph [Specify variables for builds](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) (instructions in Russian) determine `target` and `subtarget` of your device. Then go to the release page corresponding to your OpenWRT version, then search the page (Ctrl+F) to find 3 packages whose names end in `target_subtarget.ipk` corresponding to your device.
|
||||
|
||||
|
||||
207
amneziawg-install.sh
Normal file
207
amneziawg-install.sh
Normal file
@@ -0,0 +1,207 @@
|
||||
#!/bin/sh
|
||||
|
||||
#set -x
|
||||
|
||||
#Репозиторий 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
|
||||
}
|
||||
|
||||
install_awg_packages() {
|
||||
# Получение 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="_v${VERSION}_${PKGARCH}_${TARGET}_${SUBTARGET}.ipk"
|
||||
BASE_URL="https://github.com/Slava-Shchipunov/awg-openwrt/releases/download/"
|
||||
|
||||
AWG_DIR="/tmp/amneziawg"
|
||||
mkdir -p "$AWG_DIR"
|
||||
|
||||
if opkg list-installed | grep -q 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"
|
||||
|
||||
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"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "kmod-amneziawg file downloaded successfully"
|
||||
else
|
||||
echo "Error installing kmod-amneziawg. Please, install kmod-amneziawg manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if opkg list-installed | grep -q 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"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools file downloaded successfully"
|
||||
else
|
||||
echo "Error downloading amneziawg-tools. Please, install amneziawg-tools manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
opkg install "$AWG_DIR/$AMNEZIAWG_TOOLS_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "amneziawg-tools file downloaded successfully"
|
||||
else
|
||||
echo "Error installing amneziawg-tools. Please, install amneziawg-tools manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if opkg list-installed | grep -q luci-app-amneziawg; then
|
||||
echo "luci-app-amneziawg already installed"
|
||||
else
|
||||
LUCI_APP_AMNEZIAWG_FILENAME="luci-app-amneziawg${PKGPOSTFIX}"
|
||||
DOWNLOAD_URL="${BASE_URL}v${VERSION}/${LUCI_APP_AMNEZIAWG_FILENAME}"
|
||||
wget -O "$AWG_DIR/$LUCI_APP_AMNEZIAWG_FILENAME" "$DOWNLOAD_URL"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-app-amneziawg file downloaded successfully"
|
||||
else
|
||||
echo "Error downloading luci-app-amneziawg. Please, install luci-app-amneziawg manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
opkg install "$AWG_DIR/$LUCI_APP_AMNEZIAWG_FILENAME"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "luci-app-amneziawg file downloaded successfully"
|
||||
else
|
||||
echo "Error installing luci-app-amneziawg. Please, install luci-app-amneziawg manually and run the script again"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf "$AWG_DIR"
|
||||
}
|
||||
|
||||
configure_amneziawg_interface() {
|
||||
INTERFACE_NAME="awg1"
|
||||
CONFIG_NAME="amneziawg_awg1"
|
||||
PROTO="amneziawg"
|
||||
ZONE_NAME="awg1"
|
||||
|
||||
read -r -p "Enter the private key (from [Interface]):"$'\n' AWG_PRIVATE_KEY_INT
|
||||
|
||||
while true; do
|
||||
read -r -p "Enter internal IP address with subnet, example 192.168.100.5/24 (from [Interface]):"$'\n' AWG_IP
|
||||
if echo "$AWG_IP" | egrep -oq '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+$'; then
|
||||
break
|
||||
else
|
||||
echo "This IP is not valid. Please repeat"
|
||||
fi
|
||||
done
|
||||
|
||||
read -r -p "Enter the public key (from [Peer]):"$'\n' AWG_PUBLIC_KEY_INT
|
||||
read -r -p "If use PresharedKey, Enter this (from [Peer]). If your don't use leave blank:"$'\n' AWG_PRESHARED_KEY_INT
|
||||
read -r -p "Enter Endpoint host without port (Domain or IP) (from [Peer]):"$'\n' AWG_ENDPOINT_INT
|
||||
|
||||
read -r -p "Enter Endpoint host port (from [Peer]) [51820]:"$'\n' AWG_ENDPOINT_PORT_INT
|
||||
AWG_ENDPOINT_PORT_INT=${AWG_ENDPOINT_PORT_INT:-51820}
|
||||
if [ "$AWG_ENDPOINT_PORT_INT" = '51820' ]; then
|
||||
echo $AWG_ENDPOINT_PORT_INT
|
||||
fi
|
||||
|
||||
read -r -p "Enter Jc value (from [Interface]):"$'\n' AWG_JC
|
||||
read -r -p "Enter Jmin value (from [Interface]):"$'\n' AWG_JMIN
|
||||
read -r -p "Enter Jmax value (from [Interface]):"$'\n' AWG_JMAX
|
||||
read -r -p "Enter S1 value (from [Interface]):"$'\n' AWG_S1
|
||||
read -r -p "Enter S2 value (from [Interface]):"$'\n' AWG_S2
|
||||
read -r -p "Enter H1 value (from [Interface]):"$'\n' AWG_H1
|
||||
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
|
||||
|
||||
uci set network.${INTERFACE_NAME}=interface
|
||||
uci set network.${INTERFACE_NAME}.proto=$PROTO
|
||||
uci set network.${INTERFACE_NAME}.private_key=$AWG_PRIVATE_KEY_INT
|
||||
uci set network.${INTERFACE_NAME}.listen_port='51821'
|
||||
uci set network.${INTERFACE_NAME}.addresses=$AWG_IP
|
||||
|
||||
uci set network.${INTERFACE_NAME}.awg_jc=$AWG_JC
|
||||
uci set network.${INTERFACE_NAME}.awg_jmin=$AWG_JMIN
|
||||
uci set network.${INTERFACE_NAME}.awg_jmax=$AWG_JMAX
|
||||
uci set network.${INTERFACE_NAME}.awg_s1=$AWG_S1
|
||||
uci set network.${INTERFACE_NAME}.awg_s2=$AWG_S2
|
||||
uci set network.${INTERFACE_NAME}.awg_h1=$AWG_H1
|
||||
uci set network.${INTERFACE_NAME}.awg_h2=$AWG_H2
|
||||
uci set network.${INTERFACE_NAME}.awg_h3=$AWG_H3
|
||||
uci set network.${INTERFACE_NAME}.awg_h4=$AWG_H4
|
||||
|
||||
if ! uci show network | grep -q ${CONFIG_NAME}; then
|
||||
uci add network ${CONFIG_NAME}
|
||||
fi
|
||||
|
||||
uci set network.@${CONFIG_NAME}[0]=$CONFIG_NAME
|
||||
uci set network.@${CONFIG_NAME}[0].name="${INTERFACE_NAME}_client"
|
||||
uci set network.@${CONFIG_NAME}[0].public_key=$AWG_PUBLIC_KEY_INT
|
||||
uci set network.@${CONFIG_NAME}[0].preshared_key=$AWG_PRESHARED_KEY_INT
|
||||
uci set network.@${CONFIG_NAME}[0].route_allowed_ips='1'
|
||||
uci set network.@${CONFIG_NAME}[0].persistent_keepalive='25'
|
||||
uci set network.@${CONFIG_NAME}[0].endpoint_host=$AWG_ENDPOINT_INT
|
||||
uci set network.@${CONFIG_NAME}[0].allowed_ips='0.0.0.0/0'
|
||||
uci add_list network.@${CONFIG_NAME}[0].allowed_ips='::/0'
|
||||
uci set network.@${CONFIG_NAME}[0].endpoint_port=$AWG_ENDPOINT_PORT_INT
|
||||
uci commit network
|
||||
|
||||
if ! uci show firewall | grep -q "@zone.*name='${ZONE_NAME}'"; then
|
||||
printf "\033[32;1mZone Create\033[0m\n"
|
||||
uci add firewall zone
|
||||
uci set firewall.@zone[-1].name=$ZONE_NAME
|
||||
uci set firewall.@zone[-1].network=$INTERFACE_NAME
|
||||
uci set firewall.@zone[-1].forward='REJECT'
|
||||
uci set firewall.@zone[-1].output='ACCEPT'
|
||||
uci set firewall.@zone[-1].input='REJECT'
|
||||
uci set firewall.@zone[-1].masq='1'
|
||||
uci set firewall.@zone[-1].mtu_fix='1'
|
||||
uci set firewall.@zone[-1].family='ipv4'
|
||||
uci commit firewall
|
||||
fi
|
||||
|
||||
if ! uci show firewall | grep -q "@forwarding.*name='${ZONE_NAME}'"; then
|
||||
printf "\033[32;1mConfigured forwarding\033[0m\n"
|
||||
uci add firewall forwarding
|
||||
uci set firewall.@forwarding[-1]=forwarding
|
||||
uci set firewall.@forwarding[-1].name="${ZONE_NAME}-lan"
|
||||
uci set firewall.@forwarding[-1].dest=${ZONE_NAME}
|
||||
uci set firewall.@forwarding[-1].src='lan'
|
||||
uci set firewall.@forwarding[-1].family='ipv4'
|
||||
uci commit firewall
|
||||
fi
|
||||
}
|
||||
|
||||
check_repo
|
||||
|
||||
install_awg_packages
|
||||
|
||||
printf "\033[32;1mDo you want to configure the amneziawg interface? (y/n): \033[0m\n"
|
||||
read IS_SHOULD_CONFIGURE_AWG_INTERFACE
|
||||
|
||||
if [ "$IS_SHOULD_CONFIGURE_AWG_INTERFACE" = "y" ] || [ "$IS_SHOULD_CONFIGURE_AWG_INTERFACE" = "Y" ]; then
|
||||
configure_amneziawg_interface
|
||||
else
|
||||
printf "\033[32;1mSkipping amneziawg interface configuration.\033[0m\n"
|
||||
fi
|
||||
|
||||
service network restart
|
||||
6
index.js
6
index.js
@@ -4,8 +4,8 @@ const core = require('@actions/core');
|
||||
|
||||
const version = process.argv[2]; // Получение версии OpenWRT из аргумента командной строки
|
||||
|
||||
// mediatek, ramips
|
||||
const SNAPSHOT_SUBTARGETS_TO_BUILD = ['filogic', 'mt7622', 'mt7623', 'mt7629', 'mt7620', 'mt7621', 'mt76x8'];
|
||||
const SNAPSHOT_TARGETS_TO_BUILD = ['mediatek', 'ramips', 'x86', 'armsr'];
|
||||
const SNAPSHOT_SUBTARGETS_TO_BUILD = ['filogic', 'mt7622', 'mt7623', 'mt7629', 'mt7620', 'mt7621', 'mt76x8', '64', 'generic', 'armv8'];
|
||||
|
||||
if (!version) {
|
||||
core.setFailed('Version argument is required');
|
||||
@@ -78,7 +78,7 @@ async function main() {
|
||||
for (const subtarget of subtargets) {
|
||||
const { vermagic, pkgarch } = await getDetails(target, subtarget);
|
||||
|
||||
if (version !== 'SNAPSHOT' || SNAPSHOT_SUBTARGETS_TO_BUILD.includes(subtarget)) {
|
||||
if (version !== 'SNAPSHOT' || (SNAPSHOT_SUBTARGETS_TO_BUILD.includes(subtarget) && SNAPSHOT_TARGETS_TO_BUILD.includes(target))) {
|
||||
jobConfig.push({
|
||||
tag: version,
|
||||
target,
|
||||
|
||||
Reference in New Issue
Block a user