Compare commits
1 Commits
master
...
pr-ath9k-m
Author | SHA1 | Date | |
---|---|---|---|
|
fa0740cca4 |
@ -7,52 +7,25 @@ insert_final_newline = true
|
|||||||
indent_style = tab
|
indent_style = tab
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
|
|
||||||
[Dockerfile]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[/patches/**]
|
[/patches/**]
|
||||||
indent_style = unset
|
indent_style = unset
|
||||||
indent_size = unset
|
indent_size = unset
|
||||||
|
|
||||||
[*.c]
|
|
||||||
|
|
||||||
[*.css]
|
|
||||||
|
|
||||||
[*.dia]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.h]
|
|
||||||
|
|
||||||
[*.html]
|
|
||||||
|
|
||||||
[*.js]
|
|
||||||
|
|
||||||
[*{.json,.ecrc}]
|
[*{.json,.ecrc}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[*.lua]
|
|
||||||
|
|
||||||
[{Makefile,*.mk}]
|
|
||||||
indent_style = unset
|
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[*.pl]
|
|
||||||
|
|
||||||
[*.py]
|
[*.py]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[*.rst]
|
[*.rst]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 3
|
||||||
|
|
||||||
[*.sh]
|
|
||||||
|
|
||||||
[*.yml]
|
[*.yml]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
@ -61,7 +34,3 @@ indent_size = 2
|
|||||||
[CMakeLists.txt]
|
[CMakeLists.txt]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[{docs,contrib/ci}/*site*/**/*.conf]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -6,7 +6,7 @@ label: bug
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
Please carefully fill out the questionnaire below to help improve the
|
Please carefully fill out the questionaire below to help improve the
|
||||||
timely triaging of issues. Walk through the questions below and use
|
timely triaging of issues. Walk through the questions below and use
|
||||||
them as an inspiration for what information you can provide.
|
them as an inspiration for what information you can provide.
|
||||||
|
|
||||||
|
12
.github/dependabot.yml
vendored
12
.github/dependabot.yml
vendored
@ -1,12 +0,0 @@
|
|||||||
# Docs: <https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/customizing-dependency-updates>
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: /
|
|
||||||
schedule: {interval: monthly}
|
|
||||||
|
|
||||||
- package-ecosystem: pip
|
|
||||||
directory: /docs/
|
|
||||||
schedule: {interval: monthly}
|
|
237
.github/filters.yml
vendored
237
.github/filters.yml
vendored
@ -1,237 +0,0 @@
|
|||||||
{
|
|
||||||
"ath79-generic": [
|
|
||||||
"targets/ath79-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ath79-nand": [
|
|
||||||
"targets/ath79-nand",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ath79-mikrotik": [
|
|
||||||
"targets/ath79-mikrotik",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/mikrotik.inc"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2708": [
|
|
||||||
"targets/bcm27xx-bcm2708",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2709": [
|
|
||||||
"targets/bcm27xx-bcm2709",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"ipq40xx-generic": [
|
|
||||||
"targets/ipq40xx-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ipq40xx-mikrotik": [
|
|
||||||
"targets/ipq40xx-mikrotik",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/mikrotik.inc"
|
|
||||||
],
|
|
||||||
"ipq806x-generic": [
|
|
||||||
"targets/ipq806x-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"lantiq-xrx200": [
|
|
||||||
"targets/lantiq-xrx200",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"lantiq-xway": [
|
|
||||||
"targets/lantiq-xway",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mediatek-mt7622": [
|
|
||||||
"targets/mediatek-mt7622",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mpc85xx-p1010": [
|
|
||||||
"targets/mpc85xx-p1010",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mpc85xx-p1020": [
|
|
||||||
"targets/mpc85xx-p1020",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt7620": [
|
|
||||||
"targets/ramips-mt7620",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt7621": [
|
|
||||||
"targets/ramips-mt7621",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt76x8": [
|
|
||||||
"targets/ramips-mt76x8",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"realtek-rtl838x": [
|
|
||||||
"targets/realtek-rtl838x",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"rockchip-armv8": [
|
|
||||||
"targets/rockchip-armv8",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"sunxi-cortexa7": [
|
|
||||||
"targets/sunxi-cortexa7",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"x86-generic": [
|
|
||||||
"targets/x86-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc"
|
|
||||||
],
|
|
||||||
"x86-geode": [
|
|
||||||
"targets/x86-geode",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"x86-legacy": [
|
|
||||||
"targets/x86-legacy",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc"
|
|
||||||
],
|
|
||||||
"x86-64": [
|
|
||||||
"targets/x86-64",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc",
|
|
||||||
"contrib/ci/minimal-site/**",
|
|
||||||
"package/**"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2710": [
|
|
||||||
"targets/bcm27xx-bcm2710",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"mvebu-cortexa9": [
|
|
||||||
"targets/mvebu-cortexa9",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
]
|
|
||||||
}
|
|
20
.github/workflows/backport.yml
vendored
20
.github/workflows/backport.yml
vendored
@ -1,20 +0,0 @@
|
|||||||
name: Backport
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [closed, labeled]
|
|
||||||
permissions:
|
|
||||||
contents: write # so it can comment
|
|
||||||
pull-requests: write # so it can create pull requests
|
|
||||||
jobs:
|
|
||||||
backport:
|
|
||||||
name: Backport Pull Request
|
|
||||||
if: github.repository_owner == 'freifunk-gluon' && github.event.pull_request.merged == true && (github.event_name != 'labeled' || startsWith('backport', github.event.label.name))
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Create backport PRs
|
|
||||||
uses: korthout/backport-action@v1.2.0
|
|
||||||
with:
|
|
||||||
# Config README: https://github.com/korthout/backport-action#backport-action
|
|
||||||
pull_description: |-
|
|
||||||
Automatic backport to `${target_branch}`, triggered by a label in #${pull_number}.
|
|
7
.github/workflows/build-docs.yml
vendored
7
.github/workflows/build-docs.yml
vendored
@ -9,21 +9,18 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'docs**/'
|
- 'docs**/'
|
||||||
- '.github/workflows/build-docs.yml'
|
- '.github/workflows/build-docs.yml'
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-documentation:
|
build-documentation:
|
||||||
name: docs
|
name: docs
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v1
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: sudo pip3 install sphinx-rtd-theme
|
run: sudo pip3 install sphinx-rtd-theme
|
||||||
- name: Build documentation
|
- name: Build documentation
|
||||||
run: make -C docs html
|
run: make -C docs html
|
||||||
- name: Archive build output
|
- name: Archive build output
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v1
|
||||||
with:
|
with:
|
||||||
name: docs_output
|
name: docs_output
|
||||||
path: docs/_build/html
|
path: docs/_build/html
|
||||||
|
55
.github/workflows/build-gluon.yml
vendored
55
.github/workflows/build-gluon.yml
vendored
@ -1,3 +1,7 @@
|
|||||||
|
|
||||||
|
# Update this file after adding/removing/renaming a target by running
|
||||||
|
# `make list-targets BROKEN=1 | ./contrib/actions/generate-actions.py > ./.github/workflows/build-gluon.yml`
|
||||||
|
|
||||||
name: Build Gluon
|
name: Build Gluon
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -5,56 +9,45 @@ on:
|
|||||||
- master
|
- master
|
||||||
- next*
|
- next*
|
||||||
- v20*
|
- v20*
|
||||||
|
paths:
|
||||||
|
- "modules"
|
||||||
|
- "Makefile"
|
||||||
|
- "scripts/**"
|
||||||
|
- "package/**"
|
||||||
|
- "patches/**"
|
||||||
|
- "targets/**"
|
||||||
|
- ".github/workflows/build-gluon.yml"
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
|
paths:
|
||||||
permissions:
|
- "modules"
|
||||||
contents: read
|
- "Makefile"
|
||||||
|
- "scripts/**"
|
||||||
|
- "package/**"
|
||||||
|
- "patches/**"
|
||||||
|
- "targets/**"
|
||||||
|
- ".github/workflows/build-gluon.yml"
|
||||||
jobs:
|
jobs:
|
||||||
changed:
|
|
||||||
permissions:
|
|
||||||
contents: read # for dorny/paths-filter to fetch a list of changed files
|
|
||||||
pull-requests: read # for dorny/paths-filter to read pull requests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
targets: ${{ steps.filter.outputs.changes }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
# Filter targets based on changed files
|
|
||||||
- uses: dorny/paths-filter@v2
|
|
||||||
id: filter
|
|
||||||
with:
|
|
||||||
filters: .github/filters.yml
|
|
||||||
|
|
||||||
build_firmware:
|
build_firmware:
|
||||||
needs: changed
|
|
||||||
if: ${{ needs.changed.outputs.targets != '[]' && needs.changed.outputs.targets != '' }}
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
# Read back changed targets to create build matrix
|
target: [ath79-generic, ath79-nand, bcm27xx-bcm2708, bcm27xx-bcm2709, ipq40xx-generic, ipq806x-generic, lantiq-xrx200, lantiq-xway, mediatek-mt7622, mpc85xx-p1010, mpc85xx-p1020, ramips-mt7620, ramips-mt7621, ramips-mt76x8, ramips-rt305x, rockchip-armv8, sunxi-cortexa7, x86-generic, x86-geode, x86-legacy, x86-64, bcm27xx-bcm2710, mvebu-cortexa9]
|
||||||
target: ${{ fromJSON(needs.changed.outputs.targets) }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: sudo contrib/actions/install-dependencies.sh
|
run: sudo contrib/actions/install-dependencies.sh
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: contrib/actions/run-build.sh ${{ matrix.target }}
|
run: contrib/actions/run-build.sh ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Archive build logs
|
- name: Archive build logs
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v1
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.target }}_logs
|
name: ${{ matrix.target }}_logs
|
||||||
path: openwrt/logs
|
path: openwrt/logs
|
||||||
|
|
||||||
- name: Archive build output
|
- name: Archive build output
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v1
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.target }}_output
|
name: ${{ matrix.target }}_output
|
||||||
path: output
|
path: output
|
||||||
|
5
.github/workflows/check-patches.yml
vendored
5
.github/workflows/check-patches.yml
vendored
@ -12,15 +12,12 @@ on:
|
|||||||
- 'modules'
|
- 'modules'
|
||||||
- 'patches/**'
|
- 'patches/**'
|
||||||
- '.github/workflows/check-patches.yml'
|
- '.github/workflows/check-patches.yml'
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-patches:
|
check-patches:
|
||||||
name: Check patches
|
name: Check patches
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v1
|
||||||
- name: Refresh patches
|
- name: Refresh patches
|
||||||
run: make refresh-patches GLUON_SITEDIR="contrib/ci/minimal-site"
|
run: make refresh-patches GLUON_SITEDIR="contrib/ci/minimal-site"
|
||||||
- name: Show diff
|
- name: Show diff
|
||||||
|
8
.github/workflows/labels.yml
vendored
8
.github/workflows/labels.yml
vendored
@ -4,18 +4,12 @@ on:
|
|||||||
# only execute base branch actions
|
# only execute base branch actions
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
labels:
|
labels:
|
||||||
permissions:
|
|
||||||
contents: read # for actions/labeler to determine modified files
|
|
||||||
pull-requests: write # for actions/labeler to add labels to PRs
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository_owner == 'freifunk-gluon'
|
if: github.repository_owner == 'freifunk-gluon'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v4
|
- uses: actions/labeler@v3
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
sync-labels: true
|
sync-labels: true
|
||||||
|
33
.github/workflows/lint.yml
vendored
33
.github/workflows/lint.yml
vendored
@ -3,17 +3,14 @@ on:
|
|||||||
push:
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lua:
|
lua:
|
||||||
name: Lua
|
name: Lua
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v1
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: sudo apt-get -y update && sudo apt-get -y install lua-check
|
run: sudo apt install lua-check
|
||||||
- name: Install example site
|
- name: Install example site
|
||||||
run: ln -s ./docs/site-example ./site
|
run: ln -s ./docs/site-example ./site
|
||||||
- name: Lint Lua code
|
- name: Lint Lua code
|
||||||
@ -23,32 +20,10 @@ jobs:
|
|||||||
name: Shell
|
name: Shell
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v1
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: sudo apt-get -y update && sudo apt-get -y install shellcheck
|
run: sudo apt install shellcheck
|
||||||
- name: Install example site
|
- name: Install example site
|
||||||
run: ln -s ./docs/site-example ./site
|
run: ln -s ./docs/site-example ./site
|
||||||
- name: Lint shell code
|
- name: Lint shell code
|
||||||
run: make lint-sh
|
run: make lint-sh
|
||||||
|
|
||||||
editorconfig:
|
|
||||||
name: Editorconfig
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo apt install curl tar
|
|
||||||
- name: Install editorconfig-checker
|
|
||||||
env:
|
|
||||||
VERSION: 2.7.0
|
|
||||||
OS: linux
|
|
||||||
ARCH: amd64
|
|
||||||
run: |
|
|
||||||
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz
|
|
||||||
tar xzf ec-$OS-$ARCH.tar.gz
|
|
||||||
sudo mv ./bin/ec-$OS-$ARCH /usr/bin/editorconfig-checker
|
|
||||||
sudo chmod +x /usr/bin/editorconfig-checker
|
|
||||||
- name: Install example site
|
|
||||||
run: ln -s ./docs/site-example ./site
|
|
||||||
- name: Lint editorconfig
|
|
||||||
run: make lint-editorconfig
|
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,4 +7,3 @@
|
|||||||
.bash_history
|
.bash_history
|
||||||
.subversion
|
.subversion
|
||||||
.wget-hsts
|
.wget-hsts
|
||||||
/.scmversion
|
|
||||||
|
@ -25,11 +25,9 @@ files["package/**/check_site.lua"] = {
|
|||||||
"extend",
|
"extend",
|
||||||
"in_domain",
|
"in_domain",
|
||||||
"in_site",
|
"in_site",
|
||||||
"value",
|
|
||||||
"need",
|
"need",
|
||||||
"need_alphanumeric_key",
|
"need_alphanumeric_key",
|
||||||
"need_array",
|
"need_array",
|
||||||
"need_array_elements_exclusive",
|
|
||||||
"need_array_of",
|
"need_array_of",
|
||||||
"need_boolean",
|
"need_boolean",
|
||||||
"need_chanlist",
|
"need_chanlist",
|
||||||
@ -51,7 +49,6 @@ files["package/**/check_site.lua"] = {
|
|||||||
|
|
||||||
files["package/**/luasrc/lib/gluon/config-mode/*"] = {
|
files["package/**/luasrc/lib/gluon/config-mode/*"] = {
|
||||||
globals = {
|
globals = {
|
||||||
"MultiListValue",
|
|
||||||
"DynamicList",
|
"DynamicList",
|
||||||
"Flag",
|
"Flag",
|
||||||
"Form",
|
"Form",
|
||||||
@ -65,7 +62,6 @@ files["package/**/luasrc/lib/gluon/config-mode/*"] = {
|
|||||||
"translate",
|
"translate",
|
||||||
"translatef",
|
"translatef",
|
||||||
"Value",
|
"Value",
|
||||||
"Element",
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
# .readthedocs.yaml
|
|
||||||
# Read the Docs configuration file
|
|
||||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
||||||
|
|
||||||
# Required
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
# Build documentation in the docs/ directory with Sphinx
|
|
||||||
sphinx:
|
|
||||||
configuration: docs/conf.py
|
|
||||||
|
|
||||||
# Optionally set the version of Python and requirements required to build your docs
|
|
||||||
python:
|
|
||||||
install:
|
|
||||||
- requirements: docs/requirements.txt
|
|
||||||
|
|
||||||
build:
|
|
||||||
os: ubuntu-22.04
|
|
||||||
tools:
|
|
||||||
python: "3.8"
|
|
@ -1,30 +0,0 @@
|
|||||||
workspace:
|
|
||||||
base: /build
|
|
||||||
|
|
||||||
#clone:
|
|
||||||
# git:
|
|
||||||
# image: woodpeckerci/plugin-git
|
|
||||||
# settings:
|
|
||||||
# recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
build-${TARGET}:
|
|
||||||
image: "ubuntu:latest"
|
|
||||||
pull: true
|
|
||||||
environment:
|
|
||||||
- input_version=v2022.1.4
|
|
||||||
- GLUON_SITEDIR=../site
|
|
||||||
- FORCE_UNSAFE_CONFIGURE=1
|
|
||||||
- GLUON_TARGET=${TARGET}
|
|
||||||
- GLUON_DEPRECATED=1
|
|
||||||
commands:
|
|
||||||
- echo ${TARGET}
|
|
||||||
# - git config --global init.defaultBranch main
|
|
||||||
# - sed -i 's/install/install file/' contrib/actions/install-dependencies.sh
|
|
||||||
# - sh contrib/actions/install-dependencies.sh
|
|
||||||
# - sh contrib/actions/run-build.sh ${TARGET}
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
TARGET:
|
|
||||||
- ath79-generic
|
|
||||||
- x86-64
|
|
@ -23,8 +23,8 @@ using other parts or why the proposed change breaks other parts of the system.
|
|||||||
They might even refuse the idea altogether - after all, they have to sleep well
|
They might even refuse the idea altogether - after all, they have to sleep well
|
||||||
after merging the changes, too.
|
after merging the changes, too.
|
||||||
|
|
||||||
The preferred way to discuss is in the IRC channel ([#gluon] on irc.hackint.org)
|
The preferred way to discuss in the IRC channel ([#gluon] on irc.hackint.org)
|
||||||
or on the [mailing list], however, you can also open a new issue on GitHub to
|
or on the [mailing list], however, you can also open a new issue on Github to
|
||||||
discuss there. We maintain a [list of rejected features] and we'd like to
|
discuss there. We maintain a [list of rejected features] and we'd like to
|
||||||
kindly ask you to review it first. In general, looking for duplicates may save
|
kindly ask you to review it first. In general, looking for duplicates may save
|
||||||
you some time.
|
you some time.
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,7 +1,7 @@
|
|||||||
The code of Project Gluon may be distributed under the following terms, unless
|
The code of Project Gluon may be distributed under the following terms, unless
|
||||||
noted otherwise in individual files or subtrees.
|
noted otherwise in individual files or subtrees.
|
||||||
|
|
||||||
Copyright (c) Project Gluon
|
Copyright (c) 2013-2021, Project Gluon
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
28
Makefile
28
Makefile
@ -19,15 +19,14 @@ escape = '$(subst ','\'',$(1))'
|
|||||||
GLUON_SITEDIR ?= site
|
GLUON_SITEDIR ?= site
|
||||||
$(eval $(call mkabspath,GLUON_SITEDIR))
|
$(eval $(call mkabspath,GLUON_SITEDIR))
|
||||||
|
|
||||||
ifeq ($(realpath $(GLUON_SITEDIR)/site.mk),)
|
$(GLUON_SITEDIR)/site.mk:
|
||||||
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||||
endif
|
|
||||||
|
|
||||||
include $(GLUON_SITEDIR)/site.mk
|
include $(GLUON_SITEDIR)/site.mk
|
||||||
|
|
||||||
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
||||||
|
|
||||||
GLUON_DEPRECATED ?= 0
|
GLUON_DEPRECATED ?= $(error GLUON_DEPRECATED not set. Please consult the documentation)
|
||||||
|
|
||||||
ifneq ($(GLUON_BRANCH),)
|
ifneq ($(GLUON_BRANCH),)
|
||||||
$(warning *** Warning: GLUON_BRANCH has been deprecated, please set GLUON_AUTOUPDATER_BRANCH and GLUON_AUTOUPDATER_ENABLED instead.)
|
$(warning *** Warning: GLUON_BRANCH has been deprecated, please set GLUON_AUTOUPDATER_BRANCH and GLUON_AUTOUPDATER_ENABLED instead.)
|
||||||
@ -53,9 +52,6 @@ $(eval $(call mkabspath,GLUON_PACKAGEDIR))
|
|||||||
$(eval $(call mkabspath,GLUON_TARGETSDIR))
|
$(eval $(call mkabspath,GLUON_TARGETSDIR))
|
||||||
$(eval $(call mkabspath,GLUON_PATCHESDIR))
|
$(eval $(call mkabspath,GLUON_PATCHESDIR))
|
||||||
|
|
||||||
GLUON_VERSION := $(shell scripts/getversion.sh '.')
|
|
||||||
GLUON_SITE_VERSION := $(shell scripts/getversion.sh '$(GLUON_SITEDIR)')
|
|
||||||
|
|
||||||
GLUON_MULTIDOMAIN ?= 0
|
GLUON_MULTIDOMAIN ?= 0
|
||||||
GLUON_AUTOREMOVE ?= 0
|
GLUON_AUTOREMOVE ?= 0
|
||||||
GLUON_DEBUG ?= 0
|
GLUON_DEBUG ?= 0
|
||||||
@ -68,10 +64,9 @@ src-link gluon_base ../../package
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
GLUON_VARS = \
|
GLUON_VARS = \
|
||||||
GLUON_VERSION GLUON_SITE_VERSION \
|
|
||||||
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_AUTOREMOVE GLUON_DEBUG GLUON_MINIFY GLUON_DEPRECATED \
|
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_AUTOREMOVE GLUON_DEBUG GLUON_MINIFY GLUON_DEPRECATED \
|
||||||
GLUON_DEVICES GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR GLUON_DEBUGDIR \
|
GLUON_DEVICES GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR GLUON_DEBUGDIR \
|
||||||
GLUON_SITEDIR GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS \
|
GLUON_SITEDIR GLUON_RELEASE GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS \
|
||||||
GLUON_TARGET BOARD SUBTARGET
|
GLUON_TARGET BOARD SUBTARGET
|
||||||
|
|
||||||
unexport $(GLUON_VARS)
|
unexport $(GLUON_VARS)
|
||||||
@ -105,11 +100,6 @@ refresh-patches: FORCE
|
|||||||
update-feeds: FORCE
|
update-feeds: FORCE
|
||||||
@$(GLUON_ENV) scripts/feeds.sh
|
@$(GLUON_ENV) scripts/feeds.sh
|
||||||
|
|
||||||
update-modules: FORCE
|
|
||||||
@scripts/update-modules.sh
|
|
||||||
|
|
||||||
update-ci: FORCE
|
|
||||||
@$(GLUON_ENV) scripts/update-ci.sh
|
|
||||||
|
|
||||||
GLUON_TARGETS :=
|
GLUON_TARGETS :=
|
||||||
|
|
||||||
@ -151,10 +141,7 @@ list-targets: FORCE
|
|||||||
echo "$$target"
|
echo "$$target"
|
||||||
done
|
done
|
||||||
|
|
||||||
lint: lint-editorconfig lint-lua lint-sh
|
lint: lint-lua lint-sh
|
||||||
|
|
||||||
lint-editorconfig: FORCE
|
|
||||||
@scripts/lint-editorconfig.sh
|
|
||||||
|
|
||||||
lint-lua: FORCE
|
lint-lua: FORCE
|
||||||
@scripts/lint-lua.sh
|
@scripts/lint-lua.sh
|
||||||
@ -184,16 +171,11 @@ config: $(LUA) FORCE
|
|||||||
$(call CheckSite,$(conf)); \
|
$(call CheckSite,$(conf)); \
|
||||||
)
|
)
|
||||||
|
|
||||||
$(OPENWRTMAKE) prepare-tmpinfo
|
|
||||||
$(GLUON_ENV) $(LUA) scripts/target_config.lua > openwrt/.config
|
$(GLUON_ENV) $(LUA) scripts/target_config.lua > openwrt/.config
|
||||||
$(OPENWRTMAKE) defconfig
|
$(OPENWRTMAKE) defconfig
|
||||||
$(GLUON_ENV) $(LUA) scripts/target_config_check.lua
|
$(GLUON_ENV) $(LUA) scripts/target_config_check.lua
|
||||||
|
|
||||||
|
|
||||||
container: FORCE
|
|
||||||
@scripts/container.sh
|
|
||||||
|
|
||||||
|
|
||||||
all: config
|
all: config
|
||||||
+@
|
+@
|
||||||
$(GLUON_ENV) $(LUA) scripts/clean_output.lua
|
$(GLUON_ENV) $(LUA) scripts/clean_output.lua
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[![Build Gluon](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml/badge.svg?branch=master)](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml)
|
[![Build Gluon](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml/badge.svg?branch=master)](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml)
|
||||||
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/license/bsd-2-clause/)
|
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
|
||||||
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/freifunk-gluon/gluon?sort=semver)](https://github.com/freifunk-gluon/gluon/releases/latest)
|
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/freifunk-gluon/gluon?sort=semver)](https://github.com/freifunk-gluon/gluon/releases/latest)
|
||||||
|
|
||||||
# Gluon
|
# Gluon
|
||||||
@ -15,7 +15,7 @@ If you're new to Gluon and ready to get your feet wet, have a look at the
|
|||||||
|
|
||||||
Gluon's developers frequent an IRC chatroom at [#gluon](ircs://irc.hackint.org/#gluon)
|
Gluon's developers frequent an IRC chatroom at [#gluon](ircs://irc.hackint.org/#gluon)
|
||||||
on [hackint](https://hackint.org/). There is also a [webchat](https://webirc.hackint.org/#irc://irc.hackint.org/#gluon)
|
on [hackint](https://hackint.org/). There is also a [webchat](https://webirc.hackint.org/#irc://irc.hackint.org/#gluon)
|
||||||
that allows for uncomplicated access from within your browser. This channel is also available as a bridged Matrix Room at [#gluon:hackint.org](https://matrix.to/#/#gluon:hackint.org).
|
that allows for uncomplicated access from within your browser.
|
||||||
|
|
||||||
## Issues & Feature requests
|
## Issues & Feature requests
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ the future development of Gluon.
|
|||||||
|
|
||||||
Please refrain from using the `master` branch for anything else but development purposes!
|
Please refrain from using the `master` branch for anything else but development purposes!
|
||||||
Use the most recent release instead. You can list all releases by running `git tag`
|
Use the most recent release instead. You can list all releases by running `git tag`
|
||||||
and switch to one by running `git checkout v2022.1 && make update`.
|
and switch to one by running `git checkout v2021.1 && make update`.
|
||||||
|
|
||||||
If you're using the autoupdater, do not autoupdate nodes with anything but releases.
|
If you're using the autoupdater, do not autoupdate nodes with anything but releases.
|
||||||
If you upgrade using random master commits the nodes *might break* eventually.
|
If you upgrade using random master commits the nodes *might break* eventually.
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
FROM debian:bullseye-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
file \
|
file \
|
||||||
git \
|
git \
|
||||||
|
subversion \
|
||||||
python3 \
|
python3 \
|
||||||
build-essential \
|
build-essential \
|
||||||
gawk \
|
gawk \
|
||||||
@ -20,15 +21,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
ecdsautils \
|
ecdsautils \
|
||||||
lua-check \
|
lua-check \
|
||||||
shellcheck \
|
shellcheck \
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN mkdir /tmp/ec &&\
|
|
||||||
wget -O /tmp/ec/ec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.7.0/ec-linux-amd64.tar.gz &&\
|
|
||||||
tar -xvzf /tmp/ec/ec-linux-amd64.tar.gz &&\
|
|
||||||
mv bin/ec-linux-amd64 /usr/local/bin/editorconfig-checker &&\
|
|
||||||
rm -rf /tmp/ec
|
|
||||||
|
|
||||||
RUN useradd -d /gluon gluon
|
RUN useradd -d /gluon gluon
|
||||||
USER gluon
|
USER gluon
|
||||||
|
|
67
contrib/actions/generate-actions.py
Executable file
67
contrib/actions/generate-actions.py
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
ACTIONS_HEAD = """
|
||||||
|
# Update this file after adding/removing/renaming a target by running
|
||||||
|
# `make list-targets BROKEN=1 | ./contrib/actions/generate-actions.py > ./.github/workflows/build-gluon.yml`
|
||||||
|
|
||||||
|
name: Build Gluon
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- next*
|
||||||
|
- v20*
|
||||||
|
paths:
|
||||||
|
- "modules"
|
||||||
|
- "Makefile"
|
||||||
|
- "scripts/**"
|
||||||
|
- "package/**"
|
||||||
|
- "patches/**"
|
||||||
|
- "targets/**"
|
||||||
|
- ".github/workflows/build-gluon.yml"
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened]
|
||||||
|
paths:
|
||||||
|
- "modules"
|
||||||
|
- "Makefile"
|
||||||
|
- "scripts/**"
|
||||||
|
- "package/**"
|
||||||
|
- "patches/**"
|
||||||
|
- "targets/**"
|
||||||
|
- ".github/workflows/build-gluon.yml"
|
||||||
|
jobs:
|
||||||
|
build_firmware:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: [{matrix}]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: sudo contrib/actions/install-dependencies.sh
|
||||||
|
- name: Build
|
||||||
|
run: contrib/actions/run-build.sh ${{{{ matrix.target }}}}
|
||||||
|
- name: Archive build logs
|
||||||
|
if: ${{{{ !cancelled() }}}}
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: ${{{{ matrix.target }}}}_logs
|
||||||
|
path: openwrt/logs
|
||||||
|
- name: Archive build output
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: ${{{{ matrix.target }}}}_output
|
||||||
|
path: output
|
||||||
|
"""
|
||||||
|
|
||||||
|
targets = []
|
||||||
|
|
||||||
|
for target in sys.stdin:
|
||||||
|
targets.append(target.strip())
|
||||||
|
|
||||||
|
output = ACTIONS_HEAD.format(matrix=", ".join(targets))
|
||||||
|
|
||||||
|
print(output)
|
@ -1,53 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# Update target filters using
|
|
||||||
# make update-ci
|
|
||||||
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
|
|
||||||
# these changes trigger rebuilds on all targets
|
|
||||||
common = [
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
]
|
|
||||||
|
|
||||||
# these changes are only built on x86-64
|
|
||||||
extra = [
|
|
||||||
"contrib/ci/minimal-site/**",
|
|
||||||
"package/**"
|
|
||||||
]
|
|
||||||
|
|
||||||
_filter = dict()
|
|
||||||
|
|
||||||
# INCLUDE_PATTERN matches:
|
|
||||||
# include '...'
|
|
||||||
# include "..."
|
|
||||||
# include("...")
|
|
||||||
# include('...')
|
|
||||||
INCLUDE_PATTERN = "^\\s*include *\\(? *[\"']([^\"']+)[\"']"
|
|
||||||
|
|
||||||
# construct filters map from stdin
|
|
||||||
for target in sys.stdin:
|
|
||||||
target = target.strip()
|
|
||||||
|
|
||||||
_filter[target] = [
|
|
||||||
f"targets/{target}"
|
|
||||||
] + common
|
|
||||||
|
|
||||||
target_file = os.path.join(os.environ['GLUON_TARGETSDIR'], target)
|
|
||||||
with open(target_file) as f:
|
|
||||||
includes = re.findall(INCLUDE_PATTERN, f.read(), re.MULTILINE)
|
|
||||||
_filter[target].extend([f"targets/{i}" for i in includes])
|
|
||||||
|
|
||||||
if target == "x86-64":
|
|
||||||
_filter[target].extend(extra)
|
|
||||||
|
|
||||||
# print filters to stdout in json format, because json is stdlib and yaml compatible.
|
|
||||||
print(json.dumps(_filter, indent=2))
|
|
@ -3,6 +3,6 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
apt-get -y update
|
apt-get -y update
|
||||||
apt-get -y install git build-essential python3 gawk unzip libncurses5-dev zlib1g-dev libssl-dev libelf-dev wget rsync time qemu-utils
|
apt-get -y install git subversion build-essential python gawk unzip libncurses5-dev zlib1g-dev libssl-dev wget time qemu-utils
|
||||||
apt-get -y clean
|
apt-get -y clean
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -6,7 +6,7 @@ export BROKEN=1
|
|||||||
export GLUON_AUTOREMOVE=1
|
export GLUON_AUTOREMOVE=1
|
||||||
export GLUON_DEPRECATED=1
|
export GLUON_DEPRECATED=1
|
||||||
export GLUON_SITEDIR="contrib/ci/minimal-site"
|
export GLUON_SITEDIR="contrib/ci/minimal-site"
|
||||||
export GLUON_TARGET="$1"
|
export GLUON_TARGET=$1
|
||||||
export BUILD_LOG=1
|
export BUILD_LOG=1
|
||||||
|
|
||||||
make update
|
make update
|
||||||
|
82
contrib/ci/Jenkinsfile
vendored
Normal file
82
contrib/ci/Jenkinsfile
vendored
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
pipeline {
|
||||||
|
agent none
|
||||||
|
environment {
|
||||||
|
GLUON_SITEDIR = "contrib/ci/minimal-site"
|
||||||
|
GLUON_TARGET = "x86-64"
|
||||||
|
BUILD_LOG = "1"
|
||||||
|
}
|
||||||
|
stages {
|
||||||
|
stage('lint') {
|
||||||
|
parallel {
|
||||||
|
stage('lint-lua') {
|
||||||
|
agent { label 'gluon-docker' }
|
||||||
|
steps {
|
||||||
|
sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
|
||||||
|
sh 'make lint-lua'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('lint-sh') {
|
||||||
|
agent { label 'gluon-docker-v1' }
|
||||||
|
steps {
|
||||||
|
sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
|
||||||
|
sh 'make lint-sh'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('docs') {
|
||||||
|
agent { label 'gluon-docker' }
|
||||||
|
steps {
|
||||||
|
sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
|
||||||
|
sh 'make -C docs html'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('build') {
|
||||||
|
agent { label 'gluon-docker-v2' }
|
||||||
|
steps {
|
||||||
|
sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
|
||||||
|
sh 'make update'
|
||||||
|
sh 'test -d /dl_cache && ln -s /dl_cache openwrt/dl || true'
|
||||||
|
timeout(time: 2, unit: "HOURS") {
|
||||||
|
sh 'make -j$(nproc) V=s'
|
||||||
|
}
|
||||||
|
stash includes: '**/output/images/factory/*-x86-64.img.gz', name: 'gluon-x86-64-factory'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('test') {
|
||||||
|
agent { label 'gluon-vmx' }
|
||||||
|
steps {
|
||||||
|
sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
|
||||||
|
unstash 'gluon-x86-64-factory'
|
||||||
|
sh label: 'Unpack image', script: 'gunzip -cd ./output/images/factory/*x86-64*.img.gz > ./image.img'
|
||||||
|
sh label: 'Print python environment', script: 'python3 -m pip freeze'
|
||||||
|
script {
|
||||||
|
for (f in findFiles(glob: 'tests/*.py')) {
|
||||||
|
timeout(time: 10, unit: "MINUTES") {
|
||||||
|
sh label: "Test ${f.name}", script: "python3 tests/${f.name} --use-tmp-workdir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
api-history:
|
||||||
|
|
||||||
|
Every time the build dependencies of gluon change, the version
|
||||||
|
every container has to be rebuilt. Therefore, we use Jenkins
|
||||||
|
labels which intoduce a version number which is documented here.
|
||||||
|
As soon, as you properly rebuilt your docker container, you
|
||||||
|
can notify lemoer, that you have updated your node.
|
||||||
|
|
||||||
|
- gluon-docker-v1:
|
||||||
|
- add shellcheck binary to the build environment
|
||||||
|
- gluon-docker-v2:
|
||||||
|
- add qemu-testlab testing, requires KVM virtualization support
|
||||||
|
- require rsync dependency to be able to build the next branch
|
||||||
|
- gluon-vmx
|
||||||
|
- splits the qemu testing from the gluon-docker-v2 label to accomodate
|
||||||
|
nodes without the vmx cpu flag
|
||||||
|
*/
|
33
contrib/ci/jenkins-community-slave/Dockerfile
Normal file
33
contrib/ci/jenkins-community-slave/Dockerfile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
FROM gluonmesh/build:latest
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
# this is needed to install default-jre-headless in debian slim images
|
||||||
|
RUN mkdir -p /usr/share/man/man1
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y default-jre-headless curl git netcat-openbsd python3 python3-pip qemu-system-x86 iproute2 openssh-client rsync
|
||||||
|
RUN python3 -m pip install jenkins-webapi sphinx sphinx_rtd_theme gluon-qemu-testlab==0.0.5
|
||||||
|
|
||||||
|
# Get docker-compose in the agent container
|
||||||
|
RUN mkdir -p /home/jenkins
|
||||||
|
RUN mkdir -p /var/lib/jenkins
|
||||||
|
RUN mkdir -p /remoting
|
||||||
|
RUN chown gluon /home/jenkins
|
||||||
|
RUN chown gluon /var/lib/jenkins
|
||||||
|
RUN chown gluon /remoting
|
||||||
|
|
||||||
|
# Start-up script to attach the slave to the master
|
||||||
|
ADD slave.py /var/lib/jenkins/slave.py
|
||||||
|
|
||||||
|
USER gluon
|
||||||
|
|
||||||
|
WORKDIR /home/jenkins
|
||||||
|
|
||||||
|
ENV JENKINS_URL "https://build.ffh.zone/"
|
||||||
|
ENV JENKINS_SLAVE_ADDRESS ""
|
||||||
|
ENV SLAVE_EXECUTORS "1"
|
||||||
|
ENV SLAVE_LABELS "docker"
|
||||||
|
ENV SLAVE_WORING_DIR ""
|
||||||
|
ENV CLEAN_WORKING_DIR "true"
|
||||||
|
|
||||||
|
CMD [ "python3", "-u", "/var/lib/jenkins/slave.py" ]
|
41
contrib/ci/jenkins-community-slave/README.md
Normal file
41
contrib/ci/jenkins-community-slave/README.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Gluon CI using Jenkins
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
- Linux system
|
||||||
|
- with docker installed
|
||||||
|
- with Hardware Virtualisation (KVM Support)
|
||||||
|
- Verify using: `lscpu | grep vmx`
|
||||||
|
- If machine is virtualized host needs to load `kvm_intel` with `nested=1` option and cpuflags need to include `vmx`
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
![Screenshot from 2019-09-24 00-20-32](https://user-images.githubusercontent.com/601153/65468827-9edf2c80-de65-11e9-9fe0-56c3487719c3.png)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
You can support the gluon CI with your infrastructure:
|
||||||
|
1. You need to query @lemoer (freifunk@irrelefant.net) for credentials.
|
||||||
|
2. He will give you a `SLAVE_NAME` and a `SLAVE_SECRET` for your host.
|
||||||
|
3. Then go to your docker host and substitute the values for `SLAVE_NAME` and a `SLAVE_SECRET` in the following statements:
|
||||||
|
``` shell
|
||||||
|
git clone https://github.com/freifunk-gluon/gluon/
|
||||||
|
cd gluon/contrib/ci/jenkins-community-slave/
|
||||||
|
docker build -t gluon-jenkins .
|
||||||
|
mkdir /var/cache/openwrt_dl_cache/
|
||||||
|
chown 1000:1000 /var/cache/openwrt_dl_cache
|
||||||
|
echo "z /dev/kvm 0666 - kvm -" > /etc/tmpfiles.d/kvm.conf
|
||||||
|
systemd-tmpfiles --create
|
||||||
|
docker run --detach --restart always \
|
||||||
|
--env "SLAVE_NAME=whoareyou" \
|
||||||
|
--env "SLAVE_SECRET=changeme" \
|
||||||
|
--device /dev/kvm:/dev/kvm \
|
||||||
|
--volume /var/cache/openwrt_dl_cache/:/dl_cache \
|
||||||
|
gluon-jenkins
|
||||||
|
```
|
||||||
|
4. Check whether the instance is running correctly:
|
||||||
|
- Your node should appear [here](https://build.ffh.zone/label/gluon-docker/).
|
||||||
|
- When clicking on it, Jenkins should state "Agent is connected." like here:
|
||||||
|
![Screenshot from 2019-09-24 01-00-52](https://user-images.githubusercontent.com/601153/65469209-dac6c180-de66-11e9-9d62-0d1c3b6b940b.png)
|
||||||
|
5. **Your docker container needs to be rebuilt, when the build dependencies of gluon change. As soon as build dependencies have changed, the build dependency api level has to be raised.** After you rebuilt your docker container, notify @lemoer, so he can bump the versioning number.
|
||||||
|
|
||||||
|
## Backoff
|
||||||
|
- If @lemoer is not reachable, please be patient at first if possible. Otherwise contact info@hannover.freifunk.net or join the channel `#freifunkh` on hackint.
|
103
contrib/ci/jenkins-community-slave/slave.py
Normal file
103
contrib/ci/jenkins-community-slave/slave.py
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
from jenkins import Jenkins, JenkinsError, NodeLaunchMethod
|
||||||
|
import os
|
||||||
|
import signal
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import shutil
|
||||||
|
import requests
|
||||||
|
import time
|
||||||
|
|
||||||
|
slave_jar = '/var/lib/jenkins/slave.jar'
|
||||||
|
slave_name = os.environ['SLAVE_NAME'] if os.environ['SLAVE_NAME'] != '' else 'docker-slave-' + os.environ['HOSTNAME']
|
||||||
|
jnlp_url = os.environ['JENKINS_URL'] + '/computer/' + slave_name + '/slave-agent.jnlp'
|
||||||
|
slave_jar_url = os.environ['JENKINS_URL'] + '/jnlpJars/slave.jar'
|
||||||
|
print(slave_jar_url)
|
||||||
|
process = None
|
||||||
|
|
||||||
|
def clean_dir(dir):
|
||||||
|
for root, dirs, files in os.walk(dir):
|
||||||
|
for f in files:
|
||||||
|
os.unlink(os.path.join(root, f))
|
||||||
|
for d in dirs:
|
||||||
|
shutil.rmtree(os.path.join(root, d))
|
||||||
|
|
||||||
|
def slave_create(node_name, working_dir, executors, labels):
|
||||||
|
j = Jenkins(os.environ['JENKINS_URL'], os.environ['JENKINS_USER'], os.environ['JENKINS_PASS'])
|
||||||
|
j.node_create(node_name, working_dir, num_executors = int(executors), labels = labels, launcher = NodeLaunchMethod.JNLP)
|
||||||
|
|
||||||
|
def slave_delete(node_name):
|
||||||
|
j = Jenkins(os.environ['JENKINS_URL'], os.environ['JENKINS_USER'], os.environ['JENKINS_PASS'])
|
||||||
|
j.node_delete(node_name)
|
||||||
|
|
||||||
|
def slave_download(target):
|
||||||
|
if os.path.isfile(slave_jar):
|
||||||
|
os.remove(slave_jar)
|
||||||
|
|
||||||
|
r = requests.get(os.environ['JENKINS_URL'] + '/jnlpJars/slave.jar')
|
||||||
|
with open('/var/lib/jenkins/slave.jar', 'wb') as f:
|
||||||
|
f.write(r.content)
|
||||||
|
|
||||||
|
def slave_run(slave_jar, jnlp_url):
|
||||||
|
params = [ 'java', '-jar', slave_jar, '-jnlpUrl', jnlp_url ]
|
||||||
|
if os.environ['JENKINS_SLAVE_ADDRESS'] != '':
|
||||||
|
params.extend([ '-connectTo', os.environ['JENKINS_SLAVE_ADDRESS' ] ])
|
||||||
|
|
||||||
|
if os.environ['SLAVE_SECRET'] == '':
|
||||||
|
params.extend([ '-jnlpCredentials', os.environ['JENKINS_USER'] + ':' + os.environ['JENKINS_PASS'] ])
|
||||||
|
else:
|
||||||
|
params.extend([ '-secret', os.environ['SLAVE_SECRET'] ])
|
||||||
|
return subprocess.Popen(params, stdout=subprocess.PIPE)
|
||||||
|
|
||||||
|
def signal_handler(sig, frame):
|
||||||
|
if process != None:
|
||||||
|
process.send_signal(signal.SIGINT)
|
||||||
|
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
signal.signal(signal.SIGTERM, signal_handler)
|
||||||
|
|
||||||
|
def h():
|
||||||
|
print("ERROR!: please specify environment variables")
|
||||||
|
print("")
|
||||||
|
print('docker run -e "SLAVE_NAME=test" -e "SLAVE_SECRET=..." jenkins')
|
||||||
|
|
||||||
|
if os.environ.get('SLAVE_NAME') is None:
|
||||||
|
h()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if os.environ.get('SLAVE_SECRET') is None:
|
||||||
|
h()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def master_ready(url):
|
||||||
|
try:
|
||||||
|
r = requests.head(url, timeout=None)
|
||||||
|
return r.status_code == requests.codes.ok
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
while not master_ready(slave_jar_url):
|
||||||
|
print("Master not ready yet, sleeping for 10sec!")
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
slave_download(slave_jar)
|
||||||
|
print('Downloaded Jenkins slave jar.')
|
||||||
|
|
||||||
|
if os.environ['SLAVE_WORING_DIR']:
|
||||||
|
os.setcwd(os.environ['SLAVE_WORING_DIR'])
|
||||||
|
|
||||||
|
if os.environ['CLEAN_WORKING_DIR'] == 'true':
|
||||||
|
clean_dir(os.getcwd())
|
||||||
|
print("Cleaned up working directory.")
|
||||||
|
|
||||||
|
if os.environ['SLAVE_NAME'] == '':
|
||||||
|
slave_create(slave_name, os.getcwd(), os.environ['SLAVE_EXECUTORS'], os.environ['SLAVE_LABELS'])
|
||||||
|
print('Created temporary Jenkins slave.')
|
||||||
|
|
||||||
|
process = slave_run(slave_jar, jnlp_url)
|
||||||
|
print('Started Jenkins slave with name "' + slave_name + '" and labels [' + os.environ['SLAVE_LABELS'] + '].')
|
||||||
|
process.wait()
|
||||||
|
|
||||||
|
print('Jenkins slave stopped.')
|
||||||
|
if os.environ['SLAVE_NAME'] == '':
|
||||||
|
slave_delete(slave_name)
|
||||||
|
print('Removed temporary Jenkins slave.')
|
@ -1,4 +1,4 @@
|
|||||||
-- This is an example site configuration for Gluon v2022.1
|
-- This is an example site configuration for Gluon v2018.2+
|
||||||
--
|
--
|
||||||
-- Take a look at the documentation located at
|
-- Take a look at the documentation located at
|
||||||
-- https://gluon.readthedocs.io/ for details.
|
-- https://gluon.readthedocs.io/ for details.
|
||||||
@ -10,7 +10,7 @@
|
|||||||
-- hostname_prefix = 'freifunk-',
|
-- hostname_prefix = 'freifunk-',
|
||||||
|
|
||||||
-- Name of the community.
|
-- Name of the community.
|
||||||
site_name = 'Continuous Integration',
|
site_name = 'Continious Integration',
|
||||||
|
|
||||||
-- Shorthand of the community.
|
-- Shorthand of the community.
|
||||||
site_code = 'ci',
|
site_code = 'ci',
|
||||||
@ -42,14 +42,10 @@
|
|||||||
-- Wireless channel.
|
-- Wireless channel.
|
||||||
channel = 1,
|
channel = 1,
|
||||||
|
|
||||||
-- ESSIDs used for client network.
|
-- ESSID used for client network.
|
||||||
ap = {
|
ap = {
|
||||||
ssid = 'gluon-ci-ssid',
|
ssid = 'gluon-ci-ssid',
|
||||||
-- disabled = true, -- (optional)
|
-- disabled = true, -- (optional)
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
mesh = {
|
mesh = {
|
||||||
@ -76,12 +72,6 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mesh = {
|
|
||||||
vxlan = true,
|
|
||||||
batman_adv = {
|
|
||||||
routing_algo = 'BATMAN_IV',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- The next node feature allows clients to always reach the node it is
|
-- The next node feature allows clients to always reach the node it is
|
||||||
-- connected to using a known IP address.
|
-- connected to using a known IP address.
|
||||||
@ -92,19 +82,16 @@
|
|||||||
ip6 = 'fd::1',
|
ip6 = 'fd::1',
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Options specific to routing protocols (optional)
|
mesh = {
|
||||||
-- mesh = {
|
vxlan = true,
|
||||||
-- Options specific to the batman-adv routing protocol (optional)
|
batman_adv = {
|
||||||
-- batman_adv = {
|
routing_algo = 'BATMAN_IV'
|
||||||
-- Gateway selection class (optional)
|
}
|
||||||
-- The default class 20 is based on the link quality (TQ) only,
|
},
|
||||||
-- class 1 is calculated from both the TQ and the announced bandwidth
|
|
||||||
-- gw_sel_class = 1,
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
|
|
||||||
mesh_vpn = {
|
mesh_vpn = {
|
||||||
-- enabled = true,
|
-- enabled = true,
|
||||||
|
mtu = 1312,
|
||||||
|
|
||||||
fastd = {
|
fastd = {
|
||||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
||||||
@ -112,7 +99,6 @@
|
|||||||
|
|
||||||
-- List of crypto-methods to use.
|
-- List of crypto-methods to use.
|
||||||
methods = {'salsa2012+umac'},
|
methods = {'salsa2012+umac'},
|
||||||
mtu = 1312,
|
|
||||||
-- configurable = true,
|
-- configurable = true,
|
||||||
-- syslog_level = 'warn',
|
-- syslog_level = 'warn',
|
||||||
|
|
||||||
@ -125,18 +111,7 @@
|
|||||||
peers = {
|
peers = {
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Optional: nested peer groups
|
|
||||||
-- groups = {
|
|
||||||
-- backbone_sub = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
},
|
||||||
-- Optional: additional peer groups, possibly with other limits
|
|
||||||
-- backbone2 = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -153,8 +128,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
autoupdater = {
|
autoupdater = {
|
||||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
-- Default branch. Don't forget to set GLUON_BRANCH when building!
|
||||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
|
||||||
branch = 'stable',
|
branch = 'stable',
|
||||||
|
|
||||||
-- List of branches. You may define multiple branches.
|
-- List of branches. You may define multiple branches.
|
||||||
@ -169,7 +143,7 @@
|
|||||||
-- Have multiple maintainers sign your build and only
|
-- Have multiple maintainers sign your build and only
|
||||||
-- accept it when a sufficient number of them have
|
-- accept it when a sufficient number of them have
|
||||||
-- signed it.
|
-- signed it.
|
||||||
good_signatures = 0,
|
good_signatures = 2,
|
||||||
|
|
||||||
-- List of public keys of maintainers.
|
-- List of public keys of maintainers.
|
||||||
pubkeys = {
|
pubkeys = {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../minimal-site/i18n
|
|
@ -1 +0,0 @@
|
|||||||
../minimal-site/modules
|
|
@ -1,176 +0,0 @@
|
|||||||
-- This is an example site configuration for Gluon v2022.1
|
|
||||||
--
|
|
||||||
-- Take a look at the documentation located at
|
|
||||||
-- https://gluon.readthedocs.io/ for details.
|
|
||||||
--
|
|
||||||
-- This configuration will not work as is. You're required to make
|
|
||||||
-- community specific changes to it!
|
|
||||||
{
|
|
||||||
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
|
|
||||||
-- hostname_prefix = 'freifunk-',
|
|
||||||
|
|
||||||
-- Name of the community.
|
|
||||||
site_name = 'Continuous Integration',
|
|
||||||
|
|
||||||
-- Shorthand of the community.
|
|
||||||
site_code = 'ci',
|
|
||||||
|
|
||||||
-- 32 bytes of random data, encoded in hexadecimal
|
|
||||||
-- This data must be unique among all sites and domains!
|
|
||||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
|
||||||
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
|
|
||||||
|
|
||||||
-- Prefixes used by clients within the mesh.
|
|
||||||
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
|
||||||
-- is not set.
|
|
||||||
prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
|
||||||
|
|
||||||
-- Prefixes used by nodes within the mesh
|
|
||||||
node_prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
|
||||||
|
|
||||||
-- Timezone of your community.
|
|
||||||
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
|
|
||||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
|
||||||
|
|
||||||
-- List of NTP servers in your community.
|
|
||||||
-- Must be reachable using IPv6!
|
|
||||||
-- ntp_servers = {'1.ntp.services.ffxx'},
|
|
||||||
|
|
||||||
-- Wireless regulatory domain of your community.
|
|
||||||
regdom = 'DE',
|
|
||||||
|
|
||||||
-- Wireless configuration for 2.4 GHz interfaces.
|
|
||||||
wifi24 = {
|
|
||||||
-- Wireless channel.
|
|
||||||
channel = 1,
|
|
||||||
|
|
||||||
-- ESSIDs used for client network.
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
|
||||||
mcast_rate = 12000,
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Wireless configuration for 5 GHz interfaces.
|
|
||||||
-- This should be equal to the 2.4 GHz variant, except
|
|
||||||
-- for channel.
|
|
||||||
wifi5 = {
|
|
||||||
channel = 44,
|
|
||||||
outdoor_chanlist = '100-140',
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp',
|
|
||||||
mcast_rate = 12000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
-- The next node feature allows clients to always reach the node it is
|
|
||||||
-- connected to using a known IP address.
|
|
||||||
next_node = {
|
|
||||||
-- anycast IPs of all nodes
|
|
||||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
|
||||||
ip4 = '10.0.0.1',
|
|
||||||
ip6 = 'fd::1',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Options specific to routing protocols (optional)
|
|
||||||
mesh = {
|
|
||||||
vxlan = true,
|
|
||||||
olsrd = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh_vpn = {
|
|
||||||
-- enabled = true,
|
|
||||||
|
|
||||||
fastd = {
|
|
||||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
|
||||||
-- what these options do.
|
|
||||||
|
|
||||||
-- List of crypto-methods to use.
|
|
||||||
methods = {'salsa2012+umac'},
|
|
||||||
mtu = 1312,
|
|
||||||
-- configurable = true,
|
|
||||||
-- syslog_level = 'warn',
|
|
||||||
|
|
||||||
groups = {
|
|
||||||
backbone = {
|
|
||||||
-- Limit number of connected peers to reduce bandwidth.
|
|
||||||
limit = 1,
|
|
||||||
|
|
||||||
-- List of peers.
|
|
||||||
peers = {
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Optional: nested peer groups
|
|
||||||
-- groups = {
|
|
||||||
-- backbone_sub = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
-- Optional: additional peer groups, possibly with other limits
|
|
||||||
-- backbone2 = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
bandwidth_limit = {
|
|
||||||
-- The bandwidth limit can be enabled by default here.
|
|
||||||
enabled = false,
|
|
||||||
|
|
||||||
-- Default upload limit (kbit/s).
|
|
||||||
egress = 200,
|
|
||||||
|
|
||||||
-- Default download limit (kbit/s).
|
|
||||||
ingress = 3000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
autoupdater = {
|
|
||||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
|
||||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
|
||||||
branch = 'stable',
|
|
||||||
|
|
||||||
-- List of branches. You may define multiple branches.
|
|
||||||
branches = {
|
|
||||||
stable = {
|
|
||||||
name = 'stable',
|
|
||||||
|
|
||||||
-- List of mirrors to fetch images from. IPv6 required!
|
|
||||||
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
|
|
||||||
|
|
||||||
-- Number of good signatures required.
|
|
||||||
-- Have multiple maintainers sign your build and only
|
|
||||||
-- accept it when a sufficient number of them have
|
|
||||||
-- signed it.
|
|
||||||
good_signatures = 0,
|
|
||||||
|
|
||||||
-- List of public keys of maintainers.
|
|
||||||
pubkeys = {
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
## gluon site.mk makefile example
|
|
||||||
|
|
||||||
## GLUON_FEATURES
|
|
||||||
# Specify Gluon features/packages to enable;
|
|
||||||
# Gluon will automatically enable a set of packages
|
|
||||||
# depending on the combination of features listed
|
|
||||||
|
|
||||||
GLUON_FEATURES := \
|
|
||||||
autoupdater \
|
|
||||||
ebtables-filter-multicast \
|
|
||||||
ebtables-filter-ra-dhcp \
|
|
||||||
ebtables-limit-arp \
|
|
||||||
mesh-olsrd \
|
|
||||||
mesh-vpn-fastd \
|
|
||||||
respondd \
|
|
||||||
status-page \
|
|
||||||
web-advanced \
|
|
||||||
web-wizard
|
|
||||||
|
|
||||||
GLUON_FEATURES_standard := \
|
|
||||||
wireless-encryption-wpa3
|
|
||||||
|
|
||||||
## GLUON_SITE_PACKAGES
|
|
||||||
# Specify additional Gluon/OpenWrt packages to include here;
|
|
||||||
# A minus sign may be prepended to remove a packages from the
|
|
||||||
# selection that would be enabled by default or due to the
|
|
||||||
# chosen feature flags
|
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := iwinfo
|
|
||||||
|
|
||||||
## DEFAULT_GLUON_RELEASE
|
|
||||||
# version string to use for images
|
|
||||||
# gluon relies on
|
|
||||||
# opkg compare-versions "$1" '>>' "$2"
|
|
||||||
# to decide if a version is newer or not.
|
|
||||||
|
|
||||||
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
|
||||||
|
|
||||||
# Variables set with ?= can be overwritten from the command line
|
|
||||||
|
|
||||||
## GLUON_RELEASE
|
|
||||||
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
|
||||||
# e.g.:
|
|
||||||
# $ make images GLUON_RELEASE=23.42+5
|
|
||||||
# would generate images named like this:
|
|
||||||
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
|
||||||
|
|
||||||
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
|
||||||
|
|
||||||
# Default priority for updates.
|
|
||||||
GLUON_PRIORITY ?= 0
|
|
||||||
|
|
||||||
# Region code required for some images; supported values: us eu
|
|
||||||
GLUON_REGION ?= eu
|
|
||||||
|
|
||||||
# Languages to include
|
|
||||||
GLUON_LANGS ?= en de
|
|
@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
||||||
|
|
||||||
@ARGV >= 1 || die "Usage: $0 <source directory>\n";
|
@ARGV >= 1 || die "Usage: $0 <source direcory>\n";
|
||||||
|
|
||||||
|
|
||||||
my %stringtable;
|
my %stringtable;
|
||||||
|
@ -28,7 +28,7 @@ fi
|
|||||||
|
|
||||||
pushd "$(dirname "$0")/.." >/dev/null
|
pushd "$(dirname "$0")/.." >/dev/null
|
||||||
|
|
||||||
find ./package packages -name Makefile | grep -v '^packages/packages/' | while read -r makefile; do
|
find ./package packages -name Makefile | while read -r makefile; do
|
||||||
dir="$(dirname "$makefile")"
|
dir="$(dirname "$makefile")"
|
||||||
|
|
||||||
pushd "$dir" >/dev/null
|
pushd "$dir" >/dev/null
|
||||||
@ -37,12 +37,13 @@ find ./package packages -name Makefile | grep -v '^packages/packages/' | while r
|
|||||||
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
||||||
package="$(basename "$dir")"
|
package="$(basename "$dir")"
|
||||||
|
|
||||||
for file in "${SUFFIX1}"/* "${SUFFIX2}"/*; do
|
for file in "${SUFFIX1}"/*; do
|
||||||
basename="$(basename "${file}")"
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX1})"
|
||||||
suffix="$(dirname "${file}")"
|
done
|
||||||
printf "%s\t%s\n" "${basename}" "${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${suffix}/${GREEN}${basename}${RESET}"
|
for file in "${SUFFIX2}"/*; do
|
||||||
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX2})"
|
||||||
done
|
done
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
done | sort | cut -f2-
|
done | sort
|
||||||
|
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
@ -1,149 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
topdir="$(realpath "$(dirname "${0}")/../openwrt")"
|
|
||||||
|
|
||||||
# defaults to qemu run script
|
|
||||||
ssh_host=localhost
|
|
||||||
build_only=0
|
|
||||||
preserve_config=1
|
|
||||||
|
|
||||||
print_help() {
|
|
||||||
echo "$0 [OPTIONS] PACAKGE_DIR [PACKAGE_DIR] ..."
|
|
||||||
echo ""
|
|
||||||
echo " -h print this help"
|
|
||||||
echo " -r HOST use a remote machine as target machine. By default if this"
|
|
||||||
echo " option is not given, push_pkg.sh will use a locally"
|
|
||||||
echo " running qemu instance started by run_qemu.sh."
|
|
||||||
echo " -p PORT use PORT as ssh port (default is 22)"
|
|
||||||
echo " -b build only, do not push"
|
|
||||||
echo " -P do not preserve /etc/config. By default, if a package"
|
|
||||||
echo " defines a config file in /etc/config, this config file"
|
|
||||||
echo " will be preserved. If you specify this flag, the package"
|
|
||||||
echo " default will be installed instead."
|
|
||||||
echo ""
|
|
||||||
echo ' To change gluon variables, run e.g. "make config GLUON_MINIFY=0"'
|
|
||||||
echo ' because then the gluon logic will be triggered, and openwrt/.config'
|
|
||||||
echo ' will be regenerated. The variables from openwrt/.config are already'
|
|
||||||
echo ' automatically used for this script.'
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts "p:r:hbP" opt
|
|
||||||
do
|
|
||||||
case $opt in
|
|
||||||
P) preserve_config=0;;
|
|
||||||
p) ssh_port="${OPTARG}";;
|
|
||||||
r) ssh_host="${OPTARG}"; [ -z "$ssh_port" ] && ssh_port=22;;
|
|
||||||
b) build_only=1;;
|
|
||||||
h) print_help; exit 0;;
|
|
||||||
*) ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(( OPTIND - 1 ))
|
|
||||||
|
|
||||||
[ -z "$ssh_port" ] && ssh_port=2223
|
|
||||||
|
|
||||||
if [ "$build_only" -eq 0 ]; then
|
|
||||||
remote_info=$(ssh -p "${ssh_port}" "root@${ssh_host}" '
|
|
||||||
source /etc/os-release
|
|
||||||
printf "%s\\t%s\\n" "$OPENWRT_BOARD" "$OPENWRT_ARCH"
|
|
||||||
')
|
|
||||||
REMOTE_OPENWRT_BOARD="$(echo "$remote_info" | cut -f 1)"
|
|
||||||
REMOTE_OPENWRT_ARCH="$(echo "$remote_info" | cut -f 2)"
|
|
||||||
|
|
||||||
# check target
|
|
||||||
if ! grep -q "CONFIG_TARGET_ARCH_PACKAGES=\"${REMOTE_OPENWRT_ARCH}\"" "${topdir}/.config"; then
|
|
||||||
echo "Configured OpenWrt Target is not matching with the target machine!" 1>&2
|
|
||||||
echo
|
|
||||||
printf "%s" " Configured architecture: " 1>&2
|
|
||||||
grep "CONFIG_TARGET_ARCH_PACKAGES" "${topdir}/.config" 1>&2
|
|
||||||
echo "Target machine architecture: ${REMOTE_OPENWRT_ARCH}" 1>&2
|
|
||||||
echo 1>&2
|
|
||||||
echo "To switch the local with the run with the corresponding GLUON_TARGET:" 1>&2
|
|
||||||
echo " make GLUON_TARGET=... config" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
echo ERROR: Please specify a PACKAGE_DIR. For example:
|
|
||||||
echo
|
|
||||||
echo " \$ $0 package/gluon-core"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
|
|
||||||
pkgdir="$1"; shift
|
|
||||||
echo "Package: ${pkgdir}"
|
|
||||||
|
|
||||||
if ! [ -f "${pkgdir}/Makefile" ]; then
|
|
||||||
echo "ERROR: ${pkgdir} does not contain a Makefile"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! grep -q BuildPackage "${pkgdir}/Makefile"; then
|
|
||||||
echo "ERROR: ${pkgdir}/Makefile does not contain a BuildPackage command"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
opkg_packages="$(make TOPDIR="${topdir}" -C "${pkgdir}" DUMP=1 | awk '/^Package: / { print $2 }')"
|
|
||||||
|
|
||||||
search_package() {
|
|
||||||
find "$2" -name "$1_*.ipk" -printf '%f\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
make TOPDIR="${topdir}" -C "${pkgdir}" clean
|
|
||||||
make TOPDIR="${topdir}" -C "${pkgdir}" compile
|
|
||||||
|
|
||||||
if [ "$build_only" -eq 1 ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# IPv6 addresses need brackets around the ${ssh_host} for scp!
|
|
||||||
if echo "${ssh_host}" | grep -q :; then
|
|
||||||
BL=[
|
|
||||||
BR=]
|
|
||||||
fi
|
|
||||||
|
|
||||||
for pkg in ${opkg_packages}; do
|
|
||||||
|
|
||||||
for feed in "${topdir}/bin/packages/${REMOTE_OPENWRT_ARCH}/"*/ "${topdir}/bin/targets/${REMOTE_OPENWRT_BOARD}/packages/"; do
|
|
||||||
printf "%s" "searching ${pkg} in ${feed}: "
|
|
||||||
filename=$(search_package "${pkg}" "${feed}")
|
|
||||||
if [ -n "${filename}" ]; then
|
|
||||||
echo found!
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo not found
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$preserve_config" -eq 0 ]; then
|
|
||||||
opkg_flags=" --force-maintainer"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# shellcheck disable=SC2029
|
|
||||||
if [ -n "$filename" ]; then
|
|
||||||
scp -O -P "${ssh_port}" "$feed/$filename" "root@${BL}${ssh_host}${BR}:/tmp/${filename}"
|
|
||||||
ssh -p "${ssh_port}" "root@${ssh_host}" "
|
|
||||||
set -e
|
|
||||||
echo Running opkg:
|
|
||||||
opkg install --force-reinstall ${opkg_flags} '/tmp/${filename}'
|
|
||||||
rm '/tmp/${filename}'
|
|
||||||
gluon-reconfigure
|
|
||||||
"
|
|
||||||
else
|
|
||||||
# Some packages (e.g. procd-seccomp) seem to contain BuildPackage commands
|
|
||||||
# which do not generate *.ipk files. Till this point, I am not aware why
|
|
||||||
# this is happening. However, dropping a warning if the corresponding
|
|
||||||
# *.ipk is not found (maybe due to other reasons as well), seems to
|
|
||||||
# be more reasonable than aborting. Before this commit, the command
|
|
||||||
# has failed.
|
|
||||||
echo "Warning: ${pkg}*.ipk not found! Ignoring." 1>&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Note: You can exit the qemu instance by first pressing "CTRL + a" then "c".
|
|
||||||
# Then you enter the command mode of qemu and can exit by typing "quit".
|
|
||||||
|
|
||||||
qemu-system-x86_64 \
|
|
||||||
-d 'cpu_reset' \
|
|
||||||
-enable-kvm \
|
|
||||||
-gdb tcp::1234 \
|
|
||||||
-nographic \
|
|
||||||
-netdev user,id=wan,hostfwd=tcp::2223-10.0.2.15:22 \
|
|
||||||
-device virtio-net-pci,netdev=wan,addr=0x06,id=nic1 \
|
|
||||||
-netdev user,id=lan,hostfwd=tcp::6080-192.168.1.1:80,hostfwd=tcp::2222-192.168.1.1:22,net=192.168.1.100/24 \
|
|
||||||
-device virtio-net-pci,netdev=lan,addr=0x05,id=nic2 \
|
|
||||||
"$@"
|
|
@ -29,22 +29,11 @@ lower="$(mktemp)"
|
|||||||
|
|
||||||
trap 'rm -f "$upper" "$lower"' EXIT
|
trap 'rm -f "$upper" "$lower"' EXIT
|
||||||
|
|
||||||
awk 'BEGIN {
|
awk 'BEGIN { sep=0 }
|
||||||
sep = 0
|
/^---$/ { sep=1; next }
|
||||||
}
|
{ if(sep==0) print > "'"$upper"'";
|
||||||
|
else print > "'"$lower"'"}' \
|
||||||
/^---$/ {
|
"$manifest"
|
||||||
sep = 1;
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
if(sep == 0) {
|
|
||||||
print > "'"$upper"'"
|
|
||||||
} else {
|
|
||||||
print > "'"$lower"'"
|
|
||||||
}
|
|
||||||
}' "$manifest"
|
|
||||||
|
|
||||||
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
||||||
|
|
||||||
|
@ -21,22 +21,11 @@ upper="$(mktemp)"
|
|||||||
lower="$(mktemp)"
|
lower="$(mktemp)"
|
||||||
ret=1
|
ret=1
|
||||||
|
|
||||||
awk 'BEGIN {
|
awk "BEGIN { sep=0 }
|
||||||
sep = 0
|
/^---\$/ { sep=1; next }
|
||||||
}
|
{ if(sep==0) print > \"$upper\";
|
||||||
|
else print > \"$lower\"}" \
|
||||||
/^---$/ {
|
"$manifest"
|
||||||
sep = 1;
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
if(sep == 0) {
|
|
||||||
print > "'"$upper"'"
|
|
||||||
} else {
|
|
||||||
print > "'"$lower"'"
|
|
||||||
}
|
|
||||||
}' "$manifest"
|
|
||||||
|
|
||||||
while read -r line
|
while read -r line
|
||||||
do
|
do
|
||||||
|
35
docs/_static/css/custom.css
vendored
35
docs/_static/css/custom.css
vendored
@ -8,3 +8,38 @@
|
|||||||
.rst-content div[class^='highlight'] pre {
|
.rst-content div[class^='highlight'] pre {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
This fixes the bottom margin of paragraphs inside lists, where margins inside
|
||||||
|
a single list item would incorrectly be displayed larger than margins between
|
||||||
|
the list items.
|
||||||
|
|
||||||
|
Upstream fix (not fixed on readthedocs.io yet):
|
||||||
|
https://github.com/readthedocs/sphinx_rtd_theme/commit/ac20ce75d426efeb40fe2af1f89ea9bad285a45b
|
||||||
|
*/
|
||||||
|
.rst-content .section ol li > p,
|
||||||
|
.rst-content .section ol li > p:last-child,
|
||||||
|
.rst-content .section ul li > p,
|
||||||
|
.rst-content .section ul li > p:last-child {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
.rst-content .section ol li > p:only-child,
|
||||||
|
.rst-content .section ol li > p:only-child:last-child,
|
||||||
|
.rst-content .section ul li > p:only-child,
|
||||||
|
.rst-content .section ul li > p:only-child:last-child {
|
||||||
|
margin-bottom: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This fixes the bottom margin of nested lists
|
||||||
|
|
||||||
|
Based on upstream fix (not on readthedocs.io yet):
|
||||||
|
https://github.com/readthedocs/sphinx_rtd_theme/commit/6f0de13baff93f25204aa2cdf0308aae47d71312
|
||||||
|
*/
|
||||||
|
.rst-content .section ul li > ul,
|
||||||
|
.rst-content .section ul li > ol,
|
||||||
|
.rst-content .section ol li > ul,
|
||||||
|
.rst-content .section ol li > ol {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
13
docs/conf.py
13
docs/conf.py
@ -20,11 +20,11 @@
|
|||||||
# -- Project information -----------------------------------------------------
|
# -- Project information -----------------------------------------------------
|
||||||
|
|
||||||
project = 'Gluon'
|
project = 'Gluon'
|
||||||
copyright = 'Project Gluon'
|
copyright = '2015-2021, Project Gluon'
|
||||||
author = 'Project Gluon'
|
author = 'Project Gluon'
|
||||||
|
|
||||||
# The short X.Y version
|
# The short X.Y version
|
||||||
version = '2022.1'
|
version = '2021.1'
|
||||||
# The full version, including alpha/beta/rc tags
|
# The full version, including alpha/beta/rc tags
|
||||||
release = version
|
release = version
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ master_doc = 'index'
|
|||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = 'en'
|
language = None
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
@ -71,13 +71,6 @@ pygments_style = None
|
|||||||
# Don't highlight code blocks unless requested explicitly
|
# Don't highlight code blocks unless requested explicitly
|
||||||
highlight_language = 'none'
|
highlight_language = 'none'
|
||||||
|
|
||||||
# Ignore links to the config mode, as well as anchors on on hackint, which are
|
|
||||||
# used to mark channel names and do not exist. Regular links are not effected.
|
|
||||||
linkcheck_ignore = [
|
|
||||||
'http://192.168.1.1',
|
|
||||||
'https://webirc.hackint.org/#'
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@ webbrowser. You're welcome to join us!
|
|||||||
.. _hackint: https://hackint.org/
|
.. _hackint: https://hackint.org/
|
||||||
.. _webchat: https://webirc.hackint.org/#irc://irc.hackint.org/#gluon
|
.. _webchat: https://webirc.hackint.org/#irc://irc.hackint.org/#gluon
|
||||||
|
|
||||||
.. _working-with-repositories:
|
|
||||||
|
|
||||||
Working with repositories
|
Working with repositories
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -57,7 +56,7 @@ commits, making `git reflog` the only way to recover them!
|
|||||||
|
|
||||||
make refresh-patches
|
make refresh-patches
|
||||||
|
|
||||||
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt build system.
|
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt buildsystem.
|
||||||
|
|
||||||
This command speeds up the maintenance of updating OpenWrt and feeds.
|
This command speeds up the maintenance of updating OpenWrt and feeds.
|
||||||
|
|
||||||
@ -77,7 +76,7 @@ apply:
|
|||||||
- use tabs instead of spaces
|
- use tabs instead of spaces
|
||||||
- trailing whitespaces must be eliminated
|
- trailing whitespaces must be eliminated
|
||||||
- files need to end with a final newline
|
- files need to end with a final newline
|
||||||
- newlines need to have Unix line endings (lf)
|
- newlines need to have unix line endings (lf)
|
||||||
|
|
||||||
To that end we provide a ``.editorconfig`` configuration, which is supported by most
|
To that end we provide a ``.editorconfig`` configuration, which is supported by most
|
||||||
of the editors out there.
|
of the editors out there.
|
||||||
|
@ -88,17 +88,3 @@ update.sh
|
|||||||
source and installs it into *packages/* directory. It simply tries to set the *base*
|
source and installs it into *packages/* directory. It simply tries to set the *base*
|
||||||
branch of the cloned repo to the correct commit. If this fails it fetches the
|
branch of the cloned repo to the correct commit. If this fails it fetches the
|
||||||
upstream branch and tries again to set the local *base* branch.
|
upstream branch and tries again to set the local *base* branch.
|
||||||
|
|
||||||
getversion.sh
|
|
||||||
Used to determine the version numbers of the repositories of Gluon and the
|
|
||||||
site configuration, to be included in the built firmware images as
|
|
||||||
*/lib/gluon/gluon-version* and */lib/gluon/site-version*.
|
|
||||||
|
|
||||||
By default, this uses ``git describe`` to generate a version number based
|
|
||||||
on the last git tag. This can be overridden by putting a file called
|
|
||||||
*.scmversion* into the root of the respective repositories.
|
|
||||||
|
|
||||||
A command like ``rm -f .scmversion; echo "$(./scripts/getversion.sh .)" > .scmversion``
|
|
||||||
can be used before applying local patches to ensure that the reported
|
|
||||||
version numbers refer to an upstream commit ID rather than an arbitrary
|
|
||||||
local one after ``git am``.
|
|
||||||
|
@ -45,7 +45,7 @@ Some more information on how to use this tool can be found at
|
|||||||
Obtaining Stacktraces
|
Obtaining Stacktraces
|
||||||
.....................
|
.....................
|
||||||
|
|
||||||
On many targets stack traces can be read from the following
|
On many targets stacktraces can be read from the following
|
||||||
location after reboot: ::
|
location after reboot: ::
|
||||||
|
|
||||||
/sys/kernel/debug/crashlog
|
/sys/kernel/debug/crashlog
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Adding hardware support
|
Adding support for new hardware
|
||||||
=======================
|
===============================
|
||||||
This page will give a short overview on how to add support
|
This page will give a short overview on how to add support
|
||||||
for new hardware to Gluon.
|
for new hardware to Gluon.
|
||||||
|
|
||||||
@ -7,232 +7,155 @@ Hardware requirements
|
|||||||
---------------------
|
---------------------
|
||||||
Having an ath9k, ath10k or mt76 based WLAN adapter is highly recommended,
|
Having an ath9k, ath10k or mt76 based WLAN adapter is highly recommended,
|
||||||
although other chipsets may also work. VAP (multiple SSID) support
|
although other chipsets may also work. VAP (multiple SSID) support
|
||||||
with simultaneous AP + Mesh Point (802.11s) operation is required.
|
is a requirement.
|
||||||
|
|
||||||
Device checklist
|
|
||||||
----------------
|
|
||||||
The description of pull requests adding device support must include the
|
|
||||||
`device integration checklist
|
|
||||||
<https://github.com/freifunk-gluon/gluon/wiki/Device-Integration-checklist>`_.
|
|
||||||
The checklist ensures that core functionality of Gluon is well supported on the
|
|
||||||
device.
|
|
||||||
|
|
||||||
.. _device-class-definition:
|
.. _device-class-definition:
|
||||||
|
|
||||||
|
Device checklist
|
||||||
|
----------------
|
||||||
|
Pull requests adding device support must have the device checklist
|
||||||
|
included in their description. The checklist assures core functionality
|
||||||
|
of Gluon is well supported on the device.
|
||||||
|
|
||||||
|
The checklist can be found in the `wiki <https://github.com/freifunk-gluon/gluon/wiki/Device-Integration-checklist>`_.
|
||||||
|
|
||||||
Device classes
|
Device classes
|
||||||
--------------
|
--------------
|
||||||
All supported hardware is categorized into "device classes". This allows to
|
Gluon currently is aware of two device classes. Depending on the device class, different
|
||||||
adjust the feature set of Gluon to the different hardware's capabilities via
|
features can be installed onto the device.
|
||||||
``site.mk`` without having to list individual devices.
|
|
||||||
|
|
||||||
There are currently two devices classes defined: "standard" and "tiny". The
|
The ``tiny`` device-class contains devices with the following limitations:
|
||||||
"tiny" class contains all devices that do not meet the following requirements:
|
|
||||||
|
|
||||||
- At least 7 MiB of usable firmware space
|
* All devices with less than 64 MB of system memory
|
||||||
- At least 64 MiB of RAM (128MiB for devices with ath10k radio)
|
* All devices with less than 7 MB of usable firmware space
|
||||||
|
* Devices using a single ath10k radio and less than 128MB of system memory
|
||||||
|
|
||||||
Target configuration
|
.. _hardware-adding-profiles:
|
||||||
--------------------
|
|
||||||
Gluon's hardware support is based on OpenWrt's. For each supported target,
|
|
||||||
a configuration file exists at ``targets/<target>-<subtarget>`` (or just
|
|
||||||
``target/<target>`` for targets without subtargets) that contains all
|
|
||||||
Gluon-specific settings for the target. The generic configuration
|
|
||||||
``targets/generic`` contains settings that affect all targets.
|
|
||||||
|
|
||||||
All targets must be listed in ``target/targets.mk``.
|
Adding profiles
|
||||||
|
---------------
|
||||||
|
The vast majority of devices with ath9k WLAN are based on the ath79 target of OpenWrt.
|
||||||
|
If the hardware you want to add support for is ath79, adding a new profile
|
||||||
|
is sufficient.
|
||||||
|
|
||||||
The target configuration language is based on Lua, so Lua's syntax for variables
|
Profiles are defined in ``targets/*`` in a shell-based DSL (so common shell
|
||||||
and control structures can be used.
|
command syntax like ``if`` can be used).
|
||||||
|
|
||||||
Device definitions
|
The ``device`` command is used to define an image build for a device. It takes
|
||||||
~~~~~~~~~~~~~~~~~~
|
two or three parameters.
|
||||||
To configure a device to be built for Gluon, the ``device`` function is used.
|
|
||||||
In the simplest case, only two arguments are passed, for example:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
The first parameter defines the Gluon profile name, which is used to refer to the
|
||||||
|
device and is part of the generated image name. The profile name must be same as
|
||||||
|
the output of the following command (on the target device), so the autoupdater
|
||||||
|
can work::
|
||||||
|
|
||||||
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
|
lua -e 'print(require("platform_info").get_image_name())'
|
||||||
|
|
||||||
The first argument is the device name in Gluon, which is part of the output
|
While porting Gluon to a new device, it might happen that the profile name is
|
||||||
image filename, and must correspond to the model string looked up by the
|
unknown. Best practise is to generate an image first by using an arbitrary value
|
||||||
autoupdater. The second argument is the corresponding device profile name in
|
and then executing the lua command on the device and use its output from then on.
|
||||||
OpenWrt, as found in ``openwrt/target/linux/<target>/image/*``.
|
|
||||||
|
|
||||||
A table of additional settings can be passed as a third argument:
|
The second parameter defines the name of the image files generated by OpenWrt. Usually,
|
||||||
|
it is also the OpenWrt profile name; for devices that still use the old image build
|
||||||
|
code, a third parameter with the OpenWrt profile name can be passed. The profile names
|
||||||
|
can be found in the image Makefiles in ``openwrt/target/linux/<target>/image/Makefile``.
|
||||||
|
|
||||||
.. code-block:: lua
|
Examples::
|
||||||
|
|
||||||
device('ubiquiti-edgerouter-x', 'ubnt_edgerouter-x', {
|
device tp-link-tl-wr1043n-nd-v1 tl-wr1043nd-v1
|
||||||
factory = false,
|
device alfa-network-hornet-ub hornet-ub HORNETUB
|
||||||
packages = {'-hostapd-mini'},
|
|
||||||
manifest_aliases = {
|
|
||||||
'ubnt-erx',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
The supported additional settings are described in the following sections.
|
|
||||||
|
|
||||||
Suffixes and extensions
|
Suffixes and extensions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
'''''''''''''''''''''''
|
||||||
For many targets, OpenWrt generates images with the suffixes
|
|
||||||
``-squashfs-factory.bin`` and ``-squashfs-sysupgrade.bin``. For devices with
|
|
||||||
different image names, is it possible to override the suffixes and extensions
|
|
||||||
using the settings ``factory``, ``factory_ext``, ``sysupgrade`` and
|
|
||||||
``sysupgrade_ext``, for example:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
By default, image files are expected to have the extension ``.bin``. In addition,
|
||||||
|
the images generated by OpenWrt have a suffix before the extension that defaults to
|
||||||
|
``-squashfs-factory`` and ``-squashfs-sysupgrade``.
|
||||||
|
|
||||||
{
|
This can be changed using the ``factory`` and ``sysupgrade`` commands, either at
|
||||||
factory = '-squashfs-combined',
|
the top of the file to set the defaults for all images, or for a single image. There
|
||||||
factory_ext = '.img.gz',
|
are three forms with 0 to 2 arguments (all work with ``sysupgrade`` as well)::
|
||||||
sysupgrade = '-squashfs-combined',
|
|
||||||
sysupgrade_ext = '.img.gz',
|
|
||||||
}
|
|
||||||
|
|
||||||
Only settings that differ from the defaults need to be passed. ``factory`` and
|
factory SUFFIX .EXT
|
||||||
``sysupgrade`` can be set to ``false`` when no such images exist.
|
factory .EXT
|
||||||
|
factory
|
||||||
|
|
||||||
For some device types, there are multiple factory images with different
|
When only an extension is given, the default suffix is retained. When no arguments
|
||||||
extensions. ``factory_ext`` can be set to a table of strings to account for this
|
are given, this signals that no factory (or sysupgrade) image exists.
|
||||||
case:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
Aliases
|
||||||
|
'''''''
|
||||||
|
|
||||||
{
|
Sometimes multiple models use the same OpenWrt images. In this case, the ``alias``
|
||||||
factory_ext = {'.img.gz', '.vmdk', '.vdi'},
|
command can be used to create symlinks and additional entries in the autoupdater
|
||||||
}
|
manifest for the alternative models.
|
||||||
|
|
||||||
TODO: Extra images
|
Standalone images
|
||||||
|
'''''''''''''''''
|
||||||
|
|
||||||
Aliases and manifest aliases
|
On targets without *per-device rootfs* support in OpenWrt, the commands described above
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used::
|
||||||
Sometimes multiple devices exist that use the same OpenWrt images. To make it
|
|
||||||
easier to find these images, the ``aliases`` setting can be used to define
|
|
||||||
additional device names. Gluon will create symlinks for these names in the
|
|
||||||
image output directory.
|
|
||||||
|
|
||||||
.. code-block:: lua
|
factory_image PROFILE IMAGE .EXT
|
||||||
|
sysupgrade_image PROFILE IMAGE .EXT
|
||||||
|
|
||||||
device('aruba-ap-303', 'aruba_ap-303', {
|
Again, the profile name must match the value printed by the aforementioned Lua
|
||||||
factory = false,
|
command. The image name must match the part between the target name and the extension
|
||||||
aliases = {'aruba-instant-on-ap11'},
|
as generated by OpenWrt and is to be omitted when no such part exists.
|
||||||
})
|
|
||||||
|
|
||||||
The aliased name will also be added to the autoupdate manifest, allowing upgrade
|
Packages
|
||||||
images to be found under the different name on targets that perform model name
|
''''''''
|
||||||
detection at runtime.
|
|
||||||
|
|
||||||
It is also possible to add alternative names to the autoupdater manifest without
|
The ``packages`` command takes an arbitrary number of arguments. Each argument
|
||||||
creating a symlink by using ``manifest_aliases`` instead of ``aliases``, which
|
defines an additional package to include in the images in addition to the default
|
||||||
should be done when the alternative name does not refer to a separate device.
|
package sets defined by OpenWrt. When a package name is prefixed by a minus sign, the
|
||||||
This is particularly useful to allow the autoupdater to work when the model name
|
packages are excluded instead.
|
||||||
changed between Gluon versions.
|
|
||||||
|
|
||||||
Package lists
|
The ``packages`` command may be used at the top of a target definition to modify
|
||||||
~~~~~~~~~~~~~
|
the default package list for all images, or just for a single device (when the
|
||||||
Gluon generates lists of packages that are installed in all images based on a
|
target supports *per-default rootfs*).
|
||||||
default list and the features and packages specified in the site configuration.
|
|
||||||
|
|
||||||
In addition, OpenWrt defines additional per-device package lists. These lists
|
|
||||||
may be modified in Gluon's device definitions, for example to include additional
|
|
||||||
drivers and firmware, or to remove unneeded software. Packages to remove are
|
|
||||||
prefixed with a ``-`` character.
|
|
||||||
|
|
||||||
For many ath10k-based devices, this is used to replace the "CT" variant of
|
Configuration
|
||||||
ath10k with the mainline-based version:
|
'''''''''''''
|
||||||
|
|
||||||
.. code-block:: lua
|
The ``config`` command allows to add arbitrary target-specific OpenWrt configuration
|
||||||
|
to be emitted to ``.config``.
|
||||||
|
|
||||||
local ATH10K_PACKAGES_QCA9880 = {
|
Notes
|
||||||
'kmod-ath10k',
|
'''''
|
||||||
'-kmod-ath10k-ct',
|
|
||||||
'-kmod-ath10k-ct-smallbuffers',
|
|
||||||
'ath10k-firmware-qca988x',
|
|
||||||
'-ath10k-firmware-qca988x-ct',
|
|
||||||
}
|
|
||||||
device('openmesh-a40', 'openmesh_a40', {
|
|
||||||
packages = ATH10K_PACKAGES_QCA9880,
|
|
||||||
factory = false,
|
|
||||||
})
|
|
||||||
|
|
||||||
This example also shows how to define a local variable, allowing the package
|
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
||||||
list to be reused for multiple devices.
|
configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which
|
||||||
|
can be found on a label on most hardware; if it does not, ``/lib/gluon/upgrade/010-primary-mac``
|
||||||
|
in ``gluon-core`` might need a fix. (There have also been cases in which the address was incorrect
|
||||||
|
even on devices with only one WLAN adapter, in these cases a OpenWrt bug was the cause).
|
||||||
|
|
||||||
Device flags
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The settings ``class``, ``deprecated`` or ``broken`` should be set according to
|
Adding support for new hardware targets
|
||||||
the device support status. The default values are as follows:
|
---------------------------------------
|
||||||
|
|
||||||
.. code-block:: lua
|
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
||||||
|
required for adding a new target:
|
||||||
|
|
||||||
{
|
Package adjustments
|
||||||
class = 'standard',
|
'''''''''''''''''''
|
||||||
deprecated = false,
|
|
||||||
broken = false,
|
|
||||||
}
|
|
||||||
|
|
||||||
- Device classes are described in :ref:`device-class-definition`
|
One package that may need adjustments for new targets is ``libplatforminfo`` (to be found in
|
||||||
- Broken devices are untested or do not meet our requirements as given by the
|
`packages/gluon/libs/libplatforminfo <https://github.com/freifunk-gluon/packages/tree/master/libs/libplatforminfo>`_).
|
||||||
device checklist
|
If the new platform works fine with the definitions found in ``default.c``, nothing needs to be done. Otherwise,
|
||||||
- Deprecated devices are slated for removal in a future Gluon version due to
|
create a definition for the added target or subtarget, either by symlinking one of the files in the ``templates``
|
||||||
hardware constraints
|
directory, or adding a new source file.
|
||||||
|
|
||||||
Global settings
|
On many targets, Gluon's network setup scripts (mainly in the package ``gluon-core``)
|
||||||
~~~~~~~~~~~~~~~
|
won't run correctly without some adjustments, so better double check that everything is fine there (and the files
|
||||||
There is a number of directives that can be used outside of a ``device()``
|
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
||||||
definition:
|
|
||||||
|
|
||||||
- ``include('filename')``: Include another file with global settings
|
Build system support
|
||||||
- ``config(key, value)``: Set a config symbol in OpenWrt's ``.config``. Value
|
''''''''''''''''''''
|
||||||
may be a string, number, boolean, or nil. Booleans and nil are used for
|
|
||||||
tristate symbols, where nil sets the symbol to ``m``.
|
|
||||||
- ``try_config(key, value)``: Like ``config()``, but do not fail if setting
|
|
||||||
the symbol is not possible (usually because its dependencies are not met)
|
|
||||||
- ``packages { 'package1', '-package2', ... }``: Define a list of packages to
|
|
||||||
add or remove for all devices of a target. Package lists passed to multiple
|
|
||||||
calls of ``packages`` will be aggregated.
|
|
||||||
- ``defaults { key = value, ... }``: Set default values for any of the
|
|
||||||
additional settings that can be passed to ``device()``.
|
|
||||||
|
|
||||||
Helper functions
|
A definition for the new target must be created under ``targets``, and it must be added
|
||||||
~~~~~~~~~~~~~~~~
|
to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to two arguments:
|
||||||
The following helpers can be used in the target configuration:
|
the target name and the OpenWrt subtarget name.
|
||||||
|
|
||||||
- ``env.KEY`` allows to access environment variables
|
After this, is should be sufficient to call ``make GLUON_TARGET=<target>`` to build the images for the new target.
|
||||||
- ``istrue(value)`` returns true if the passed string is a positive number
|
|
||||||
(often used with ``env``, for example ``if istrue(env.GLUON_DEBUG) then ...``)
|
|
||||||
|
|
||||||
Hardware support in packages
|
|
||||||
----------------------------
|
|
||||||
In addition to the target configuration files, some device-specific changes may
|
|
||||||
be required in packages.
|
|
||||||
|
|
||||||
gluon-core
|
|
||||||
~~~~~~~~~~
|
|
||||||
- ``/lib/gluon/upgrade/010-primary-mac``: Override primary MAC address selection
|
|
||||||
|
|
||||||
Usually, the primary (label) MAC address is defined in OpenWrt's Device Trees.
|
|
||||||
For devices or targets where this is not the case, it is possible to specify
|
|
||||||
what interface to take the primary MAC address from in ``010-primary-mac``.
|
|
||||||
|
|
||||||
- ``/lib/gluon/upgrade/020-interfaces``: Override LAN/WAN interface assignment
|
|
||||||
|
|
||||||
On PoE-powered devices, the PoE input port should be "WAN".
|
|
||||||
|
|
||||||
- ``/usr/lib/lua/gluon/platform.lua``: Contains a list of outdoor devices
|
|
||||||
|
|
||||||
gluon-setup-mode
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
- ``/lib/gluon/upgrade/320-setup-ifname``: Contains a list of devices that use
|
|
||||||
the WAN port for the config mode
|
|
||||||
|
|
||||||
On PoE-powered devices, the PoE input port should be used for the config
|
|
||||||
mode. This is handled correctly by default for outdoor devices listed in
|
|
||||||
``platform.lua``.
|
|
||||||
|
|
||||||
libplatforminfo
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
When adding support for a new target to Gluon, it may be necessary to adjust
|
|
||||||
libplatforminfo to define how autoupdater image names are derived from the
|
|
||||||
model name.
|
|
||||||
|
@ -3,88 +3,6 @@ Package development
|
|||||||
|
|
||||||
Gluon packages are OpenWrt packages and follow the same rules described at https://openwrt.org/docs/guide-developer/packages.
|
Gluon packages are OpenWrt packages and follow the same rules described at https://openwrt.org/docs/guide-developer/packages.
|
||||||
|
|
||||||
Development workflow
|
|
||||||
====================
|
|
||||||
|
|
||||||
When you are developing packages, it often happens that you iteratively want to deploy
|
|
||||||
and verify the state your development. There are two ways to verify your changes:
|
|
||||||
|
|
||||||
1)
|
|
||||||
One way is to rebuild the complete firmware, flash it, configure it and verify your
|
|
||||||
development then. This usually takes at least a few minutes to get your changes
|
|
||||||
working so you can test them. Especially if you iterate a lot, this becomes tedious.
|
|
||||||
|
|
||||||
2)
|
|
||||||
Another way is to rebuild only the package you are currently working on and
|
|
||||||
to deploy this package to your test system. Here not even a reboot is required.
|
|
||||||
This makes iterating relatively fast. Your test system could be real hardware or
|
|
||||||
even a qemu in most cases.
|
|
||||||
|
|
||||||
Gluon provides scripts to enhance workflow 2). Here is an example illustrating
|
|
||||||
the workflow using these scripts:
|
|
||||||
|
|
||||||
.. code-block:: shell
|
|
||||||
|
|
||||||
# start a local qemu instance
|
|
||||||
contrib/run_qemu.sh output/images/factory/[...]-x86-64.img
|
|
||||||
|
|
||||||
# apply changes to the desired package
|
|
||||||
vi package/gluon-ebtables/files/etc/init.d/gluon-ebtables
|
|
||||||
|
|
||||||
# rebuild and push the package to the qemu instance
|
|
||||||
contrib/push_pkg.sh package/gluon-ebtables/
|
|
||||||
|
|
||||||
# test your changes
|
|
||||||
...
|
|
||||||
|
|
||||||
# do more changes
|
|
||||||
...
|
|
||||||
|
|
||||||
# rebuild and push the package to the qemu instance
|
|
||||||
contrib/push_pkg.sh package/gluon-ebtables/
|
|
||||||
|
|
||||||
# test your changes
|
|
||||||
...
|
|
||||||
|
|
||||||
(and so on...)
|
|
||||||
|
|
||||||
# see help of the script for more information
|
|
||||||
contrib/push_pkg.sh -h
|
|
||||||
...
|
|
||||||
|
|
||||||
Features of ``push_pkg.sh``:
|
|
||||||
|
|
||||||
* Works with compiled and non-compiled packages.
|
|
||||||
|
|
||||||
* This means it can be used in the development of C-code, Lua-Code and mostly any other code.
|
|
||||||
|
|
||||||
* Works with native OpenWrt and Gluon packages.
|
|
||||||
* Pushes to remote machines or local qemu instances.
|
|
||||||
* Pushes multiple packages in in one call if desired.
|
|
||||||
* Performs site.conf checks.
|
|
||||||
|
|
||||||
Implementation details of ``push_pkg.sh``:
|
|
||||||
|
|
||||||
* First, the script builds an opkg package using the OpenWrt build system.
|
|
||||||
* This package is pushed to a *target machine* using scp:
|
|
||||||
|
|
||||||
* By default the *target machine* is a locally running x86 qemu started using ``run_qemu.sh``.
|
|
||||||
* The *target machine* can also be remote machine. (See the cli switch ``-r``)
|
|
||||||
* Remote machines are not limited to a specific architecture. All architectures supported by gluon can be used as remote machines.
|
|
||||||
|
|
||||||
* Finally opkg is used to install/update the packages in the target machine.
|
|
||||||
|
|
||||||
* While doing this, it will not override ``/etc/config`` with package defaults by default. (See the cli switch ``-P``).
|
|
||||||
* While doing this, opkg calls the ``check_site.lua`` from the package as post_install script to validate the ``site.conf``. This means that the ``site.conf`` of the target machine is used for this validation.
|
|
||||||
|
|
||||||
Note that:
|
|
||||||
|
|
||||||
* ``push_pkg.sh`` does neither build nor push dependencies of the packages automatically. If you want to update dependencies, you must explicitly specify them to be pushed.
|
|
||||||
* If you add new packages, you must run ``make update config GLUON_TARGET=...``.
|
|
||||||
* You can change the gluon target of the target machine via ``make config GLUON_TARGET=...``.
|
|
||||||
* If you want to update the ``site.conf`` of the target machine, use ``push_pkg.sh package/gluon-site/``.
|
|
||||||
* Sometimes when things break, you can heal them by compiling a package with its dependencies: ``cd openwrt; make package/gluon-ebtables/clean; make package/gluon-ebtables/compile; cd ..``.
|
|
||||||
* You can exit qemu by pressing ``CTRL + a`` and ``c`` afterwards.
|
|
||||||
|
|
||||||
Gluon package makefiles
|
Gluon package makefiles
|
||||||
=======================
|
=======================
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Uplink support
|
WAN support
|
||||||
==============
|
===========
|
||||||
|
|
||||||
As the WAN port of a node will be connected to a user's private network, it
|
As the WAN port of a node will be connected to a user's private network, it
|
||||||
is essential that the node only uses the WAN when it is absolutely necessary.
|
is essential that the node only uses the WAN when it is absolutely necessary.
|
||||||
@ -11,12 +11,11 @@ There are two cases in which the WAN port is used:
|
|||||||
After the VPN connection has been established, the node should be able to reach
|
After the VPN connection has been established, the node should be able to reach
|
||||||
the mesh's DNS servers and use these for all other name resolution.
|
the mesh's DNS servers and use these for all other name resolution.
|
||||||
|
|
||||||
If a device has only a single Ethernet port (or group of ports), it will be
|
If the device does not feature a WAN port, the LAN port is configured as WAN port.
|
||||||
used as an uplink port even when it is not labelled as "WAN" by default. This
|
In case such a device has multiple LAN ports, all these can be used as WAN.
|
||||||
behavior can be controlled using the ``interfaces.single.default_roles``
|
Devices, which feature a "hybrid" port (labelled as WAN/LAN), this port is used as WAN.
|
||||||
site.conf option. It is also possible to alter the interface assignment after
|
|
||||||
installation by modifying ``/etc/config/gluon`` and running
|
This behavior can be reversed using the ``single_as_lan`` site.conf option.
|
||||||
``gluon-reconfigure``.
|
|
||||||
|
|
||||||
Routing tables
|
Routing tables
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
@ -74,7 +74,8 @@ Useful functions:
|
|||||||
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
|
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
|
||||||
the client. Has no effect when non-header data has already been written.
|
the client. Has no effect when non-header data has already been written.
|
||||||
- *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
|
- *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
|
||||||
type
|
type, potentially setting additional headers or modifying the MIME type to
|
||||||
|
accommodate browser quirks
|
||||||
- *write* (*data*, ...): Sends the given data to the client. If headers have not
|
- *write* (*data*, ...): Sends the given data to the client. If headers have not
|
||||||
been sent, it will be done before the data is written.
|
been sent, it will be done before the data is written.
|
||||||
|
|
||||||
|
@ -18,9 +18,6 @@ Config Mode by pressing and holding the RESET/WPS/DECT button for about three
|
|||||||
seconds. The device should reboot (all LEDs will turn off briefly) and
|
seconds. The device should reboot (all LEDs will turn off briefly) and
|
||||||
Config Mode will be available.
|
Config Mode will be available.
|
||||||
|
|
||||||
If you have access to the console of the node, there is the
|
|
||||||
``gluon-enter-setup-mode`` command, which reboots a node into Config Mode.
|
|
||||||
|
|
||||||
|
|
||||||
Port Configuration
|
Port Configuration
|
||||||
------------------
|
------------------
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
DNS caching
|
|
||||||
===========
|
|
||||||
|
|
||||||
User experience may be greatly improved when dns is accelerated. Also, it
|
|
||||||
seems like a good idea to keep the number of packages being exchanged
|
|
||||||
between node and gateway as small as possible. In order to do this, a
|
|
||||||
DNS cache may be used on a node. The dnsmasq instance listening on port
|
|
||||||
53 on the node will be reconfigured to answer requests, use a list of
|
|
||||||
upstream servers and a specific cache size if the options listed below are
|
|
||||||
added to site.conf. Upstream servers are the DNS servers which are normally
|
|
||||||
used by the nodes to resolve hostnames (e.g. gateways/supernodes).
|
|
||||||
|
|
||||||
There are the following settings:
|
|
||||||
servers
|
|
||||||
cacheentries
|
|
||||||
|
|
||||||
To use the node's DNS server, both options should be set. The node will cache at
|
|
||||||
most 'cacheentries' many DNS records in RAM. The 'servers' list will be used to
|
|
||||||
resolve the received DNS queries if the request cannot be answered from
|
|
||||||
cache. Gateways should announce the "next node" address via DHCP and RDNSS (if
|
|
||||||
any). Note that not setting 'servers' here will lead to DNS not working: Once
|
|
||||||
the gateways all announce the "next node" address for DNS, there is no way for
|
|
||||||
nodes to automatically determine DNS servers. They have to be baked into the
|
|
||||||
firmware.
|
|
||||||
|
|
||||||
If these settings do not exist, the cache is not initialized and RAM usage will
|
|
||||||
not increase.
|
|
||||||
|
|
||||||
When next_node.name is set, an A record and an AAAA record for the
|
|
||||||
next-node IP address are placed in the dnsmasq configuration. This means that
|
|
||||||
the content of next_node.name may be resolved even without upstream connectivity.
|
|
||||||
It is suggested to use the same name as the DNS server provides:
|
|
||||||
e.g. nextnode.location.community.example.org (This way the name also works if a
|
|
||||||
client uses static DNS Servers). Hint: If next_node.name does not contain a dot
|
|
||||||
some browsers would open the searchpage instead.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
dns = {
|
|
||||||
cacheentries = 5000,
|
|
||||||
servers = { '2001:db8::1', },
|
|
||||||
},
|
|
||||||
|
|
||||||
next_node = {
|
|
||||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
|
||||||
ip6 = '2001:db8:8::1',
|
|
||||||
ip4 = '198.51.100.1',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Each cache entry will occupy about 90 bytes of RAM.
|
|
26
docs/features/dns-forwarder.rst
Normal file
26
docs/features/dns-forwarder.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
DNS forwarder
|
||||||
|
=============
|
||||||
|
|
||||||
|
A Gluon node can be configured to act as a DNS forwarder. Requests for the
|
||||||
|
next-node hostname(s) can be answered locally, without querying the upstream
|
||||||
|
resolver.
|
||||||
|
|
||||||
|
**Note:** While this reduces answer time and allows to use the next-node
|
||||||
|
hostname without upstream connectivity, this feature should not be used for
|
||||||
|
next-node hostnames that are FQDN when the zone uses DNSSEC.
|
||||||
|
|
||||||
|
One or more upstream resolvers can be configured in the *dns.servers* setting.
|
||||||
|
When *next_node.name* is set, A and/or AAAA records for the next-node IP
|
||||||
|
addresses are placed in the dnsmasq configuration.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
dns = {
|
||||||
|
servers = { '2001:db8::1', },
|
||||||
|
},
|
||||||
|
|
||||||
|
next_node = {
|
||||||
|
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
||||||
|
ip6 = '2001:db8:8::1',
|
||||||
|
ip4 = '198.51.100.1',
|
||||||
|
}
|
@ -47,7 +47,7 @@ installed. Please note that at least one alfred daemon is required to run as
|
|||||||
|
|
||||||
.. _alfred-json: https://github.com/ffnord/alfred-json
|
.. _alfred-json: https://github.com/ffnord/alfred-json
|
||||||
|
|
||||||
The following data types are used:
|
The following datatypes are used:
|
||||||
|
|
||||||
* `nodeinfo`: 158
|
* `nodeinfo`: 158
|
||||||
* `statistics`: 159
|
* `statistics`: 159
|
||||||
|
@ -130,7 +130,9 @@ site.conf only variables
|
|||||||
- authorized_keys
|
- authorized_keys
|
||||||
- default_domain
|
- default_domain
|
||||||
- poe_passthrough
|
- poe_passthrough
|
||||||
- interfaces.*.default_roles
|
- mesh_on_wan
|
||||||
|
- mesh_on_lan
|
||||||
|
- single_as_lan
|
||||||
- setup_mode.skip
|
- setup_mode.skip
|
||||||
- autoupdater.branch
|
- autoupdater.branch
|
||||||
- mesh_vpn.enabled
|
- mesh_vpn.enabled
|
||||||
@ -186,7 +188,7 @@ domain.conf only variables
|
|||||||
- ``true``, ``false``
|
- ``true``, ``false``
|
||||||
- ``{ 'foo', 'bar' }``
|
- ``{ 'foo', 'bar' }``
|
||||||
|
|
||||||
- Because each domain is considered a separate layer 2 network, these
|
- Because each domain is considered as an own layer 2 network, these
|
||||||
values should be different in each domain:
|
values should be different in each domain:
|
||||||
|
|
||||||
- next_node.ip4
|
- next_node.ip4
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Private WLAN
|
Private WLAN
|
||||||
============
|
============
|
||||||
|
|
||||||
It is possible to set up a private WLAN that bridges the uplink port and is separated from the mesh network.
|
It is possible to set up a private WLAN that bridges the WAN port and is separated from the mesh network.
|
||||||
Please note that you should not enable Wired Mesh on the uplink port at the same time.
|
Please note that you should not enable ``mesh_on_wan`` simultaneously.
|
||||||
|
|
||||||
The private WLAN is encrypted using WPA2 by default. On devices with enough flash and a supported radio,
|
The private WLAN is encrypted using WPA2 by default. On devices with enough flash and a supported radio,
|
||||||
WPA3 or WPA2/WPA3 mixed-mode can be used instead of WPA2. For this to work, the ``wireless-encryption-wpa3``
|
WPA3 or WPA2/WPA3 mixed-mode can be used instead of WPA2. For this to work, the ``wireless-encryption-wpa3``
|
||||||
|
@ -1,212 +1,57 @@
|
|||||||
Mesh VPN
|
Mesh-VPN
|
||||||
========
|
========
|
||||||
|
|
||||||
Gluon integrates several layer 2 tunneling protocols to
|
Gluon integrates several OSI-Layer 2 tunneling protocols to
|
||||||
allow connections between local meshes through the internet.
|
enable interconnects between local meshes and provide
|
||||||
|
internetwork access. Available protocols currently are:
|
||||||
|
|
||||||
Protocol handlers
|
- fastd
|
||||||
^^^^^^^^^^^^^^^^^
|
- L2TPv3 (via tunneldigger)
|
||||||
|
|
||||||
There are currently three protocol handlers which can be selected
|
fastd is a lightweight userspace tunneling daemon, that
|
||||||
via ``GLUON_FEATURES`` in ``site.mk``:
|
|
||||||
|
|
||||||
mesh-vpn-fastd
|
|
||||||
""""""""""""""
|
|
||||||
|
|
||||||
fastd is a lightweight userspace tunneling daemon that
|
|
||||||
implements cipher suites that are specifically designed
|
implements cipher suites that are specifically designed
|
||||||
to work well on embedded devices. It offers encryption
|
to work well on embedded devices. It offers encryption
|
||||||
and authentication.
|
and authentication. Its primary drawback are the necessary
|
||||||
The primary drawback of fastd's encrypted connection modes
|
context-switches when forwarding packets.
|
||||||
is the necessary context switches when forwarding packets.
|
|
||||||
A kernel-supported L2TPv3 offloading option is available to
|
|
||||||
work around the context-switching bottleneck, but it comes
|
|
||||||
at the cost of losing the ability to protect tunnel connections
|
|
||||||
against eavesdropping or manipulation.
|
|
||||||
|
|
||||||
mesh-vpn-tunneldigger
|
L2TPv3 is an in-kernel tunneling protocol that performs well,
|
||||||
"""""""""""""""""""""
|
but offers no security properties by itself.
|
||||||
|
The brokering of the tunnel happens through tunneldigger,
|
||||||
Tunneldigger always uses L2TPv3, generally achieving the same
|
its primary drawback being the lack of IPv6 support.
|
||||||
performance as fastd with the ``null@l2tp`` method, but offering
|
|
||||||
no security.
|
|
||||||
Tunneldigger's primary drawback is the lack of IPv6 support.
|
|
||||||
It also provides less configurability than fastd.
|
|
||||||
|
|
||||||
mesh-vpn-wireguard
|
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
WireGuard is an encrypted in-kernel tunneling protocol that
|
|
||||||
provides encrypted transmission and at the same time offers
|
|
||||||
high throughput.
|
|
||||||
|
|
||||||
fastd
|
fastd
|
||||||
^^^^^
|
-----
|
||||||
|
|
||||||
.. _VPN fastd methods:
|
Configurable Cipher
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
Methods
|
|
||||||
"""""""
|
|
||||||
|
|
||||||
fastd offers various different connection "methods" with different
|
|
||||||
security properties that can be configured in the site configuration.
|
|
||||||
|
|
||||||
The following methods are currently recommended:
|
|
||||||
|
|
||||||
- ``salsa2012+umac``: Encrypted + authenticated
|
|
||||||
- ``null+salsa2012+umac``: Unencrypted, authenticated
|
|
||||||
- ``null@l2tp``: Unencrypted, unauthenticated
|
|
||||||
|
|
||||||
Multiple methods can be listed in ``site.conf``. The first listed method
|
|
||||||
supported by both the node and its peer will be used.
|
|
||||||
|
|
||||||
The use of the ``null@l2tp`` method with offloading enabled can provide a
|
|
||||||
considerable performance gain, especially on weaker embedded hardware.
|
|
||||||
For L2TP offloading, the ``mesh-vpn-fastd-l2tp`` feature needs to be enabled in
|
|
||||||
``site.mk``.
|
|
||||||
|
|
||||||
|
|
||||||
.. _vpn-gateway-configuration:
|
From the site configuration fastd can be allowed to offer
|
||||||
|
|
||||||
Gateway / Supernode Configuration
|
|
||||||
"""""""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
When only using the ``null`` or ``null@l2tp`` methods without offloading,
|
|
||||||
simply add these methods to the front of the method list. ``null@l2tp``
|
|
||||||
should always appear before ``null`` in the configuration when both are enabled.
|
|
||||||
fastd v22 or newer is needed for the ``null@l2tp`` method.
|
|
||||||
|
|
||||||
It is often not necessary to enable L2TP offloading on supernodes for
|
|
||||||
performance reasons. Nodes using offloading can communicate with supernodes that
|
|
||||||
don't use offloading as long as both use the ``null@l2tp`` method.
|
|
||||||
|
|
||||||
|
|
||||||
.. _vpn-gateway-configuration-offloading:
|
|
||||||
|
|
||||||
Offloading on Gateways / Supernodes
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
To enable L2TP offloading on the supornodes, it is recommended to study the
|
|
||||||
fastd documentation section pertaining to the `offload configuration option
|
|
||||||
<https://fastd.readthedocs.io/en/stable/manual/config.html#option-offload>`_.
|
|
||||||
|
|
||||||
However, the important changes to the fastd config on your Supernode are:
|
|
||||||
|
|
||||||
- | Set ``mode multitap;``
|
|
||||||
| Every peer gets their own interface.
|
|
||||||
|
|
||||||
- | Replace ``interface "foo":`` with ``interface "peer-%k";``
|
|
||||||
| ``%k`` is substituted for a portion of the peers public key.
|
|
||||||
|
|
||||||
- | Set ``offload l2tp yes;``
|
|
||||||
| This tells fastd to use the l2tp kernel module.
|
|
||||||
|
|
||||||
- | Set ``persist interface no;``
|
|
||||||
| This tells fastd to only keep interfaces around while the connection is active.
|
|
||||||
|
|
||||||
Note that in ``multitap`` mode, which is required when using L2TP offloading,
|
|
||||||
fastd will create one interface per peer on the supernode's. This allows
|
|
||||||
offloading the L2TP forwarding into the kernel space. But this also means added
|
|
||||||
complexity with regards to handling those interfaces.
|
|
||||||
|
|
||||||
There are two main options on how you can handle this:
|
|
||||||
|
|
||||||
- create ``on up`` and ``on down`` hooks
|
|
||||||
|
|
||||||
- to handle interface setup and destruction
|
|
||||||
- preferably using the async keyword, so hooks are not blocking fastd
|
|
||||||
|
|
||||||
- use a daemon like systemd-networkd
|
|
||||||
|
|
||||||
Examples for both options can be found in the
|
|
||||||
`Wiki <https://github.com/freifunk-gluon/gluon/wiki/fastd-l2tp-offloading-on-supernodes>`_.
|
|
||||||
|
|
||||||
Configurable Method
|
|
||||||
"""""""""""""""""""
|
|
||||||
|
|
||||||
From the site configuration, fastd can be allowed to offer
|
|
||||||
toggleable encryption in the config mode with the intent to
|
toggleable encryption in the config mode with the intent to
|
||||||
increase throughput.
|
increase throughput, although in practice the gain is minimal.
|
||||||
|
|
||||||
There is also an older unprotected method ``null``. Use of the newer
|
**Site configuration:**
|
||||||
``null@l2tp`` method is generally recommended over ``null``, as the
|
|
||||||
performance gains provided by the latter (compared to the encrypted
|
|
||||||
and authenticated methods) are very small.
|
|
||||||
|
|
||||||
Site configuration
|
1) Add the feature ``web-mesh-vpn-fastd`` in ``site.mk``
|
||||||
~~~~~~~~~~~~~~~~~~
|
2) Set ``mesh_vpn.fastd.configurable = true`` in ``site.conf``
|
||||||
|
3) Optionally add ``null`` to the ``mesh_vpn.fastd.methods`` table if you want "Performance mode" as default (not recommended)
|
||||||
|
|
||||||
1)
|
**Gateway configuration:**
|
||||||
Add the feature ``web-mesh-vpn-fastd`` in ``site.mk``
|
|
||||||
2)
|
|
||||||
Set ``mesh_vpn.fastd.configurable = true`` in ``site.conf``
|
|
||||||
3)
|
|
||||||
Optionally, add ``null@l2tp`` to the ``mesh_vpn.fastd.methods`` table if you want
|
|
||||||
"Performance mode" as default (not recommended)
|
|
||||||
|
|
||||||
Config Mode
|
1) Prepend the ``null`` cipher in fastd's method list
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
|
|
||||||
|
**Config Mode:**
|
||||||
The resulting firmware will allow users to choose between secure (encrypted) and fast (unencrypted) transport.
|
The resulting firmware will allow users to choose between secure (encrypted) and fast (unencrypted) transport.
|
||||||
|
|
||||||
.. image:: fastd_mode.gif
|
.. image:: fastd_mode.gif
|
||||||
|
|
||||||
To confirm whether the correct cipher is being used, the log output
|
**Unix socket:**
|
||||||
of fastd can be checked using ``logread``.
|
To confirm whether the correct cipher is being used, fastd's unix
|
||||||
|
socket can be interrogated, after installing for example `socat`.
|
||||||
|
|
||||||
WireGuard
|
::
|
||||||
^^^^^^^^^
|
|
||||||
|
|
||||||
In order to support WireGuard in Gluon, a few technologies are glued together.
|
opkg update
|
||||||
|
opkg install socat
|
||||||
**VXLAN:** As Gluon typically relies on batman-adv, the Mesh VPN has to provide
|
socat - UNIX-CONNECT:/var/run/fastd.mesh_vpn.socket
|
||||||
OSI Layer 2 transport. But WireGuard is an OSI Layer 3 tunneling protocol, so
|
|
||||||
additional technology is necessary here. For this, we use VXLAN. In short, VXLAN
|
|
||||||
is a well-known technology to encapsulate ethernet packages into IP packages.
|
|
||||||
You can think of it as kind of similar to VLAN, but on a different layer. Here,
|
|
||||||
we use VXLAN to transport batman-adv traffic over WireGuard.
|
|
||||||
|
|
||||||
**wgpeerselector**: To connect all gluon nodes to each other, it is common to
|
|
||||||
create a topology where each gluon node is connected to one of the available
|
|
||||||
gateways via Mesh VPN respectively. To achieve this, the gluon node should be
|
|
||||||
able to select a random gateway to connect to. But such "random selection of a
|
|
||||||
peer" is not implemented in WireGuard by default. WireGuard only knows static
|
|
||||||
peers. Therefore the *wgpeerselector* has been developed. It randomly selects a
|
|
||||||
gateway, tries to establish a connection, and if it fails, tries to connect
|
|
||||||
to the next gateway. This approach has several advantages, such as load
|
|
||||||
balancing VPN connection attempts and avoiding problems with offline gateways.
|
|
||||||
More information about the wgpeerselector and its algorithm can be found
|
|
||||||
`here <https://github.com/freifunk-gluon/packages/blob/master/net/wgpeerselector/README.md>`__.
|
|
||||||
|
|
||||||
On the gluon node both VXLAN and the wgpeerselector are well integrated and no
|
|
||||||
explicit configuration of those tools is necessary, once the general WireGuard
|
|
||||||
support has been configured.
|
|
||||||
|
|
||||||
Attention must by paid to time synchronization. As WireGuard
|
|
||||||
performs checks on timestamps in order to avoid replay attacks, time must
|
|
||||||
be synchronized before the Mesh VPN connection is established. This means that
|
|
||||||
the NTP servers specified in your site.conf must be publicly available (and not
|
|
||||||
only through the mesh). Be aware that if you fail this, you may not directly see
|
|
||||||
negative effects. Only when a previously connected node reboots the effect
|
|
||||||
comes into play, as the gateway still knows about the old timestamp of the gluon
|
|
||||||
node.
|
|
||||||
|
|
||||||
gluon-mesh-vpn-key-translate
|
|
||||||
""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
Many communities already possess a collection of active fastd-keys when they
|
|
||||||
plan migrating their community to WireGuard.
|
|
||||||
These public keys known on the server-side can be derived into their WireGuard
|
|
||||||
equivalent using `gluon-mesh-vpn-key-translate <https://github.com/AiyionPrime/gluon-mesh-vpn-key-translate>`__.
|
|
||||||
The routers do the necessary reencoding of the private key seamlessly
|
|
||||||
when updating firmware from fastd to the WireGuard variant.
|
|
||||||
|
|
||||||
Gateway / Supernode Configuration
|
|
||||||
"""""""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
On the gateway side, a software called *wireguard-vxlan-glue* is necessary. It
|
|
||||||
is a small daemon that dynamically adds and removes forwarding rules for VXLAN
|
|
||||||
interfaces, so traffic is sent correctly into the WireGuard interface. Thereby
|
|
||||||
the forwarding rules are only installed if a client is connected, so
|
|
||||||
unnecessary traffic in the kernel is avoided. The source can be found
|
|
||||||
`here <https://github.com/freifunkh/wireguard-vxlan-glue/>`__.
|
|
||||||
|
@ -50,84 +50,38 @@ Configuration
|
|||||||
Both Mesh-on-WAN and Mesh-on-LAN can be configured on the "Network" page
|
Both Mesh-on-WAN and Mesh-on-LAN can be configured on the "Network" page
|
||||||
of the *Advanced settings* (if the package ``gluon-web-network`` is installed).
|
of the *Advanced settings* (if the package ``gluon-web-network`` is installed).
|
||||||
|
|
||||||
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by adding
|
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by
|
||||||
the ``mesh`` role to the ``interfaces.*.default_roles`` options in your
|
adding ``mesh_on_wan = true`` and ``mesh_on_lan = true`` to ``site.conf``.
|
||||||
:ref:`site.conf<user-site-interfaces>`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _wired-mesh-commandline:
|
|
||||||
|
|
||||||
Commandline
|
Commandline
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Starting with release 2022.1, the wired network configuration is rebuilt from ``/etc/config/gluon``
|
|
||||||
upon each ``gluon-reconfigure``.
|
|
||||||
Therefore the network configuration is overwritten at least with every firmware upgrade.
|
|
||||||
|
|
||||||
Every interface has a list of roles assigned to it which can be ``client``, ``mesh`` or ``uplink``.
|
|
||||||
|
|
||||||
When the client role is assigned to an interface in combination with other roles
|
|
||||||
(like 'client', 'mesh' in the Mesh-on-LAN example below), the other roles take
|
|
||||||
precedence, enabling mesh but not client in the previous example.
|
|
||||||
|
|
||||||
The setup/config-mode interface is every interface with the role ``client`` which makes removing
|
|
||||||
it from interfaces not only unnecessary, but generally unrecommended.
|
|
||||||
|
|
||||||
In order to make persistent changes to the router's configuration it's necessary to:
|
|
||||||
|
|
||||||
* change the sections in ``/etc/config/gluon`` e.g. using uci (see examples below)
|
|
||||||
* call ``gluon-reconfigure`` to re-generate ``/etc/config/network``
|
|
||||||
* apply the networking changes, either through executing ``service network restart`` or by performing a ``reboot``
|
|
||||||
|
|
||||||
Enable Mesh-on-WAN::
|
Enable Mesh-on-WAN::
|
||||||
|
|
||||||
uci add_list gluon.iface_wan.role='mesh'
|
uci set network.mesh_wan.disabled=0
|
||||||
uci commit gluon
|
uci commit network
|
||||||
|
|
||||||
Disable Mesh-on-WAN::
|
Disable Mesh-on-WAN::
|
||||||
|
|
||||||
uci del_list gluon.iface_wan.role='mesh'
|
uci set network.mesh_wan.disabled=1
|
||||||
uci commit gluon
|
uci commit network
|
||||||
|
|
||||||
Enable Mesh-on-LAN::
|
Enable Mesh-on-LAN::
|
||||||
|
|
||||||
uci add_list gluon.iface_lan.role='mesh'
|
uci set network.mesh_lan.disabled=0
|
||||||
uci commit gluon
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
|
uci del_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
Disable Mesh-on-LAN::
|
Disable Mesh-on-LAN::
|
||||||
|
|
||||||
uci del_list gluon.iface_lan.role='mesh'
|
uci set network.mesh_lan.disabled=1
|
||||||
uci commit gluon
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
|
uci add_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
For devices with a single interface, instead of `iface_lan` and `iface_wan` configuration is
|
Please note that this configuration has changed in Gluon 2016.1. Using
|
||||||
done with `iface_single`.
|
the old commands on 2016.1 and later will break the corresponding options
|
||||||
|
|
||||||
Enable Mesh-on-Single::
|
|
||||||
|
|
||||||
uci add_list gluon.iface_single.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Disable Mesh-on-Single::
|
|
||||||
|
|
||||||
uci del_list gluon.iface_single.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Furthermore it is possible to make use of 802.1Q VLAN.
|
|
||||||
The following statements would create a VLAN with id 8 on ``eth0`` and join the mesh network with it::
|
|
||||||
|
|
||||||
uci set gluon.iface_lan_vlan8=interface
|
|
||||||
uci set gluon.iface_lan_vlan8.name='eth0.8'
|
|
||||||
uci add_list gluon.iface_lan_vlan8.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Other VLAN-interfaces could be configured on the same parent interface in order to have
|
|
||||||
all three roles available on ``eth0`` without having them interfere with each other.
|
|
||||||
This feature comes in especially handy for the persistent configuration of virtual machines
|
|
||||||
as offloader for bigger installations.
|
|
||||||
|
|
||||||
A ``reboot`` is not sufficient to apply an altered configuration; calling ``gluon-reconfigure`` before is
|
|
||||||
mandatory in order for changes to take effect.
|
|
||||||
|
|
||||||
Please note that this configuration has changed in Gluon 2022.1. Using
|
|
||||||
the old commands on 2022.1 and later will break the corresponding options
|
|
||||||
in the *Advanced settings*.
|
in the *Advanced settings*.
|
||||||
|
@ -16,10 +16,10 @@ by the user). This means that it is not possible to enable or disable an existin
|
|||||||
configurations during upgrades.
|
configurations during upgrades.
|
||||||
|
|
||||||
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
||||||
configured in the site.conf. The channel width will be reset to Gluon's default. If you need to preserve
|
configured in the site.conf. If you need to preserve a user defined wifi channel during upgrades
|
||||||
these settings during upgrades you can configure this via the uci section ``gluon-core.wireless``::
|
you can configure this via the uci section ``gluon-core.wireless``::
|
||||||
|
|
||||||
uci set gluon.wireless.preserve_channels='1'
|
uci set gluon-core.@wireless[0].preserve_channels='1'
|
||||||
|
|
||||||
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
|
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
|
||||||
Therefore, the Outdoor mode settings won't be displayed in config mode.
|
Therefore, the Outdoor mode settings won't be displayed in config mode.
|
||||||
|
@ -14,7 +14,6 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
|
|||||||
user/supported_devices
|
user/supported_devices
|
||||||
user/x86
|
user/x86
|
||||||
user/faq
|
user/faq
|
||||||
user/mtu
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Features
|
:caption: Features
|
||||||
@ -25,7 +24,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
|
|||||||
features/wlan-configuration
|
features/wlan-configuration
|
||||||
features/private-wlan
|
features/private-wlan
|
||||||
features/wired-mesh
|
features/wired-mesh
|
||||||
features/dns-cache
|
features/dns-forwarder
|
||||||
features/monitoring
|
features/monitoring
|
||||||
features/multidomain
|
features/multidomain
|
||||||
features/authorized-keys
|
features/authorized-keys
|
||||||
@ -40,7 +39,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
|
|||||||
dev/hardware
|
dev/hardware
|
||||||
dev/packages
|
dev/packages
|
||||||
dev/upgrade
|
dev/upgrade
|
||||||
dev/uplink
|
dev/wan
|
||||||
dev/mac_addresses
|
dev/mac_addresses
|
||||||
dev/site_library
|
dev/site_library
|
||||||
dev/build
|
dev/build
|
||||||
@ -79,7 +78,60 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre
|
|||||||
:caption: Releases
|
:caption: Releases
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
releases/index
|
releases/v2021.1
|
||||||
|
releases/v2020.2.3
|
||||||
|
releases/v2020.2.2
|
||||||
|
releases/v2020.2.1
|
||||||
|
releases/v2020.2
|
||||||
|
releases/v2020.1.4
|
||||||
|
releases/v2020.1.3
|
||||||
|
releases/v2020.1.2
|
||||||
|
releases/v2020.1.1
|
||||||
|
releases/v2020.1
|
||||||
|
releases/v2019.1.3
|
||||||
|
releases/v2019.1.2
|
||||||
|
releases/v2019.1.1
|
||||||
|
releases/v2019.1
|
||||||
|
releases/v2018.2.4
|
||||||
|
releases/v2018.2.3
|
||||||
|
releases/v2018.2.2
|
||||||
|
releases/v2018.2.1
|
||||||
|
releases/v2018.2
|
||||||
|
releases/v2018.1.4
|
||||||
|
releases/v2018.1.3
|
||||||
|
releases/v2018.1.2
|
||||||
|
releases/v2018.1.1
|
||||||
|
releases/v2018.1
|
||||||
|
releases/v2017.1.8
|
||||||
|
releases/v2017.1.7
|
||||||
|
releases/v2017.1.6
|
||||||
|
releases/v2017.1.5
|
||||||
|
releases/v2017.1.4
|
||||||
|
releases/v2017.1.3
|
||||||
|
releases/v2017.1.2
|
||||||
|
releases/v2017.1.1
|
||||||
|
releases/v2017.1
|
||||||
|
releases/v2016.2.7
|
||||||
|
releases/v2016.2.6
|
||||||
|
releases/v2016.2.5
|
||||||
|
releases/v2016.2.4
|
||||||
|
releases/v2016.2.3
|
||||||
|
releases/v2016.2.2
|
||||||
|
releases/v2016.2.1
|
||||||
|
releases/v2016.2
|
||||||
|
releases/v2016.1.6
|
||||||
|
releases/v2016.1.5
|
||||||
|
releases/v2016.1.4
|
||||||
|
releases/v2016.1.3
|
||||||
|
releases/v2016.1.2
|
||||||
|
releases/v2016.1.1
|
||||||
|
releases/v2016.1
|
||||||
|
releases/v2015.1.2
|
||||||
|
releases/v2015.1.1
|
||||||
|
releases/v2015.1
|
||||||
|
releases/v2014.4
|
||||||
|
releases/v2014.3.1
|
||||||
|
releases/v2014.3
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
mesh_vpn = {
|
mesh_vpn = {
|
||||||
|
mtu = 1312,
|
||||||
|
|
||||||
fastd = {
|
fastd = {
|
||||||
methods = {'salsa2012+umac'},
|
methods = {'salsa2012+umac'},
|
||||||
mtu = 1312,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
bandwidth_limit = {
|
bandwidth_limit = {
|
||||||
|
@ -58,3 +58,6 @@ GLUON_REGION ?= eu
|
|||||||
|
|
||||||
# Languages to include
|
# Languages to include
|
||||||
GLUON_LANGS ?= en de
|
GLUON_LANGS ?= en de
|
||||||
|
|
||||||
|
# Do not build images for deprecated devices
|
||||||
|
GLUON_DEPRECATED ?= 0
|
||||||
|
@ -1,129 +0,0 @@
|
|||||||
Release Notes
|
|
||||||
=============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2022.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2022.1.4
|
|
||||||
v2022.1.3
|
|
||||||
v2022.1.2
|
|
||||||
v2022.1.1
|
|
||||||
v2022.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2021.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2021.1.2
|
|
||||||
v2021.1.1
|
|
||||||
v2021.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2020.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2020.2.3
|
|
||||||
v2020.2.2
|
|
||||||
v2020.2.1
|
|
||||||
v2020.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2020.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2020.1.4
|
|
||||||
v2020.1.3
|
|
||||||
v2020.1.2
|
|
||||||
v2020.1.1
|
|
||||||
v2020.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2019.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2019.1.3
|
|
||||||
v2019.1.2
|
|
||||||
v2019.1.1
|
|
||||||
v2019.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2018.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2018.2.4
|
|
||||||
v2018.2.3
|
|
||||||
v2018.2.2
|
|
||||||
v2018.2.1
|
|
||||||
v2018.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2018.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2018.1.4
|
|
||||||
v2018.1.3
|
|
||||||
v2018.1.2
|
|
||||||
v2018.1.1
|
|
||||||
v2018.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2017.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2017.1.8
|
|
||||||
v2017.1.7
|
|
||||||
v2017.1.6
|
|
||||||
v2017.1.5
|
|
||||||
v2017.1.4
|
|
||||||
v2017.1.3
|
|
||||||
v2017.1.2
|
|
||||||
v2017.1.1
|
|
||||||
v2017.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2016.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2016.2.7
|
|
||||||
v2016.2.6
|
|
||||||
v2016.2.5
|
|
||||||
v2016.2.4
|
|
||||||
v2016.2.3
|
|
||||||
v2016.2.2
|
|
||||||
v2016.2.1
|
|
||||||
v2016.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2016.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2016.1.6
|
|
||||||
v2016.1.5
|
|
||||||
v2016.1.4
|
|
||||||
v2016.1.3
|
|
||||||
v2016.1.2
|
|
||||||
v2016.1.1
|
|
||||||
v2016.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2015.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2015.1.2
|
|
||||||
v2015.1.1
|
|
||||||
v2015.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2014.4
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2014.4
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2014.3
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2014.3.1
|
|
||||||
v2014.3
|
|
||||||
|
|
@ -88,8 +88,6 @@ New features
|
|||||||
* Add support for making nodes a DNS cache for clients
|
* Add support for making nodes a DNS cache for clients
|
||||||
(`#1000 <https://github.com/freifunk-gluon/gluon/pull/1000>`_)
|
(`#1000 <https://github.com/freifunk-gluon/gluon/pull/1000>`_)
|
||||||
|
|
||||||
See also: :doc:`../features/dns-cache`
|
|
||||||
|
|
||||||
* Add L2TP via tunneldigger as an alternative VPN system
|
* Add L2TP via tunneldigger as an alternative VPN system
|
||||||
(`#978 <https://github.com/freifunk-gluon/gluon/pull/978>`_)
|
(`#978 <https://github.com/freifunk-gluon/gluon/pull/978>`_)
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Bugfixes
|
|||||||
As the path to both config mode and status page were changed between versions
|
As the path to both config mode and status page were changed between versions
|
||||||
users could be affected by a redirect to a no more valid URL.
|
users could be affected by a redirect to a no more valid URL.
|
||||||
|
|
||||||
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt/routing/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
|
* batman-adv has received two bugfixes, which were `backported <https://github.com/openwrt-routing/packages/commit/7bf62cc8b556b5046f9bbd37687376fe9ea175bb>`_ from v2018.4
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
@ -30,15 +30,13 @@ Known issues
|
|||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -26,15 +26,13 @@ Known issues
|
|||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -36,15 +36,13 @@ Known issues
|
|||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -253,15 +253,13 @@ Known issues
|
|||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -25,15 +25,13 @@ Known issues
|
|||||||
|
|
||||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -50,15 +50,13 @@ Known issues
|
|||||||
|
|
||||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -30,15 +30,13 @@ Known issues
|
|||||||
|
|
||||||
- The integration of the BATMAN_V routing algorithm is incomplete.
|
- The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
- Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -127,10 +127,10 @@ Renamed targets
|
|||||||
Status Page
|
Status Page
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
- Gateway nexthop information has been added to the status page when batman-adv
|
- Gateway nexthop information has been added to the statuspage when batman-adv
|
||||||
is used. This includes its MAC address and prettyname as well as the interface
|
is used. This includes its MAC address and prettyname as well as the interface
|
||||||
name towards the selected gateway.
|
name towards the selected gateway.
|
||||||
- The site name has been added to the status page. If the node is in a multidomain
|
- The site name has been added to the statuspage. If the node is in a multidomain
|
||||||
setup it will also show the domain name.
|
setup it will also show the domain name.
|
||||||
|
|
||||||
DECT button to enter config mode
|
DECT button to enter config mode
|
||||||
@ -206,15 +206,13 @@ Known issues
|
|||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
* The integration of the BATMAN_V routing algorithm is incomplete.
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
- | Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
||||||
|
| Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
||||||
|
| metric.
|
||||||
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
- | Throughput values are not correctly acquired for different interface types.
|
||||||
metric.
|
| (`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
||||||
|
| This affects virtual interface types like bridges and VXLAN.
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
||||||
|
@ -7,7 +7,7 @@ Bugfixes
|
|||||||
- LEDs on the ASUS RT-AC51 are now fully functional.
|
- LEDs on the ASUS RT-AC51 are now fully functional.
|
||||||
|
|
||||||
- Netgear EX6150v1 randomly booting into failsafe mode has been fixed.
|
- Netgear EX6150v1 randomly booting into failsafe mode has been fixed.
|
||||||
This happened dependent on the state of the mode setting switch.
|
This happened dependant on the state of the mode setting switch.
|
||||||
|
|
||||||
- Dnsmasq has been patched against multiple security issues in its DNS response validation.
|
- Dnsmasq has been patched against multiple security issues in its DNS response validation.
|
||||||
See the OpenWrt advisory at https://openwrt.org/advisory/2021-01-19-1
|
See the OpenWrt advisory at https://openwrt.org/advisory/2021-01-19-1
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
Gluon 2021.1.1
|
|
||||||
==============
|
|
||||||
|
|
||||||
Important notes
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Upgrades to v2021.1 and later releases are only supported from releases v2018.2 and later. This is due to migrations that have been removed to simplify maintenance.
|
|
||||||
|
|
||||||
|
|
||||||
Added hardware support
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
|
|
||||||
ath79-generic
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Joy-IT
|
|
||||||
|
|
||||||
- JT-OR750i
|
|
||||||
|
|
||||||
|
|
||||||
ramips-mt76x8
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Xiaomi
|
|
||||||
|
|
||||||
- Mi Router 4A (100M Edition)
|
|
||||||
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
- Missing bandwidth limit settings resulted in a respondd crash for v2021.1.
|
|
||||||
|
|
||||||
- The Tunneldigger VPN provider was not registered with the Gluon VPN backend, resulting in broken Tunneldigger configurations.
|
|
||||||
|
|
||||||
- Disabling Radio interfaces in v2021.1 could lead to null pointer dereferences in the respondd airtime module, as the survey returns no data in this case.
|
|
||||||
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
@ -1,131 +0,0 @@
|
|||||||
Gluon 2021.1.2
|
|
||||||
==============
|
|
||||||
|
|
||||||
Important notes
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This release fixes a **critical security vulnerability** in Gluon's
|
|
||||||
autoupdater.
|
|
||||||
|
|
||||||
Upgrades to v2021.1 and later releases are only supported from releases v2018.2
|
|
||||||
and later. Migration code for upgrades from older versions has been removed to
|
|
||||||
simplify maintenance.
|
|
||||||
|
|
||||||
|
|
||||||
Updates
|
|
||||||
-------
|
|
||||||
|
|
||||||
- The Linux kernel was updated to version 4.14.275
|
|
||||||
- The mac80211 wireless driver stack was updated to a version based on kernel
|
|
||||||
4.19.237
|
|
||||||
|
|
||||||
Various minor package updates are not listed here and can be found in the commit
|
|
||||||
log.
|
|
||||||
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
* **[SECURITY]** Autoupdater: Fix signature verification
|
|
||||||
|
|
||||||
A recently discovered issue (CVE-2022-24884) in the *ecdsautils* package
|
|
||||||
allows forgery of cryptographic signatures. This vulnerability can be
|
|
||||||
exploited to create a manifest accepted by the autoupdater without knowledge
|
|
||||||
of the signers' private keys. By intercepting nodes' connections to the update
|
|
||||||
server, such a manifest allows to distribute malicious firmware updates.
|
|
||||||
|
|
||||||
This is a **critical** vulnerability. All nodes with autoupdater must be
|
|
||||||
updated. Requiring multiple signatures for an update does *not* mitigate the
|
|
||||||
issue.
|
|
||||||
|
|
||||||
As a temporary workaround, the issue can be mitigated on individual nodes by
|
|
||||||
disabling the autoupdater via config mode or using the following commands::
|
|
||||||
|
|
||||||
uci set autoupdater.settings.enabled=0
|
|
||||||
uci commit autoupdater
|
|
||||||
|
|
||||||
A fixed firmware should be installed manually before enabling the autoupdater
|
|
||||||
again.
|
|
||||||
|
|
||||||
See security advisory `GHSA-qhcg-9ffp-78pw
|
|
||||||
<https://github.com/freifunk-gluon/ecdsautils/security/advisories/GHSA-qhcg-9ffp-78pw>`_
|
|
||||||
for further information on this vulnerability.
|
|
||||||
|
|
||||||
* **[SECURITY]** Config Mode: Prevent Cross-Site Request Forgery (CSRF)
|
|
||||||
|
|
||||||
The Config Mode was not validating the *Origin* header of POST requests.
|
|
||||||
This allowed arbitrary websites to modify configuration (including SSH keys)
|
|
||||||
on a Gluon node in Config Mode reachable from a user's browser by sending POST
|
|
||||||
requests with form data to 192.168.1.1.
|
|
||||||
|
|
||||||
The impact of this issue is considered low, as nodes are only vulnerable while
|
|
||||||
in Config Mode.
|
|
||||||
|
|
||||||
* Config Mode: Fix occasionally hanging page load after submitting the
|
|
||||||
configuration wizard causing the reboot message and VPN key not to be
|
|
||||||
displayed
|
|
||||||
|
|
||||||
* Config Mode (OSM): Update default OpenLayers source URL
|
|
||||||
|
|
||||||
The OSM feature of the Config Mode was broken when the default source URL was
|
|
||||||
used for OpenLayers, as the old URL has become unavailable. The default was
|
|
||||||
updated to a URL that should not become unavailable again.
|
|
||||||
|
|
||||||
* Config Mode (OSM): Fix error when using ``"`` character in attribution text
|
|
||||||
|
|
||||||
* respondd-module-airtime: Fix respondd crash on devices with disabled WLAN
|
|
||||||
interfaces
|
|
||||||
|
|
||||||
Several improvements were made to the error handling of the
|
|
||||||
*respondd-module-airtime* package. The "PHY ID" field (introduced in Gluon
|
|
||||||
2021.1) was removed again.
|
|
||||||
|
|
||||||
* ipq40xx: Fix bad WLAN performance on Plasma Cloud PA1200 and PA2200 devices
|
|
||||||
|
|
||||||
* Fix occasional build failure in "perl" package with high number of threads
|
|
||||||
(``-j32`` or higher)
|
|
||||||
|
|
||||||
|
|
||||||
Other improvements
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Several improvements were made to the status page:
|
|
||||||
|
|
||||||
- WLAN channel display does not require the *respondd-module-airtime* package
|
|
||||||
anymore
|
|
||||||
- The "gateway nexthop" label now links to the status page of the nexthop node
|
|
||||||
- The timeout to retrieve information from neighbour nodes was increased,
|
|
||||||
making the display of the name
|
|
||||||
of overloaded, slow or otherwise badly reachable nodes more likely to
|
|
||||||
succeed
|
|
||||||
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a
|
|
||||||
soft-bricked state due to bad blocks on the NAND flash which the NAND driver
|
|
||||||
before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page.
|
|
||||||
(`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to
|
|
||||||
account for the new throughput metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are
|
|
||||||
unknown (`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is
|
|
||||||
modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected
|
|
||||||
(like VMware when promiscuous mode is disallowed).
|
|
@ -1,85 +0,0 @@
|
|||||||
Gluon 2022.1.1
|
|
||||||
==============
|
|
||||||
|
|
||||||
Important notes
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This release mitigates multiple flaws in the Linux wireless stack fixing RCE and DoS vulnerabilities.
|
|
||||||
|
|
||||||
|
|
||||||
Added hardware support
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
ipq40xx-generic
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- GL.iNet
|
|
||||||
|
|
||||||
- GL-AP1300
|
|
||||||
|
|
||||||
mpc85xx-p1010
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- TL-WDR4900 (v1)
|
|
||||||
|
|
||||||
ramips-mt7621
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- ZyXEL
|
|
||||||
|
|
||||||
- NWA50AX
|
|
||||||
|
|
||||||
rockchip-armv8
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- FriendlyElec
|
|
||||||
|
|
||||||
- NanoPi R4S (4GB LPDDR4)
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Multiple mitigations for (`critical vulnerabilities <https://seclists.org/oss-sec/2022/q4/20>`_) in the Linux kernel WLAN stack. This only concerns Gluon v2022.1, older Gluon versions are unaffected.
|
|
||||||
|
|
||||||
* CVE-2022-41674
|
|
||||||
* CVE-2022-42719
|
|
||||||
* CVE-2022-42720
|
|
||||||
* CVE-2022-42721
|
|
||||||
* CVE-2022-42722
|
|
||||||
* Fixes `security issues in WolfSSL <https://openwrt.org/releases/22.03/notes-22.03.1#security_fixes>`_. People who have installed additional, non-Gluon packages which rely on WolfSSL's TLS 1.3 implementation might be affected. Firmwares using either gluon-mesh-wireless-sae or gluon-wireless-encryption-wpa3 are unaffected by these issues, since only WPA-Enterprise relies on the affected TLS functionality.
|
|
||||||
|
|
||||||
* CVE-2022-38152
|
|
||||||
* CVE-2022-39173
|
|
||||||
|
|
||||||
* Fixes the update path for GL-AR300M and NanoStation Loco M2/M5 (XW) devices.
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* A workaround for Android devices not waking up to their MLD subscriptions was removed,
|
|
||||||
potentially breaking IPv6 connectivity for these devices after extended sleep periods.
|
|
||||||
(`#2672 <https://github.com/freifunk-gluon/gluon/issues/2672>`_)
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
@ -1,37 +0,0 @@
|
|||||||
Gluon 2022.1.2
|
|
||||||
==============
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Various build-errors which sporadically occur when building with a large thread-count have been fixed
|
|
||||||
|
|
||||||
* Android devices do not lose their IPv6 connectivity after extended idle-time
|
|
||||||
|
|
||||||
* The 802.11s mesh network is now using 802.11ax HE-modes when supported by hardware
|
|
||||||
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
@ -1,40 +0,0 @@
|
|||||||
Gluon 2022.1.3
|
|
||||||
==============
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Ipq40xx Wave2 devices temporarily use non-ct firmware again to work around 802.11s unicast package loss in ath10k-ct
|
|
||||||
(`#2692 <https://github.com/freifunk-gluon/gluon/issues/2692>`_)
|
|
||||||
|
|
||||||
* Modify kernel builds slightly to work around a boot hang on various devices based on the QCA9563 SoC - especially the Unifi AC-* devices
|
|
||||||
(`#2784 <https://github.com/freifunk-gluon/gluon/issues/2784>`_)
|
|
||||||
|
|
||||||
* Work around an issue with wifi setup timing by waiting a bit while device initialisation is ongoing
|
|
||||||
(`#2779 <https://github.com/freifunk-gluon/gluon/issues/2779>`_)
|
|
||||||
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
@ -1,136 +0,0 @@
|
|||||||
Gluon 2022.1.4
|
|
||||||
==============
|
|
||||||
|
|
||||||
Added hardware support
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
ath79-generic
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- LibreRouter
|
|
||||||
|
|
||||||
- LibreRouter (v1)
|
|
||||||
|
|
||||||
- Teltonika
|
|
||||||
|
|
||||||
- RUT230 (v1)
|
|
||||||
|
|
||||||
|
|
||||||
ath79-nand
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
- Aerohive
|
|
||||||
|
|
||||||
- HiveAP 121
|
|
||||||
|
|
||||||
- NETGEAR
|
|
||||||
|
|
||||||
- WNDR4300 (v1)
|
|
||||||
|
|
||||||
|
|
||||||
lantiq-xrx200
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Arcadyan
|
|
||||||
|
|
||||||
- o2 Box 6431
|
|
||||||
|
|
||||||
|
|
||||||
ramips-mt7621
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Cudy
|
|
||||||
|
|
||||||
- X6 (v1, v2)
|
|
||||||
|
|
||||||
- D-Link
|
|
||||||
|
|
||||||
- DAP-X1860 (A1)
|
|
||||||
|
|
||||||
- GL.iNet
|
|
||||||
|
|
||||||
- GL-MT1300
|
|
||||||
|
|
||||||
- Mercusys
|
|
||||||
|
|
||||||
- MR70X (v1)
|
|
||||||
|
|
||||||
- Xiaomi
|
|
||||||
|
|
||||||
- Mi Router 3G
|
|
||||||
|
|
||||||
|
|
||||||
ramips-mt76x8
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- RE200 (v3)
|
|
||||||
|
|
||||||
|
|
||||||
realtek-rtl838x
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- D-Link
|
|
||||||
|
|
||||||
- DGS-1210-10P
|
|
||||||
|
|
||||||
|
|
||||||
ipq40xx-generic
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- AVM
|
|
||||||
|
|
||||||
- FRITZBox 7520
|
|
||||||
|
|
||||||
|
|
||||||
ipq40xx-mikrotik
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Mikrotik
|
|
||||||
|
|
||||||
- hAP ac2
|
|
||||||
|
|
||||||
|
|
||||||
Bugfixes
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Enterasys WS-AP3705i now uses the correct image-name for use with the autoupdater
|
|
||||||
(`#2819 <https://github.com/freifunk-gluon/gluon/issues/2819>`_)
|
|
||||||
|
|
||||||
* Reduce memory Usage for ath10k on ZyXEL WRE6606 devices
|
|
||||||
(`#2842 <https://github.com/freifunk-gluon/gluon/issues/2842>`_)
|
|
||||||
|
|
||||||
* Replace the Workaround for failed boots on ath79 with a proper fix.
|
|
||||||
(`#2784 <https://github.com/freifunk-gluon/gluon/issues/2784#issuecomment-1452126501>`_)
|
|
||||||
|
|
||||||
* AVM FRITZ!Box 7360 v2 flashed with the incorrect image for v1 will automatically update to the correct image.
|
|
||||||
|
|
||||||
* Revert OOM inducing switch of ath79 Wave2 firmware back to -ct
|
|
||||||
(`#2879 <https://github.com/freifunk-gluon/gluon/pull/2879>`_)
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
||||||
|
|
@ -1,417 +0,0 @@
|
|||||||
Gluon 2022.1
|
|
||||||
============
|
|
||||||
|
|
||||||
Important notes
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Upgrades to v2022.1 and later releases are only supported from releases v2020.1 and later. This is due to migrations that have been removed to simplify maintenance.
|
|
||||||
|
|
||||||
|
|
||||||
Added hardware support
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
ath79-generic
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- D-Link
|
|
||||||
|
|
||||||
- DAP-2660 A1
|
|
||||||
|
|
||||||
- Enterasys
|
|
||||||
|
|
||||||
- WS-AP3705i
|
|
||||||
|
|
||||||
- Siemens
|
|
||||||
|
|
||||||
- WS-AP3610
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- Archer A7 v5
|
|
||||||
- CPE510 v2
|
|
||||||
- CPE510 v3
|
|
||||||
- CPE710 v1
|
|
||||||
- EAP225-Outdoor v1
|
|
||||||
- WBS210 v2
|
|
||||||
|
|
||||||
ath79-mikrotik
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Mikrotik
|
|
||||||
|
|
||||||
- RB951Ui-2nD
|
|
||||||
|
|
||||||
ipq40xx-generic
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Aruba Networks
|
|
||||||
|
|
||||||
- AP-303H
|
|
||||||
- AP-365
|
|
||||||
- InstantOn AP11D
|
|
||||||
- InstantOn AP17
|
|
||||||
|
|
||||||
ipq40xx-mikrotik
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Mikrotik
|
|
||||||
|
|
||||||
- SXTsq-5-AC
|
|
||||||
|
|
||||||
ramips-mt7620
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Xiaomi
|
|
||||||
|
|
||||||
- Mi Router 3G (v2)
|
|
||||||
|
|
||||||
ramips-mt7621
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Cudy
|
|
||||||
|
|
||||||
- WR2100
|
|
||||||
|
|
||||||
- Netgear
|
|
||||||
|
|
||||||
- R6260
|
|
||||||
- WAC104
|
|
||||||
- WAX202
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- RE500
|
|
||||||
- RE650 v1
|
|
||||||
|
|
||||||
- Ubiquiti
|
|
||||||
|
|
||||||
- UniFi 6 Lite
|
|
||||||
|
|
||||||
- Xiaomi
|
|
||||||
|
|
||||||
- Mi Router 4A (Gigabit Edition)
|
|
||||||
|
|
||||||
ramips-mt7622
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Linksys
|
|
||||||
|
|
||||||
- E8450
|
|
||||||
|
|
||||||
- Xiaomi
|
|
||||||
|
|
||||||
- AX3200
|
|
||||||
|
|
||||||
- Ubiquiti
|
|
||||||
|
|
||||||
- UniFi 6 LR
|
|
||||||
|
|
||||||
ramips-mt76x8
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- GL.iNet
|
|
||||||
|
|
||||||
- microuter-N300
|
|
||||||
|
|
||||||
- Netgear
|
|
||||||
|
|
||||||
- R6020
|
|
||||||
|
|
||||||
- RAVPower
|
|
||||||
|
|
||||||
- RP-WD009
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- Archer C20 v4
|
|
||||||
- Archer C20 v5
|
|
||||||
- RE200 v2
|
|
||||||
- RE305 v1
|
|
||||||
|
|
||||||
- Xiaomi
|
|
||||||
|
|
||||||
- Mi Router 4C
|
|
||||||
- Mi Router 4A (100M Edition)
|
|
||||||
|
|
||||||
rockchip-armv8
|
|
||||||
~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- FriendlyElec
|
|
||||||
|
|
||||||
- NanoPi R2S
|
|
||||||
|
|
||||||
mpc85xx-p1010
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Sophos
|
|
||||||
|
|
||||||
- RED 15w rev. 1
|
|
||||||
|
|
||||||
mpc85xx-p1020
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- Extreme Networks
|
|
||||||
|
|
||||||
- WS-AP3825i
|
|
||||||
|
|
||||||
Removed Devices
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This list contains devices which do not have enough memory or flash to
|
|
||||||
be operated with this Gluon release.
|
|
||||||
|
|
||||||
- D-Link
|
|
||||||
|
|
||||||
- DIR-615 (C1, D1, D2, D3, D4, H1)
|
|
||||||
|
|
||||||
- Linksys
|
|
||||||
|
|
||||||
- WRT160NL
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- TL-MR13U (v1)
|
|
||||||
- TL-MR3020 (v1)
|
|
||||||
- TL-MR3040 (v1, v2)
|
|
||||||
- TL-MR3220 (v1, v2)
|
|
||||||
- TL-MR3420 (v1, v2)
|
|
||||||
- TL-WA701N/ND (v1, v2)
|
|
||||||
- TL-WA730RE (v1)
|
|
||||||
- TL-WA750RE (v1)
|
|
||||||
- TL-WA801N/ND (v1, v2, v3)
|
|
||||||
- TL-WA830RE (v1, v2)
|
|
||||||
- TL-WA850RE (v1)
|
|
||||||
- TL-WA860RE (v1)
|
|
||||||
- TL-WA901N/ND (v1, v2, v3, v4, v5)
|
|
||||||
- TL-WA7210N (v2)
|
|
||||||
- TL-WA7510N (v1)
|
|
||||||
- TL-WR703N (v1)
|
|
||||||
- TL-WR710N (v1, v2)
|
|
||||||
- TL-WR740N (v1, v3, v4, v5)
|
|
||||||
- TL-WR741N/ND (v1, v2, v4, v5)
|
|
||||||
- TL-WR743N/ND (v1, v2)
|
|
||||||
- TL-WR840N (v2)
|
|
||||||
- TL-WR841N/ND (v3, v5, v7, v8, v9, v10, v11, v12)
|
|
||||||
- TL-WR841N/ND (v1, v2)
|
|
||||||
- TL-WR843N/ND (v1)
|
|
||||||
- TL-WR940N (v1, v2, v3, v4, v5, v6)
|
|
||||||
- TL-WR941ND (v2, v3, v4, v5, v6)
|
|
||||||
- TL-WR1043N/ND (v1)
|
|
||||||
- WDR4900
|
|
||||||
|
|
||||||
- Ubiquiti
|
|
||||||
|
|
||||||
- AirGateway
|
|
||||||
- AirGateway Pro
|
|
||||||
- AirRouter
|
|
||||||
- Bullet
|
|
||||||
- LS-SR71
|
|
||||||
- Nanostation XM
|
|
||||||
- Nanostation Loco XM
|
|
||||||
- Picostation
|
|
||||||
|
|
||||||
- Unknown
|
|
||||||
|
|
||||||
- A5-V11
|
|
||||||
|
|
||||||
- VoCore
|
|
||||||
|
|
||||||
- VoCore (8M, 16M)
|
|
||||||
|
|
||||||
Atheros target migration
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
All Atheros MIPS devices built with the ``ar71xx-generic``,
|
|
||||||
``ar71xx-nand`` as well as ``ar71xx-tiny`` were deprecated upstream and
|
|
||||||
are therefore not available with Gluon anymore.
|
|
||||||
|
|
||||||
Many devices previously built with ``ar71xx-generic`` and
|
|
||||||
``ar71xx-nand`` are now available with the ``ath79-generic`` as well as
|
|
||||||
``ath79-nand`` target respectively.
|
|
||||||
|
|
||||||
Missing devices
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The following devices have not yet been integrated into Gluons ath79
|
|
||||||
targets.
|
|
||||||
|
|
||||||
- 8Devices
|
|
||||||
|
|
||||||
- Carambola 2
|
|
||||||
|
|
||||||
- Aerohive
|
|
||||||
|
|
||||||
- HiveAP 121
|
|
||||||
|
|
||||||
- Allnet
|
|
||||||
|
|
||||||
- ALL0315
|
|
||||||
|
|
||||||
- Buffalo
|
|
||||||
|
|
||||||
- WZR-HP-G300NH2
|
|
||||||
- WZR-HP-G450H
|
|
||||||
|
|
||||||
- GL.iNet
|
|
||||||
|
|
||||||
- 6408A v1
|
|
||||||
|
|
||||||
- NETGEAR
|
|
||||||
|
|
||||||
- WNDR4300
|
|
||||||
- WNDRMAC
|
|
||||||
- WNDRMAC v2
|
|
||||||
|
|
||||||
- TP-Link
|
|
||||||
|
|
||||||
- WR2543
|
|
||||||
|
|
||||||
- Ubiquiti
|
|
||||||
|
|
||||||
- Rocket
|
|
||||||
|
|
||||||
- WD
|
|
||||||
|
|
||||||
- MyNet N600
|
|
||||||
- MyNet N750
|
|
||||||
|
|
||||||
- ZyXEL
|
|
||||||
|
|
||||||
- NB6616
|
|
||||||
- NB6716
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
WireGuard
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
Gluon got WireGuard support. This allows offloading **encrypted**
|
|
||||||
connections into kernel space, increasing performance by forwarding
|
|
||||||
packets without the need for context switches between user and kernel
|
|
||||||
space.
|
|
||||||
|
|
||||||
In order to reuse existing (already verified) fastd-keypairs for
|
|
||||||
WireGuard, a key derivation procedure is `currently being
|
|
||||||
developed <https://github.com/freifunk-gluon/gluon/pull/2601>`__. This
|
|
||||||
should ease migration from fastd to WireGuard in case whitelisting VPN
|
|
||||||
keys is desired.
|
|
||||||
|
|
||||||
fastd L2TP
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
fastd can now act as a connection broker for unencrypted L2TP-based
|
|
||||||
tunneling within Gluons mesh-vpn framework. This new ``null@l2tp``
|
|
||||||
connection method allows for increased performance within existing
|
|
||||||
fastd setups.
|
|
||||||
|
|
||||||
In addition to a sufficiently
|
|
||||||
:ref:`configured fastd-based VPN server<vpn-gateway-configuration>`,
|
|
||||||
this requires further modifications to a sites :ref:`VPN fastd methods<VPN fastd methods>`.
|
|
||||||
|
|
||||||
Major changes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
OpenWrt
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
This release is based on the newest OpenWrt 22.03 release branch.
|
|
||||||
It ships with Linux kernel 5.10 as well as wireless-backports 5.15.
|
|
||||||
|
|
||||||
|
|
||||||
Network changes (DSA / Upgrade-Behavior)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The ``ramips-mt7621`` and ``lantiq-xrx200`` targets now use the upstream DSA
|
|
||||||
subsystem instead of OpenWrt swconfig for managing ethernet switches.
|
|
||||||
|
|
||||||
Gluon detects the existing user-intent and automatically applies it over
|
|
||||||
to DSA syntax. See the section about network reconfiguration for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
System reconfiguration
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The network and system-LED configurations are now re-generated after
|
|
||||||
each update / invocation of ``gluon-reconfigure``.
|
|
||||||
|
|
||||||
The user-intent is preserved within Gluon’s implemented functionality
|
|
||||||
(Wired-Mesh / Client access / WAN).
|
|
||||||
|
|
||||||
As an additional feature, Gluon now supports assigning roles to
|
|
||||||
interfaces. This behavior is explained
|
|
||||||
:ref:`here<wired-mesh-commandline>`.
|
|
||||||
|
|
||||||
Site changes
|
|
||||||
------------
|
|
||||||
|
|
||||||
VPN provider MTU
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
To account for multiple VPN methods available for a site, the MTU used
|
|
||||||
for the VPN tunnel connection is now moved to the specific VPN provider
|
|
||||||
configuration. For fastd this means that ``mesh_vpn.mtu`` needs to be
|
|
||||||
moved to ``mesh_vpn.fastd.mtu``. (`#2352 <https://github.com/freifunk-gluon/gluon/pull/2352>`__)
|
|
||||||
|
|
||||||
Preconfigured Interfaces Roles
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Instead of ``mesh_on_wan`` and ``mesh_on_lan`` there is now an
|
|
||||||
``interfaces`` block to configure the default behavior of network
|
|
||||||
interfaces. Details can be found in the
|
|
||||||
:ref:`documentation<user-site-interfaces>`.
|
|
||||||
|
|
||||||
Minor changes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- The ``brcm2708-bcm2708`` ``brcm2708-bcm2709`` ``brcm2708-bcm2710``
|
|
||||||
targets were renamed to ``bcm27xx-bcm2708`` ``bcm27xx-bcm2709`` and
|
|
||||||
``bcm27xx-bcm2710``
|
|
||||||
- The GL.iNet GL-AR750S was moved to the ``ath79-nand`` subtarget
|
|
||||||
- Gluon now ships the ath10k-ct firmware derivation for
|
|
||||||
QCA9886 / QCA9888 / QCA9896 / QCA9898 / QCA9984 /
|
|
||||||
QCA9994 / IPQ4018 / IPQ4028 / IPQ4019 / IPQ4029
|
|
||||||
radios (`#2541 <https://github.com/freifunk-gluon/gluon/pull/2541>`__)
|
|
||||||
- WolfSSL instead of OpenSSL is now used when built with WPA3 support
|
|
||||||
- The option to configure the wireless-channel independent from the
|
|
||||||
site-selected channel was moved from
|
|
||||||
``gluon-core.wireless.preserve_channels`` to
|
|
||||||
``gluon.wireless.preserve_channels``
|
|
||||||
- ``gluon-info`` is a new command that provides information about the
|
|
||||||
current node
|
|
||||||
- ``GLUON_DEPRECATED`` is now set to 0 by default
|
|
||||||
- To reboot a running gluon-node into setup-mode, Gluon now offers the
|
|
||||||
``gluon-enter-setup-mode`` command
|
|
||||||
- Devices without WLAN do not show the private-wifi configuration
|
|
||||||
anymore
|
|
||||||
- The Autoupdater now uses the site default branch in case it is
|
|
||||||
configured to use a non-existent / invalid branch
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* A workaround for Android devices not waking up to their MLD subscriptions was removed,
|
|
||||||
potentially breaking IPv6 connectivity for these devices after extended sleep periods.
|
|
||||||
(`#2672 <https://github.com/freifunk-gluon/gluon/issues/2672>`_)
|
|
||||||
|
|
||||||
* Upgrading EdgeRouter-X from versions before v2020.1.x may lead to a soft-bricked state due to bad blocks on the NAND flash which the NAND driver before this release does not handle well.
|
|
||||||
(`#1937 <https://github.com/freifunk-gluon/gluon/issues/1937>`_)
|
|
||||||
|
|
||||||
* The integration of the BATMAN_V routing algorithm is incomplete.
|
|
||||||
|
|
||||||
- Mesh neighbors don't appear on the status page. (`#1726 <https://github.com/freifunk-gluon/gluon/issues/1726>`_)
|
|
||||||
Many tools have the BATMAN_IV metric hardcoded, these need to be updated to account for the new throughput
|
|
||||||
metric.
|
|
||||||
- Throughput values are not correctly acquired for different interface types.
|
|
||||||
(`#1728 <https://github.com/freifunk-gluon/gluon/issues/1728>`_)
|
|
||||||
This affects virtual interface types like bridges and VXLAN.
|
|
||||||
|
|
||||||
* Default TX power on many Ubiquiti devices is too high, correct offsets are unknown
|
|
||||||
(`#94 <https://github.com/freifunk-gluon/gluon/issues/94>`_)
|
|
||||||
|
|
||||||
Reducing the TX power in the Advanced Settings is recommended.
|
|
||||||
|
|
||||||
* In configurations without VXLAN, the MAC address of the WAN interface is modified even when Mesh-on-WAN is disabled
|
|
||||||
(`#496 <https://github.com/freifunk-gluon/gluon/issues/496>`_)
|
|
||||||
|
|
||||||
This may lead to issues in environments where a fixed MAC address is expected (like VMware when promiscuous mode is disallowed).
|
|
@ -1 +1 @@
|
|||||||
sphinx-rtd-theme==1.2.0
|
sphinx-rtd-theme
|
||||||
|
@ -45,7 +45,7 @@ msgstr ""
|
|||||||
"selbstverständlich vertraulich behandelt und nicht weitergegeben."
|
"selbstverständlich vertraulich behandelt und nicht weitergegeben."
|
||||||
"</p>"
|
"</p>"
|
||||||
"<div class=\"the-key\">"
|
"<div class=\"the-key\">"
|
||||||
"# <%= pcdata(hostname) %><br>"
|
"# <%= pcdata(hostname) %><br />"
|
||||||
"<%= pubkey %>"
|
"<%= pubkey %>"
|
||||||
"</div>"
|
"</div>"
|
||||||
"<p>Dein Knoten startet gerade neu und wird anschließend versuchen, sich mit "
|
"<p>Dein Knoten startet gerade neu und wird anschließend versuchen, sich mit "
|
||||||
@ -58,7 +58,7 @@ msgid "gluon-config-mode:novpn"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"<p><strong>Du hast ausgewählt die Internetverbindung (Mesh-VPN) nicht zu "
|
"<p><strong>Du hast ausgewählt die Internetverbindung (Mesh-VPN) nicht zu "
|
||||||
"nutzen</strong>. Dein Knoten kann also nur dann eine Verbindung zum "
|
"nutzen</strong>. Dein Knoten kann also nur dann eine Verbindung zum "
|
||||||
"Freifunk-Netz aufbauen, wenn andere Freifunk-Knoten in WLAN-Reichweite sind.</p>"
|
"Freifunk-Netz aufbauen, wenn andere Freifunk-Knoten in WLAN-Reichweite sind."
|
||||||
"<p>Bitte schicke uns eine E-Mail mit dem Namen deines Knotens "
|
"<p>Bitte schicke uns eine E-Mail mit dem Namen deines Knotens "
|
||||||
"(<em><%= pcdata(hostname) %></em>) und ein paar Informationen an <a href="
|
"(<em><%= pcdata(hostname) %></em>) und ein paar Informationen an <a href="
|
||||||
"\"mailto:freifunk-keys@lists.in-kiel.de?"
|
"\"mailto:freifunk-keys@lists.in-kiel.de?"
|
||||||
|
@ -41,7 +41,7 @@ msgstr ""
|
|||||||
"\">keys@alpha-centauri.freifunk.net</a>. Of course, your e-mail address will "
|
"\">keys@alpha-centauri.freifunk.net</a>. Of course, your e-mail address will "
|
||||||
"be treated confidentially and will not be passed on.</p>"
|
"be treated confidentially and will not be passed on.</p>"
|
||||||
"<div class=\"the-key\">"
|
"<div class=\"the-key\">"
|
||||||
" # <%= pcdata(hostname) %><br>"
|
" # <%= pcdata(hostname) %><br />"
|
||||||
"<%= pubkey %>"
|
"<%= pubkey %>"
|
||||||
"</div>"
|
"</div>"
|
||||||
"<p>Your node <em><%= pcdata(hostname) %></em> is currently rebooting and will "
|
"<p>Your node <em><%= pcdata(hostname) %></em> is currently rebooting and will "
|
||||||
|
@ -36,7 +36,7 @@ msgstr ""
|
|||||||
"body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
|
"body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
|
||||||
"</p>"
|
"</p>"
|
||||||
"<div class=\"the-key\">"
|
"<div class=\"the-key\">"
|
||||||
" # <%= pcdata(hostname) %><br>"
|
" # <%= pcdata(hostname) %><br />"
|
||||||
"<%= pubkey %>"
|
"<%= pubkey %>"
|
||||||
"</div>"
|
"</div>"
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# the git repository from where to clone the package feed
|
# the git repository from where to clone the package feed
|
||||||
#PACKAGES_MY_OWN_PACKAGES_REPO=https://github.com/.../my-own-packages.git
|
#PACKAGES_MY_OWN_PACKAGES_REPO=https://github.com/.../my-own-packages.git
|
||||||
|
|
||||||
|
|
||||||
## PACKAGES_$feedname_COMMIT
|
## PACKAGES_$feedname_COMMIT
|
||||||
# the version/commit of the git repository to clone
|
# the version/commit of the git repository to clone
|
||||||
#PACKAGES_MY_OWN_PACKAGES_COMMIT=123456789aabcda1a69b04278e4d38f2a3f57e49
|
#PACKAGES_MY_OWN_PACKAGES_COMMIT=123456789aabcda1a69b04278e4d38f2a3f57e49
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- This is an example site configuration for Gluon v2022.1
|
-- This is an example site configuration for Gluon v2021.1
|
||||||
--
|
--
|
||||||
-- Take a look at the documentation located at
|
-- Take a look at the documentation located at
|
||||||
-- https://gluon.readthedocs.io/ for details.
|
-- https://gluon.readthedocs.io/ for details.
|
||||||
@ -105,6 +105,7 @@
|
|||||||
|
|
||||||
mesh_vpn = {
|
mesh_vpn = {
|
||||||
-- enabled = true,
|
-- enabled = true,
|
||||||
|
mtu = 1312,
|
||||||
|
|
||||||
fastd = {
|
fastd = {
|
||||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
||||||
@ -112,7 +113,6 @@
|
|||||||
|
|
||||||
-- List of crypto-methods to use.
|
-- List of crypto-methods to use.
|
||||||
methods = {'salsa2012+umac'},
|
methods = {'salsa2012+umac'},
|
||||||
mtu = 1312,
|
|
||||||
-- configurable = true,
|
-- configurable = true,
|
||||||
-- syslog_level = 'warn',
|
-- syslog_level = 'warn',
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@ GLUON_FEATURES := \
|
|||||||
web-advanced \
|
web-advanced \
|
||||||
web-wizard
|
web-wizard
|
||||||
|
|
||||||
GLUON_FEATURES_standard := \
|
|
||||||
wireless-encryption-wpa3
|
|
||||||
|
|
||||||
## GLUON_SITE_PACKAGES
|
## GLUON_SITE_PACKAGES
|
||||||
# Specify additional Gluon/OpenWrt packages to include here;
|
# Specify additional Gluon/OpenWrt packages to include here;
|
||||||
# A minus sign may be prepended to remove a packages from the
|
# A minus sign may be prepended to remove a packages from the
|
||||||
@ -55,3 +52,6 @@ GLUON_REGION ?= eu
|
|||||||
|
|
||||||
# Languages to include
|
# Languages to include
|
||||||
GLUON_LANGS ?= en de
|
GLUON_LANGS ?= en de
|
||||||
|
|
||||||
|
# Do not build images for deprecated devices
|
||||||
|
GLUON_DEPRECATED ?= 0
|
||||||
|
@ -25,3 +25,84 @@ interface. This DNS server must be announced in router advertisements (using
|
|||||||
on *batman-adv*. If your mesh does not have global IPv6 connectivity, you can setup
|
on *batman-adv*. If your mesh does not have global IPv6 connectivity, you can setup
|
||||||
your *radvd* not to announce a default route by setting the *default lifetime* to 0;
|
your *radvd* not to announce a default route by setting the *default lifetime* to 0;
|
||||||
in this case, the *radvd* is only used to announce the DNS server.
|
in this case, the *radvd* is only used to announce the DNS server.
|
||||||
|
|
||||||
|
.. _faq-mtu:
|
||||||
|
|
||||||
|
What is a good MTU on the mesh-vpn?
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Setting the MTU on the transport interface requires careful consideration, as
|
||||||
|
setting it too low will cause excessive fragmentation and setting it too high
|
||||||
|
may leave peers with a broken tunnel due to packet loss.
|
||||||
|
|
||||||
|
Consider these key values:
|
||||||
|
|
||||||
|
- Payload: Allow for the transport of IPv6 packets, by adhering to the minimum MTU
|
||||||
|
of 1280 Byte specified in RFC 2460
|
||||||
|
- and configure `MSS clamping`_ accordingly,
|
||||||
|
- and announce your link MTU via Router Advertisements and DHCP
|
||||||
|
|
||||||
|
.. _MSS clamping: https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html
|
||||||
|
|
||||||
|
- Encapsulation: Account for the overhead created by the configured mesh protocol
|
||||||
|
encapsulating the payload, which is up to 32 Byte (14 Byte Ethernet + 18 Byte
|
||||||
|
batadv).
|
||||||
|
|
||||||
|
- PMTU: What MTU does the path between your gateway and each of its peers support?
|
||||||
|
|
||||||
|
For reference, the complete MTU stack looks like this:
|
||||||
|
|
||||||
|
.. image:: mtu-diagram_v5.png
|
||||||
|
|
||||||
|
Minimum MTU
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Calculate the minimum transport MTU by adding the encapsulation overhead to the
|
||||||
|
minimum payload MTU required. This is the lowest recommended value, since going
|
||||||
|
lower would cause unnecessary fragmentation for clients which respect the announced
|
||||||
|
link MTU.
|
||||||
|
|
||||||
|
Example: Our network currently uses batman-adv v15, it therefore requires up
|
||||||
|
to 32 Bytes of encapsulation overhead on top of the minimal link MTU required for
|
||||||
|
transporting IPv6.::
|
||||||
|
|
||||||
|
\ 1312 1294 1280 0
|
||||||
|
\---------+-----------------+-------------+----------------------------------+
|
||||||
|
\TAP | batadv v15 | Ethernet | Payload |
|
||||||
|
\-------+-----------------+-------------+----------------------------------+
|
||||||
|
\ ^
|
||||||
|
|
|
||||||
|
|
||||||
|
MTU_LOW = 1280 Byte + 14 Byte + 18 Byte = 1312 Byte
|
||||||
|
|
||||||
|
Maximum MTU
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Calculating the maximum transport MTU is interesting, because it increases the
|
||||||
|
throughput, by allowing larger payloads to be transported, but also more difficult
|
||||||
|
as you have to take into account the tunneling overhead and each peers PMTU, which
|
||||||
|
varies between providers.
|
||||||
|
The underlying reasons are mostly PPPoE, Tunneling and IPv6 transition technologies
|
||||||
|
like DS-Lite.
|
||||||
|
|
||||||
|
Example: The peer with the smallest MTU on your network is behind DS-Lite and can
|
||||||
|
transport IPv4 packets up to 1436 Bytes in size. Your tunnel uses IPv4 (20 Byte),
|
||||||
|
UDP (8 Byte), Fastd (24 byte) and you require TAP (14 Byte) for Layer 2 (Ethernet)
|
||||||
|
Tunneling.::
|
||||||
|
|
||||||
|
1436 1416 1408 1384 1370 \
|
||||||
|
+-------------------+--------+-----------------------+-------------+------\
|
||||||
|
| IP | UDP | Fastd | TAP | bat\
|
||||||
|
+-------------------+--------+-----------------------+-------------+--------\
|
||||||
|
^ \
|
||||||
|
|
|
||||||
|
|
||||||
|
MTU_HIGH = 1436 Byte - 20 Byte - 8 Byte - 24 Byte - 14 Byte = 1370 Byte
|
||||||
|
|
||||||
|
Conclusion
|
||||||
|
----------
|
||||||
|
|
||||||
|
Determining the maximum MTU can be a tedious process, especially since the PMTU
|
||||||
|
of peers could change at any time. The general recommendation for maximized
|
||||||
|
compatibility is therefore the minimum MTU of 1312 Byte, which works well with
|
||||||
|
both IPv4 and IPv6.
|
||||||
|
@ -8,7 +8,7 @@ Gluon's releases are managed using `Git tags`_. If you are just getting
|
|||||||
started with Gluon we recommend to use the latest stable release of Gluon.
|
started with Gluon we recommend to use the latest stable release of Gluon.
|
||||||
|
|
||||||
Take a look at the `list of gluon releases`_ and notice the latest release,
|
Take a look at the `list of gluon releases`_ and notice the latest release,
|
||||||
e.g. *v2022.1*. Always get Gluon using git and don't try to download it
|
e.g. *v2021.1*. Always get Gluon using git and don't try to download it
|
||||||
as a Zip archive as the archive will be missing version information.
|
as a Zip archive as the archive will be missing version information.
|
||||||
|
|
||||||
Please keep in mind that there is no "default Gluon" build; a site configuration
|
Please keep in mind that there is no "default Gluon" build; a site configuration
|
||||||
@ -25,34 +25,26 @@ An example configuration can be found in the Gluon repository at *docs/site-exam
|
|||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
To build Gluon, several packages need to be installed on the system. On a
|
To build Gluon, several packages need to be installed on the system. On a
|
||||||
freshly installed Debian Bullseye system the following packages are required:
|
freshly installed Debian Stretch system the following packages are required:
|
||||||
|
|
||||||
* `git` (to get Gluon and other dependencies)
|
* `git` (to get Gluon and other dependencies)
|
||||||
* `python3`
|
* `subversion`
|
||||||
|
* `python` (Python 3 doesn't work)
|
||||||
* `build-essential`
|
* `build-essential`
|
||||||
* `ecdsautils` (to sign firmware, see `contrib/sign.sh`)
|
|
||||||
* `gawk`
|
* `gawk`
|
||||||
* `unzip`
|
* `unzip`
|
||||||
* `libncurses-dev` (actually `libncurses5-dev`)
|
* `libncurses-dev` (actually `libncurses5-dev`)
|
||||||
* `libz-dev` (actually `zlib1g-dev`)
|
* `libz-dev` (actually `zlib1g-dev`)
|
||||||
* `libssl-dev`
|
* `libssl-dev`
|
||||||
* `libelf-dev` (to build x86-64)
|
|
||||||
* `wget`
|
* `wget`
|
||||||
* `rsync`
|
|
||||||
* `time` (built-in `time` doesn't work)
|
* `time` (built-in `time` doesn't work)
|
||||||
* `qemu-utils`
|
* `qemu-utils`
|
||||||
|
|
||||||
We also provide a container environment that already tracks all these dependencies. It quickly gets you up and running, if you already have either Docker or Podman installed locally.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./scripts/container.sh
|
|
||||||
|
|
||||||
Building the images
|
Building the images
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
To build Gluon, first check out the repository. Replace *RELEASE* with the
|
To build Gluon, first check out the repository. Replace *RELEASE* with the
|
||||||
version you'd like to checkout, e.g. *v2022.1*.
|
version you'd like to checkout, e.g. *v2021.1*.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -88,7 +80,7 @@ Extensive documentation about the site configuration can be found at:
|
|||||||
site directory should always be a git repository by itself; committing site-specific files
|
site directory should always be a git repository by itself; committing site-specific files
|
||||||
to the Gluon main repository should be avoided, as it will make updates more complicated.
|
to the Gluon main repository should be avoided, as it will make updates more complicated.
|
||||||
|
|
||||||
Next go back to the top-level Gluon directory and build Gluon\ [#make_update]_::
|
Next go back to the top-level Gluon directory and build Gluon::
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
make update # Get other repositories used by Gluon
|
make update # Get other repositories used by Gluon
|
||||||
@ -127,16 +119,6 @@ These can be used for debugging and should be stored along with the images to
|
|||||||
allow debugging of kernel problems on devices in the field.
|
allow debugging of kernel problems on devices in the field.
|
||||||
See :ref:`Debugging <dev-debugging-kernel-oops>` for more information.
|
See :ref:`Debugging <dev-debugging-kernel-oops>` for more information.
|
||||||
|
|
||||||
.. rubric:: Footnotes
|
|
||||||
|
|
||||||
.. [#make_update] ``make update`` only needs to be called again after updating the
|
|
||||||
Gluon repository (using ``git pull`` or similar) or after changing branches,
|
|
||||||
not for each build. Running it more often than necessary is undesirable, as
|
|
||||||
the update will take some time, and may undo manual modifications of the
|
|
||||||
external repositories while developing on Gluon.
|
|
||||||
|
|
||||||
See :ref:`working-with-repositories` for more information.
|
|
||||||
|
|
||||||
Cleaning the build tree
|
Cleaning the build tree
|
||||||
.......................
|
.......................
|
||||||
|
|
||||||
@ -215,7 +197,7 @@ GLUON_DEPRECATED
|
|||||||
Usually, devices are deprecated because their flash size is insufficient to
|
Usually, devices are deprecated because their flash size is insufficient to
|
||||||
support future Gluon versions. The recommended setting is ``0`` for new sites,
|
support future Gluon versions. The recommended setting is ``0`` for new sites,
|
||||||
and ``upgrade`` for existing configurations (where upgrades for existing
|
and ``upgrade`` for existing configurations (where upgrades for existing
|
||||||
deployments of low-flash devices are required). Defaults to ``0``.
|
deployments of low-flash devices are required).
|
||||||
|
|
||||||
GLUON_LANGS
|
GLUON_LANGS
|
||||||
Space-separated list of languages to include for the config mode/advanced settings. Defaults to ``en``.
|
Space-separated list of languages to include for the config mode/advanced settings. Defaults to ``en``.
|
||||||
|
@ -1,223 +0,0 @@
|
|||||||
MTU for Mesh-VPN
|
|
||||||
================
|
|
||||||
|
|
||||||
What is a good MTU on the mesh-vpn?
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Setting the MTU on the transport interface requires careful consideration, as
|
|
||||||
setting it too low will cause excessive fragmentation and setting it too high
|
|
||||||
may leave peers with a broken tunnel due to packet loss.
|
|
||||||
|
|
||||||
Consider these key values:
|
|
||||||
|
|
||||||
- Payload: Allow for the transport of IPv6 packets, by adhering to the minimum MTU
|
|
||||||
of 1280 Byte specified in RFC 2460
|
|
||||||
- and configure `MSS clamping`_ accordingly,
|
|
||||||
- and announce your link MTU via Router Advertisements and DHCP
|
|
||||||
|
|
||||||
.. _MSS clamping: https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html
|
|
||||||
|
|
||||||
- Encapsulation: Account for the overhead created by the configured mesh protocol
|
|
||||||
encapsulating the payload, which is up to 32 Byte (14 Byte Ethernet + 18 Byte
|
|
||||||
batadv).
|
|
||||||
|
|
||||||
- PMTU: What MTU does the path between your gateway and each of its peers support?
|
|
||||||
|
|
||||||
For reference, the complete MTU stack looks like this:
|
|
||||||
|
|
||||||
.. image:: mtu-diagram_v5.png
|
|
||||||
|
|
||||||
Example for Minimum MTU
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Calculate the minimum transport MTU by adding the encapsulation overhead to the
|
|
||||||
minimum payload MTU required. This is the lowest recommended value, since going
|
|
||||||
lower would cause unnecessary fragmentation for clients which respect the announced
|
|
||||||
link MTU.
|
|
||||||
|
|
||||||
.. editorconfig-checker-disable
|
|
||||||
|
|
||||||
Example: Our network currently uses batman-adv v15, it therefore requires up
|
|
||||||
to 32 Bytes of encapsulation overhead on top of the minimal link MTU required for
|
|
||||||
transporting IPv6.::
|
|
||||||
|
|
||||||
\ 1312 1294 1280 0
|
|
||||||
\---------+-----------------+-------------+----------------------------------+
|
|
||||||
\TAP | batadv v15 | Ethernet | Payload |
|
|
||||||
\-------+-----------------+-------------+----------------------------------+
|
|
||||||
\ ^
|
|
||||||
|
|
|
||||||
|
|
||||||
MTU_LOW = 1280 Byte + 14 Byte + 18 Byte = 1312 Byte
|
|
||||||
|
|
||||||
Example for Maximum MTU
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Calculating the maximum transport MTU is interesting, because it increases the
|
|
||||||
throughput, by allowing larger payloads to be transported, but also more difficult
|
|
||||||
as you have to take into account the tunneling overhead and each peers PMTU, which
|
|
||||||
varies between providers.
|
|
||||||
The underlying reasons are mostly PPPoE, Tunneling and IPv6 transition technologies
|
|
||||||
like DS-Lite.
|
|
||||||
|
|
||||||
Example: The peer with the smallest MTU on your network is behind DS-Lite and can
|
|
||||||
transport IPv4 packets up to 1436 Bytes in size. Your tunnel uses IPv4 (20 Byte),
|
|
||||||
UDP (8 Byte), Fastd (24 byte) and you require TAP (14 Byte) for Layer 2 (Ethernet)
|
|
||||||
Tunneling.::
|
|
||||||
|
|
||||||
1436 1416 1408 1384 1370 \
|
|
||||||
+-------------------+--------+-----------------------+-------------+------\
|
|
||||||
| IP | UDP | Fastd | TAP | bat\
|
|
||||||
+-------------------+--------+-----------------------+-------------+--------\
|
|
||||||
^ \
|
|
||||||
|
|
|
||||||
|
|
||||||
MTU_HIGH = 1436 Byte - 20 Byte - 8 Byte - 24 Byte - 14 Byte = 1370 Byte
|
|
||||||
|
|
||||||
.. editorconfig-checker-enable
|
|
||||||
|
|
||||||
Tables for Different VPN Providers
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
VPN Protocol Overhead (IPv4)
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Overhead of the VPN protocol layers in bytes on top of an Ethernet frame.
|
|
||||||
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
| | fastd | Tunneldigger | Wireguard |
|
|
||||||
+==========+=======+==============+===========+
|
|
||||||
| IPv4 | 20 | 20 | 20 |
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
| UDP | 8 | 8 | 8 |
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
| Protocol | 24 | 8 | 32 |
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
| TAP | 14 | 14 | / |
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
| Sum | 66 | 50 | 60 |
|
|
||||||
+----------+-------+--------------+-----------+
|
|
||||||
|
|
||||||
Intermediate Layer Overhead
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Overhead of additional layers on top of the VPN packet needed for different VPN
|
|
||||||
providers.
|
|
||||||
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| | fastd | Tunneldigger | Wireguard |
|
|
||||||
+============+=======+==============+===========+
|
|
||||||
| IPv6 | / | / | 40 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| vxlan | / | / | 16 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| Ethernet | / | / | 14 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| Batman v15 | 18 | 18 | 18 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| Ethernet | 14 | 14 | 14 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
| Sum | 32 | 32 | 102 |
|
|
||||||
+------------+-------+--------------+-----------+
|
|
||||||
|
|
||||||
Minimum MTU
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
Calculation of different derived MTUs based on a 1280 byte payload to
|
|
||||||
avoid fragmentation.
|
|
||||||
|
|
||||||
Suggestions:
|
|
||||||
|
|
||||||
- This configuration is only suggested for fastd and Tunneldigger.
|
|
||||||
|
|
||||||
- For WireGuard, this configuration is **unsuitable**. To obtain a 1280 byte
|
|
||||||
payload with our protocol stack (see below), the Ethernet frame payload would
|
|
||||||
be 1442 bytes long (for IPv4). As we assume that the WAN network might have
|
|
||||||
a (worst case) MTU of only 1436 (with DSLite), this packet would be too long
|
|
||||||
for the WAN network.
|
|
||||||
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| | fastd | Tunneldigger | Wireguard |
|
|
||||||
+===============================+=======+==============+===========+
|
|
||||||
| max unfragmented payload\* | 1280 | 1280 | 1280 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| intermed layer overhead | 32 | 32 | 102 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| VPN MTU\*\* | 1312 | 1312 | 1382 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| protocol overhead (IPv4) | 66 | 50 | 60 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| min acceptable WAN MTU (IPv4) | 1378 | 1362 | **1442** |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| min acceptable WAN MTU (IPv6) | 1398 | 1382 | 1462 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
|
|
||||||
\* Maximum size of payload going into the bat0 interface, that will not be
|
|
||||||
fragmented by batman.
|
|
||||||
|
|
||||||
\*\* This is the MTU that is set in the site.conf.
|
|
||||||
|
|
||||||
Maximum MTU
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
Calculation of different derived MTUs based on a maximum WAN MTU of 1436.
|
|
||||||
|
|
||||||
Suggestions:
|
|
||||||
|
|
||||||
- This configuration can be used for fastd and Tunneldigger.
|
|
||||||
|
|
||||||
- For WireGuard, this is the recommended configuration. batman-adv will
|
|
||||||
fragment larger packets transparently to avoid packet loss.
|
|
||||||
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| | fastd | Tunneldigger | Wireguard |
|
|
||||||
+===============================+=======+==============+===========+
|
|
||||||
| min acceptable WAN MTU (IPv4) | 1436 | 1436 | 1436 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| protocol overhead (IPv4) | 66 | 50 | 60 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| VPN MTU\*\* | 1370 | 1386 | 1376 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| intermed layer overhead | 32 | 32 | 102 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| max unfragmented payload\* | 1338 | 1354 | 1274 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
| min acceptable WAN MTU (IPv6) | 1398 | 1382 | 1462 |
|
|
||||||
+-------------------------------+-------+--------------+-----------+
|
|
||||||
|
|
||||||
\* Maximum size of payload going into the bat0 interface, that will not be
|
|
||||||
fragmented by batman.
|
|
||||||
|
|
||||||
\*\* This is the MTU that is set in the site.conf.
|
|
||||||
|
|
||||||
Suggested MSS Values
|
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
It is highly advised to use MSS clamping for TCP on the gateways/supernodes in
|
|
||||||
order to avoid the fragmentation mechanism of batman whenever possible.
|
|
||||||
Especially on small embedded devices, fragmentation costs performance.
|
|
||||||
|
|
||||||
As batmans fragmentation is transparent to the TCP layer, clamping the MSS
|
|
||||||
automatically to the PMTU does not work. Instead, the MSS must be specified
|
|
||||||
explicitly. In iptables, this is done via :code:`-j TCPMSS --set-mss X`,
|
|
||||||
whereby :code:`X` is the desired MSS.
|
|
||||||
|
|
||||||
Since the MSS is specified in terms of payload of a TCP packet, the MSS is
|
|
||||||
different for IPv4 and IPv6. Here are some examples for different max
|
|
||||||
unfragmented payloads:
|
|
||||||
|
|
||||||
+---------------------------------+------+------+------+------+
|
|
||||||
| max unfragmented payload | 1274 | 1280 | 1338 | 1354 |
|
|
||||||
+=================================+======+======+======+======+
|
|
||||||
| suggested MSS (IPv4, -40 bytes) | 1234 | 1240 | 1298 | 1314 |
|
|
||||||
+---------------------------------+------+------+------+------+
|
|
||||||
| suggested MSS (IPv6, -60 bytes) | 1214 | 1220 | 1278 | 1294 |
|
|
||||||
+---------------------------------+------+------+------+------+
|
|
||||||
|
|
||||||
Conclusion
|
|
||||||
^^^^^^^^^^
|
|
||||||
|
|
||||||
Determining the maximum MTU can be a tedious process, especially since the PMTU
|
|
||||||
of peers could change at any time. The general recommendation for maximized
|
|
||||||
compatibility is therefore an MTU of 1312 bytes (for fastd and tunneldigger)
|
|
||||||
and 1376 bytes (for WireGuard).
|
|
@ -27,51 +27,55 @@ domain_seed
|
|||||||
mesh, but should be different for firmware that is not supposed to mesh with
|
mesh, but should be different for firmware that is not supposed to mesh with
|
||||||
each other.
|
each other.
|
||||||
|
|
||||||
The recommended way to generate a value for a new site is::
|
The recommended way to generate a value for a new site is:
|
||||||
|
::
|
||||||
|
|
||||||
echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
||||||
|
|
||||||
prefix4 \: optional
|
prefix4 \: optional
|
||||||
The IPv4 Subnet of your community mesh network in CIDR notation, e.g. ::
|
The IPv4 Subnet of your community mesh network in CIDR notation, e.g.
|
||||||
|
::
|
||||||
|
|
||||||
prefix4 = '10.111.111.0/18'
|
prefix4 = '10.111.111.0/18'
|
||||||
|
|
||||||
Required if ``next_node.ip4`` is set.
|
Required if ``next_node.ip4`` is set.
|
||||||
|
|
||||||
prefix6
|
prefix6
|
||||||
The IPv6 subnet of your community mesh network, e.g. ::
|
The IPv6 subnet of your community mesh network, e.g.
|
||||||
|
::
|
||||||
|
|
||||||
prefix6 = 'fdca::ffee:babe:1::/64'
|
prefix6 = 'fdca::ffee:babe:1::/64'
|
||||||
|
|
||||||
node_prefix6
|
node_prefix6
|
||||||
The ipv6 prefix from which the unique IP-addresses for nodes are selected
|
The ipv6 prefix from which the unique IP-addresses for nodes are selected
|
||||||
in babel-based networks. This may overlap with prefix6. e.g. ::
|
in babel-based networks. This may overlap with prefix6. e.g.
|
||||||
|
::
|
||||||
|
|
||||||
node_prefix6 = 'fdca::ffee:babe:2::/64'
|
node_prefix6 = 'fdca::ffee:babe:2::/64'
|
||||||
|
|
||||||
node_client_prefix6 \: optional, deprecated
|
node_client_prefix6
|
||||||
DEPRECATED: Don't specify it anymore, this prefix will then
|
The ipv6 prefix from which the client-specific IP-address is calculated that
|
||||||
automatically be generated from the domain_seed.
|
is assigned to each node by l3roamd to allow efficient communication when
|
||||||
|
roaming. This is exclusively useful when running a routing mesh protocol
|
||||||
An IPv6 prefix internally used by the l3roamd protocol, used to allow
|
like babel. e.g.
|
||||||
an efficient handover via unicast when a client roamed.
|
::
|
||||||
This is exclusively useful when running a routing mesh protocol
|
|
||||||
like babel. e.g. ::
|
|
||||||
|
|
||||||
node_client_prefix6 = 'fdca::ffee:babe:3::/64'
|
node_client_prefix6 = 'fdca::ffee:babe:3::/64'
|
||||||
|
|
||||||
timezone
|
timezone
|
||||||
The timezone of your community live in, e.g. ::
|
The timezone of your community live in, e.g.
|
||||||
|
::
|
||||||
|
|
||||||
-- Europe/Berlin
|
-- Europe/Berlin
|
||||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3'
|
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3'
|
||||||
|
|
||||||
ntp_servers
|
ntp_servers
|
||||||
List of NTP servers available in your community or used by your community, e.g.::
|
List of NTP servers available in your community or used by your community, e.g.:
|
||||||
|
::
|
||||||
|
|
||||||
ntp_servers = {'1.ntp.services.ffac','2.ntp.services.ffac'}
|
ntp_servers = {'1.ntp.services.ffac','2.ntp.services.ffac'}
|
||||||
|
|
||||||
These NTP servers must be reachable via IPv6 from the nodes. If you don't want to set an IPv6 address
|
This NTP servers must be reachable via IPv6 from the nodes. If you don't want to set an IPv6 address
|
||||||
explicitly, but use a hostname (which is recommended), see also the :ref:`FAQ <faq-dns>`.
|
explicitly, but use a hostname (which is recommended), see also the :ref:`FAQ <faq-dns>`.
|
||||||
|
|
||||||
opkg \: optional
|
opkg \: optional
|
||||||
@ -105,7 +109,8 @@ opkg \: optional
|
|||||||
- ``%GR`` is replaced by the Gluon release (as specified in ``site.mk``)
|
- ``%GR`` is replaced by the Gluon release (as specified in ``site.mk``)
|
||||||
|
|
||||||
regdom \: optional
|
regdom \: optional
|
||||||
The wireless regulatory domain responsible for your area, e.g. ::
|
The wireless regulatory domain responsible for your area, e.g.:
|
||||||
|
::
|
||||||
|
|
||||||
regdom = 'DE'
|
regdom = 'DE'
|
||||||
|
|
||||||
@ -118,6 +123,7 @@ wifi24 \: optional
|
|||||||
time units (TU). A time unit is equivalent to 1024 µs.
|
time units (TU). A time unit is equivalent to 1024 µs.
|
||||||
If not set, the default value of 100 TU (=102.4 ms) is used.
|
If not set, the default value of 100 TU (=102.4 ms) is used.
|
||||||
|
|
||||||
|
|
||||||
There are currently two interface types available. You may choose to
|
There are currently two interface types available. You may choose to
|
||||||
configure any subset of them:
|
configure any subset of them:
|
||||||
|
|
||||||
@ -152,7 +158,6 @@ wifi24 \: optional
|
|||||||
``mesh`` also accepts an optional ``mcast_rate`` (kbit/s) parameter for
|
``mesh`` also accepts an optional ``mcast_rate`` (kbit/s) parameter for
|
||||||
setting the multicast bitrate. Increasing the default value of 1000 to something
|
setting the multicast bitrate. Increasing the default value of 1000 to something
|
||||||
like 12000 is recommended.
|
like 12000 is recommended.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
wifi24 = {
|
wifi24 = {
|
||||||
@ -200,7 +205,6 @@ wifi5 \: optional
|
|||||||
|
|
||||||
next_node \: package
|
next_node \: package
|
||||||
Configuration of the local node feature of Gluon
|
Configuration of the local node feature of Gluon
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
next_node = {
|
next_node = {
|
||||||
@ -291,7 +295,7 @@ mesh_vpn
|
|||||||
|
|
||||||
The `enabled` option can be set to true to enable the VPN by default. `mtu`
|
The `enabled` option can be set to true to enable the VPN by default. `mtu`
|
||||||
defines the MTU of the VPN interface, determining a proper MTU value is described
|
defines the MTU of the VPN interface, determining a proper MTU value is described
|
||||||
in :doc:`mtu`.
|
in the :ref:`FAQ <faq-mtu>`.
|
||||||
|
|
||||||
By default the public key of a node's VPN daemon is not added to announced respondd
|
By default the public key of a node's VPN daemon is not added to announced respondd
|
||||||
data; this prevents malicious ISPs from correlating VPN sessions with specific mesh
|
data; this prevents malicious ISPs from correlating VPN sessions with specific mesh
|
||||||
@ -334,10 +338,10 @@ mesh_vpn
|
|||||||
|
|
||||||
mesh_vpn = {
|
mesh_vpn = {
|
||||||
-- enabled = true,
|
-- enabled = true,
|
||||||
|
mtu = 1312,
|
||||||
-- pubkey_privacy = true,
|
-- pubkey_privacy = true,
|
||||||
|
|
||||||
fastd = {
|
fastd = {
|
||||||
mtu = 1312,
|
|
||||||
methods = {'salsa2012+umac'},
|
methods = {'salsa2012+umac'},
|
||||||
-- configurable = true,
|
-- configurable = true,
|
||||||
-- syslog_level = 'warn',
|
-- syslog_level = 'warn',
|
||||||
@ -387,22 +391,7 @@ mesh_vpn
|
|||||||
},
|
},
|
||||||
|
|
||||||
tunneldigger = {
|
tunneldigger = {
|
||||||
mtu = 1312,
|
brokers = {'vpn1.alpha-centauri.freifunk.net'}
|
||||||
brokers = {'vpn1.alpha-centauri.freifunk.net'},
|
|
||||||
},
|
|
||||||
|
|
||||||
wireguard = {
|
|
||||||
mtu = 1376,
|
|
||||||
peers = {
|
|
||||||
vpn1 = {
|
|
||||||
public_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=',
|
|
||||||
endpoint = 'vpn1.alpha-centauri.freifunk.net:51810',
|
|
||||||
},
|
|
||||||
vpn2 = {
|
|
||||||
public_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=',
|
|
||||||
endpoint = 'vpn2.alpha-centauri.freifunk.net:51810',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
bandwidth_limit = {
|
bandwidth_limit = {
|
||||||
@ -417,46 +406,17 @@ mesh_vpn
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
.. _user-site-interfaces:
|
mesh_on_wan \: optional
|
||||||
|
Enables the mesh on the WAN port (``true`` or ``false``).
|
||||||
interfaces \: optional
|
|
||||||
Default setup for Ethernet ports.
|
|
||||||
::
|
::
|
||||||
|
|
||||||
interfaces = {
|
mesh_on_wan = true,
|
||||||
lan = {
|
|
||||||
default_roles = { 'client', 'mesh' },
|
|
||||||
},
|
|
||||||
wan = {
|
|
||||||
default_roles = { 'uplink', 'mesh' },
|
|
||||||
},
|
|
||||||
single = {
|
|
||||||
default_roles = { 'uplink', 'mesh' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
For devices that have two distinct Ethernet ports or port groups (often
|
mesh_on_lan \: optional
|
||||||
labelled WAN and LAN), the ``lan`` and ``wan`` sections are used. When there
|
Enables the mesh on the LAN port (``true`` or ``false``).
|
||||||
is only one port (group), ``single`` is used instead.
|
::
|
||||||
|
|
||||||
Available interface roles:
|
mesh_on_lan = true,
|
||||||
|
|
||||||
- ``client``: Port allows regular clients to connect to the mesh
|
|
||||||
- ``uplink``: Port is used to establish Mesh VPN connections
|
|
||||||
- ``mesh``: Wired meshing to another Gluon or Gluon-compatible node
|
|
||||||
|
|
||||||
The ``client`` role requires exclusive control over an interface. When
|
|
||||||
the ``client`` role is assigned to an interface at the same time as other
|
|
||||||
roles (like ``'client', 'mesh'`` in the above example), the other roles take
|
|
||||||
precedence (enabling ``mesh``, but not ``client`` in the example). In that
|
|
||||||
case, the ``client`` role is removed from the config of the interface.
|
|
||||||
|
|
||||||
All interface settings are optional. If unset, the following defaults are
|
|
||||||
used:
|
|
||||||
|
|
||||||
- ``lan``: ``{ 'client' }``
|
|
||||||
- ``wan``: ``{ 'uplink' }``
|
|
||||||
- ``single``: Same as ``wan``
|
|
||||||
|
|
||||||
poe_passthrough \: optional
|
poe_passthrough \: optional
|
||||||
Enable PoE passthrough by default on hardware with such a feature.
|
Enable PoE passthrough by default on hardware with such a feature.
|
||||||
@ -518,7 +478,7 @@ config_mode \: optional
|
|||||||
|
|
||||||
*openlayers_url* allows to override the base URL of the
|
*openlayers_url* allows to override the base URL of the
|
||||||
*build/ol.js* and *css/ol.css* files (the default is
|
*build/ol.js* and *css/ol.css* files (the default is
|
||||||
``https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@35ffe7626ce16c372143f3c903950750075e7068/en/v5.3.0``).
|
``https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.2.0``).
|
||||||
It is also possible to replace the default tile layer (which is OpenStreetMap)
|
It is also possible to replace the default tile layer (which is OpenStreetMap)
|
||||||
with a custom one using the *tile_layer* section. Only XYZ layers are supported
|
with a custom one using the *tile_layer* section. Only XYZ layers are supported
|
||||||
at this point.
|
at this point.
|
||||||
@ -609,7 +569,7 @@ GLUON_DEPRECATED
|
|||||||
Usually, devices are deprecated because their flash size is insufficient to
|
Usually, devices are deprecated because their flash size is insufficient to
|
||||||
support future Gluon versions. The recommended setting is ``0`` for new sites,
|
support future Gluon versions. The recommended setting is ``0`` for new sites,
|
||||||
and ``upgrade`` for existing configurations (where upgrades for existing
|
and ``upgrade`` for existing configurations (where upgrades for existing
|
||||||
deployments of low-flash devices are required). Defaults to ``0``.
|
deployments of low-flash devices are required).
|
||||||
|
|
||||||
GLUON_FEATURES
|
GLUON_FEATURES
|
||||||
Defines a list of features to include. Depending on the device, the feature list
|
Defines a list of features to include. Depending on the device, the feature list
|
||||||
|
@ -4,21 +4,6 @@ Supported Devices & Architectures
|
|||||||
ath79-generic
|
ath79-generic
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
* ALFA Network
|
|
||||||
|
|
||||||
- AP121F
|
|
||||||
|
|
||||||
* AVM
|
|
||||||
|
|
||||||
- FRITZ!WLAN Repeater 300E [#avmflash]_
|
|
||||||
- Fritz!WLAN Repeater 450E [#avmflash]_
|
|
||||||
- Fritz!Box 4020 [#avmflash]_
|
|
||||||
|
|
||||||
* Buffalo
|
|
||||||
|
|
||||||
- WZR-HP-AG300H / WZR-600DHP
|
|
||||||
- WZR-HP-G300NH (rtl8366s)
|
|
||||||
|
|
||||||
* devolo
|
* devolo
|
||||||
|
|
||||||
- WiFi pro 1200e [#lan_as_wan]_
|
- WiFi pro 1200e [#lan_as_wan]_
|
||||||
@ -28,142 +13,30 @@ ath79-generic
|
|||||||
- WiFi pro 1750i
|
- WiFi pro 1750i
|
||||||
- WiFi pro 1750x
|
- WiFi pro 1750x
|
||||||
|
|
||||||
* D-Link
|
|
||||||
|
|
||||||
- DAP-1330 A1 [#lan_as_wan]_
|
|
||||||
- DAP-1365 A1 [#lan_as_wan]_
|
|
||||||
- DAP-2660 A1 [#lan_as_wan]_
|
|
||||||
- DIR-505 A1 [#lan_as_wan]_
|
|
||||||
- DIR-505 A2 [#lan_as_wan]_
|
|
||||||
- DIR-825 B1
|
|
||||||
|
|
||||||
* Enterasys
|
|
||||||
|
|
||||||
- WS-AP3705i
|
|
||||||
|
|
||||||
* Extreme Networks
|
|
||||||
|
|
||||||
- WS-AP3805i
|
|
||||||
|
|
||||||
* GL.iNet
|
* GL.iNet
|
||||||
|
|
||||||
- 6416A
|
|
||||||
- GL-AR150
|
|
||||||
- GL-AR300M-Lite
|
- GL-AR300M-Lite
|
||||||
- GL-AR750
|
|
||||||
- GL-USB150 (Microuter)
|
|
||||||
|
|
||||||
* Joy-IT
|
|
||||||
|
|
||||||
- JT-OR750i
|
|
||||||
|
|
||||||
* LibreRouter
|
|
||||||
|
|
||||||
- LibreRouter v1 [#missing_radios]_
|
|
||||||
|
|
||||||
* Netgear
|
|
||||||
|
|
||||||
- WNDR3700 (v1, v2)
|
|
||||||
- WNDR3800
|
|
||||||
- WNR2200 (8M, 16M)
|
|
||||||
|
|
||||||
* OCEDO
|
* OCEDO
|
||||||
|
|
||||||
- Koala
|
|
||||||
- Raccoon
|
- Raccoon
|
||||||
|
|
||||||
* Onion
|
|
||||||
|
|
||||||
- Omega [#modular_ethernet]_
|
|
||||||
|
|
||||||
* OpenMesh
|
|
||||||
|
|
||||||
- A40
|
|
||||||
- A60
|
|
||||||
- MR600 (v1, v2)
|
|
||||||
- MR900 (v1, v2)
|
|
||||||
- MR1750 (v1, v2)
|
|
||||||
- OM2P (v1, v2, v4)
|
|
||||||
- OM2P-HS (v1, v2, v3, v4)
|
|
||||||
- OM2P-LC
|
|
||||||
- OM5P
|
|
||||||
- OM5P-AC (v1, v2)
|
|
||||||
- OM5P-AN
|
|
||||||
|
|
||||||
* Plasma Cloud
|
* Plasma Cloud
|
||||||
|
|
||||||
- PA300
|
- PA300
|
||||||
- PA300E
|
- PA300E
|
||||||
|
|
||||||
* Siemens
|
|
||||||
|
|
||||||
- WS-AP3610
|
|
||||||
|
|
||||||
* Teltonika
|
|
||||||
|
|
||||||
- RUT230 (v1)
|
|
||||||
|
|
||||||
* TP-Link
|
* TP-Link
|
||||||
|
|
||||||
- Archer A7 (v5)
|
- Archer C6 (v2)
|
||||||
- Archer C5 (v1)
|
|
||||||
- Archer C6 (v2 EU/RU/JP)
|
|
||||||
- Archer C7 (v2, v4, v5)
|
|
||||||
- Archer C59 (v1)
|
|
||||||
- CPE210 (v1.0, v1.1, v2.0, v3.0, v3.1, v3.20)
|
|
||||||
- CPE220 (v3.0)
|
- CPE220 (v3.0)
|
||||||
- CPE510 (v1.0, v1.1, v2.0, v3.0)
|
|
||||||
- CPE710 (v1.0)
|
|
||||||
- EAP225-Outdoor (v1)
|
|
||||||
- RE450 (v1)
|
|
||||||
- TL-WDR3500 (v1)
|
|
||||||
- TL-WDR3600 (v1)
|
|
||||||
- TL-WDR4300 (v1)
|
|
||||||
- TL-WR810N (v1)
|
|
||||||
- TL-WR842N/ND (v3)
|
|
||||||
- TL-WR1043N/ND (v2, v3, v4, v5)
|
|
||||||
- WBS210 (v1.20, v2.0)
|
|
||||||
- WBS510 (v1.20)
|
|
||||||
|
|
||||||
* Ubiquiti
|
|
||||||
|
|
||||||
- NanoBeam M5 (XW)
|
|
||||||
- NanoStation Loco M2/M5 (XW)
|
|
||||||
- NanoStation M2/M5 (XW)
|
|
||||||
- UniFi AC Lite
|
|
||||||
- UniFi AC LR
|
|
||||||
- UniFi AC Mesh
|
|
||||||
- UniFi AC Mesh Pro
|
|
||||||
- UniFi AC Pro
|
|
||||||
- UniFi AP
|
|
||||||
- UniFi AP LR
|
|
||||||
- UniFi AP Outdoor+
|
|
||||||
- UniFi AP PRO
|
|
||||||
|
|
||||||
ath79-nand
|
ath79-nand
|
||||||
----------
|
----------
|
||||||
|
|
||||||
* Aerohive
|
|
||||||
|
|
||||||
- HiveAP 121
|
|
||||||
|
|
||||||
* GL.iNet
|
* GL.iNet
|
||||||
|
|
||||||
- GL-AR300M
|
|
||||||
- GL-AR750S
|
- GL-AR750S
|
||||||
- GL-XE300
|
|
||||||
|
|
||||||
* Netgear
|
|
||||||
|
|
||||||
- WNDR3700 (v4)
|
|
||||||
- WNDR4300 (v1)
|
|
||||||
|
|
||||||
ath79-mikrotik
|
|
||||||
--------------
|
|
||||||
|
|
||||||
* Mikrotik
|
|
||||||
|
|
||||||
- RB951Ui-2nD (hAP)
|
|
||||||
|
|
||||||
brcm2708-bcm2708
|
brcm2708-bcm2708
|
||||||
----------------
|
----------------
|
||||||
@ -182,17 +55,12 @@ ipq40xx-generic
|
|||||||
* Aruba
|
* Aruba
|
||||||
|
|
||||||
- AP-303
|
- AP-303
|
||||||
- AP-303H
|
|
||||||
- AP-365
|
|
||||||
- Instant On AP11
|
- Instant On AP11
|
||||||
- Instant On AP11D
|
|
||||||
- Instant On AP17
|
|
||||||
|
|
||||||
* AVM
|
* AVM
|
||||||
|
|
||||||
- FRITZ!Box 4040 [#avmflash]_
|
- FRITZ!Box 4040 [#avmflash]_
|
||||||
- FRITZ!Box 7520 (v1) [#eva_ramboot]_ [#lan_as_wan]_
|
- FRITZ!Box 7530 [#eva_ramboot]_
|
||||||
- FRITZ!Box 7530 [#eva_ramboot]_ [#lan_as_wan]_
|
|
||||||
- FRITZ!Repeater 1200 [#eva_ramboot]_
|
- FRITZ!Repeater 1200 [#eva_ramboot]_
|
||||||
|
|
||||||
* EnGenius
|
* EnGenius
|
||||||
@ -201,7 +69,6 @@ ipq40xx-generic
|
|||||||
|
|
||||||
* GL.iNet
|
* GL.iNet
|
||||||
|
|
||||||
- GL-AP1300
|
|
||||||
- GL-B1300
|
- GL-B1300
|
||||||
|
|
||||||
* Linksys
|
* Linksys
|
||||||
@ -228,15 +95,6 @@ ipq40xx-generic
|
|||||||
- NBG6617
|
- NBG6617
|
||||||
- WRE6606 [#device-class-tiny]_
|
- WRE6606 [#device-class-tiny]_
|
||||||
|
|
||||||
ipq40xx-mikrotik
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* Mikrotik
|
|
||||||
|
|
||||||
- DISC Lite5 ac (RBDiscG-5acD)
|
|
||||||
- hAP ac2
|
|
||||||
- SXTsq 5 ac (RBSXTsqG-5acD)
|
|
||||||
|
|
||||||
ipq806x-generic
|
ipq806x-generic
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
@ -247,10 +105,6 @@ ipq806x-generic
|
|||||||
lantiq-xrx200
|
lantiq-xrx200
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
* Arcadyan
|
|
||||||
|
|
||||||
- VGV7510KW22 (o2 Box 6431)
|
|
||||||
|
|
||||||
* AVM
|
* AVM
|
||||||
|
|
||||||
- FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_
|
- FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_
|
||||||
@ -258,10 +112,6 @@ lantiq-xrx200
|
|||||||
- FRITZ!Box 7362 SL [#eva_ramboot]_ [#lan_as_wan]_
|
- FRITZ!Box 7362 SL [#eva_ramboot]_ [#lan_as_wan]_
|
||||||
- FRITZ!Box 7412 [#eva_ramboot]_
|
- FRITZ!Box 7412 [#eva_ramboot]_
|
||||||
|
|
||||||
* TP-Link
|
|
||||||
|
|
||||||
- TD-W8970 (v1) [#lan_as_wan]_
|
|
||||||
|
|
||||||
lantiq-xway
|
lantiq-xway
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
@ -276,24 +126,12 @@ lantiq-xway
|
|||||||
mediatek-mt7622
|
mediatek-mt7622
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
* Linksys
|
|
||||||
|
|
||||||
- E8450
|
|
||||||
|
|
||||||
* Ubiquiti
|
* Ubiquiti
|
||||||
|
|
||||||
- UniFi 6 LR
|
- UniFi 6 LR
|
||||||
|
|
||||||
* Xiaomi
|
mpc85xx-generic
|
||||||
|
---------------
|
||||||
- AX3200 (RB03)
|
|
||||||
|
|
||||||
mpc85xx-p1010
|
|
||||||
-------------
|
|
||||||
|
|
||||||
* Sophos
|
|
||||||
|
|
||||||
- RED 15w Rev.1
|
|
||||||
|
|
||||||
* TP-Link
|
* TP-Link
|
||||||
|
|
||||||
@ -310,10 +148,6 @@ mpc85xx-p1020
|
|||||||
|
|
||||||
- WS-AP3710i
|
- WS-AP3710i
|
||||||
|
|
||||||
* Extreme Networks
|
|
||||||
|
|
||||||
- WS-AP3825i
|
|
||||||
|
|
||||||
* OCEDO
|
* OCEDO
|
||||||
|
|
||||||
- Panda
|
- Panda
|
||||||
@ -321,10 +155,6 @@ mpc85xx-p1020
|
|||||||
ramips-mt7620
|
ramips-mt7620
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
* ASUS
|
|
||||||
|
|
||||||
- RT-AC51U
|
|
||||||
|
|
||||||
* GL.iNet
|
* GL.iNet
|
||||||
|
|
||||||
- GL-MT300A
|
- GL-MT300A
|
||||||
@ -358,61 +188,28 @@ ramips-mt7621
|
|||||||
|
|
||||||
- RT-AC57U
|
- RT-AC57U
|
||||||
|
|
||||||
* Cudy
|
|
||||||
|
|
||||||
- WR1300 (v1)
|
|
||||||
- WR2100
|
|
||||||
- X6 (v1, v2)
|
|
||||||
|
|
||||||
* D-Link
|
* D-Link
|
||||||
|
|
||||||
- DAP-X1860 (A1)
|
|
||||||
- DIR-860L (B1)
|
- DIR-860L (B1)
|
||||||
|
|
||||||
* GL.iNet
|
|
||||||
|
|
||||||
- GL-MT1300
|
|
||||||
|
|
||||||
* Mercusys
|
|
||||||
|
|
||||||
- MR70X (v1)
|
|
||||||
|
|
||||||
* NETGEAR
|
* NETGEAR
|
||||||
|
|
||||||
- EX6150 (v1)
|
- EX6150 (v1)
|
||||||
- R6220
|
- R6220
|
||||||
- R6260
|
|
||||||
- WAC104
|
|
||||||
- WAX202
|
|
||||||
|
|
||||||
* TP-Link
|
|
||||||
|
|
||||||
- RE500 (v1)
|
|
||||||
- RE650 (v1)
|
|
||||||
|
|
||||||
* Ubiquiti
|
* Ubiquiti
|
||||||
|
|
||||||
- EdgeRouter X
|
- EdgeRouter X
|
||||||
- EdgeRouter X-SFP
|
- EdgeRouter X-SFP
|
||||||
- UniFi 6 Lite
|
|
||||||
|
|
||||||
* Wavlink
|
|
||||||
|
|
||||||
- WS-WN572HP3 (4G)
|
|
||||||
|
|
||||||
* ZBT
|
* ZBT
|
||||||
|
|
||||||
- WG3526-16M
|
- WG3526-16M
|
||||||
- WG3526-32M
|
- WG3526-32M
|
||||||
|
|
||||||
* ZyXEL
|
|
||||||
|
|
||||||
- NWA50AX
|
|
||||||
|
|
||||||
* Xiaomi
|
* Xiaomi
|
||||||
|
|
||||||
- Xiaomi Mi Router 4A (Gigabit Edition)
|
- Xiaomi Mi Router 4A (Gigabit Edition)
|
||||||
- Xiaomi Mi Router 3G (v1, v2)
|
|
||||||
|
|
||||||
ramips-mt76x8
|
ramips-mt76x8
|
||||||
-------------
|
-------------
|
||||||
@ -424,24 +221,16 @@ ramips-mt76x8
|
|||||||
* GL.iNet
|
* GL.iNet
|
||||||
|
|
||||||
- GL-MT300N (v2)
|
- GL-MT300N (v2)
|
||||||
- microuter-N300
|
|
||||||
- VIXMINI
|
- VIXMINI
|
||||||
|
|
||||||
* NETGEAR
|
* NETGEAR
|
||||||
|
|
||||||
- R6020
|
|
||||||
- R6120
|
- R6120
|
||||||
|
|
||||||
* RAVPower
|
|
||||||
|
|
||||||
- RP-WD009
|
|
||||||
|
|
||||||
* TP-Link
|
* TP-Link
|
||||||
|
|
||||||
- Archer C20 (v4, v5)
|
- Archer C50 (v3)
|
||||||
- Archer C50 (v3, v4)
|
- Archer C50 (v4)
|
||||||
- RE200 (v2, v3)
|
|
||||||
- RE305 (v1) [#device-class-tiny]
|
|
||||||
- TL-MR3020 (v3)
|
- TL-MR3020 (v3)
|
||||||
- TL-MR3420 (v5)
|
- TL-MR3420 (v5)
|
||||||
- TL-WA801ND (v5)
|
- TL-WA801ND (v5)
|
||||||
@ -455,15 +244,14 @@ ramips-mt76x8
|
|||||||
* Xiaomi
|
* Xiaomi
|
||||||
|
|
||||||
- Xiaomi Mi Router 4A (100M Edition)
|
- Xiaomi Mi Router 4A (100M Edition)
|
||||||
- Xiaomi Mi Router 4A (100M International Edition)
|
|
||||||
- Xiaomi Mi Router 4C
|
- Xiaomi Mi Router 4C
|
||||||
|
|
||||||
realtek-rtl838x
|
ramips-rt305x [#deprecated]_ [#device-class-tiny]_
|
||||||
---------------
|
---------------------------------------------------
|
||||||
|
|
||||||
* D-Link
|
* VoCore
|
||||||
|
|
||||||
- DGS-1210-10P (F1)
|
- VoCore (8M, 16M)
|
||||||
|
|
||||||
rockchip-armv8
|
rockchip-armv8
|
||||||
--------------
|
--------------
|
||||||
@ -471,7 +259,6 @@ rockchip-armv8
|
|||||||
* FriendlyElec
|
* FriendlyElec
|
||||||
|
|
||||||
- NanoPi R2S
|
- NanoPi R2S
|
||||||
- NanoPi R4S (4GB LPDDR4)
|
|
||||||
|
|
||||||
sunxi-cortexa7
|
sunxi-cortexa7
|
||||||
--------------
|
--------------
|
||||||
@ -508,14 +295,18 @@ See also: :doc:`x86`
|
|||||||
Footnotes
|
Footnotes
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
.. [#deprecated]
|
||||||
|
The device or target is reaching its end of life soon. This means that support
|
||||||
|
in the next major release of Gluon is doubtful.
|
||||||
|
|
||||||
.. [#device-class-tiny]
|
.. [#device-class-tiny]
|
||||||
These devices only support a subset of Gluons capabilities due to flash or memory
|
These devices only support a subset of Gluons capabilities due to flash or memory
|
||||||
size constraints. Devices are classified as tiny if they provide less than 7M of usable
|
size constraints. Devices are classified as tiny in they provide less than 7M of usable
|
||||||
flash space or have a low amount of system memory. For more information, see the
|
flash space or have a low amount of system memory. For more information, see the
|
||||||
developer documentation: :ref:`device-class-definition`.
|
developer documentation: :ref:`device-class-definition`.
|
||||||
|
|
||||||
.. [#avmflash]
|
.. [#avmflash]
|
||||||
For instructions on how to flash AVM devices, visit https://fritz-tools.readthedocs.io
|
For instructions on how to flash AVM devices, visit https://fritzfla.sh
|
||||||
|
|
||||||
.. [#eva_ramboot]
|
.. [#eva_ramboot]
|
||||||
For instructions on how to flash AVM NAND devices, see the respective
|
For instructions on how to flash AVM NAND devices, see the respective
|
||||||
@ -523,14 +314,3 @@ Footnotes
|
|||||||
|
|
||||||
.. [#lan_as_wan]
|
.. [#lan_as_wan]
|
||||||
All LAN ports on this device are used as WAN.
|
All LAN ports on this device are used as WAN.
|
||||||
|
|
||||||
.. [#missing_radios]
|
|
||||||
This device contains more than two WLAN radios, which is currently
|
|
||||||
unsupported by Gluon. Only the first two radios will work.
|
|
||||||
|
|
||||||
.. [#modular_ethernet]
|
|
||||||
These devices follow a modular principle,
|
|
||||||
which means even basic functionality like ethernet is provided by an expansion-board,
|
|
||||||
that may not be bundled with the device itself.
|
|
||||||
Such expansions are recommended for the config mode, but are not strictly necessary,
|
|
||||||
as exposed serial ports may grant sufficient access as well.
|
|
||||||
|
@ -15,7 +15,7 @@ The following targets for x86 images exist:
|
|||||||
|
|
||||||
There are three images:
|
There are three images:
|
||||||
|
|
||||||
* `generic` (compressed "raw" image, can be written to a disk directly or booted with qemu)
|
* `generic` (compressed "raw" image, can written to a disk directly or booted with qemu)
|
||||||
* `virtualbox` (VDI image)
|
* `virtualbox` (VDI image)
|
||||||
* `vmware` (VMDK image)
|
* `vmware` (VMDK image)
|
||||||
|
|
||||||
|
14
modules
14
modules
@ -1,16 +1,16 @@
|
|||||||
GLUON_FEEDS='packages routing gluon'
|
GLUON_FEEDS='packages routing gluon'
|
||||||
|
|
||||||
OPENWRT_REPO=https://github.com/openwrt/openwrt.git
|
OPENWRT_REPO=https://github.com/openwrt/openwrt.git
|
||||||
OPENWRT_BRANCH=openwrt-22.03
|
OPENWRT_BRANCH=openwrt-21.02
|
||||||
OPENWRT_COMMIT=e500494771537b9f42f78e4d907bed18b6383606
|
OPENWRT_COMMIT=d666ebcaa327a1e03992a484d9601ea5f2e6b19a
|
||||||
|
|
||||||
PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
|
PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git
|
||||||
PACKAGES_PACKAGES_BRANCH=openwrt-22.03
|
PACKAGES_PACKAGES_BRANCH=openwrt-21.02
|
||||||
PACKAGES_PACKAGES_COMMIT=55eed1761207f4dfdb8e7d79138f6f65c8849b50
|
PACKAGES_PACKAGES_COMMIT=5fa605a1fa76bc68e3f70122713e592a1b25f068
|
||||||
|
|
||||||
PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
|
PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git
|
||||||
PACKAGES_ROUTING_BRANCH=openwrt-22.03
|
PACKAGES_ROUTING_BRANCH=openwrt-21.02
|
||||||
PACKAGES_ROUTING_COMMIT=1cc7676b9f32acc30ec47f15fcb70380d5d6ef01
|
PACKAGES_ROUTING_COMMIT=2baff33918c089fd3744c7192f8ae7a29c47a8d7
|
||||||
|
|
||||||
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
|
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
|
||||||
PACKAGES_GLUON_COMMIT=29912ec6308fd10b47763b4cf28a638d07f59973
|
PACKAGES_GLUON_COMMIT=825aa0c093d6c0b4f81a95cd2320331a5b5adae6
|
||||||
|
@ -16,12 +16,7 @@ when(_'web-wizard' and _'autoupdater', {
|
|||||||
'gluon-config-mode-autoupdater',
|
'gluon-config-mode-autoupdater',
|
||||||
})
|
})
|
||||||
|
|
||||||
when(_'web-wizard' and (
|
when(_'web-wizard' and (_'mesh-vpn-fastd' or _'mesh-vpn-tunneldigger'), {
|
||||||
_'mesh-vpn-fastd' or
|
|
||||||
_'mesh-vpn-fastd-l2tp' or
|
|
||||||
_'mesh-vpn-tunneldigger' or
|
|
||||||
_'mesh-vpn-wireguard'
|
|
||||||
), {
|
|
||||||
'gluon-config-mode-mesh-vpn',
|
'gluon-config-mode-mesh-vpn',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=gluon-alfred
|
PKG_NAME:=gluon-alfred
|
||||||
|
PKG_VERSION:=1
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
include ../gluon.mk
|
include ../gluon.mk
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=gluon-authorized-keys
|
PKG_NAME:=gluon-authorized-keys
|
||||||
|
PKG_VERSION:=2
|
||||||
|
|
||||||
include ../gluon.mk
|
include ../gluon.mk
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=gluon-autoupdater
|
PKG_NAME:=gluon-autoupdater
|
||||||
|
PKG_VERSION:=4
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS := CONFIG_GLUON_AUTOUPDATER_BRANCH CONFIG_GLUON_AUTOUPDATER_ENABLED
|
PKG_CONFIG_DEPENDS := CONFIG_GLUON_AUTOUPDATER_BRANCH CONFIG_GLUON_AUTOUPDATER_ENABLED
|
||||||
|
|
||||||
|
@ -1,25 +1,11 @@
|
|||||||
local branches = table_keys(need_table({'autoupdater', 'branches'}, function(branch)
|
need_string(in_site({'autoupdater', 'branch'}), false)
|
||||||
|
|
||||||
|
need_table({'autoupdater', 'branches'}, function(branch)
|
||||||
need_alphanumeric_key(branch)
|
need_alphanumeric_key(branch)
|
||||||
|
|
||||||
need_string(in_site(extend(branch, {'name'})))
|
need_string(in_site(extend(branch, {'name'})))
|
||||||
need_string_array_match(extend(branch, {'mirrors'}), '^http://')
|
need_string_array_match(extend(branch, {'mirrors'}), '^http://')
|
||||||
|
|
||||||
local pubkeys = need_string_array_match(in_site(extend(branch, {'pubkeys'})), '^%x+$')
|
|
||||||
need_number(in_site(extend(branch, {'good_signatures'})))
|
need_number(in_site(extend(branch, {'good_signatures'})))
|
||||||
need(in_site(extend(branch, {'good_signatures'})), function(good_signatures)
|
need_string_array_match(in_site(extend(branch, {'pubkeys'})), '^%x+$')
|
||||||
return good_signatures <= #pubkeys
|
|
||||||
end, nil, string.format('be less than or equal to the number of public keys (%d)', #pubkeys))
|
|
||||||
|
|
||||||
obsolete(in_site(extend(branch, {'probability'})), 'Use GLUON_PRIORITY in site.mk instead.')
|
obsolete(in_site(extend(branch, {'probability'})), 'Use GLUON_PRIORITY in site.mk instead.')
|
||||||
end))
|
end)
|
||||||
|
|
||||||
need_one_of(in_site({'autoupdater', 'branch'}), branches, false)
|
|
||||||
|
|
||||||
-- Check GLUON_AUTOUPDATER_BRANCH
|
|
||||||
local default_branch
|
|
||||||
local f = io.open((os.getenv('IPKG_INSTROOT') or '') .. '/lib/gluon/autoupdater/default_branch')
|
|
||||||
if f then
|
|
||||||
default_branch = f:read('*line')
|
|
||||||
f:close()
|
|
||||||
end
|
|
||||||
need_one_of(value('GLUON_AUTOUPDATER_BRANCH', default_branch), branches, false)
|
|
||||||
|
@ -21,34 +21,25 @@ for name, config in pairs(site.autoupdater.branches()) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function default_branch()
|
if not uci:get('autoupdater', 'settings') then
|
||||||
|
local enabled = unistd.access('/lib/gluon/autoupdater/default_enabled') ~= nil
|
||||||
|
|
||||||
|
local branch = site.autoupdater.branch(min_branch)
|
||||||
local f = io.open('/lib/gluon/autoupdater/default_branch')
|
local f = io.open('/lib/gluon/autoupdater/default_branch')
|
||||||
if f then
|
if f then
|
||||||
local ret = f:read('*line')
|
branch = f:read('*line')
|
||||||
f:close()
|
f:close()
|
||||||
return ret
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return site.autoupdater.branch(min_branch)
|
|
||||||
end
|
|
||||||
|
|
||||||
local enabled, branch
|
|
||||||
if not uci:get('autoupdater', 'settings') then
|
|
||||||
enabled = unistd.access('/lib/gluon/autoupdater/default_enabled') ~= nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local old_branch = uci:get('autoupdater', 'settings', 'branch')
|
|
||||||
if not old_branch or not uci:get('autoupdater', old_branch) then
|
|
||||||
branch = default_branch()
|
|
||||||
if not branch then
|
if not branch then
|
||||||
enabled = false
|
enabled = false
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
uci:section('autoupdater', 'autoupdater', 'settings', {
|
uci:section('autoupdater', 'autoupdater', 'settings', {
|
||||||
enabled = enabled,
|
enabled = enabled,
|
||||||
branch = branch,
|
branch = branch,
|
||||||
})
|
})
|
||||||
|
end
|
||||||
|
|
||||||
uci:set('autoupdater', 'settings', 'version_file', '/lib/gluon/release')
|
uci:set('autoupdater', 'settings', 'version_file', '/lib/gluon/release')
|
||||||
|
|
||||||
|
@ -1,5 +1,27 @@
|
|||||||
/* SPDX-FileCopyrightText: 2016, Matthias Schiffer <mschiffer@universe-factory.net> */
|
/*
|
||||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
Copyright (c) 2016, Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <respondd.h>
|
#include <respondd.h>
|
||||||
@ -37,7 +59,7 @@ static struct json_object * get_autoupdater(void) {
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
uci_free_context(ctx);
|
uci_free_context(ctx);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user