From 2d49f5770480d7bd612e0fa89065c52c8db7b957 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 6 Aug 2014 17:20:07 +0200 Subject: [PATCH] gluon-setup-mode: provide alternative rc.d directory for procd --- .../files/etc/init.d/gluon-setup-mode | 88 ------------------- .../lib/gluon/setup-mode/rc.d/K50dropbear | 1 + .../files/lib/gluon/setup-mode/rc.d/K89log | 1 + .../lib/gluon/setup-mode/rc.d/K90network | 1 + .../files/lib/gluon/setup-mode/rc.d/K98boot | 1 + .../files/lib/gluon/setup-mode/rc.d/K99umount | 1 + .../lib/gluon/setup-mode/rc.d/S00sysfixtime | 1 + .../files/lib/gluon/setup-mode/rc.d/S10boot | 1 + .../files/lib/gluon/setup-mode/rc.d/S10system | 1 + .../files/lib/gluon/setup-mode/rc.d/S11sysctl | 1 + .../files/lib/gluon/setup-mode/rc.d/S12log | 1 + .../lib/gluon/setup-mode/rc.d/S13haveged | 5 ++ .../gluon/setup-mode/rc.d/S15gluon-setup-mode | 10 +++ .../lib/gluon/setup-mode/rc.d/S20network | 86 ++++++++++++++++++ .../lib/gluon/setup-mode/rc.d/S50dropbear | 1 + .../files/lib/gluon/setup-mode/rc.d/S50telnet | 12 +++ .../files/lib/gluon/setup-mode/rc.d/S50uhttpd | 14 +++ .../lib/gluon/setup-mode/rc.d/S60dnsmasq | 17 ++++ .../files/lib/gluon/setup-mode/rc.d/S95done | 1 + .../files/lib/gluon/setup-mode/rc.d/S96led | 9 ++ .../files/lib/preinit/90_setup_mode | 22 +++++ 21 files changed, 187 insertions(+), 88 deletions(-) delete mode 100755 gluon/gluon-setup-mode/files/etc/init.d/gluon-setup-mode create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K50dropbear create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K89log create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K90network create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K98boot create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K99umount create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S00sysfixtime create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10boot create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10system create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S11sysctl create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S12log create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13haveged create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50telnet create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50uhttpd create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S60dnsmasq create mode 120000 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S95done create mode 100755 gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led create mode 100644 gluon/gluon-setup-mode/files/lib/preinit/90_setup_mode diff --git a/gluon/gluon-setup-mode/files/etc/init.d/gluon-setup-mode b/gluon/gluon-setup-mode/files/etc/init.d/gluon-setup-mode deleted file mode 100755 index 41c14fd..0000000 --- a/gluon/gluon-setup-mode/files/etc/init.d/gluon-setup-mode +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=15 - - -SETUP_MODE_ADDR=192.168.1.1 -SETUP_MODE_NETMASK=255.255.255.0 - -SETUP_MODE_DHCP_RANGE=192.168.1.2,192.168.1.254 - - -delete_interface() { - [ "$1" = 'loopback' ] || uci_remove network "$1" -} - - -check_enable() { - config_get enabled "$1" enabled - config_get configured "$1" configured - - if [ "$enabled" = 1 -o "$configured" != 1 ]; then - export enable=1 - fi -} - -setup_network() { - ( - export UCI_CONFIG_DIR=/var/gluon/setup-mode/config - - mkdir -p "$UCI_CONFIG_DIR" - - cp /etc/config/network "$UCI_CONFIG_DIR" - - config_load network - config_foreach delete_interface interface - - uci_add network interface setup - uci_set network setup ifname "$(lua -e 'print(require("gluon.sysconfig").setup_ifname)')" - uci_set network setup type 'bridge' - uci_set network setup proto 'static' - uci_set network setup ipaddr "$SETUP_MODE_ADDR" - uci_set network setup netmask "$SETUP_MODE_NETMASK" - - uci_commit network - - SERVICE_DAEMONIZE=1 - SERVICE_WRITE_PID=1 - service_start /sbin/netifd -c "$UCI_CONFIG_DIR" - - setup_switch() { return 0; } - - include /lib/network - setup_switch - ) -} - -start() { - enable=0 - config_load gluon-setup-mode - config_foreach check_enable setup_mode - - if [ "$enable" = '1' ]; then - lua -luci -e 'require "luci.model.uci"; uci_state=luci.model.uci.cursor_state(); uci_state:section("gluon-setup-mode", "setup_mode", nil, { running = "1" }); uci_state:save("gluon-setup-mode")' - uci set 'gluon-setup-mode.@setup_mode[0].enabled=0' - uci commit gluon-setup-mode - - setup_network - - /usr/sbin/telnetd -l /lib/gluon/setup-mode/ash-login - /etc/init.d/dropbear start - - /usr/sbin/uhttpd -h /lib/gluon/setup-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80 - - /usr/sbin/dnsmasq -p 0 -F $SETUP_MODE_DHCP_RANGE -l /tmp/dhcp.leases -O option:router - - /etc/init.d/led start - - # correctly finish firstboot - /etc/init.d/done boot - - . /etc/diag.sh - get_status_led - status_led_set_timer 1000 300 - - # block further boot - while true; do sleep 1; done - fi -} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K50dropbear b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K50dropbear new file mode 120000 index 0000000..066549b --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K50dropbear @@ -0,0 +1 @@ +/etc/init.d/dropbear \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K89log b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K89log new file mode 120000 index 0000000..1e0c5ac --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K89log @@ -0,0 +1 @@ +/etc/init.d/log \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K90network b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K90network new file mode 120000 index 0000000..0a43e66 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K90network @@ -0,0 +1 @@ +S20network \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K98boot b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K98boot new file mode 120000 index 0000000..64aea5e --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K98boot @@ -0,0 +1 @@ +/etc/init.d/boot \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K99umount b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K99umount new file mode 120000 index 0000000..b02f489 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/K99umount @@ -0,0 +1 @@ +/etc/init.d/umount \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S00sysfixtime b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S00sysfixtime new file mode 120000 index 0000000..a4fb1d5 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S00sysfixtime @@ -0,0 +1 @@ +/etc/init.d/sysfixtime \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10boot b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10boot new file mode 120000 index 0000000..64aea5e --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10boot @@ -0,0 +1 @@ +/etc/init.d/boot \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10system b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10system new file mode 120000 index 0000000..81e8836 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S10system @@ -0,0 +1 @@ +/etc/init.d/system \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S11sysctl b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S11sysctl new file mode 120000 index 0000000..b4ac535 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S11sysctl @@ -0,0 +1 @@ +/etc/init.d/sysctl \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S12log b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S12log new file mode 120000 index 0000000..1e0c5ac --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S12log @@ -0,0 +1 @@ +/etc/init.d/log \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13haveged b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13haveged new file mode 100755 index 0000000..b4af677 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S13haveged @@ -0,0 +1,5 @@ +#!/bin/sh /etc/rc.common + +if /etc/init.d/haveged enabled; then + . /etc/init.d/haveged +fi diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode new file mode 100755 index 0000000..b6c1136 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S15gluon-setup-mode @@ -0,0 +1,10 @@ +#!/bin/sh /etc/rc.common + +START=15 + + +boot() { + lua -luci -e 'require "luci.model.uci"; uci_state=luci.model.uci.cursor_state(); uci_state:section("gluon-setup-mode", "setup_mode", nil, { running = "1" }); uci_state:save("gluon-setup-mode")' + uci set 'gluon-setup-mode.@setup_mode[0].enabled=0' + uci commit gluon-setup-mode +} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network new file mode 100755 index 0000000..8bc0ba4 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network @@ -0,0 +1,86 @@ +#!/bin/sh /etc/rc.common + +SETUP_MODE_ADDR=192.168.1.1 +SETUP_MODE_NETMASK=255.255.255.0 + +START=20 +STOP=90 + +USE_PROCD=1 + + +delete_interface() { + [ "$1" = 'loopback' ] || uci_remove network "$1" +} + +prepare_config() { +( + export UCI_CONFIG_DIR=/var/gluon/setup-mode/config + + mkdir -p "$UCI_CONFIG_DIR" + + cp /etc/config/network "$UCI_CONFIG_DIR" + + config_load network + config_foreach delete_interface interface + + uci_add network interface setup + uci_set network setup ifname "$(lua -e 'print(require("gluon.sysconfig").setup_ifname)')" + uci_set network setup type 'bridge' + uci_set network setup proto 'static' + uci_set network setup ipaddr "$SETUP_MODE_ADDR" + uci_set network setup netmask "$SETUP_MODE_NETMASK" + + uci_commit network +) +} + +init_switch() { + setup_switch() { return 0; } + + include /lib/network + setup_switch +} + +start_service() { + prepare_config + init_switch + + procd_open_instance + procd_set_param command /sbin/netifd -c /var/gluon/setup-mode/config + procd_set_param respawn + procd_set_param watch network.interface + [ -e /proc/sys/kernel/core_pattern ] && { + procd_set_param limits core="unlimited" + echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern + } + procd_close_instance +} + +reload_service() { + init_switch + ubus call network reload + /sbin/wifi reload_legacy +} + +stop_service() { + /sbin/wifi down +} + +service_running() { + ubus -t 30 wait_for network.interface + /sbin/wifi reload_legacy +} + +restart() { + ifdown -a + sleep 1 + trap '' TERM + stop "$@" + start "$@" +} + +shutdown() { + ifdown -a + stop +} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear new file mode 120000 index 0000000..066549b --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50dropbear @@ -0,0 +1 @@ +/etc/init.d/dropbear \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50telnet b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50telnet new file mode 100755 index 0000000..b524b2c --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50telnet @@ -0,0 +1,12 @@ +#!/bin/sh /etc/rc.common + +START=50 + +USE_PROCD=1 +PROG=/usr/sbin/telnetd + +start_service() { + procd_open_instance + procd_set_param command "$PROG" -F -l /lib/gluon/setup-mode/ash-login + procd_close_instance +} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50uhttpd b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50uhttpd new file mode 100755 index 0000000..5311870 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S50uhttpd @@ -0,0 +1,14 @@ +#!/bin/sh /etc/rc.common + +START=50 + +USE_PROCD=1 + +UHTTPD_BIN="/usr/sbin/uhttpd" + +start_service() { + procd_open_instance + procd_set_param respawn + procd_set_param command "$UHTTPD_BIN" -f -h /lib/gluon/setup-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80 + procd_close_instance +} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S60dnsmasq b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S60dnsmasq new file mode 100755 index 0000000..d275b4b --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S60dnsmasq @@ -0,0 +1,17 @@ +#!/bin/sh /etc/rc.common + +SETUP_MODE_DHCP_RANGE=192.168.1.2,192.168.1.254 + + +START=60 + +USE_PROCD=1 +PROG=/usr/sbin/dnsmasq + + +start_service() { + procd_open_instance + procd_set_param command $PROG -k -p 0 -F $SETUP_MODE_DHCP_RANGE -l /tmp/dhcp.leases -O option:router + procd_set_param respawn + procd_close_instance +} diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S95done b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S95done new file mode 120000 index 0000000..c9f3027 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S95done @@ -0,0 +1 @@ +/etc/init.d/done \ No newline at end of file diff --git a/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led new file mode 100755 index 0000000..d5375ac --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S96led @@ -0,0 +1,9 @@ +#!/bin/sh /etc/rc.common + +START=96 + +start() { + . /etc/diag.sh + get_status_led + status_led_set_timer 1000 300 +} diff --git a/gluon/gluon-setup-mode/files/lib/preinit/90_setup_mode b/gluon/gluon-setup-mode/files/lib/preinit/90_setup_mode new file mode 100644 index 0000000..31f64f6 --- /dev/null +++ b/gluon/gluon-setup-mode/files/lib/preinit/90_setup_mode @@ -0,0 +1,22 @@ +#!/bin/sh + + +check_enable() { + local enabled + local configured + + config_get enabled "$1" enabled + config_get configured "$1" configured + + if [ "$enabled" = 1 -o "$configured" != 1 ]; then + echo '/lib/gluon/setup-mode/rc.d' > /tmp/rc_d_path + fi +} + + +setup_mode_enable() { + config_load gluon-setup-mode + config_foreach check_enable setup_mode +} + +boot_hook_add preinit_main setup_mode_enable