[PATCH v2 1/3] fff-gateway: add package

robert rlanghammer at web.de
Di Mär 19 01:37:06 CET 2019


Hallo Fabian,

Reviewed-by: Robert Langhammer <rlanghammer at web.de>

Das mit den sich überschreibenden Funktionen ist mir bisher auch noch
nicht über den Weg gelaufen.  Das gefällt mir richtig gut. So simpel!

Nur der Funktionsname "execute_subshell" ist vielleicht etwas
unglücklich. Es wird ja keine Subshell für Funktionen gestartet. Aber
nicht wichtig :)

Robert

Am 18.03.19 um 22:53 schrieb Fabian Bläse:
> This introduces a new script for simple gateway configuration.
>
> The main configuregateway script is able to execute functions
> for various steps like 'configure' or 'apply' from scripts in /etc/gateway.d.
>
> This makes it easy to distribute configuration to the appropriate packages.
>
> Signed-off-by: Fabian Bläse <fabian at blaese.de>
> ---
>
> Changes in v3:
> - Remove unnecessary package dependency
> - Remove unnecessary shell sources
> - Remove wrong sanity check left over from refactoring
> ---
>  src/packages/fff/fff-gateway/Makefile         |  38 +++++++
>  .../files/usr/sbin/configuregateway           | 101 ++++++++++++++++++
>  2 files changed, 139 insertions(+)
>  create mode 100644 src/packages/fff/fff-gateway/Makefile
>  create mode 100755 src/packages/fff/fff-gateway/files/usr/sbin/configuregateway
>
> diff --git a/src/packages/fff/fff-gateway/Makefile b/src/packages/fff/fff-gateway/Makefile
> new file mode 100644
> index 0000000..4ca6889
> --- /dev/null
> +++ b/src/packages/fff/fff-gateway/Makefile
> @@ -0,0 +1,38 @@
> +include $(TOPDIR)/rules.mk
> +
> +PKG_NAME:=fff-gateway
> +PKG_VERSION:=1
> +PKG_RELEASE:=1
> +
> +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-gateway
> +
> +include $(INCLUDE_DIR)/package.mk
> +
> +define Package/fff-gateway
> +    SECTION:=base
> +    CATEGORY:=Freifunk
> +    TITLE:= Freifunk-Franken gateway configuration
> +    URL:=https://www.freifunk-franken.de
> +endef
> +
> +define Package/fff-gateway/description
> +    This package configures the gateway
> +endef
> +
> +define Build/Prepare
> +	echo "all: " > $(PKG_BUILD_DIR)/Makefile
> +endef
> +
> +define Build/Configure
> +	# nothing
> +endef
> +
> +define Build/Compile
> +	# nothing
> +endef
> +
> +define Package/fff-gateway/install
> +	$(CP) ./files/* $(1)/
> +endef
> +
> +$(eval $(call BuildPackage,fff-gateway))
> diff --git a/src/packages/fff/fff-gateway/files/usr/sbin/configuregateway b/src/packages/fff/fff-gateway/files/usr/sbin/configuregateway
> new file mode 100755
> index 0000000..938a5c9
> --- /dev/null
> +++ b/src/packages/fff/fff-gateway/files/usr/sbin/configuregateway
> @@ -0,0 +1,101 @@
> +#!/bin/sh
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
> +# GNU General Public License for more details.
> +
> +
> +# IMPORTANT!!
> +# DO NOT RUN THIS IN CRONJOB!
> +
> +execute_subshell() {
> +	if [ $# -ne 1 ]; then
> +		echo "Usage:" "$0" "<function>"
> +	fi
> +
> +	for script in /etc/gateway.d/*; do
> +		(
> +			# unset function to prevent executing parents shell function
> +			unset -f "$1"
> +			. "$script"
> +
> +			if type "$1" | grep "shell function" > /dev/null; then
> +				"$1"
> +			fi
> +		)
> +
> +		if [ $? -ne 0 ]; then
> +			echo "Error when executing" "$1" "from" "$(basename "$script")"
> +			exit 1
> +		fi
> +	done
> +}
> +
> +configure() {
> +	echo "This script might remove existing vlans, interfaces, addresses, etc."
> +	read -r -p "Do you really want to continue? (y/n) " response
> +	if ! [ "$response" == "y" ] || [ "$response" == "Y" ]; then
> +		exit 1
> +	fi
> +
> +	execute_subshell configure
> +
> +	exit 0
> +}
> +
> +restart_services() {
> +	execute_subshell reload
> +	reload_config
> +}
> +
> +apply_changes() {
> +	execute_subshell apply
> +	restart_services
> +	exit 0
> +}
> +
> +revert_changes() {
> +	execute_subshell revert
> +	exit 0
> +}
> +
> +test_changes() {
> +	restart_services
> +
> +	sleep 5
> +	echo "services restarted. waiting up to 200s for SIGINT.."
> +	sleep 200
> +	echo "reverting changes.."
> +
> +	revert_changes
> +	restart_services
> +}
> +
> +
> +usage() {
> +	echo Usage: $0 [OPTION];
> +	echo;
> +	echo "Options:"
> +	echo "	-c: configure. No commit, no restart!"
> +	echo "	-t: test changes. Restarts services, waits up to 200s for SIGINT"
> +	echo "	-a: apply changes"
> +	echo "	-r: revert changes"
> +}
> +
> +
> +if [ $# != 1 ]; then
> +	usage; exit 1
> +fi
> +
> +case "$1" in
> +	-c) configure ;;
> +	-t) test_changes ;;
> +	-a) apply_changes ;;
> +	-r) revert_changes ;;
> +	*) usage; exit 1 ;;
> +esac



Mehr Informationen über die Mailingliste franken-dev