docs: add documentation about multidomain support (#1365)
This commit is contained in:
		
							parent
							
								
									046103e5a2
								
							
						
					
					
						commit
						c0e7b96d1d
					
				
							
								
								
									
										272
									
								
								docs/features/multidomain.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								docs/features/multidomain.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,272 @@ | |||||||
|  | Multidomain Support | ||||||
|  | =================== | ||||||
|  | 
 | ||||||
|  | Preamble | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | There comes a time when a mesh network grows past sensible boundaries. | ||||||
|  | As broadcast traffic grows, mesh networks experience scaling issues and | ||||||
|  | using them becomes very unpleasant. An approach to solve this follows | ||||||
|  | the well-known “divide and conquer” paradigm and splits a large network | ||||||
|  | into multiple smaller networks. These smaller networks start with a | ||||||
|  | dedicated layer 2 network each, which are interconnected via their | ||||||
|  | gateways by layer 3 routing. Gluon is already field-tested handling a | ||||||
|  | single domain and the multidomain feature allows for the reconfiguration | ||||||
|  | of key parameters that decide which domain a node participates in, | ||||||
|  | without the need of a distinct set of firmware images for each mesh domain. | ||||||
|  | 
 | ||||||
|  | Overview | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | Multidomain support allows to build a single firmware with multiple, | ||||||
|  | switchable domain configurations. The nomenclature is as follows: | ||||||
|  | 
 | ||||||
|  | -  ``site``: an aggregate over multiple domains | ||||||
|  | -  ``domain``: mesh network with connectivity parameters that prevent | ||||||
|  |    accidental bridging with other domains | ||||||
|  | -  ``domain code``: unique domain identifier | ||||||
|  | -  ``domain name``: pretty name for a domain code | ||||||
|  | 
 | ||||||
|  | By default Gluon builds firmware with a single domain embedded into | ||||||
|  | ``site.conf``. To use multiple domains, enable it in ``site.mk``: | ||||||
|  | 
 | ||||||
|  | :: | ||||||
|  | 
 | ||||||
|  |     GLUON_MULTIDOMAIN=1 | ||||||
|  | 
 | ||||||
|  | In the site repository, create the ``domains/`` directory, which will | ||||||
|  | hold your domain configurations. Each domain configuration file is named | ||||||
|  | after its primary ``domain_code``, additional domain codes and names are | ||||||
|  | supported. | ||||||
|  | 
 | ||||||
|  | :: | ||||||
|  | 
 | ||||||
|  |     site/ | ||||||
|  |     |-- site.conf | ||||||
|  |     |-- site.mk | ||||||
|  |     |-- i18n/ | ||||||
|  |     |-- domains/ | ||||||
|  |       |-- alpha_centauri.conf | ||||||
|  |       |-- beta_centauri.conf | ||||||
|  |       |-- gamma_centauri.conf | ||||||
|  | 
 | ||||||
|  | The domain configuration ``alpha_centauri.conf`` could look like this. | ||||||
|  | 
 | ||||||
|  | :: | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |       domain_names = { | ||||||
|  |         alpha_centauri = 'Alpha Centauri' | ||||||
|  |       }, | ||||||
|  | 
 | ||||||
|  |       -- more domain specific config follows below | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | In this example “Alpha Centauri” is the user-visible ``domain_name`` for the | ||||||
|  | domain_code ``alpha_centauri``. Also note that the domain code | ||||||
|  | ``alpha_centauri`` matches the filename ``alpha_centauri.conf``. | ||||||
|  | 
 | ||||||
|  | Additional domain codes/names can be added to ``domain_names``, which | ||||||
|  | are treated as aliases for the their domain configuration. Aliases can | ||||||
|  | be used to offer more fine-grained and well-recognizable domain choices | ||||||
|  | to users. Having multiple aliases on a single domain is a helpful | ||||||
|  | precursor to splitting the domain into even smaller blocks. | ||||||
|  | 
 | ||||||
|  | Furthermore you have to specify the ``default_domain`` in the ``site.conf``. | ||||||
|  | This domain is applied in following cases: | ||||||
|  | 
 | ||||||
|  | - When the config mode is skipped. | ||||||
|  | - When a domain is removed in a new firmware release, the default_domain | ||||||
|  |   will be chosen then. | ||||||
|  | - When a user selects a wrong domain code via uci. | ||||||
|  | 
 | ||||||
|  | Please note, that this value is saved to uci, so changing the `default_domain` | ||||||
|  | value in the `site.conf` in a new firmware release only affects the actual | ||||||
|  | domain of a router, if and only if one of the above conditions matches. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Switching the domain | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | **via commandline**: | ||||||
|  | 
 | ||||||
|  | :: | ||||||
|  | 
 | ||||||
|  |     uci set gluon.core.domain="newdomaincode" | ||||||
|  |     gluon-reconfigure | ||||||
|  |     reboot | ||||||
|  | 
 | ||||||
|  | **via config mode:** | ||||||
|  | 
 | ||||||
|  | To allow switching the domain via config mode, ``config-mode-domain-select`` | ||||||
|  | has to be added to GLUON_FEATURES in the site.mk. | ||||||
|  | 
 | ||||||
|  | |image0| | ||||||
|  | 
 | ||||||
|  | Allowed site variables | ||||||
|  | ---------------------- | ||||||
|  | 
 | ||||||
|  | Internally the site variables are merged from the ``site.conf`` and the | ||||||
|  | selected ``domain.conf``, so the most variables are also allowed in | ||||||
|  | ``site.conf`` and in ``domain.conf``. But there are some exceptions, | ||||||
|  | which do not make sense in a domain or site specific way. The following | ||||||
|  | sections give an overview over variables that are only usable in either | ||||||
|  | site or domain context. | ||||||
|  | 
 | ||||||
|  | site.conf only variables | ||||||
|  | ^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | -  Used in as initial default values, when the firmware was just flashed | ||||||
|  |    and/or the config mode is skipped, so they do not make sense in a | ||||||
|  |    domain specific way: | ||||||
|  | 
 | ||||||
|  |    -  authorized_keys | ||||||
|  |    -  default_domain | ||||||
|  |    -  poe_passthrough | ||||||
|  |    -  mesh_on_wan | ||||||
|  |    -  mesh_on_lan | ||||||
|  |    -  single_as_lan | ||||||
|  |    -  setup_mode.skip | ||||||
|  |    -  autoupdater.branch | ||||||
|  |    -  mesh_vpn.enabled | ||||||
|  |    -  mesh_vpn.pubkey_privacy | ||||||
|  |    -  mesh_vpn.bandwidth_limit | ||||||
|  |    -  mesh_vpn.bandwidth_limit.enabled | ||||||
|  |    -  mesh_vpn.bandwidth_limit.ingress | ||||||
|  |    -  mesh_vpn.bandwidth_limit.egress | ||||||
|  | 
 | ||||||
|  | -  Variables that influence the appearance of the config mode, | ||||||
|  |    domain-independent because they are relevant before a domain was selected. | ||||||
|  | 
 | ||||||
|  |    -  config_mode.geo_location.show_altitude | ||||||
|  |    -  config_mode.hostname.optional | ||||||
|  |    -  config_mode.remote_login | ||||||
|  |    -  config_mode.remote_login.show_password_form | ||||||
|  |    -  config_mode.remote_login.min_password_length | ||||||
|  |    -  hostname_prefix | ||||||
|  |    -  mesh_vpn.fastd.configurable | ||||||
|  |    -  roles.default | ||||||
|  |    -  roles.list | ||||||
|  | 
 | ||||||
|  | -  Specific to a firmware build itself: | ||||||
|  | 
 | ||||||
|  |    -  site_code | ||||||
|  |    -  site_name | ||||||
|  |    -  autoupdater.branches.*.name | ||||||
|  |    -  autoupdater.branches.*.good_signatures | ||||||
|  |    -  autoupdater.branches.*.pubkeys | ||||||
|  | 
 | ||||||
|  | -  We simply do not see any reason, why these variables could be helpful | ||||||
|  |    in a domain specific way: | ||||||
|  | 
 | ||||||
|  |    -  mesh_vpn.fastd.syslog_level | ||||||
|  |    -  wifi*.ibss.supported_basic_rates | ||||||
|  |    -  wifi*.mesh.supported_basic_rates | ||||||
|  |    -  timezone | ||||||
|  |    -  regdom | ||||||
|  | 
 | ||||||
|  | domain.conf only variables | ||||||
|  | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | -  Obviously: | ||||||
|  | 
 | ||||||
|  |    -  domain_names | ||||||
|  | 
 | ||||||
|  |       -  a table of domain codes to domain names | ||||||
|  |          ``domain_names = { foo = 'Foo Domain', bar = 'Bar Domain', baz = 'Baz Domain' }`` | ||||||
|  | 
 | ||||||
|  |    -  hide_domain | ||||||
|  | 
 | ||||||
|  |       -  prevents a domain name(s) from appearing in config mode, either | ||||||
|  |          boolean or array of domain codes | ||||||
|  | 
 | ||||||
|  |          -  ``true``, ``false`` | ||||||
|  |          -  ``{ 'foo', 'bar' }`` | ||||||
|  | 
 | ||||||
|  | -  Because each domain is considered as an own layer 2 network, these | ||||||
|  |    values should be different in each domain: | ||||||
|  | 
 | ||||||
|  |    -  next_node.ip4 | ||||||
|  |    -  next_node.ip6 | ||||||
|  |    -  next_node.name | ||||||
|  |    -  prefix6 | ||||||
|  |    -  prefix4 | ||||||
|  |    -  extra_prefixes6 | ||||||
|  | 
 | ||||||
|  | -  To prevent accidential bridging of different domains, all meshing | ||||||
|  |    technologies should be seperated: | ||||||
|  | 
 | ||||||
|  |    -  domain_seed (wired mesh) | ||||||
|  | 
 | ||||||
|  |       -  must be a random value used to derive the vxlan id for wired meshing | ||||||
|  | 
 | ||||||
|  |    -  wifi*.ibss.ssid | ||||||
|  |    -  wifi*.ibss.bssid | ||||||
|  |    -  wifi*.mesh.id | ||||||
|  |    -  mesh_vpn.fastd.groups.*.peers.remotes | ||||||
|  |    -  mesh_vpn.fastd.groups.*.peers.key | ||||||
|  |    -  mesh_vpn.tunneldigger.brokers | ||||||
|  | 
 | ||||||
|  | -  Clients consider WiFi networks sharing the same ESSID as if they were | ||||||
|  |    the same L2 network and try to reconfirm and reuse previous | ||||||
|  |    addressing. If multiple neighbouring domains shared the same ESSID, | ||||||
|  |    the roaming experience of clients would degrade. | ||||||
|  | 
 | ||||||
|  |    -  wifi*.ap.ssid | ||||||
|  | 
 | ||||||
|  | - Some values should be only set in legacy domains and not in new domains. | ||||||
|  |    -  mesh.vxlan | ||||||
|  | 
 | ||||||
|  |        -  By default, this value is `true`. It should be only set to `false` | ||||||
|  |           for one legacy domain, since vxlan prevents accidental wired | ||||||
|  |           merges of domains. For old domains this value is still available | ||||||
|  |           to keep compatibility between all nodes in one domain. | ||||||
|  | 
 | ||||||
|  |    -  next_node.mac | ||||||
|  | 
 | ||||||
|  |        -  For new domains, the default value should be used, since there is | ||||||
|  |           no need for a special mac (or domain specific mac). For old domains | ||||||
|  |           this value is still available to keep compatibility between all | ||||||
|  |           nodes in one domain. | ||||||
|  | 
 | ||||||
|  | Example config | ||||||
|  | -------------- | ||||||
|  | 
 | ||||||
|  | site.mk | ||||||
|  | ^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/site.mk | ||||||
|  |   :language: makefile | ||||||
|  | 
 | ||||||
|  | site.conf | ||||||
|  | ^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/site.conf | ||||||
|  |   :language: lua | ||||||
|  | 
 | ||||||
|  | domains/alpha_centauri.conf | ||||||
|  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/domains/alpha_centauri.conf | ||||||
|  |   :language: lua | ||||||
|  | 
 | ||||||
|  | i18n/en.po | ||||||
|  | ^^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/i18n/en.po | ||||||
|  |   :language: po | ||||||
|  | 
 | ||||||
|  | i18n/de.po | ||||||
|  | ^^^^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/i18n/de.po | ||||||
|  |   :language: po | ||||||
|  | 
 | ||||||
|  | modules | ||||||
|  | ^^^^^^^ | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../multidomain-site-example/modules | ||||||
|  |   :language: makefile | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .. |image0| image:: multidomain_configmode.gif | ||||||
							
								
								
									
										
											BIN
										
									
								
								docs/features/multidomain_configmode.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/features/multidomain_configmode.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 57 KiB | 
| @ -25,6 +25,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre | |||||||
|    features/wired-mesh |    features/wired-mesh | ||||||
|    features/dns-forwarder |    features/dns-forwarder | ||||||
|    features/monitoring |    features/monitoring | ||||||
|  |    features/multidomain | ||||||
|    features/authorized-keys |    features/authorized-keys | ||||||
|    features/roles |    features/roles | ||||||
|    features/vpn |    features/vpn | ||||||
|  | |||||||
							
								
								
									
										61
									
								
								docs/multidomain-site-example/domains/alpha_centauri.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								docs/multidomain-site-example/domains/alpha_centauri.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | { | ||||||
|  |   -- multiple codes/names can be defined, the first one is the primary name | ||||||
|  |   -- additional aliases can be defined | ||||||
|  |   domain_names = { | ||||||
|  |     alpha_centauri = 'Alpha Centauri', | ||||||
|  |     rigil_kentaurus = 'Rigil Kentaurus', | ||||||
|  |     proxima_centauri = 'Proxima Centauri', | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   -- 32 byte random data in hexadecimal encoding | ||||||
|  |   -- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom) | ||||||
|  |   domain_seed = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', | ||||||
|  | 
 | ||||||
|  |   -- unique network prefixes per domain | ||||||
|  |   prefix4 = '10.xxx.0.0/20', | ||||||
|  |   prefix6 = 'fdxx:xxxx:xxxx:xxxx::/64', | ||||||
|  | 
 | ||||||
|  |   next_node = { | ||||||
|  |     ip4 = '10.xxx.yyy.zzz', | ||||||
|  |     ip6 = 'fdxx:xxxx:xxxx:xxxx::xxxx', | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   wifi24= { | ||||||
|  |     ap = { | ||||||
|  |       ssid = "alpha-centauri.example.org", | ||||||
|  |       channel = 1, | ||||||
|  |     }, | ||||||
|  |     mesh = { | ||||||
|  |       id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   wifi5= { | ||||||
|  |     ap = { | ||||||
|  |       ssid = "alpha-centauri.example.org", | ||||||
|  |       channel = 44, | ||||||
|  |     }, | ||||||
|  |     mesh = { | ||||||
|  |       id = 'ueH3uXjdp', | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   mesh_vpn = { | ||||||
|  |     fastd = { | ||||||
|  |       groups = { | ||||||
|  |         backbone = { | ||||||
|  |           peers = { | ||||||
|  |             peer1 = { | ||||||
|  |               key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', | ||||||
|  |               remotes = {'"peer1.example.org" port xxxxx'}, | ||||||
|  |             }, | ||||||
|  |             peer2 = { | ||||||
|  |               key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', | ||||||
|  |               remotes = {'"peer2.example.org" port xxxxx'}, | ||||||
|  |             }, | ||||||
|  |           }, | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								docs/multidomain-site-example/i18n
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								docs/multidomain-site-example/i18n
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ../site-example/i18n/ | ||||||
							
								
								
									
										1
									
								
								docs/multidomain-site-example/modules
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								docs/multidomain-site-example/modules
									
									
									
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ../site-example/modules | ||||||
							
								
								
									
										52
									
								
								docs/multidomain-site-example/site.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								docs/multidomain-site-example/site.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | { | ||||||
|  |   site_name = 'Centauri Mesh', | ||||||
|  |   site_code = 'centauri', | ||||||
|  |   default_domain = 'alpha_centauri', | ||||||
|  | 
 | ||||||
|  |   timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', | ||||||
|  |   ntp_server = {'ntp1.example.org', 'ntp2.example.org'}, | ||||||
|  |   regdom = 'DE', | ||||||
|  | 
 | ||||||
|  |   wifi24 = { | ||||||
|  |     mesh = { | ||||||
|  |       mcast_rate = 12000, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   wifi5 = { | ||||||
|  |     mesh = { | ||||||
|  |       mcast_rate = 12000, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   mesh_vpn = { | ||||||
|  |     mtu = 1312, | ||||||
|  | 
 | ||||||
|  |     fastd = { | ||||||
|  |       methods = {'salsa2012+umac'}, | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     bandwidth_limit = { | ||||||
|  |       enabled = false, | ||||||
|  |       egress = 200, -- kbit/s | ||||||
|  |       ingress = 3000, -- kbit/s | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   autoupdater = { | ||||||
|  |     branch = 'stable', | ||||||
|  | 
 | ||||||
|  |     branches = { | ||||||
|  |       stable = { | ||||||
|  |         name = 'stable', | ||||||
|  |         mirrors = {'http://update.example.org/stable/sysupgrade'}, | ||||||
|  |         good_signatures = 2, | ||||||
|  |         pubkeys = { | ||||||
|  |           'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Alice | ||||||
|  |           'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Bob | ||||||
|  |           'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Mary | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								docs/multidomain-site-example/site.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								docs/multidomain-site-example/site.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | ##	gluon site.mk makefile example
 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_FEATURES
 | ||||||
|  | #		Specify Gluon features/packages to enable;
 | ||||||
|  | #		Gluon will automatically enable a set of packages
 | ||||||
|  | #		depending on the combination of features listed
 | ||||||
|  | 
 | ||||||
|  | GLUON_FEATURES := \
 | ||||||
|  | 	autoupdater \
 | ||||||
|  | 	ebtables-filter-multicast \
 | ||||||
|  | 	ebtables-filter-ra-dhcp \
 | ||||||
|  | 	mesh-batman-adv-15 \
 | ||||||
|  | 	mesh-vpn-fastd \
 | ||||||
|  | 	radvd \
 | ||||||
|  | 	respondd \
 | ||||||
|  | 	status-page \
 | ||||||
|  | 	web-advanced \
 | ||||||
|  | 	web-wizard | ||||||
|  | 
 | ||||||
|  | ##	GLUON_MULTIDOMAIN
 | ||||||
|  | #		Build gluon with multidomain support.
 | ||||||
|  | 
 | ||||||
|  | GLUON_MULTIDOMAIN=1 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_SITE_PACKAGES
 | ||||||
|  | #		Specify additional Gluon/LEDE packages to include here;
 | ||||||
|  | #		A minus sign may be prepended to remove a packages from the
 | ||||||
|  | #		selection that would be enabled by default or due to the
 | ||||||
|  | #		chosen feature flags
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | GLUON_SITE_PACKAGES := haveged iwinfo | ||||||
|  | 
 | ||||||
|  | ##	DEFAULT_GLUON_RELEASE
 | ||||||
|  | #		version string to use for images
 | ||||||
|  | #		gluon relies on
 | ||||||
|  | #			opkg compare-versions "$1" '>>' "$2"
 | ||||||
|  | #		to decide if a version is newer or not.
 | ||||||
|  | 
 | ||||||
|  | DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d') | ||||||
|  | 
 | ||||||
|  | # Variables set with ?= can be overwritten from the command line
 | ||||||
|  | 
 | ||||||
|  | ##	GLUON_RELEASE
 | ||||||
|  | #		call make with custom GLUON_RELEASE flag, to use your own release version scheme.
 | ||||||
|  | #		e.g.:
 | ||||||
|  | #			$ make images GLUON_RELEASE=23.42+5
 | ||||||
|  | #		would generate images named like this:
 | ||||||
|  | #			gluon-ff%site_code%-23.42+5-%router_model%.bin
 | ||||||
|  | 
 | ||||||
|  | GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) | ||||||
|  | 
 | ||||||
|  | # Default priority for updates.
 | ||||||
|  | GLUON_PRIORITY ?= 0 | ||||||
|  | 
 | ||||||
|  | # Region code required for some images; supported values: us eu
 | ||||||
|  | GLUON_REGION ?= eu | ||||||
|  | 
 | ||||||
|  | # Languages to include
 | ||||||
|  | GLUON_LANGS ?= en de | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user