diff --git a/package/gluon-autoupdater/Makefile b/package/gluon-autoupdater/Makefile index 43d9beb903efff892c57e1c0f897243bd3dbe8d6..8d6ae7556bcd9b7612974b0cdab870b14ca6842a 100644 --- a/package/gluon-autoupdater/Makefile +++ b/package/gluon-autoupdater/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gluon-autoupdater -PKG_VERSION:=0.3.2.99 -PKG_RELEASE:=0.1 +PKG_VERSION:=0.1 +PKG_RELEASE:=1 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/package.mk define Package/gluon-autoupdater SECTION:=gluon CATEGORY:=Gluon - DEPENDS:=+ecdsautils +gluon-cron +gluon-release + DEPENDS:=+ecdsautils +gluon-cron +gluon-release +gluon-location TITLE:=Automatically update firmware endef @@ -23,13 +23,13 @@ define Build/Configure endef define Build/Compile - $(GLUON_CONFIGURE) autoupdater.pl > $(PKG_BUILD_DIR)/autoupdater.sh + $(GLUON_CONFIGURE) invariant.pl > $(PKG_BUILD_DIR)/invariant.sh endef define Package/gluon-autoupdater/install $(CP) ./files/* $(1)/ - $(INSTALL_DIR) $(1)/lib/gluon/upgrade/autoupdater/initial - $(INSTALL_BIN) $(PKG_BUILD_DIR)/autoupdater.sh $(1)/lib/gluon/upgrade/autoupdater/initial/010-autoupdater + $(INSTALL_DIR) $(1)/lib/gluon/upgrade/autoupdater/invariant + $(INSTALL_BIN) $(PKG_BUILD_DIR)/invariant.sh $(1)/lib/gluon/upgrade/autoupdater/invariant/010-autoupdater endef $(eval $(call BuildPackage,gluon-autoupdater)) diff --git a/package/gluon-autoupdater/autoupdater.pl b/package/gluon-autoupdater/autoupdater.pl deleted file mode 100644 index 88bac9f6d1d8c340582c750cb53fa7e8524aea2a..0000000000000000000000000000000000000000 --- a/package/gluon-autoupdater/autoupdater.pl +++ /dev/null @@ -1,23 +0,0 @@ -my $cfg = $CONFIG->{autoupdater}; - -print <<'END'; -#/bin/sh - -uci -q batch <<EOF -delete autoupdater.default -set autoupdater.default=autoupdater -END - -for (qw(enabled branch url probability good_signatures)) { - print 'set autoupdater.default.' . $_ . '=' . $cfg->{$_} . "\n"; -} - -for (@{$cfg->{pubkeys}}) { - print 'add_list autoupdater.default.pubkey=' . $_ . "\n"; -} - -print <<END; - -commit autoupdater -EOF -END diff --git a/package/gluon-autoupdater/files/etc/config/autoupdater b/package/gluon-autoupdater/files/etc/config/autoupdater index b894baf3c30950e65e918f4e20cbc40a6ada2c4a..cb476930be11dc9ddbcc9d3760c1169a42f78730 100644 --- a/package/gluon-autoupdater/files/etc/config/autoupdater +++ b/package/gluon-autoupdater/files/etc/config/autoupdater @@ -1,19 +1,21 @@ -config autoupdater default - option enabled 1 - option branch "stable" - option url 'http://[fdef:ffc0:3dd7::8]/~freifunk/firmware/autoupdate' +config autoupdater settings + option enabled 1 + option branch "stable" - # The updater will run once per hour and perform an update with a certain - # probability. - # 1.0 - perform an update every hour - # 0.5 - on average, perform an update every two hours - # 0.0 - inhibit any automatic updates - option probability 0.5 +config branch stable + option url 'http://[fdef:ffc0:3dd7::8]/~freifunk/firmware/autoupdate' - # Minimum valid signatures required to perform the update - option good_signatures 2 + # The updater will run once per hour and perform an update with a certain + # probability. + # 1.0 - perform an update every hour + # 0.5 - on average, perform an update every two hours + # 0.0 - inhibit any automatic updates + option probability 0.5 - # List of public keys - list pubkey 'beea7da92ed0c19563b6c259162b4cb471aa2fdf9d3939d05fea2cf498ea7642' - list pubkey 'c75c9390cf5d7cc49a388d35f831ca379060cf7bca8c6e3d2d1ea31604597c42' - list pubkey '03e9514f137f0467c0f0ac108892c0da2b71f1039b30f863331cbd5701abd042' + # Minimum valid signatures required to perform the update + option good_signatures 2 + + # List of public keys + list pubkey 'beea7da92ed0c19563b6c259162b4cb471aa2fdf9d3939d05fea2cf498ea7642' + list pubkey 'c75c9390cf5d7cc49a388d35f831ca379060cf7bca8c6e3d2d1ea31604597c42' + list pubkey '03e9514f137f0467c0f0ac108892c0da2b71f1039b30f863331cbd5701abd042' diff --git a/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/010-initial b/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/010-initial new file mode 100755 index 0000000000000000000000000000000000000000..08501799639df2349da69700675f2d86eb5bf136 --- /dev/null +++ b/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/010-initial @@ -0,0 +1,3 @@ +#/bin/sh + +uci -q delete autoupdater.settings diff --git a/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/initial/010-initial b/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/initial/010-initial new file mode 100755 index 0000000000000000000000000000000000000000..08501799639df2349da69700675f2d86eb5bf136 --- /dev/null +++ b/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/initial/010-initial @@ -0,0 +1,3 @@ +#/bin/sh + +uci -q delete autoupdater.settings diff --git a/package/gluon-autoupdater/files/usr/sbin/autoupdater b/package/gluon-autoupdater/files/usr/sbin/autoupdater index 93406f242bc75987dfab515e6746e3a7c7ed87e7..b2f0ce7418abf3b28622a4c36e2345c70facf079 100755 --- a/package/gluon-autoupdater/files/usr/sbin/autoupdater +++ b/package/gluon-autoupdater/files/usr/sbin/autoupdater @@ -1,11 +1,13 @@ #!/bin/sh -if test $(uci get autoupdater.default.enabled) != 1; then +if test $(uci get autoupdater.settings.enabled) != 1; then echo "autoupdater is disabled" exit 0 fi -PROBABILITY=$(uci get autoupdater.default.probability) +BRANCH=$(uci get autoupdater.settings.branch) + +PROBABILITY=$(uci get autoupdater.${BRANCH}.probability) if test "a$1" != "a-f"; then echo | awk "END{srand();exit rand() > $PROBABILITY}" @@ -15,10 +17,9 @@ if test "a$1" != "a-f"; then fi fi -BASE=$(uci get autoupdater.default.url) -PUBKEYS=$(uci get autoupdater.default.pubkey) -GOOD_SIGNATURES=$(uci get autoupdater.default.good_signatures) -BRANCH=$(uci get autoupdater.default.branch) +BASE=$(uci get autoupdater.${BRANCH}.url) +PUBKEYS=$(uci get autoupdater.${BRANCH}.pubkey) +GOOD_SIGNATURES=$(uci get autoupdater.${BRANCH}.good_signatures) VERSION_FILE=/lib/gluon/release diff --git a/package/gluon-autoupdater/invariant.pl b/package/gluon-autoupdater/invariant.pl new file mode 100644 index 0000000000000000000000000000000000000000..31848133c72ba5e6869aaaa6fe494b2430ad1bfe --- /dev/null +++ b/package/gluon-autoupdater/invariant.pl @@ -0,0 +1,44 @@ +my $cfg = $CONFIG->{autoupdater}; + +print <<'END'; +#/bin/sh + +uci -q get autoupdater.settings || { +uci -q batch <<EOF +set autoupdater.settings=autoupdater +END + +for (qw(enabled branch)) { + print "set autoupdater.settings.$_=$cfg->{$_}\n"; +} + +print <<'END'; +EOF +} + +uci -q batch <<EOF +END + +foreach my $name (sort keys $cfg->{branches}) { + my $branch = $cfg->{branches}->{$name}; + + print <<END; + +delete autoupdater.$name +set autoupdater.$name=branch +END + + for (qw(url probability good_signatures)) { + print "set autoupdater.$name.$_=$branch->{$_}\n"; + } + + for (@{$branch->{pubkeys}}) { + print "add_list autoupdater.$name.pubkey=$_\n"; + } +} + +print <<END; + +commit autoupdater +EOF +END diff --git a/package/gluon-config-mode/files/lib/gluon/upgrade/config-mode/invariant/001-migrate-uci-config b/package/gluon-config-mode/files/lib/gluon/upgrade/config-mode/invariant/001-migrate-uci-config new file mode 100755 index 0000000000000000000000000000000000000000..e3ff8f2c996c63d68f3fbd88f2baacaa163baeb2 --- /dev/null +++ b/package/gluon-config-mode/files/lib/gluon/upgrade/config-mode/invariant/001-migrate-uci-config @@ -0,0 +1,6 @@ +#!/bin/sh + +OLD_CFG=/etc/config/config_mode +NEW_CFG=/etc/config/configmode + +[ -f $OLD_CFG ] && mv $OLD_CFG $NEW_CFG