diff --git a/README.md b/README.md index 1f20ab2..a0673d8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ In the next two commands replace GLUON_VERSION and SITE_VERSION with the actual version numbers. $ git clone -b GLUON_VERSION https://github.com/freifunk-gluon/gluon.git - $ git clone -b SITE_VERSION https://github.com/freifunkhamburg/site-ffhh.git + $ git clone -b SITE_VERSION https://codeberg.org/freifunkhamburg/site-ffhh.git $ cd site-ffhh To build the firmware into the subdirectory firmware: @@ -15,6 +15,21 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu #### Gluon versions used for specific Hamburg Freifunk Firmware builds +- v2023.2.5.0: site-ffhh: v2023.2.5.0, gluon: v2023.2.5 +- v2023.2.4.0: site-ffhh: v2023.2.4.0, gluon: v2023.2.4 +- v2023.2.2.1: site-ffhh: v2023.2.2.0, gluon: v2023.2.2 (add mediatek-filogic Routers) +- v2023.2.2.0: site-ffhh: v2023.2.2.0, gluon: v2023.2.2 +- v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2 +- v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4 +- v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3 (nur experimental verteilt) +- v2021.1.2.0: site-ffhh: v2021.1.2.0, gluon: v2021.1.2 +- v2021.1.1.0: site-ffhh: v2021.1.1.0, gluon: v2021.1.1 +- v2020.2.3.0: site-ffhh: v2020.2.3.0, gluon: v2020.2.3 +- v2020.2.2.0: site-ffhh: v2020.2.2.0, gluon: v2020.2.2 +- v2020.1.4.0: site-ffhh: v2020.1.4.0, gluon: v2020.1.4 +- v2020.1.3.0: site-ffhh: v2020.1.3.0, gluon: v2020.1.3 +- v2019.1.2.0: site-ffhh: v2019.1.2.0, gluon: v2019.1.2 +- v2018.2.3.0: site-ffhh: v2018.2.3.0, gluon: v2018.2.3 - v2018.2.1.0: site-ffhh: v2018.2.1.0, gluon: v2018.2.1 - v2018.1.4.2: site-ffhh: v2018.1.4.2, gluon: v2018.1.4 - v2018.1.4.1: site-ffhh: v2018.1.4.1, gluon: v2018.1.4 diff --git a/build.conf b/build.conf index 5b9c9c4..2d07aa1 100644 --- a/build.conf +++ b/build.conf @@ -1,3 +1,5 @@ -GLUON_RELEASE="v2018.2.1.0" -GLUON_BRANCH="stable" -targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode" +GLUON_RELEASE="v2023.2.5.0" +targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-filogic mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64" +broken_images=( + '*dir*615*d*' +) diff --git a/build.sh b/build.sh index 5008580..5647ba5 100755 --- a/build.sh +++ b/build.sh @@ -2,14 +2,16 @@ set -e function announce () { - echo '############################' $* >&2 + echo '############################' "$@" >&2 } function usage () { echo "Usage: $0 -g GLUON_PATH" >&2 echo " -g GLUON_PATH Path to a checkout of the gluon repository." >&2 echo " -t TARGETS Comma separated list of gluon targets to build" >&2 + echo " -a Automatically detect and build all targets." >&2 echo " -o OUT_PATH Path to the firmware output directory. Default: ${gluon_out}" >&2 echo " -s SIGNATURE Sign firmware with signature" >&2 + echo " -stable Set GLUON_AUTOUPDATER_BRANCH=stable" >&2 echo " -b BROKEN=1" >&2 echo " -v verbose" >&2 echo " -j JOBS Run build with -jJOBS. Default: ${proc}" >&2 @@ -20,6 +22,9 @@ gluon_out="${HOME}/firmware" while [ $# -gt 0 ]; do case "$1" in + -a) + auto_targets=1 + ;; -g) gluon_path="$2" shift @@ -36,6 +41,9 @@ while [ $# -gt 0 ]; do signature="$2" shift ;; + -stable) + export GLUON_AUTOUPDATER_BRANCH=stable + ;; -b) export BROKEN=1 ;; @@ -60,48 +68,66 @@ if [ -z "$gluon_path" ]; then exit 1 fi -gluon_path=$(realpath $gluon_path) -gluon_out=$(realpath $gluon_out) -site_path=$(realpath $(dirname $BASH_SOURCE)) +gluon_path=$(realpath "$gluon_path") +gluon_out=$(realpath "$gluon_out") +site_path=$(realpath "$(dirname "${BASH_SOURCE[0]}")") -announce GLUON: $gluon_path >&2 -announce FFHH SITE PATH: $site_path >&2 +announce GLUON: "$gluon_path" >&2 +announce FFHH SITE PATH: "$site_path" >&2 -pushd $site_path +pushd "$site_path" +# shellcheck source=/dev/null . ./build.conf -[ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)" +GLUON_AUTOUPDATER_BRANCH="${GLUON_AUTOUPDATER_BRANCH:-experimental}" +[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp${BUILD_DATE:-$(date +%Y%m%d)}" export GLUON_RELEASE -export GLUON_BRANCH -# if a list of build targets has been supplied, only build those -targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')" -announce The following targets will be generated: $targets >&2 +export GLUON_AUTOUPDATER_BRANCH +export GLUON_SITEDIR="${site_path}" +export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_AUTOUPDATER_BRANCH}" popd +announce GLUON Variables: +env | egrep '^GLUON' | sort + pushd "${gluon_path}" announce Starting make update... -export GLUON_SITEDIR="${site_path}" -export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}" -rm -rf "${GLUON_OUTPUTDIR}" mkdir -p "${GLUON_OUTPUTDIR}" make update # Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work. -for p in ${site_path}/patches/*.patch; do - if [ -e "$p" -a ! -f "${gluon_path}/${p##*/}" ]; then - announce Installing patch $p - patch -p1 < $p +for p in "${site_path}"/patches/*.patch; do + if [ -e "$p" ] && [ ! -f "${gluon_path}/${p##*/}" ]; then + announce "Installing patch $p" + patch -p1 < "$p" touch "${gluon_path}/${p##*/}" fi done + +if [ "$auto_targets" = "1" ]; then + # detect available targets + targets="$(make list-targets | sort | xargs)" +else + # if a list of build targets has been supplied, only build those + targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')" +fi +announce "The following targets will be generated: $targets" >&2 + for t in $targets; do - announce Starting build for $t... >&2 - make -j$(nproc) GLUON_TARGET=$t $verbose + announce "Starting build for $t..." >&2 + make "-j$(nproc)" "GLUON_TARGET=$t" $verbose +done +# Remove known-broken images +# shellcheck disable=SC2154 +for broken_image in "${broken_images[@]}"; do + announce "Removing broken image ${broken_image}..." + find "${GLUON_OUTPUTDIR}/images" -iname "${broken_image}" \( -type f -o -type l \) -ls -exec rm -f {} \; done # Generate the images.list -( cd "${GLUON_OUTPUTDIR}/images" && ( find -type f ! -iname '*.manifest' ! -iname images.list; find -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list ) +# shellcheck disable=SC2094 +( cd "${GLUON_OUTPUTDIR}/images" && ( echo "RELEASE=${GLUON_RELEASE}"; find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list ) announce Building manifest... make manifest if [ -n "${signature}" ]; then - if [ "$GLUON_BRANCH" == "experimental" ]; then + if [ "$GLUON_AUTOUPDATER_BRANCH" == "experimental" ]; then announce Signing... "${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest" else diff --git a/domains/ffhh_nowe.conf b/domains/ffhh_nowe.conf index 90aed0c..4ecba48 100644 --- a/domains/ffhh_nowe.conf +++ b/domains/ffhh_nowe.conf @@ -33,6 +33,9 @@ mesh = { vxlan = false, + batman_adv = { + routing_algo = "BATMAN_IV", + }, }, mesh_vpn = { @@ -42,27 +45,27 @@ peers = { gateway01 = { remotes = { '"gw01-new.hamburg.freifunk.net" port 10007' }, - key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', + key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', }, gateway02 = { remotes = { '"gw02-new.hamburg.freifunk.net" port 10007' }, - key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', + key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', }, gateway03 = { remotes = { '"gw03-new.hamburg.freifunk.net" port 10007' }, - key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', + key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', }, gateway04 = { remotes = { '"gw04-new.hamburg.freifunk.net" port 10008' }, - key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', + key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', }, gateway05 = { remotes = { '"gw05-new.hamburg.freifunk.net" port 10008' }, - key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', + key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', }, gateway06 = { remotes = { '"gw06-new.hamburg.freifunk.net" port 10008' }, - key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', + key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', }, }, }, diff --git a/domains/ffhh_ost.conf b/domains/ffhh_ost.conf index 7c2b948..941b75d 100644 --- a/domains/ffhh_ost.conf +++ b/domains/ffhh_ost.conf @@ -33,6 +33,9 @@ mesh = { vxlan = false, + batman_adv = { + routing_algo = "BATMAN_IV", + }, }, mesh_vpn = { @@ -42,26 +45,26 @@ peers = { gateway01 = { remotes = { '"gw01-new.hamburg.freifunk.net" port 10009' }, - key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', + key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', }, gateway02 = { remotes = { '"gw02-new.hamburg.freifunk.net" port 10009' }, - key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', + key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', }, gateway03 = { remotes = { '"gw03-new.hamburg.freifunk.net" port 10009' }, - key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', + key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', }, gateway04 = { remotes = { '"gw04-new.hamburg.freifunk.net" port 10010' }, - key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', + key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', }, gateway05 = { remotes = { '"gw05-new.hamburg.freifunk.net" port 10010' }, - key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', + key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', }, gateway06 = { - key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', + key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', remotes = { '"gw06-new.hamburg.freifunk.net" port 10010' }, }, }, diff --git a/domains/ffhh_sued.conf b/domains/ffhh_sued.conf index 42da4ca..1a6f31f 100644 --- a/domains/ffhh_sued.conf +++ b/domains/ffhh_sued.conf @@ -33,6 +33,9 @@ mesh = { vxlan = false, + batman_adv = { + routing_algo = "BATMAN_IV", + }, }, mesh_vpn = { @@ -42,27 +45,27 @@ peers = { gateway01 = { remotes = { '"gw01-new.hamburg.freifunk.net" port 10003' }, - key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', + key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', }, gateway02 = { - key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', + key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', remotes = { '"gw02-new.hamburg.freifunk.net" port 10003' }, }, gateway03 = { remotes = { '"gw03-new.hamburg.freifunk.net" port 10003' }, - key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', + key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', }, gateway04 = { remotes = { '"gw04-new.hamburg.freifunk.net" port 10004' }, - key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', + key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', }, gateway05 = { remotes = { '"gw05-new.hamburg.freifunk.net" port 10004' }, - key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', + key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', }, gateway06 = { remotes = { '"gw06-new.hamburg.freifunk.net" port 10004' }, - key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', + key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', }, }, }, diff --git a/domains/ffhh_west.conf b/domains/ffhh_west.conf index 80c0c15..ca3c22a 100644 --- a/domains/ffhh_west.conf +++ b/domains/ffhh_west.conf @@ -33,6 +33,9 @@ mesh = { vxlan = false, + batman_adv = { + routing_algo = "BATMAN_IV", + }, }, mesh_vpn = { @@ -42,27 +45,27 @@ peers = { gateway01 = { remotes = { '"gw01-new.hamburg.freifunk.net" port 10005' }, - key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', + key = 'aa88fb5cc3e729c124589e3714b817a505d809f381d9b3494040c382edfd4f3b', }, gateway02 = { - key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', + key = '462b4e21ab5eb0f9de687efd97252880c895ba55cc9cc0755a75347b0965b6e0', remotes = { '"gw02-new.hamburg.freifunk.net" port 10005' }, }, gateway03 = { remotes = { '"gw03-new.hamburg.freifunk.net" port 10005' }, - key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', + key = 'e15295b86138ac490d611e4100f847ccfb7052d5091ded4659f25940be2c0546', }, gateway04 = { remotes = { '"gw04-new.hamburg.freifunk.net" port 10006' }, - key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', + key = 'a00e092c236c3b56043fb3b5d0b3da3da08d8325fb18e7bae6ed035d50d50669', }, gateway05 = { remotes = { '"gw05-new.hamburg.freifunk.net" port 10006' }, - key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', + key = '291197d88a5ed510a62fec87f30d13315c1e031c62c927c23e1643a72796708f', }, gateway06 = { remotes = { '"gw06-new.hamburg.freifunk.net" port 10006' }, - key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', + key = '8d400e8a9db05b145c36583d46b4170f6b66d1e16177540f8a2f9f5ad0dc4c43', }, }, }, diff --git a/image-customization.lua b/image-customization.lua new file mode 100644 index 0000000..34f6279 --- /dev/null +++ b/image-customization.lua @@ -0,0 +1,37 @@ +features({ + 'autoupdater', + 'config-mode-domain-select', + 'ebtables-filter-multicast', + 'ebtables-filter-ra-dhcp', + 'mesh-batman-adv-15', + 'mesh-vpn-fastd', + 'web-private-wifi', + 'radv-filterd', + 'respondd', + 'status-page', + 'web-advanced', + 'web-wizard', +}) + +if not device_class('tiny') then + features({ + 'wireless-encryption-wpa3', + }) +end + +packages({ + '-gluon-config-mode-geo-location', + '-gluon-config-mode-contact-info', + 'gluon-ebtables-source-filter', + 'gluon-upgrade-static-interface-ffhh', + 'gluon-web-mesh-vpn-fastd', + 'iwinfo', +}) + +if target('x86') then + packages({ + 'nano', + 'htop', + 'ethtool', + }) +end diff --git a/modules b/modules index 6416262..45f281f 100644 --- a/modules +++ b/modules @@ -1,5 +1,4 @@ GLUON_SITE_FEEDS='ffhh_packages' -PACKAGES_FFHH_PACKAGES_REPO=git://github.com/freifunkhamburg/ffhh-packages.git -PACKAGES_FFHH_PACKAGES_COMMIT=ef9fcc1222f74c3c045b1450537a4b8b80efb56c - +PACKAGES_FFHH_PACKAGES_REPO=https://codeberg.org/freifunkhamburg/ffhh-packages.git +PACKAGES_FFHH_PACKAGES_COMMIT=eb99353a88b399583f46288485d05ca8d53cd1ac diff --git a/site.conf b/site.conf index c8c0822..04919a0 100644 --- a/site.conf +++ b/site.conf @@ -12,7 +12,6 @@ default_domain = 'ffhh_nowe', opkg = { - lede = 'http://lede.opkg.services.ffhh/snapshots/packages/%A', extra = { modules = 'http://updates.hamburg.freifunk.net/multi/archive/%GR/packages/gluon-%GS-%GR/%S', }, @@ -25,9 +24,6 @@ wifi24 = { channel = 1, - supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000}, - basic_rate = {6000, 9000, 18000, 36000, 54000}, - mesh = { mcast_rate = 12000, }, @@ -35,6 +31,7 @@ wifi5 = { channel = 44, + outdoor_chanlist = "100-140", mesh = { mcast_rate = 12000, }, @@ -42,9 +39,9 @@ mesh_vpn = { enabled = true, - mtu = 1312, fastd = { configurable = true, + mtu = 1312, methods = {'salsa2012+umac'}, groups = { backbone = { diff --git a/site.mk b/site.mk index 76cc687..45aa428 100644 --- a/site.mk +++ b/site.mk @@ -1,44 +1,7 @@ GLUON_MULTIDOMAIN := 1 +GLUON_DEPRECATED := upgrade -GLUON_SITE_PACKAGES := -gluon-config-mode-geo-location \ - -gluon-config-mode-contact-info \ - gluon-ebtables-source-filter \ - gluon-web-mesh-vpn-fastd \ - haveged \ - iptables \ - iwinfo - -GLUON_FEATURES := \ - autoupdater \ - config-mode-domain-select \ - ebtables-filter-multicast \ - ebtables-filter-ra-dhcp \ - ebtables-limit-arp \ - mesh-batman-adv-15 \ - mesh-vpn-fastd \ - radvd \ - respondd \ - status-page \ - web-advanced \ - web-wizard - -# EXTRA_SOFTWARE_TOOLS_01 -EXTRA_SOFTWARE_TOOLS_01 := \ - nano \ - htop \ - ethtool - -# x86 -ifeq ($(GLUON_TARGET),x86-generic) -GLUON_SITE_PACKAGES += \ - $(EXTRA_SOFTWARE_TOOLS_01) -endif - -# x86-64 -ifeq ($(GLUON_TARGET),x86-64) -GLUON_SITE_PACKAGES += \ - $(EXTRA_SOFTWARE_TOOLS_01) -endif +GLUON_AUTOUPDATER_ENABLED ?= 1 GLUON_PRIORITY ?= 7