commit
e4c2c245fb
31
Makefile
31
Makefile
@ -179,11 +179,8 @@ include $(INCLUDE_DIR)/target.mk
|
|||||||
prereq: FORCE
|
prereq: FORCE
|
||||||
+$(NO_TRACE_MAKE) prereq
|
+$(NO_TRACE_MAKE) prereq
|
||||||
|
|
||||||
gluon-tools: FORCE
|
|
||||||
+$(GLUONMAKE_EARLY) tools/sed/install
|
|
||||||
+$(GLUONMAKE_EARLY) package/lua/host/install
|
|
||||||
|
|
||||||
prepare-tmpinfo: FORCE
|
prepare-tmpinfo: FORCE
|
||||||
|
@+$(MAKE) -r -s staging_dir/host/.prereq-build OPENWRT_BUILD= QUIET=0
|
||||||
mkdir -p tmp/info
|
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="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"
|
$(_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"
|
||||||
@ -200,18 +197,23 @@ feeds: FORCE
|
|||||||
rm -rf $(TOPDIR)/package/feeds
|
rm -rf $(TOPDIR)/package/feeds
|
||||||
mkdir $(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
|
[ ! -f $(GLUON_SITEDIR)/modules ] || . $(GLUON_SITEDIR)/modules && for feed in $$GLUON_SITE_FEEDS; do ln -s ../../../packages/$$feed $(TOPDIR)/package/feeds/$$feed; done
|
||||||
. $(GLUONDIR)/modules && for feed in $$GLUON_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
|
+$(GLUONMAKE_EARLY) prepare-tmpinfo
|
||||||
|
|
||||||
|
gluon-tools: FORCE
|
||||||
|
+$(GLUONMAKE_EARLY) tools/sed/install
|
||||||
|
+$(GLUONMAKE_EARLY) package/lua/host/install
|
||||||
|
|
||||||
config: FORCE
|
config: FORCE
|
||||||
+$(NO_TRACE_MAKE) scripts/config/conf OPENWRT_BUILD=0
|
+$(NO_TRACE_MAKE) scripts/config/conf OPENWRT_BUILD= QUIET=0
|
||||||
+$(GLUONMAKE) prepare-tmpinfo
|
+$(GLUONMAKE) prepare-tmpinfo
|
||||||
( \
|
( \
|
||||||
cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(GLUON_TARGET)/config; \
|
cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(GLUON_TARGET)/config; \
|
||||||
echo 'CONFIG_BUILD_SUFFIX="gluon-$(GLUON_TARGET)"'; \
|
echo 'CONFIG_BUILD_SUFFIX="gluon-$(GLUON_TARGET)"'; \
|
||||||
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
|
echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
|
||||||
| sed -e 's/ /\n/g'; \
|
| sed -e 's/ /\n/g'; \
|
||||||
echo '$(patsubst %,CONFIG_GLUON_LANG_%=y,$(GLUON_LANGS))' \
|
echo '$(patsubst %,CONFIG_LUCI_LANG_%=y,$(GLUON_LANGS))' \
|
||||||
| sed -e 's/ /\n/g'; \
|
| sed -e 's/ /\n/g'; \
|
||||||
) > $(BOARD_BUILDDIR)/config.tmp
|
) > $(BOARD_BUILDDIR)/config.tmp
|
||||||
scripts/config/conf --defconfig=$(BOARD_BUILDDIR)/config.tmp Config.in
|
scripts/config/conf --defconfig=$(BOARD_BUILDDIR)/config.tmp Config.in
|
||||||
@ -280,11 +282,14 @@ packages: $(package/stamp-compile)
|
|||||||
prepare-image: FORCE
|
prepare-image: FORCE
|
||||||
rm -rf $(BOARD_KDIR)
|
rm -rf $(BOARD_KDIR)
|
||||||
mkdir -p $(BOARD_KDIR)
|
mkdir -p $(BOARD_KDIR)
|
||||||
cp $(KERNEL_BUILD_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.elf $(BOARD_KDIR)/
|
$(foreach k, vmlinux vmlinux.elf \
|
||||||
+$(SUBMAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image -f $(GLUONDIR)/include/Makefile.image prepare KDIR="$(BOARD_KDIR)"
|
$(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
|
prepare: FORCE
|
||||||
@$(STAGING_DIR_HOST)/bin/lua $(GLUONDIR)/packages/gluon/gluon/gluon-core/files/usr/lib/lua/gluon/site_config.lua \
|
@$(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)
|
|| (echo 'Your site configuration did not pass validation.'; false)
|
||||||
|
|
||||||
mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR)
|
mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR)
|
||||||
@ -345,7 +350,7 @@ $(eval $(call merge-lists,INSTALL_PACKAGES,DEFAULT_PACKAGES GLUON_DEFAULT_PACKAG
|
|||||||
|
|
||||||
package_install: FORCE
|
package_install: FORCE
|
||||||
$(OPKG) update
|
$(OPKG) update
|
||||||
$(OPKG) install $(PACKAGE_DIR)/libc_*.ipk
|
$(OPKG) install $(PACKAGE_DIR)/base-files_*.ipk $(PACKAGE_DIR)/libc_*.ipk
|
||||||
$(OPKG) install $(PACKAGE_DIR)/kernel_*.ipk
|
$(OPKG) install $(PACKAGE_DIR)/kernel_*.ipk
|
||||||
|
|
||||||
$(OPKG) install $(INSTALL_PACKAGES)
|
$(OPKG) install $(INSTALL_PACKAGES)
|
||||||
@ -353,6 +358,10 @@ package_install: FORCE
|
|||||||
|
|
||||||
rm -f $(TARGET_DIR)/usr/lib/opkg/lists/* $(TARGET_DIR)/tmp/opkg.lock
|
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)
|
ifeq ($(GLUON_OPKG_CONFIG),1)
|
||||||
include $(INCLUDE_DIR)/version.mk
|
include $(INCLUDE_DIR)/version.mk
|
||||||
endif
|
endif
|
||||||
|
@ -16,7 +16,7 @@ our mailinglist to discuss it first.
|
|||||||
|
|
||||||
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 branch -a`
|
||||||
and switch to one by running `git checkout v2014.3;make update`.
|
and switch to one by running `git checkout v2015.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.
|
||||||
|
@ -26,7 +26,7 @@ fi
|
|||||||
|
|
||||||
pushd "$(dirname "$0")/.." >/dev/null
|
pushd "$(dirname "$0")/.." >/dev/null
|
||||||
|
|
||||||
find packages -name Makefile | while read makefile; do
|
find ./package packages -name Makefile | while read makefile; do
|
||||||
dir="$(dirname "$makefile")"
|
dir="$(dirname "$makefile")"
|
||||||
|
|
||||||
pushd "$dir" >/dev/null
|
pushd "$dir" >/dev/null
|
||||||
@ -36,7 +36,7 @@ find packages -name Makefile | while read makefile; do
|
|||||||
package="$(basename "$dir")"
|
package="$(basename "$dir")"
|
||||||
|
|
||||||
for file in "${SUFFIX}"/*; do
|
for file in "${SUFFIX}"/*; do
|
||||||
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}/${RED}${package}${RESET}/${SUFFIX})"
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX})"
|
||||||
done
|
done
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
done | sort
|
done | sort
|
||||||
|
@ -19,22 +19,22 @@ EOHELP
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SECRET=$1
|
SECRET="$1"
|
||||||
|
|
||||||
manifest=$2
|
manifest="$2"
|
||||||
upper=$(mktemp)
|
upper="$(mktemp)"
|
||||||
lower=$(mktemp)
|
lower="$(mktemp)"
|
||||||
|
|
||||||
awk "BEGIN { sep=0 }
|
awk "BEGIN { sep=0 }
|
||||||
/^---\$/ { sep=1; next }
|
/^---\$/ { sep=1; next }
|
||||||
{ if(sep==0) print > \"$upper\";
|
{ if(sep==0) print > \"$upper\";
|
||||||
else print > \"$lower\"}" \
|
else print > \"$lower\"}" \
|
||||||
$manifest
|
"$manifest"
|
||||||
|
|
||||||
ecdsasign $upper < $SECRET >> $lower
|
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
||||||
|
|
||||||
cat $upper > $manifest
|
cat "$upper" > "$manifest"
|
||||||
echo --- >> $manifest
|
echo --- >> "$manifest"
|
||||||
cat $lower >> $manifest
|
cat "$lower" >> "$manifest"
|
||||||
|
|
||||||
rm -f $upper $lower
|
rm -f "$upper" "$lower"
|
||||||
|
@ -47,16 +47,16 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'Gluon'
|
project = 'Gluon'
|
||||||
copyright = '2014, Project Gluon'
|
copyright = '2015, 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 = '2014.4+'
|
version = '2015.1+'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '2014.4+'
|
release = '2015.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.
|
||||||
|
88
docs/dev/i18n.rst
Normal file
88
docs/dev/i18n.rst
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
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.
|
@ -54,7 +54,7 @@ We suggest to have following directory tree accessible via http:
|
|||||||
sysupgrade/
|
sysupgrade/
|
||||||
factory/
|
factory/
|
||||||
|
|
||||||
The server should be available via IPv6.
|
The server must be available via IPv6.
|
||||||
|
|
||||||
Command Line
|
Command Line
|
||||||
------------
|
------------
|
||||||
|
160
docs/index.rst
160
docs/index.rst
@ -13,6 +13,7 @@ User Documentation
|
|||||||
|
|
||||||
user/getting_started
|
user/getting_started
|
||||||
user/site
|
user/site
|
||||||
|
user/x86
|
||||||
user/faq
|
user/faq
|
||||||
|
|
||||||
Features
|
Features
|
||||||
@ -40,57 +41,7 @@ Developer Documentation
|
|||||||
dev/upgrade
|
dev/upgrade
|
||||||
dev/configmode
|
dev/configmode
|
||||||
dev/wan
|
dev/wan
|
||||||
|
dev/i18n
|
||||||
Supported Devices
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
* Buffalo
|
|
||||||
|
|
||||||
- WZR-HP-AG300H / WZR-600DHP
|
|
||||||
- WZR-HP-G450H
|
|
||||||
|
|
||||||
* D-Link
|
|
||||||
|
|
||||||
- DIR-825 (B1)
|
|
||||||
|
|
||||||
* Linksys
|
|
||||||
|
|
||||||
- WRT160NL
|
|
||||||
|
|
||||||
* TP-Link
|
|
||||||
|
|
||||||
- CPE210 (v1)
|
|
||||||
- CPE220 (v1)
|
|
||||||
- CPE510 (v1)
|
|
||||||
- CPE520 (v1)
|
|
||||||
- TL-MR3020 (v1)
|
|
||||||
- TL-MR3040 (v1, v2)
|
|
||||||
- TL-MR3220 (v1)
|
|
||||||
- TL-MR3420 (v1, v2)
|
|
||||||
- TL-WA750RE (v1)
|
|
||||||
- TL-WA801N/ND (v2)
|
|
||||||
- TL-WA850RE (v1)
|
|
||||||
- TL-WA901N/ND (v2)
|
|
||||||
- TL-WDR3500 (v1)
|
|
||||||
- TL-WDR3600 (v1)
|
|
||||||
- TL-WDR4300 (v1)
|
|
||||||
- TL-WR1043N/ND (v1, v2)
|
|
||||||
- TL-WR703N (v1)
|
|
||||||
- TL-WR710N (v1)
|
|
||||||
- TL-WR740N (v1, v3, v4)
|
|
||||||
- TL-WR741N/ND (v1, v2, v4)
|
|
||||||
- TL-WR841N/ND (v3, v5, v7, v8, v9)
|
|
||||||
- TL-WR842N/ND (v1, v2)
|
|
||||||
- TL-WR941N/ND (v2, v3, v4)
|
|
||||||
|
|
||||||
* Ubiquiti
|
|
||||||
|
|
||||||
- Bullet M2
|
|
||||||
- Nanostation M2
|
|
||||||
- Picostation M2
|
|
||||||
- UniFi AP
|
|
||||||
- UniFi AP Outdoor
|
|
||||||
|
|
||||||
|
|
||||||
Releases
|
Releases
|
||||||
--------
|
--------
|
||||||
@ -104,6 +55,112 @@ Releases
|
|||||||
releases/v2014.3
|
releases/v2014.3
|
||||||
|
|
||||||
|
|
||||||
|
Supported Devices & Architectures
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Allnet
|
||||||
|
|
||||||
|
- ALL0315N
|
||||||
|
|
||||||
|
* Buffalo
|
||||||
|
|
||||||
|
- WZR-HP-AG300H / WZR-600DHP
|
||||||
|
- WZR-HP-G450H
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-825 (B1)
|
||||||
|
- DIR-615 (C1)
|
||||||
|
|
||||||
|
* GL-Inet
|
||||||
|
|
||||||
|
- 6408A (v1)
|
||||||
|
- 6416A (v1)
|
||||||
|
|
||||||
|
* Linksys
|
||||||
|
|
||||||
|
- WRT160NL
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v1, v2)
|
||||||
|
- WNDR3800
|
||||||
|
- WNDRMAC (v2)
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- CPE210 (v1)
|
||||||
|
- CPE220 (v1)
|
||||||
|
- CPE510 (v1)
|
||||||
|
- CPE520 (v1)
|
||||||
|
- TL-MR3020 (v1)
|
||||||
|
- TL-MR3040 (v1, v2)
|
||||||
|
- TL-MR3220 (v1, v2)
|
||||||
|
- 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-WDR3600 (v1)
|
||||||
|
- TL-WDR4300 (v1)
|
||||||
|
- TL-WR1043N/ND (v1, v2)
|
||||||
|
- TL-WR703N (v1)
|
||||||
|
- TL-WR710N (v1)
|
||||||
|
- 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)
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- Bullet M2
|
||||||
|
- Nanostation M2
|
||||||
|
- Nanostation M XW
|
||||||
|
- Loco M XW
|
||||||
|
- Picostation M2
|
||||||
|
- Rocket M2
|
||||||
|
- UniFi AP
|
||||||
|
- UniFi AP Pro
|
||||||
|
- UniFi AP Outdoor
|
||||||
|
|
||||||
|
ar71xx-nand
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v4)
|
||||||
|
- WNDR4300 (v1)
|
||||||
|
|
||||||
|
mpc85xx-generic
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WDR4900 (v1)
|
||||||
|
|
||||||
|
x86-generic
|
||||||
|
^^^^^^^^^^^
|
||||||
|
* x86-generic
|
||||||
|
* x86-virtualbox
|
||||||
|
* x86-vmware
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
|
x86-kvm_guest
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
* x86-kvm
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
||||||
@ -116,4 +173,3 @@ Indices and tables
|
|||||||
|
|
||||||
* :ref:`genindex`
|
* :ref:`genindex`
|
||||||
* :ref:`search`
|
* :ref:`search`
|
||||||
|
|
||||||
|
@ -1,16 +1,159 @@
|
|||||||
Gluon 2015.1 (in development)
|
Gluon 2015.1
|
||||||
=============================
|
============
|
||||||
|
|
||||||
Added (and removed) hardware support
|
Added hardware support
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Gluon v2015.1 is the first release to officially support hardware
|
||||||
|
that is not handled by the `ar71xx-generic` OpenWrt target. This also
|
||||||
|
means that `ar71xx-generic` isn't the default target anymore, the ``GLUON_TARGET``
|
||||||
|
variable must be set for all runs of ``make`` and ``make clean`` now.
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Allnet
|
||||||
|
|
||||||
|
- ALL0315N
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-615 (C1)
|
||||||
|
|
||||||
|
* GL-Inet
|
||||||
|
|
||||||
|
- 6408A (v1)
|
||||||
|
- 6416A (v1)
|
||||||
|
|
||||||
|
- WRT160NL
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v1, v2)
|
||||||
|
- WNDR3800
|
||||||
|
- WNDRMAC (v2)
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-MR3220 (v2)
|
||||||
|
- TL-WA701N/ND (v1)
|
||||||
|
- TL-WA860RE (v1)
|
||||||
|
- TL-WA901N/ND (v2, v3)
|
||||||
|
- TL-WR743N/ND (v1, v2)
|
||||||
|
- TL-WR941N/ND (v5)
|
||||||
|
- TL-WR2543N/ND (v1)
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- Nanostation M XW
|
||||||
|
- Loco M XW
|
||||||
|
- UniFi AP Pro
|
||||||
|
|
||||||
|
ar71xx-nand
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v4)
|
||||||
|
- WNDR4300 (v1)
|
||||||
|
|
||||||
|
mpc85xx-generic
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WDR4900 (v1)
|
||||||
|
|
||||||
|
x86-generic
|
||||||
|
^^^^^^^^^^^
|
||||||
|
* x86-generic
|
||||||
|
* x86-virtualbox
|
||||||
|
* x86-vmware
|
||||||
|
|
||||||
|
x86-kvm_guest
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
* x86-kvm
|
||||||
|
|
||||||
|
|
||||||
New features
|
New features
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
Multilingual config mode
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
All config and expert mode modules contain both English and German texts now. The English
|
||||||
|
locale should always be enabled in ``site.mk`` (as English is the fallback language),
|
||||||
|
German can be enabled in addition using the ``GLUON_LANGS`` setting.
|
||||||
|
|
||||||
|
The language shown is autmatically determined from the headers sent by the user's
|
||||||
|
browser.
|
||||||
|
|
||||||
|
Mesh-on-LAN
|
||||||
|
^^^^^^^^^^^
|
||||||
|
Gluon now supports meshing using a node's LAN ports. It can be enabled by
|
||||||
|
default in `site.conf`, and configured by the user using the `gluon-luci-portconfig`
|
||||||
|
expert mode package.
|
||||||
|
|
||||||
|
Please note that nodes without the `mesh-on-lan` feature enabled must never be connected
|
||||||
|
via their LAN ports.
|
||||||
|
|
||||||
|
Extended WLAN configuration
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The new ``client_disabled`` and ``mesh_disabled`` keys in the ``wifi24`` and ``wifi5`` sections allow
|
||||||
|
to disable the client and mesh networks by default, which may make sense for images for
|
||||||
|
special installations.
|
||||||
|
|
||||||
|
The new package `gluon-luci-wifi-config` allows the user to change these settings; in addition,
|
||||||
|
the WLAN adapters' transmission power can be changed in this package.
|
||||||
|
|
||||||
|
fastd "performance mode"
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The new package `gluon-luci-mesh-vpn-fastd` allows the user to switch between the `security` and
|
||||||
|
`performance` VPN settions. In `performance mode`, the method `null` will be prepended to the
|
||||||
|
method list.
|
||||||
|
|
||||||
|
The new option ``configurable`` in the ``fastd_mesh_vpn`` section of ``site.conf`` must be set to `true`
|
||||||
|
so firmware upgrades don't overwrite the method list completely (non-`null` methods will still
|
||||||
|
be overwritten). Adding the `gluon-luci-mesh-vpn-fastd` package enforces this setting.
|
||||||
|
|
||||||
|
Altitude setting in `gluon-config-mode-geo-location`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The `gluon-config-mode-geo-location` config mode module
|
||||||
|
now contains an optional altitude field.
|
||||||
|
|
||||||
|
`gluon-announced` rework
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The `gluon-announced` package has been reworked to allow querying it from anywhere in the mesh.
|
||||||
|
In contrast to `gluon-alfred`, it is based on a query-response model (the master multicasts a query,
|
||||||
|
the nodes respond), while `gluon-alfred` uses periodic announcements.
|
||||||
|
|
||||||
|
For now, we recommend including both `gluon-alfred` and `gluon-announced` in Gluon-based firmwares,
|
||||||
|
until `gluon-announced` is ready to replace `gluon-alfred` completely, and software like the
|
||||||
|
ffmap backend has been adjusted accordingly.
|
||||||
|
|
||||||
|
Nested peer groups
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
Nested peer groups for the `fastd-mesh-vpn-fastd` package can now be configured in ``site.conf``,
|
||||||
|
each with its own peer limit. This allows to add additional constaints, for example to connect
|
||||||
|
to 2 peers altogether, but only 1 peer in each data center.
|
||||||
|
|
||||||
|
Autoupdater manual branch override
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
When running the updater manually on the command line, the branch to use can now be
|
||||||
|
overridden using the ``-b`` option.
|
||||||
|
|
||||||
Bugfixes
|
Bugfixes
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
Accidental factory reset fix
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Pressing a node's reset button for more than 5 seconds would completely reset a node's
|
||||||
|
configuration under certain conditions.
|
||||||
|
|
||||||
|
WAN IPv6 issues
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
The WAN port would stop to respond to IPv6 packets sometimes, also breaking IPv6 VPN connectivity.
|
||||||
|
|
||||||
|
WDR4900 WAN MAC address
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The MAC address on the WAN port of the WDR4900 was broken, making this device unusable for `mesh-on-wan`
|
||||||
|
configurations.
|
||||||
|
|
||||||
|
|
||||||
Site changes
|
Site changes
|
||||||
@ -22,9 +165,88 @@ Site changes
|
|||||||
to keep the old behaviour, you have to append the hyphen to the
|
to keep the old behaviour, you have to append the hyphen to the
|
||||||
``hostname_prefix`` field of your ``site.conf``.
|
``hostname_prefix`` field of your ``site.conf``.
|
||||||
|
|
||||||
|
- ``mesh_vpn_fastd``: The default peer group name ``backbone`` isn't hardcoded anymore, any
|
||||||
|
group name can be used. Instead, the ``fastd_mesh_vpn`` table must now contain an element ``groups``,
|
||||||
|
for example::
|
||||||
|
|
||||||
|
fastd_mesh_vpn = {
|
||||||
|
methods = {'salsa2012+umac'},
|
||||||
|
mtu = 1426,
|
||||||
|
groups = {
|
||||||
|
backbone = {
|
||||||
|
limit = 2,
|
||||||
|
peers = {
|
||||||
|
-- ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- ``config_mode``: The config mode messages aren't configured in ``site.conf`` anymore. Instead, they are
|
||||||
|
defined language-specific gettext files in the ``i18n`` subdirectory of the site configuration (see
|
||||||
|
:ref:`site-config-mode-texts`).
|
||||||
|
|
||||||
|
- ``roles``: The display strings for the node roles aren't configured in the ``site.conf`` anymore, but
|
||||||
|
in the site i18n files. The ``site.conf`` section becomes::
|
||||||
|
|
||||||
|
roles = {
|
||||||
|
default = 'foo',
|
||||||
|
list = {
|
||||||
|
'foo',
|
||||||
|
'bar',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
The display string use i18n message IDs like ``gluon-luci-node-role:role:foo`` and ``gluon-luci-node-role:role:bar``.
|
||||||
|
|
||||||
|
* ``site.mk``
|
||||||
|
|
||||||
|
- ``gluon-mesh-batman-adv-15`` is now the recommended batman-adv version for new Gluon deployments.
|
||||||
|
|
||||||
|
- The packages ``gluon-setup-mode`` and ``gluon-config-mode-core`` must now be
|
||||||
|
added to ``GLUON_SITE_PACKAGES`` explicitly (to allow replacing them with
|
||||||
|
community-specific implementations).
|
||||||
|
|
||||||
|
- The new ``GLUON_LANGS`` variable selects the config mode languages to include. It defaults to ``en``,
|
||||||
|
setting it to ``en de`` will select both the English and German locales. ``en`` must always be
|
||||||
|
included.
|
||||||
|
|
||||||
Internals
|
Internals
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
New upgrade script directory
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The distinction between `initial` and `invariant` scripts has been removed,
|
||||||
|
all scripts are now run on each upgrade. Instead of having one script directory
|
||||||
|
per package, all upgrade scripts lie in ``/lib/gluon/upgrade`` now, so it is
|
||||||
|
possible to define the run order across packages.
|
||||||
|
|
||||||
|
Merged package repository
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
The Gluon-specific packages have been moved to the ``package`` directory of the Gluon
|
||||||
|
main repository. The ``packages`` repository now only contains packages that will be
|
||||||
|
submitted to the OpenWrt upstream eventually.
|
||||||
|
|
||||||
Known Issues
|
Known Issues
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Alfred/respondd crashes
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
https://github.com/freifunk-gluon/gluon/issues/177
|
||||||
|
|
||||||
|
Occasional alfred crashes may still occur. As this is caused by a kernel issue,
|
||||||
|
we suspect that respondd, which gluon-announced is based on, is affected
|
||||||
|
in the same way.
|
||||||
|
|
||||||
|
|
||||||
|
Ignored TX power offset on Ubiquiti AirMax devices
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
https://github.com/freifunk-gluon/gluon/issues/94
|
||||||
|
|
||||||
|
The default transmission power setting on many of these devices
|
||||||
|
is too high. It may be necessary to make manual adjustments, for example
|
||||||
|
using the ``gluon-luci-wifi-config`` package. The values shown by
|
||||||
|
``gluon-luci-wifi-config`` generally include the TX power offset
|
||||||
|
(amplifier and antenna gain) where available, but on many devices
|
||||||
|
the offset is inaccurate or unavailable.
|
||||||
|
@ -34,4 +34,7 @@ msgstr ""
|
|||||||
"verbinden. Weitere Informationen zur "
|
"verbinden. Weitere Informationen zur "
|
||||||
"Entenhausener Freifunk-Community findest du auf "
|
"Entenhausener Freifunk-Community findest du auf "
|
||||||
"<a href=\"https://entenhausen.freifunk.net/\">unserer Webseite</a>.</p>"
|
"<a href=\"https://entenhausen.freifunk.net/\">unserer Webseite</a>.</p>"
|
||||||
|
"<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 "
|
||||||
|
"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>"
|
||||||
|
@ -31,4 +31,7 @@ msgstr ""
|
|||||||
"nearby Freifunk nodes after that. "
|
"nearby Freifunk nodes after that. "
|
||||||
"Your can find lots of information on the Freifunk Duckburg community on "
|
"Your can find lots of information on the Freifunk Duckburg community on "
|
||||||
"<a href=\"https://entenhausen.freifunk.net/\">our homepage</a>.</p>"
|
"<a href=\"https://entenhausen.freifunk.net/\">our homepage</a>.</p>"
|
||||||
|
"<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 "
|
||||||
|
"mode.</p>"
|
||||||
"<p>Have fun with your node and exploring the Freifunk network!</p>"
|
"<p>Have fun with your node and exploring the Freifunk network!</p>"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
-- This is an example site configuration for Gluon v2014.4
|
-- This is an example site configuration for Gluon v2015.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.
|
||||||
@ -54,6 +54,8 @@
|
|||||||
|
|
||||||
-- (optional) mesh VLAN on 802.11 ad-hoc interface (1-4095)
|
-- (optional) mesh VLAN on 802.11 ad-hoc interface (1-4095)
|
||||||
-- mesh_vlan = 14,
|
-- mesh_vlan = 14,
|
||||||
|
-- client_disabled = true,
|
||||||
|
-- mesh_disabled = false,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Wireless configuration for 5 GHz interfaces.
|
-- Wireless configuration for 5 GHz interfaces.
|
||||||
@ -67,6 +69,8 @@
|
|||||||
mesh_bssid = 'xx:xx:xx:xx:xx:xx',
|
mesh_bssid = 'xx:xx:xx:xx:xx:xx',
|
||||||
mesh_mcast_rate = 12000,
|
mesh_mcast_rate = 12000,
|
||||||
-- mesh_vlan = 14,
|
-- mesh_vlan = 14,
|
||||||
|
-- client_disabled = true,
|
||||||
|
-- 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
|
||||||
@ -85,7 +89,11 @@
|
|||||||
fastd_mesh_vpn = {
|
fastd_mesh_vpn = {
|
||||||
-- List of crypto-methods to use.
|
-- List of crypto-methods to use.
|
||||||
methods = {'salsa2012+umac'},
|
methods = {'salsa2012+umac'},
|
||||||
|
-- enabled = true,
|
||||||
|
-- configurable = true,
|
||||||
|
|
||||||
mtu = 1426,
|
mtu = 1426,
|
||||||
|
groups = {
|
||||||
backbone = {
|
backbone = {
|
||||||
-- Limit number of connected peers to reduce bandwidth.
|
-- Limit number of connected peers to reduce bandwidth.
|
||||||
limit = 2,
|
limit = 2,
|
||||||
@ -104,6 +112,19 @@
|
|||||||
remotes = {'"xxx.somehost2.invalid" port xxxxx'},
|
remotes = {'"xxx.somehost2.invalid" port xxxxx'},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- Optional: nested peer groups
|
||||||
|
-- groups = {
|
||||||
|
-- backbone_sub = {
|
||||||
|
-- ...
|
||||||
|
-- },
|
||||||
|
-- ...
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
-- Optional: additional peer groups, possibly with other limits
|
||||||
|
-- backbone2 = {
|
||||||
|
-- ...
|
||||||
|
-- },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -136,13 +157,13 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
-- Node roles
|
-- Node roles
|
||||||
-- roles {
|
-- roles = {
|
||||||
-- default = 'node',
|
-- default = 'node',
|
||||||
-- list = {
|
-- list = {
|
||||||
-- node = 'Normal Node',
|
-- 'node',
|
||||||
-- test = 'Test Node',
|
-- 'test',
|
||||||
-- backbone = 'Backbone Node',
|
-- 'backbone',
|
||||||
-- service = 'Service Node',
|
-- 'service',
|
||||||
-- },
|
-- },
|
||||||
-- },
|
-- },
|
||||||
|
|
||||||
|
@ -5,12 +5,13 @@
|
|||||||
# The gluon-mesh-batman-adv-* package must come first because of the dependency resolution
|
# The gluon-mesh-batman-adv-* package must come first because of the dependency resolution
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := \
|
GLUON_SITE_PACKAGES := \
|
||||||
gluon-mesh-batman-adv-14 \
|
gluon-mesh-batman-adv-15 \
|
||||||
gluon-alfred \
|
gluon-alfred \
|
||||||
gluon-announced \
|
gluon-announced \
|
||||||
gluon-autoupdater \
|
gluon-autoupdater \
|
||||||
gluon-config-mode-autoupdater \
|
gluon-config-mode-autoupdater \
|
||||||
gluon-config-mode-contact-info \
|
gluon-config-mode-contact-info \
|
||||||
|
gluon-config-mode-core \
|
||||||
gluon-config-mode-geo-location \
|
gluon-config-mode-geo-location \
|
||||||
gluon-config-mode-hostname \
|
gluon-config-mode-hostname \
|
||||||
gluon-config-mode-mesh-vpn \
|
gluon-config-mode-mesh-vpn \
|
||||||
@ -19,9 +20,11 @@ GLUON_SITE_PACKAGES := \
|
|||||||
gluon-luci-admin \
|
gluon-luci-admin \
|
||||||
gluon-luci-autoupdater \
|
gluon-luci-autoupdater \
|
||||||
gluon-luci-portconfig \
|
gluon-luci-portconfig \
|
||||||
|
gluon-luci-wifi-config \
|
||||||
gluon-next-node \
|
gluon-next-node \
|
||||||
gluon-mesh-vpn-fastd \
|
gluon-mesh-vpn-fastd \
|
||||||
gluon-radvd \
|
gluon-radvd \
|
||||||
|
gluon-setup-mode \
|
||||||
gluon-status-page \
|
gluon-status-page \
|
||||||
haveged \
|
haveged \
|
||||||
iptables \
|
iptables \
|
||||||
|
@ -38,7 +38,7 @@ 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. *v2014.4*.
|
version you'd like to checkout, e.g. *v2015.1*.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -67,12 +67,14 @@ wifi24
|
|||||||
``htmode``, the adhoc ssid ``mesh_ssid`` used between devices, the adhoc
|
``htmode``, the adhoc ssid ``mesh_ssid`` used between devices, the adhoc
|
||||||
bssid ``mesh_bssid`` and the adhoc multicast rate ``mesh_mcast_rate``.
|
bssid ``mesh_bssid`` and the adhoc multicast rate ``mesh_mcast_rate``.
|
||||||
Optionally ``mesh_vlan`` can be used to setup VLAN on top of the 802.11
|
Optionally ``mesh_vlan`` can be used to setup VLAN on top of the 802.11
|
||||||
ad-hoc interface.
|
ad-hoc interface. The options ``mesh_disabled`` and ``client_disabled``
|
||||||
|
are optional, too. They allow to disable the SSID by default, e.g. for
|
||||||
|
preconfigured node. This only affects first configuraton.
|
||||||
Combined in an dictionary, e.g.:
|
Combined in an dictionary, e.g.:
|
||||||
::
|
::
|
||||||
|
|
||||||
wifi24 = {
|
wifi24 = {
|
||||||
ssid = 'http://kiel.freifunk.net/',
|
ssid = 'entenhausen.freifunk.net',
|
||||||
channel = 11,
|
channel = 11,
|
||||||
htmode = 'HT40-',
|
htmode = 'HT40-',
|
||||||
mesh_ssid = 'ff:ff:ff:ee:ba:be',
|
mesh_ssid = 'ff:ff:ff:ee:ba:be',
|
||||||
@ -90,31 +92,50 @@ next_node : package
|
|||||||
next_node = {
|
next_node = {
|
||||||
ip4 = '10.23.42.1',
|
ip4 = '10.23.42.1',
|
||||||
ip6 = 'fdca:ffee:babe:1::1',
|
ip6 = 'fdca:ffee:babe:1::1',
|
||||||
mac = 'ca:ff:ee:ba:be'
|
mac = 'ca:ff:ee:ba:be:00'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fastd_mesh_vpn
|
fastd_mesh_vpn
|
||||||
Remote server setup for vpn.
|
Remote server setup for the fastd-based mesh VPN.
|
||||||
|
|
||||||
|
The `enabled` option can be set to true to enable the VPN by default.
|
||||||
|
|
||||||
|
If `configurable` is `false` or unset, the method list will be replaced on updates
|
||||||
|
with the list in the site configuration. Setting `configurable` to `true` will allow the user to
|
||||||
|
add the method ``null`` to the front of the method list or remove ``null`` from it,
|
||||||
|
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.
|
||||||
|
|
||||||
|
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
|
||||||
|
configured peers support both the ``null`` method and methods with encryption.
|
||||||
::
|
::
|
||||||
|
|
||||||
fastd_mesh_vpn = {
|
fastd_mesh_vpn = {
|
||||||
methods = {'salsa2012+gmac'},
|
methods = {'salsa2012+umac'},
|
||||||
|
-- enabled = true,
|
||||||
|
-- configurable = true,
|
||||||
mtu = 1426,
|
mtu = 1426,
|
||||||
|
groups = {
|
||||||
backbone = {
|
backbone = {
|
||||||
limit = 2,
|
limit = 2,
|
||||||
peers = {
|
peers = {
|
||||||
ffki_rz = {
|
peer1 = {
|
||||||
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
||||||
remotes = {'ipv4 "vpn1.entenhausen.freifunk.net" port 10000'},
|
remotes = {'ipv4 "vpn1.entenhausen.freifunk.net" port 10000'},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
|
Enables the mesh on the LAN port (``true`` or ``false``).
|
||||||
|
|
||||||
autoupdater : package
|
autoupdater : package
|
||||||
Configuration for the autoupdater feature of Gluon.
|
Configuration for the autoupdater feature of Gluon.
|
||||||
::
|
::
|
||||||
@ -146,15 +167,19 @@ roles : optional
|
|||||||
``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-luci-node-role`` to ``site.mk``.
|
||||||
|
|
||||||
|
The strings to display in the LuCI interface can be configured per language in the
|
||||||
|
``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``.
|
||||||
::
|
::
|
||||||
|
|
||||||
roles = {
|
roles = {
|
||||||
default = 'node',
|
default = 'node',
|
||||||
list = {
|
list = {
|
||||||
node = 'Normal Node',
|
'node',
|
||||||
test = 'Test Node',
|
'test',
|
||||||
backbone = 'Backbone Node',
|
'backbone',
|
||||||
service = 'Service Node',
|
'service',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -176,7 +201,7 @@ setup_mode : package
|
|||||||
``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.
|
||||||
::
|
::
|
||||||
|
|
||||||
setup_mode {
|
setup_mode = {
|
||||||
skip = true,
|
skip = true,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -216,6 +241,8 @@ 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 include for the web interface. Should always contain
|
||||||
``en``.
|
``en``.
|
||||||
|
|
||||||
|
.. _site-config-mode-texts:
|
||||||
|
|
||||||
Config mode texts
|
Config mode texts
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@ -280,7 +307,7 @@ This is a non-exhaustive list of site-repos from various communities:
|
|||||||
* `site-ffgoe <https://github.com/freifunk-goettingen/site-ffgoe>`_ (Göttingen)
|
* `site-ffgoe <https://github.com/freifunk-goettingen/site-ffgoe>`_ (Göttingen)
|
||||||
* `site-ffhh <https://github.com/freifunkhamburg/site-ffhh>`_ (Hamburg)
|
* `site-ffhh <https://github.com/freifunkhamburg/site-ffhh>`_ (Hamburg)
|
||||||
* `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-gluon/site-ffhl>`_ (Lübeck)
|
* `site-ffhl <https://github.com/freifunk-luebeck/site-ffhl>`_ (Lübeck)
|
||||||
* `site-ffmd <https://github.com/FreifunkMD/site-ffmd>`_ (Magdeburg)
|
* `site-ffmd <https://github.com/FreifunkMD/site-ffmd>`_ (Magdeburg)
|
||||||
* `site-ffmwu <https://github.com/freifunk-mwu/site-ffmwu>`_ (Mainz, Wiesbaden & Umgebung)
|
* `site-ffmwu <https://github.com/freifunk-mwu/site-ffmwu>`_ (Mainz, Wiesbaden & Umgebung)
|
||||||
* `site-ffmyk <https://github.com/FreifunkMYK/site-ffmyk>`_ (Mayen-Koblenz)
|
* `site-ffmyk <https://github.com/FreifunkMYK/site-ffmyk>`_ (Mayen-Koblenz)
|
||||||
|
29
docs/user/x86.rst
Normal file
29
docs/user/x86.rst
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
x86 support
|
||||||
|
===========
|
||||||
|
|
||||||
|
Gluon can run on normal x86 systems, for example virtual machines
|
||||||
|
and VPN boxes. There is no WLAN support on x86 though.
|
||||||
|
|
||||||
|
Targets
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
There are two targets for x86 images:
|
||||||
|
|
||||||
|
`x86-generic`
|
||||||
|
Generic x86 support with many different ethernet drivers; should run on
|
||||||
|
most x86 systems.
|
||||||
|
|
||||||
|
There are three images:
|
||||||
|
|
||||||
|
* `generic` (compressed "raw" image, can written to a disk directly or booted with qemu)
|
||||||
|
* `virtualbox` (VDI image)
|
||||||
|
* `vmware` (VMDK image)
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Please note that the `x86-generic` image doesn't include VirtIO support, so another virtual NIC
|
||||||
|
like `pcnet32` must be chosen when using VirtualBox.
|
||||||
|
|
||||||
|
`x86-kvm`
|
||||||
|
The `x86-kvm` image uses VirtIO as its harddisk and network driver.
|
@ -1,7 +0,0 @@
|
|||||||
override define BuildImage
|
|
||||||
prepare: FORCE
|
|
||||||
$(call Image/Prepare)
|
|
||||||
endef
|
|
||||||
|
|
||||||
# The Makefile included here is $(TOPDIR)/target/linux/$(BOARD)/image/Makefile
|
|
||||||
include Makefile
|
|
@ -7,8 +7,7 @@ override define Kernel/Configure
|
|||||||
echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(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_ALL is not set" >> $(LINUX_DIR)/.config.target
|
||||||
echo "# CONFIG_KALLSYMS_UNCOMPRESSED is not set" >> $(LINUX_DIR)/.config.target
|
echo "# CONFIG_KALLSYMS_UNCOMPRESSED is not set" >> $(LINUX_DIR)/.config.target
|
||||||
echo "# CONFIG_KPROBES 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)/metadata.pl kconfig $(TMP_DIR)/.packageinfo $(BOARD_BUILDDIR)/config-allmods > $(LINUX_DIR)/.config.override
|
|
||||||
$(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config
|
$(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config
|
||||||
$(call Kernel/SetNoInitramfs)
|
$(call Kernel/SetNoInitramfs)
|
||||||
rm -rf $(KERNEL_BUILD_DIR)/modules
|
rm -rf $(KERNEL_BUILD_DIR)/modules
|
||||||
|
@ -19,4 +19,4 @@ CONFIG_ATH_USER_REGD=y
|
|||||||
CONFIG_PACKAGE_ATH_DEBUG=y
|
CONFIG_PACKAGE_ATH_DEBUG=y
|
||||||
CONFIG_ATH10K_CT_COMMUNITY_FW=y
|
CONFIG_ATH10K_CT_COMMUNITY_FW=y
|
||||||
|
|
||||||
CONFIG_PACKAGE_luci-base_srcdiet=y
|
CONFIG_LUCI_SRCDIET=y
|
||||||
|
@ -35,7 +35,7 @@ export GLUON_LANGS
|
|||||||
ifeq ($(OPENWRT_BUILD),1)
|
ifeq ($(OPENWRT_BUILD),1)
|
||||||
ifeq ($(GLUON_TOOLS),1)
|
ifeq ($(GLUON_TOOLS),1)
|
||||||
|
|
||||||
CONFIG_VERSION_REPO := $(shell $(GLUONDIR)/scripts/site.sh opkg_repo || echo http://downloads.openwrt.org/barrier_breaker/14.07/%S/packages)
|
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
|
export CONFIG_VERSION_REPO
|
||||||
|
|
||||||
GLUON_SITE_CODE := $(shell $(GLUONDIR)/scripts/site.sh site_code)
|
GLUON_SITE_CODE := $(shell $(GLUONDIR)/scripts/site.sh site_code)
|
||||||
@ -65,7 +65,7 @@ GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
|||||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
GLUON_DEFAULT_PACKAGES := gluon-core kmod-ipv6 firewall ip6tables -uboot-envtools
|
GLUON_DEFAULT_PACKAGES := gluon-core kmod-ipv6 firewall ip6tables -uboot-envtools -wpad-mini hostapd-mini
|
||||||
|
|
||||||
override DEFAULT_PACKAGES.router :=
|
override DEFAULT_PACKAGES.router :=
|
||||||
|
|
||||||
|
@ -7,45 +7,20 @@ $(shell cat $(1) | sed -ne '1h; 1!H; $$ {g; s/@/+@/g; s/\n/-@/g; p}')
|
|||||||
END__GLUON__CHECK__SITE
|
END__GLUON__CHECK__SITE
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
# Languages supported by LuCi
|
# 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_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_LANG_ca := catalan
|
GLUON_I18N_PACKAGES := $(foreach lang,$(GLUON_SUPPORTED_LANGS),+LUCI_LANG_$(lang):luci-i18n-base-$(lang))
|
||||||
GLUON_LANG_zh_cn := chinese
|
GLUON_I18N_CONFIG := $(foreach lang,$(GLUON_SUPPORTED_LANGS),CONFIG_LUCI_LANG_$(lang))
|
||||||
GLUON_LANG_en := english
|
GLUON_ENABLED_LANGS := $(foreach lang,$(GLUON_SUPPORTED_LANGS),$(if $(CONFIG_LUCI_LANG_$(lang)),$(lang)))
|
||||||
GLUON_LANG_fr := french
|
|
||||||
GLUON_LANG_de := german
|
|
||||||
GLUON_LANG_el := greek
|
|
||||||
GLUON_LANG_he := hebrew
|
|
||||||
GLUON_LANG_hu := hungarian
|
|
||||||
GLUON_LANG_it := italian
|
|
||||||
GLUON_LANG_ja := japanese
|
|
||||||
GLUON_LANG_ms := malay
|
|
||||||
GLUON_LANG_no := norwegian
|
|
||||||
GLUON_LANG_pl := polish
|
|
||||||
GLUON_LANG_pt_br := portuguese-brazilian
|
|
||||||
GLUON_LANG_pt := portuguese
|
|
||||||
GLUON_LANG_ro := romanian
|
|
||||||
GLUON_LANG_ru := russian
|
|
||||||
GLUON_LANG_es := spanish
|
|
||||||
GLUON_LANG_sv := swedish
|
|
||||||
GLUON_LANG_uk := ukrainian
|
|
||||||
GLUON_LANG_vi := vietnamese
|
|
||||||
|
|
||||||
GLUON_I18N_PACKAGES := $(foreach lang,$(GLUON_SUPPORTED_LANGS),+GLUON_LANG_$(lang):luci-i18n-$(GLUON_LANG_$(lang)))
|
|
||||||
GLUON_I18N_CONFIG := $(foreach lang,$(GLUON_SUPPORTED_LANGS),CONFIG_GLUON_LANG_$(lang))
|
|
||||||
GLUON_ENABLED_LANGS := $(foreach lang,$(GLUON_SUPPORTED_LANGS),$(if $(CONFIG_GLUON_LANG_$(lang)),$(lang)))
|
|
||||||
|
|
||||||
|
|
||||||
GLUON_PO2LMO := $(BUILD_DIR)/luci/build/po2lmo
|
|
||||||
|
|
||||||
define GluonBuildI18N
|
define GluonBuildI18N
|
||||||
mkdir -p $$(PKG_BUILD_DIR)/i18n
|
mkdir -p $$(PKG_BUILD_DIR)/i18n
|
||||||
for lang in $$(GLUON_ENABLED_LANGS); do \
|
for lang in $$(GLUON_ENABLED_LANGS); do \
|
||||||
if [ -e $(2)/$$$$lang.po ]; then \
|
if [ -e $(2)/$$$$lang.po ]; then \
|
||||||
rm -f $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
rm -f $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
||||||
$(GLUON_PO2LMO) $(2)/$$$$lang.po $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
po2lmo $(2)/$$$$lang.po $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
endef
|
endef
|
||||||
|
@ -48,10 +48,6 @@ else
|
|||||||
export HOSTCC_WRAPPER:=$(HOSTCC)
|
export HOSTCC_WRAPPER:=$(HOSTCC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(FORCE),)
|
|
||||||
.config scripts/config/conf scripts/config/mconf: tmp/.prereq-build
|
|
||||||
endif
|
|
||||||
|
|
||||||
SCAN_COOKIE?=$(shell echo $$$$)
|
SCAN_COOKIE?=$(shell echo $$$$)
|
||||||
export SCAN_COOKIE
|
export SCAN_COOKIE
|
||||||
|
|
||||||
|
17
modules
17
modules
@ -1,18 +1,19 @@
|
|||||||
GLUON_FEEDS='openwrt gluon routing luci'
|
GLUON_FEEDS='openwrt gluon routing luci'
|
||||||
|
|
||||||
OPENWRT_REPO=git://git.openwrt.org/14.07/openwrt.git
|
OPENWRT_REPO=git://git.openwrt.org/openwrt.git
|
||||||
OPENWRT_COMMIT=64ae631f20eb349b47dae30c461ab33b5c4ac5c2
|
OPENWRT_COMMIT=53a178af743eb1a463c806ee79d1e622969ad6ef
|
||||||
|
|
||||||
PACKAGES_OPENWRT_REPO=git://github.com/openwrt/packages.git
|
PACKAGES_OPENWRT_REPO=git://github.com/openwrt/packages.git
|
||||||
PACKAGES_OPENWRT_COMMIT=01fcd1f29174a56d6ddb59901ed8c67ea42c3a8f
|
PACKAGES_OPENWRT_COMMIT=914beae80e848c161214464fba7a9826c66bbf26
|
||||||
PACKAGES_OPENWRT_BRANCH=for-14.07
|
PACKAGES_OPENWRT_BRANCH=for-15.05
|
||||||
|
|
||||||
PACKAGES_GLUON_REPO=git://github.com/freifunk-gluon/packages.git
|
PACKAGES_GLUON_REPO=git://github.com/freifunk-gluon/packages.git
|
||||||
PACKAGES_GLUON_COMMIT=f5c0865d5025a7e6ad3ff6c21ca5206ac972ba75
|
PACKAGES_GLUON_COMMIT=dcc5a5ab74822492877eadcba5fc3ad845ee65db
|
||||||
|
|
||||||
PACKAGES_ROUTING_REPO=git://github.com/openwrt-routing/packages.git
|
PACKAGES_ROUTING_REPO=git://github.com/openwrt-routing/packages.git
|
||||||
PACKAGES_ROUTING_COMMIT=5d4ad63897b435d5df0f39a49bd58962c22c33b8
|
PACKAGES_ROUTING_COMMIT=b1c3bdfbf47003088198bf8ef699a94cc29e3eca
|
||||||
PACKAGES_ROUTING_BRANCH=for-14.07
|
PACKAGES_ROUTING_BRANCH=for-15.05
|
||||||
|
|
||||||
PACKAGES_LUCI_REPO=git://github.com/openwrt/luci.git
|
PACKAGES_LUCI_REPO=git://github.com/openwrt/luci.git
|
||||||
PACKAGES_LUCI_COMMIT=f81be49ae756dab82e1758a6c9de145f0d36960e
|
PACKAGES_LUCI_COMMIT=7a54785ea616df1e72f20b9cad2f1a6b3097f7b5
|
||||||
|
PACKAGES_LUCI_BRANCH=for-15.05
|
||||||
|
32
package/gluon-alfred/Makefile
Normal file
32
package/gluon-alfred/Makefile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-alfred
|
||||||
|
PKG_VERSION:=1
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Package/gluon-alfred
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
DEPENDS:=+gluon-core +gluon-announce +gluon-cron +alfred
|
||||||
|
TITLE:=Configure alfred
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-alfred/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-alfred))
|
1
package/gluon-alfred/files/lib/gluon/cron/alfred
Normal file
1
package/gluon-alfred/files/lib/gluon/cron/alfred
Normal file
@ -0,0 +1 @@
|
|||||||
|
* * * * * /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
|
19
package/gluon-alfred/files/lib/gluon/upgrade/500-enable-alfred
Executable file
19
package/gluon-alfred/files/lib/gluon/upgrade/500-enable-alfred
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/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')
|
32
package/gluon-announce/Makefile
Normal file
32
package/gluon-announce/Makefile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
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))
|
10
package/gluon-announce/files/lib/gluon/announce/collect.lua
Executable file
10
package/gluon-announce/files/lib/gluon/announce/collect.lua
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/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))
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.util').node_id()
|
@ -0,0 +1 @@
|
|||||||
|
return require('platform_info').get_model()
|
@ -0,0 +1,14 @@
|
|||||||
|
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
|
@ -0,0 +1 @@
|
|||||||
|
return uci:get_first('system', 'system', 'hostname')
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.sysconfig').primary_mac
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.util').node_id()
|
@ -0,0 +1,4 @@
|
|||||||
|
return {
|
||||||
|
base = 'gluon-' .. util.trim(fs.readfile('/lib/gluon/gluon-version')),
|
||||||
|
release = util.trim(fs.readfile('/lib/gluon/release')),
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
local site = require 'gluon.site_config'
|
||||||
|
|
||||||
|
return site.site_code
|
@ -0,0 +1 @@
|
|||||||
|
return tonumber(fs.readfile('/proc/uptime'):match('^[^ ]+ ([^ ]+)'))
|
@ -0,0 +1 @@
|
|||||||
|
return tonumber(fs.readfile('/proc/loadavg'):match('^([^ ]+) '))
|
@ -0,0 +1,13 @@
|
|||||||
|
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,
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.util').node_id()
|
@ -0,0 +1,3 @@
|
|||||||
|
local running, total = fs.readfile('/proc/loadavg'):match('^[^ ]+ [^ ]+ [^ ]+ (%d+)/(%d+)')
|
||||||
|
|
||||||
|
return { running = tonumber(running), total = tonumber(total) }
|
@ -0,0 +1,4 @@
|
|||||||
|
local fs = require "nixio.fs"
|
||||||
|
|
||||||
|
local st = fs.statvfs("/")
|
||||||
|
return 1 - st.bfree / st.blocks
|
@ -0,0 +1 @@
|
|||||||
|
return tonumber(fs.readfile('/proc/uptime'):match('^([^ ]+) '))
|
33
package/gluon-announce/files/usr/lib/lua/gluon/announce.lua
Normal file
33
package/gluon-announce/files/usr/lib/lua/gluon/announce.lua
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#!/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
|
||||||
|
|
32
package/gluon-announced/Makefile
Normal file
32
package/gluon-announced/Makefile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
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))
|
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /usr/share/libubox/jshn.sh
|
||||||
|
. /lib/functions/service.sh
|
||||||
|
|
||||||
|
DEVLIST=/var/run/gluon-announced.devs
|
||||||
|
DAEMON=/usr/bin/respondd
|
||||||
|
|
||||||
|
ifname_to_dev () {
|
||||||
|
json_load "$(ubus call network.interface.$1 status)"
|
||||||
|
json_get_var dev device
|
||||||
|
|
||||||
|
echo "$dev"
|
||||||
|
}
|
||||||
|
|
||||||
|
restart_announced () {
|
||||||
|
SERVICE_USE_PID=1
|
||||||
|
SERVICE_WRITE_PID=1
|
||||||
|
SERVICE_DAEMONIZE=1
|
||||||
|
|
||||||
|
DEVS=$(cat $DEVLIST | while read dev iface; do echo -n " -i $dev"; done)
|
||||||
|
|
||||||
|
service_stop $DAEMON
|
||||||
|
service_start $DAEMON -g ff02::2:1001 -p 1001 -c 'return require("gluon.announced").handle_request' $DEVS
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$ACTION" in
|
||||||
|
ifdown)
|
||||||
|
sed -i "/$INTERFACE/d" $DEVLIST
|
||||||
|
;;
|
||||||
|
ifup)
|
||||||
|
DEVICE="$(ifname_to_dev "$INTERFACE")"
|
||||||
|
MESH="$(cat "/sys/class/net/$DEVICE/batman_adv/mesh_iface" 2>/dev/null)"
|
||||||
|
|
||||||
|
[ "$MESH" = "bat0" -o "$INTERFACE" = "client" ] || exit 0
|
||||||
|
|
||||||
|
DEVS=$(cat $DEVLIST; echo $DEVICE $INTERFACE)
|
||||||
|
|
||||||
|
echo "$DEVS" | sort -u > $DEVLIST
|
||||||
|
|
||||||
|
restart_announced
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
18
package/gluon-announced/files/lib/gluon/upgrade/400-announced-firewall
Executable file
18
package/gluon-announced/files/lib/gluon/upgrade/400-announced-firewall
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local uci = require('luci.model.uci').cursor()
|
||||||
|
|
||||||
|
-- Allow announced port on WAN to allow resolving neighbours over mesh-on-wan
|
||||||
|
uci:section('firewall', 'rule', 'wan_announced',
|
||||||
|
{
|
||||||
|
name = 'wan_announced',
|
||||||
|
src = 'wan',
|
||||||
|
src_ip = 'fe80::/64',
|
||||||
|
dest_port = '1001',
|
||||||
|
proto = 'udp',
|
||||||
|
target = 'ACCEPT',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
uci:save('firewall')
|
||||||
|
uci:commit('firewall')
|
@ -0,0 +1,33 @@
|
|||||||
|
local announce = require 'gluon.announce'
|
||||||
|
local deflate = require 'deflate'
|
||||||
|
local json = require 'luci.json'
|
||||||
|
|
||||||
|
|
||||||
|
local function collect(type)
|
||||||
|
return announce.collect_dir('/lib/gluon/announce/' .. type .. '.d')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
module('gluon.announced', package.seeall)
|
||||||
|
|
||||||
|
function handle_request(query)
|
||||||
|
if query:match('^nodeinfo$') then
|
||||||
|
return json.encode(collect('nodeinfo'))
|
||||||
|
end
|
||||||
|
|
||||||
|
local m = query:match('^GET ([a-z ]+)$')
|
||||||
|
if m then
|
||||||
|
local data = {}
|
||||||
|
|
||||||
|
for q in m:gmatch('([a-z]+)') do
|
||||||
|
local ok, val = pcall(collect, q)
|
||||||
|
if ok then
|
||||||
|
data[q] = val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if next(data) then
|
||||||
|
return deflate.compress(json.encode(data))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
36
package/gluon-authorized-keys/Makefile
Normal file
36
package/gluon-authorized-keys/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-authorized-keys
|
||||||
|
PKG_VERSION:=2
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
define Package/gluon-authorized-keys
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Fill /etc/dropbear/authorized_keys from site.conf
|
||||||
|
DEPENDS:=+gluon-core
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-authorized-keys/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-authorized-keys/postinst
|
||||||
|
#!/bin/sh
|
||||||
|
$(call GluonCheckSite,check_site.lua)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-authorized-keys))
|
1
package/gluon-authorized-keys/check_site.lua
Normal file
1
package/gluon-authorized-keys/check_site.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
need_string_array 'authorized_keys'
|
22
package/gluon-authorized-keys/files/lib/gluon/upgrade/100-authorized-keys
Executable file
22
package/gluon-authorized-keys/files/lib/gluon/upgrade/100-authorized-keys
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local file = '/etc/dropbear/authorized_keys'
|
||||||
|
|
||||||
|
local keys = {}
|
||||||
|
|
||||||
|
function load_keys()
|
||||||
|
for line in io.lines(file) do
|
||||||
|
keys[line] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
pcall(load_keys)
|
||||||
|
|
||||||
|
local f = io.open(file, 'a')
|
||||||
|
for _, key in ipairs(site.authorized_keys) do
|
||||||
|
if not keys[key] then
|
||||||
|
f:write(key .. '\n')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
f:close()
|
42
package/gluon-autoupdater/Makefile
Normal file
42
package/gluon-autoupdater/Makefile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-autoupdater
|
||||||
|
PKG_VERSION:=4
|
||||||
|
PKG_RELEASE:=$(GLUON_BRANCH)
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
define Package/gluon-autoupdater
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
DEPENDS:=+gluon-core +gluon-cron +autoupdater
|
||||||
|
TITLE:=Automatically update firmware
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-autoupdater/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
|
||||||
|
if [ '$(GLUON_BRANCH)' ]; then \
|
||||||
|
$(INSTALL_DIR) $(1)/lib/gluon/autoupdater; \
|
||||||
|
echo '$(GLUON_BRANCH)' > $(1)/lib/gluon/autoupdater/default_branch; \
|
||||||
|
fi
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-autoupdater/postinst
|
||||||
|
#!/bin/sh
|
||||||
|
$(call GluonCheckSite,check_site.lua)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-autoupdater))
|
12
package/gluon-autoupdater/check_site.lua
Normal file
12
package/gluon-autoupdater/check_site.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
need_string 'autoupdater.branch'
|
||||||
|
|
||||||
|
local function check_branch(k, _)
|
||||||
|
local prefix = string.format('autoupdater.branches[%q].', k)
|
||||||
|
|
||||||
|
need_string(prefix .. 'name')
|
||||||
|
need_string_array(prefix .. 'mirrors')
|
||||||
|
need_number(prefix .. 'good_signatures')
|
||||||
|
need_string_array(prefix .. 'pubkeys')
|
||||||
|
end
|
||||||
|
|
||||||
|
need_table('autoupdater.branches', check_branch)
|
@ -0,0 +1,7 @@
|
|||||||
|
local autoupdater = uci:get_all('autoupdater', 'settings')
|
||||||
|
if autoupdater then
|
||||||
|
return {
|
||||||
|
branch = autoupdater['branch'],
|
||||||
|
enabled = uci:get_bool('autoupdater', 'settings', 'enabled'),
|
||||||
|
}
|
||||||
|
end
|
57
package/gluon-autoupdater/files/lib/gluon/upgrade/500-autoupdater
Executable file
57
package/gluon-autoupdater/files/lib/gluon/upgrade/500-autoupdater
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local uci = require 'luci.model.uci'
|
||||||
|
|
||||||
|
local c = uci.cursor()
|
||||||
|
|
||||||
|
|
||||||
|
for name, config in pairs(site.autoupdater.branches) do
|
||||||
|
c:delete('autoupdater', name)
|
||||||
|
c:section('autoupdater', 'branch', name,
|
||||||
|
{
|
||||||
|
name = config.name,
|
||||||
|
mirror = config.mirrors,
|
||||||
|
good_signatures = config.good_signatures,
|
||||||
|
pubkey = config.pubkeys,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not c:get('autoupdater', 'settings') then
|
||||||
|
local enabled = 0
|
||||||
|
local branch = site.autoupdater.branch
|
||||||
|
|
||||||
|
local f = io.open('/lib/gluon/autoupdater/default_branch')
|
||||||
|
if f then
|
||||||
|
enabled = 1
|
||||||
|
branch = f:read('*line')
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
c:section('autoupdater', 'autoupdater', 'settings',
|
||||||
|
{
|
||||||
|
enabled = enabled,
|
||||||
|
branch = branch,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
c:set('autoupdater', 'settings', 'version_file', '/lib/gluon/release')
|
||||||
|
|
||||||
|
c:save('autoupdater')
|
||||||
|
c:commit('autoupdater')
|
||||||
|
|
||||||
|
|
||||||
|
local autoupdater_util = require 'autoupdater.util'
|
||||||
|
autoupdater_util.randomseed()
|
||||||
|
|
||||||
|
|
||||||
|
-- Perform updates at a random time between 04:00 and 05:00, and once an hour
|
||||||
|
-- a fallback update (used after the regular updates haven't
|
||||||
|
local minute = math.random(0, 59)
|
||||||
|
|
||||||
|
local f = io.open('/lib/gluon/cron/autoupdater', 'w')
|
||||||
|
f:write(string.format('%i 4 * * * /usr/sbin/autoupdater\n', minute))
|
||||||
|
f:write(string.format('%i 0-3,5-23 * * * /usr/sbin/autoupdater --fallback\n', minute))
|
||||||
|
f:close()
|
40
package/gluon-config-mode-autoupdater/Makefile
Normal file
40
package/gluon-config-mode-autoupdater/Makefile
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-autoupdater
|
||||||
|
PKG_VERSION:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-autoupdater
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Let the user know whether the autoupdater is enabled or not.
|
||||||
|
DEPENDS:=gluon-config-mode-core-virtual +gluon-autoupdater
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-autoupdater/description
|
||||||
|
Luci based config mode
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-autoupdater,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-autoupdater/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-autoupdater,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-autoupdater))
|
@ -0,0 +1,19 @@
|
|||||||
|
local cbi = require "luci.cbi"
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.section(form)
|
||||||
|
local enabled = uci:get_bool("autoupdater", "settings", "enabled")
|
||||||
|
if enabled then
|
||||||
|
local s = form:section(cbi.SimpleSection, nil,
|
||||||
|
i18n.translate('This node will automatically update its firmware when a new version is available.'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.handle(data)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
17
package/gluon-config-mode-autoupdater/i18n/de.po
Normal file
17
package/gluon-config-mode-autoupdater/i18n/de.po
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-03-18 16:03+0100\n"
|
||||||
|
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"This node will automatically update its firmware when a new version is "
|
||||||
|
"available."
|
||||||
|
msgstr "Dieser Knoten aktualisiert seine Firmware automatisch, sobald "
|
||||||
|
"eine neue Version vorliegt."
|
@ -0,0 +1,7 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"This node will automatically update its firmware when a new version is "
|
||||||
|
"available."
|
||||||
|
msgstr ""
|
36
package/gluon-config-mode-contact-info/Makefile
Normal file
36
package/gluon-config-mode-contact-info/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-contact-info
|
||||||
|
PKG_VERSION:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-contact-info
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Set a custom string that will be distributed in the mesh.
|
||||||
|
DEPENDS:=gluon-config-mode-core-virtual +gluon-node-info
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-contact-info,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-contact-info/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-contact-info,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-contact-info))
|
@ -0,0 +1,34 @@
|
|||||||
|
local cbi = require "luci.cbi"
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.section(form)
|
||||||
|
local s = form:section(cbi.SimpleSection, nil, i18n.translate(
|
||||||
|
'You can provide your contact information here to '
|
||||||
|
.. 'allow others to contact you. Please note that '
|
||||||
|
.. 'this information will be visible <em>publicly</em> '
|
||||||
|
.. 'on the internet together with your node\'s coordinates.'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
local o = s:option(cbi.Value, "_contact", i18n.translate("Contact info"))
|
||||||
|
o.default = uci:get_first("gluon-node-info", "owner", "contact", "")
|
||||||
|
o.rmempty = true
|
||||||
|
o.datatype = "string"
|
||||||
|
o.description = i18n.translate("e.g. E-mail or phone number")
|
||||||
|
o.maxlen = 140
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.handle(data)
|
||||||
|
if data._contact ~= nil then
|
||||||
|
uci:set("gluon-node-info", uci:get_first("gluon-node-info", "owner"), "contact", data._contact)
|
||||||
|
else
|
||||||
|
uci:delete("gluon-node-info", uci:get_first("gluon-node-info", "owner"), "contact")
|
||||||
|
end
|
||||||
|
uci:save("gluon-node-info")
|
||||||
|
uci:commit("gluon-node-info")
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
27
package/gluon-config-mode-contact-info/i18n/de.po
Normal file
27
package/gluon-config-mode-contact-info/i18n/de.po
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-03-19 01:32+0100\n"
|
||||||
|
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid "Contact info"
|
||||||
|
msgstr "Kontakt"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"You can provide your contact information here to allow others to contact "
|
||||||
|
"you. Please note that this information will be visible <em>publicly</em> on "
|
||||||
|
"the internet together with your node's coordinates."
|
||||||
|
msgstr ""
|
||||||
|
"Hier kannst du einen <em>öffentlichen</em> Hinweis hinterlegen, um anderen "
|
||||||
|
"zu ermöglichen, Kontakt mit dir aufzunehmen. Bitte beachte, dass "
|
||||||
|
"dieser Hinweis auch öffentlich im Internet, zusammen mit den Koordinaten "
|
||||||
|
"deines Knotens, einsehbar sein wird."
|
||||||
|
|
||||||
|
msgid "e.g. E-mail or phone number"
|
||||||
|
msgstr "z.B. E-Mail oder Telefonnummer"
|
@ -0,0 +1,14 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid "Contact info"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"You can provide your contact information here to allow others to contact "
|
||||||
|
"you. Please note that this information will be visible <em>publicly</em> on "
|
||||||
|
"the internet together with your node's coordinates."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "e.g. E-mail or phone number"
|
||||||
|
msgstr ""
|
40
package/gluon-config-mode-core/Makefile
Normal file
40
package/gluon-config-mode-core/Makefile
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Copyright (C) 2012 Nils Schneider <nils at nilsschneider.net>
|
||||||
|
# This is free software, licensed under the Apache 2.0 license.
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-core
|
||||||
|
PKG_VERSION:=2
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-core
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Luci based config mode for user friendly setup of new mesh nodes
|
||||||
|
DEPENDS:=gluon-setup-mode-virtual +gluon-luci-theme +gluon-lock-password $(GLUON_I18N_PACKAGES)
|
||||||
|
PROVIDES:=gluon-config-mode-core-virtual
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-core,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-core/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-core,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-core))
|
@ -0,0 +1,3 @@
|
|||||||
|
local i18n = require 'luci.i18n'
|
||||||
|
|
||||||
|
return function () luci.template.render_string(i18n.translate('gluon-config-mode:reboot')) end
|
@ -0,0 +1,90 @@
|
|||||||
|
--[[
|
||||||
|
Copyright 2013 Nils Schneider <nils@nilsschneider.net>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
]]--
|
||||||
|
|
||||||
|
module("luci.controller.gluon-config-mode.index", package.seeall)
|
||||||
|
|
||||||
|
function index()
|
||||||
|
local uci_state = luci.model.uci.cursor_state()
|
||||||
|
|
||||||
|
if uci_state:get_first("gluon-setup-mode", "setup_mode", "running", "0") == "1" then
|
||||||
|
local root = node()
|
||||||
|
if not root.target then
|
||||||
|
root.target = alias("gluon-config-mode")
|
||||||
|
root.index = true
|
||||||
|
end
|
||||||
|
|
||||||
|
page = node()
|
||||||
|
page.lock = true
|
||||||
|
page.target = alias("gluon-config-mode")
|
||||||
|
page.subindex = true
|
||||||
|
page.index = false
|
||||||
|
|
||||||
|
page = node("gluon-config-mode")
|
||||||
|
page.title = _("Wizard")
|
||||||
|
page.target = alias("gluon-config-mode", "wizard")
|
||||||
|
page.order = 5
|
||||||
|
page.setuser = "root"
|
||||||
|
page.setgroup = "root"
|
||||||
|
page.index = true
|
||||||
|
|
||||||
|
entry({"gluon-config-mode", "wizard"}, form("gluon-config-mode/wizard")).index = true
|
||||||
|
entry({"gluon-config-mode", "reboot"}, call("action_reboot"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function action_reboot()
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
|
||||||
|
uci:set("gluon-setup-mode", uci:get_first("gluon-setup-mode", "setup_mode"), "configured", "1")
|
||||||
|
uci:save("gluon-setup-mode")
|
||||||
|
uci:commit("gluon-setup-mode")
|
||||||
|
|
||||||
|
if nixio.fork() ~= 0 then
|
||||||
|
local fs = require "nixio.fs"
|
||||||
|
local util = require "nixio.util"
|
||||||
|
|
||||||
|
local parts_dir = "/lib/gluon/config-mode/reboot/"
|
||||||
|
local files = util.consume(fs.dir(parts_dir))
|
||||||
|
|
||||||
|
table.sort(files)
|
||||||
|
|
||||||
|
local parts = {}
|
||||||
|
|
||||||
|
for _, entry in ipairs(files) do
|
||||||
|
if entry:sub(1, 1) ~= '.' then
|
||||||
|
local f = dofile(parts_dir .. '/' .. entry)
|
||||||
|
if f ~= nil then
|
||||||
|
table.insert(parts, f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local hostname = uci:get_first("system", "system", "hostname")
|
||||||
|
|
||||||
|
luci.template.render("gluon/config-mode/reboot", { parts=parts
|
||||||
|
, hostname=hostname
|
||||||
|
})
|
||||||
|
else
|
||||||
|
debug.setfenv(io.stdout, debug.getfenv(io.open '/dev/null'))
|
||||||
|
io.stdout:close()
|
||||||
|
|
||||||
|
-- Sleep a little so the browser can fetch everything required to
|
||||||
|
-- display the reboot page, then reboot the device.
|
||||||
|
nixio.nanosleep(2)
|
||||||
|
|
||||||
|
-- Run reboot with popen so it gets its own std filehandles.
|
||||||
|
io.popen("reboot")
|
||||||
|
|
||||||
|
-- Prevent any further execution in this child.
|
||||||
|
os.exit()
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,39 @@
|
|||||||
|
local wizard_dir = "/lib/gluon/config-mode/wizard/"
|
||||||
|
local i18n = luci.i18n
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
local fs = require "nixio.fs"
|
||||||
|
local util = require "nixio.util"
|
||||||
|
local f, s
|
||||||
|
|
||||||
|
local wizard = {}
|
||||||
|
local files = util.consume(fs.dir(wizard_dir))
|
||||||
|
|
||||||
|
table.sort(files)
|
||||||
|
|
||||||
|
for _, entry in ipairs(files) do
|
||||||
|
if entry:sub(1, 1) ~= '.' then
|
||||||
|
table.insert(wizard, dofile(wizard_dir .. '/' .. entry))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
f = SimpleForm("wizard")
|
||||||
|
f.reset = false
|
||||||
|
f.template = "gluon/cbi/config-mode"
|
||||||
|
|
||||||
|
for _, s in ipairs(wizard) do
|
||||||
|
s.section(f)
|
||||||
|
end
|
||||||
|
|
||||||
|
function f.handle(self, state, data)
|
||||||
|
if state == FORM_VALID then
|
||||||
|
for _, s in ipairs(wizard) do
|
||||||
|
s.handle(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
luci.http.redirect(luci.dispatcher.build_url("gluon-config-mode", "reboot"))
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return f
|
@ -0,0 +1,46 @@
|
|||||||
|
<%-
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
local i18n = require 'luci.i18n'
|
||||||
|
local template = require 'luci.template'
|
||||||
|
-%>
|
||||||
|
|
||||||
|
<h2><%:Welcome!%></h2>
|
||||||
|
<p>
|
||||||
|
<%= template.render_string(i18n.translate('gluon-config-mode:welcome'), {hostname=hostname, sysconfig=sysconfig}) %>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<% if not self.embedded then %>
|
||||||
|
<form method="post" enctype="multipart/form-data" action="<%=REQUEST_URI%>">
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
|
||||||
|
<input type="hidden" name="cbi.submit" value="1" />
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<div class="cbi-map" id="cbi-<%=self.config%>">
|
||||||
|
<% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></h2><% end %>
|
||||||
|
<% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
|
||||||
|
<% self:render_children() %>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
<%- if self.message then %>
|
||||||
|
<div><%=self.message%></div>
|
||||||
|
<%- end %>
|
||||||
|
<%- if self.errmessage then %>
|
||||||
|
<div class="error"><%=self.errmessage%></div>
|
||||||
|
<%- end %>
|
||||||
|
<% if not self.embedded then %>
|
||||||
|
<div class="cbi-page-actions">
|
||||||
|
<%-
|
||||||
|
if type(self.hidden) == "table" then
|
||||||
|
for k, v in pairs(self.hidden) do
|
||||||
|
-%>
|
||||||
|
<input type="hidden" id="<%=k%>" name="<%=k%>" value="<%=pcdata(v)%>" />
|
||||||
|
<%-
|
||||||
|
end
|
||||||
|
end
|
||||||
|
%>
|
||||||
|
<input class="cbi-button cbi-button-save" type="submit" value="<%:Save & restart%>" />
|
||||||
|
<script type="text/javascript">cbi_d_update();</script>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<% end %>
|
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title><%=hostname%> is rebooting</title>
|
||||||
|
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="maincontainer">
|
||||||
|
<div id="maincontent">
|
||||||
|
<h2><%:Your node's setup is now complete.%></h2>
|
||||||
|
<% for k, v in ipairs(parts) do v() end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
24
package/gluon-config-mode-core/i18n/de.po
Normal file
24
package/gluon-config-mode-core/i18n/de.po
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-03-19 02:07+0100\n"
|
||||||
|
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Save & restart"
|
||||||
|
msgstr "Speichern & Neustarten"
|
||||||
|
|
||||||
|
msgid "Welcome!"
|
||||||
|
msgstr "Willkommen!"
|
||||||
|
|
||||||
|
msgid "Wizard"
|
||||||
|
msgstr "Wizard"
|
||||||
|
|
||||||
|
msgid "Your node's setup is now complete."
|
||||||
|
msgstr "Dein Knoten ist nun fertig eingerichtet."
|
@ -0,0 +1,14 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid "Save & restart"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Welcome!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wizard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your node's setup is now complete."
|
||||||
|
msgstr ""
|
36
package/gluon-config-mode-geo-location/Makefile
Normal file
36
package/gluon-config-mode-geo-location/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-geo-location
|
||||||
|
PKG_VERSION:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-geo-location
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Set geographic location of a node
|
||||||
|
DEPENDS:=gluon-config-mode-core-virtual +gluon-node-info
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-geo-location,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-geo-location/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-geo-location,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-geo-location))
|
@ -0,0 +1,60 @@
|
|||||||
|
local cbi = require "luci.cbi"
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.section(form)
|
||||||
|
local s = form:section(cbi.SimpleSection, nil, i18n.translate(
|
||||||
|
'If you want the location of your node to be displayed on the map, '
|
||||||
|
.. 'you can enter its coordinates here. Specifying the altitude '
|
||||||
|
.. 'is optional and should only be done if a proper value is known.'))
|
||||||
|
|
||||||
|
|
||||||
|
local o
|
||||||
|
|
||||||
|
o = s:option(cbi.Flag, "_location", i18n.translate("Show node on the map"))
|
||||||
|
o.default = uci:get_first("gluon-node-info", "location", "share_location", o.disabled)
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
o = s:option(cbi.Value, "_latitude", i18n.translate("Latitude"))
|
||||||
|
o.default = uci:get_first("gluon-node-info", "location", "latitude")
|
||||||
|
o:depends("_location", "1")
|
||||||
|
o.rmempty = false
|
||||||
|
o.datatype = "float"
|
||||||
|
o.description = i18n.translatef("e.g. %s", "53.873621")
|
||||||
|
|
||||||
|
o = s:option(cbi.Value, "_longitude", i18n.translate("Longitude"))
|
||||||
|
o.default = uci:get_first("gluon-node-info", "location", "longitude")
|
||||||
|
o:depends("_location", "1")
|
||||||
|
o.rmempty = false
|
||||||
|
o.datatype = "float"
|
||||||
|
o.description = i18n.translatef("e.g. %s", "10.689901")
|
||||||
|
|
||||||
|
o = s:option(cbi.Value, "_altitude", i18n.translate("Altitude"))
|
||||||
|
o.default = uci:get_first("gluon-node-info", "location", "altitude")
|
||||||
|
o:depends("_location", "1")
|
||||||
|
o.rmempty = true
|
||||||
|
o.datatype = "float"
|
||||||
|
o.description = i18n.translatef("e.g. %s", "11.51")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.handle(data)
|
||||||
|
local sname = uci:get_first("gluon-node-info", "location")
|
||||||
|
|
||||||
|
uci:set("gluon-node-info", sname, "share_location", data._location)
|
||||||
|
if data._location and data._latitude ~= nil and data._longitude ~= nil then
|
||||||
|
uci:set("gluon-node-info", sname, "latitude", data._latitude)
|
||||||
|
uci:set("gluon-node-info", sname, "longitude", data._longitude)
|
||||||
|
if data._altitude ~= nil then
|
||||||
|
uci:set("gluon-node-info", sname, "altitude", data._altitude)
|
||||||
|
else
|
||||||
|
uci:delete("gluon-node-info", sname, "altitude")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
uci:save("gluon-node-info")
|
||||||
|
uci:commit("gluon-node-info")
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
36
package/gluon-config-mode-geo-location/i18n/de.po
Normal file
36
package/gluon-config-mode-geo-location/i18n/de.po
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gluon-config-mode-geo-location\n"
|
||||||
|
"PO-Revision-Date: 2015-03-23 02:18+0100\n"
|
||||||
|
"Last-Translator: Martin Weinelt <martin@darmstadt.freifunk.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"If you want the location of your node to be displayed on the map, you can "
|
||||||
|
"enter its coordinates here. Specifying the altitude is optional and should "
|
||||||
|
"only be done if a proper value is known."
|
||||||
|
msgstr ""
|
||||||
|
"Um deinen Knoten auf der Karte anzeigen zu können, benötigen wir seine "
|
||||||
|
"Koordinaten. Hier hast du die Möglichkeit, diese zu hinterlegen. Die "
|
||||||
|
"Höhenangabe ist optional und sollte nur gesetzt werden, wenn ein exakter "
|
||||||
|
"Wert bekannt ist."
|
||||||
|
|
||||||
|
msgid "Latitude"
|
||||||
|
msgstr "Breitengrad"
|
||||||
|
|
||||||
|
msgid "Longitude"
|
||||||
|
msgstr "Längengrad"
|
||||||
|
|
||||||
|
msgid "Altitude"
|
||||||
|
msgstr "Höhenmeter über Normalnull"
|
||||||
|
|
||||||
|
msgid "Show node on the map"
|
||||||
|
msgstr "Knoten auf der Karte anzeigen"
|
||||||
|
|
||||||
|
msgid "e.g. %s"
|
||||||
|
msgstr "z.B. %s"
|
@ -0,0 +1,23 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"If you want the location of your node to be displayed on the map, you can "
|
||||||
|
"enter its coordinates here. Specifying the altitude is optional and should "
|
||||||
|
"only be done if a proper value is known."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Latitude"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Longitude"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Altitude"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Show node on the map"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "e.g. %s"
|
||||||
|
msgstr ""
|
36
package/gluon-config-mode-hostname/Makefile
Normal file
36
package/gluon-config-mode-hostname/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-hostname
|
||||||
|
PKG_VERSION:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-hostname
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Set the hostname
|
||||||
|
DEPENDS:=gluon-config-mode-core-virtual
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-hostname,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-hostname/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-hostname,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-hostname))
|
@ -0,0 +1,21 @@
|
|||||||
|
local cbi = require "luci.cbi"
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
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", i18n.translate("Node name"))
|
||||||
|
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
|
14
package/gluon-config-mode-hostname/i18n/de.po
Normal file
14
package/gluon-config-mode-hostname/i18n/de.po
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-03-19 00:54+0100\n"
|
||||||
|
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid "Node name"
|
||||||
|
msgstr "Name dieses Knotens"
|
@ -0,0 +1,5 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid "Node name"
|
||||||
|
msgstr ""
|
36
package/gluon-config-mode-mesh-vpn/Makefile
Normal file
36
package/gluon-config-mode-mesh-vpn/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-config-mode-mesh-vpn
|
||||||
|
PKG_VERSION:=2
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-mesh-vpn
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Toggle mesh-vpn and bandwidth limit
|
||||||
|
DEPENDS:=gluon-config-mode-core-virtual +gluon-mesh-vpn-fastd +gluon-simple-tc
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call GluonBuildI18N,gluon-config-mode-mesh-vpn,i18n)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-config-mode-mesh-vpn/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
$(call GluonInstallI18N,gluon-config-mode-mesh-vpn,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-config-mode-mesh-vpn))
|
@ -0,0 +1,29 @@
|
|||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
local meshvpn_enabled = uci:get("fastd", "mesh_vpn", "enabled", "0")
|
||||||
|
|
||||||
|
if meshvpn_enabled ~= "1" then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
local util = require "luci.util"
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
local pubkey = util.trim(util.exec("/etc/init.d/fastd show_key " .. "mesh_vpn"))
|
||||||
|
local hostname = uci:get_first("system", "system", "hostname")
|
||||||
|
|
||||||
|
local msg = [[<p>]] .. i18n.translate('gluon-config-mode:pubkey') .. [[</p>
|
||||||
|
<div class="the-key">
|
||||||
|
# <%= hostname %>
|
||||||
|
<br/>
|
||||||
|
<%= pubkey %>
|
||||||
|
</div>]]
|
||||||
|
|
||||||
|
return function ()
|
||||||
|
luci.template.render_string(msg, { pubkey=pubkey
|
||||||
|
, hostname=hostname
|
||||||
|
, site=site
|
||||||
|
, sysconfig=sysconfig
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,64 @@
|
|||||||
|
local cbi = require "luci.cbi"
|
||||||
|
local i18n = require "luci.i18n"
|
||||||
|
local uci = luci.model.uci.cursor()
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.section(form)
|
||||||
|
local msg = i18n.translate('Your internet connection can be used to establish an ' ..
|
||||||
|
'encrypted connection with other nodes. ' ..
|
||||||
|
'Enable this option if there are no other nodes reachable ' ..
|
||||||
|
'over WLAN in your vicinity or you want to make a part of ' ..
|
||||||
|
'your connection\'s bandwidth available for the network. You can limit how ' ..
|
||||||
|
'much bandwidth the node will use at most.')
|
||||||
|
local s = form:section(cbi.SimpleSection, nil, msg)
|
||||||
|
|
||||||
|
local o
|
||||||
|
|
||||||
|
o = s:option(cbi.Flag, "_meshvpn", i18n.translate("Use internet connection (mesh VPN)"))
|
||||||
|
o.default = uci:get_bool("fastd", "mesh_vpn", "enabled") and o.enabled or o.disabled
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
o = s:option(cbi.Flag, "_limit_enabled", i18n.translate("Limit bandwidth"))
|
||||||
|
o:depends("_meshvpn", "1")
|
||||||
|
o.default = uci:get_bool("gluon-simple-tc", "mesh_vpn", "enabled") and o.enabled or o.disabled
|
||||||
|
o.rmempty = false
|
||||||
|
|
||||||
|
o = s:option(cbi.Value, "_limit_ingress", i18n.translate("Downstream (kbit/s)"))
|
||||||
|
o:depends("_limit_enabled", "1")
|
||||||
|
o.value = uci:get("gluon-simple-tc", "mesh_vpn", "limit_ingress")
|
||||||
|
o.rmempty = false
|
||||||
|
o.datatype = "integer"
|
||||||
|
|
||||||
|
o = s:option(cbi.Value, "_limit_egress", i18n.translate("Upstream (kbit/s)"))
|
||||||
|
o:depends("_limit_enabled", "1")
|
||||||
|
o.value = uci:get("gluon-simple-tc", "mesh_vpn", "limit_egress")
|
||||||
|
o.rmempty = false
|
||||||
|
o.datatype = "integer"
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.handle(data)
|
||||||
|
uci:set("fastd", "mesh_vpn", "enabled", data._meshvpn)
|
||||||
|
uci:save("fastd")
|
||||||
|
uci:commit("fastd")
|
||||||
|
|
||||||
|
-- checks for nil needed due to o:depends(...)
|
||||||
|
if data._limit_enabled ~= nil then
|
||||||
|
uci:set("gluon-simple-tc", "mesh_vpn", "interface")
|
||||||
|
uci:set("gluon-simple-tc", "mesh_vpn", "enabled", data._limit_enabled)
|
||||||
|
uci:set("gluon-simple-tc", "mesh_vpn", "ifname", "mesh-vpn")
|
||||||
|
|
||||||
|
if data._limit_ingress ~= nil then
|
||||||
|
uci:set("gluon-simple-tc", "mesh_vpn", "limit_ingress", data._limit_ingress)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data._limit_egress ~= nil then
|
||||||
|
uci:set("gluon-simple-tc", "mesh_vpn", "limit_egress", data._limit_egress)
|
||||||
|
end
|
||||||
|
|
||||||
|
uci:commit("gluon-simple-tc")
|
||||||
|
uci:commit("gluon-simple-tc")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
36
package/gluon-config-mode-mesh-vpn/i18n/de.po
Normal file
36
package/gluon-config-mode-mesh-vpn/i18n/de.po
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"PO-Revision-Date: 2015-03-19 22:05+0100\n"
|
||||||
|
"Last-Translator: Matthias Schiffer <mschiffer@universe-factory.net>\n"
|
||||||
|
"Language-Team: German\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
msgid "Downstream (kbit/s)"
|
||||||
|
msgstr "Downstream (kbit/s)"
|
||||||
|
|
||||||
|
msgid "Limit bandwidth"
|
||||||
|
msgstr "Bandbreite begrenzen"
|
||||||
|
|
||||||
|
msgid "Upstream (kbit/s)"
|
||||||
|
msgstr "Upstream (kbit/s)"
|
||||||
|
|
||||||
|
msgid "Use internet connection (mesh VPN)"
|
||||||
|
msgstr "Internetverbindung nutzen (Mesh-VPN)"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Your internet connection can be used to establish an encrypted connection "
|
||||||
|
"with other nodes. Enable this option if there are no other nodes reachable "
|
||||||
|
"over WLAN in your vicinity or you want to make a part of your connection's "
|
||||||
|
"bandwidth available for the network. You can limit how much bandwidth the "
|
||||||
|
"node will use at most."
|
||||||
|
msgstr ""
|
||||||
|
"Dein Knoten kann deine Internetverbindung nutzen um darüber eine "
|
||||||
|
"verschlüsselte Verbindung zu anderen Knoten aufzubauen. Die dafür "
|
||||||
|
"genutzte Bandbreite kannst du beschränken. Aktiviere die Option, falls keine "
|
||||||
|
"per WLAN erreichbaren Nachbarknoten in deiner Nähe sind oder du deine "
|
||||||
|
"Internetverbindung für das Mesh-Netzwerk zur Verfügung stellen möchtest."
|
@ -0,0 +1,22 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
|
msgid "Downstream (kbit/s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Limit bandwidth"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Upstream (kbit/s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Use internet connection (mesh VPN)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Your internet connection can be used to establish an encrypted connection "
|
||||||
|
"with other nodes. Enable this option if there are no other nodes reachable "
|
||||||
|
"over WLAN in your vicinity or you want to make a part of your connection's "
|
||||||
|
"bandwidth available for the network. You can limit how much bandwidth the "
|
||||||
|
"node will use at most."
|
||||||
|
msgstr ""
|
45
package/gluon-core/Makefile
Normal file
45
package/gluon-core/Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=gluon-core
|
||||||
|
PKG_VERSION:=3
|
||||||
|
PKG_RELEASE:=$(GLUON_VERSION)
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(GLUONDIR)/include/package.mk
|
||||||
|
|
||||||
|
define Package/gluon-core
|
||||||
|
SECTION:=gluon
|
||||||
|
CATEGORY:=Gluon
|
||||||
|
TITLE:=Base files of Gluon
|
||||||
|
DEPENDS:=+gluon-site +lua-platform-info +luci-base +odhcp6c +firewall
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define Package/gluon-core/description
|
||||||
|
Gluon community wifi mesh firmware framework: core
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-core/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/lib/gluon
|
||||||
|
echo "$(GLUON_VERSION)" > $(1)/lib/gluon/gluon-version
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/gluon-core/postinst
|
||||||
|
#!/bin/sh
|
||||||
|
$(call GluonCheckSite,check_site.lua)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,gluon-core))
|
10
package/gluon-core/check_site.lua
Normal file
10
package/gluon-core/check_site.lua
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
need_string 'site_code'
|
||||||
|
need_string 'site_name'
|
||||||
|
|
||||||
|
need_string('hostname_prefix', false)
|
||||||
|
need_string 'timezone'
|
||||||
|
|
||||||
|
need_string_array('ntp_servers', false)
|
||||||
|
|
||||||
|
need_string_match('prefix4', '^%d+.%d+.%d+.%d+/%d+$')
|
||||||
|
need_string_match('prefix6', '^[%x:]+/%d+$')
|
5
package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade
Executable file
5
package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for script in /lib/gluon/upgrade/*; do
|
||||||
|
"$script"
|
||||||
|
done
|
10
package/gluon-core/files/lib/gluon/upgrade/001-upgrade
Executable file
10
package/gluon-core/files/lib/gluon/upgrade/001-upgrade
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local fs = require 'nixio.fs'
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
|
||||||
|
if fs.stat('/lib/gluon/version/core') and not sysconfig.gluon_version then
|
||||||
|
-- This isn't an initial upgrade, so set gluon_version
|
||||||
|
sysconfig.gluon_version = ''
|
||||||
|
end
|
42
package/gluon-core/files/lib/gluon/upgrade/010-primary-mac
Executable file
42
package/gluon-core/files/lib/gluon/upgrade/010-primary-mac
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
|
||||||
|
if sysconfig.primary_mac then
|
||||||
|
os.exit(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local platform = require 'gluon.platform'
|
||||||
|
|
||||||
|
local fs = require 'nixio.fs'
|
||||||
|
local util = require 'luci.util'
|
||||||
|
|
||||||
|
|
||||||
|
local try_files = {
|
||||||
|
'/sys/class/ieee80211/phy0/macaddress',
|
||||||
|
'/sys/class/net/eth0/address',
|
||||||
|
}
|
||||||
|
|
||||||
|
if platform.match('ar71xx', 'generic', {'tl-wdr3600', 'tl-wdr4300'}) then
|
||||||
|
table.insert(try_files, 1, '/sys/class/ieee80211/phy1/macaddress')
|
||||||
|
end
|
||||||
|
|
||||||
|
if platform.match('ar71xx', 'generic', {'unifi-outdoor-plus'}) then
|
||||||
|
table.insert(try_files, 1, '/sys/class/net/eth0/address')
|
||||||
|
end
|
||||||
|
|
||||||
|
if platform.match('ar71xx', 'generic', {'archer-c5', 'archer-c7'}) then
|
||||||
|
table.insert(try_files, 1, '/sys/class/net/eth1/address')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
for _, file in ipairs(try_files) do
|
||||||
|
local addr = fs.readfile(file)
|
||||||
|
|
||||||
|
if addr then
|
||||||
|
sysconfig.primary_mac = util.trim(addr)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
36
package/gluon-core/files/lib/gluon/upgrade/020-interfaces
Executable file
36
package/gluon-core/files/lib/gluon/upgrade/020-interfaces
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
local gluon_util = require 'gluon.util'
|
||||||
|
local platform = require 'gluon.platform'
|
||||||
|
|
||||||
|
local uci = require('luci.model.uci').cursor()
|
||||||
|
|
||||||
|
|
||||||
|
if not (sysconfig.lan_ifname or sysconfig.wan_ifname) then
|
||||||
|
local function iface_exists(name)
|
||||||
|
return (gluon_util.exec('ip', 'link', 'show', 'dev', (name:gsub('%..*$', ''))) == 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local lan_ifname = uci:get('network', 'lan', 'ifname')
|
||||||
|
local wan_ifname = uci:get('network', 'wan', 'ifname')
|
||||||
|
|
||||||
|
if platform.match('ar71xx', 'generic', {'cpe510', 'nanostation-m', 'nanostation-m-xw', 'unifi-outdoor-plus'}) then
|
||||||
|
lan_ifname, wan_ifname = wan_ifname, lan_ifname
|
||||||
|
end
|
||||||
|
|
||||||
|
if wan_ifname and iface_exists(wan_ifname) then
|
||||||
|
sysconfig.wan_ifname = wan_ifname
|
||||||
|
sysconfig.lan_ifname = lan_ifname
|
||||||
|
else
|
||||||
|
sysconfig.wan_ifname = lan_ifname
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
uci:delete('network', 'lan')
|
||||||
|
uci:delete('network', 'wan')
|
||||||
|
|
||||||
|
uci:save('network')
|
||||||
|
uci:commit('network')
|
||||||
|
end
|
18
package/gluon-core/files/lib/gluon/upgrade/030-system
Executable file
18
package/gluon-core/files/lib/gluon/upgrade/030-system
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
-- Initial
|
||||||
|
if not sysconfig.gluon_version then
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local util = require 'gluon.util'
|
||||||
|
local uci = require('luci.model.uci').cursor()
|
||||||
|
|
||||||
|
local system = uci:get_first('system', 'system')
|
||||||
|
|
||||||
|
uci:set('system', system, 'hostname', (site.hostname_prefix or '') .. util.node_id())
|
||||||
|
uci:set('system', system, 'timezone', site.timezone)
|
||||||
|
|
||||||
|
uci:save('system')
|
||||||
|
uci:commit('system')
|
||||||
|
end
|
5
package/gluon-core/files/lib/gluon/upgrade/100-dnsmasq
Executable file
5
package/gluon-core/files/lib/gluon/upgrade/100-dnsmasq
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -e /etc/dnsmasq.conf ]; then
|
||||||
|
sed -i -e '/^conf-dir=\/lib\/gluon\/dnsmasq\.d$/d' -e '/^conf-dir=\/var\/gluon\/dnsmasq\.d$/d' /etc/dnsmasq.conf
|
||||||
|
fi
|
59
package/gluon-core/files/lib/gluon/upgrade/110-network
Executable file
59
package/gluon-core/files/lib/gluon/upgrade/110-network
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local uci = require('luci.model.uci').cursor()
|
||||||
|
local sysctl = require 'gluon.sysctl'
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
|
||||||
|
uci:section('network', 'interface', 'wan',
|
||||||
|
{
|
||||||
|
ifname = sysconfig.wan_ifname,
|
||||||
|
type = 'bridge',
|
||||||
|
igmp_snooping = 0,
|
||||||
|
peerdns = 0,
|
||||||
|
auto = 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if not uci:get('network', 'wan', 'proto') then
|
||||||
|
uci:set('network', 'wan', 'proto', 'dhcp')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
uci:section('network', 'interface', 'wan6',
|
||||||
|
{
|
||||||
|
ifname = 'br-wan',
|
||||||
|
peerdns = 0,
|
||||||
|
ip6table = 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if not uci:get('network', 'wan6', 'proto') then
|
||||||
|
uci:set('network', 'wan6', 'proto', 'dhcpv6')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
uci:section('network', 'rule6', 'wan6_lookup',
|
||||||
|
{
|
||||||
|
mark = '0x01/0x01',
|
||||||
|
lookup = 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
uci:section('network', 'route6', 'wan6_unreachable',
|
||||||
|
{
|
||||||
|
type = 'unreachable',
|
||||||
|
interface = 'loopback',
|
||||||
|
target = '::/0',
|
||||||
|
gateway = '::',
|
||||||
|
table = 1,
|
||||||
|
metric = 65535,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
uci:save('network')
|
||||||
|
uci:commit('network')
|
||||||
|
|
||||||
|
|
||||||
|
sysctl.set('net.ipv6.conf.all.accept_ra', 0)
|
||||||
|
sysctl.set('net.ipv6.conf.default.accept_ra', 0)
|
14
package/gluon-core/files/lib/gluon/upgrade/120-ntp-servers
Executable file
14
package/gluon-core/files/lib/gluon/upgrade/120-ntp-servers
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local uci = require 'luci.model.uci'
|
||||||
|
|
||||||
|
if not site.ntp_servers or #site.ntp_servers == 0 then
|
||||||
|
os.exit(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local c = uci.cursor()
|
||||||
|
c:delete('system', 'ntp', 'server')
|
||||||
|
c:set_list('system', 'ntp', 'server', site.ntp_servers)
|
||||||
|
c:save('system')
|
||||||
|
c:commit('system')
|
5
package/gluon-core/files/lib/gluon/upgrade/130-reboot-on-oom
Executable file
5
package/gluon-core/files/lib/gluon/upgrade/130-reboot-on-oom
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysctl = require 'gluon.sysctl'
|
||||||
|
|
||||||
|
sysctl.set('vm.panic_on_oom', 1)
|
30
package/gluon-core/files/lib/gluon/upgrade/140-firewall-rules
Executable file
30
package/gluon-core/files/lib/gluon/upgrade/140-firewall-rules
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local site = require 'gluon.site_config'
|
||||||
|
local uci = require 'luci.model.uci'
|
||||||
|
|
||||||
|
local c = uci.cursor()
|
||||||
|
|
||||||
|
|
||||||
|
local function reject_input_on_wan(zone)
|
||||||
|
if zone.name == 'wan' then
|
||||||
|
c:set('firewall', zone['.name'], 'input', 'REJECT')
|
||||||
|
c:set('firewall', zone['.name'], 'conntrack', '1')
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
c:foreach('firewall', 'zone', reject_input_on_wan)
|
||||||
|
|
||||||
|
c:section('firewall', 'rule', 'wan_ssh',
|
||||||
|
{
|
||||||
|
name = 'wan_ssh',
|
||||||
|
src = 'wan',
|
||||||
|
dest_port = '22',
|
||||||
|
proto = 'tcp',
|
||||||
|
target = 'ACCEPT',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
c:save('firewall')
|
||||||
|
c:commit('firewall')
|
12
package/gluon-core/files/lib/gluon/upgrade/200-wireless
Executable file
12
package/gluon-core/files/lib/gluon/upgrade/200-wireless
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
-- Initial
|
||||||
|
if not sysconfig.gluon_version then
|
||||||
|
local uci = require('luci.model.uci').cursor()
|
||||||
|
|
||||||
|
uci:delete_all('wireless', 'wifi-iface')
|
||||||
|
uci:save('wireless')
|
||||||
|
uci:commit('wireless')
|
||||||
|
end
|
11
package/gluon-core/files/lib/gluon/upgrade/999-version
Executable file
11
package/gluon-core/files/lib/gluon/upgrade/999-version
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/lua
|
||||||
|
|
||||||
|
local sysconfig = require 'gluon.sysconfig'
|
||||||
|
|
||||||
|
local fs = require 'nixio.fs'
|
||||||
|
local util = require 'luci.util'
|
||||||
|
|
||||||
|
|
||||||
|
-- Save the Gluon version in the sysconfig so we know which version we
|
||||||
|
-- upgraded from after the next upgrade
|
||||||
|
sysconfig.gluon_version = util.trim(fs.readfile('/lib/gluon/gluon-version'))
|
1
package/gluon-core/files/lib/upgrade/keep.d/gluon
Normal file
1
package/gluon-core/files/lib/upgrade/keep.d/gluon
Normal file
@ -0,0 +1 @@
|
|||||||
|
/lib/gluon/core/sysconfig/
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user