commit
042dd8a20c
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,7 +1,6 @@
|
|||||||
*~
|
*~
|
||||||
/build
|
/lede
|
||||||
/images
|
/output
|
||||||
/site
|
/site
|
||||||
/openwrt
|
/tmp
|
||||||
/packages
|
/packages
|
||||||
/modules.local
|
|
||||||
|
53
CONTRIBUTING.md
Normal file
53
CONTRIBUTING.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
Contribution Guidelines
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Because Gluon is such a universal software package that is used by several
|
||||||
|
different communities with different expectations and requirements, it is both
|
||||||
|
essential and difficult to have contributions from the communities. While they
|
||||||
|
are sometimes necessary to adapt Gluon to the needs of the communities, they
|
||||||
|
also have to be adaptable enough to fit as many needs as possible. On the other
|
||||||
|
hands, very special needs are better addressed in [packages] in community
|
||||||
|
repositories, because the Gluon maintainers would not use or test them and
|
||||||
|
thus couldn't do their "job" of maintaining them.
|
||||||
|
|
||||||
|
To ease the work for the maintainers and to reduce the frustration of
|
||||||
|
contributors, please adhere to the following guidelines:
|
||||||
|
|
||||||
|
Discuss first, build later
|
||||||
|
--------------------------
|
||||||
|
If you have some non-trivial enhancement like a new package, some modification
|
||||||
|
of what is announced by a node, it is often best to first discuss the precise
|
||||||
|
solution first. The maintainers might have hints as to how a solution could be
|
||||||
|
implemented easiest, point out solutions how the same thing can already be done
|
||||||
|
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
|
||||||
|
after merging the changes, too.
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
||||||
|
you some time.
|
||||||
|
|
||||||
|
Develop on top of master
|
||||||
|
------------------------
|
||||||
|
If you are not developing something specific to a release (like for example a
|
||||||
|
security fix to a feature that got completely rewritten since the release),
|
||||||
|
develop it on top of the master branch. New features and even feature changes
|
||||||
|
aren't usually backported to old releases, but will be included in the upcoming
|
||||||
|
release, which will be built from master.
|
||||||
|
|
||||||
|
Use descriptive commit messages
|
||||||
|
-------------------------------
|
||||||
|
If you modify a single package, start the first line of your commit message
|
||||||
|
with the package name followed by a colon. The first line should be enough to
|
||||||
|
identify the commit a week later and still know roughly what it did. If you
|
||||||
|
fix some bug, detail in the remaining commit message exactly how it could be
|
||||||
|
triggered and what you did to fix it. If in question, have a glance at the
|
||||||
|
existing commit messages to get the idea.
|
||||||
|
|
||||||
|
|
||||||
|
[packages]: http://gluon.readthedocs.org/en/latest/user/site.html#packages
|
||||||
|
[#gluon]: https://webirc.hackint.org/#gluon
|
||||||
|
[mailing list]: mailto:gluon@luebeck.freifunk.net
|
||||||
|
[list of rejected features]: https://github.com/freifunk-gluon/gluon/issues?q=label%3Arejected
|
12
LICENSE
12
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 indiviual files or subtrees.
|
noted otherwise in individual files or subtrees.
|
||||||
|
|
||||||
Copyright (c) 2013, Project Gluon
|
Copyright (c) 2013-2017, 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
|
||||||
@ -25,10 +25,10 @@ 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.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
OpenWRT is licensed under the terms of the GNU General Public License Version 2,
|
LEDE and OpenWrt are licensed under the terms of the GNU General Public License
|
||||||
which can be found under openwrt/LICENSE after the openwrt submodule has been
|
Version 2, which can be found at lede/LICENSE after the lede repository has been
|
||||||
obtained. This applies to the following submodules:
|
obtained. This applies to the following repositories:
|
||||||
* openwrt
|
* lede
|
||||||
* packages/openwrt
|
* packages/openwrt
|
||||||
* packages/routing
|
* packages/routing
|
||||||
* packages/luci
|
* packages/luci
|
||||||
|
494
Makefile
494
Makefile
@ -4,419 +4,155 @@ LC_ALL:=C
|
|||||||
LANG:=C
|
LANG:=C
|
||||||
export LC_ALL LANG
|
export LC_ALL LANG
|
||||||
|
|
||||||
empty:=
|
|
||||||
space:= $(empty) $(empty)
|
|
||||||
|
|
||||||
GLUONMAKE_EARLY = $(SUBMAKE) -C $(GLUON_ORIGOPENWRTDIR) -f $(GLUONDIR)/Makefile GLUON_TOOLS=0
|
GLUON_SITEDIR ?= $(CURDIR)/site
|
||||||
GLUONMAKE = $(SUBMAKE) -C $(GLUON_OPENWRTDIR) -f $(GLUONDIR)/Makefile
|
GLUON_TMPDIR ?= $(CURDIR)/tmp
|
||||||
|
|
||||||
ifneq ($(OPENWRT_BUILD),1)
|
GLUON_OUTPUTDIR ?= $(CURDIR)/output
|
||||||
|
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||||
|
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||||
|
|
||||||
GLUONDIR:=${CURDIR}
|
export GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR DEVICES
|
||||||
|
|
||||||
include $(GLUONDIR)/include/gluon.mk
|
|
||||||
|
|
||||||
TOPDIR:=$(GLUON_ORIGOPENWRTDIR)
|
$(GLUON_SITEDIR)/site.mk:
|
||||||
export TOPDIR
|
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
export GLUON_RELEASE GLUON_ATH10K_MESH GLUON_REGION GLUON_DEBUG
|
||||||
|
|
||||||
|
|
||||||
update: FORCE
|
update: FORCE
|
||||||
$(GLUONDIR)/scripts/update.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||||
$(GLUONDIR)/scripts/patch.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||||
patch: FORCE
|
|
||||||
$(GLUONDIR)/scripts/patch.sh
|
|
||||||
|
|
||||||
unpatch: FORCE
|
|
||||||
$(GLUONDIR)/scripts/unpatch.sh
|
|
||||||
|
|
||||||
update-patches: FORCE
|
update-patches: FORCE
|
||||||
$(GLUONDIR)/scripts/update.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||||
$(GLUONDIR)/scripts/update-patches.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update-patches.sh
|
||||||
$(GLUONDIR)/scripts/patch.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||||
|
|
||||||
-include $(TOPDIR)/include/host.mk
|
update-feeds: FORCE
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||||
_SINGLE=export MAKEFLAGS=$(space);
|
|
||||||
|
|
||||||
override OPENWRT_BUILD=1
|
|
||||||
override GLUON_TOOLS=1
|
|
||||||
GREP_OPTIONS=
|
|
||||||
export OPENWRT_BUILD GLUON_TOOLS GREP_OPTIONS
|
|
||||||
|
|
||||||
-include $(TOPDIR)/include/debug.mk
|
|
||||||
-include $(TOPDIR)/include/depends.mk
|
|
||||||
include $(GLUONDIR)/include/toplevel.mk
|
|
||||||
|
|
||||||
|
|
||||||
include $(GLUONDIR)/targets/targets.mk
|
GLUON_TARGETS :=
|
||||||
|
|
||||||
|
define GluonTarget
|
||||||
|
gluon_target := $(1)$$(if $(2),-$(2))
|
||||||
|
GLUON_TARGETS += $$(gluon_target)
|
||||||
|
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
||||||
|
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(if $(3),$(3),$(2))
|
||||||
|
endef
|
||||||
|
|
||||||
|
include targets/targets.mk
|
||||||
|
|
||||||
|
|
||||||
CheckTarget := [ -n '$(GLUON_TARGET)' -a -n '$(GLUON_TARGET_$(GLUON_TARGET)_BOARD)' -a -n '$(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)' ] \
|
LEDEMAKE = $(MAKE) -C lede
|
||||||
|| (echo -e 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:$(subst $(space),\n * ,$(GLUON_TARGETS))'; false)
|
|
||||||
|
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
||||||
|
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
||||||
|
LEDE_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
|
||||||
|
|
||||||
|
export LEDE_TARGET
|
||||||
|
|
||||||
|
|
||||||
CheckExternal := test -d $(GLUON_ORIGOPENWRTDIR) || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
CheckTarget := [ '$(LEDE_TARGET)' ] \
|
||||||
|
|| (echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'; $(foreach target,$(GLUON_TARGETS),echo ' * $(target)';) false)
|
||||||
|
|
||||||
|
CheckExternal := test -d lede || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
||||||
|
|
||||||
|
|
||||||
prepare-target: FORCE
|
list-targets: FORCE
|
||||||
|
@$(foreach target,$(GLUON_TARGETS),echo '$(target)';)
|
||||||
|
|
||||||
|
|
||||||
|
GLUON_DEFAULT_PACKAGES := -odhcpd -ppp -ppp-mod-pppoe -wpad-mini gluon-core ip6tables hostapd-mini
|
||||||
|
|
||||||
|
GLUON_PACKAGES :=
|
||||||
|
define merge_packages
|
||||||
|
$(foreach pkg,$(1),
|
||||||
|
GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES)))
|
||||||
|
|
||||||
|
GLUON_PACKAGES_YES := $(filter-out -%,$(GLUON_PACKAGES))
|
||||||
|
GLUON_PACKAGES_NO := $(patsubst -%,%,$(filter -%,$(GLUON_PACKAGES)))
|
||||||
|
|
||||||
|
|
||||||
|
config: FORCE
|
||||||
@$(CheckExternal)
|
@$(CheckExternal)
|
||||||
@$(CheckTarget)
|
@$(CheckTarget)
|
||||||
+@$(GLUONMAKE_EARLY) prepare-target
|
|
||||||
|
|
||||||
|
@( \
|
||||||
|
echo 'CONFIG_TARGET_$(BOARD)=y' \
|
||||||
|
$(if $(SUBTARGET),&& echo 'CONFIG_TARGET_$(BOARD)_$(SUBTARGET)=y') \
|
||||||
|
$(foreach pkg,$(GLUON_PACKAGES_NO),&& echo '# CONFIG_PACKAGE_$(pkg) is not set') \
|
||||||
|
&& scripts/target_config.sh generic \
|
||||||
|
&& GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config.sh '$(GLUON_TARGET)' \
|
||||||
|
$(foreach pkg,$(GLUON_PACKAGES_YES),&& echo 'CONFIG_PACKAGE_$(pkg)=y') \
|
||||||
|
$(foreach lang,$(GLUON_LANGS),&& echo 'CONFIG_GLUON_WEB_LANG_$(lang)=y') \
|
||||||
|
&& echo 'CONFIG_GLUON_RELEASE="$(GLUON_RELEASE)"' \
|
||||||
|
&& echo 'CONFIG_GLUON_SITEDIR="$(GLUON_SITEDIR)"' \
|
||||||
|
&& echo 'CONFIG_GLUON_BRANCH="$(GLUON_BRANCH)"' \
|
||||||
|
) > lede/.config
|
||||||
|
+@$(LEDEMAKE) defconfig
|
||||||
|
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config_check.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES_YES)'
|
||||||
|
|
||||||
|
|
||||||
|
LUA := lede/staging_dir/hostpkg/bin/lua
|
||||||
|
|
||||||
|
$(LUA):
|
||||||
|
@$(CheckExternal)
|
||||||
|
|
||||||
|
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||||
|
+@$(LEDEMAKE) tools/install
|
||||||
|
+@$(LEDEMAKE) package/lua/host/install
|
||||||
|
|
||||||
|
prepare-target: config $(LUA) ;
|
||||||
|
|
||||||
all: prepare-target
|
all: prepare-target
|
||||||
+@$(GLUONMAKE) prepare
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' $(LUA) scripts/site_config.lua \
|
||||||
+@$(GLUONMAKE) images
|
|| (echo 'Your site configuration did not pass validation.'; false)
|
||||||
|
|
||||||
prepare: prepare-target
|
@scripts/clean_output.sh
|
||||||
+@$(GLUONMAKE) $@
|
+@$(LEDEMAKE)
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/copy_output.sh '$(GLUON_TARGET)'
|
||||||
|
|
||||||
clean download images: FORCE
|
clean download: config
|
||||||
@$(CheckExternal)
|
+@$(LEDEMAKE) $@
|
||||||
@$(CheckTarget)
|
|
||||||
+@$(GLUONMAKE_EARLY) maybe-prepare-target
|
|
||||||
+@$(GLUONMAKE) $@
|
|
||||||
|
|
||||||
toolchain/% package/% target/% image/%: FORCE
|
dirclean: FORCE
|
||||||
@$(CheckExternal)
|
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||||
@$(CheckTarget)
|
+@$(LEDEMAKE) dirclean
|
||||||
+@$(GLUONMAKE_EARLY) maybe-prepare-target
|
@rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
||||||
+@$(GLUONMAKE) $@
|
|
||||||
|
|
||||||
manifest: FORCE
|
manifest: $(LUA) FORCE
|
||||||
@[ -n '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
@[ '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
||||||
@echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
@echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
||||||
@$(CheckExternal)
|
@$(CheckExternal)
|
||||||
|
|
||||||
( \
|
@( \
|
||||||
echo 'BRANCH=$(GLUON_BRANCH)' && \
|
echo 'BRANCH=$(GLUON_BRANCH)' && \
|
||||||
echo 'DATE=$(shell $(GLUON_ORIGOPENWRTDIR)/staging_dir/host/bin/lua $(GLUONDIR)/scripts/rfc3339date.lua)' && \
|
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)" && \
|
||||||
echo 'PRIORITY=$(GLUON_PRIORITY)' && \
|
echo 'PRIORITY=$(GLUON_PRIORITY)' && \
|
||||||
echo \
|
echo && \
|
||||||
) > $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp
|
$(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
||||||
|
GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/generate_manifest.sh '$(GLUON_TARGET)' && \
|
||||||
+($(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
|
||||||
( [ ! -e $(BOARD_BUILDDIR)/prepared ] || ( $(GLUONMAKE) manifest GLUON_TARGET='$(GLUON_TARGET)' V=s$(OPENWRT_VERBOSE) ) ) && \
|
|
||||||
) :)
|
|
||||||
|
|
||||||
mkdir -p $(GLUON_IMAGEDIR)/sysupgrade
|
|
||||||
mv $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp $(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest
|
|
||||||
|
|
||||||
dirclean : FORCE
|
|
||||||
for dir in build_dir dl staging_dir tmp; do \
|
|
||||||
rm -rf $(GLUON_ORIGOPENWRTDIR)/$$dir; \
|
|
||||||
done
|
|
||||||
rm -rf $(GLUON_BUILDDIR) $(GLUON_IMAGEDIR)
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
TOPDIR=${CURDIR}
|
|
||||||
export TOPDIR
|
|
||||||
|
|
||||||
include rules.mk
|
|
||||||
|
|
||||||
include $(GLUONDIR)/include/gluon.mk
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/host.mk
|
|
||||||
include $(INCLUDE_DIR)/depends.mk
|
|
||||||
include $(INCLUDE_DIR)/subdir.mk
|
|
||||||
|
|
||||||
include package/Makefile
|
|
||||||
include tools/Makefile
|
|
||||||
include toolchain/Makefile
|
|
||||||
include target/Makefile
|
|
||||||
|
|
||||||
|
|
||||||
PROFILES :=
|
|
||||||
PROFILE_PACKAGES :=
|
|
||||||
|
|
||||||
define Profile
|
|
||||||
$(eval $(call Profile/Default))
|
|
||||||
$(eval $(call Profile/$(1)))
|
|
||||||
endef
|
|
||||||
|
|
||||||
define GluonProfile
|
|
||||||
PROFILES += $(1)
|
|
||||||
PROFILE_PACKAGES += $(filter-out -%,$(2) $(GLUON_$(1)_SITE_PACKAGES))
|
|
||||||
GLUON_$(1)_DEFAULT_PACKAGES := $(2)
|
|
||||||
GLUON_$(1)_FACTORY_SUFFIX := -squashfs-factory
|
|
||||||
GLUON_$(1)_SYSUPGRADE_SUFFIX := -squashfs-sysupgrade
|
|
||||||
GLUON_$(1)_FACTORY_EXT := .bin
|
|
||||||
GLUON_$(1)_SYSUPGRADE_EXT := .bin
|
|
||||||
GLUON_$(1)_MODELS :=
|
|
||||||
endef
|
|
||||||
|
|
||||||
define GluonProfileFactorySuffix
|
|
||||||
GLUON_$(1)_FACTORY_SUFFIX := $(2)
|
|
||||||
GLUON_$(1)_FACTORY_EXT := $(3)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define GluonProfileSysupgradeSuffix
|
|
||||||
GLUON_$(1)_SYSUPGRADE_SUFFIX := $(2)
|
|
||||||
GLUON_$(1)_SYSUPGRADE_EXT := $(3)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define GluonModel
|
|
||||||
GLUON_$(1)_MODELS += $(3)
|
|
||||||
GLUON_$(1)_MODEL_$(3) := $(2)
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
||||||
include $(GLUONDIR)/targets/targets.mk
|
|
||||||
include $(GLUONDIR)/targets/$(GLUON_TARGET)/profiles.mk
|
|
||||||
|
|
||||||
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
|
||||||
override SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
|
||||||
|
|
||||||
target_prepared_stamp := $(BOARD_BUILDDIR)/target-prepared
|
|
||||||
gluon_prepared_stamp := $(BOARD_BUILDDIR)/prepared
|
|
||||||
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/target.mk
|
|
||||||
|
|
||||||
|
|
||||||
prereq: FORCE
|
|
||||||
+$(NO_TRACE_MAKE) prereq
|
|
||||||
|
|
||||||
prepare-tmpinfo: FORCE
|
|
||||||
@+$(MAKE) -r -s staging_dir/host/.prereq-build OPENWRT_BUILD= QUIET=0
|
|
||||||
mkdir -p tmp/info
|
|
||||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk $(TOPDIR)/overlay/*/*.mk" SCAN_EXTRA=""
|
|
||||||
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
|
|
||||||
for type in package target; do \
|
|
||||||
f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \
|
|
||||||
[ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
|
|
||||||
done
|
|
||||||
[ tmp/.config-feeds.in -nt tmp/.packagefeeds ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
|
|
||||||
./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; }
|
|
||||||
./scripts/metadata.pl package_feeds tmp/.packageinfo > tmp/.packagefeeds || { rm -f tmp/.packagefeeds; false; }
|
|
||||||
touch $(TOPDIR)/tmp/.build
|
|
||||||
|
|
||||||
feeds: FORCE
|
|
||||||
rm -rf $(TOPDIR)/package/feeds
|
|
||||||
mkdir $(TOPDIR)/package/feeds
|
|
||||||
[ ! -f $(GLUON_SITEDIR)/modules ] || . $(GLUON_SITEDIR)/modules && for feed in $$GLUON_SITE_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/$$feed; done
|
|
||||||
ln -s ../../../package $(TOPDIR)/package/feeds/gluon
|
|
||||||
. $(GLUONDIR)/modules && for feed in $$GLUON_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/module_$$feed; done
|
|
||||||
+$(GLUONMAKE_EARLY) prepare-tmpinfo
|
|
||||||
|
|
||||||
gluon-tools: FORCE
|
|
||||||
+$(GLUONMAKE_EARLY) tools/sed/install
|
|
||||||
+$(GLUONMAKE_EARLY) package/lua/host/install
|
|
||||||
|
|
||||||
config: FORCE
|
|
||||||
+$(NO_TRACE_MAKE) scripts/config/conf OPENWRT_BUILD= QUIET=0
|
|
||||||
+$(GLUONMAKE) prepare-tmpinfo
|
|
||||||
( \
|
|
||||||
cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(GLUON_TARGET)/config; \
|
|
||||||
echo 'CONFIG_BUILD_SUFFIX="gluon-$(GLUON_TARGET)"'; \
|
|
||||||
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
|
|
||||||
| sed -e 's/ /\n/g'; \
|
|
||||||
echo '$(patsubst %,CONFIG_LUCI_LANG_%=y,$(GLUON_LANGS))' \
|
|
||||||
| sed -e 's/ /\n/g'; \
|
|
||||||
) > $(BOARD_BUILDDIR)/config.tmp
|
|
||||||
scripts/config/conf --defconfig=$(BOARD_BUILDDIR)/config.tmp Config.in
|
|
||||||
mv .config $(BOARD_BUILDDIR)/config
|
|
||||||
|
|
||||||
echo 'CONFIG_ALL_KMODS=y' >> $(BOARD_BUILDDIR)/config.tmp
|
|
||||||
scripts/config/conf --defconfig=$(BOARD_BUILDDIR)/config.tmp Config.in
|
|
||||||
mv .config $(BOARD_BUILDDIR)/config-allmods
|
|
||||||
|
|
||||||
cp $(BOARD_BUILDDIR)/config .config
|
|
||||||
|
|
||||||
prepare-target: FORCE
|
|
||||||
rm $(GLUON_OPENWRTDIR)/tmp || true
|
|
||||||
mkdir -p $(GLUON_OPENWRTDIR)/tmp
|
|
||||||
|
|
||||||
for dir in build_dir dl staging_dir; do \
|
|
||||||
mkdir -p $(GLUON_ORIGOPENWRTDIR)/$$dir; \
|
|
||||||
done
|
|
||||||
for link in build_dir config Config.in dl include Makefile package rules.mk scripts staging_dir target toolchain tools; do \
|
|
||||||
ln -sf $(GLUON_ORIGOPENWRTDIR)/$$link $(GLUON_OPENWRTDIR); \
|
|
||||||
done
|
|
||||||
|
|
||||||
+$(GLUONMAKE_EARLY) feeds
|
|
||||||
+$(GLUONMAKE_EARLY) gluon-tools
|
|
||||||
+$(GLUONMAKE) config
|
|
||||||
touch $(target_prepared_stamp)
|
|
||||||
|
|
||||||
$(target_prepared_stamp):
|
|
||||||
+$(GLUONMAKE_EARLY) prepare-target
|
|
||||||
|
|
||||||
maybe-prepare-target: $(target_prepared_stamp)
|
|
||||||
|
|
||||||
$(BUILD_DIR)/.prepared: Makefile
|
|
||||||
@mkdir -p $$(dirname $@)
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
$(toolchain/stamp-install): $(tools/stamp-install)
|
|
||||||
$(package/stamp-compile): $(package/stamp-cleanup)
|
|
||||||
|
|
||||||
|
|
||||||
clean: FORCE
|
|
||||||
+$(SUBMAKE) clean
|
|
||||||
rm -f $(gluon_prepared_stamp)
|
|
||||||
|
|
||||||
|
|
||||||
export SHA512SUM := $(GLUONDIR)/scripts/sha512sum.sh
|
|
||||||
|
|
||||||
|
|
||||||
download: FORCE
|
|
||||||
+$(SUBMAKE) tools/download
|
|
||||||
+$(SUBMAKE) toolchain/download
|
|
||||||
+$(SUBMAKE) package/download
|
|
||||||
+$(SUBMAKE) target/download
|
|
||||||
|
|
||||||
toolchain: $(toolchain/stamp-install) $(tools/stamp-install)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
|
||||||
|
|
||||||
kernel: FORCE
|
|
||||||
+$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD) -f $(GLUONDIR)/include/Makefile.target $(LINUX_DIR)/.image TARGET_BUILD=1
|
|
||||||
+$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD) -f $(GLUONDIR)/include/Makefile.target $(LINUX_DIR)/.modules TARGET_BUILD=1
|
|
||||||
|
|
||||||
packages: $(package/stamp-compile)
|
|
||||||
$(_SINGLE)$(SUBMAKE) -r package/index
|
|
||||||
|
|
||||||
prepare-image: FORCE
|
|
||||||
rm -rf $(BOARD_KDIR)
|
|
||||||
mkdir -p $(BOARD_KDIR)
|
|
||||||
$(foreach k, vmlinux vmlinux.elf \
|
|
||||||
$(if $(KERNEL_IMAGES),$(KERNEL_IMAGES),$(filter-out dtbs,$(KERNELNAME))), \
|
|
||||||
$(CP) $(KERNEL_BUILD_DIR)/$(k) $(BOARD_KDIR)/$(k); \
|
|
||||||
)
|
|
||||||
+$(SUBMAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image image_prepare KDIR="$(BOARD_KDIR)"
|
|
||||||
|
|
||||||
prepare: FORCE
|
|
||||||
@$(STAGING_DIR_HOST)/bin/lua $(GLUONDIR)/package/gluon-core/files/usr/lib/lua/gluon/site_config.lua \
|
|
||||||
|| (echo 'Your site configuration did not pass validation.'; false)
|
|
||||||
|
|
||||||
mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR)
|
|
||||||
echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(BOARD_BUILDDIR)/opkg.conf
|
|
||||||
|
|
||||||
+$(GLUONMAKE) toolchain
|
|
||||||
+$(GLUONMAKE) kernel
|
|
||||||
+$(GLUONMAKE) packages
|
|
||||||
+$(GLUONMAKE) prepare-image
|
|
||||||
|
|
||||||
echo "$(GLUON_RELEASE)" > $(gluon_prepared_stamp)
|
|
||||||
|
|
||||||
$(gluon_prepared_stamp):
|
|
||||||
+$(GLUONMAKE) prepare
|
|
||||||
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package-ipkg.mk
|
|
||||||
|
|
||||||
# override variables from rules.mk
|
|
||||||
PACKAGE_DIR = $(GLUON_OPENWRTDIR)/bin/$(BOARD)/packages
|
|
||||||
|
|
||||||
PROFILE_BUILDDIR = $(BOARD_BUILDDIR)/profiles/$(PROFILE)
|
|
||||||
PROFILE_KDIR = $(PROFILE_BUILDDIR)/kernel
|
|
||||||
BIN_DIR = $(PROFILE_BUILDDIR)/images
|
|
||||||
|
|
||||||
TARGET_DIR = $(PROFILE_BUILDDIR)/root
|
|
||||||
|
|
||||||
PREPARED_RELEASE = $$(cat $(gluon_prepared_stamp))
|
|
||||||
IMAGE_PREFIX = gluon-$(GLUON_SITE_CODE)-$(PREPARED_RELEASE)
|
|
||||||
|
|
||||||
OPKG:= \
|
|
||||||
IPKG_TMP="$(TMP_DIR)/ipkgtmp" \
|
|
||||||
IPKG_INSTROOT="$(TARGET_DIR)" \
|
|
||||||
IPKG_CONF_DIR="$(TMP_DIR)" \
|
|
||||||
IPKG_OFFLINE_ROOT="$(TARGET_DIR)" \
|
|
||||||
$(STAGING_DIR_HOST)/bin/opkg \
|
|
||||||
-f $(BOARD_BUILDDIR)/opkg.conf \
|
|
||||||
--cache $(TMP_DIR)/dl \
|
|
||||||
--offline-root $(TARGET_DIR) \
|
|
||||||
--force-postinstall \
|
|
||||||
--add-dest root:/ \
|
|
||||||
--add-arch all:100 \
|
|
||||||
--add-arch $(ARCH_PACKAGES):200
|
|
||||||
|
|
||||||
EnableInitscript = ! grep -q '\#!/bin/sh /etc/rc.common' $(1) || bash ./etc/rc.common $(1) enable
|
|
||||||
|
|
||||||
|
|
||||||
enable_initscripts: FORCE
|
|
||||||
cd $(TARGET_DIR) && ( export IPKG_INSTROOT=$(TARGET_DIR); \
|
|
||||||
$(foreach script,$(wildcard $(TARGET_DIR)/etc/init.d/*), \
|
|
||||||
$(call EnableInitscript,$(script)); \
|
|
||||||
) : \
|
) : \
|
||||||
)
|
) > 'tmp/$(GLUON_BRANCH).manifest.tmp'
|
||||||
|
|
||||||
|
@mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
||||||
|
@mv 'tmp/$(GLUON_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest'
|
||||||
|
|
||||||
# Generate package list
|
FORCE: ;
|
||||||
$(eval $(call merge-lists,INSTALL_PACKAGES,DEFAULT_PACKAGES GLUON_DEFAULT_PACKAGES GLUON_SITE_PACKAGES GLUON_$(PROFILE)_DEFAULT_PACKAGES GLUON_$(PROFILE)_SITE_PACKAGES))
|
|
||||||
|
|
||||||
package_install: FORCE
|
.PHONY: FORCE
|
||||||
$(OPKG) update
|
.NOTPARALLEL:
|
||||||
$(OPKG) install $(PACKAGE_DIR)/base-files_*.ipk $(PACKAGE_DIR)/libc_*.ipk
|
|
||||||
$(OPKG) install $(PACKAGE_DIR)/kernel_*.ipk
|
|
||||||
|
|
||||||
$(OPKG) install $(INSTALL_PACKAGES)
|
|
||||||
+$(GLUONMAKE) enable_initscripts
|
|
||||||
|
|
||||||
rm -f $(TARGET_DIR)/usr/lib/opkg/lists/* $(TARGET_DIR)/tmp/opkg.lock
|
|
||||||
|
|
||||||
# Remove opkg database when opkg is not intalled
|
|
||||||
if [ ! -x $(TARGET_DIR)/bin/opkg ]; then rm -rf $(TARGET_DIR)/usr/lib/opkg; fi
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(GLUON_OPKG_CONFIG),1)
|
|
||||||
include $(INCLUDE_DIR)/version.mk
|
|
||||||
endif
|
|
||||||
|
|
||||||
opkg_config: FORCE
|
|
||||||
cp $(GLUON_OPENWRTDIR)/package/system/opkg/files/opkg.conf $(TARGET_DIR)/etc/opkg.conf
|
|
||||||
for d in base luci packages routing telephony management oldpackages; do \
|
|
||||||
echo "src/gz %n_$$d %U/$$d" >> $(TARGET_DIR)/etc/opkg.conf; \
|
|
||||||
done
|
|
||||||
$(VERSION_SED) $(TARGET_DIR)/etc/opkg.conf
|
|
||||||
|
|
||||||
|
|
||||||
image: FORCE
|
|
||||||
rm -rf $(TARGET_DIR) $(BIN_DIR) $(PROFILE_KDIR)
|
|
||||||
mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TARGET_DIR)/tmp $(GLUON_IMAGEDIR)/factory $(GLUON_IMAGEDIR)/sysupgrade
|
|
||||||
cp -r $(BOARD_KDIR) $(PROFILE_KDIR)
|
|
||||||
|
|
||||||
+$(GLUONMAKE) package_install
|
|
||||||
+$(GLUONMAKE) opkg_config GLUON_OPKG_CONFIG=1
|
|
||||||
|
|
||||||
$(call Image/mkfs/prepare)
|
|
||||||
$(_SINGLE)$(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image install TARGET_BUILD=1 IMG_PREFIX=gluon \
|
|
||||||
PROFILE="$(PROFILE)" KDIR="$(PROFILE_KDIR)" TARGET_DIR="$(TARGET_DIR)" BIN_DIR="$(BIN_DIR)" TMP_DIR="$(TMP_DIR)"
|
|
||||||
|
|
||||||
$(foreach model,$(GLUON_$(PROFILE)_MODELS), \
|
|
||||||
$(if $(GLUON_$(PROFILE)_SYSUPGRADE_EXT), \
|
|
||||||
rm -f $(GLUON_IMAGEDIR)/sysupgrade/gluon-*-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
|
||||||
cp $(BIN_DIR)/gluon-$(GLUON_$(PROFILE)_MODEL_$(model))$(GLUON_$(PROFILE)_SYSUPGRADE_SUFFIX)$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) $(GLUON_IMAGEDIR)/sysupgrade/$(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(PROFILE)_SYSUPGRADE_EXT) && \
|
|
||||||
) \
|
|
||||||
$(if $(GLUON_$(PROFILE)_FACTORY_EXT), \
|
|
||||||
rm -f $(GLUON_IMAGEDIR)/factory/gluon-*-$(model)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
|
||||||
cp $(BIN_DIR)/gluon-$(GLUON_$(PROFILE)_MODEL_$(model))$(GLUON_$(PROFILE)_FACTORY_SUFFIX)$(GLUON_$(PROFILE)_FACTORY_EXT) $(GLUON_IMAGEDIR)/factory/$(IMAGE_PREFIX)-$(model)$(GLUON_$(PROFILE)_FACTORY_EXT) && \
|
|
||||||
) \
|
|
||||||
) :
|
|
||||||
|
|
||||||
image/%: $(gluon_prepared_stamp)
|
|
||||||
+$(GLUONMAKE) image PROFILE="$(patsubst image/%,%,$@)" V=s$(OPENWRT_VERBOSE)
|
|
||||||
|
|
||||||
call_image/%: FORCE
|
|
||||||
+$(GLUONMAKE) $(patsubst call_image/%,image/%,$@)
|
|
||||||
|
|
||||||
images: $(patsubst %,call_image/%,$(PROFILES)) ;
|
|
||||||
|
|
||||||
manifest: FORCE
|
|
||||||
( \
|
|
||||||
cd $(GLUON_IMAGEDIR)/sysupgrade; \
|
|
||||||
$(foreach profile,$(PROFILES), \
|
|
||||||
$(foreach model,$(GLUON_$(profile)_MODELS), \
|
|
||||||
file="$(IMAGE_PREFIX)-$(model)-sysupgrade$(GLUON_$(profile)_SYSUPGRADE_EXT)"; \
|
|
||||||
[ -e "$$file" ] && echo '$(model)' "$(PREPARED_RELEASE)" "$$($(SHA512SUM) "$$file")" "$$file"; \
|
|
||||||
) \
|
|
||||||
) : \
|
|
||||||
) >> $(GLUON_BUILDDIR)/$(GLUON_BRANCH).manifest.tmp
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all images prepare clean gluon-tools manifest
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
17
README.md
17
README.md
@ -1,5 +1,5 @@
|
|||||||
Documentation (incomplete at this time, contribute if you can!) may be found at
|
Documentation (incomplete at this time, contribute if you can!) may be found at
|
||||||
http://gluon.readthedocs.org/
|
http://gluon.readthedocs.org/.
|
||||||
|
|
||||||
If you're new to Gluon and ready to get your feet wet, have a look at the
|
If you're new to Gluon and ready to get your feet wet, have a look at the
|
||||||
[Getting Started Guide](http://gluon.readthedocs.org/en/latest/user/getting_started.html).
|
[Getting Started Guide](http://gluon.readthedocs.org/en/latest/user/getting_started.html).
|
||||||
@ -8,15 +8,18 @@ If you're new to Gluon and ready to get your feet wet, have a look at the
|
|||||||
|
|
||||||
## Issues & Feature requests
|
## Issues & Feature requests
|
||||||
|
|
||||||
Before opening an issue make sure to read check whether any existing issues
|
Before opening an issue, make sure to check whether any existing issues
|
||||||
(open or closed) match. If you're suggesting a new feature, drop by on IRC or
|
(open or closed) match. If you're suggesting a new feature, drop by on IRC or
|
||||||
our mailinglist to discuss it first.
|
our mailinglist to discuss it first.
|
||||||
|
|
||||||
|
We maintain a [Roadmap](https://github.com/freifunk-gluon/gluon/wiki/Roadmap) for
|
||||||
|
the future development of Gluon.
|
||||||
|
|
||||||
## Use a release!
|
## Use a release!
|
||||||
|
|
||||||
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 relaseses by running `git branch -a`
|
Use the most recent release instead. You can list all relaseses by running `git tag`
|
||||||
and switch to one by running `git checkout v2015.1 && make update`.
|
and switch to one by running `git checkout v2017.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 *will break* eventually.
|
If you upgrade using random master commits the nodes *will break* eventually.
|
||||||
@ -25,11 +28,11 @@ If you upgrade using random master commits the nodes *will break* eventually.
|
|||||||
|
|
||||||
To subscribe to the list, send a message to:
|
To subscribe to the list, send a message to:
|
||||||
|
|
||||||
gluon-subscribe@luebeck.freifunk.net
|
gluon+subscribe@luebeck.freifunk.net
|
||||||
|
|
||||||
To remove your address from the list, just send a message to
|
To remove your address from the list, just send a message to
|
||||||
the address in the `List-Unsubscribe` header of any list
|
the address in the `List-Unsubscribe` header of any list
|
||||||
message. If you haven't changed addresses since subscribing,
|
message. If you haven't changed addresses since subscribing,
|
||||||
you can also send a message to:
|
you can also send a message to:
|
||||||
|
|
||||||
gluon-unsubscribe@luebeck.freifunk.net
|
gluon+unsubscribe@luebeck.freifunk.net
|
||||||
|
45
contrib/depdot.sh
Executable file
45
contrib/depdot.sh
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to output the dependency graph of Gluon's packages
|
||||||
|
# Limitations:
|
||||||
|
# * Works only if directory names and package names are the same (true for all Gluon packages)
|
||||||
|
# * Doesn't show dependencies through virtual packages correctly
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
|
||||||
|
pushd "$(dirname "$0")/.." >/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
escape_name() {
|
||||||
|
echo -n "_$1" | tr -c '[:alnum:]' _
|
||||||
|
}
|
||||||
|
|
||||||
|
print_node () {
|
||||||
|
echo "$(escape_name "$1") [label=\"$1\", shape=box];"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_dep() {
|
||||||
|
echo "$(escape_name "$1") -> $(escape_name "$2");"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'digraph G {'
|
||||||
|
|
||||||
|
for makefile in ./package/*/Makefile; do
|
||||||
|
dir="$(dirname "$makefile")"
|
||||||
|
package="$(basename "$dir")"
|
||||||
|
|
||||||
|
deps=$(grep -w DEPENDS "$makefile" | cut -d= -f2 | tr -d +)
|
||||||
|
|
||||||
|
print_node "$package"
|
||||||
|
for dep in $deps; do
|
||||||
|
print_node "$dep"
|
||||||
|
print_dep "$package" "$dep"
|
||||||
|
done
|
||||||
|
done | sort -u
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
echo '}'
|
128
contrib/i18n-scan.pl
Executable file
128
contrib/i18n-scan.pl
Executable file
@ -0,0 +1,128 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
||||||
|
|
||||||
|
@ARGV >= 1 || die "Usage: $0 <source direcory>\n";
|
||||||
|
|
||||||
|
|
||||||
|
my %stringtable;
|
||||||
|
|
||||||
|
sub dec_lua_str
|
||||||
|
{
|
||||||
|
my $s = shift;
|
||||||
|
$s =~ s/[\s\n]+/ /g;
|
||||||
|
$s =~ s/\\n/\n/g;
|
||||||
|
$s =~ s/\\t/\t/g;
|
||||||
|
$s =~ s/\\(.)/$1/g;
|
||||||
|
$s =~ s/^ //;
|
||||||
|
$s =~ s/ $//;
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub dec_tpl_str
|
||||||
|
{
|
||||||
|
my $s = shift;
|
||||||
|
$s =~ s/-$//;
|
||||||
|
$s =~ s/[\s\n]+/ /g;
|
||||||
|
$s =~ s/^ //;
|
||||||
|
$s =~ s/ $//;
|
||||||
|
$s =~ s/\\/\\\\/g;
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( open F, "find @ARGV -type f '(' -name '*.html' -o -name '*.lua' ')' |" )
|
||||||
|
{
|
||||||
|
while( defined( my $file = readline F ) )
|
||||||
|
{
|
||||||
|
chomp $file;
|
||||||
|
|
||||||
|
if( open S, "< $file" )
|
||||||
|
{
|
||||||
|
local $/ = undef;
|
||||||
|
my $raw = <S>;
|
||||||
|
close S;
|
||||||
|
|
||||||
|
|
||||||
|
my $text = $raw;
|
||||||
|
|
||||||
|
while( $text =~ s/ ^ .*? (?:translate|translatef|i18n|_) [\n\s]* \( /(/sgx )
|
||||||
|
{
|
||||||
|
( my $code, $text ) = extract_bracketed($text, q{('")});
|
||||||
|
|
||||||
|
$code =~ s/\\\n/ /g;
|
||||||
|
$code =~ s/^\([\n\s]*//;
|
||||||
|
$code =~ s/[\n\s]*\)$//;
|
||||||
|
|
||||||
|
my $res = "";
|
||||||
|
my $sub = "";
|
||||||
|
|
||||||
|
if( $code =~ /^['"]/ )
|
||||||
|
{
|
||||||
|
while( defined $sub )
|
||||||
|
{
|
||||||
|
( $sub, $code ) = extract_delimited($code, q{'"}, q{\s*(?:\.\.\s*)?});
|
||||||
|
|
||||||
|
if( defined $sub && length($sub) > 2 )
|
||||||
|
{
|
||||||
|
$res .= substr $sub, 1, length($sub) - 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
undef $sub;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif( $code =~ /^(\[=*\[)/ )
|
||||||
|
{
|
||||||
|
my $stag = quotemeta $1;
|
||||||
|
my $etag = $stag;
|
||||||
|
$etag =~ s/\[/]/g;
|
||||||
|
|
||||||
|
( $res ) = extract_tagged($code, $stag, $etag);
|
||||||
|
|
||||||
|
$res =~ s/^$stag//;
|
||||||
|
$res =~ s/$etag$//;
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = dec_lua_str($res);
|
||||||
|
$stringtable{$res}++ if $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$text = $raw;
|
||||||
|
|
||||||
|
while( $text =~ s/ ^ .*? <% -? [:_] /<%/sgx )
|
||||||
|
{
|
||||||
|
( my $code, $text ) = extract_tagged($text, '<%', '%>');
|
||||||
|
|
||||||
|
if( defined $code )
|
||||||
|
{
|
||||||
|
$code = dec_tpl_str(substr $code, 2, length($code) - 4);
|
||||||
|
$stringtable{$code}++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close F;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( open C, "| msgcat -" )
|
||||||
|
{
|
||||||
|
printf C "msgid \"\"\nmsgstr \"Content-Type: text/plain; charset=UTF-8\"\n\n";
|
||||||
|
|
||||||
|
foreach my $key ( sort keys %stringtable )
|
||||||
|
{
|
||||||
|
if( length $key )
|
||||||
|
{
|
||||||
|
$key =~ s/"/\\"/g;
|
||||||
|
printf C "msgid \"%s\"\nmsgstr \"\"\n\n", $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close C;
|
||||||
|
}
|
@ -2,10 +2,11 @@
|
|||||||
|
|
||||||
# Script to list all upgrade scripts in a clear manner
|
# Script to list all upgrade scripts in a clear manner
|
||||||
# Limitations:
|
# Limitations:
|
||||||
# * Does only show scripts of packages whose `files' directory represent the whole image filesystem (which are all Gluon packages)
|
# * Does only show scripts of packages whose `files'/`luasrc' directories represent the whole image filesystem (which are all Gluon packages)
|
||||||
|
|
||||||
|
|
||||||
SUFFIX=files/lib/gluon/upgrade
|
SUFFIX1=files/lib/gluon/upgrade
|
||||||
|
SUFFIX2=luasrc/lib/gluon/upgrade
|
||||||
|
|
||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
@ -35,8 +36,11 @@ find ./package packages -name Makefile | while read makefile; do
|
|||||||
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
||||||
package="$(basename "$dir")"
|
package="$(basename "$dir")"
|
||||||
|
|
||||||
for file in "${SUFFIX}"/*; do
|
for file in "${SUFFIX1}"/*; do
|
||||||
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX})"
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX1})"
|
||||||
|
done
|
||||||
|
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
|
done | sort
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
if [ $# -eq 0 -o "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
|
set -e
|
||||||
|
|
||||||
|
if [ $# -ne 2 -o "-h" = "$1" -o "--help" = "$1" -o ! -r "$1" -o ! -r "$2" ]; then
|
||||||
cat <<EOHELP
|
cat <<EOHELP
|
||||||
Usage: $0 <secret> <manifest>
|
Usage: $0 <secret> <manifest>
|
||||||
|
|
||||||
@ -25,16 +27,18 @@ manifest="$2"
|
|||||||
upper="$(mktemp)"
|
upper="$(mktemp)"
|
||||||
lower="$(mktemp)"
|
lower="$(mktemp)"
|
||||||
|
|
||||||
awk "BEGIN { sep=0 }
|
trap 'rm -f "$upper" "$lower"' EXIT
|
||||||
/^---\$/ { sep=1; next }
|
|
||||||
{ if(sep==0) print > \"$upper\";
|
awk 'BEGIN { sep=0 }
|
||||||
else print > \"$lower\"}" \
|
/^---$/ { sep=1; next }
|
||||||
|
{ if(sep==0) print > "'"$upper"'";
|
||||||
|
else print > "'"$lower"'"}' \
|
||||||
"$manifest"
|
"$manifest"
|
||||||
|
|
||||||
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
||||||
|
|
||||||
cat "$upper" > "$manifest"
|
(
|
||||||
echo --- >> "$manifest"
|
cat "$upper"
|
||||||
cat "$lower" >> "$manifest"
|
echo ---
|
||||||
|
cat "$lower"
|
||||||
rm -f "$upper" "$lower"
|
) > "$manifest"
|
||||||
|
39
contrib/sigtest.sh
Executable file
39
contrib/sigtest.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ $# -eq 0 -o "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
|
||||||
|
cat <<EOHELP
|
||||||
|
Usage: $0 <public> <signed manifest>
|
||||||
|
|
||||||
|
sigtest.sh checks if a manifest is signed by the public key <public>. There is
|
||||||
|
no output, success or failure is indicated via the return code.
|
||||||
|
|
||||||
|
See also:
|
||||||
|
* ecdsautils in https://github.com/tcatm/ecdsautils
|
||||||
|
* http://gluon.readthedocs.org/en/latest/features/autoupdater.html
|
||||||
|
|
||||||
|
EOHELP
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
public="$1"
|
||||||
|
manifest="$2"
|
||||||
|
upper="$(mktemp)"
|
||||||
|
lower="$(mktemp)"
|
||||||
|
ret=1
|
||||||
|
|
||||||
|
awk "BEGIN { sep=0 }
|
||||||
|
/^---\$/ { sep=1; next }
|
||||||
|
{ if(sep==0) print > \"$upper\";
|
||||||
|
else print > \"$lower\"}" \
|
||||||
|
"$manifest"
|
||||||
|
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if ecdsaverify -s "$line" -p "$public" "$upper"; then
|
||||||
|
ret=0
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done < "$lower"
|
||||||
|
|
||||||
|
rm -f "$upper" "$lower"
|
||||||
|
exit $ret
|
@ -47,16 +47,16 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'Gluon'
|
project = 'Gluon'
|
||||||
copyright = '2015, Project Gluon'
|
copyright = '2015-2017, Project Gluon'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '2015.1+'
|
version = '2017.1+'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '2015.1+'
|
release = '2017.1+'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
@ -34,21 +34,7 @@ rerun
|
|||||||
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
|
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
|
||||||
can be refered to by the branch `base`.
|
can be refered to by the branch `base`.
|
||||||
|
|
||||||
::
|
After new patches have been commited on top of the `patched` branch (or existing commits
|
||||||
|
|
||||||
make unpatch
|
|
||||||
|
|
||||||
sets the repositories to the `base` branch,
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
make patch
|
|
||||||
|
|
||||||
re-applies the patches by resetting the `patched` branch to `base` and calling `git am`
|
|
||||||
for the patch files. Calling `make` or a similar command after calling `make unpatch`
|
|
||||||
is generally not a good idea.
|
|
||||||
|
|
||||||
After new patches have been commited on top of the patched branch (or existing commits
|
|
||||||
since the base commit have been edited or removed), the patch directories can be regenerated
|
since the base commit have been edited or removed), the patch directories can be regenerated
|
||||||
using
|
using
|
||||||
|
|
||||||
@ -61,3 +47,19 @@ and you can try rebasing it onto the new `base` branch yourself and after that c
|
|||||||
|
|
||||||
Always call `make update-patches` after making changes to a module repository as `make update` will overwrite your
|
Always call `make update-patches` after making changes to a module repository as `make update` will overwrite your
|
||||||
commits, making `git reflog` the only way to recover them!
|
commits, making `git reflog` the only way to recover them!
|
||||||
|
|
||||||
|
Development Guidelines
|
||||||
|
----------------------
|
||||||
|
lua should be used instead of sh whenever sensible. The following criteria
|
||||||
|
should be considered:
|
||||||
|
|
||||||
|
- Is the script doing more than just executing external commands? if so, use lua
|
||||||
|
- Is the script parsing/editing json-data? If so, use lua for speed
|
||||||
|
- When using sh, use jsonfilter instead of json_* functions for speed
|
||||||
|
|
||||||
|
Code formatting may sound like a topic for the pedantic, however it helps if
|
||||||
|
the code in the project is formatted in the same way. The following rules
|
||||||
|
apply:
|
||||||
|
|
||||||
|
- use tabs instead of spaces
|
||||||
|
- trailing whitespaces must be eliminated
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
Config Mode
|
|
||||||
===========
|
|
||||||
|
|
||||||
As of 2014.4 `gluon-config-mode` consists of several modules.
|
|
||||||
|
|
||||||
gluon-config-mode-core
|
|
||||||
This modules provides the core functionality for the config mode.
|
|
||||||
All modules must depend on it.
|
|
||||||
|
|
||||||
gluon-config-mode-hostname
|
|
||||||
Provides a hostname field.
|
|
||||||
|
|
||||||
gluon-config-mode-autoupdater
|
|
||||||
Informs whether the autoupdater is enabled.
|
|
||||||
|
|
||||||
gluon-config-mode-mesh-vpn
|
|
||||||
Allows toggling of mesh-vpn-fastd and setting a bandwidth limit.
|
|
||||||
|
|
||||||
gluon-config-mode-geo-location
|
|
||||||
Enables the user to set the geographical location of the node.
|
|
||||||
|
|
||||||
gluon-config-mode-contact-info
|
|
||||||
Adds a field where the user can provide contact information.
|
|
||||||
|
|
||||||
In order to get a config mode close to the one found in 2014.3.x you may add
|
|
||||||
these modules to your `site.mk`:
|
|
||||||
gluon-config-mode-hostname,
|
|
||||||
gluon-config-mode-autoupdater,
|
|
||||||
gluon-config-mode-mesh-vpn,
|
|
||||||
gluon-config-mode-geo-location,
|
|
||||||
gluon-config-mode-contact-info
|
|
||||||
|
|
||||||
Writing Config Mode Modules
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Config mode modules are located at `/lib/gluon/config-mode/wizard` and
|
|
||||||
`/lib/gluon/config-mode/reboot`. Modules are named like `0000-name.lua` and
|
|
||||||
are executed in lexical order. If you take the standard set of modules, the
|
|
||||||
order is, for wizard modules:
|
|
||||||
|
|
||||||
- 0050-autoupdater-info
|
|
||||||
- 0100-hostname
|
|
||||||
- 0300-mesh-vpn
|
|
||||||
- 0400-geo-location
|
|
||||||
- 0500-contact-info
|
|
||||||
|
|
||||||
While for reboot modules it is:
|
|
||||||
|
|
||||||
- 0100-mesh-vpn
|
|
||||||
- 0900-msg-reboot
|
|
||||||
|
|
||||||
Wizards
|
|
||||||
-------
|
|
||||||
|
|
||||||
Wizard modules return a UCI section. A simple module capable of changing the
|
|
||||||
hostname might look like this::
|
|
||||||
|
|
||||||
local cbi = require "luci.cbi"
|
|
||||||
local uci = luci.model.uci.cursor()
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
function M.section(form)
|
|
||||||
local s = form:section(cbi.SimpleSection, nil, nil)
|
|
||||||
local o = s:option(cbi.Value, "_hostname", "Hostname")
|
|
||||||
o.value = uci:get_first("system", "system", "hostname")
|
|
||||||
o.rmempty = false
|
|
||||||
o.datatype = "hostname"
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.handle(data)
|
|
||||||
uci:set("system", uci:get_first("system", "system"), "hostname", data._hostname)
|
|
||||||
uci:save("system")
|
|
||||||
uci:commit("system")
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
|
|
||||||
Reboot page
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Reboot modules return a function that will be called when the page is to be
|
|
||||||
rendered or nil (i.e. the module is skipped)::
|
|
||||||
|
|
||||||
if no_hello_world_today then
|
|
||||||
return nil
|
|
||||||
else
|
|
||||||
return function ()
|
|
||||||
luci.template.render_string("Hello World!")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -11,85 +11,132 @@ is a requirement. At the moment, Gluon's scripts can't handle devices
|
|||||||
without WLAN adapters (although such environments may also be interesting,
|
without WLAN adapters (although such environments may also be interesting,
|
||||||
e.g. for automated testing in virtual machines).
|
e.g. for automated testing in virtual machines).
|
||||||
|
|
||||||
|
|
||||||
.. _hardware-adding-profiles:
|
.. _hardware-adding-profiles:
|
||||||
|
|
||||||
Adding profiles
|
Adding profiles
|
||||||
---------------
|
---------------
|
||||||
The vast majority of devices with ath9k WLAN uses the ar71xx target of OpenWrt.
|
The vast majority of devices with ath9k WLAN uses the ar71xx target of LEDE.
|
||||||
If the hardware you want to add support for is also ar71xx, adding a new profile
|
If the hardware you want to add support for is also ar71xx, adding a new profile
|
||||||
is enough.
|
is enough.
|
||||||
|
|
||||||
Profiles are defined in ``targets/<target>-<subtarget>/profiles.mk``. There are two macros
|
Profiles are defined in ``targets/*`` in a shell-based DSL (so common shell
|
||||||
used to define which images are generated: ``GluonProfile`` and ``GluonModel``. The following examples
|
commands syntax like ``if`` can be used.
|
||||||
are taken from ``profiles.mk`` of the ``ar71xx-generic`` target::
|
|
||||||
|
|
||||||
$(eval $(call GluonProfile,TLWR1043))
|
The ``device`` command is used to define an image build for a device. It takes
|
||||||
$(eval $(call GluonModel,TLWR1043,tl-wr1043nd-v1-squashfs,tp-link-tl-wr1043n-nd-v1))
|
two or three parameters.
|
||||||
$(eval $(call GluonModel,TLWR1043,tl-wr1043nd-v2-squashfs,tp-link-tl-wr1043n-nd-v2))
|
|
||||||
|
|
||||||
The ``GluonProfile`` macro takes at least one parameter, the profile name as it is
|
The first parameter defines the Gluon profile name, which is used to refer to the
|
||||||
defined in the Makefiles of OpenWrt (``openwrt/target/linux/<target>/<subtarget>/profiles/*``
|
device and is part of the generated image name. The profile name must be same as
|
||||||
and ``openwrt/target/linux/<target>/image/Makefile``). If the target you are on doesn't define
|
the output of the following command (on the target device), so the autoupdater
|
||||||
profiles (e.g. on x86), just add a single profile called ``Generic`` or similar.
|
can work::
|
||||||
|
|
||||||
It may optionally take a second parameter which defines additional packages to include for the profile
|
|
||||||
(e.g. ath10k). The additional packages defined in ``openwrt/target/linux/<target>/<subtarget>/profiles/*``
|
|
||||||
aren't used.
|
|
||||||
|
|
||||||
The ``GluonModel`` macro takes three parameters: The profile name, the suffix of the image file
|
|
||||||
generated by OpenWrt (without the file extension), and the final image name of the Gluon image.
|
|
||||||
The final image name must be the same that is returned by the following command.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
lua -e 'print(require("platform_info").get_image_name())'
|
lua -e 'print(require("platform_info").get_image_name())'
|
||||||
|
|
||||||
|
The second parameter defines the name of the image files generated by LEDE. Usually,
|
||||||
|
it is also the LEDE profile name; for devices that still use the old image build
|
||||||
|
code, a third parameter with the LEDE profile name can be passed. The profile names
|
||||||
|
can be found in the image Makefiles in ``lede/target/linux/<target>/image/Makefile``.
|
||||||
|
|
||||||
This is just so the autoupdater can work. The command has to be executed _on_ the target (eg. the hardware router with a flashed image). So you'll first have to build an image with a guessed name, and afterwards build a new, correctly named image. On targets which aren't supported by the autoupdater,
|
Examples::
|
||||||
``require("platform_info").get_image_name()`` will just return ``nil`` and the final image name
|
|
||||||
may be defined arbitrarily.
|
device tp-link-tl-wr1043n-nd-v1 tl-wr1043nd-v1
|
||||||
|
device alfa-network-hornet-ub hornet-ub HORNETUB
|
||||||
|
|
||||||
|
Suffixes and extensions
|
||||||
|
'''''''''''''''''''''''
|
||||||
|
|
||||||
|
By default, image files are expected to have the extension ``.bin``. In addition,
|
||||||
|
the images generated by LEDE 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
|
||||||
|
the top of the file to set the defaults for all images, or for a single image. There
|
||||||
|
are three forms with 0 to 2 arguments (all work with ``sysupgrade`` as well)::
|
||||||
|
|
||||||
|
factory SUFFIX .EXT
|
||||||
|
factory .EXT
|
||||||
|
factory
|
||||||
|
|
||||||
|
When only an extension is given, the default suffix is retained. When no arguments
|
||||||
|
are given, this signals that no factory (or sysupgrade) image exists.
|
||||||
|
|
||||||
|
Aliases
|
||||||
|
'''''''
|
||||||
|
|
||||||
|
Sometimes multiple models use the same LEDE images. In this case, the ``alias``
|
||||||
|
command can be used to create symlinks and additional entries in the autoupdater
|
||||||
|
manifest for the alternative models.
|
||||||
|
|
||||||
|
Standalone images
|
||||||
|
'''''''''''''''''
|
||||||
|
|
||||||
|
On targets without *per-device rootfs* support in LEDE, the commands described above
|
||||||
|
can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used::
|
||||||
|
|
||||||
|
factory_image PROFILE IMAGE .EXT
|
||||||
|
sysupgrade_image PROFILE IMAGE .EXT
|
||||||
|
|
||||||
|
Again, the profile name must match the value printed by the aforementioned Lua
|
||||||
|
command. The image name must match the part between the target name and the extension
|
||||||
|
as generated by LEDE and is to be omitted when no such part exists.
|
||||||
|
|
||||||
|
Packages
|
||||||
|
''''''''
|
||||||
|
|
||||||
|
The ``packages`` command takes an arbitrary number of arguments. Each argument
|
||||||
|
defines an additional package to include in the images in addition to the default
|
||||||
|
package sets defined by LEDE. When a package name is prefixed by a minus sign, the
|
||||||
|
packages are excluded instead.
|
||||||
|
|
||||||
|
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
|
||||||
|
target supports *per-default rootfs*).
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
'''''''''''''
|
||||||
|
|
||||||
|
The ``config`` command allows to add arbitary target-specific LEDE configuration
|
||||||
|
to be emitted to ``.config``.
|
||||||
|
|
||||||
|
Notes
|
||||||
|
'''''
|
||||||
|
|
||||||
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
||||||
configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which
|
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/core/initial/001-sysconfig``
|
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
|
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 an OpenWrt bug was the cause).
|
even on devices with only one WLAN adapter, in these cases a LEDE bug was the cause).
|
||||||
|
|
||||||
|
|
||||||
Adding support for new hardware targets
|
Adding support for new hardware targets
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
||||||
required for adding a new target:
|
required for adding a new target:
|
||||||
|
|
||||||
Adjust packages
|
Package adjustments
|
||||||
'''''''''''''''
|
'''''''''''''''''''
|
||||||
One package that definitely needs adjustments for every new target added is ``lua-platform-info``. Just
|
|
||||||
start with a copy of an existing platform info script, adjust it for the new target, and add the new target
|
|
||||||
to the list of supported targets in the package Makefile.
|
|
||||||
|
|
||||||
On many targets, Gluon's network setup scripts (mainly in the packages ``gluon-core`` and ``gluon-mesh-batman-adv-core``)
|
One package that may need adjustments for new targets is ``libplatforminfo`` (to be found in
|
||||||
|
`packages/gluon/libs/libplatforminfo <https://github.com/freifunk-gluon/packages/tree/master/libs/libplatforminfo>`_).
|
||||||
|
If the new platform works fine with the definitions found in ``default.c``, nothing needs to be done. Otherwise,
|
||||||
|
create a definition for the added target or subtarget, either by symlinking one of the files in the ``templates``
|
||||||
|
directory, or adding a new source file.
|
||||||
|
|
||||||
|
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
|
won't run correctly without some adjustments, so better double check that everything is fine there (and the files
|
||||||
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
||||||
|
|
||||||
Add support to the build system
|
Build system support
|
||||||
'''''''''''''''''''''''''''''''
|
''''''''''''''''''''
|
||||||
A directory for the new target must be created under ``targets``, and it must be added
|
|
||||||
to ``targets/targets.mk``. In the new target directory, three files must be created:
|
|
||||||
|
|
||||||
* config
|
A definition for the new target must be created under ``targets``, and it must be added
|
||||||
* profiles.mk
|
to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to three arguments:
|
||||||
* vermagic
|
the target name, the Gluon subtarget name (if the target has subtargets), and the
|
||||||
|
LEDE subtarget name (if it differs from the Gluon subtarget). The third argument
|
||||||
|
can be used to define multiple Gluon targets with different configuration for the
|
||||||
|
same LEDE target, like it is done for the ``ar71xx-tiny`` target.
|
||||||
|
|
||||||
The file ``config`` can be used to add additional, target-specific options to the OpenWrt config. It
|
After this, is should be sufficient to call ``make GLUON_TARGET=<target>`` to build the images for the new target.
|
||||||
must at least select the correct target and subtarget. For ``profiles.mk``, see :ref:`hardware-adding-profiles`.
|
|
||||||
|
|
||||||
The files ``vermagic`` must have the correct content so kernel modules from the upstream repositories
|
|
||||||
can be installed without dependency issues. The OpenWrt version a Gluon release is based on is defined by the upstream package repo URL in ``include/gluon.mk``
|
|
||||||
(in the variable ``CONFIG_VERSION_REPO``); at the time this documentation was written, this was ``barrier_breaker/14.07``; whenever
|
|
||||||
the package repo is updated, all ``vermagic`` files must be updated as well.
|
|
||||||
|
|
||||||
The content is a hash which is part of the version number of the kernel package. So in the case of ``ar71xx-generic`` on
|
|
||||||
``barrier_breaker``, we look for the kernel package in the directory ``https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/base/``.
|
|
||||||
As the kernel package is called ``kernel_3.10.49-1-0114c71ed85677c9c1e4911437af4743_ar71xx.ipk``, the correct ``vermagic`` string
|
|
||||||
is ``0114c71ed85677c9c1e4911437af4743``.
|
|
||||||
|
|
||||||
After this, is should be sufficient to call ``make GLUON_TARGET=<target>-<subtarget>`` to build the images for the new target.
|
|
||||||
|
@ -1,88 +0,0 @@
|
|||||||
Internationalization support
|
|
||||||
============================
|
|
||||||
|
|
||||||
General guidelines
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* All config mode packages must be fully translatable, with complete English and German texts.
|
|
||||||
* All new expert mode packages be fully translatable. English texts are required, German texts recommended.
|
|
||||||
* Existing expert mode packages should be made translatable as soon as possible.
|
|
||||||
* The "message IDs" (which are the arguments to the ``translate`` function) should be the
|
|
||||||
English texts.
|
|
||||||
|
|
||||||
i18n support in LuCI
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Internationalization support can be found in the ``luci.i18n`` package.
|
|
||||||
Strings are translated using the ``i18n.translate`` and ``i18n.translatef`` functions
|
|
||||||
(``translate`` for static strings, ``translatef`` for printf-like formatted string).
|
|
||||||
|
|
||||||
Example from the ``gluon-config-mode-geo-location`` package::
|
|
||||||
|
|
||||||
local i18n = require "luci.i18n"
|
|
||||||
o = s:option(cbi.Flag, "_location", i18n.translate("Show node on the map"))
|
|
||||||
|
|
||||||
Adding translation templates to Gluon packages
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
The i18n support is based on the standard gettext system. For each translatable package,
|
|
||||||
a translation template with extension ``.pot`` can be created using the ``i18n-scan.pl``
|
|
||||||
script from the LuCI repository::
|
|
||||||
|
|
||||||
cd package/gluon-config-mode-geo-location
|
|
||||||
mkdir i18n
|
|
||||||
cd i18n
|
|
||||||
../../../packages/luci/build/i18n-scan.pl ../files > gluon-config-mode-geo-location.pot
|
|
||||||
|
|
||||||
The entries in the template can be reordered after the generation if desirable. Lots of standard
|
|
||||||
translations like "Cancel" are already available in the LuCI base translation file (see
|
|
||||||
``packages/luci/po/templates/base.pot``) and can be removed from the template.
|
|
||||||
|
|
||||||
In addition, some additions to the Makefile must be made. Instead of OpenWrt's default package.mk,
|
|
||||||
the Gluon version ``$(GLUONDIR)/include/package.mk`` must be used. The i18n files must be installed
|
|
||||||
and PKG_CONFIG_DEPENDS must be added::
|
|
||||||
|
|
||||||
...
|
|
||||||
include $(GLUONDIR)/include/package.mk
|
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
|
||||||
...
|
|
||||||
define Build/Compile
|
|
||||||
$(call GluonBuildI18N,gluon-config-mode-geo-location,i18n)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gluon-config-mode-geo-location/install
|
|
||||||
...
|
|
||||||
$(call GluonInstallI18N,gluon-config-mode-geo-location,$(1))
|
|
||||||
endef
|
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
Adding translations
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
A new translation file for a template can be added using the ``msginit`` command::
|
|
||||||
|
|
||||||
cd package/gluon-config-mode-geo-location/i18n
|
|
||||||
msginit -l de
|
|
||||||
|
|
||||||
This will create the file ``de.po`` in which the translations can be added.
|
|
||||||
|
|
||||||
The translation file can be updated to a new template version using the ``msgmerge`` command::
|
|
||||||
|
|
||||||
msgmerge -U de.po gluon-config-mode-geo-location.pot
|
|
||||||
|
|
||||||
After the merge, the translation file should be checked for "fuzzy matched" entries where
|
|
||||||
the original English texts have changed. All entries from the the translation file should be
|
|
||||||
translated in the ``.po`` file (or removed from it, so the original English texts are displayed
|
|
||||||
instead).
|
|
||||||
|
|
||||||
Adding support for new languages
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
A list of all languages supported by LuCI can be found in the ``packages/luci/luci.mk`` file after
|
|
||||||
Gluon's dependencies have been downloaded using ``make update``. Adding translations for these
|
|
||||||
languages is straightforward using the ``msginit`` command.
|
|
||||||
|
|
||||||
For other languages, support must be added tu LuCI first, which constitutes completely translating
|
|
||||||
the ``base.pot``. Please contact the upstream LuCI maintainers if you'd like to do this.
|
|
18
docs/dev/mac_addresses.rst
Normal file
18
docs/dev/mac_addresses.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
MAC addresses
|
||||||
|
=============
|
||||||
|
|
||||||
|
Many devices don't have enough unique MAC addresses assigned by the vendor
|
||||||
|
(in batman-adv, each mesh interface needs an own MAC address that must be unique
|
||||||
|
mesh-wide).
|
||||||
|
|
||||||
|
Gluon tries to solve this issue by using a hash of the primary MAC address as a
|
||||||
|
45 bit MAC address prefix. The resulting 8 addresses are used as follows:
|
||||||
|
|
||||||
|
* 0: client0; WAN
|
||||||
|
* 1: mesh0
|
||||||
|
* 2: ibss0
|
||||||
|
* 3: wan_radio0 (private WLAN); batman-adv primary address
|
||||||
|
* 4: client1; LAN
|
||||||
|
* 5: mesh1
|
||||||
|
* 6: ibss1
|
||||||
|
* 7: wan_radio1 (private WLAN); mesh VPN
|
@ -6,7 +6,7 @@ Basics
|
|||||||
|
|
||||||
After each sysupgrade (including the initial installation), Gluon will execute all scripts
|
After each sysupgrade (including the initial installation), Gluon will execute all scripts
|
||||||
under ``/lib/gluon/upgrade``. These scripts' filenames usually begin with a 3-digit number
|
under ``/lib/gluon/upgrade``. These scripts' filenames usually begin with a 3-digit number
|
||||||
specifying the order of execution.
|
specifying the order of execution. Note that the script files need to be executable.
|
||||||
|
|
||||||
To get an overview of the ordering of all scripts of all packages, the helper script ``contrib/lsupgrade.sh``
|
To get an overview of the ordering of all scripts of all packages, the helper script ``contrib/lsupgrade.sh``
|
||||||
in the Gluon repository can be used, which will print all upgrade scripts' filenames and directories. If executed
|
in the Gluon repository can be used, which will print all upgrade scripts' filenames and directories. If executed
|
||||||
@ -16,17 +16,15 @@ Best practices
|
|||||||
--------------
|
--------------
|
||||||
|
|
||||||
* Most upgrade scripts are written in Lua. This allows using lots of helper functions provided
|
* Most upgrade scripts are written in Lua. This allows using lots of helper functions provided
|
||||||
by LuCi and Gluon, e.g. to access the site configuration or edit UCI configuration files.
|
by Gluon, e.g. to access the site configuration or edit UCI configuration files.
|
||||||
|
|
||||||
* Whenever possible, scripts shouldn't check if they are running for the first time, but just edit configuration
|
* Whenever possible, scripts shouldn't check if they are running for the first time, but just edit configuration
|
||||||
files to achive a valid configuration (without overwriting configuration changes made by the user where desirable).
|
files to achieve a valid configuration (without overwriting configuration changes made by the user where desirable).
|
||||||
This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
|
This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
|
||||||
|
|
||||||
* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
|
* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
|
||||||
can be checked. This variable in ``nil`` during the initial installation and contains the previously install Gluon
|
can be checked. This variable is ``nil`` during the initial installation and contains the previously install Gluon
|
||||||
version otherwise. The package ``gluon-legacy`` (which is responsible for upgrades from the old firmwares of
|
version otherwise.
|
||||||
Hamburg/Kiel/Lübeck) uses the special value ``legacy``; other packages should handle this value just as any other
|
|
||||||
string.
|
|
||||||
|
|
||||||
Script ordering
|
Script ordering
|
||||||
---------------
|
---------------
|
||||||
|
82
docs/dev/web/config-mode.rst
Normal file
82
docs/dev/web/config-mode.rst
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
Config Mode
|
||||||
|
===========
|
||||||
|
|
||||||
|
The `Config Mode` consists of several modules that provide a range of different
|
||||||
|
condiguration options:
|
||||||
|
|
||||||
|
gluon-config-mode-core
|
||||||
|
This modules provides the core functionality for the config mode.
|
||||||
|
All modules must depend on it.
|
||||||
|
|
||||||
|
gluon-config-mode-hostname
|
||||||
|
Provides a hostname field.
|
||||||
|
|
||||||
|
gluon-config-mode-autoupdater
|
||||||
|
Informs whether the autoupdater is enabled.
|
||||||
|
|
||||||
|
gluon-config-mode-mesh-vpn
|
||||||
|
Allows toggling of mesh-vpn-fastd and setting a bandwidth limit.
|
||||||
|
|
||||||
|
gluon-config-mode-geo-location
|
||||||
|
Enables the user to set the geographical location of the node.
|
||||||
|
|
||||||
|
gluon-config-mode-contact-info
|
||||||
|
Adds a field where the user can provide contact information.
|
||||||
|
|
||||||
|
|
||||||
|
Writing Config Mode modules
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Config mode modules are located at ``/lib/gluon/config-mode/wizard`` and
|
||||||
|
``/lib/gluon/config-mode/reboot``. Modules are named like ``0000-name.lua`` and
|
||||||
|
are executed in lexical order. In the standard package set, the
|
||||||
|
order is, for wizard modules:
|
||||||
|
|
||||||
|
- 0050-autoupdater-info
|
||||||
|
- 0100-hostname
|
||||||
|
- 0300-mesh-vpn
|
||||||
|
- 0400-geo-location
|
||||||
|
- 0500-contact-info
|
||||||
|
|
||||||
|
The reboot module order is:
|
||||||
|
|
||||||
|
- 0100-mesh-vpn
|
||||||
|
- 0900-msg-reboot
|
||||||
|
|
||||||
|
All modules are run in the gluon-web model context and have access to the same
|
||||||
|
variables as "full" gluon-web modules.
|
||||||
|
|
||||||
|
Wizards
|
||||||
|
-------
|
||||||
|
|
||||||
|
Wizard modules must return a function that is provided with the wizard form and an
|
||||||
|
UCI cursor. The function can create configuration sections in the form:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
return function(form, uci)
|
||||||
|
local s = form:section(Section)
|
||||||
|
local o = s:option(Value, "hostname", "Hostname")
|
||||||
|
o.default = uci:get_first("system", "system", "hostname")
|
||||||
|
o.datatype = "hostname"
|
||||||
|
|
||||||
|
function o:write(data)
|
||||||
|
uci:set("system", uci:get_first("system", "system"), "hostname", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
return {'system'}
|
||||||
|
end
|
||||||
|
|
||||||
|
The function may return a table of UCI packages to commit after the individual
|
||||||
|
fields' `write` methods have been executed. This is done to avoid committing the
|
||||||
|
packages repeatedly when multiple wizard modules modify the same package.
|
||||||
|
|
||||||
|
Reboot page
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Reboot modules are simply executed when the reboot page is
|
||||||
|
rendered:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
renderer.render_string("Hello World!")
|
117
docs/dev/web/controller.rst
Normal file
117
docs/dev/web/controller.rst
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
Controllers
|
||||||
|
===========
|
||||||
|
|
||||||
|
Controllers live in ``/lib/gluon/web/controller``. They define which pages ("routes")
|
||||||
|
exist under the ``/cgi-bin/gluon`` path, and what code is run when these pages are requested.
|
||||||
|
|
||||||
|
Controller scripts mostly consist of calls of the `entry` function, which each define
|
||||||
|
one route:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
entry({"admin"}, alias("admin", "info"), _("Advanced settings"), 10)
|
||||||
|
entry({"admin", "info"}, template("admin/info"), _("Information"), 1)
|
||||||
|
|
||||||
|
The entry function expects 4 arguments:
|
||||||
|
|
||||||
|
- `path`: Components of the path to define a route for.
|
||||||
|
|
||||||
|
The above example defines routes for the paths ``admin`` and ``admin/info``.
|
||||||
|
|
||||||
|
- `target`: Dispatcher for the route. See the following section for details.
|
||||||
|
- `title`: Page title (also used in navigation). The underscore function is used
|
||||||
|
|
||||||
|
- `order`: Sort index in navigation (defaults to 100)
|
||||||
|
|
||||||
|
Navigation indexes are automatically generated for each path level. Pages can be
|
||||||
|
hidden from the navigation by setting the `hidden` property of the node object
|
||||||
|
returned by `entry`:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
entry({"hidden"}, alias("foo"), _("I'm hidden!")).hidden = true
|
||||||
|
|
||||||
|
|
||||||
|
Dispatchers
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- *alias* (*path*, ...): Redirects to a different page. The path components are
|
||||||
|
passed as individual arguments.
|
||||||
|
- *call* (*func*, ...): Runs a Lua function for custom request handling. The given
|
||||||
|
function is called with the HTTP object and the template renderer as first
|
||||||
|
two arguments, followed by all additional arguments passed to `call`.
|
||||||
|
- *template* (*view*): Renders the given view. See :doc:`view`.
|
||||||
|
- *model* (*name*): Displays and evaluates a form as defined by the given model. See the
|
||||||
|
:doc:`model` page for an explanation of gluon-web models.
|
||||||
|
|
||||||
|
|
||||||
|
.. _web-controller-http:
|
||||||
|
|
||||||
|
The HTTP object
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The HTTP object provides information about the HTTP requests and allows to add
|
||||||
|
data to the reply. Using it directly is rarely necessary when gluon-web
|
||||||
|
models and views are used.
|
||||||
|
|
||||||
|
Useful functions:
|
||||||
|
|
||||||
|
- *getenv* (*key*): Returns a value from the CGI environment passed by the webserver.
|
||||||
|
- *formvalue* (*key*): Returns a value passed in a query string or in the content
|
||||||
|
of a POST request. If multiple values with the same name have been passed, only
|
||||||
|
the first is returned.
|
||||||
|
- *formvaluetable* (*key*): Similar to *formvalue*, but returns a table of all
|
||||||
|
values for the given key.
|
||||||
|
- *status* (*code*, *message*): Writes the HTTP status to the reply. Has no effect
|
||||||
|
if a status has already been sent or non-header data has been written.
|
||||||
|
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to to
|
||||||
|
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
|
||||||
|
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
|
||||||
|
been sent, it will be done before the data is written.
|
||||||
|
|
||||||
|
|
||||||
|
HTTP functions are called in method syntax, for example:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
http:write('Output!')
|
||||||
|
|
||||||
|
|
||||||
|
.. _web-controller-template-renderer:
|
||||||
|
|
||||||
|
The template renderer
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The template renderer allows to render templates (views). The most useful functions
|
||||||
|
are:
|
||||||
|
|
||||||
|
- *render* (*view*, *scope*): Renders the given view, optionally passing a table
|
||||||
|
with additional variables to make available in the template.
|
||||||
|
- *render_string* (*str*, *scope*): Same as *render*, but the template is passed
|
||||||
|
directly instead of being loaded from the view directory.
|
||||||
|
|
||||||
|
The renderer functions are called in property syntax, for example:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
renderer.render('layout')
|
||||||
|
|
||||||
|
|
||||||
|
Differences from LuCI
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
- Controllers must not use the *module* function to define a Lua module (*gluon-web*
|
||||||
|
will set up a proper environment for each controller itself)
|
||||||
|
- Entries are defined at top level, not inside an *index* function
|
||||||
|
- The *alias* dispatcher triggers an HTTP redirect instead of directly running
|
||||||
|
the dispatcher of the aliased route.
|
||||||
|
- The *call* dispatcher is passed a function instead of a string with a function
|
||||||
|
name.
|
||||||
|
- The *cbi* dispatcher of LuCI has been renamed to *model*.
|
||||||
|
- The HTTP POST handler support the multipart/form-data encoding only, so
|
||||||
|
``enctype="multipart/form-data"`` must be included in all *<form>* HTML
|
||||||
|
elements.
|
||||||
|
- Other dispatchers like *form* are not provided.
|
96
docs/dev/web/i18n.rst
Normal file
96
docs/dev/web/i18n.rst
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
Internationalization support
|
||||||
|
============================
|
||||||
|
|
||||||
|
General guidelines
|
||||||
|
------------------
|
||||||
|
|
||||||
|
* All config mode packages must be fully translatable, with complete English and German texts.
|
||||||
|
* All new expert mode packages must be fully translatable. English texts are required.
|
||||||
|
* German translations are recommended. Other supported languages, especially French, are
|
||||||
|
nice-to-have, but not required. If you don't know a language well, rather leave the translation
|
||||||
|
blank, so it is obvious that there is no proper translation yet.
|
||||||
|
* Existing expert mode packages should be made translatable as soon as possible.
|
||||||
|
* The "message IDs" (which are the arguments to the *translate* function) should be the
|
||||||
|
English texts.
|
||||||
|
|
||||||
|
i18n support in Gluon
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Internationalization support is available in all components (models, view and
|
||||||
|
controllers) of *gluon-web*-based packages. Strings are translated using the *translate*,
|
||||||
|
*_translate* and *translatef* functions (*translate* for static strings, *translatef*
|
||||||
|
for printf-like formatted string; *_translate* works the same as *translate*, but
|
||||||
|
will return *nil* instead of the original string when no translation is available)
|
||||||
|
. In views, the special tags ``<%:...%>`` can be used to translate the contained string.
|
||||||
|
|
||||||
|
Example from the *gluon-config-mode-geo-location* package:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
local share_location = s:option(Flag, "location", translate("Show node on the map"))
|
||||||
|
|
||||||
|
Adding translation templates to Gluon packages
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
The i18n support is based on the standard gettext system. For each translatable package,
|
||||||
|
a translation template with extension ``.pot`` can be created using the *i18n-scan.pl*
|
||||||
|
script in the ``contrib`` directory:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
cd package/gluon-web-mesh-vpn-fastd
|
||||||
|
mkdir i18n
|
||||||
|
cd i18n
|
||||||
|
../../../contrib/i18n-scan.pl ../files ../luasrc > gluon-web-mesh-vpn-fastd.pot
|
||||||
|
|
||||||
|
The same command can be run again to update the template.
|
||||||
|
|
||||||
|
In addition, some additions to the Makefile must be made. Instead of LEDE's default *package.mk*,
|
||||||
|
the Gluon version (``../gluon.mk`` for core packages) must be used. The i18n files must be installed
|
||||||
|
and PKG_CONFIG_DEPENDS must be added::
|
||||||
|
|
||||||
|
...
|
||||||
|
include ../gluon.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
...
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-web-mesh-vpn-fastd,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-web-mesh-vpn-fastd/install
|
||||||
|
...
|
||||||
|
$(call GluonInstallI18N,gluon-web-mesh-vpn-fastd,$(1))
|
||||||
|
endef
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
Adding translations
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
A new translation file for a template can be added using the *msginit* command:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
cd package/gluon-web-mesh-vpn-fastd/i18n
|
||||||
|
msginit -l de
|
||||||
|
|
||||||
|
This will create the file *de.po* in which the translations can be added.
|
||||||
|
|
||||||
|
The translation file can be updated to a new template version using the *msgmerge* command:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
msgmerge -U de.po gluon-web-mesh-vpn-fastd.pot
|
||||||
|
|
||||||
|
After the merge, the translation file should be checked for "fuzzy matched" entries where
|
||||||
|
the original English texts have changed. All entries from the translation file should be
|
||||||
|
translated in the *.po* file (or removed from it, so the original English texts are displayed
|
||||||
|
instead).
|
||||||
|
|
||||||
|
Adding support for new languages
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
A list of all languages supported by *gluon-web* can be found in ``package/gluon.mk``.
|
||||||
|
New languages just need to be added to *GLUON_SUPPORTED_LANGS*, after a human-readable
|
||||||
|
language name has been defined in the same file.
|
148
docs/dev/web/model.rst
Normal file
148
docs/dev/web/model.rst
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
Models
|
||||||
|
======
|
||||||
|
|
||||||
|
Models are defined in ``/lib/gluon/web/model``. Each model defines one or more
|
||||||
|
forms to display on a page, and how the submitted form data is handled.
|
||||||
|
|
||||||
|
Let's start with an example:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
local f = Form(translate('Hostname'))
|
||||||
|
|
||||||
|
local s = f:section(Section)
|
||||||
|
|
||||||
|
local o = s:option(Value, 'hostname', translate('Hostname'))
|
||||||
|
o.default = uci:get_first('system', 'system', 'hostname')
|
||||||
|
function o:write(data)
|
||||||
|
uci:set('system', uci:get_first('system', 'system'), 'hostname', data)
|
||||||
|
uci:commit('system')
|
||||||
|
end
|
||||||
|
|
||||||
|
return f
|
||||||
|
|
||||||
|
The toplevel element of a model is always a *Form*, but it is also possible for
|
||||||
|
a model to return multiple forms, which are displayed one below the other.
|
||||||
|
|
||||||
|
A *Form* has one or more *Sections*, and each *Section* has different types
|
||||||
|
of options.
|
||||||
|
|
||||||
|
All of these elements have an *id*, which is used to identify them in the HTML
|
||||||
|
form and handlers. If no ID is given, numerical IDs will be assigned automatically,
|
||||||
|
but using explicitly named elements is often advisable (and it is required if a
|
||||||
|
form does not always include the same elements, i.e., some forms, sections or
|
||||||
|
options are added conditionally). IDs are hierarchical, so in the above example,
|
||||||
|
the *Value* would get the ID ``1.1.hostname`` (value *hostname* in first section
|
||||||
|
of first form).
|
||||||
|
|
||||||
|
Classes and methods
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- *Form* (*title*, *description*, *id*)
|
||||||
|
|
||||||
|
- *Form:section* (*type*, *title*, *description*, *id*)
|
||||||
|
|
||||||
|
Creates a new section of the given type (usually *Section*).
|
||||||
|
|
||||||
|
- *Form:write* ()
|
||||||
|
|
||||||
|
Is called after the form has beed submitted (but only if the data is valid). It
|
||||||
|
is called last (after all options' *write* methods) and is usually used
|
||||||
|
to commit changed UCI packages.
|
||||||
|
|
||||||
|
The default implementation of *write* doesn't to anything, but it can be
|
||||||
|
overridden.
|
||||||
|
|
||||||
|
- *Section* (usually instanciated through *Form:section*)
|
||||||
|
|
||||||
|
- *Section:option* (*type*, *id*, *title*, *description*)
|
||||||
|
|
||||||
|
Creates a new option of the given type. Option types:
|
||||||
|
|
||||||
|
- *Value*: simple text entry
|
||||||
|
- *TextValue*: multiline text field
|
||||||
|
- *ListValue*: radio buttons or dropdown selection
|
||||||
|
- *DynamicList*: variable number of text entry fields
|
||||||
|
- *Flag*: checkbox
|
||||||
|
|
||||||
|
Most option types share the same properties and methods:
|
||||||
|
|
||||||
|
- *default*: default value
|
||||||
|
- *optional*: value may be empty
|
||||||
|
- *datatype*: one of the types described in :ref:`web-model-datatypes`
|
||||||
|
|
||||||
|
By default (when *datatype* is *nil*), all values are accepted.
|
||||||
|
|
||||||
|
- *state*: has one of the values *FORM_NODATA*, *FORM_VALID* and *FORM_INVALID*
|
||||||
|
when read in a form handler
|
||||||
|
|
||||||
|
An option that has not been submitted because of its dependencies will have
|
||||||
|
the state *FORM_NODATA*, *FORM_INVALID* if the submitted value is not valid
|
||||||
|
according to the set *datatype*, and *FORM_VALID* otherwise.
|
||||||
|
|
||||||
|
- *data*: can be read in form handlers to get the submitted value
|
||||||
|
|
||||||
|
- *depends* (*self*, *option*, *value*): adds a dependency on another option
|
||||||
|
|
||||||
|
The option will only be shown when the passed option has the given value. This
|
||||||
|
is mainly useful when the other value is a *Flag* or *ListValue*.
|
||||||
|
|
||||||
|
- *depends* (*self*, *deps*): adds a dependency on multiple other options
|
||||||
|
|
||||||
|
*deps* must be a table with options as keys and values as values. The option
|
||||||
|
will only be shown when all passed options have the corresponding values.
|
||||||
|
|
||||||
|
Multiple alternative dependencies can be added by calling *depends* repeatedly.
|
||||||
|
|
||||||
|
- *value* (*self*, *value*, *text*): adds a choice to a *ListValue*
|
||||||
|
|
||||||
|
- *write* (*self*, *data*): is called with the submitted value when all form data is valid.
|
||||||
|
|
||||||
|
Does not do anything by default, but can be overridden.
|
||||||
|
|
||||||
|
The *default* value, the *value* argument to *depends* and the output *data* always have
|
||||||
|
the same type, which is usually a string (or *nil* for optional values). Exceptions
|
||||||
|
are:
|
||||||
|
|
||||||
|
- *Flag* uses boolean values
|
||||||
|
- *DynamicList* uses a table of strings
|
||||||
|
|
||||||
|
Despite its name, the *datatype* setting does not affect the returned value type,
|
||||||
|
but only defines a validator the check the submitted value with.
|
||||||
|
|
||||||
|
For a more complete example that actually makes use of most of these features,
|
||||||
|
have a look at the model of the *gluon-web-network* package.
|
||||||
|
|
||||||
|
.. _web-model-datatypes:
|
||||||
|
|
||||||
|
Data types
|
||||||
|
----------
|
||||||
|
|
||||||
|
- *integer*: an integral number
|
||||||
|
- *uinteger*: an integral number greater than or equal to zero
|
||||||
|
- *float*: a number
|
||||||
|
- *ufloat*: a number greater than or equal to zero
|
||||||
|
- *ipaddr*: an IPv4 or IPv6 address
|
||||||
|
- *ip4addr*: an IPv4 address
|
||||||
|
- *ip6addr*: an IPv6 address
|
||||||
|
- *wpakey*: a string usable as a WPA key (either between 8 and 63 characters, or 64 hex digits)
|
||||||
|
- *range* (*min*, *max*): a number in the given range (inclusive)
|
||||||
|
- *min* (*min*): a number greater than or equal to the given minimum
|
||||||
|
- *max* (*max*): a number less than or equal to the given maximum
|
||||||
|
- *irange* (*min*, *max*): an integral number in the given range (inclusive)
|
||||||
|
- *imin* (*min*): an integral number greater than or equal to the given minimum
|
||||||
|
- *imax* (*max*): an integral number less than or equal to the given maximum
|
||||||
|
- *minlength* (*min*): a string with the given minimum length
|
||||||
|
- *maxlength* (*max*): a string with the given maximum length
|
||||||
|
|
||||||
|
Differences from LuCI
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
- LuCI's *SimpleForm* and *SimpleSection* are called *Form* and *Section*, respectively
|
||||||
|
- Is it not possible to add options to a *Form* directly, a *Section* must always
|
||||||
|
be created explicitly
|
||||||
|
- Many of LuCI's CBI classes have been removed, most importantly the *Map*
|
||||||
|
- The *rmempty* option attribute does not exist, use *optional* instead
|
||||||
|
- Only the described data types are supported
|
||||||
|
- Form handlers work completely differently (in particular, a *Form*'s *handle*
|
||||||
|
method should usually not be overridden in *gluon-web*)
|
55
docs/dev/web/view.rst
Normal file
55
docs/dev/web/view.rst
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Views
|
||||||
|
=====
|
||||||
|
|
||||||
|
The template parser reads views from ``/lib/gluon/web/view``. Writing own view
|
||||||
|
should be avoided in favour of using :doc:`model` with their predefined views.
|
||||||
|
|
||||||
|
Views are partial HTML pages, with additional template tags that allow
|
||||||
|
to embed Lua code and translation strings. The following tags are defined:
|
||||||
|
|
||||||
|
- ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
|
||||||
|
- ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
|
||||||
|
- ``<%+`` ... ``%>`` includes another template.
|
||||||
|
- ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
|
||||||
|
- ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
|
||||||
|
in the translation. This only makes sense when the i18n catalog contains HTML code.
|
||||||
|
- ``<%#`` ... ``%>`` is a comment.
|
||||||
|
|
||||||
|
All of these also come in the whitespace-stripping variants ``<%-`` and ``-%>`` that
|
||||||
|
remove all whitespace before or after the tag.
|
||||||
|
|
||||||
|
Complex combinations of HTML and Lua code are possible, for example:
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<% if foo then %>
|
||||||
|
Content
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
Variables and functions
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Many call sites define additional variables (for example, model templates can
|
||||||
|
access the model as *self* and a unique element ID as *id*), but the following
|
||||||
|
variables and functions should always be available for the embedded Lua code:
|
||||||
|
|
||||||
|
- *renderer*: :ref:`web-controller-template-renderer`
|
||||||
|
- *http*: :ref:`web-controller-http`
|
||||||
|
- *request*: Table containing the path components of the current page
|
||||||
|
- *url* (*path*): returns the URL for the given path, which is passed as a table of path components.
|
||||||
|
- *attr* (*key*, *value*): Returns a string of the form ``key="value"``
|
||||||
|
(with a leading space character before the key).
|
||||||
|
|
||||||
|
*value* is converted to a string (tables are serialized as JSON) and HTML entities
|
||||||
|
are escaped. Returns an empty string when *value* is *nil* or *false*.
|
||||||
|
- *include* (*template*): Includes another template.
|
||||||
|
- *node* (*path*, ...): Returns the controller node for the given page (passed as
|
||||||
|
one argument per path component).
|
||||||
|
|
||||||
|
Use ``node(unpack(request))`` to get the node for the current page.
|
||||||
|
- *pcdata* (*str*): Escapes HTML entities in the passed string.
|
||||||
|
- *urlencode* (*str*): Escapes the passed string for use in an URL.
|
||||||
|
- *translate*, *_translate* and *translatef*: see :doc:`i18n`
|
@ -8,7 +8,7 @@ If you select this package, add a list of authorized keys to ``site.conf`` like
|
|||||||
|
|
||||||
{
|
{
|
||||||
authorized_keys = { 'ssh-rsa AAA.... user1@host',
|
authorized_keys = { 'ssh-rsa AAA.... user1@host',
|
||||||
'ssh-rsa AAA.... user2@host },
|
'ssh-rsa AAA.... user2@host' },
|
||||||
hostname_prefix = ...
|
hostname_prefix = ...
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -11,14 +11,19 @@ during development), but it can be enabled by setting the variable GLUON_BRANCH
|
|||||||
to override the default branch set in the set in the site configuration.
|
to override the default branch set in the set in the site configuration.
|
||||||
|
|
||||||
A manifest file for the updater can be generated with `make manifest`. A signing script (using
|
A manifest file for the updater can be generated with `make manifest`. A signing script (using
|
||||||
ecdsautils) can by found in the `contrib` directory. When creating the manifest, ``GLUON_PRIORITY`` can
|
``ecdsautils``) can by found in the `contrib` directory. When creating the manifest, the
|
||||||
be set on the command line, or it can be taken from the ``site.mk``.
|
``PRIORITY`` value may be defined by setting ``GLUON_PRIORITY`` on the command line or in ``site.mk``.
|
||||||
|
|
||||||
The priority defines the maximum number of days that may pass between releasing an update and installation
|
``GLUON_PRIORITY`` defines the maximum number of days that may pass between releasing an update and installation
|
||||||
of the images. The update probability with start at 0 after the release time mentioned in the manifest
|
of the images. The update probability will start at 0 after the release time declared in the manifest file
|
||||||
and then slowly rise to 1 after the number of days given by the priority has passed.
|
by the variable DATE and then slowly rise up to 1 when ``GLUON_PRIORITY`` days have passed. The autoupdater checks
|
||||||
|
for updates hourly (at a random minute of the hour), but usually only updates during its run between
|
||||||
|
4am and 5am, except when the whole ``GLUON_PRIORITY`` days and another 24 hours have passed.
|
||||||
|
|
||||||
The priority may be an integer or a decimal fraction.
|
``GLUON_PRIORITY`` may be an integer or a decimal fraction.
|
||||||
|
|
||||||
|
Automated nightly builds
|
||||||
|
------------------------
|
||||||
|
|
||||||
A fully automated nightly build could use the following commands:
|
A fully automated nightly build could use the following commands:
|
||||||
|
|
||||||
@ -28,12 +33,13 @@ A fully automated nightly build could use the following commands:
|
|||||||
(cd site && git pull)
|
(cd site && git pull)
|
||||||
make update
|
make update
|
||||||
make clean
|
make clean
|
||||||
make -j5 GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental
|
NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
|
||||||
|
make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental
|
||||||
make manifest GLUON_BRANCH=experimental
|
make manifest GLUON_BRANCH=experimental
|
||||||
contrib/sign.sh $SECRETKEY images/sysupgrade/experimental.manifest
|
contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest
|
||||||
|
|
||||||
rm -rf /where/to/put/this/experimental
|
rm -rf /where/to/put/this/experimental
|
||||||
cp -r images /where/to/put/this/experimental
|
cp -r output/images /where/to/put/this/experimental
|
||||||
|
|
||||||
|
|
||||||
Infrastructure
|
Infrastructure
|
||||||
@ -59,7 +65,7 @@ The server must be available via IPv6.
|
|||||||
Command Line
|
Command Line
|
||||||
------------
|
------------
|
||||||
|
|
||||||
These commands can be used on a node.
|
These commands can be used on a node:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -71,4 +77,8 @@ These commands can be used on a node.
|
|||||||
# Force update check, even when the updater is disabled
|
# Force update check, even when the updater is disabled
|
||||||
autoupdater -f
|
autoupdater -f
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
# If fallback is true the updater will perform an update only if the timespan
|
||||||
|
# PRIORITY days (as defined in the manifest) and another 24h have passed
|
||||||
|
autoupdater --fallback
|
||||||
|
41
docs/features/dns-cache.rst
Normal file
41
docs/features/dns-cache.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
If both options are set the node will cache as much DNS records as set with
|
||||||
|
'cacheentries' in RAM. The 'servers' list will be used to resolve the received
|
||||||
|
DNS queries if the request cannot be answered from cache.
|
||||||
|
If these settings do not exist, the cache is not intialized 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.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
dns = {
|
||||||
|
cacheentries = 5000,
|
||||||
|
servers = { '2001:db8::1', },
|
||||||
|
},
|
||||||
|
|
||||||
|
next_node = {
|
||||||
|
name = 'nextnode',
|
||||||
|
ip6 = '2001:db8:8::1',
|
||||||
|
ip4 = '198.51.100.1',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
The cache will be initialized during startup.
|
||||||
|
Each cache entry will occupy about 90 bytes of RAM.
|
@ -1,18 +0,0 @@
|
|||||||
Mesh on WAN
|
|
||||||
===========
|
|
||||||
|
|
||||||
It's possible to enable the mesh on the WAN port like this::
|
|
||||||
|
|
||||||
uci set network.mesh_wan.auto=1
|
|
||||||
uci commit
|
|
||||||
|
|
||||||
It may also be disabled again by running::
|
|
||||||
|
|
||||||
uci set network.mesh_wan.auto=0
|
|
||||||
uci commit
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
|
|
||||||
The optional option ``mesh_on_wan`` may be set to ``true`` (``false`` is the
|
|
||||||
default) to enable meshing on the WAN port without further configuration.
|
|
@ -1,5 +1,5 @@
|
|||||||
Announcing Node Information
|
Node monitoring
|
||||||
===========================
|
===============
|
||||||
|
|
||||||
Gluon is capable of announcing information about each node to the mesh
|
Gluon is capable of announcing information about each node to the mesh
|
||||||
and to neighbouring nodes. This allows nodes to learn each others hostname,
|
and to neighbouring nodes. This allows nodes to learn each others hostname,
|
||||||
@ -8,7 +8,7 @@ IP addresses, location, software versions and various other information.
|
|||||||
Format of collected data
|
Format of collected data
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
Information to be announced is currently split into two categories:
|
Information to be announced is currently split into three categories:
|
||||||
|
|
||||||
nodeinfo
|
nodeinfo
|
||||||
In this category (mostly) static information is collected. If
|
In this category (mostly) static information is collected. If
|
||||||
@ -19,15 +19,19 @@ Information to be announced is currently split into two categories:
|
|||||||
This category holds fast changing data, like traffic counters, uptime,
|
This category holds fast changing data, like traffic counters, uptime,
|
||||||
system load or the selected gateway.
|
system load or the selected gateway.
|
||||||
|
|
||||||
Both categories will have a ``node_id`` key by default. It should be used to
|
neighbours
|
||||||
match data from *statistics* to *nodeinfo*.
|
`neighbours` contains information about all neighbouring nodes of all
|
||||||
|
interfaces. This data can be used to determine the network topology.
|
||||||
|
|
||||||
|
All categories will have a ``node_id`` key. It should be used to
|
||||||
|
relate data of different catagories.
|
||||||
|
|
||||||
Accessing Node Information
|
Accessing Node Information
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
There are two packages responsible for distribution of the information. For
|
There are two packages responsible for distribution of the information. For
|
||||||
one, information is distributed across the mesh using alfred_. Information
|
one, information is distributed across the mesh using alfred_. Information
|
||||||
between neighbouring nodes is exchanged using `gluon-announced`.
|
between neighbouring nodes is exchanged using `gluon-respondd`.
|
||||||
|
|
||||||
.. _alfred: http://www.open-mesh.org/projects/alfred
|
.. _alfred: http://www.open-mesh.org/projects/alfred
|
||||||
|
|
||||||
@ -41,10 +45,15 @@ retrieve the data you'll need both a local alfred daemon and alfred-json_
|
|||||||
installed. Please note that at least one alfred daemon is required to run as
|
installed. Please note that at least one alfred daemon is required to run as
|
||||||
`master`.
|
`master`.
|
||||||
|
|
||||||
.. _alfred-json: https://github.com/tcatm/alfred-json
|
.. _alfred-json: https://github.com/ffnord/alfred-json
|
||||||
|
|
||||||
`nodeinfo` is distributed as alfred datatype `158`, while `statistics` uses
|
The following datatypes are used:
|
||||||
`159`. Both are compressed using GZip (alfred-json can handle the decompression).
|
|
||||||
|
* `nodeinfo`: 158
|
||||||
|
* `statistics`: 159
|
||||||
|
* `neighbours`: 160
|
||||||
|
|
||||||
|
All data is compressed using GZip (alfred-json can handle the decompression).
|
||||||
|
|
||||||
In order to retrieve statistics data you could run:
|
In order to retrieve statistics data you could run:
|
||||||
|
|
||||||
@ -88,20 +97,28 @@ In order to retrieve statistics data you could run:
|
|||||||
|
|
||||||
You can find more information about alfred in its README_.
|
You can find more information about alfred in its README_.
|
||||||
|
|
||||||
.. _README: http://www.open-mesh.org/projects/alfred/repository/revisions/master/entry/README
|
.. _README: https://git.open-mesh.org/alfred.git/blob_plain/refs/heads/master:/README
|
||||||
|
|
||||||
gluon-announced
|
gluon-respondd
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
`gluon-announced` allows querying neighbouring nodes for their `nodeinfo`.
|
`gluon-respondd` allows querying neighbouring nodes for their information.
|
||||||
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
||||||
UDP port 1001 on the bare mesh interfaces.
|
UDP port 1001 on both the bare mesh interfaces and `br-client`. Unicast
|
||||||
|
requests are supported as well.
|
||||||
|
|
||||||
|
The supported requests are:
|
||||||
|
|
||||||
|
* ``nodeinfo``, ``statistics``, ``neighbours``: Returns the data of single category uncompressed.
|
||||||
|
* ``GET nodeinfo``, ...: Returns the data of one or multiple categories (separated by spaces)
|
||||||
|
compressed using the `deflate` algorithm (without a gzip header). The data may
|
||||||
|
be decompressed using zlib and many zlib bindings using -15 as the window size parameter.
|
||||||
|
|
||||||
gluon-neighbour-info
|
gluon-neighbour-info
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
A programm called `gluon-neighbour-info` has been developed to retrieve
|
The programm `gluon-neighbour-info` can be used to retrieve
|
||||||
information from neighbours.
|
information from other nodes.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -109,55 +126,13 @@ information from neighbours.
|
|||||||
-p 1001 -d ff02:0:0:0:0:0:2:1001 \
|
-p 1001 -d ff02:0:0:0:0:0:2:1001 \
|
||||||
-r nodeinfo
|
-r nodeinfo
|
||||||
|
|
||||||
On optional timeout may be specified, e.g. `-t 5` (default: 3 seconds).
|
An optional timeout may be specified, e.g. `-t 5` (default: 3 seconds). See
|
||||||
|
the usage information printed by ``gluon-neighbour-info -h`` for more information
|
||||||
|
about the supported arguments.
|
||||||
|
|
||||||
Adding a fact
|
Adding a data provider
|
||||||
-------------
|
----------------------
|
||||||
|
|
||||||
To add a fact just add a file to either ``/lib/gluon/announce/nodeinfo.d/`` or
|
To add a provider, you need to install a shared object into ``/lib/gluon/respondd``.
|
||||||
``/lib/gluon/announce/statistics.d/``.
|
For more information, refer to the `respondd README <https://github.com/freifunk-gluon/packages/blob/master/net/respondd/README.md>`_
|
||||||
|
and have a look the existing providers.
|
||||||
The file must contain a lua script and its name will become the key for the
|
|
||||||
resulting JSON object. A simple script adding a ``hostname`` field might look
|
|
||||||
like this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
return uci:get_first('system', 'system', 'hostname')
|
|
||||||
|
|
||||||
The directory structure will be converted to a JSON object, i.e. you may
|
|
||||||
create subdirectories. So, if the directories look like this
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.
|
|
||||||
├── hardware
|
|
||||||
│ └── model
|
|
||||||
├── hostname
|
|
||||||
├── network
|
|
||||||
│ └── mac
|
|
||||||
├── node_id
|
|
||||||
└── software
|
|
||||||
└── firmware
|
|
||||||
|
|
||||||
the resulting JSON would become:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# /lib/gluon/announce/announce.lua nodeinfo
|
|
||||||
{
|
|
||||||
"hardware" : {
|
|
||||||
"model" : "TP-Link TL-MR3420 v1"
|
|
||||||
},
|
|
||||||
"hostname" : "mr3420-test",
|
|
||||||
"network" : {
|
|
||||||
"mac" : "90:f6:52:82:06:02"
|
|
||||||
},
|
|
||||||
"node_id" : "90f652820602",
|
|
||||||
"software" : {
|
|
||||||
"firmware" : {
|
|
||||||
"base" : "gluon-v2014.2-32-ge831099",
|
|
||||||
"release" : "0.4.1+0-exp20140720"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,7 @@ Private WLAN
|
|||||||
It is possible to set up a private WLAN that bridges the WAN port and is seperated from the mesh network.
|
It is possible to set up a private WLAN that bridges the WAN port and is seperated from the mesh network.
|
||||||
Please note that you should not enable ``mesh_on_wan`` simultaneously.
|
Please note that you should not enable ``mesh_on_wan`` simultaneously.
|
||||||
|
|
||||||
The private WLAN can be enabled through the config mode if the package ``gluon-luci-private-wifi`` is installed.
|
The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
|
||||||
You may also enable a private WLAN using the command line::
|
You may also enable a private WLAN using the command line::
|
||||||
|
|
||||||
uci set wireless.wan_radio0=wifi-iface
|
uci set wireless.wan_radio0=wifi-iface
|
||||||
|
@ -11,18 +11,20 @@ For this the section ``roles`` in ``site.conf`` is needed::
|
|||||||
roles = {
|
roles = {
|
||||||
default = 'node',
|
default = 'node',
|
||||||
list = {
|
list = {
|
||||||
node = 'Normal Node',
|
'node',
|
||||||
test = 'Test Node',
|
'test',
|
||||||
backbone = 'Backbone Node',
|
'backbone',
|
||||||
service = 'Service Node',
|
'service',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
The strings to display in the web interface are configured per language in the
|
||||||
|
``i18n/en.po``, ``i18n/de.po``, etc. files of the site repository using message IDs like
|
||||||
|
``gluon-web-node-role:role:node`` and ``gluon-web-node-role:role:backbone``.
|
||||||
|
|
||||||
The value of ``default`` is the role every node will initially own. This value should be part of ``list`` as well.
|
The value of ``default`` is the role every node will initially own. This value should be part of ``list`` as well.
|
||||||
If you want node owners to change the defined roles via config-mode you can add the package
|
If you want node owners to change the defined roles via config-mode you can add the package
|
||||||
``gluon-luci-node-role`` to your ``site.mk``. Then, you can select one of the defined roles from a dropdown list
|
``gluon-web-node-role`` to your ``site.mk``.
|
||||||
where the right-handed value is the one which is displayed and the left-handed key the one which is configured into
|
|
||||||
the system.
|
|
||||||
|
|
||||||
The role is saved in ``gluon-node-info.system.role``. To change the role using command line do::
|
The role is saved in ``gluon-node-info.system.role``. To change the role using command line do::
|
||||||
|
|
||||||
|
65
docs/features/wired-mesh.rst
Normal file
65
docs/features/wired-mesh.rst
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
Wired mesh (Mesh-on-WAN/LAN)
|
||||||
|
============================
|
||||||
|
|
||||||
|
In addition to meshing over WLAN and VPN, it is also possible to
|
||||||
|
configure wired meshing over the LAN or WAN ports. This allows
|
||||||
|
nodes to be connected directly or over wireless bridges.
|
||||||
|
|
||||||
|
Mesh-on-WAN can be enabled in addition to the mesh VPN, so multiple nodes
|
||||||
|
in the same local network that is used as VPN uplink can also mesh directly.
|
||||||
|
Enabling Mesh-on-WAN should be avoided if the local network is also bridged with
|
||||||
|
a WLAN access point, as meshing over batman-adv causes large amounts of
|
||||||
|
multicast traffic, which will take up a lot of airtime.
|
||||||
|
|
||||||
|
Enabling Mesh-on-LAN will replace the normal "client network" function
|
||||||
|
of the LAN ports, as client network ports may never be connected (so care must be taken to always
|
||||||
|
enable Mesh-on-LAN before connecting two nodes' LAN ports).
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by
|
||||||
|
adding ``mesh_on_wan = true`` and ``mesh_on_lan = true`` to ``site.conf``.
|
||||||
|
|
||||||
|
Commandline configuration
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Mesh-on-WAN
|
||||||
|
...........
|
||||||
|
|
||||||
|
It's possible to enable Mesh-on-WAN like this::
|
||||||
|
|
||||||
|
uci set network.mesh_wan.auto=1
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
It may be disabled by running::
|
||||||
|
|
||||||
|
uci set network.mesh_wan.auto=0
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
|
||||||
|
Mesh-on-LAN
|
||||||
|
...........
|
||||||
|
|
||||||
|
Configuring Mesh-on-LAN is a bit more complicated::
|
||||||
|
|
||||||
|
uci set network.mesh_lan.auto=1
|
||||||
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
|
uci del_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
It may be disabled by running::
|
||||||
|
|
||||||
|
uci set network.mesh_lan.auto=0
|
||||||
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
|
uci add_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
Please note that this configuration has changed in Gluon v2016.1. Using
|
||||||
|
the old commands on v2016.1 and later will break the corresponding options
|
||||||
|
in the *Advanced settings*.
|
34
docs/features/wlan-configuration.rst
Normal file
34
docs/features/wlan-configuration.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
WLAN configuration
|
||||||
|
==================
|
||||||
|
|
||||||
|
Gluon allows to configure 2.4GHz and 5GHz radios independently. The configuration
|
||||||
|
may include any or all of the three networks "client" (AP mode), "mesh" (802.11s
|
||||||
|
mode) and "ibss" (adhoc mode), which can be used simultaneously (using "mesh" and
|
||||||
|
"ibss" at same time should be avoided though as weaker hardware usually can't handle the additional
|
||||||
|
load). See :doc:`../user/site` for details on the configuration.
|
||||||
|
|
||||||
|
Upgrade behaviour
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
For each of these networks, the site configuration may define a `disabled` flag (by
|
||||||
|
default, all configured networks are enabled). This flag is merely a default setting,
|
||||||
|
on upgrades the existing setting is always retained (as this setting may have been changed
|
||||||
|
by the user). This means that it is not possible to enable or disable an existing network
|
||||||
|
configurations during upgrades.
|
||||||
|
|
||||||
|
For the "mesh" and "ibss" networks, the default setting only has an effect if none
|
||||||
|
of the two has existed before. If a new configuration has been added for "mesh" or "ibss",
|
||||||
|
while the other of the two has already existed before, the enabled/disabled state of the
|
||||||
|
existing configuration will also be set for the new configuration.
|
||||||
|
|
||||||
|
This allows upgrades to change from IBSS to 11s and vice-versa while retaining the
|
||||||
|
"wireless meshing is enabled/disabled" property configured by the user regardless
|
||||||
|
of the used mode.
|
||||||
|
|
||||||
|
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
||||||
|
configured in the site.conf. If you need to preserve a user defined wifi channel during upgrades
|
||||||
|
you can configure this via the uci section ``gluon-core.wireless``::
|
||||||
|
|
||||||
|
uci set gluon-core.@wireless[0].preserve_channels='1'
|
||||||
|
|
||||||
|
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
|
233
docs/index.rst
233
docs/index.rst
@ -5,10 +5,8 @@ Gluon is a modular framework for creating OpenWrt-based firmwares for wireless m
|
|||||||
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmwares.
|
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmwares.
|
||||||
|
|
||||||
|
|
||||||
User Documentation
|
|
||||||
------------------
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
:caption: User Documentation
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
user/getting_started
|
user/getting_started
|
||||||
@ -16,39 +14,73 @@ User Documentation
|
|||||||
user/x86
|
user/x86
|
||||||
user/faq
|
user/faq
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
:caption: Features
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
features/configmode
|
features/configmode
|
||||||
features/autoupdater
|
features/autoupdater
|
||||||
|
features/wlan-configuration
|
||||||
features/private-wlan
|
features/private-wlan
|
||||||
features/mesh-on-wan
|
features/wired-mesh
|
||||||
features/announce
|
features/dns-cache
|
||||||
|
features/monitoring
|
||||||
features/authorized-keys
|
features/authorized-keys
|
||||||
features/roles
|
features/roles
|
||||||
|
|
||||||
Developer Documentation
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
:caption: Developer Documentation
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
dev/basics
|
dev/basics
|
||||||
dev/hardware
|
dev/hardware
|
||||||
dev/upgrade
|
dev/upgrade
|
||||||
dev/configmode
|
|
||||||
dev/wan
|
dev/wan
|
||||||
dev/i18n
|
dev/mac_addresses
|
||||||
|
|
||||||
Releases
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
:caption: gluon-web Reference
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
dev/web/controller
|
||||||
|
dev/web/model
|
||||||
|
dev/web/view
|
||||||
|
dev/web/i18n
|
||||||
|
dev/web/config-mode
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Packages
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
package/gluon-client-bridge
|
||||||
|
package/gluon-config-mode-contact-info
|
||||||
|
package/gluon-config-mode-geo-location
|
||||||
|
package/gluon-ebtables-filter-multicast
|
||||||
|
package/gluon-ebtables-filter-ra-dhcp
|
||||||
|
package/gluon-ebtables-segment-mld
|
||||||
|
package/gluon-ebtables-source-filter
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Releases
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
releases/v2017.1
|
||||||
|
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/v2015.1
|
||||||
releases/v2014.4
|
releases/v2014.4
|
||||||
releases/v2014.3.1
|
releases/v2014.3.1
|
||||||
@ -61,6 +93,19 @@ Supported Devices & Architectures
|
|||||||
ar71xx-generic
|
ar71xx-generic
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* 8devices
|
||||||
|
|
||||||
|
- Carambola 2
|
||||||
|
|
||||||
|
* ALFA Network
|
||||||
|
|
||||||
|
- AP121
|
||||||
|
- AP121U
|
||||||
|
- Hornet-UB
|
||||||
|
- Tube2H
|
||||||
|
- N2
|
||||||
|
- N5
|
||||||
|
|
||||||
* Allnet
|
* Allnet
|
||||||
|
|
||||||
- ALL0315N
|
- ALL0315N
|
||||||
@ -68,17 +113,21 @@ ar71xx-generic
|
|||||||
* Buffalo
|
* Buffalo
|
||||||
|
|
||||||
- WZR-HP-AG300H / WZR-600DHP
|
- WZR-HP-AG300H / WZR-600DHP
|
||||||
|
- WZR-HP-G300NH
|
||||||
|
- WZR-HP-G300NH2
|
||||||
- WZR-HP-G450H
|
- WZR-HP-G450H
|
||||||
|
|
||||||
* D-Link
|
* D-Link
|
||||||
|
|
||||||
- DIR-825 (B1)
|
- DIR-505 (A1, A2)
|
||||||
- DIR-615 (C1)
|
- DIR-615 (C1)
|
||||||
|
- DIR-825 (B1)
|
||||||
|
|
||||||
* GL-Inet
|
* GL Innovations
|
||||||
|
|
||||||
- 6408A (v1)
|
- GL-AR150
|
||||||
- 6416A (v1)
|
- GL-iNet 6408A (v1)
|
||||||
|
- GL-iNet 6416A (v1)
|
||||||
|
|
||||||
* Linksys
|
* Linksys
|
||||||
|
|
||||||
@ -90,47 +139,72 @@ ar71xx-generic
|
|||||||
- WNDR3800
|
- WNDR3800
|
||||||
- WNDRMAC (v2)
|
- WNDRMAC (v2)
|
||||||
|
|
||||||
|
* Onion
|
||||||
|
|
||||||
|
- Omega
|
||||||
|
|
||||||
|
* OpenMesh
|
||||||
|
|
||||||
|
- MR600 (v1, v2)
|
||||||
|
- MR900 (v1, v2)
|
||||||
|
- MR1750 (v1, v2) [#ath10k]_
|
||||||
|
- OM2P (v1, v2)
|
||||||
|
- OM2P-HS (v1, v2, v3)
|
||||||
|
- OM2P-LC
|
||||||
|
- OM5P
|
||||||
|
- OM5P-AN
|
||||||
|
- OM5P-AC (v1, v2) [#ath10k]_
|
||||||
|
|
||||||
* TP-Link
|
* TP-Link
|
||||||
|
|
||||||
- CPE210 (v1)
|
- Archer C5 (v1) [#ath10k]_
|
||||||
- CPE220 (v1)
|
- Archer C7 (v2) [#ath10k]_
|
||||||
- CPE510 (v1)
|
- CPE210 (v1.0, v1.1)
|
||||||
- CPE520 (v1)
|
- CPE220 (v1.1)
|
||||||
- TL-MR3020 (v1)
|
- CPE510 (v1.0, v1.1)
|
||||||
- TL-MR3040 (v1, v2)
|
- CPE520 (v1.1)
|
||||||
- TL-MR3220 (v1, v2)
|
- RE450
|
||||||
- TL-MR3420 (v1, v2)
|
|
||||||
- TL-WA701N/ND (v1)
|
|
||||||
- TL-WA750RE (v1)
|
|
||||||
- TL-WA801N/ND (v2)
|
|
||||||
- TL-WA850RE (v1)
|
|
||||||
- TL-WA860RE (v1)
|
|
||||||
- TL-WA901N/ND (v2, v3)
|
|
||||||
- TL-WDR3500 (v1)
|
- TL-WDR3500 (v1)
|
||||||
- TL-WDR3600 (v1)
|
- TL-WDR3600 (v1)
|
||||||
- TL-WDR4300 (v1)
|
- TL-WDR4300 (v1)
|
||||||
- TL-WR1043N/ND (v1, v2)
|
- TL-WR710N (v1, v2.1)
|
||||||
- TL-WR703N (v1)
|
- TL-WR842N/ND (v1, v2, v3)
|
||||||
- TL-WR710N (v1)
|
- TL-WR1043N/ND (v1, v2, v3, v4)
|
||||||
- TL-WR740N (v1, v3, v4)
|
|
||||||
- TL-WR741N/ND (v1, v2, v4)
|
|
||||||
- TL-WR743N/ND (v1, v2)
|
|
||||||
- TL-WR841N/ND (v3, v5, v7, v8, v9)
|
|
||||||
- TL-WR842N/ND (v1, v2)
|
|
||||||
- TL-WR941N/ND (v2, v3, v4, v5)
|
|
||||||
- TL-WR2543N/ND (v1)
|
- TL-WR2543N/ND (v1)
|
||||||
|
- WBS210 (v1.20)
|
||||||
|
- WBS510 (v1.20)
|
||||||
|
|
||||||
* Ubiquiti
|
* Ubiquiti
|
||||||
|
|
||||||
- Bullet M2
|
- Air Gateway
|
||||||
- Nanostation M2
|
- Air Gateway LR
|
||||||
- Nanostation M XW
|
- Air Gateway PRO
|
||||||
- Loco M XW
|
- Air Router
|
||||||
- Picostation M2
|
- Bullet M2/M5
|
||||||
- Rocket M2
|
- Loco M2/M5
|
||||||
|
- Loco M2/M5 XW
|
||||||
|
- Nanostation M2/M5
|
||||||
|
- Nanostation M2/M5 XW
|
||||||
|
- Picostation M2/M5
|
||||||
|
- Rocket M2/M5
|
||||||
|
- Rocket M2/M5 Ti
|
||||||
|
- Rocket M2/M5 XW
|
||||||
- UniFi AP
|
- UniFi AP
|
||||||
|
- UniFi AP AC Lite [#ath10k]_
|
||||||
|
- UniFi AP AC Pro [#ath10k]_
|
||||||
|
- UniFi AP LR
|
||||||
- UniFi AP Pro
|
- UniFi AP Pro
|
||||||
- UniFi AP Outdoor
|
- UniFi AP Outdoor
|
||||||
|
- UniFi AP Outdoor+
|
||||||
|
|
||||||
|
* Western Digital
|
||||||
|
|
||||||
|
- My Net N600
|
||||||
|
- My Net N750
|
||||||
|
|
||||||
|
.. [#ath10k]
|
||||||
|
Device uses the ath10k WLAN driver; no image is built unless GLUON_ATH10K_MESH
|
||||||
|
is set as described in :ref:`getting-started-make-variables`
|
||||||
|
|
||||||
ar71xx-nand
|
ar71xx-nand
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
@ -140,6 +214,50 @@ ar71xx-nand
|
|||||||
- WNDR3700 (v4)
|
- WNDR3700 (v4)
|
||||||
- WNDR4300 (v1)
|
- WNDR4300 (v1)
|
||||||
|
|
||||||
|
ar71xx-tiny
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-615 (C1)
|
||||||
|
|
||||||
|
* 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)
|
||||||
|
- TL-WA7210N (v2)
|
||||||
|
- TL-WA7510N (v1)
|
||||||
|
- TL-WR703N (v1)
|
||||||
|
- TL-WR710N (v1, v2, v2.1)
|
||||||
|
- TL-WR740N (v1, v3, v4, v5)
|
||||||
|
- TL-WR741N/ND (v1, v2, v4, v5)
|
||||||
|
- TL-WR743N/ND (v1, v2)
|
||||||
|
- TL-WR841N/ND (v3, v5, v7, v8, v9, v10, v11, v12)
|
||||||
|
- TL-WR843N/ND (v1)
|
||||||
|
- TL-WR940N (v1, v2, v3, v4)
|
||||||
|
- TL-WR941ND (v2, v3, v4, v5, v6)
|
||||||
|
|
||||||
|
brcm2708-bcm2708
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 1
|
||||||
|
|
||||||
|
brcm2708-bcm2709
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 2
|
||||||
|
|
||||||
mpc85xx-generic
|
mpc85xx-generic
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -149,15 +267,26 @@ mpc85xx-generic
|
|||||||
|
|
||||||
x86-generic
|
x86-generic
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
|
|
||||||
* x86-generic
|
* x86-generic
|
||||||
* x86-virtualbox
|
* x86-virtualbox
|
||||||
* x86-vmware
|
* x86-vmware
|
||||||
|
|
||||||
See also: :doc:`user/x86`
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
x86-kvm_guest
|
x86-geode
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^
|
||||||
* x86-kvm
|
|
||||||
|
* x86-geode
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
|
x86-64
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
* x86-64-generic
|
||||||
|
* x86-64-virtualbox
|
||||||
|
* x86-64-vmware
|
||||||
|
|
||||||
See also: :doc:`user/x86`
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
|
11
docs/package/gluon-client-bridge.rst
Normal file
11
docs/package/gluon-client-bridge.rst
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
gluon-client-bridge
|
||||||
|
===================
|
||||||
|
|
||||||
|
This package provides a bridge (*br-client*) for connecting clients. It will
|
||||||
|
also setup a wireless interface, provided it is configured in *site.conf*.
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
---------
|
||||||
|
|
||||||
|
wifi24.ap.ssid / wifi5.ap.ssid
|
||||||
|
SSID for the client network
|
21
docs/package/gluon-config-mode-contact-info.rst
Normal file
21
docs/package/gluon-config-mode-contact-info.rst
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
gluon-config-mode-contact-info
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This package allows the user to provide contact information within config mode to be
|
||||||
|
distributed in the mesh. You can define whether the owner contact field is
|
||||||
|
obligatory or not in your site.conf.
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
---------
|
||||||
|
|
||||||
|
config_mode.owner.obligatory \: optional (defaults to false)
|
||||||
|
If ``obligatory`` is set to ``true``, the contact info field must be supplied
|
||||||
|
and may not be left empty.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
config_mode = {
|
||||||
|
owner = {
|
||||||
|
obligatory = true
|
||||||
|
}
|
||||||
|
}
|
14
docs/package/gluon-config-mode-geo-location.rst
Normal file
14
docs/package/gluon-config-mode-geo-location.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
gluon-config-mode-geo-location
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This package enables the user to set latitude, longitude and altitude of their
|
||||||
|
node within config mode. As the usage of the altitude is not well defined the
|
||||||
|
corresponding field can be disabled.
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
---------
|
||||||
|
|
||||||
|
config_mode.geo_location.show_altitude : optional
|
||||||
|
- ``true`` enables the altitude field
|
||||||
|
- ``false`` disables the altitude field if altitude has not yet been set
|
||||||
|
- defaults to ``true``
|
30
docs/package/gluon-ebtables-filter-multicast.rst
Normal file
30
docs/package/gluon-ebtables-filter-multicast.rst
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
gluon-ebtables-filter-multicast
|
||||||
|
===============================
|
||||||
|
|
||||||
|
The *gluon-ebtables-filter-multicast* package filters out various kinds of
|
||||||
|
non-essential multicast traffic, as this traffic often constitutes a
|
||||||
|
disproportionate burden on the mesh network. Unfortunately, this breaks many useful services
|
||||||
|
(Avahi, Bonjour chat, ...), but this seems unavoidable, as the current Avahi implementation is
|
||||||
|
optimized for small local networks and causes too much traffic in large mesh networks.
|
||||||
|
|
||||||
|
The multicast packets are filtered between the nodes' client bridge (*br-client*) and mesh
|
||||||
|
interface (*bat0*) on output.
|
||||||
|
|
||||||
|
|
||||||
|
The following packet types are considered essential and aren't filtered:
|
||||||
|
|
||||||
|
* ARP (except requests for/replies from 0.0.0.0)
|
||||||
|
* DHCP, DHCPv6
|
||||||
|
* ICMPv6 (except Echo Requests (ping) and Node Information Queries (RFC4620)
|
||||||
|
* IGMP
|
||||||
|
|
||||||
|
In addition, the following packet types are allowed to allow experimentation with
|
||||||
|
layer 3 routing protocols.
|
||||||
|
|
||||||
|
* Babel
|
||||||
|
* OSPF
|
||||||
|
* RIPng
|
||||||
|
|
||||||
|
The following packet types are also allowed:
|
||||||
|
|
||||||
|
* BitTorrent Local Peer Discovery (it seems better to have local peers for BitTorrent than sending everything through the internet)
|
13
docs/package/gluon-ebtables-filter-ra-dhcp.rst
Normal file
13
docs/package/gluon-ebtables-filter-ra-dhcp.rst
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
gluon-ebtables-filter-ra-dhcp
|
||||||
|
=============================
|
||||||
|
|
||||||
|
The *gluon-ebtables-filter-ra-dhcp* package tries to prevent common
|
||||||
|
misconfigurations (i.e. connecting the client interface of a Gluon
|
||||||
|
node to a private network) from causing issues for either of the
|
||||||
|
networks.
|
||||||
|
|
||||||
|
The rules are the following:
|
||||||
|
|
||||||
|
* DHCP requests, DHCPv6 requests and Router Solicitations may only be sent from clients to the mesh, but aren't forwarded
|
||||||
|
from the mesh to clients
|
||||||
|
* DHCP replies, DHCPv6 replies and Router Advertisements from clients aren't forwarded to the mesh
|
16
docs/package/gluon-ebtables-segment-mld.rst
Normal file
16
docs/package/gluon-ebtables-segment-mld.rst
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
gluon-ebtables-segment-mld
|
||||||
|
==========================
|
||||||
|
|
||||||
|
These filters drop IGMP/MLD packets before they enter the mesh and
|
||||||
|
filter any IGMP/MLD packets coming from the mesh.
|
||||||
|
|
||||||
|
IGMP/MLD have the concept of a local, elected Querier. For more
|
||||||
|
decentralization and increased robustness, the idea of this package is
|
||||||
|
to split the IGMP/MLD domain a querier is responsible for, allowing to
|
||||||
|
have a querier per node. The split IGMP/MLD domain will also reduce
|
||||||
|
overhead for this packet type, increasing scalability.
|
||||||
|
|
||||||
|
Beware of the consequences of using this package though: You might need
|
||||||
|
to explicitly, manually mark ports on snooping switches leading towards
|
||||||
|
your mesh node as multicast router ports for now (Multicast Router
|
||||||
|
Discovery, MRD, not implemented yet).
|
30
docs/package/gluon-ebtables-source-filter.rst
Normal file
30
docs/package/gluon-ebtables-source-filter.rst
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
gluon-ebtables-source-filter
|
||||||
|
============================
|
||||||
|
|
||||||
|
The *gluon-ebtables-source-filter* package adds an additional layer-2 filter
|
||||||
|
ruleset to prevent unreasonable traffic entering the network via the nodes.
|
||||||
|
Unreasonable means traffic entering the mesh via a node which source IP does
|
||||||
|
not belong to the configured IP space.
|
||||||
|
|
||||||
|
One may first check if there is a certain proportion of unreasonable traffic,
|
||||||
|
before adding this package to the firmware image. Additional one should not
|
||||||
|
use this package if some kind of gateway or upstream network is provided by
|
||||||
|
a device connected to the client port.
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
---------
|
||||||
|
|
||||||
|
prefix4 : optional
|
||||||
|
- IPv4 subnet
|
||||||
|
|
||||||
|
prefix6 :
|
||||||
|
- IPv6 subnet
|
||||||
|
|
||||||
|
extra_prefixes6 : optional
|
||||||
|
- list of additional IPv6 subnets
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
prefix4 = '198.51.100.0/21',
|
||||||
|
prefix6 = '2001:db8:8::/64',
|
||||||
|
extra_prefixes6 = { '2001:db8:9::/64', '2001:db8:100::/60' },
|
27
docs/releases/v2015.1.1.rst
Normal file
27
docs/releases/v2015.1.1.rst
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Gluon 2015.1.1
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WA830RE (v1)
|
||||||
|
|
||||||
|
New features
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
The `x86-generic` and `x86-kvm_guest` images now support two ethernet interfaces by default. If two interfaces exist during
|
||||||
|
the first boot, `eth0` will be used as LAN and `eth1` as WAN.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix German "Expert Mode" label (was "Export Mode")
|
||||||
|
* Fix download of OpenSSL during build (because of broken OpenSSL download servers...)
|
||||||
|
* Fix ABI break causing kernel panics when trying to use network-related modules from the official OpenWrt repository (like `kmod-pppoe`)
|
||||||
|
* Fix race conditions breaking parallel build occasionally
|
||||||
|
* A broken network configuration would be generated when an older Gluon version was updated to 2015.1 with
|
||||||
|
``mesh_on_lan`` enabled in `site.conf`
|
||||||
|
* Minor announced/alfred JSON format fixes (don't output empty lists where empty objects would be expected)
|
41
docs/releases/v2015.1.2.rst
Normal file
41
docs/releases/v2015.1.2.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Gluon 2015.1.2
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WA701N/ND (v2)
|
||||||
|
- TL-WA801N/ND (v1)
|
||||||
|
- TL-WA830RE (v2)
|
||||||
|
- TL-WR740N / TL-WR741ND (v5)
|
||||||
|
|
||||||
|
New features
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Ubiquiti Loco M, Picostation M and Rocket M now get their own images (which are just copies of the Bullet M image)
|
||||||
|
so it's more obvious for users which image to use
|
||||||
|
* The x86-generic images now contain the e1000e ethernet driver by default
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix download of OpenSSL during build because of broken OpenSSL download servers (again...)
|
||||||
|
* Fix another ABI incompatiblity with the upstream kernel modules which prevented loading some filesystem-related modules
|
||||||
|
* Fix potential MAC address conflicts on x86 target when using mesh-on-wan/lan
|
||||||
|
* Fix signal strength indicators on TP-LINK CPE210/510
|
||||||
|
* Fix the model name string on some NETGEAR WNDR3700v2
|
||||||
|
* Fix 5GHz WLAN switching channels and losing connectivity when other WLANs using the same channel are detected (including other Gluon nodes...); see https://github.com/freifunk-gluon/gluon/issues/386
|
||||||
|
* Fix DNS resolution for mesh VPN on IPv6-only WAN; see https://github.com/freifunk-gluon/gluon/issues/397
|
||||||
|
* gluon-mesh-batman-adv-15: update batman-adv to 2015.0 with additional bugfixes (fixes various minor bugs)
|
||||||
|
* gluon-mesh-batman-adv-15: fix forwarding of fragmented frames over multiple links with different MTUs
|
||||||
|
|
||||||
|
batman-adv compat 15 doesn't re-fragment frames that are fragmented already. In particular,
|
||||||
|
this breaks transmission of large packets which are first fragmented for mesh-on-lan/wan and are then sent
|
||||||
|
over the mesh VPN, which has an even smaller MTU. Work around this limitation by decreasing the maximum fragment
|
||||||
|
size to 1280, so they can always be forwarded as long there's no link with a MTU smaller than 1280.
|
||||||
|
|
||||||
|
See https://github.com/freifunk-gluon/gluon/issues/435
|
64
docs/releases/v2016.1.1.rst
Normal file
64
docs/releases/v2016.1.1.rst
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
Gluon 2016.1.1
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Onion Omega
|
||||||
|
* TP-Link TL-MR13U v1
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
Build
|
||||||
|
^^^^^
|
||||||
|
|
||||||
|
Don't overwrite the opkg repository key on each build.
|
||||||
|
|
||||||
|
AirOS 5.6.x compatiblity
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Downgrading to AirOS 5.5.x before flashing Gluon on Airmax M XM/XW devices
|
||||||
|
(NanoStation, Bullet, ...) is not necessary anymore.
|
||||||
|
|
||||||
|
Status page
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Fix purging of disappered neighbours from the list
|
||||||
|
* Don't clear the signal graphs when scrolling in mobile browsers
|
||||||
|
* Improve browser compability (don't assume the Internationalization API is available,
|
||||||
|
fixes the display of numbers in Firefox for Android)
|
||||||
|
|
||||||
|
Config mode
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Strip trailing whitespace from number input fields (LuCI's validator doesn't catch this)
|
||||||
|
* Don't allow negative bandwidth limits
|
||||||
|
|
||||||
|
Failsafe mode
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Fix entering the failsafe mode on the TL-WDR4900.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||||
|
|
||||||
|
* Nondeterministic production of broken images for some (very old) hardware (`#669 <https://github.com/freifunk-gluon/gluon/issues/669>`_)
|
||||||
|
|
||||||
|
At the moment it seems like only the TL-WR841N v5 is affected.
|
29
docs/releases/v2016.1.2.rst
Normal file
29
docs/releases/v2016.1.2.rst
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Gluon 2016.1.2
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The *x86-generic* images now contain the ATIIXP PATA driver, adding support for
|
||||||
|
FUTRO Thin Clients.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
A nondeterministic boot hang (`#669 <https://github.com/freifunk-gluon/gluon/issues/669>`_) has been fixed.
|
||||||
|
The TL-WR841N v5 seems to be affected in particular, but the kernel bug is not hardware-specific per se.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
43
docs/releases/v2016.1.3.rst
Normal file
43
docs/releases/v2016.1.3.rst
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Gluon 2016.1.3
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* ALFA Hornet UB / AP121 / AP121U
|
||||||
|
* TP-Link TL-WA7510N
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* The nondeterministic boot hang (`#669 <https://github.com/freifunk-gluon/gluon/issues/669>`_) that was thought to
|
||||||
|
be fixed in Gluon v2016.1.2 has resurfaced on other hardware. We believe it is now fixed properly.
|
||||||
|
* Sysupgrades on the Xen DomU have been fixed.
|
||||||
|
* Gluon can now be built on systems that use LibreSSL instead of OpenSSL.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||||
|
|
||||||
|
* Unwritable flash on some Ubiquiti PicoStations (`#687 <https://github.com/freifunk-gluon/gluon/issues/687>`_)
|
||||||
|
|
||||||
|
Gluon v2016.1.1 added support for Ubiquiti AirMAX devices with AirOS 5.6.x without downgrading AirOS first before
|
||||||
|
flashing Gluon. It was discovered that on Ubiquiti PicoStations, this downgrade is still necessary, as the
|
||||||
|
flash is not correctly unlocked, leaving the device unable to leave Config Mode and making regular sysupgrades
|
||||||
|
impossible.
|
||||||
|
|
||||||
|
TFTP recovery can be used in this state to flash a new firmware.
|
46
docs/releases/v2016.1.4.rst
Normal file
46
docs/releases/v2016.1.4.rst
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Gluon 2016.1.4
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* 8devices Carambola 2
|
||||||
|
* Meraki MR12/MR62/MR16/MR66
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Major update of all WLAN drivers
|
||||||
|
|
||||||
|
We've taken the unusual step of updating the WLAN drivers ("wireless-backports") to a much newer version, as
|
||||||
|
it was reported that the new version fixes unstable WLAN seen in many setups
|
||||||
|
* Build fix: a race condition causing parallel builds to fail has been fixed
|
||||||
|
* Build fix: the Gluon tree could get into a state in which all commands fail with "Too many levels of symbolic links"
|
||||||
|
* Build fix: allow building Gluon on systems with certain versions of *dash* as */bin/sh*
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||||
|
|
||||||
|
* Unwritable flash on some Ubiquiti PicoStations (`#687 <https://github.com/freifunk-gluon/gluon/issues/687>`_)
|
||||||
|
|
||||||
|
Gluon v2016.1.1 added support for Ubiquiti AirMAX devices with AirOS 5.6.x without downgrading AirOS first before
|
||||||
|
flashing Gluon. It was discovered that on Ubiquiti PicoStations, this downgrade is still necessary, as the
|
||||||
|
flash is not correctly unlocked, leaving the device unable to leave Config Mode and making regular sysupgrades
|
||||||
|
impossible.
|
||||||
|
|
||||||
|
TFTP recovery can be used in this state to flash a new firmware.
|
66
docs/releases/v2016.1.5.rst
Normal file
66
docs/releases/v2016.1.5.rst
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
Gluon 2016.1.5
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* OpenMesh
|
||||||
|
|
||||||
|
- MR600 (v1, v2)
|
||||||
|
- MR900 (v1, v2)
|
||||||
|
- OM2P (v1, v2)
|
||||||
|
- OM2P-HS (v1, v2)
|
||||||
|
- OM2P-LC
|
||||||
|
- OM5P
|
||||||
|
- OM5P-AN
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- Rocket M XW
|
||||||
|
|
||||||
|
* TP-LINK
|
||||||
|
|
||||||
|
- TL-WR841N/ND v11
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* build: fix race condition caused by using certain make targets (like *clean*, *images* or *package/\**)
|
||||||
|
with parallel build options without doing a full build before
|
||||||
|
* build: fix package dependency issue causing "recursive dependency" warning
|
||||||
|
|
||||||
|
This dependency issue could lead to broken configurations and reportedly caused failed builds in some cases
|
||||||
|
when additional (site-specific) packages were used.
|
||||||
|
* build: Gluon will now build correctly with GCC 6 as host compiler
|
||||||
|
* Fix configuration of batman-adv when VLANs are used on top of IBSS interfaces (regression due to netifd update in :doc:`v2016.1.4`)
|
||||||
|
* Add back missing ath10k firmware (regression due to mac80211 update in :doc:`v2016.1.4`)
|
||||||
|
* Gluon can now be used on all supported Ubiquiti AirMAX devices without downgrading to AirOS 5.5.x before
|
||||||
|
|
||||||
|
:doc:`v2016.1.1` added support for most Ubiquiti AirMAX devices with AirOS 5.6.x without downgrading AirOS,
|
||||||
|
but left some devices (at least some PicoStations and Bullets) with unwritable flash. This issue has been
|
||||||
|
resolved (`#687 <https://github.com/freifunk-gluon/gluon/issues/687>`_).
|
||||||
|
* Add upgrade script to automatically remove whitespace from configured geolocation
|
||||||
|
|
||||||
|
The new respondd implementation included in :doc:`v2016.1` is stricter about the number format than the
|
||||||
|
old one and doesn't accept trailing whitespace (so one or both coordinates are missing from the output).
|
||||||
|
|
||||||
|
The Config Mode has been fixed to strip whitespace from numeric fields in new configurations since :doc:`v2016.1.1`.
|
||||||
|
This still left old configurations, which are now fixed by this script.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
55
docs/releases/v2016.1.6.rst
Normal file
55
docs/releases/v2016.1.6.rst
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Gluon 2016.1.6
|
||||||
|
==============
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* build: fix nodejs host build on Debian Wheezy (`#776 <https://github.com/freifunk-gluon/gluon/issues/776>`_)
|
||||||
|
* build: fix parallel builds with Make 4.2+
|
||||||
|
|
||||||
|
Trying to use ``-j N`` with Make 4.2 would spawn an unlimited number of processes,
|
||||||
|
eventually leading to memory exhaustion.
|
||||||
|
|
||||||
|
* build: fix occasional build failure in libpcap package
|
||||||
|
* build: don't require hexdump for x86 builds (`#811 <https://github.com/freifunk-gluon/gluon/issues/811>`_)
|
||||||
|
|
||||||
|
Trying to build Gluon for x86 on systems without hexdump would silently generate
|
||||||
|
broken images.
|
||||||
|
|
||||||
|
* Add support for DNS servers given by their link-local IPv6 address in Router Advertisements
|
||||||
|
(`#854 <https://github.com/freifunk-gluon/gluon/issues/854>`_)
|
||||||
|
|
||||||
|
* ar71xx-generic: correctly setup LNA GPIOs on CPE210/510 (`#796 <https://github.com/freifunk-gluon/gluon/issues/796>`_)
|
||||||
|
|
||||||
|
Improves the reception by about 20dB.
|
||||||
|
|
||||||
|
* ar71xx-generic: switch default WAN/LAN assignment on Ubiquiti UAP Pro
|
||||||
|
(`#764 <https://github.com/freifunk-gluon/gluon/issues/764>`_)
|
||||||
|
|
||||||
|
Switch to the usual "PoE is WAN/setup mode, secondary is LAN" scheme. This only affects
|
||||||
|
new installations; the assignment won't be changed on updates unless the configuration is
|
||||||
|
reset.
|
||||||
|
|
||||||
|
* ar71xx-generic: fix ath10k memory leak (`#690 <https://github.com/freifunk-gluon/gluon/issues/690>`_)
|
||||||
|
* ar71xx-generic: add support for new TP-Link region codes
|
||||||
|
(`#860 <https://github.com/freifunk-gluon/gluon/issues/860>`_)
|
||||||
|
|
||||||
|
TP-Link has started providing US- and EU-specific firmwares for the Archer C7 v2. To generate
|
||||||
|
Gluon images installable from these new firmwares, the ``GLUON_REGION`` variable must be set
|
||||||
|
to ``eu`` or ``us`` in ``site.mk`` or on the ``make`` command line (the images will still be
|
||||||
|
installable from all old firmwares without region codes).
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
276
docs/releases/v2016.1.rst
Normal file
276
docs/releases/v2016.1.rst
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
Gluon 2016.1
|
||||||
|
============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Buffalo
|
||||||
|
|
||||||
|
- WZR-HP-G300NH
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-505 (A1)
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- CPE210/220/510/520 v1.1
|
||||||
|
- TL-WA901N/ND v1
|
||||||
|
- TL-WR710N v2
|
||||||
|
- TL-WR801N/ND v1, v2
|
||||||
|
- TL-WR841N/ND v10
|
||||||
|
- TL-WR843N/ND v1
|
||||||
|
- TL-WR940N v1, v2, v3
|
||||||
|
- TL-WR941ND v6
|
||||||
|
- TL-WR1043N/ND v3
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- airGateway
|
||||||
|
- airRouter
|
||||||
|
- UniFi AP Outdoor+
|
||||||
|
|
||||||
|
* Western Digital
|
||||||
|
|
||||||
|
- My Net N600
|
||||||
|
- My Net N750
|
||||||
|
|
||||||
|
x86-xen_domu
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
New target containing the necessary drivers for use in Xen.
|
||||||
|
|
||||||
|
x86-64
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
64bit version of `x86-generic`. The generic image can also be used in KVM with VirtIO.
|
||||||
|
|
||||||
|
New features
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Kernel module opkg repository
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
We've not been able to keep ABI compatiblity with the kernel of the official OpenWrt images.
|
||||||
|
Therefore, Gluon now generates an opkg repository with modules itself.
|
||||||
|
|
||||||
|
The repository can be found at `output/modules/` by default, the image output directory has
|
||||||
|
been moved from `images/` to `output/images/`. See the updated :doc:`../user/getting_started` guide
|
||||||
|
for information on the handling of the signing keys for this repository.
|
||||||
|
|
||||||
|
The `opkg_repo` site.conf option has been replaced to allow specifying this and other additional repositories.
|
||||||
|
|
||||||
|
New status page
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The new status page provides a visually pleasing experience, and displays all important information
|
||||||
|
on a node in a clear manner. It also contains a real-time signal strength graph for all neighbouring
|
||||||
|
nodes to aid with the alignment of antennas.
|
||||||
|
|
||||||
|
802.11s mesh support
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Gluon now supports using 802.11s for its mesh links instead of IBSS (Adhoc). This will allow supporting
|
||||||
|
more WLAN hardware in the future (like Ralink/Mediatek, which don't support AP and IBSS mode simultaneously).
|
||||||
|
|
||||||
|
Note that batman-adv is still used on top of 802.11s (and 802.11s forwarding is disabled), the mesh routing protocol
|
||||||
|
provided by 802.11s is not used.
|
||||||
|
|
||||||
|
Multicast filter extension
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The `gluon-ebtables-filter-multicast` package has been extended to filter out multicast
|
||||||
|
ICMP and ICMPv6 Echo Requests (ping) and Node Information Queries (RFC4620). This prevents
|
||||||
|
pings to multicast addresses like ff02::1 to cause traffic peaks
|
||||||
|
(as all nodes and clients would answer such a ping).
|
||||||
|
|
||||||
|
French translation
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
A French translation for the Config Mode/Expert Mode has been added.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Update kernel code for the QCA953x
|
||||||
|
|
||||||
|
Might improve stability of the TP-Link TL-WR841N/ND v9.
|
||||||
|
* Fix model detection on some Netgear WNDR3700v2
|
||||||
|
|
||||||
|
The broken devices will identify as "NETGEAR ".
|
||||||
|
This also breaks the autoupdater, making a manual upgrade necessary.
|
||||||
|
* Ensure that `odhcp6c` doesn't spawn multiple instances of ``dhcpv6.script``
|
||||||
|
* Fix support for Buffalo WZR-600DHP
|
||||||
|
|
||||||
|
A flashable factory image is generated now. The sysupgrade image is still shared
|
||||||
|
with the WZR-HP-AG300H.
|
||||||
|
|
||||||
|
Site changes
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* ``site.conf``
|
||||||
|
|
||||||
|
- New WLAN configuration
|
||||||
|
|
||||||
|
``wifi24`` and ``wifi5`` need to be updated to a new more flexible format.
|
||||||
|
A configuration using the old format
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
{
|
||||||
|
channel = 1,
|
||||||
|
htmode = 'HT20'
|
||||||
|
ssid = 'entenhausen.freifunk.net',
|
||||||
|
mesh_ssid = 'xe:xx:xx:xx:xx:xx',
|
||||||
|
mesh_bssid = 'xe:xx:xx:xx:xx:xx',
|
||||||
|
mesh_mcast_rate = 12000,
|
||||||
|
}
|
||||||
|
|
||||||
|
would look like this in the new format::
|
||||||
|
|
||||||
|
{
|
||||||
|
channel = 1,
|
||||||
|
ap = {
|
||||||
|
ssid = 'entenhausen.freifunk.net',
|
||||||
|
},
|
||||||
|
ibss = {
|
||||||
|
ssid = 'xe:xx:xx:xx:xx:xx',
|
||||||
|
bssid = 'xe:xx:xx:xx:xx:xx',
|
||||||
|
mcast_rate = 12000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
The ``htmode`` option has been dropped, the channel width is now always set to 20MHz
|
||||||
|
(see https://github.com/freifunk-gluon/gluon/issues/487 for a discussion of this change).
|
||||||
|
|
||||||
|
In addition to the old IBSS (Adhoc) based meshing, 802.11s-based meshing can be configured
|
||||||
|
using the ``mesh`` section. Example::
|
||||||
|
|
||||||
|
{
|
||||||
|
channel = 1,
|
||||||
|
ap = {
|
||||||
|
ssid = 'entenhausen.freifunk.net',
|
||||||
|
},
|
||||||
|
mesh = {
|
||||||
|
id = 'mesh.entenhausen.freifunk.net', -- can by any string, human-readable or random
|
||||||
|
mcast_rate = 12000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
While using ``ibss`` and ``mesh`` at the same time is possible, is causes high load in
|
||||||
|
very active meshes, so it is advisable to avoid such configurations.
|
||||||
|
|
||||||
|
- Bandwidth limitation defaults
|
||||||
|
|
||||||
|
The old section ``simple_tc.mesh_vpn`` has been moved to ``fastd_mesh_vpn.bandwidth_limit`` and the ``ifname``
|
||||||
|
field isn't used anymore. What looked like this
|
||||||
|
before
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
simple_tc = {
|
||||||
|
mesh_vpn = {
|
||||||
|
ifname = 'mesh-vpn',
|
||||||
|
enabled = false,
|
||||||
|
limit_egress = 200,
|
||||||
|
limit_ingress = 3000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
needs to be changed to
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
fastd_mesh_vpn = {
|
||||||
|
-- ...
|
||||||
|
|
||||||
|
bandwidth_limit = {
|
||||||
|
enabled = false,
|
||||||
|
egress = 200,
|
||||||
|
ingress = 3000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
- opkg repository configuration
|
||||||
|
|
||||||
|
The opkg configuration has been changed to be more flexible and allow specifying custom repositories.
|
||||||
|
Example::
|
||||||
|
|
||||||
|
opkg = {
|
||||||
|
openwrt = 'http://opkg.services.ffeh/openwrt/%n/%v/%S/packages',
|
||||||
|
extra = {
|
||||||
|
modules = 'http://opkg.services.ffeh/modules/gluon-%GS-%GR/%S',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
The keys of the ``extra`` table (like ``modules`` in this example) can be chosen arbitrarily.
|
||||||
|
|
||||||
|
Instead of explicitly specifying the whole URL, using patterns is recommended. The following
|
||||||
|
patterns are understood:
|
||||||
|
|
||||||
|
- ``%n`` is replaced by the OpenWrt version codename (e.g. "chaos_calmer")
|
||||||
|
- ``%v`` is replaced by the OpenWrt version number (e.g. "15.05")
|
||||||
|
- ``%S`` is replaced by the target architecture (e.g. "ar71xx/generic")
|
||||||
|
- ``%GS`` is replaced by the Gluon site code (as specified in ``site.conf``)
|
||||||
|
- ``%GV`` is replaced by the Gluon version
|
||||||
|
- ``%GR`` is replaced by the Gluon release (as specified in ``site.mk``)
|
||||||
|
|
||||||
|
|
||||||
|
* ``site.mk``
|
||||||
|
|
||||||
|
- The packages `gluon-announce` and `gluon-announced` were merged into
|
||||||
|
the package `gluon-respondd`. If you had any of them (probably
|
||||||
|
`gluon-announced`) in your package list, you have to replace them.
|
||||||
|
|
||||||
|
|
||||||
|
* ``i18n/``
|
||||||
|
|
||||||
|
- The translations of ``gluon-config-mode:pubkey`` now have to show the fastd
|
||||||
|
public key themselves if desired, making the formatting of the key and whether it is shown at
|
||||||
|
all configurable. To retain the old format, add ``<p>`` to the beginning of
|
||||||
|
your translations and append::
|
||||||
|
|
||||||
|
"</p>"
|
||||||
|
"<div class=\"the-key\">"
|
||||||
|
" # <%= hostname %>"
|
||||||
|
" <br/>"
|
||||||
|
"<%= pubkey %>"
|
||||||
|
"</div>"
|
||||||
|
|
||||||
|
Internals
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
* OpenWrt has been updated to Chaos Calmer
|
||||||
|
* mac80211 has been backported from OpenWrt trunk r47249 (wireless-testing 2015-07-21)
|
||||||
|
|
||||||
|
This allows us to support the TL-WR940N v3/TL-WR941ND v6, which uses a TP9343 (QCA956x) SoC.
|
||||||
|
* Several packages have been moved from the Gluon repo to the packages repo, removing references to Gluon:
|
||||||
|
|
||||||
|
- gluon-cron -> micrond (the crontabs are now read from ``/usr/lib/micron.d`` instead of ``/lib/gluon/cron``)
|
||||||
|
- gluon-radvd -> uradvd
|
||||||
|
- gluon-simple-tc -> simple-tc (the config file has been renamed as well)
|
||||||
|
|
||||||
|
* Some of the Gluon-specific i18n support code in the build system has been removed, as LuCI now provides
|
||||||
|
similar facilities
|
||||||
|
* The C-based `luci-lib-jsonc` library is now used for JSON encoding/decoding instead of the pure Lua `luci-lib-json`
|
||||||
|
* The site config is now stored as JSON on the node. The Lua interface ``gluon.site_config`` is still available, and a C interface was added as part of the new package `libgluonutil`.
|
||||||
|
* The `respondd` daemon now uses C modules instead of Lua snippets, which greatly enhances response speed and reduces memory usage. The Gluon integration package has
|
||||||
|
been renamed from `gluon-announced` to `gluon-respondd`.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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 Expert Mode is recommended.
|
||||||
|
* batman-adv causes stability issues for both alfred and respondd/announced (`#177 <https://github.com/freifunk-gluon/gluon/issues/177>`_)
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd/announced API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced in the next release. The old API will still be supported for a while.
|
59
docs/releases/v2016.2.1.rst
Normal file
59
docs/releases/v2016.2.1.rst
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
Gluon 2016.2.1
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WA901ND v4
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Make status page work with disabled cookies/local storage
|
||||||
|
(`#912 <https://github.com/freifunk-gluon/gluon/pull/912>`_)
|
||||||
|
|
||||||
|
* Update kernel to 3.18.44
|
||||||
|
|
||||||
|
Fixes CVE-2016-5195 and CVE-2016-7117. It is unlikely that these issues pose
|
||||||
|
a threat to usual Gluon setups, but installing additional packages may make a
|
||||||
|
system vulnerable. In any case, updating is highly recommended.
|
||||||
|
|
||||||
|
* Downgrade mac80211 to an earlier state
|
||||||
|
|
||||||
|
Unfortunately, a mac80211 update that was done shortly before the release of
|
||||||
|
Gluon v2016.2 (that seemed necessary to properly support ath10k devices) had
|
||||||
|
again caused severe ath9k stability issues that remained unreported until v2016.2
|
||||||
|
was out.
|
||||||
|
|
||||||
|
We have now reverted mac80211 to an earlier state that was reported to be very
|
||||||
|
stable (while keeping the ath10k-specific changes); in addition, some patches
|
||||||
|
that were reported to cause connection or performance issues with certain clients
|
||||||
|
have been reverted. While is it still not perfectly stable, is should be at least
|
||||||
|
as good as (and probably better than) the v2016.1.x release series.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
||||||
|
|
||||||
|
* Git HTTPS downloads from git.kernel.org fail on Debian Wheezy (`#919 <https://github.com/freifunk-gluon/gluon/issues/919>`_)
|
||||||
|
|
||||||
|
The GnuTLS version on Debian Wheezy is too old and can't establish a connection with
|
||||||
|
git.kernel.org anymore. A newer GnuTLS version is available in wheezy-backports, but
|
||||||
|
as there is no libcurl3-gnutls package linked against the new version, installing the
|
||||||
|
new version has no effect.
|
78
docs/releases/v2016.2.2.rst
Normal file
78
docs/releases/v2016.2.2.rst
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
Gluon 2016.2.2
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- CPE210/510 EU/US versions
|
||||||
|
- TL-WA801N/ND v3
|
||||||
|
- TL-WR841ND v11 EU/US versions
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix boot on certain QCA955x-based devices (e.g. OpenMesh OM5P AC v2) (`#965 <https://github.com/freifunk-gluon/gluon/pull/965>`_)
|
||||||
|
|
||||||
|
This issue was a regression in Gluon v2016.2.1.
|
||||||
|
|
||||||
|
* Build: Fix git downloads from git.kernel.org on Debian Wheezy (`#919 <https://github.com/freifunk-gluon/gluon/issues/919>`_)
|
||||||
|
|
||||||
|
We've switched back from HTTPS to the git protocol for now to avoid using
|
||||||
|
the old GnuTLS version of Debian Wheezy which can't establish a HTTPS connection
|
||||||
|
with git.kernel.org anymore.
|
||||||
|
|
||||||
|
This issue was a regression in Gluon v2016.2.
|
||||||
|
|
||||||
|
* Fix RX filter of Ubiquiti UAP Outdoor+ (`d43147a8e03d <https://github.com/freifunk-gluon/gluon/commit/d43147a8e03dd17bc27e4ab203736f2151f9db3d>`_)
|
||||||
|
|
||||||
|
This issue was a regression in Gluon v2016.2.
|
||||||
|
|
||||||
|
* Fix switched WAN/LAN interface assignment on CPE210 (`59deb2064d54 <https://github.com/freifunk-gluon/gluon/commit/59deb2064d54a37e27139b76a3b6064f5f10f364>`_)
|
||||||
|
|
||||||
|
This issue was a regression in Gluon v2016.2.
|
||||||
|
|
||||||
|
* Significantly reduce CPU load used by signal strength LEDs (`#897 <https://github.com/freifunk-gluon/gluon/issues/897>`_)
|
||||||
|
|
||||||
|
* Fix ethernet port of the Ubiquiti UAP AC Lite (`#911 <https://github.com/freifunk-gluon/gluon/issues/911>`_)
|
||||||
|
|
||||||
|
* Build: Don't use host ``/tmp`` directory (`f9072a36411b <https://github.com/freifunk-gluon/gluon/commit/f9072a36411b92089c697b2c0a564155bfe10bd1>`_)
|
||||||
|
|
||||||
|
Fixes build when ``/tmp`` is mounted with *noexec*.
|
||||||
|
|
||||||
|
* Fix mesh interface type respondd/alfred announcements when using VLANs over IBSS (`#941 <https://github.com/freifunk-gluon/gluon/issues/941>`_)
|
||||||
|
|
||||||
|
* Fix next-node ebtables rules without *next_node.ip4* (`9dbe9f785d2b <https://github.com/freifunk-gluon/gluon/commit/9dbe9f785d2b439c3ebdae365b808ebf42b3cf03>`_)
|
||||||
|
|
||||||
|
Gluon v2016.2 added support for using the next-node feature without specifying an IPv4
|
||||||
|
address. Some scripts had not been adjusted, making the next-node unreliable when
|
||||||
|
no IPv4 address was specified.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* x86-generic and x86-64 images now have PATA and MMC support to allow using them
|
||||||
|
on various devices that were previously unsupported.
|
||||||
|
|
||||||
|
* Clean up opkg postinst scripts up on image generation
|
||||||
|
|
||||||
|
OpenWrt does this by default to save a little space.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
62
docs/releases/v2016.2.3.rst
Normal file
62
docs/releases/v2016.2.3.rst
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
Gluon 2016.2.3
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link TL-WR940N v4
|
||||||
|
* TP-Link TL-WR1043ND v4
|
||||||
|
|
||||||
|
Removed hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Support for Meraki devices (MR12/16/62/66) has been removed for now because of
|
||||||
|
severe problems (all devices were using the same MAC addresses). Support will return
|
||||||
|
when the issues have been fixed.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Automatically restart respondd on failure (`#863 <https://github.com/freifunk-gluon/gluon/issues/863>`_)
|
||||||
|
|
||||||
|
There have been many reports of respondd processes disappearing; the exact cause is unclear,
|
||||||
|
but might be related to the batman-adv debugfs interface and/or out-of-memory conditions.
|
||||||
|
|
||||||
|
A new respondd initscript uses procd to automatically restart respondd when it dies.
|
||||||
|
|
||||||
|
* Make autoupdater timeouts more robust (`#987 <https://github.com/freifunk-gluon/gluon/issues/987>`_)
|
||||||
|
|
||||||
|
It was reported that wget processes sometimes hang indefinitely during the autoupdater manifest
|
||||||
|
download. The autoupdater has been improved to ensure that wget can always be interrupted after
|
||||||
|
a timeout.
|
||||||
|
|
||||||
|
This issue, together with the recent addition of lock files to ensure that only one instance
|
||||||
|
of the autoupdater can run at a time, had caused the autoupdater to blocked completely
|
||||||
|
by hanging processes in some cases (till a node was rebooted).
|
||||||
|
|
||||||
|
* Fix regulation domain switching in ath10k (`#1001 <https://github.com/freifunk-gluon/gluon/pull/1001>`_)
|
||||||
|
|
||||||
|
Prevents use of too high transmission power in some cases.
|
||||||
|
|
||||||
|
* Ensure that *prefix6* in site.conf is always a /64 prefix (`6b62e2f <https://github.com/freifunk-gluon/gluon/commit/6b62e2fc788cd1f83f6634288a15724dfc42b0fd>`_)
|
||||||
|
|
||||||
|
Other prefix lengths were never supported and don't make sense in many places the prefix is used. Ensure
|
||||||
|
that such configurations will not pass validation.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
55
docs/releases/v2016.2.4.rst
Normal file
55
docs/releases/v2016.2.4.rst
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Gluon 2016.2.4
|
||||||
|
==============
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix batman-adv (compat 15) not being able to transmit packages of specific sizes (`b7eeef9 <https://github.com/freifunk-gluon/gluon/commit/b7eeef9b04b44a70b2a953c4efe35a3fdceba2db>`_)
|
||||||
|
|
||||||
|
We suspect that this issue was also the reason for the autoupdater/wget hangs observed by many communities.
|
||||||
|
Non-Gluon nodes like gateways should be updated to batman-adv 2017.0.1 to get the fix.
|
||||||
|
|
||||||
|
* Fix build after ftp.all.kernel.org discontinuation (`#1059 <https://github.com/freifunk-gluon/gluon/issues/1059>`_)
|
||||||
|
|
||||||
|
* Fix high load because of frequent calls of the respondd initscript (`9a0aeb9 <https://github.com/freifunk-gluon/gluon/commit/9a0aeb9b7482df4e4515e61356b9d393e3a7eacb>`_)
|
||||||
|
|
||||||
|
The respondd restart triggers added in v2016.2.3 ran a significant portion of the respondd initscript for each router advertisement
|
||||||
|
received. This was fixed by a backport of a netifd patch.
|
||||||
|
|
||||||
|
* x86 sysupgrade fixes (`41fd50d <https://github.com/freifunk-gluon/gluon/commit/41fd50d20ba31d73c4796c5b2d4eb44ad2258b90>`_,
|
||||||
|
`ad37e2b <https://github.com/freifunk-gluon/gluon/commit/ad37e2b6b43b2c3389356d892b04f3873d8f6b93>`_)
|
||||||
|
|
||||||
|
This fixes sysupgrade on mmcblk and similar devices.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* The manifest generator has been extended to generate SHA256 checksums in addition to SHA512 ones
|
||||||
|
(`f9d59be <https://github.com/freifunk-gluon/gluon/commit/f9d59be731efd31a26c59e049ccbdc4b1762f6b1>`_)
|
||||||
|
|
||||||
|
We have recently switched the autoupdater to SHA256 in the Gluon master to avoid mixing two different
|
||||||
|
lengths of hashes for no good reason. This makes the manifests of Gluon v2016.2.x compatible with the
|
||||||
|
new autoupdater so it doesn't prevent backports or downgrades.
|
||||||
|
|
||||||
|
**Note:** Downgrades of major Gluon versions are generally unsupported and will often lead to
|
||||||
|
broken configurations.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* x86 sysupgrade (sometimes) loses config when kernel partition grows (`#1010 <https://github.com/freifunk-gluon/gluon/issues/1010>`_)
|
||||||
|
|
||||||
|
This issue affects upgrades from v2016.2.x and older to the Gluon master only, we hope to fix it before the next
|
||||||
|
major release.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
36
docs/releases/v2016.2.5.rst
Normal file
36
docs/releases/v2016.2.5.rst
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Gluon 2016.2.5
|
||||||
|
==============
|
||||||
|
|
||||||
|
This version contains only a single bugfix for a regression introduced in Gluon v2016.2.4.
|
||||||
|
As the regression affects batman-adv compat 15 only, firmwares using the compat 14 legacy
|
||||||
|
version don't need to be updated.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix kernel crash with batman-adv compat 15 (`d452a7c <https://github.com/freifunk-gluon/gluon/commit/d452a7c2cf1c0da4e034666a50dc0e7aa9ddc592>`_)
|
||||||
|
|
||||||
|
An incorrect backport of a fix for a very improbable kernel crash caused a much more
|
||||||
|
frequent kernel crash. The backport has been fixed.
|
||||||
|
|
||||||
|
This bug a regression in Gluon v2016.2.4.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* x86 sysupgrade (sometimes) loses config when kernel partition grows (`#1010 <https://github.com/freifunk-gluon/gluon/issues/1010>`_)
|
||||||
|
|
||||||
|
This issue affects upgrades from v2016.2.x and older to the Gluon master only, we hope to fix it before the next
|
||||||
|
major release.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
57
docs/releases/v2016.2.6.rst
Normal file
57
docs/releases/v2016.2.6.rst
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
Gluon 2016.2.6
|
||||||
|
==============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link TL-WR841N/ND v12
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Fix `CVE-2016-10229 <https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10229>`_
|
||||||
|
(`#1097 <https://github.com/freifunk-gluon/gluon/issues/1097>`_)
|
||||||
|
|
||||||
|
Fortunately, the standard Gluon setup is not vulnerable, as the issue only affects
|
||||||
|
applications that use MSG_PEEK on UDP sockets. dnsmasq does use MSG_PEEK, but
|
||||||
|
only in the DHCP component, which is not enabled during normal node operation.
|
||||||
|
|
||||||
|
* Fix roaming issue affecting communication between clients
|
||||||
|
(`#1121 <https://github.com/freifunk-gluon/gluon/issues/1121>`_)
|
||||||
|
|
||||||
|
This issue affects all previous releases of Gluon v2016.2.x.
|
||||||
|
|
||||||
|
* Fix build against OpenSSL 1.1 (`b6a22ce <https://github.com/freifunk-gluon/gluon/commit/b6a22ce79307853b175192178bb0333d976a3a6f>`_)
|
||||||
|
|
||||||
|
* Fix build with long path names (`#1120 <https://github.com/freifunk-gluon/gluon/issues/1120>`_)
|
||||||
|
|
||||||
|
* Use new staged sysupgrade procedure (`d4a69c0 <https://github.com/freifunk-gluon/gluon/commit/d4a69c00047f72696a2400cd7129be032de458e3>`_)
|
||||||
|
|
||||||
|
The new sysupgrade fixes an issue affecting x86, causing nodes to lose their
|
||||||
|
configuration on upgrade when the size of the kernel partition grows. This is
|
||||||
|
the case when upgrading from Gluon v2016.2.x to newer (LEDE-based) Gluon
|
||||||
|
versions. **This means that a Gluon node running an older version must be
|
||||||
|
upgraded to Gluon v2016.2.6 first before switching to a LEDE-based version!**
|
||||||
|
|
||||||
|
One downside of the staged sysupgrade is that all processes, including the SSH
|
||||||
|
server, will be terminated at the start of the sysupgrade to allow unmounting
|
||||||
|
the root filesystem. This makes it impossible to get any feedback from the
|
||||||
|
upgrade process without a serial console.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
179
docs/releases/v2016.2.rst
Normal file
179
docs/releases/v2016.2.rst
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
Gluon 2016.2
|
||||||
|
============
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* ALFA Network
|
||||||
|
|
||||||
|
- Tube2H
|
||||||
|
- N2
|
||||||
|
- N5
|
||||||
|
|
||||||
|
* Buffalo
|
||||||
|
|
||||||
|
- WZR-HP-G300NH2
|
||||||
|
|
||||||
|
* GL Innovations
|
||||||
|
|
||||||
|
- GL-AR150
|
||||||
|
|
||||||
|
* OpenMesh
|
||||||
|
|
||||||
|
- MR1750 v1, v2 [#ath10k]_
|
||||||
|
- OM2P-HS v3
|
||||||
|
- OM5P-AC v1, v2 [#ath10k]_
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- Archer C5 v1 [#ath10k]_
|
||||||
|
- Archer C7 v2 [#ath10k]_
|
||||||
|
- TL-WR710N v2.1
|
||||||
|
- TL-WR842N/ND v3
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- UniFi AP AC Lite [#ath10k]_
|
||||||
|
- UniFi AP AC Pro [#ath10k]_
|
||||||
|
|
||||||
|
.. [#ath10k]
|
||||||
|
Device uses the ath10k WLAN driver; no image is built unless GLUON_ATH10K_MESH
|
||||||
|
is set as described in :ref:`getting-started-make-variables`
|
||||||
|
|
||||||
|
brcm2708-bcm2708
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 1
|
||||||
|
|
||||||
|
brcm2708-bcm2709
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 2
|
||||||
|
|
||||||
|
New features
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Many UBNT Airmax XM model names are detected correctly now (e.g., the Loco
|
||||||
|
is no longer displayed as Bullet) (`#632 <https://github.com/freifunk-gluon/gluon/pull/632>`_)
|
||||||
|
|
||||||
|
Also, various new image aliases have been added for these devices.
|
||||||
|
|
||||||
|
* batman-adv: mesh_no_rebroadcast is now enabled for Mesh-on-WAN/LAN (`#652 <https://github.com/freifunk-gluon/gluon/issues/652>`_)
|
||||||
|
|
||||||
|
* The new UCI option ``gluon-core.@wireless[0].preserve_channels`` can be used to
|
||||||
|
prevent a changed WLAN channel from being reset on firmware upgrades (`#640 <https://github.com/freifunk-gluon/gluon/issues/640>`_)
|
||||||
|
|
||||||
|
* PoE passthrough can now be configured from site.conf and the Advanced Settings
|
||||||
|
on TP-Link CPE 210/510 and Ubiquiti NanoStations (`#328 <https://github.com/freifunk-gluon/gluon/issues/328>`_)
|
||||||
|
|
||||||
|
* The config mode *altitude* field can now be hidden using the ``config_mode.geo_location.show_altitude``
|
||||||
|
site.conf setting (`#693 <https://github.com/freifunk-gluon/gluon/issues/693>`_)
|
||||||
|
|
||||||
|
* The contact information field in the config mode can be made obligatory using
|
||||||
|
the ``config_mode.owner.obligatory`` site.conf option
|
||||||
|
|
||||||
|
* The *node name* setting in the config mode is no longer restricted to valid DNS
|
||||||
|
hostnames, but allows any UTF-8 string (`#414 <https://github.com/freifunk-gluon/gluon/issues/414>`_)
|
||||||
|
|
||||||
|
* Besides the hostname, public key, site config and primary MAC address, the contact
|
||||||
|
information can now be accessed from config mode site texts
|
||||||
|
|
||||||
|
* The functions ``escape`` and ``urlescape`` for HTML and URL escaping are now available from config mode
|
||||||
|
site texts. They should always be used when including user-provided information like
|
||||||
|
hostnames and contact information in HTML code or URLs.
|
||||||
|
|
||||||
|
* Dropbear has been updated to a newer version, enabling new SSH crypto methods and removing
|
||||||
|
some old ones like DSA. This reduces the time needed for the first boot and makes
|
||||||
|
SSH logins faster (`#223 <https://github.com/freifunk-gluon/gluon/issues/223>`_)
|
||||||
|
|
||||||
|
* WLAN basic and supported rate sets have been made configurable, to allow disabling
|
||||||
|
802.11b rates (`#810 <https://github.com/freifunk-gluon/gluon/pull/810>`_)
|
||||||
|
|
||||||
|
* ath10k-based devices are now supported officially; it's possible to choose between
|
||||||
|
IBSS- and 11s-capable firmwares in site.mk (`#864 <https://github.com/freifunk-gluon/gluon/pull/864>`_)
|
||||||
|
|
||||||
|
* The ``prefix4`` and ``next_node.ip4`` site.conf options are optional now.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* The stability of the ath9k WLAN driver has been improved significantly
|
||||||
|
(`#605 <https://github.com/freifunk-gluon/gluon/issues/605>`_)
|
||||||
|
|
||||||
|
mac80211, hostapd and other related drivers and services have been backported from LEDE ``42f559e``.
|
||||||
|
|
||||||
|
* Extremely slow downloads could lead to multiple instances of the autoupdater
|
||||||
|
running concurrently (`#582 <https://github.com/freifunk-gluon/gluon/pull/582>`_)
|
||||||
|
|
||||||
|
A lockfile is used to prevent this and timeouts have been added to download processes.
|
||||||
|
|
||||||
|
* Usage of static DNS servers on the WAN port has been fixed
|
||||||
|
(`#886 <https://github.com/freifunk-gluon/gluon/issues/886>`_)
|
||||||
|
|
||||||
|
This is a regression introduced in Gluon v2016.1.6.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* The "Expert Mode" has been renamed to "Advanced Settings"
|
||||||
|
|
||||||
|
Site changes
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
site.mk
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
If you want to support ath10k-based devices, you should set GLUON_ATH10K_MESH
|
||||||
|
and GLUON_REGION as described in :ref:`getting-started-make-variables`.
|
||||||
|
|
||||||
|
i18n
|
||||||
|
^^^^
|
||||||
|
|
||||||
|
As the hostname field may now contain an arbitrary UTF-8 string, escaping must
|
||||||
|
be added.
|
||||||
|
|
||||||
|
Change
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
<%=hostname%>
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
<%=escape(hostname)%>
|
||||||
|
|
||||||
|
Inside of URLs, ``urlescape`` must be used instead of ``escape``.
|
||||||
|
|
||||||
|
Internals
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
* Mesh interfaces are now configured in a protocol-independent way in UCI (`#870 <https://github.com/freifunk-gluon/gluon/pull/870>`_)
|
||||||
|
|
||||||
|
The MAC address assignment of all mesh and WLAN interfaces has been modified to prepare for support of
|
||||||
|
Ralink/Mediatek-based WLAN chips.
|
||||||
|
|
||||||
|
* Preparations for supporting the new batman-adv multicast optimizations have been made
|
||||||
|
(`#674 <https://github.com/freifunk-gluon/gluon/pull/674>`_, `#675 <https://github.com/freifunk-gluon/gluon/pull/675>`_,
|
||||||
|
`#679 <https://github.com/freifunk-gluon/gluon/pull/679>`_)
|
||||||
|
|
||||||
|
* All Lua code is minified now to save some space
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
229
docs/releases/v2017.1.rst
Normal file
229
docs/releases/v2017.1.rst
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
Gluon 2017.1
|
||||||
|
============
|
||||||
|
|
||||||
|
General changes
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Gluon 2017.1 is the first release of Gluon based on the LEDE 17.01 branch. The
|
||||||
|
kernel has been updated from 3.18.x to 4.4.x.
|
||||||
|
|
||||||
|
We've used the opportunity to greatly simplify the Gluon build system, removing
|
||||||
|
many hacks that were required to make the build work with older OpenWrt releases.
|
||||||
|
|
||||||
|
The *output/modules* directory is now called *output/packages* and provides a
|
||||||
|
replacement for the whole repository with target-specific packages of LEDE (in
|
||||||
|
contrast to packages that are common for all targets of the same architecture).
|
||||||
|
|
||||||
|
**Note: There is an issue in all Gluon versions before 2016.2.6 that will
|
||||||
|
lead to x86 systems losing their configuration when upgrading to Gluon 2017.1!**
|
||||||
|
Older Gluon versions should be upgraded to 2016.2.6 first before switching to
|
||||||
|
2017.1.
|
||||||
|
|
||||||
|
Another potential issue mostly affects virtual machines: Gluon 2017.1 images are
|
||||||
|
bigger than 2016.2.x images on x86. If your virtual harddisk is based on a
|
||||||
|
2016.2.x image, it must be resized to 273MB or bigger before upgrading to Gluon
|
||||||
|
2017.1. Using qemu, the command
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
qemu-img resize $IMAGE 273MB
|
||||||
|
|
||||||
|
can be used to do this.
|
||||||
|
|
||||||
|
Added hardware support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- RE450
|
||||||
|
- WBS210 v1.20
|
||||||
|
- WBS510 v1.20
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- AirGateway LR
|
||||||
|
- AirGateway PRO
|
||||||
|
- Rocket M2/M5 Ti
|
||||||
|
- UniFi AP LR
|
||||||
|
|
||||||
|
ar71xx-tiny
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
The new *ar71xx-tiny* target has split out of *ar71xx-generic*; all
|
||||||
|
*ar71xx-generic* devices with only 4MB of flash have been moved to this target.
|
||||||
|
|
||||||
|
In contrast to *ar71xx-generic*, *ar71xx-tiny* **does not support opkg anymore**
|
||||||
|
to save some space.
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WA730RE v1
|
||||||
|
- TL-WA7210N v2
|
||||||
|
|
||||||
|
x86-generic
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
The *x86-kvm* and *x86-xen_domu* targets have been removed; the *x86-generic*
|
||||||
|
images now support these usecases as well, so no separate targets are needed
|
||||||
|
anymore.
|
||||||
|
|
||||||
|
x86-geode
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
The new *x86-geode* target for hardware based on Geode CPUs has been added.
|
||||||
|
|
||||||
|
New features
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Localization support has been added to the status page. In addition to German,
|
||||||
|
there are English and Russian translations now (`#1044 <https://github.com/freifunk-gluon/gluon/issues/1044>`_)
|
||||||
|
|
||||||
|
* Add support for making nodes a DNS cache for clients
|
||||||
|
(`#1000 <https://github.com/freifunk-gluon/gluon/issues/1000>`_)
|
||||||
|
|
||||||
|
See also: :doc:`../features/dns-cache`
|
||||||
|
|
||||||
|
* Add L2TP via tunneldigger as an alternative VPN system
|
||||||
|
(`#978 <https://github.com/freifunk-gluon/gluon/issues/978>`_)
|
||||||
|
|
||||||
|
L2TP will usually give better performance than fastd as it runs in kernel
|
||||||
|
space, but it does not provide encryption. Also, tunneling over IPv6 is
|
||||||
|
currently unsupported by tunneldigger.
|
||||||
|
|
||||||
|
It is not possible to include both fastd and tunneldigger in the same
|
||||||
|
firmware.
|
||||||
|
|
||||||
|
* Add source filter package (`#1015 <https://github.com/freifunk-gluon/gluon/issues/1015>`_)
|
||||||
|
|
||||||
|
The new package *gluon-ebtables-source-filter* can be used to prevent traffic
|
||||||
|
using unexpected IP addresses or packet types from entering the mesh.
|
||||||
|
|
||||||
|
See also: :doc:`../package/gluon-ebtables-source-filter`
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
* Disabling batman-adv on an interface (for example when an Ethernet link is lost
|
||||||
|
or before sysupgrades) could lead to a kernel crash in certain configurations
|
||||||
|
(`#680 <https://github.com/freifunk-gluon/gluon/issues/680>`_)
|
||||||
|
|
||||||
|
* A race condition in the network setup scripts could lead to incomplete setup
|
||||||
|
during boot or when interfaces were added or removed from batman-adv after
|
||||||
|
Ethernet link changes (`#905 <https://github.com/freifunk-gluon/gluon/issues/905>`_)
|
||||||
|
|
||||||
|
The fix also solved the long-standing issue of Ethernet-only nodes (i.e. no
|
||||||
|
WLAN or VPN mesh) not booting up correctly without an Ethernet mesh link.
|
||||||
|
|
||||||
|
* Some fixes in the WLAN stack of LEDE have improved the stability of the ath9k
|
||||||
|
driver (`#605 <https://github.com/freifunk-gluon/gluon/issues/605>`_)
|
||||||
|
|
||||||
|
Site changes
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
site.mk
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
* The *gluon-legacy* package does not exist anymore
|
||||||
|
* All *gluon-luci-* packages have been renamed to *gluon-web-*
|
||||||
|
* The *gluon-next-node* package has been merged into the Gluon core and must not
|
||||||
|
be specified in *site.mk* anymore
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
* The *fastd_mesh_vpn* configuration section has been restructured to allow
|
||||||
|
sharing more options with tunneldigger. Instead of
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
fastd_mesh_vpn = {
|
||||||
|
mtu = 1280,
|
||||||
|
configurable = true,
|
||||||
|
methods = {'salsa2012+umac'},
|
||||||
|
groups = { ... },
|
||||||
|
bandwidth_limit = { ... },
|
||||||
|
}
|
||||||
|
|
||||||
|
the configuration must look like this now:
|
||||||
|
|
||||||
|
.. code-block:: lua
|
||||||
|
|
||||||
|
mesh_vpn = {
|
||||||
|
mtu = 1280,
|
||||||
|
fastd = {
|
||||||
|
configurable = true,
|
||||||
|
methods = {'salsa2012+umac'},
|
||||||
|
groups = { ... },
|
||||||
|
}
|
||||||
|
bandwidth_limit = { ... },
|
||||||
|
}
|
||||||
|
|
||||||
|
* The *opkg.openwrt* option has been renamed to *opkg.lede*
|
||||||
|
|
||||||
|
i18n
|
||||||
|
^^^^
|
||||||
|
|
||||||
|
* The *escape* function has been removed as it was duplicating the existing
|
||||||
|
*pcdata* function. All uses of *escape* in i18n templates must be changed to
|
||||||
|
use *pcdata* instead.
|
||||||
|
|
||||||
|
* The *gluon-config-mode:altitude-label* and *gluon-config-mode:altitude-help*
|
||||||
|
translation IDs have been added to allow adjusting the texts for different
|
||||||
|
kinds of altitudes that might be expected.
|
||||||
|
|
||||||
|
* The optional *gluon-config-mode:novpn* label has been added, which will be
|
||||||
|
shown in place of *gluon-config-mode:pubkey* when mesh VPN is disabled.
|
||||||
|
|
||||||
|
Internals
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
* The LuCI base libraries have been replaced by a stripped-down
|
||||||
|
version called "gluon-web" (`#1007 <https://github.com/freifunk-gluon/gluon/issues/1007>`_)
|
||||||
|
|
||||||
|
Custom packages will need to be adjusted; in particular, all uses of *luci.model.uci*
|
||||||
|
need to be replaced with *simple-uci*. The Gluon documentation explains the most important
|
||||||
|
changes required to migrate from LuCI to gluon-web.
|
||||||
|
|
||||||
|
* respondd now listens on ``ff05::2:1001`` in addition to ``ff02::2:1001`` for mesh-wide
|
||||||
|
operation (`#984 <https://github.com/freifunk-gluon/gluon/issues/984>`_)
|
||||||
|
|
||||||
|
Eventually, ``ff02::2:1001`` will be available for exchanging information
|
||||||
|
between neighbouring nodes only; map servers should be moved to ``ff05::2:1001``.
|
||||||
|
|
||||||
|
* batman-adv has been updated to version 2017.1
|
||||||
|
|
||||||
|
* Directly running make commands in the *lede* directory is supported now. Consequently,
|
||||||
|
build targets like ``target/linux/clean`` and ``package/NAME/compile`` can't be used
|
||||||
|
in the Gluon repository root anymore.
|
||||||
|
|
||||||
|
The command ``make config`` will set up the LEDE *.config* in the way a normal
|
||||||
|
Gluon build would, so it's possible to build individual packages for testing
|
||||||
|
and development afterwards.
|
||||||
|
|
||||||
|
* Target definitions have been migrated from a Make-based format to a simpler
|
||||||
|
shell-based DSL
|
||||||
|
|
||||||
|
* Gluon does not pass any custom variables into the LEDE build anymore, so things
|
||||||
|
like *GLUONDIR*, *GLUON_VERSION*, or *GLUON_SITEDIR* aren't available
|
||||||
|
to package Makefiles in Gluon 2017.1.
|
||||||
|
|
||||||
|
Instead of ``$(GLUONDIR)/package.mk``, ``$(TOPDIR)/../package/gluon.mk`` must
|
||||||
|
be included in custom packages now.
|
||||||
|
|
||||||
|
Known issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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 promicious mode is disallowed).
|
||||||
|
|
||||||
|
* Inconsistent respondd API (`#522 <https://github.com/freifunk-gluon/gluon/issues/522>`_)
|
||||||
|
|
||||||
|
The current API is inconsistent and will be replaced eventually. The old API will still be supported for a while.
|
@ -12,27 +12,49 @@ msgstr ""
|
|||||||
|
|
||||||
msgid "gluon-config-mode:welcome"
|
msgid "gluon-config-mode:welcome"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Willkommen zum Einrichtungsassistenten für deinen neuen Entenhausener "
|
"Willkommen zum Einrichtungsassistenten für deinen neuen Alpha Centauri "
|
||||||
"Freifunk-Knoten. Fülle das folgende Formular deinen Vorstellungen "
|
"Freifunk-Knoten. Fülle das folgende Formular deinen Vorstellungen "
|
||||||
"entsprechend aus und sende es ab."
|
"entsprechend aus und sende es ab."
|
||||||
|
|
||||||
msgid "gluon-config-mode:pubkey"
|
msgid "gluon-config-mode:pubkey"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dies ist der öffentliche Schlüssel deines Freifunk-Knotens. Erst nachdem "
|
"<p>Dies ist der öffentliche Schlüssel deines Freifunk-Knotens. Erst nachdem "
|
||||||
"er auf den Servern des Entenhausener Freifunk-Projektes eingetragen wurde, "
|
"er auf den Servern des Freifunk-Projektes auf Alpha Centauri eingetragen wurde, "
|
||||||
"kann sich dein Knoten mit dem Entenhausener Mesh-VPN zu verbinden. Bitte "
|
"kann sich dein Knoten mit dem Mesh-VPN dort verbinden. Bitte "
|
||||||
"schicke dazu diesen Schlüssel und den Namen deines Knotens "
|
"schicke dazu diesen Schlüssel und den Namen deines Knotens "
|
||||||
"(<em><%=hostname%></em>) an "
|
"(<em><%=pcdata(hostname)%></em>) an "
|
||||||
"<a href=\"mailto:keys@entenhausen.freifunk.net\">keys@entenhausen.freifunk.net</a>."
|
"<a href=\"mailto:keys@alpha-centauri.freifunk.net?subject=<%= urlencode('Anmeldung: ' .. hostname) %>&"
|
||||||
|
"body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
|
||||||
|
"</p>"
|
||||||
|
"<div class=\"the-key\">"
|
||||||
|
" # <%= pcdata(hostname) %>"
|
||||||
|
" <br />"
|
||||||
|
"<%= pubkey %>"
|
||||||
|
"</div>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:novpn"
|
||||||
|
msgstr ""
|
||||||
|
"<p>Du hast ausgewählt, <strong>kein Mesh-VPN</strong> "
|
||||||
|
"zu nutzen. Dein Knoten kann also nur dann eine Verbindung zum Freifunk-Netz "
|
||||||
|
"aufbauen, wenn andere Freifunk-Router in WLAN-Reichweite sind."
|
||||||
|
"</p>"
|
||||||
|
|
||||||
msgid "gluon-config-mode:reboot"
|
msgid "gluon-config-mode:reboot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Dein Knoten startet gerade neu und wird anschließend versuchen, "
|
"<p>Dein Knoten <em><%= pcdata(hostname) %></em> startet gerade neu und wird "
|
||||||
"sich mit anderen Freifunkknoten in seiner Nähe zu "
|
"anschließend versuchen, sich mit anderen Freifunkknoten in seiner Nähe zu "
|
||||||
"verbinden. Weitere Informationen zur "
|
"verbinden. Weitere Informationen zur "
|
||||||
"Entenhausener Freifunk-Community findest du auf "
|
"Alpha Centauri Freifunk-Community findest du auf "
|
||||||
"<a href=\"https://entenhausen.freifunk.net/\">unserer Webseite</a>.</p>"
|
"<a href=\"https://alpha-centauri.freifunk.net/\">unserer Webseite</a>.</p>"
|
||||||
"<p>Um zu dieser Konfigurationsseite zurückzugelangen, drücke im normalen "
|
"<p>Um zu dieser Konfigurationsseite zurückzugelangen, drücke im normalen "
|
||||||
"Betrieb für drei Sekunden den Reset-Button. Das Gerät wird dann im Config "
|
"Betrieb für drei Sekunden den Reset-Button. Das Gerät wird dann im Config "
|
||||||
"Mode neustarten.</p>"
|
"Mode neustarten.</p>"
|
||||||
"<p>Viel Spaß mit deinem Knoten und der Erkundung von Freifunk!</p>"
|
"<p>Viel Spaß mit deinem Knoten und der Erkundung von Freifunk!</p>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-label"
|
||||||
|
msgstr "Höhe"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-help"
|
||||||
|
msgstr ""
|
||||||
|
"Die Höhenangabe ist optional und sollte nur gesetzt werden, wenn ein "
|
||||||
|
"exakter Wert bekannt ist."
|
||||||
|
@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"PO-Revision-Date: 2015-03-19 20:28+0100\n"
|
"PO-Revision-Date: 2016-02-04 14:28+0100\n"
|
||||||
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
"Last-Translator: David Lutz <kpanic@hirnduenger.de>\n"
|
||||||
"Language-Team: English\n"
|
"Language-Team: English\n"
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -12,25 +12,44 @@ msgstr ""
|
|||||||
|
|
||||||
msgid "gluon-config-mode:welcome"
|
msgid "gluon-config-mode:welcome"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Welcome the the setup wizard of your new Freifunk Duckburg node. "
|
"Welcome to the setup wizard of your new Freifunk Alpha Centauri node. "
|
||||||
"Please fill out the following form and transmit it."
|
"Please fill out the following form and submit it."
|
||||||
|
|
||||||
msgid "gluon-config-mode:pubkey"
|
msgid "gluon-config-mode:pubkey"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"This is your Freifunk node's public key. The node won't be able to "
|
"<p>This is your Freifunk node's public key. The node won't be able to "
|
||||||
"connect to the mesh VPN until the key has been registered on the Freifunk "
|
"connect to the mesh VPN until the key has been registered on the Freifunk servers. "
|
||||||
"Duckburg servers. "
|
"To register, send the key together with your node's name (<em><%=pcdata(hostname)%></em>) to "
|
||||||
"To register the key send it together with your node's name (<em><%=hostname%></em>) to "
|
"<a href=\"mailto:keys@alpha-centauri.freifunk.net?subject=<%= urlencode('Registration: ' .. hostname) %>&"
|
||||||
"<a href=\"mailto:keys@entenhausen.freifunk.net\">keys@entenhausen.freifunk.net</a>."
|
"body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
|
||||||
|
"</p>"
|
||||||
|
"<div class=\"the-key\">"
|
||||||
|
" # <%= pcdata(hostname) %>"
|
||||||
|
" <br />"
|
||||||
|
"<%= pubkey %>"
|
||||||
|
"</div>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:novpn"
|
||||||
|
msgstr ""
|
||||||
|
"<p>You have selected <strong>not</strong> to use the mesh VPN. "
|
||||||
|
"Your node will only be able to connect to the Freifunk network if other nodes in reach "
|
||||||
|
"already have a connection.</p>"
|
||||||
|
|
||||||
msgid "gluon-config-mode:reboot"
|
msgid "gluon-config-mode:reboot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>The node is currently rebooting and will try to connect to other "
|
"<p>Your node <em><%= pcdata(hostname) %></em> is currently rebooting and will "
|
||||||
"nearby Freifunk nodes after that. "
|
"try to connect to other nearby Freifunk nodes after that. For more "
|
||||||
"Your can find lots of information on the Freifunk Duckburg community on "
|
"information about the Freifunk community on Alpha Centauri, have a look at "
|
||||||
"<a href=\"https://entenhausen.freifunk.net/\">our homepage</a>.</p>"
|
"<a href=\"https://alpha-centauri.freifunk.net/\">our homepage</a>.</p>"
|
||||||
"<p>To get back to this configuration interface, press the reset button for "
|
"<p>To get back to this configuration interface, press the reset button for "
|
||||||
"3 seconds during normal operation. The device will then reboot into config "
|
"3 seconds during normal operation. The device will then reboot into config "
|
||||||
"mode.</p>"
|
"mode.</p>"
|
||||||
"<p>Have fun with your node and exploring the Freifunk network!</p>"
|
"<p>Have fun with your node and exploring of the Freifunk network!</p>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-label"
|
||||||
|
msgstr "Altitude"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-help"
|
||||||
|
msgstr ""
|
||||||
|
"Specifying the altitude is optional and should only be done if a proper "
|
||||||
|
"value is known."
|
||||||
|
58
docs/site-example/i18n/fr.po
Normal file
58
docs/site-example/i18n/fr.po
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-08-06 20:28+0100\n"
|
||||||
|
"Last-Translator: Tobias Bernot <tqbs@airmail.cc>\n"
|
||||||
|
"Language-Team: French\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:welcome"
|
||||||
|
msgstr ""
|
||||||
|
"Bienvenue dans l'assistant de configuration pour votre nouveau nœud "
|
||||||
|
"Freifunk. Remplissez le formulaire suivant en fonction de vos besoins "
|
||||||
|
"et enregistrez le"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:pubkey"
|
||||||
|
msgstr ""
|
||||||
|
"<p>Ceci est la clé publique de votre nœud Freifunk. Seulment après que la clé soit "
|
||||||
|
"entrée sur les serveurs de votre groupe de Freifunk votre nœud pourra se connecter "
|
||||||
|
"sur les serveur Mesh-VPN de votre groupe Freifunk. Veuillez envoyer la clé avec le "
|
||||||
|
"nom de votre nœud "
|
||||||
|
"(<em><%=pcdata(hostname)%></em>) à "
|
||||||
|
"<a href=\"mailto:keys@alpha-centauri.freifunk.net?subject=<%= urlencode('Enregistrement: ' .. hostname) %>&"
|
||||||
|
"body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
|
||||||
|
"</p>"
|
||||||
|
"<div class=\"the-key\">"
|
||||||
|
" # <%= pcdata(hostname) %>"
|
||||||
|
" <br />"
|
||||||
|
"<%= pubkey %>"
|
||||||
|
"</div>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:novpn"
|
||||||
|
msgstr ""
|
||||||
|
"<p>Vous avez choisi de <strong>ne pas utiliser</strong> "
|
||||||
|
"le réseau VPN. Votre nœud ne pourra se connecter au réseau Freifunk que si "
|
||||||
|
"d'autres nœuds à portée ont déjà une connexion.</p>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:reboot"
|
||||||
|
msgstr ""
|
||||||
|
"<p>Votre nœud <em><%= pcdata(hostname) %></em> es en train de redémarrer et "
|
||||||
|
"va ensuite éssayer de se connecter avec les autres nœuds du réseau Freifunk "
|
||||||
|
"Vous pourrez trouver plus d'informations sur votre groupe Freifunk sur la page "
|
||||||
|
"<a href=\"https://alpha-centauri.freifunk.net/\"> de ton groupe </a>.</p> "
|
||||||
|
"<p> Pour retrouver cette page de configuration veuillier appuyez pendant le "
|
||||||
|
"fonctionement normal pendant 3 Secondes sur le bouton reset. L'appareil va ensuite "
|
||||||
|
"redémarer en mode configuration.</p> "
|
||||||
|
"<p>Profitez votre de nœud et amusez vous à découvrir le réseau Freifunk!</p>"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-label"
|
||||||
|
msgstr "Hauteur"
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-help"
|
||||||
|
msgstr ""
|
||||||
|
"La altitude est optionelle et ne devrait que être ajoutée si la valeur "
|
||||||
|
"exacte est connue."
|
@ -7,5 +7,14 @@ msgstr ""
|
|||||||
msgid "gluon-config-mode:pubkey"
|
msgid "gluon-config-mode:pubkey"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:novpn"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "gluon-config-mode:reboot"
|
msgid "gluon-config-mode:reboot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-label"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "gluon-config-mode:altitude-help"
|
||||||
|
msgstr ""
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- This is an example site configuration for Gluon v2015.1+
|
-- This is an example site configuration for Gluon v2017.1+
|
||||||
--
|
--
|
||||||
-- Take a look at the documentation located at
|
-- Take a look at the documentation located at
|
||||||
-- http://gluon.readthedocs.org/ for details.
|
-- http://gluon.readthedocs.org/ for details.
|
||||||
@ -10,12 +10,14 @@
|
|||||||
-- hostname_prefix = 'freifunk-',
|
-- hostname_prefix = 'freifunk-',
|
||||||
|
|
||||||
-- Name of the community.
|
-- Name of the community.
|
||||||
site_name = 'Freifunk Entenhausen',
|
site_name = 'Freifunk Alpha Centauri',
|
||||||
|
|
||||||
-- Shorthand of the community.
|
-- Shorthand of the community.
|
||||||
site_code = 'ffxx',
|
site_code = 'ffxx',
|
||||||
|
|
||||||
-- Prefixes used within the mesh. Both are required.
|
-- Prefixes used within the mesh.
|
||||||
|
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
||||||
|
-- is not set.
|
||||||
prefix4 = '10.xxx.0.0/20',
|
prefix4 = '10.xxx.0.0/20',
|
||||||
prefix6 = 'fdxx:xxxx:xxxx::/64',
|
prefix6 = 'fdxx:xxxx:xxxx::/64',
|
||||||
|
|
||||||
@ -35,42 +37,40 @@
|
|||||||
-- Wireless channel.
|
-- Wireless channel.
|
||||||
channel = 1,
|
channel = 1,
|
||||||
|
|
||||||
|
-- List of supported wifi rates (optional)
|
||||||
|
-- Example removes 802.11b compatibility for better performance
|
||||||
|
supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
|
||||||
|
|
||||||
|
-- List of basic wifi rates (optional, required if supported_rates is set)
|
||||||
|
-- Example removes 802.11b compatibility for better performance
|
||||||
|
basic_rate = {6000, 9000, 18000, 36000, 54000},
|
||||||
|
|
||||||
-- ESSID used for client network.
|
-- ESSID used for client network.
|
||||||
ssid = 'entenhausen.freifunk.net',
|
ap = {
|
||||||
|
ssid = 'alpha-centauri.freifunk.net',
|
||||||
|
-- disabled = true, (optional)
|
||||||
|
},
|
||||||
|
|
||||||
-- Specifies the channel width in 802.11n and 802.11ac mode.
|
mesh = {
|
||||||
-- Possible values are:
|
-- Adjust these values!
|
||||||
-- HT20 (single 20MHz channel),
|
id = 'ffxx-mesh',
|
||||||
-- HT40- (2x 20MHz channels, secondary below)
|
mcast_rate = 12000,
|
||||||
-- HT40+ (2x 20MHz channels, secondary above)
|
-- disabled = true, (optional)
|
||||||
htmode = 'HT20',
|
},
|
||||||
|
|
||||||
-- Adjust these values!
|
|
||||||
mesh_ssid = 'xe:xx:xx:xx:xx:xx', -- ESSID used for mesh
|
|
||||||
mesh_bssid = 'xe:xx:xx:xx:xx:xx', -- BSSID used for mesh
|
|
||||||
|
|
||||||
-- Bitrate used for multicast/broadcast packets.
|
|
||||||
mesh_mcast_rate = 12000,
|
|
||||||
|
|
||||||
-- (optional) mesh VLAN on 802.11 ad-hoc interface (1-4095)
|
|
||||||
-- mesh_vlan = 14,
|
|
||||||
-- client_disabled = true,
|
|
||||||
-- mesh_disabled = false,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Wireless configuration for 5 GHz interfaces.
|
-- Wireless configuration for 5 GHz interfaces.
|
||||||
-- This should be equal to the 2.4 GHz variant, except
|
-- This should be equal to the 2.4 GHz variant, except
|
||||||
-- for channel and htmode.
|
-- for channel.
|
||||||
wifi5 = {
|
wifi5 = {
|
||||||
ssid = 'entenhausen.freifunk.net',
|
|
||||||
channel = 44,
|
channel = 44,
|
||||||
htmode = 'HT20',
|
ap = {
|
||||||
mesh_ssid = 'xx:xx:xx:xx:xx:xx',
|
ssid = 'alpha-centauri.freifunk.net',
|
||||||
mesh_bssid = 'xx:xx:xx:xx:xx:xx',
|
},
|
||||||
mesh_mcast_rate = 12000,
|
mesh = {
|
||||||
-- mesh_vlan = 14,
|
id = 'ffxx-mesh',
|
||||||
-- client_disabled = true,
|
mcast_rate = 12000,
|
||||||
-- mesh_disabled = false,
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- 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
|
||||||
@ -84,47 +84,74 @@
|
|||||||
mac = 'xe:xx:xx:xx:xx:xx',
|
mac = 'xe:xx:xx:xx:xx:xx',
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Refer to http://fastd.readthedocs.org/en/latest/ to better understand
|
-- Options specific to routing protocols (optional)
|
||||||
-- what these options do.
|
-- mesh = {
|
||||||
fastd_mesh_vpn = {
|
-- Options specific to the batman-adv routing protocol (optional)
|
||||||
-- List of crypto-methods to use.
|
-- batman_adv = {
|
||||||
methods = {'salsa2012+umac'},
|
-- 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 = {
|
||||||
-- enabled = true,
|
-- enabled = true,
|
||||||
-- configurable = true,
|
mtu = 1280,
|
||||||
|
|
||||||
mtu = 1426,
|
fastd = {
|
||||||
groups = {
|
-- Refer to http://fastd.readthedocs.org/en/latest/ to better understand
|
||||||
backbone = {
|
-- what these options do.
|
||||||
-- Limit number of connected peers to reduce bandwidth.
|
|
||||||
limit = 2,
|
|
||||||
|
|
||||||
-- List of peers.
|
-- List of crypto-methods to use.
|
||||||
peers = {
|
methods = {'salsa2012+umac'},
|
||||||
peer1 = {
|
-- configurable = true,
|
||||||
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
-- syslog_level = 'warn',
|
||||||
|
|
||||||
-- This is a list, so you might add multiple entries.
|
groups = {
|
||||||
remotes = {'ipv4 "xxx.somehost.invalid" port xxxxxx'},
|
backbone = {
|
||||||
},
|
-- Limit number of connected peers to reduce bandwidth.
|
||||||
peer2 = {
|
limit = 1,
|
||||||
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
||||||
-- You can also omit the ipv4 to allow both connection via ipv4 and ipv6
|
-- List of peers.
|
||||||
remotes = {'"xxx.somehost2.invalid" port xxxxx'},
|
peers = {
|
||||||
|
peer1 = {
|
||||||
|
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
||||||
|
|
||||||
|
-- This is a list, so you might add multiple entries.
|
||||||
|
remotes = {'ipv4 "xxx.somehost.invalid" port xxxxxx'},
|
||||||
|
},
|
||||||
|
peer2 = {
|
||||||
|
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
||||||
|
-- You can also omit the ipv4 to allow both connection via ipv4 and ipv6
|
||||||
|
remotes = {'"xxx.somehost2.invalid" port xxxxx'},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- Optional: nested peer groups
|
||||||
|
-- groups = {
|
||||||
|
-- backbone_sub = {
|
||||||
|
-- ...
|
||||||
|
-- },
|
||||||
|
-- ...
|
||||||
|
-- },
|
||||||
},
|
},
|
||||||
|
-- Optional: additional peer groups, possibly with other limits
|
||||||
-- Optional: nested peer groups
|
-- backbone2 = {
|
||||||
-- 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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -167,24 +194,20 @@
|
|||||||
-- },
|
-- },
|
||||||
-- },
|
-- },
|
||||||
|
|
||||||
-- Bandwidth limiting
|
|
||||||
simple_tc = {
|
|
||||||
mesh_vpn = {
|
|
||||||
ifname = 'mesh-vpn',
|
|
||||||
|
|
||||||
-- You may enable it by default here.
|
|
||||||
enabled = false,
|
|
||||||
|
|
||||||
-- Default upload limit (kbit/s).
|
|
||||||
limit_egress = 200,
|
|
||||||
|
|
||||||
-- Default download limit (kbit/s).
|
|
||||||
limit_ingress = 3000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Skip setup mode (config mode) on first boot
|
-- Skip setup mode (config mode) on first boot
|
||||||
-- setup_mode = {
|
-- setup_mode = {
|
||||||
-- skip = true,
|
-- skip = true,
|
||||||
-- },
|
-- },
|
||||||
|
|
||||||
|
-- config_mode = {
|
||||||
|
-- Show/hide the altitude field
|
||||||
|
-- geo_location = {
|
||||||
|
-- show_altitude = false,
|
||||||
|
-- },
|
||||||
|
-- define if the contact field is obligatory (optional)
|
||||||
|
-- owner = {
|
||||||
|
-- obligatory = true
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
## gluon site.mk makefile example
|
## gluon site.mk makefile example
|
||||||
|
|
||||||
## GLUON_SITE_PACKAGES
|
## GLUON_SITE_PACKAGES
|
||||||
# specify gluon/openwrt packages to include here
|
# specify Gluon/LEDE packages to include here
|
||||||
# The gluon-mesh-batman-adv-* package must come first because of the dependency resolution
|
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := \
|
GLUON_SITE_PACKAGES := \
|
||||||
gluon-mesh-batman-adv-15 \
|
|
||||||
gluon-alfred \
|
gluon-alfred \
|
||||||
gluon-announced \
|
gluon-respondd \
|
||||||
gluon-autoupdater \
|
gluon-autoupdater \
|
||||||
gluon-config-mode-autoupdater \
|
gluon-config-mode-autoupdater \
|
||||||
gluon-config-mode-contact-info \
|
gluon-config-mode-contact-info \
|
||||||
@ -17,17 +15,16 @@ GLUON_SITE_PACKAGES := \
|
|||||||
gluon-config-mode-mesh-vpn \
|
gluon-config-mode-mesh-vpn \
|
||||||
gluon-ebtables-filter-multicast \
|
gluon-ebtables-filter-multicast \
|
||||||
gluon-ebtables-filter-ra-dhcp \
|
gluon-ebtables-filter-ra-dhcp \
|
||||||
gluon-luci-admin \
|
gluon-web-admin \
|
||||||
gluon-luci-autoupdater \
|
gluon-web-autoupdater \
|
||||||
gluon-luci-portconfig \
|
gluon-web-network \
|
||||||
gluon-luci-wifi-config \
|
gluon-web-wifi-config \
|
||||||
gluon-next-node \
|
gluon-mesh-batman-adv-15 \
|
||||||
gluon-mesh-vpn-fastd \
|
gluon-mesh-vpn-fastd \
|
||||||
gluon-radvd \
|
gluon-radvd \
|
||||||
gluon-setup-mode \
|
gluon-setup-mode \
|
||||||
gluon-status-page \
|
gluon-status-page \
|
||||||
haveged \
|
haveged \
|
||||||
iptables \
|
|
||||||
iwinfo
|
iwinfo
|
||||||
|
|
||||||
## DEFAULT_GLUON_RELEASE
|
## DEFAULT_GLUON_RELEASE
|
||||||
@ -38,6 +35,7 @@ GLUON_SITE_PACKAGES := \
|
|||||||
|
|
||||||
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
||||||
|
|
||||||
|
# Variables set with ?= can be overwritten from the command line
|
||||||
|
|
||||||
## GLUON_RELEASE
|
## GLUON_RELEASE
|
||||||
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
||||||
@ -46,11 +44,13 @@ DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
|||||||
# would generate images named like this:
|
# would generate images named like this:
|
||||||
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
||||||
|
|
||||||
# Allow overriding the release number from the command line
|
|
||||||
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
||||||
|
|
||||||
# Default priority for updates.
|
# Default priority for updates.
|
||||||
GLUON_PRIORITY ?= 0
|
GLUON_PRIORITY ?= 0
|
||||||
|
|
||||||
|
# Region code required for some images; supported values: us eu
|
||||||
|
GLUON_REGION ?= eu
|
||||||
|
|
||||||
# Languages to include
|
# Languages to include
|
||||||
GLUON_LANGS ?= en de
|
GLUON_LANGS ?= en de
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
Frequently Asked Questions
|
Frequently Asked Questions
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
.. _faq-dns:
|
||||||
|
|
||||||
|
DNS does not work on the nodes
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Gluon nodes will ignore the DNS server on the WAN port for everything except
|
||||||
|
the mesh VPN, which can lead to confusion.
|
||||||
|
|
||||||
|
All normal services on the nodes exclusively use the DNS server on the mesh
|
||||||
|
interface. This DNS server must be announced in router advertisements (using
|
||||||
|
*radvd* or a similar software) from one or more central servers in meshes based
|
||||||
|
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;
|
||||||
|
in this case, the *radvd* is only used to announce the DNS server.
|
||||||
|
@ -4,18 +4,20 @@ Getting Started
|
|||||||
Selecting the right version
|
Selecting the right version
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
Gluon's releases are managed using `Git tags`_. If you're a community getting
|
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. *v2014.3*.
|
e.g. *v2017.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.
|
||||||
|
|
||||||
Please keep in mind that a matching site configuration for your community
|
Please keep in mind that there is no "default Gluon" build; a site configuration
|
||||||
is required. Due to new features being added (or sometimes being removed)
|
is required to adjust Gluon to your needs. Due to new features being added (or
|
||||||
the format of the site configuration changes slightly between releases.
|
sometimes being removed) the format of the site configuration changes slightly
|
||||||
|
between releases. Please refer to our release notes for instructions to update
|
||||||
|
an old site configuration to a newer release of Gluon.
|
||||||
|
|
||||||
Recent releases (starting with *v2014.3.1*) will come with an example
|
An example configuration can be found in the Gluon repository at *docs/site-example/*.
|
||||||
configuration located in *docs/site-example/*.
|
|
||||||
|
|
||||||
.. _Git tags: http://git-scm.com/book/en/Git-Basics-Tagging
|
.. _Git tags: http://git-scm.com/book/en/Git-Basics-Tagging
|
||||||
.. _list of gluon releases: https://github.com/freifunk-gluon/gluon/releases
|
.. _list of gluon releases: https://github.com/freifunk-gluon/gluon/releases
|
||||||
@ -27,18 +29,21 @@ freshly installed Debian Wheezy system the following packages are required:
|
|||||||
|
|
||||||
* `git` (to get Gluon and other dependencies)
|
* `git` (to get Gluon and other dependencies)
|
||||||
* `subversion`
|
* `subversion`
|
||||||
|
* `python` (Python 3 doesn't work)
|
||||||
* `build-essential`
|
* `build-essential`
|
||||||
* `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`
|
||||||
|
* `wget`
|
||||||
|
|
||||||
|
|
||||||
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. *v2015.1*.
|
version you'd like to checkout, e.g. *v2017.1*.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -47,88 +52,157 @@ version you'd like to checkout, e.g. *v2015.1*.
|
|||||||
This command will create a directory named *gluon/*.
|
This command will create a directory named *gluon/*.
|
||||||
It might also tell a scary message about being in a *detached state*.
|
It might also tell a scary message about being in a *detached state*.
|
||||||
**Don't panic!** Everything's fine.
|
**Don't panic!** Everything's fine.
|
||||||
Now, enter the freshly created directory:
|
Now, enter the freshly created directory::
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cd gluon
|
cd gluon
|
||||||
|
|
||||||
It's time to add (or create) your site configuration.
|
It's time to add (or create) your site configuration. If you already
|
||||||
So let's create the directory *site/*:
|
have a site repository, just clone it::
|
||||||
|
|
||||||
::
|
git clone https://github.com/freifunk-alpha-centauri/site-ffac.git site
|
||||||
|
|
||||||
|
If you want to build a new site, create a new git repository *site/*::
|
||||||
|
|
||||||
mkdir site
|
mkdir site
|
||||||
cd site
|
cd site
|
||||||
|
git init
|
||||||
|
|
||||||
Copy *site.conf*, *site.mk* and *i18n* from *docs/site-example*:
|
Copy *site.conf*, *site.mk* and *i18n* from *docs/site-example*::
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cp ../docs/site-example/site.conf .
|
cp ../docs/site-example/site.conf .
|
||||||
cp ../docs/site-example/site.mk .
|
cp ../docs/site-example/site.mk .
|
||||||
cp -r ../docs/site-example/i18n .
|
cp -r ../docs/site-example/i18n .
|
||||||
|
|
||||||
Edit these files to match your community, then go back to the top-level Gluon
|
Edit these files as you see fit and commit them into the site repository.
|
||||||
directory and build Gluon:
|
Extensive documentation about the site configuration can be found at:
|
||||||
|
:doc:`site`. The
|
||||||
|
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.
|
||||||
|
|
||||||
::
|
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
|
||||||
make GLUON_TARGET=ar71xx-generic # Build Gluon
|
make GLUON_TARGET=ar71xx-generic # Build Gluon
|
||||||
|
|
||||||
When calling make, the OpenWrt build environment is prepared/updated.
|
|
||||||
In case of errors read the messages carefully and try to fix the stated issues (e.g. install tools not available yet).
|
In case of errors read the messages carefully and try to fix the stated issues (e.g. install tools not available yet).
|
||||||
|
|
||||||
``ar71xx-generic`` is the most common target and will generated images for most of the supported hardware.
|
``ar71xx-generic`` is the most common target and will generate images for most of the supported hardware.
|
||||||
To see a complete list of supported targets, call ``make`` without setting ``GLUON_TARGET``.
|
To see a complete list of supported targets, call ``make`` without setting ``GLUON_TARGET``.
|
||||||
|
|
||||||
The built images can be found in the directory `images`. Of these, the factory
|
|
||||||
images are to be used when flashing from the original firmware a device came with,
|
|
||||||
and sysupgrade is to upgrade from other versions of Gluon or any other OpenWRT-based
|
|
||||||
system.
|
|
||||||
|
|
||||||
You should reserve about 10GB of disk space for each `GLUON_TARGET`.
|
You should reserve about 10GB of disk space for each `GLUON_TARGET`.
|
||||||
|
|
||||||
There are two levels of `make clean`:
|
The built images can be found in the directory `output/images`. Of these, the `factory`
|
||||||
|
images are to be used when flashing from the original firmware a device came with,
|
||||||
|
and `sysupgrade` is to upgrade from other versions of Gluon or any other OpenWrt/LEDE-based
|
||||||
|
system.
|
||||||
|
|
||||||
::
|
**Note:** The images for some models are identical; to save disk space, symlinks are generated instead
|
||||||
|
of multiple copies of the same image. If your webserver's configuration prohibits following
|
||||||
|
symlinks, you can use the following command to resolve these links while copying the images::
|
||||||
|
|
||||||
|
cp -rL output/images /var/www
|
||||||
|
|
||||||
|
Cleaning the build tree
|
||||||
|
.......................
|
||||||
|
|
||||||
|
There are two levels of `make clean`::
|
||||||
|
|
||||||
make clean GLUON_TARGET=ar71xx-generic
|
make clean GLUON_TARGET=ar71xx-generic
|
||||||
|
|
||||||
will ensure all packages are rebuilt for a single target; this is what you normally want to do after an update.
|
will ensure all packages are rebuilt for a single target. This normally not
|
||||||
|
necessary, but may fix certain kinds of build failures.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
make dirclean
|
make dirclean
|
||||||
|
|
||||||
will clean the entire tree, so the toolchain will be rebuilt as well, which is
|
will clean the entire tree, so the toolchain will be rebuilt as well, which will take a while.
|
||||||
not necessary in most cases, and will take a while.
|
|
||||||
|
|
||||||
|
opkg repositories
|
||||||
|
-----------------
|
||||||
|
|
||||||
Environment variables
|
Gluon is mostly compatible with LEDE, so the normal LEDE package repositories
|
||||||
---------------------
|
can be used for Gluon as well.
|
||||||
|
|
||||||
Gluon's build process can be controlled by various environment variables.
|
This is not true for kernel modules; the Gluon kernel is incompatible with the
|
||||||
|
kernel of the default LEDE images. Therefore, Gluon will not only generate images,
|
||||||
|
but also an opkg repository containing all core packages provided by LEDE,
|
||||||
|
including modules for the kernel of the generated images.
|
||||||
|
|
||||||
GLUON_SITEDIR
|
Signing keys
|
||||||
Path to the site configuration. Defaults to ``site/``.
|
............
|
||||||
|
|
||||||
GLUON_IMAGEDIR
|
Gluon does not support HTTPS for downloading packages; fortunately, opkg deploys
|
||||||
Path where images will be stored. Defaults to ``images/``.
|
public-key cryptography to ensure package integrity.
|
||||||
|
|
||||||
|
The Gluon images will contain public keys from two sources: the official LEDE keyring
|
||||||
|
(to allow installing userspace packages) and a Gluon-specific key (which is used
|
||||||
|
to sign the generated package repository).
|
||||||
|
|
||||||
|
LEDE will handle the generation and handling of the keys itself.
|
||||||
|
When making firmware releases based on Gluon, it might make sense to store
|
||||||
|
the keypair, so updating the module repository later is possible.
|
||||||
|
|
||||||
|
.. _getting-started-make-variables:
|
||||||
|
|
||||||
|
Make variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Gluon's build process can be controlled by various variables. They can
|
||||||
|
usually be set on the command line or in ``site.mk``.
|
||||||
|
|
||||||
|
Common variables
|
||||||
|
................
|
||||||
|
|
||||||
|
GLUON_ATH10K_MESH
|
||||||
|
While Gluon does support some hardware with ath10k-based 5GHz WLAN, these WLAN adapters don't work
|
||||||
|
well for meshing at the moment, so building images for these models is disabled by default. In addition,
|
||||||
|
ath10k can't support IBSS and 11s meshing in the same image due to WLAN firmware restrictions.
|
||||||
|
|
||||||
|
Setting GLUON_ATH10K_MESH to ``11s`` or ``ibss`` will enable generation of images for ath10k devices
|
||||||
|
and install the firmware for the corresponding WLAN mode.
|
||||||
|
|
||||||
|
GLUON_BRANCH
|
||||||
|
Sets the default branch of the autoupdater. If unset, the autoupdater is disabled
|
||||||
|
by default. For the ``make manifest`` command, GLUON_BRANCH defines the branch to
|
||||||
|
generate a manifest for.
|
||||||
|
|
||||||
|
GLUON_LANGS
|
||||||
|
Space-separated list of languages to include for the config mode/advanced settings. Defaults to ``en``.
|
||||||
|
``en`` should always be included, other supported languages are ``de`` and ``fr``.
|
||||||
|
|
||||||
|
GLUON_PRIORITY
|
||||||
|
Defines the priority of an automatic update in ``make manifest``. See :doc:`../features/autoupdater` for
|
||||||
|
a detailed description of this value.
|
||||||
|
|
||||||
|
GLUON_REGION
|
||||||
|
Some devices (at the moment the TP-Link Archer C7) contain a region code that restricts
|
||||||
|
firmware installations. Set GLUON_REGION to ``eu`` or ``us`` to make the resulting
|
||||||
|
images installable from the respective stock firmwares.
|
||||||
|
|
||||||
|
GLUON_RELEASE
|
||||||
|
Firmware release number: This string is displayed in the config mode, announced
|
||||||
|
via respondd/alfred and used by the autoupdater to decide if a newer version
|
||||||
|
is available.
|
||||||
|
|
||||||
|
GLUON_TARGET
|
||||||
|
Target architecture to build.
|
||||||
|
|
||||||
|
Special variables
|
||||||
|
.................
|
||||||
|
|
||||||
GLUON_BUILDDIR
|
GLUON_BUILDDIR
|
||||||
Working directory during build. Defaults to ``build/``.
|
Working directory during build. Defaults to ``build``.
|
||||||
|
|
||||||
|
GLUON_IMAGEDIR
|
||||||
|
Path where images will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/images``.
|
||||||
|
|
||||||
So all in all, to update and rebuild a Gluon build tree, the following commands should be used (repeat the
|
GLUON_PACKAGEDIR
|
||||||
``make clean`` and ``make`` for all targets you want to build):
|
Path where the opkg package repository will be stored. Defaults to ``$(GLUON_OUTPUTDIR)/packages``.
|
||||||
|
|
||||||
::
|
GLUON_OUTPUTDIR
|
||||||
|
Path where output files will be stored. Defaults to ``output``.
|
||||||
|
|
||||||
git pull
|
GLUON_SITEDIR
|
||||||
(cd site && git pull)
|
Path to the site configuration. Defaults to ``site``.
|
||||||
make update
|
|
||||||
make clean GLUON_TARGET=ar71xx-generic
|
|
||||||
make GLUON_TARGET=ar71xx-generic
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Site
|
Site configuration
|
||||||
====
|
==================
|
||||||
|
|
||||||
The ``site`` consists of the files ``site.conf`` and ``site.mk``.
|
The ``site`` consists of the files ``site.conf`` and ``site.mk``.
|
||||||
In the first community based values are defined, which both are processed
|
In the first community based values are defined, which both are processed
|
||||||
@ -21,12 +21,14 @@ site_code
|
|||||||
The code of your community. It is good practice to use the TLD of
|
The code of your community. It is good practice to use the TLD of
|
||||||
your community here.
|
your community here.
|
||||||
|
|
||||||
prefix4
|
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.
|
||||||
|
|
||||||
prefix6
|
prefix6
|
||||||
The IPv6 subnet of your community mesh network, e.g.
|
The IPv6 subnet of your community mesh network, e.g.
|
||||||
::
|
::
|
||||||
@ -44,48 +46,105 @@ ntp_server
|
|||||||
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.ffeh','2.tnp.services.ffeh'}
|
ntp_servers = {'1.ntp.services.ffac','2.ntp.services.ffac'}
|
||||||
|
|
||||||
|
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>`.
|
||||||
|
|
||||||
|
opkg \: optional
|
||||||
|
``opkg`` package manager configuration.
|
||||||
|
|
||||||
|
There are two optional fields in the ``opkg`` section:
|
||||||
|
|
||||||
|
- ``lede`` overrides the default LEDE repository URL. The default URL would
|
||||||
|
correspond to ``http://downloads.lede-project.org/snapshots/packages/%A``
|
||||||
|
and usually doesn't need to be changed when nodes are expected to have IPv6
|
||||||
|
internet connectivity.
|
||||||
|
- ``extra`` specifies a table of additional repositories (with arbitrary keys)
|
||||||
|
|
||||||
opkg_repo : optional
|
|
||||||
Overwrite the default ``opkg`` repository server, e.g.:
|
|
||||||
::
|
::
|
||||||
|
|
||||||
opkg_repo = 'http://opkg.services.ffeh/attitude_adjustment/12.09/%S/packages'
|
opkg = {
|
||||||
|
lede = 'http://opkg.services.ffac/lede/snapshots/packages/%A',
|
||||||
|
extra = {
|
||||||
|
gluon = 'http://opkg.services.ffac/modules/gluon-%GS-%GR/%S',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
The `%S` is a variable, which is replaced with the platform of an device
|
There are various patterns which can be used in the URLs:
|
||||||
during the build process.
|
|
||||||
|
|
||||||
regdom
|
- ``%n`` is replaced by the LEDE version codename
|
||||||
|
- ``%v`` is replaced by the LEDE version number (e.g. "17.01")
|
||||||
|
- ``%S`` is replaced by the target board (e.g. "ar71xx/generic")
|
||||||
|
- ``%A`` is replaced by the target architecture (e.g. "mips_24kc")
|
||||||
|
- ``%GS`` is replaced by the Gluon site code (as specified in ``site.conf``)
|
||||||
|
- ``%GV`` is replaced by the Gluon version
|
||||||
|
- ``%GR`` is replaced by the Gluon release (as specified in ``site.mk``)
|
||||||
|
|
||||||
|
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'
|
||||||
|
|
||||||
wifi24
|
Setting ``regdom`` is mandatory if ``wifi24`` or ``wifi5`` is defined.
|
||||||
WLAN Configuration of your community in the 2.4Ghz radio. Consisting
|
|
||||||
of ``ssid`` of your client network, the ``channel`` your community is using,
|
wifi24 \: optional
|
||||||
``htmode``, the adhoc ssid ``mesh_ssid`` used between devices, the adhoc
|
WLAN configuration for 2.4 GHz devices.
|
||||||
bssid ``mesh_bssid`` and the adhoc multicast rate ``mesh_mcast_rate``.
|
``channel`` must be set to a valid wireless channel for your radio.
|
||||||
Optionally ``mesh_vlan`` can be used to setup VLAN on top of the 802.11
|
|
||||||
ad-hoc interface. The options ``mesh_disabled`` and ``client_disabled``
|
There are currently three interface types available. You many choose to
|
||||||
are optional, too. They allow to disable the SSID by default, e.g. for
|
configure any subset of them:
|
||||||
preconfigured node. This only affects first configuraton.
|
|
||||||
Combined in an dictionary, e.g.:
|
- ``ap`` creates a master interface where clients may connect
|
||||||
|
- ``mesh`` creates an 802.11s mesh interface with forwarding disabled
|
||||||
|
- ``ibss`` creates an ad-hoc interface
|
||||||
|
|
||||||
|
Each interface may be disabled by setting ``disabled`` to ``true``.
|
||||||
|
This will only affect new installations.
|
||||||
|
Upgrades will not change the disabled state.
|
||||||
|
|
||||||
|
Additionally it is possible to configure the ``supported_rates`` and ``basic_rate``
|
||||||
|
of each radio. Both are optional, by default hostapd/driver dictate the rates.
|
||||||
|
If ``supported_rates`` is set, ``basic_rate`` is required, because ``basic_rate``
|
||||||
|
has to be a subset of ``supported_rates``.
|
||||||
|
The example below disables 802.11b rates.
|
||||||
|
|
||||||
|
``ap`` requires a single parameter, a string, named ``ssid`` which sets the
|
||||||
|
interface's ESSID.
|
||||||
|
|
||||||
|
``mesh`` requires a single parameter, a string, named ``id`` which sets the mesh id.
|
||||||
|
|
||||||
|
``ibss`` requires two parametersr: ``ssid`` (a string) and ``bssid`` (a MAC).
|
||||||
|
An optional parameter ``vlan`` (integer) is supported.
|
||||||
|
|
||||||
|
Both ``mesh`` and ``ibss`` accept an optional ``mcast_rate`` (kbit/s) parameter for
|
||||||
|
setting the multicast bitrate. Increasing the default value of 1000 to something
|
||||||
|
like 12000 is recommended.
|
||||||
::
|
::
|
||||||
|
|
||||||
wifi24 = {
|
wifi24 = {
|
||||||
ssid = 'entenhausen.freifunk.net',
|
|
||||||
channel = 11,
|
channel = 11,
|
||||||
htmode = 'HT40-',
|
supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
|
||||||
mesh_ssid = 'ff:ff:ff:ee:ba:be',
|
basic_rate = {6000, 9000, 18000, 36000, 54000},
|
||||||
mesh_bssid = 'ff:ff:ff:ee:ba:be',
|
ap = {
|
||||||
mesh_mcast_rate = 12000,
|
ssid = 'alpha-centauri.freifunk.net',
|
||||||
|
},
|
||||||
|
mesh = {
|
||||||
|
id = 'alpha-centauri-mesh',
|
||||||
|
mcast_rate = 12000,
|
||||||
|
},
|
||||||
|
ibss = {
|
||||||
|
ssid = 'ff:ff:ff:ee:ba:be',
|
||||||
|
bssid = 'ff:ff:ff:ee:ba:be',
|
||||||
|
mcast_rate = 12000,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
wifi5
|
wifi5 \: optional
|
||||||
Same as `wifi24` but for the 5Ghz radio.
|
Same as `wifi24` but for the 5Ghz radio.
|
||||||
|
|
||||||
next_node : package
|
next_node \: package
|
||||||
Configuration of the local node feature of Gluon
|
Configuration of the local node feature of Gluon
|
||||||
::
|
::
|
||||||
|
|
||||||
@ -95,61 +154,156 @@ next_node : package
|
|||||||
mac = 'ca:ff:ee:ba:be:00'
|
mac = 'ca:ff:ee:ba:be:00'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
The IPv4 next-node address is optional.
|
||||||
|
|
||||||
fastd_mesh_vpn
|
mesh \: optional
|
||||||
Remote server setup for the fastd-based mesh VPN.
|
Options specific to routing protocols.
|
||||||
|
|
||||||
The `enabled` option can be set to true to enable the VPN by default.
|
At the moment, only the ``batman_adv`` routing protocol has such options:
|
||||||
|
|
||||||
If `configurable` is `false` or unset, the method list will be replaced on updates
|
The optional value ``gw_sel_class`` sets the gateway selection class. The default
|
||||||
with the list in the site configuration. Setting `configurable` to `true` will allow the user to
|
class 20 is based on the link quality (TQ) only, class 1 is calculated from
|
||||||
add the method ``null`` to the front of the method list or remove ``null`` from it,
|
both the TQ and the announced bandwidth.
|
||||||
and make this change survive updates. Settings configurable is necessary for the
|
::
|
||||||
package `gluon-luci-mesh-vpn-fastd`, which adds a UI for this configuration.
|
|
||||||
|
mesh = {
|
||||||
|
batman_adv = {
|
||||||
|
gw_sel_class = 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mesh_vpn
|
||||||
|
Remote server setup for the mesh VPN.
|
||||||
|
|
||||||
|
The `enabled` option can be set to true to enable the VPN by default. `mtu`
|
||||||
|
defines the MTU of the VPN interface.
|
||||||
|
|
||||||
|
The `fastd` section configures settings specific to the *fastd* VPN
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
If `configurable` is set to `false` or unset, the method list will be replaced on updates
|
||||||
|
with the list from the site configuration. Setting `configurable` to `true` will allow the user to
|
||||||
|
add the method ``null`` to the beginning of the method list or remove ``null`` from it,
|
||||||
|
and make this change survive updates. Setting `configurable` is necessary for the
|
||||||
|
package `gluon-web-mesh-vpn-fastd`, which adds a UI for this configuration.
|
||||||
|
|
||||||
In any case, the ``null`` method should always be the first method in the list
|
In any case, the ``null`` method should always be the first method in the list
|
||||||
if it is supported at all. You should only set `configurable` to `true` if the
|
if it is supported at all. You should only set `configurable` to `true` if the
|
||||||
configured peers support both the ``null`` method and methods with encryption.
|
configured peers support both the ``null`` method and methods with encryption.
|
||||||
|
|
||||||
|
You can set syslog_level from verbose (default) to warn to reduce syslog output.
|
||||||
|
|
||||||
|
The `tunneldigger` section is used to define the *tunneldigger* broker list.
|
||||||
|
|
||||||
|
**Note:** It doesn't make sense to include both `fastd` and `tunneldigger`
|
||||||
|
sections in the same configuration file, as only one of the packages *gluon-mesh-vpn-fastd*
|
||||||
|
and *gluon-mesh-vpn-tunneldigger* should be installed with the current
|
||||||
|
implementation.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
fastd_mesh_vpn = {
|
mesh_vpn = {
|
||||||
methods = {'salsa2012+umac'},
|
-- enabled = true,
|
||||||
-- enabled = true,
|
mtu = 1280,
|
||||||
-- configurable = true,
|
|
||||||
mtu = 1426,
|
fastd = {
|
||||||
groups = {
|
methods = {'salsa2012+umac'},
|
||||||
backbone = {
|
-- configurable = true,
|
||||||
limit = 2,
|
-- syslog_level = 'warn',
|
||||||
peers = {
|
groups = {
|
||||||
peer1 = {
|
backbone = {
|
||||||
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
-- Limit number of connected peers from this group
|
||||||
remotes = {'ipv4 "vpn1.entenhausen.freifunk.net" port 10000'},
|
limit = 1,
|
||||||
|
peers = {
|
||||||
|
peer1 = {
|
||||||
|
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
||||||
|
-- Having multiple domains prevents SPOF in freifunk.net
|
||||||
|
remotes = {
|
||||||
|
'ipv4 "vpn1.alpha-centauri.freifunk.net" port 10000',
|
||||||
|
'ipv4 "vpn1.alpha-centauri-freifunk.de" port 10000',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
peer2 = {
|
||||||
|
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
||||||
|
-- You can also omit the ipv4 to allow both connection via ipv4 and ipv6
|
||||||
|
remotes = {'"vpn2.alpha-centauri.freifunk.net" port 10000'},
|
||||||
|
},
|
||||||
|
peer3 = {
|
||||||
|
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
||||||
|
-- In addition to domains you can also add ip addresses, which provides
|
||||||
|
-- resilience in case of dns outages
|
||||||
|
remotes = {
|
||||||
|
'"vpn3.alpha-centauri.freifunk.net" port 10000',
|
||||||
|
'[2001:db8::3:1]:10000',
|
||||||
|
'192.0.2.3:10000',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
-- Optional: nested peer groups
|
||||||
}
|
-- groups = {
|
||||||
}
|
-- lowend_backbone = {
|
||||||
|
-- limit = 1,
|
||||||
|
-- peers = ...
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
-- Optional: additional peer groups, possibly with other limits
|
||||||
|
-- peertopeer = {
|
||||||
|
-- limit = 10,
|
||||||
|
-- peers = { ... },
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
tunneldigger = {
|
||||||
|
brokers = {'vpn1.alpha-centauri.freifunk.net'}
|
||||||
|
},
|
||||||
|
|
||||||
|
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,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh_on_wan : optional
|
mesh_on_wan \: optional
|
||||||
Enables the mesh on the WAN port (``true`` or ``false``).
|
Enables the mesh on the WAN port (``true`` or ``false``).
|
||||||
|
::
|
||||||
|
|
||||||
mesh_on_lan : optional
|
mesh_on_wan = true,
|
||||||
|
|
||||||
|
mesh_on_lan \: optional
|
||||||
Enables the mesh on the LAN port (``true`` or ``false``).
|
Enables the mesh on the LAN port (``true`` or ``false``).
|
||||||
|
::
|
||||||
|
|
||||||
autoupdater : package
|
mesh_on_lan = true,
|
||||||
|
|
||||||
|
poe_passthrough \: optional
|
||||||
|
Enable PoE passthrough by default on hardware with such a feature.
|
||||||
|
|
||||||
|
autoupdater \: package
|
||||||
Configuration for the autoupdater feature of Gluon.
|
Configuration for the autoupdater feature of Gluon.
|
||||||
|
|
||||||
|
The mirrors are checked in random order until the manifest could be downloaded
|
||||||
|
successfully or all mirrors have been tried.
|
||||||
::
|
::
|
||||||
|
|
||||||
autoupdater = {
|
autoupdater = {
|
||||||
branch = 'experimental',
|
branch = 'stable',
|
||||||
branches = {
|
branches = {
|
||||||
stable = {
|
stable = {
|
||||||
name = 'stable',
|
name = 'stable',
|
||||||
mirrors = {
|
mirrors = {
|
||||||
'http://[fdca:ffee:babe:1::fec1]/firmware/stable/sysupgrade/',
|
'http://[fdca:ffee:babe:1::fec1]/firmware/stable/sysupgrade/',
|
||||||
'http://[fdca:ffee:babe:1::fec2]/firmware/stable/sysupgrade/',
|
'http://autoupdate.alpha-centauri.freifunk.net/firmware/stable/sysupgrade/',
|
||||||
},
|
},
|
||||||
probability = 0.08,
|
-- Number of good signatures required
|
||||||
good_signatures = 2,
|
good_signatures = 2,
|
||||||
pubkeys = {
|
pubkeys = {
|
||||||
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', -- someguy
|
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', -- someguy
|
||||||
@ -159,18 +313,21 @@ autoupdater : package
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
roles : optional
|
All configured mirrors must be reachable from the nodes via IPv6. If you don't want to set an IPv6 address
|
||||||
Optional role definitions. With this nodes will announce their role inside the mesh.
|
explicitly, but use a hostname (which is recommended), see also the :ref:`FAQ <faq-dns>`.
|
||||||
In the backend this adds the facility to distinguish between normal, backbone and
|
|
||||||
service nodes or even gateways (if they advertise the role, also). It is up to
|
roles \: optional
|
||||||
|
Optional role definitions. Nodes will announce their role inside the mesh.
|
||||||
|
This will allow in the backend to distinguish between normal, backbone and
|
||||||
|
service nodes or even gateways (if they advertise that role). It is up to
|
||||||
the community which roles to define. See the section below as an example.
|
the community which roles to define. See the section below as an example.
|
||||||
``default`` takes the default role which is set initially. This value should be
|
``default`` takes the default role which is set initially. This value should be
|
||||||
part of ``list``. If you want node owners to change the role via config mode add
|
part of ``list``. If you want node owners to change the role via config mode add
|
||||||
the package ``gluon-luci-node-role`` to ``site.mk``.
|
the package ``gluon-web-node-role`` to ``site.mk``.
|
||||||
|
|
||||||
The strings to display in the LuCI interface can be configured per language in the
|
The strings to display in the web interface are configured per language in the
|
||||||
``i18n/en.po``, ``i18n/de.po``, etc. files of the site repository using message IDs like
|
``i18n/en.po``, ``i18n/de.po``, etc. files of the site repository using message IDs like
|
||||||
``gluon-luci-node-role:role:node`` and ``gluon-luci-node-role:role:backbone``.
|
``gluon-web-node-role:role:node`` and ``gluon-web-node-role:role:backbone``.
|
||||||
::
|
::
|
||||||
|
|
||||||
roles = {
|
roles = {
|
||||||
@ -183,20 +340,7 @@ roles : optional
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
simple_tc : package
|
setup_mode \: package
|
||||||
Uplink traffic control, ingress and egress values are specified in kbit/s.
|
|
||||||
::
|
|
||||||
|
|
||||||
simple_tc = {
|
|
||||||
mesh_vpn = {
|
|
||||||
ifname = 'mesh-vpn',
|
|
||||||
enabled = false,
|
|
||||||
limit_egress = 200,
|
|
||||||
limit_ingress = 3000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
setup_mode : package
|
|
||||||
Allows skipping setup mode (config mode) at first boot when attribute
|
Allows skipping setup mode (config mode) at first boot when attribute
|
||||||
``skip`` is set to ``true``. This is optional and may be left out.
|
``skip`` is set to ``true``. This is optional and may be left out.
|
||||||
::
|
::
|
||||||
@ -205,16 +349,16 @@ setup_mode : package
|
|||||||
skip = true,
|
skip = true,
|
||||||
},
|
},
|
||||||
|
|
||||||
legacy : package
|
legacy \: package
|
||||||
Configuration for the legacy upgrade path.
|
Configuration for the legacy upgrade path.
|
||||||
This is only required in communities upgrading from Lübeck's LFF-0.3.x.
|
This is only required in communities upgrading from Lübeck's LFF-0.3.x.
|
||||||
::
|
::
|
||||||
|
|
||||||
legacy = {
|
legacy = {
|
||||||
version_files = {'/etc/.freifunk_version_keep', '/etc/.eff_version_keep'},
|
version_files = {'/etc/.freifunk_version_keep', '/etc/.eff_version_keep'},
|
||||||
old_files = {'/etc/config/config_mode', '/etc/config/ffeh', '/etc/config/freifunk'},
|
old_files = {'/etc/config/config_mode', '/etc/config/ffac', '/etc/config/freifunk'},
|
||||||
config_mode_configs = {'config_mode', 'ffeh', 'freifunk'},
|
config_mode_configs = {'config_mode', 'ffac', 'freifunk'},
|
||||||
fastd_configs = {'ffeh_mesh_vpn', 'mesh_vpn'},
|
fastd_configs = {'ffac_mesh_vpn', 'mesh_vpn'},
|
||||||
mesh_ifname = 'freifunk',
|
mesh_ifname = 'freifunk',
|
||||||
tc_configs = {'ffki', 'freifunk'},
|
tc_configs = {'ffki', 'freifunk'},
|
||||||
wifi_names = {'wifi_freifunk', 'wifi_freifunk5', 'wifi_mesh', 'wifi_mesh5'},
|
wifi_names = {'wifi_freifunk', 'wifi_freifunk5', 'wifi_mesh', 'wifi_mesh5'},
|
||||||
@ -227,8 +371,8 @@ The ``site.mk`` is a Makefile which should define constants
|
|||||||
involved in the build process of Gluon.
|
involved in the build process of Gluon.
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES
|
GLUON_SITE_PACKAGES
|
||||||
Defines a list of packages which should installed additional
|
Defines a list of packages which should be installed additionally
|
||||||
to the ``gluon_core`` package.
|
to the ``gluon-core`` package.
|
||||||
|
|
||||||
GLUON_RELEASE
|
GLUON_RELEASE
|
||||||
The current release version Gluon should use.
|
The current release version Gluon should use.
|
||||||
@ -237,8 +381,12 @@ GLUON_PRIORITY
|
|||||||
The default priority for the generated manifests (see the autoupdater documentation
|
The default priority for the generated manifests (see the autoupdater documentation
|
||||||
for more information).
|
for more information).
|
||||||
|
|
||||||
|
GLUON_REGION
|
||||||
|
Region code to build into images where necessary. Valid values are the empty string,
|
||||||
|
``us`` and ``eu``.
|
||||||
|
|
||||||
GLUON_LANGS
|
GLUON_LANGS
|
||||||
List of languages (as two-letter-codes) to include for the web interface. Should always contain
|
List of languages (as two-letter-codes) to be included in the web interface. Should always contain
|
||||||
``en``.
|
``en``.
|
||||||
|
|
||||||
.. _site-config-mode-texts:
|
.. _site-config-mode-texts:
|
||||||
@ -255,14 +403,67 @@ gluon-config-mode:welcome
|
|||||||
gluon-config-mode:pubkey
|
gluon-config-mode:pubkey
|
||||||
Information about the public VPN key on the reboot page.
|
Information about the public VPN key on the reboot page.
|
||||||
|
|
||||||
|
gluon-config-mode:novpn
|
||||||
|
Information shown on the reboot page, if the mesh VPN was not selected.
|
||||||
|
|
||||||
|
gluon-config-mode:altitude-label
|
||||||
|
Label for the ``altitude`` field
|
||||||
|
|
||||||
|
gluon-config-mode:altitude-help
|
||||||
|
Description for the usage of the ``altitude`` field
|
||||||
|
|
||||||
gluon-config-mode:reboot
|
gluon-config-mode:reboot
|
||||||
General information about the reboot page.
|
General information shown on the reboot page.
|
||||||
|
|
||||||
There is a POT file in the site example directory which can be used to create templates
|
There is a POT file in the site example directory which can be used to create templates
|
||||||
for the language files. The command ``msginit -l en -i ../../docs/site-example/i18n/gluon-site.pot``
|
for the language files. The command ``msginit -l en -i ../../docs/site-example/i18n/gluon-site.pot``
|
||||||
can be used from the ``i18n`` directory to create an initial PO file called ``en.po`` if the ``gettext``
|
can be used from the ``i18n`` directory to create an initial PO file called ``en.po`` if the ``gettext``
|
||||||
utilities are installed.
|
utilities are installed.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
An empty ``msgstr``, as is the default after running ``msginit``, leads to
|
||||||
|
the ``msgid`` being printed as-is. It does *not* hide the whole text, as
|
||||||
|
might be expected.
|
||||||
|
|
||||||
|
Depending on the context, you might be able to use comments like
|
||||||
|
``<!-- empty -->`` as translations to effectively hide the text.
|
||||||
|
|
||||||
|
Site modules
|
||||||
|
------------
|
||||||
|
|
||||||
|
The file ``modules`` in the site repository is completely optional and can be used
|
||||||
|
to supply additional package feeds from which packages are built. The git repositories
|
||||||
|
specified here are retrieved in addition to the default feeds when ``make update``
|
||||||
|
it called.
|
||||||
|
|
||||||
|
This file's format is very similar to the toplevel ``modules`` file of the Gluon
|
||||||
|
tree, with the important different that the list of feeds must be assigned to
|
||||||
|
the variable ``GLUON_SITE_FEEDS``. Multiple feed names must be separated by spaces,
|
||||||
|
for example::
|
||||||
|
|
||||||
|
GLUON_SITE_FEEDS='foo bar'
|
||||||
|
|
||||||
|
The feed names may only contain alphanumerical characters, underscores and slashes.
|
||||||
|
For each of the feeds, the following variables are used to specify how to update
|
||||||
|
the feed:
|
||||||
|
|
||||||
|
PACKAGES_${feed}_REPO
|
||||||
|
The URL of the git repository to clone (usually ``git://`` or ``http(s)://``)
|
||||||
|
|
||||||
|
PACKAGES_${feed}_COMMIT
|
||||||
|
The commit ID of the repository to use
|
||||||
|
|
||||||
|
PACKAGES_${feed}_BRANCH
|
||||||
|
Optional: The branch of the repository the given commit ID can be found in.
|
||||||
|
Defaults to the default branch of the repository (usually ``master``)
|
||||||
|
|
||||||
|
These variables are always all uppercase, so for an entry ``foo`` in GLUON_SITE_FEEDS,
|
||||||
|
the corresponding configuration variables would be ``PACKAGES_FOO_REPO``,
|
||||||
|
``PACKAGES_FOO_COMMIT`` and ``PACKAGES_FOO_BRANCH``. Slashes in feed names are
|
||||||
|
replaced by underscores to get valid shell variable identifiers.
|
||||||
|
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
||||||
@ -301,22 +502,37 @@ site-repos in the wild
|
|||||||
|
|
||||||
This is a non-exhaustive list of site-repos from various communities:
|
This is a non-exhaustive list of site-repos from various communities:
|
||||||
|
|
||||||
|
* `site-ffa <https://github.com/tecff/site-ffa>`_ (Altdorf, Landshut & Umgebung)
|
||||||
|
* `site-ffac <https://github.com/ffac/site>`_ (Regio Aachen)
|
||||||
* `site-ffbs <https://github.com/ffbs/site-ffbs>`_ (Braunschweig)
|
* `site-ffbs <https://github.com/ffbs/site-ffbs>`_ (Braunschweig)
|
||||||
* `site-ffhb <https://github.com/FreifunkBremen/gluon-site-ffhb>`_ (Bremen)
|
* `site-ffhb <https://github.com/FreifunkBremen/gluon-site-ffhb>`_ (Bremen)
|
||||||
* `site-ffda <https://github.com/freifunk-darmstadt/site-ffda>`_ (Darmstadt)
|
* `site-ffda <https://github.com/freifunk-darmstadt/site-ffda>`_ (Darmstadt)
|
||||||
|
* `site-ffeh <https://github.com/freifunk-ehingen/site-ffeh>`_ (Ehingen)
|
||||||
|
* `site-fffl <https://github.com/freifunk-flensburg/site-fffl>`_ (Flensburg)
|
||||||
* `site-ffgoe <https://github.com/freifunk-goettingen/site-ffgoe>`_ (Göttingen)
|
* `site-ffgoe <https://github.com/freifunk-goettingen/site-ffgoe>`_ (Göttingen)
|
||||||
|
* `site-ffgt-rhw <https://github.com/ffgtso/site-ffgt-rhw>`_ (Guetersloh)
|
||||||
* `site-ffhh <https://github.com/freifunkhamburg/site-ffhh>`_ (Hamburg)
|
* `site-ffhh <https://github.com/freifunkhamburg/site-ffhh>`_ (Hamburg)
|
||||||
|
* `site-ffho <https://git.c3pb.de/freifunk-pb/site-ffho>`_ (Hochstift)
|
||||||
* `site-ffhgw <https://github.com/lorenzo-greifswald/site-ffhgw>`_ (Greifswald)
|
* `site-ffhgw <https://github.com/lorenzo-greifswald/site-ffhgw>`_ (Greifswald)
|
||||||
* `site-ffhl <https://github.com/freifunk-luebeck/site-ffhl>`_ (Lübeck)
|
|
||||||
* `site-ffmd <https://github.com/FreifunkMD/site-ffmd>`_ (Magdeburg)
|
|
||||||
* `site-ffmwu <https://github.com/freifunk-mwu/site-ffmwu>`_ (Mainz, Wiesbaden & Umgebung)
|
|
||||||
* `site-ffmyk <https://github.com/FreifunkMYK/site-ffmyk>`_ (Mayen-Koblenz)
|
|
||||||
* `site-ffm <https://github.com/freifunkMUC/site-ffm>`_ (München)
|
|
||||||
* `site-ffms <https://github.com/FreiFunkMuenster/site-ffms>`_ (Münster)
|
|
||||||
* `site-ffnw <https://git.freifunk-ol.de/root/siteconf.git>`_ (Nordwest)
|
|
||||||
* `site-ffpb <https://git.c3pb.de/freifunk-pb/site-ffpb>`_ (Paderborn)
|
|
||||||
* `site-ffka <https://github.com/ffka/site-ffka>`_ (Karlsruhe)
|
* `site-ffka <https://github.com/ffka/site-ffka>`_ (Karlsruhe)
|
||||||
* `site-ffrl <https://github.com/ffrl/sites-ffrl>`_ (Rheinland)
|
* `site-ffki <http://git.freifunk.in-kiel.de/ffki-site/>`_ (Kiel)
|
||||||
* `site-ffrg <https://github.com/ffruhr/site-ffruhr>`_ (Ruhrgebiet)
|
* `site-fflz <https://github.com/freifunk-lausitz/site-fflz>`_ (Lausitz)
|
||||||
|
* `site-ffl <https://github.com/freifunk-leipzig/freifunk-gluon-leipzig>`_ (Leipzig)
|
||||||
|
* `site-ffhl <https://github.com/freifunk-luebeck/site-ffhl>`_ (Lübeck)
|
||||||
|
* `site-fflg <https://github.com/kartenkarsten/site-fflg>`_ (Lüneburg)
|
||||||
|
* `site-ffmd <https://github.com/FreifunkMD/site-ffmd>`_ (Magdeburg)
|
||||||
|
* `site-ffmwu <https://github.com/freifunk-mwu/sites-ffmwu>`_ (Mainz, Wiesbaden & Umgebung)
|
||||||
|
* `site-ffmyk <https://github.com/FreifunkMYK/site-ffmyk>`_ (Mayen-Koblenz)
|
||||||
|
* `site-ffmo <https://github.com/ffruhr/site-ffmo>`_ (Moers)
|
||||||
|
* `site-ffmg <https://github.com/ffruhr/site-ffmg>`_ (Mönchengladbach)
|
||||||
|
* `site-ffm <https://github.com/freifunkMUC/site-ffm>`_ (München)
|
||||||
|
* `site-ffhmue <https://github.com/Freifunk-Muenden/site-conf>`_ (Münden)
|
||||||
|
* `site-ffms <https://github.com/FreiFunkMuenster/site-ffms>`_ (Münsterland)
|
||||||
|
* `site-neuss <https://github.com/ffne/site-neuss>`_ (Neuss)
|
||||||
|
* `site-ffniers <https://github.com/ffruhr/site-ffniers>`_ (Niersufer)
|
||||||
|
* `site-ffnw <https://git.nordwest.freifunk.net/ffnw-firmware/siteconf/tree/master>`_ (Nordwest)
|
||||||
|
* `site-ffrgb <https://github.com/ffrgb/site-ffrgb>`_ (Regensburg)
|
||||||
|
* `site-ffrn <https://github.com/Freifunk-Rhein-Neckar/site-ffrn>`_ (Rhein-Neckar)
|
||||||
|
* `site-ffruhr <https://github.com/ffruhr?utf8=✓&query=site>`_ (Ruhrgebiet, Multi-Communities)
|
||||||
* `site-ffs <https://github.com/freifunk-stuttgart/site-ffs>`_ (Stuttgart)
|
* `site-ffs <https://github.com/freifunk-stuttgart/site-ffs>`_ (Stuttgart)
|
||||||
* `site-fftr <https://github.com/freifunktrier/site-fftr>`_ (Trier)
|
* `site-fftr <https://github.com/freifunktrier/site-fftr>`_ (Trier)
|
||||||
|
@ -2,12 +2,12 @@ x86 support
|
|||||||
===========
|
===========
|
||||||
|
|
||||||
Gluon can run on normal x86 systems, for example virtual machines
|
Gluon can run on normal x86 systems, for example virtual machines
|
||||||
and VPN boxes. There is no WLAN support on x86 though.
|
and VPN boxes. By default, there is no WLAN support on x86 though.
|
||||||
|
|
||||||
Targets
|
Targets
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
|
|
||||||
There are two targets for x86 images:
|
The following targets for x86 images exist:
|
||||||
|
|
||||||
`x86-generic`
|
`x86-generic`
|
||||||
Generic x86 support with many different ethernet drivers; should run on
|
Generic x86 support with many different ethernet drivers; should run on
|
||||||
@ -22,8 +22,8 @@ There are two targets for x86 images:
|
|||||||
These images only differ in the image file format, the content is the same. Therefore there is
|
These images only differ in the image file format, the content is the same. Therefore there is
|
||||||
only a single `x86-generic` sysupgrade image instead of three.
|
only a single `x86-generic` sysupgrade image instead of three.
|
||||||
|
|
||||||
Please note that the `x86-generic` image doesn't include VirtIO support, so another virtual NIC
|
`x86-geode`
|
||||||
like `pcnet32` must be chosen when using VirtualBox.
|
x86 image for Geode CPUs.
|
||||||
|
|
||||||
`x86-kvm`
|
`x86-64`
|
||||||
The `x86-kvm` image uses VirtIO as its harddisk and network driver.
|
64bit version of `x86-generic`.
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
# code adjusted from openwrt/include/kernel-defaults.mk
|
|
||||||
|
|
||||||
override define Kernel/Configure
|
|
||||||
$(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target
|
|
||||||
# copy CONFIG_KERNEL_* settings over to .config.target
|
|
||||||
awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(BOARD_BUILDDIR)/config-allmods >> $(LINUX_DIR)/.config.target
|
|
||||||
echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target
|
|
||||||
echo "# CONFIG_KALLSYMS_ALL is not set" >> $(LINUX_DIR)/.config.target
|
|
||||||
echo "# CONFIG_KALLSYMS_UNCOMPRESSED is not set" >> $(LINUX_DIR)/.config.target
|
|
||||||
$(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo $(BOARD_BUILDDIR)/config-allmods $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override
|
|
||||||
$(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config
|
|
||||||
$(call Kernel/SetNoInitramfs)
|
|
||||||
rm -rf $(KERNEL_BUILD_DIR)/modules
|
|
||||||
$(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(MAKE) $(KERNEL_MAKEOPTS) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install
|
|
||||||
cp $(GLUONDIR)/targets/$(GLUON_TARGET)/vermagic $(LINUX_DIR)/.vermagic
|
|
||||||
endef
|
|
||||||
|
|
||||||
# The Makefile included here is $(TOPDIR)/target/linux/$(BOARD)/Makefile
|
|
||||||
include Makefile
|
|
@ -1,22 +0,0 @@
|
|||||||
CONFIG_IMAGEOPT=y
|
|
||||||
# CONFIG_PER_FEED_REPO is not set
|
|
||||||
|
|
||||||
CONFIG_DEVEL=y
|
|
||||||
|
|
||||||
CONFIG_BUSYBOX_CUSTOM=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_SHA512SUM=y
|
|
||||||
# CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
|
|
||||||
CONFIG_BUSYBOX_CONFIG_IP=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ADDRESS=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_LINK=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_TUNNEL=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RULE=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_IP_SHORT_FORMS=y
|
|
||||||
CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT=y
|
|
||||||
|
|
||||||
CONFIG_ATH_USER_REGD=y
|
|
||||||
CONFIG_PACKAGE_ATH_DEBUG=y
|
|
||||||
CONFIG_ATH10K_CT_COMMUNITY_FW=y
|
|
||||||
|
|
||||||
CONFIG_LUCI_SRCDIET=y
|
|
@ -1,72 +0,0 @@
|
|||||||
ifneq ($(__gluon_inc),1)
|
|
||||||
__gluon_inc=1
|
|
||||||
|
|
||||||
GLUON_SITEDIR ?= $(GLUONDIR)/site
|
|
||||||
GLUON_IMAGEDIR ?= $(GLUONDIR)/images
|
|
||||||
GLUON_BUILDDIR ?= $(GLUONDIR)/build
|
|
||||||
|
|
||||||
GLUON_ORIGOPENWRTDIR := $(GLUONDIR)/openwrt
|
|
||||||
GLUON_SITE_CONFIG := $(GLUON_SITEDIR)/site.conf
|
|
||||||
|
|
||||||
export GLUONDIR GLUON_SITEDIR GLUON_SITE_CONFIG GLUON_IMAGEDIR GLUON_BUILDDIR
|
|
||||||
|
|
||||||
|
|
||||||
BOARD_BUILDDIR = $(GLUON_BUILDDIR)/$(GLUON_TARGET)
|
|
||||||
BOARD_KDIR = $(BOARD_BUILDDIR)/kernel
|
|
||||||
|
|
||||||
export BOARD_BUILDDIR
|
|
||||||
|
|
||||||
GLUON_OPENWRTDIR = $(BOARD_BUILDDIR)/openwrt
|
|
||||||
|
|
||||||
|
|
||||||
$(GLUON_SITEDIR)/site.mk:
|
|
||||||
$(error There was no site configuration found. Please check out a site configuration to $(GLUON_SITEDIR))
|
|
||||||
|
|
||||||
-include $(GLUON_SITEDIR)/site.mk
|
|
||||||
|
|
||||||
|
|
||||||
GLUON_VERSION := $(shell cd $(GLUONDIR) && git describe --always 2>/dev/null || echo unknown)
|
|
||||||
export GLUON_VERSION
|
|
||||||
|
|
||||||
GLUON_LANGS ?= en
|
|
||||||
export GLUON_LANGS
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(OPENWRT_BUILD),1)
|
|
||||||
ifeq ($(GLUON_TOOLS),1)
|
|
||||||
|
|
||||||
CONFIG_VERSION_REPO := $(shell $(GLUONDIR)/scripts/site.sh opkg_repo || echo http://downloads.openwrt.org/chaos_calmer/15.05-rc1/%S/packages)
|
|
||||||
export CONFIG_VERSION_REPO
|
|
||||||
|
|
||||||
GLUON_SITE_CODE := $(shell $(GLUONDIR)/scripts/site.sh site_code)
|
|
||||||
export GLUON_SITE_CODE
|
|
||||||
|
|
||||||
ifeq ($(GLUON_RELEASE),)
|
|
||||||
$(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line.)
|
|
||||||
endif
|
|
||||||
export GLUON_RELEASE
|
|
||||||
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
define merge-lists
|
|
||||||
$(1) :=
|
|
||||||
$(foreach var,$(2),$(1) := $$(filter-out -% $$(patsubst -%,%,$$(filter -%,$$($(var)))),$$($(1)) $$($(var)))
|
|
||||||
)
|
|
||||||
endef
|
|
||||||
|
|
||||||
GLUON_TARGETS :=
|
|
||||||
|
|
||||||
define GluonTarget
|
|
||||||
gluon_target := $(1)$$(if $(2),-$(2))
|
|
||||||
GLUON_TARGETS += $$(gluon_target)
|
|
||||||
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
|
||||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
|
||||||
endef
|
|
||||||
|
|
||||||
GLUON_DEFAULT_PACKAGES := gluon-core kmod-ipv6 firewall ip6tables -uboot-envtools -wpad-mini hostapd-mini
|
|
||||||
|
|
||||||
override DEFAULT_PACKAGES.router :=
|
|
||||||
|
|
||||||
endif #__gluon_inc
|
|
@ -1,35 +0,0 @@
|
|||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
# Annoyingly, make's shell function replaces all newlines with spaces, so we have to do some escaping work. Yuck.
|
|
||||||
define GluonCheckSite
|
|
||||||
[ -z "$$GLUONDIR" ] || sed -e 's/-@/\n/g' -e 's/+@/@/g' <<'END__GLUON__CHECK__SITE' | "$$GLUONDIR"/scripts/check_site.sh
|
|
||||||
$(shell cat $(1) | sed -ne '1h; 1!H; $$ {g; s/@/+@/g; s/\n/-@/g; p}')
|
|
||||||
END__GLUON__CHECK__SITE
|
|
||||||
endef
|
|
||||||
|
|
||||||
# Languages supported by LuCi
|
|
||||||
GLUON_SUPPORTED_LANGS := ca zh_cn en fr de el he hu it ja ms no pl pt_br pt ro ru es sv uk vi
|
|
||||||
|
|
||||||
GLUON_I18N_PACKAGES := $(foreach lang,$(GLUON_SUPPORTED_LANGS),+LUCI_LANG_$(lang):luci-i18n-base-$(lang))
|
|
||||||
GLUON_I18N_CONFIG := $(foreach lang,$(GLUON_SUPPORTED_LANGS),CONFIG_LUCI_LANG_$(lang))
|
|
||||||
GLUON_ENABLED_LANGS := $(foreach lang,$(GLUON_SUPPORTED_LANGS),$(if $(CONFIG_LUCI_LANG_$(lang)),$(lang)))
|
|
||||||
|
|
||||||
|
|
||||||
define GluonBuildI18N
|
|
||||||
mkdir -p $$(PKG_BUILD_DIR)/i18n
|
|
||||||
for lang in $$(GLUON_ENABLED_LANGS); do \
|
|
||||||
if [ -e $(2)/$$$$lang.po ]; then \
|
|
||||||
rm -f $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
|
||||||
po2lmo $(2)/$$$$lang.po $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
endef
|
|
||||||
|
|
||||||
define GluonInstallI18N
|
|
||||||
$$(INSTALL_DIR) $(2)/usr/lib/lua/luci/i18n
|
|
||||||
for lang in $$(GLUON_ENABLED_LANGS); do \
|
|
||||||
if [ -e $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo ]; then \
|
|
||||||
$$(INSTALL_DATA) $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo $(2)/usr/lib/lua/luci/i18n/$(1).$$$$lang.lmo; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
endef
|
|
@ -1,62 +0,0 @@
|
|||||||
# Makefile for OpenWrt
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007-2012 OpenWrt.org
|
|
||||||
# Copyright (C) 2013-2014 Project Gluon
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
RELEASE:=Barrier Breaker
|
|
||||||
PREP_MK= OPENWRT_BUILD= QUIET=0
|
|
||||||
|
|
||||||
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
|
||||||
|
|
||||||
include $(GLUONDIR)/include/verbose.mk
|
|
||||||
|
|
||||||
REVISION:=$(shell [ -d $(TOPDIR) ] && cd $(TOPDIR) && ./scripts/getver.sh 2>/dev/null)
|
|
||||||
|
|
||||||
HOSTCC ?= gcc
|
|
||||||
OPENWRTVERSION:=$(RELEASE)$(if $(REVISION), ($(REVISION)))
|
|
||||||
export RELEASE
|
|
||||||
export REVISION
|
|
||||||
export OPENWRTVERSION
|
|
||||||
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
|
||||||
export LD_LIBRARY_PATH:=$(subst ::,:,$(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib)
|
|
||||||
export DYLD_LIBRARY_PATH:=$(subst ::,:,$(if $(DYLD_LIBRARY_PATH),$(DYLD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib)
|
|
||||||
export GIT_CONFIG_PARAMETERS='core.autocrlf=false'
|
|
||||||
export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS))
|
|
||||||
|
|
||||||
# prevent perforce from messing with the patch utility
|
|
||||||
unexport P4PORT P4USER P4CONFIG P4CLIENT
|
|
||||||
|
|
||||||
# prevent user defaults for quilt from interfering
|
|
||||||
unexport QUILT_PATCHES QUILT_PATCH_OPTS
|
|
||||||
|
|
||||||
unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
|
|
||||||
|
|
||||||
# prevent distro default LPATH from interfering
|
|
||||||
unexport LPATH
|
|
||||||
|
|
||||||
# make sure that a predefined CFLAGS variable does not disturb packages
|
|
||||||
export CFLAGS=
|
|
||||||
|
|
||||||
ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),)
|
|
||||||
export HOSTCC_REAL?=$(HOSTCC)
|
|
||||||
export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper
|
|
||||||
else
|
|
||||||
export HOSTCC_WRAPPER:=$(HOSTCC)
|
|
||||||
endif
|
|
||||||
|
|
||||||
SCAN_COOKIE?=$(shell echo $$$$)
|
|
||||||
export SCAN_COOKIE
|
|
||||||
|
|
||||||
SUBMAKE:=umask 022; $(SUBMAKE)
|
|
||||||
|
|
||||||
ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024;
|
|
||||||
|
|
||||||
FORCE: ;
|
|
||||||
|
|
||||||
.PHONY: FORCE
|
|
||||||
.NOTPARALLEL:
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
ifndef OPENWRT_VERBOSE
|
|
||||||
OPENWRT_VERBOSE:=
|
|
||||||
endif
|
|
||||||
ifeq ("$(origin V)", "command line")
|
|
||||||
OPENWRT_VERBOSE:=$(V)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(OPENWRT_VERBOSE),1)
|
|
||||||
OPENWRT_VERBOSE:=w
|
|
||||||
endif
|
|
||||||
ifeq ($(OPENWRT_VERBOSE),99)
|
|
||||||
OPENWRT_VERBOSE:=s
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(NO_TRACE_MAKE),)
|
|
||||||
NO_TRACE_MAKE := $(MAKE) V=s$(OPENWRT_VERBOSE)
|
|
||||||
export NO_TRACE_MAKE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(IS_TTY),1)
|
|
||||||
ifneq ($(strip $(NO_COLOR)),1)
|
|
||||||
_Y:=\\033[33m
|
|
||||||
_R:=\\033[31m
|
|
||||||
_N:=\\033[m
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(findstring s,$(OPENWRT_VERBOSE)),)
|
|
||||||
define MESSAGE
|
|
||||||
printf "$(_Y)%s$(_N)\n" "$(1)" >&8
|
|
||||||
endef
|
|
||||||
|
|
||||||
define ERROR_MESSAGE
|
|
||||||
printf "$(_R)%s$(_N)\n" "$(1)" >&8
|
|
||||||
endef
|
|
||||||
|
|
||||||
ifeq ($(QUIET),1)
|
|
||||||
ifneq ($(CURDIR),$(TOPDIR))
|
|
||||||
_DIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
|
||||||
else
|
|
||||||
_DIR:=
|
|
||||||
endif
|
|
||||||
_NULL:=$(if $(MAKECMDGOALS),$(shell \
|
|
||||||
$(call MESSAGE, make[$(MAKELEVEL)]$(if $(_DIR), -C $(_DIR)) $(MAKECMDGOALS)); \
|
|
||||||
))
|
|
||||||
SUBMAKE=$(MAKE)
|
|
||||||
else
|
|
||||||
SILENT:=>/dev/null $(if $(findstring w,$(OPENWRT_VERBOSE)),,2>&1)
|
|
||||||
export QUIET:=1
|
|
||||||
SUBMAKE=cmd() { $(SILENT) $(MAKE) -s $$* < /dev/null || { echo "make $$*: build failed. Please re-run make with V=s to see what's going on"; false; } } 8>&1 9>&2; cmd
|
|
||||||
endif
|
|
||||||
|
|
||||||
.SILENT: $(MAKECMDGOALS)
|
|
||||||
else
|
|
||||||
SUBMAKE=$(MAKE) -w
|
|
||||||
define MESSAGE
|
|
||||||
printf "%s\n" "$(1)"
|
|
||||||
endef
|
|
||||||
ERROR_MESSAGE=$(MESSAGE)
|
|
||||||
endif
|
|
26
modules
26
modules
@ -1,19 +1,19 @@
|
|||||||
GLUON_FEEDS='openwrt gluon routing luci'
|
GLUON_FEEDS='openwrt gluon routing luci'
|
||||||
|
|
||||||
OPENWRT_REPO=git://git.openwrt.org/openwrt.git
|
LEDE_REPO=https://git.lede-project.org/source.git
|
||||||
OPENWRT_COMMIT=08ac77da771204772119aeecf6826a5da4a0a45f
|
LEDE_BRANCH=lede-17.01
|
||||||
|
LEDE_COMMIT=65eec8bd5f6337956b972d07fde49eb5db9cb4a0
|
||||||
|
|
||||||
PACKAGES_OPENWRT_REPO=git://github.com/openwrt/packages.git
|
PACKAGES_OPENWRT_REPO=https://github.com/openwrt/packages.git
|
||||||
PACKAGES_OPENWRT_COMMIT=4c4c2dbdae02b38eff4a6abd95cfd54f61702246
|
PACKAGES_OPENWRT_BRANCH=lede-17.01
|
||||||
PACKAGES_OPENWRT_BRANCH=for-15.05
|
PACKAGES_OPENWRT_COMMIT=8844d7e2d4f717898c55c6345ad3b43fca52c440
|
||||||
|
|
||||||
PACKAGES_GLUON_REPO=git://github.com/freifunk-gluon/packages.git
|
PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
|
||||||
PACKAGES_GLUON_COMMIT=dcc5a5ab74822492877eadcba5fc3ad845ee65db
|
PACKAGES_GLUON_COMMIT=71823713c0e9451d1cd459cb10309f468188eb6e
|
||||||
|
|
||||||
PACKAGES_ROUTING_REPO=git://github.com/openwrt-routing/packages.git
|
PACKAGES_ROUTING_REPO=https://github.com/openwrt-routing/packages.git
|
||||||
PACKAGES_ROUTING_COMMIT=2bca6fb55f898c08e4227d35533fda2486c8983c
|
PACKAGES_ROUTING_COMMIT=8d9d70510b2c86f7503962308846ec874f0eb39f
|
||||||
PACKAGES_ROUTING_BRANCH=for-15.05
|
|
||||||
|
|
||||||
PACKAGES_LUCI_REPO=git://github.com/openwrt/luci.git
|
PACKAGES_LUCI_REPO=https://github.com/openwrt/luci.git
|
||||||
PACKAGES_LUCI_COMMIT=a497fbab4c4d7e3228c67a93e107000f7e70fd1f
|
PACKAGES_LUCI_BRANCH=lede-17.01
|
||||||
PACKAGES_LUCI_BRANCH=for-15.05
|
PACKAGES_LUCI_COMMIT=1f014bd2180b364bec4c3f6457f72a0621884f9a
|
||||||
|
10
overlay/opkg.mk
Normal file
10
overlay/opkg.mk
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# LEDE doesn't have a nice way to set the list of feeds in
|
||||||
|
# /etc/opkg/distfeeds.conf, so we use this overlay file (which is included by
|
||||||
|
# the opkg package Makefile though LEDE's IncludeOverlay mechanism).
|
||||||
|
|
||||||
|
# The following definitions make /etc/opkg/distfeeds.conf match the one included
|
||||||
|
# in official LEDE builds (by default, FEEDS_DISABLED contains the original list
|
||||||
|
# of feeds (which are unused by Gluon), and FEEDS_ENABLED our own feed list).
|
||||||
|
|
||||||
|
FEEDS_ENABLED := $(FEEDS_DISABLED)
|
||||||
|
FEEDS_DISABLED :=
|
@ -6,12 +6,13 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include ../gluon.mk
|
||||||
|
|
||||||
|
|
||||||
define Package/gluon-alfred
|
define Package/gluon-alfred
|
||||||
SECTION:=gluon
|
SECTION:=gluon
|
||||||
CATEGORY:=Gluon
|
CATEGORY:=Gluon
|
||||||
DEPENDS:=+gluon-core +gluon-announce +gluon-cron +alfred
|
DEPENDS:=+gluon-core +gluon-respondd +gluon-neighbour-info gluon-mesh-batman-adv +micrond +alfred
|
||||||
TITLE:=Configure alfred
|
TITLE:=Configure alfred
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -23,10 +24,12 @@ define Build/Configure
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
|
$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/gluon-alfred/install
|
define Package/gluon-alfred/install
|
||||||
$(CP) ./files/* $(1)/
|
$(CP) ./files/* $(1)/
|
||||||
|
$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,gluon-alfred))
|
$(eval $(call BuildPackage,gluon-alfred))
|
||||||
|
@ -1 +0,0 @@
|
|||||||
* * * * * /lib/gluon/announce/collect.lua nodeinfo | gzip | alfred -s 158; /lib/gluon/announce/collect.lua statistics | gzip | alfred -s 159; /lib/gluon/announce/collect.lua neighbours | gzip | alfred -s 160
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/usr/bin/lua
|
|
||||||
|
|
||||||
local uci = require 'luci.model.uci'
|
|
||||||
local c = uci.cursor()
|
|
||||||
|
|
||||||
|
|
||||||
c:delete('alfred', 'alfred')
|
|
||||||
c:section('alfred', 'alfred', 'alfred',
|
|
||||||
{
|
|
||||||
interface = 'br-client',
|
|
||||||
mode = 'slave',
|
|
||||||
batmanif = 'bat0',
|
|
||||||
start_vis = '1',
|
|
||||||
run_facters = '0',
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
c:save('alfred')
|
|
||||||
c:commit('alfred')
|
|
6
package/gluon-alfred/files/usr/lib/autoupdater/abort.d/60gluon-alfred
Executable file
6
package/gluon-alfred/files/usr/lib/autoupdater/abort.d/60gluon-alfred
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /lib/gluon/autoupdater/lib.sh
|
||||||
|
|
||||||
|
|
||||||
|
start_enabled alfred
|
6
package/gluon-alfred/files/usr/lib/autoupdater/download.d/40gluon-alfred
Executable file
6
package/gluon-alfred/files/usr/lib/autoupdater/download.d/40gluon-alfred
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /lib/gluon/autoupdater/lib.sh
|
||||||
|
|
||||||
|
|
||||||
|
stop alfred
|
1
package/gluon-alfred/files/usr/lib/micron.d/alfred
Normal file
1
package/gluon-alfred/files/usr/lib/micron.d/alfred
Normal file
@ -0,0 +1 @@
|
|||||||
|
* * * * * gluon-neighbour-info -d ::1 -p 1001 -t 1 -c 1 -r nodeinfo | gzip | alfred -s 158; gluon-neighbour-info -d ::1 -p 1001 -t 1 -c 1 -r statistics | gzip | alfred -s 159; gluon-neighbour-info -d ::1 -p 1001 -t 1 -c 1 -r neighbours | gzip | alfred -s 160
|
14
package/gluon-alfred/luasrc/lib/gluon/upgrade/500-enable-alfred
Executable file
14
package/gluon-alfred/luasrc/lib/gluon/upgrade/500-enable-alfred
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local uci = require('simple-uci').cursor()
|
||||||
|
|
||||||
|
uci:delete('alfred', 'alfred')
|
||||||
|
uci:section('alfred', 'alfred', 'alfred', {
|
||||||
|
interface = 'br-client',
|
||||||
|
mode = 'slave',
|
||||||
|
batmanif = 'bat0',
|
||||||
|
start_vis = true,
|
||||||
|
run_facters = false,
|
||||||
|
})
|
||||||
|
|
||||||
|
uci:save('alfred')
|
@ -1,32 +0,0 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gluon-announce
|
|
||||||
PKG_VERSION:=1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/gluon-announce
|
|
||||||
SECTION:=gluon
|
|
||||||
CATEGORY:=Gluon
|
|
||||||
DEPENDS:=+gluon-core +luci-lib-json +lua-ethtool-stats
|
|
||||||
TITLE:=Lua scripts announcing various information
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Prepare
|
|
||||||
mkdir -p $(PKG_BUILD_DIR)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Configure
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gluon-announce/install
|
|
||||||
$(CP) ./files/* $(1)/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,gluon-announce))
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/lua
|
|
||||||
|
|
||||||
local announce = require 'gluon.announce'
|
|
||||||
local json = require 'luci.json'
|
|
||||||
local ltn12 = require 'luci.ltn12'
|
|
||||||
|
|
||||||
local announce_dir = '/lib/gluon/announce/' .. arg[1] .. '.d'
|
|
||||||
|
|
||||||
encoder = json.Encoder(announce.collect_dir(announce_dir))
|
|
||||||
ltn12.pump.all(encoder:source(), ltn12.sink.file(io.stdout))
|
|
@ -1 +0,0 @@
|
|||||||
return require('gluon.util').node_id()
|
|
@ -1 +0,0 @@
|
|||||||
return require('platform_info').get_model()
|
|
@ -1,14 +0,0 @@
|
|||||||
local n = 0
|
|
||||||
|
|
||||||
local cpus = util.trim(fs.readfile('/sys/devices/system/cpu/online'))
|
|
||||||
|
|
||||||
for _, entry in ipairs(cpus:split(',')) do
|
|
||||||
local x, y = entry:match('(%d+)-(%d+)')
|
|
||||||
if x then
|
|
||||||
n = n + tonumber(y) - tonumber(x) + 1
|
|
||||||
else
|
|
||||||
n = n + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return n
|
|
@ -1 +0,0 @@
|
|||||||
return uci:get_first('system', 'system', 'hostname')
|
|
@ -1 +0,0 @@
|
|||||||
return require('gluon.sysconfig').primary_mac
|
|
@ -1 +0,0 @@
|
|||||||
return require('gluon.util').node_id()
|
|
@ -1,4 +0,0 @@
|
|||||||
return {
|
|
||||||
base = 'gluon-' .. util.trim(fs.readfile('/lib/gluon/gluon-version')),
|
|
||||||
release = util.trim(fs.readfile('/lib/gluon/release')),
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
local site = require 'gluon.site_config'
|
|
||||||
|
|
||||||
return site.site_code
|
|
@ -1 +0,0 @@
|
|||||||
return tonumber(fs.readfile('/proc/uptime'):match('^[^ ]+ ([^ ]+)'))
|
|
@ -1 +0,0 @@
|
|||||||
return tonumber(fs.readfile('/proc/loadavg'):match('^([^ ]+) '))
|
|
@ -1,13 +0,0 @@
|
|||||||
local data = fs.readfile('/proc/meminfo')
|
|
||||||
|
|
||||||
local fields = {}
|
|
||||||
for k, v in data:gmatch('([^\n:]+):%s*(%d+) kB') do
|
|
||||||
fields[k] = tonumber(v)
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
total = fields.MemTotal,
|
|
||||||
free = fields.MemFree,
|
|
||||||
buffers = fields.Buffers,
|
|
||||||
cached = fields.Cached,
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
return require('gluon.util').node_id()
|
|
@ -1,3 +0,0 @@
|
|||||||
local running, total = fs.readfile('/proc/loadavg'):match('^[^ ]+ [^ ]+ [^ ]+ (%d+)/(%d+)')
|
|
||||||
|
|
||||||
return { running = tonumber(running), total = tonumber(total) }
|
|
@ -1,4 +0,0 @@
|
|||||||
local fs = require "nixio.fs"
|
|
||||||
|
|
||||||
local st = fs.statvfs("/")
|
|
||||||
return 1 - st.bfree / st.blocks
|
|
@ -1 +0,0 @@
|
|||||||
return tonumber(fs.readfile('/proc/uptime'):match('^([^ ]+) '))
|
|
@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/lua
|
|
||||||
|
|
||||||
module('gluon.announce', package.seeall)
|
|
||||||
|
|
||||||
fs = require 'nixio.fs'
|
|
||||||
uci = require('luci.model.uci').cursor()
|
|
||||||
util = require 'luci.util'
|
|
||||||
|
|
||||||
local function collect_entry(entry)
|
|
||||||
if fs.stat(entry, 'type') == 'dir' then
|
|
||||||
return collect_dir(entry)
|
|
||||||
else
|
|
||||||
return setfenv(loadfile(entry), _M)()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function collect_dir(dir)
|
|
||||||
local ret = {}
|
|
||||||
|
|
||||||
for entry in fs.dir(dir) do
|
|
||||||
if entry:sub(1, 1) ~= '.' then
|
|
||||||
local ok, val = pcall(collect_entry, dir .. '/' .. entry)
|
|
||||||
if ok then
|
|
||||||
ret[entry] = val
|
|
||||||
else
|
|
||||||
io.stderr:write(val, '\n')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=gluon-announced
|
|
||||||
PKG_VERSION:=2
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/gluon-announced
|
|
||||||
SECTION:=gluon
|
|
||||||
CATEGORY:=Gluon
|
|
||||||
TITLE:=Provides node information to the network
|
|
||||||
DEPENDS:=+gluon-announce +respondd +lua-deflate
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Prepare
|
|
||||||
mkdir -p $(PKG_BUILD_DIR)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Configure
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/gluon-announced/install
|
|
||||||
$(CP) ./files/* $(1)/
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,gluon-announced))
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user