ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/base-files/files/etc/banner b/package/base-files/files/etc/banner
new file mode 100644
index 0000000..f3af3c0
--- /dev/null
+++ b/package/base-files/files/etc/banner
@@ -0,0 +1,8 @@
+ _______ ________ __
+ | |.-----.-----.-----.| | | |.----.| |_
+ | - || _ | -__| || | | || _|| _|
+ |_______|| __|_____|__|__||________||__| |____|
+ |__| W I R E L E S S F R E E D O M
+ -----------------------------------------------------
+ %D %V, %C
+ -----------------------------------------------------
diff --git a/package/base-files/files/etc/banner.failsafe b/package/base-files/files/etc/banner.failsafe
new file mode 100644
index 0000000..49855e7
--- /dev/null
+++ b/package/base-files/files/etc/banner.failsafe
@@ -0,0 +1,15 @@
+================= FAILSAFE MODE active ================
+special commands:
+* firstboot reset settings to factory defaults
+* mount_root mount root-partition with config files
+
+after mount_root:
+* passwd change root's password
+* /etc/config directory with config files
+
+for more help see:
+https://openwrt.org/docs/guide-user/troubleshooting/
+- failsafe_and_factory_reset
+- root_password_reset
+=======================================================
+
diff --git a/package/base-files/files/etc/board.d/99-default_network b/package/base-files/files/etc/board.d/99-default_network
new file mode 100644
index 0000000..49d2a3b
--- /dev/null
+++ b/package/base-files/files/etc/board.d/99-default_network
@@ -0,0 +1,16 @@
+#
+# Copyright (C) 2013-2015 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+
+board_config_update
+
+json_is_a network object && exit 0
+
+ucidef_set_interface_lan 'eth0'
+[ -d /sys/class/net/eth1 ] && ucidef_set_interface_wan 'eth1'
+
+board_config_flush
+
+exit 0
diff --git a/package/base-files/files/etc/device_info b/package/base-files/files/etc/device_info
new file mode 100644
index 0000000..4045e9e
--- /dev/null
+++ b/package/base-files/files/etc/device_info
@@ -0,0 +1,4 @@
+DEVICE_MANUFACTURER='%M'
+DEVICE_MANUFACTURER_URL='%m'
+DEVICE_PRODUCT='%P'
+DEVICE_REVISION='%h'
diff --git a/package/base-files/files/etc/diag.sh b/package/base-files/files/etc/diag.sh
new file mode 100644
index 0000000..37a8ec7
--- /dev/null
+++ b/package/base-files/files/etc/diag.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Copyright (C) 2006-2019 OpenWrt.org
+
+. /lib/functions/leds.sh
+
+boot="$(get_dt_led boot)"
+failsafe="$(get_dt_led failsafe)"
+running="$(get_dt_led running)"
+upgrade="$(get_dt_led upgrade)"
+
+set_led_state() {
+ status_led="$boot"
+
+ case "$1" in
+ preinit)
+ status_led_blink_preinit
+ ;;
+ failsafe)
+ status_led_off
+ [ -n "$running" ] && {
+ status_led="$running"
+ status_led_off
+ }
+ status_led="$failsafe"
+ status_led_blink_failsafe
+ ;;
+ preinit_regular)
+ status_led_blink_preinit_regular
+ ;;
+ upgrade)
+ [ -n "$running" ] && {
+ status_led="$running"
+ status_led_off
+ }
+ status_led="$upgrade"
+ status_led_blink_preinit_regular
+ ;;
+ done)
+ status_led_off
+ [ "$status_led" != "$running" ] && \
+ status_led_restore_trigger "boot"
+ [ -n "$running" ] && {
+ status_led="$running"
+ status_led_on
+ }
+ ;;
+ esac
+}
+
+set_state() {
+ [ -n "$boot" -o -n "$failsafe" -o -n "$running" -o -n "$upgrade" ] && set_led_state "$1"
+}
diff --git a/package/base-files/files/etc/ethers b/package/base-files/files/etc/ethers
new file mode 100644
index 0000000..b92c200
--- /dev/null
+++ b/package/base-files/files/etc/ethers
@@ -0,0 +1,6 @@
+#
+# Lookup man 5 ethers for syntax documentation
+#
+# Examples :
+# 02:00:11:22:33:44 OpenWrt.lan
+# 02:00:11:22:33:44 192.168.1.1
diff --git a/package/base-files/files/etc/fstab b/package/base-files/files/etc/fstab
new file mode 100644
index 0000000..6e9b7ba
--- /dev/null
+++ b/package/base-files/files/etc/fstab
@@ -0,0 +1 @@
+# <file system> <mount point> <type> <options> <dump> <pass>
diff --git a/package/base-files/files/etc/group b/package/base-files/files/etc/group
new file mode 100644
index 0000000..5b06dc6
--- /dev/null
+++ b/package/base-files/files/etc/group
@@ -0,0 +1,11 @@
+root:x:0:
+daemon:x:1:
+adm:x:4:
+mail:x:8:
+dialout:x:20:
+audio:x:29:
+www-data:x:33:
+ftp:x:55:
+users:x:100:
+network:x:101:
+nogroup:x:65534:
diff --git a/package/base-files/files/etc/hosts b/package/base-files/files/etc/hosts
new file mode 100644
index 0000000..b7713eb
--- /dev/null
+++ b/package/base-files/files/etc/hosts
@@ -0,0 +1,5 @@
+127.0.0.1 localhost
+
+::1 localhost ip6-localhost ip6-loopback
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
diff --git a/package/base-files/files/etc/hotplug.d/leds/00-init b/package/base-files/files/etc/hotplug.d/leds/00-init
new file mode 100644
index 0000000..0303e2b
--- /dev/null
+++ b/package/base-files/files/etc/hotplug.d/leds/00-init
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+[ "$ACTION" = "add" ] && /etc/init.d/led start "$DEVICENAME"
diff --git a/package/base-files/files/etc/hotplug.d/net/00-sysctl b/package/base-files/files/etc/hotplug.d/net/00-sysctl
new file mode 100644
index 0000000..8abe7f8
--- /dev/null
+++ b/package/base-files/files/etc/hotplug.d/net/00-sysctl
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ "$ACTION" = add ]; then
+ for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
+ [ ! -f "$CONF" ] && continue;
+ sed -ne "/^[[:space:]]*net\..*\.$DEVICENAME\./p" "$CONF" | \
+ sysctl -e -p - | logger -t sysctl
+ done
+fi
diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
new file mode 100755
index 0000000..d91f591
--- /dev/null
+++ b/package/base-files/files/etc/init.d/boot
@@ -0,0 +1,62 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=10
+STOP=90
+
+uci_apply_defaults() {
+ . /lib/functions/system.sh
+
+ cd /etc/uci-defaults || return 0
+ files="$(ls)"
+ [ -z "$files" ] && return 0
+ for file in $files; do
+ ( . "./$(basename $file)" ) && rm -f "$file"
+ done
+ uci commit
+}
+
+boot() {
+ [ -f /proc/mounts ] || /sbin/mount_root
+ [ -f /proc/jffs2_bbc ] && echo "S" > /proc/jffs2_bbc
+ [ -f /proc/net/vlan/config ] && vconfig set_name_type DEV_PLUS_VID_NO_PAD
+
+ mkdir -p /var/lock
+ chmod 1777 /var/lock
+ mkdir -p /var/log
+ mkdir -p /var/run
+ ln -s /var/run /run
+ ln -s /var/lock /run/lock
+ mkdir -p /var/state
+ mkdir -p /var/tmp
+ mkdir -p /var/camera
+ mkdir -p /tmp/.uci
+ chmod 0700 /tmp/.uci
+ echo 0 > /tmp/dBm
+ touch /var/log/wtmp
+ touch /var/log/lastlog
+ mkdir -p /tmp/resolv.conf.d
+ touch /tmp/resolv.conf.d/resolv.conf.auto
+ ln -sf /tmp/resolv.conf.d/resolv.conf.auto /tmp/resolv.conf
+ grep -q debugfs /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime -t debugfs debugfs /sys/kernel/debug
+ grep -q bpf /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime,mode=0700 -t bpf bpffs /sys/fs/bpf
+ grep -q pstore /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime -t pstore pstore /sys/fs/pstore
+ [ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
+
+ touch /tmp/.config_pending
+ /bin/pppmodem &
+
+ mkdir -p /tmp/.uci
+ [ -f /etc/uci-defaults/30_uboot-envtools ] && (. /etc/uci-defaults/30_uboot-envtools)
+ /bin/config_generate
+ rm -f /tmp/.config_pending
+ /sbin/wifi config
+ uci_apply_defaults
+ sync
+
+ # temporary hack until configd exists
+ /sbin/reload_config
+
+ # let mount done early to boot telephony success
+ [ -d /tmp/root ] && mount_root done
+}
diff --git a/package/base-files/files/etc/init.d/done b/package/base-files/files/etc/init.d/done
new file mode 100755
index 0000000..06b277c
--- /dev/null
+++ b/package/base-files/files/etc/init.d/done
@@ -0,0 +1,17 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+START=95
+boot() {
+ # mount_root done
+ rm -f /sysupgrade.tgz && sync
+
+ # process user commands
+ [ -f /etc/rc.local ] && {
+ sh /etc/rc.local
+ }
+
+ # set leds to normal state
+ . /etc/diag.sh
+ set_state done
+}
diff --git a/package/base-files/files/etc/init.d/gpio_switch b/package/base-files/files/etc/init.d/gpio_switch
new file mode 100755
index 0000000..24d790b
--- /dev/null
+++ b/package/base-files/files/etc/init.d/gpio_switch
@@ -0,0 +1,66 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=94
+STOP=10
+USE_PROCD=1
+
+
+load_gpio_switch()
+{
+ local name
+ local gpio_pin
+ local value
+
+ config_get gpio_pin "$1" gpio_pin
+ config_get name "$1" name
+ config_get value "$1" value 0
+
+ [ -z "$gpio_pin" ] && {
+ echo >&2 "Skipping gpio_switch '$name' due to missing gpio_pin"
+ return 1
+ }
+
+ local gpio_path
+ if [ -n "$(echo "$gpio_pin" | grep -E "^[0-9]+$")" ]; then
+ gpio_path="/sys/class/gpio/gpio${gpio_pin}"
+
+ # export GPIO pin for access
+ [ -d "$gpio_path" ] || {
+ echo "$gpio_pin" >/sys/class/gpio/export
+ # we need to wait a bit until the GPIO appears
+ [ -d "$gpio_path" ] || sleep 1
+ }
+
+ # direction attribute only exists if the kernel supports changing the
+ # direction of a GPIO
+ if [ -e "${gpio_path}/direction" ]; then
+ # set the pin to output with high or low pin value
+ { [ "$value" = "0" ] && echo "low" || echo "high"; } \
+ >"$gpio_path/direction"
+ else
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } \
+ >"$gpio_path/value"
+ fi
+ else
+ gpio_path="/sys/class/gpio/${gpio_pin}"
+
+ [ -d "$gpio_path" ] && {
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } \
+ >"$gpio_path/value"
+ }
+ fi
+}
+
+service_triggers()
+{
+ procd_add_reload_trigger "system"
+}
+
+start_service()
+{
+ [ -e /sys/class/gpio/ ] && {
+ config_load system
+ config_foreach load_gpio_switch gpio_switch
+ }
+}
diff --git a/package/base-files/files/etc/init.d/led b/package/base-files/files/etc/init.d/led
new file mode 100755
index 0000000..7f05254
--- /dev/null
+++ b/package/base-files/files/etc/init.d/led
@@ -0,0 +1,198 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+
+START=96
+
+led_color_set() {
+ local cfg="$1"
+ local sysfs="$2"
+
+ local max_b
+ local colors
+ local color
+ local multi_intensity
+ local value
+ local write
+
+ [ -e /sys/class/leds/${sysfs}/multi_intensity ] || return
+ [ -e /sys/class/leds/${sysfs}/multi_index ] || return
+
+ max_b="$(cat /sys/class/leds/${sysfs}/max_brightness)"
+ colors="$(cat /sys/class/leds/${sysfs}/multi_index | tr " " "\n")"
+ multi_intensity=""
+ for color in $colors; do
+ config_get value $1 "color_${color}" "0"
+ [ "$value" -gt 0 ] && write=1
+ [ "$value" -gt "$max_b" ] && value="$max_b"
+ multi_intensity="${multi_intensity}${value} "
+ done
+
+ # Check if any color is configured
+ [ "$write" = 1 ] || return
+ # Remove last whitespace
+ multi_intensity="${multi_intensity:0:-1}"
+
+ echo "setting '${name}' led color to '${multi_intensity}'"
+ echo "${multi_intensity}" > /sys/class/leds/${sysfs}/multi_intensity
+}
+
+load_led() {
+ local name
+ local sysfs
+ local trigger
+ local dev
+ local ports
+ local mode
+ local default
+ local delayon
+ local delayoff
+ local interval
+
+ config_get sysfs $1 sysfs
+ config_get name $1 name "$sysfs"
+ config_get trigger $1 trigger "none"
+ config_get dev $1 dev
+ config_get ports $1 port
+ config_get mode $1 mode
+ config_get_bool default $1 default "0"
+ config_get delayon $1 delayon
+ config_get delayoff $1 delayoff
+ config_get interval $1 interval "50"
+ config_get port_state $1 port_state
+ config_get delay $1 delay "150"
+ config_get message $1 message ""
+ config_get gpio $1 gpio "0"
+ config_get_bool inverted $1 inverted "0"
+
+ [ "$2" ] && [ "$sysfs" != "$2" ] && return
+
+ # execute application led trigger
+ [ -f "/usr/libexec/led-trigger/${trigger}" ] && {
+ . "/usr/libexec/led-trigger/${trigger}"
+ return 0
+ }
+
+ [ "$trigger" = "usbdev" ] && {
+ # Backward compatibility: translate to the new trigger
+ trigger="usbport"
+ # Translate port of root hub, e.g. 4-1 -> usb4-port1
+ ports=$(echo "$dev" | sed -n 's/^\([0-9]*\)-\([0-9]*\)$/usb\1-port\2/p')
+ # Translate port of extra hub, e.g. 2-2.4 -> 2-2-port4
+ [ -z "$ports" ] && ports=$(echo "$dev" | sed -n 's/\./-port/p')
+ }
+
+ [ -e /sys/class/leds/${sysfs}/brightness ] && {
+ echo "setting up led ${name}"
+
+ printf "%s %s %d" \
+ "$sysfs" \
+ "$(sed -ne 's/^.*\[\(.*\)\].*$/\1/p' /sys/class/leds/${sysfs}/trigger)" \
+ "$(cat /sys/class/leds/${sysfs}/brightness)" \
+ >> /var/run/led.state
+ # Save default color if supported
+ [ -e /sys/class/leds/${sysfs}/multi_intensity ] && {
+ printf " %s" \
+ "$(sed 's/\ /:/g' /sys/class/leds/${sysfs}/multi_intensity)" \
+ >> /var/run/led.state
+ }
+ printf "\n" >> /var/run/led.state
+
+ [ "$default" = 0 ] &&
+ echo 0 >/sys/class/leds/${sysfs}/brightness
+
+ [ $default = 1 ] &&
+ cat /sys/class/leds/${sysfs}/max_brightness > /sys/class/leds/${sysfs}/brightness
+
+ led_color_set "$1" "$sysfs"
+
+ echo $trigger > /sys/class/leds/${sysfs}/trigger 2> /dev/null
+ ret="$?"
+ [ $ret = 0 ] || {
+ echo >&2 "Skipping trigger '$trigger' for led '$name' due to missing kernel module"
+ return 1
+ }
+ case "$trigger" in
+ "heartbeat")
+ echo "${inverted}" > "/sys/class/leds/${sysfs}/invert"
+ ;;
+
+ "netdev")
+ [ -n "$dev" ] && {
+ echo $dev > /sys/class/leds/${sysfs}/device_name
+ for m in $mode; do
+ [ -e "/sys/class/leds/${sysfs}/$m" ] && \
+ echo 1 > /sys/class/leds/${sysfs}/$m
+ done
+ echo $interval > /sys/class/leds/${sysfs}/interval 2>/dev/null
+ }
+ ;;
+
+ "timer"|"oneshot")
+ [ -n "$delayon" ] && \
+ echo $delayon > /sys/class/leds/${sysfs}/delay_on
+ [ -n "$delayoff" ] && \
+ echo $delayoff > /sys/class/leds/${sysfs}/delay_off
+ ;;
+
+ "usbport")
+ local p
+
+ for p in $ports; do
+ echo 1 > /sys/class/leds/${sysfs}/ports/$p
+ done
+ ;;
+
+ "port_state")
+ [ -n "$port_state" ] && \
+ echo $port_state > /sys/class/leds/${sysfs}/port_state
+ ;;
+
+ "gpio")
+ echo $gpio > /sys/class/leds/${sysfs}/gpio
+ echo $inverted > /sys/class/leds/${sysfs}/inverted
+ ;;
+
+ switch[0-9]*)
+ local port_mask speed_mask
+
+ config_get port_mask $1 port_mask
+ [ -n "$port_mask" ] && \
+ echo $port_mask > /sys/class/leds/${sysfs}/port_mask
+ config_get speed_mask $1 speed_mask
+ [ -n "$speed_mask" ] && \
+ echo $speed_mask > /sys/class/leds/${sysfs}/speed_mask
+ [ -n "$mode" ] && \
+ echo "$mode" > /sys/class/leds/${sysfs}/mode
+ ;;
+ esac
+ }
+}
+
+start() {
+ [ -e /sys/class/leds/ ] && {
+ [ -s /var/run/led.state ] && {
+ local led trigger brightness color
+ while read led trigger brightness color; do
+ [ "$1" ] && [ "$1" != "$led" ] && continue
+ [ -e "/sys/class/leds/$led/trigger" ] && \
+ echo "$trigger" > "/sys/class/leds/$led/trigger"
+
+ [ -e "/sys/class/leds/$led/brightness" ] && \
+ echo "$brightness" > "/sys/class/leds/$led/brightness"
+
+ [ -e "/sys/class/leds/$led/multi_intensity" ] && \
+ echo "$color" | sed 's/:/\ /g' > \
+ "/sys/class/leds/$led/multi_intensity"
+ done < /var/run/led.state
+ if [ "$1" ]; then
+ grep -v "^$1 " /var/run/led.state > /var/run/led.state.new
+ mv /var/run/led.state.new /var/run/led.state
+ else
+ rm /var/run/led.state
+ fi
+ }
+
+ config_load system
+ config_foreach load_led led "$1"
+ }
+}
diff --git a/package/base-files/files/etc/init.d/sysctl b/package/base-files/files/etc/init.d/sysctl
new file mode 100755
index 0000000..88c822b
--- /dev/null
+++ b/package/base-files/files/etc/init.d/sysctl
@@ -0,0 +1,44 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+START=11
+
+apply_defaults() {
+ local mem="$(awk '/^MemTotal:/ {print $2}' /proc/meminfo)"
+ local min_free frag_low_thresh frag_high_thresh
+
+ if [ "$mem" -gt 131072 ]; then # >=256M DDR device
+ min_free=8192
+ elif [ "$mem" -gt 65536 ]; then # 128M DDR device
+ min_free=4196
+ else
+ min_free=1024
+ frag_low_thresh=393216
+ frag_high_thresh=524288
+ fi
+
+ sysctl -qw vm.min_free_kbytes="$min_free"
+
+ [ "$frag_low_thresh" ] && sysctl -qw \
+ net.ipv4.ipfrag_low_thresh="$frag_low_thresh" \
+ net.ipv4.ipfrag_high_thresh="$frag_high_thresh" \
+ net.ipv6.ip6frag_low_thresh="$frag_low_thresh" \
+ net.ipv6.ip6frag_high_thresh="$frag_high_thresh" \
+ net.netfilter.nf_conntrack_frag6_low_thresh="$frag_low_thresh" \
+ net.netfilter.nf_conntrack_frag6_high_thresh="$frag_high_thresh"
+
+ # first set default, then all interfaces to avoid races with appearing interfaces
+ if [ -d /proc/sys/net/ipv6/conf ]; then
+ echo 0 > /proc/sys/net/ipv6/conf/default/accept_ra
+ for iface in /proc/sys/net/ipv6/conf/*/accept_ra; do
+ echo 0 > "$iface"
+ done
+ fi
+}
+
+start() {
+ apply_defaults
+ for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
+ [ -f "$CONF" ] && sysctl -e -p "$CONF" >&-
+ done
+}
diff --git a/package/base-files/files/etc/init.d/sysfixtime b/package/base-files/files/etc/init.d/sysfixtime
new file mode 100755
index 0000000..93f7922
--- /dev/null
+++ b/package/base-files/files/etc/init.d/sysfixtime
@@ -0,0 +1,44 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013-2014 OpenWrt.org
+
+START=00
+STOP=90
+
+RTC_DEV=/dev/rtc0
+HWCLOCK=/sbin/hwclock
+
+boot() {
+ hwclock_load
+ local maxtime="$(find_max_time)"
+ local curtime="$(date +%s)"
+ if [ $curtime -lt $maxtime ]; then
+ date -s @$maxtime
+ hwclock_save
+ fi
+}
+
+start() {
+ hwclock_load
+}
+
+stop() {
+ hwclock_save
+}
+
+hwclock_load() {
+ [ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -s -u -f $RTC_DEV
+}
+
+hwclock_save(){
+ [ -e "$RTC_DEV" ] && [ -e "$HWCLOCK" ] && $HWCLOCK -w -u -f $RTC_DEV && \
+ logger -t sysfixtime "saved '$(date)' to $RTC_DEV"
+}
+
+find_max_time() {
+ local file newest
+
+ for file in $( find /etc -type f ) ; do
+ [ -z "$newest" -o "$newest" -ot "$file" ] && newest=$file
+ done
+ [ "$newest" ] && date -r "$newest" +%s
+}
diff --git a/package/base-files/files/etc/init.d/system b/package/base-files/files/etc/init.d/system
new file mode 100755
index 0000000..042e018
--- /dev/null
+++ b/package/base-files/files/etc/init.d/system
@@ -0,0 +1,45 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+
+START=11
+USE_PROCD=1
+
+validate_system_section() {
+ uci_load_validate system system "$1" "$2" \
+ 'hostname:string:OpenWrt' \
+ 'conloglevel:uinteger' \
+ 'buffersize:uinteger' \
+ 'timezone:string:UTC' \
+ 'zonename:string'
+}
+
+system_config() {
+ [ "$2" = 0 ] || {
+ echo "validation failed"
+ return 1
+ }
+
+ echo "$hostname" > /proc/sys/kernel/hostname
+ [ -z "$conloglevel" -a -z "$buffersize" ] || dmesg ${conloglevel:+-n $conloglevel} ${buffersize:+-s $buffersize}
+ echo "$timezone" > /tmp/TZ
+ [ -n "$zonename" ] && [ -f "/usr/share/zoneinfo/${zonename// /_}" ] \
+ && ln -sf "/usr/share/zoneinfo/${zonename// /_}" /tmp/localtime \
+ && rm -f /tmp/TZ
+
+ # apply timezone to kernel
+ hwclock -u --systz
+}
+
+reload_service() {
+ config_load system
+ config_foreach validate_system_section system system_config
+}
+
+service_triggers() {
+ procd_add_reload_trigger "system"
+ procd_add_validation validate_system_section
+}
+
+start_service() {
+ reload_service
+}
diff --git a/package/base-files/files/etc/init.d/umount b/package/base-files/files/etc/init.d/umount
new file mode 100755
index 0000000..5dd9acc
--- /dev/null
+++ b/package/base-files/files/etc/init.d/umount
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+STOP=90
+
+restart() {
+ :
+}
+
+revert_overlay() {
+ #kill all process to release mnt/
+ kill -9 -1
+
+ /bin/umount /overlay/etc
+ /bin/umount /overlay/nvm
+}
+
+stop() {
+ sync
+ revert_overlay
+ /bin/umount -a -d -r
+}
diff --git a/package/base-files/files/etc/inittab b/package/base-files/files/etc/inittab
new file mode 100644
index 0000000..9820e71
--- /dev/null
+++ b/package/base-files/files/etc/inittab
@@ -0,0 +1,3 @@
+::sysinit:/etc/init.d/rcS S boot
+::shutdown:/etc/init.d/rcS K shutdown
+::askconsole:/usr/libexec/login.sh
diff --git a/package/base-files/files/etc/iproute2/ematch_map b/package/base-files/files/etc/iproute2/ematch_map
new file mode 100644
index 0000000..4d6bb2f
--- /dev/null
+++ b/package/base-files/files/etc/iproute2/ematch_map
@@ -0,0 +1,8 @@
+# lookup table for ematch kinds
+1 cmp
+2 nbyte
+3 u32
+4 meta
+7 canid
+8 ipset
+9 ipt
diff --git a/package/base-files/files/etc/iproute2/rt_protos b/package/base-files/files/etc/iproute2/rt_protos
new file mode 100644
index 0000000..5b61798
--- /dev/null
+++ b/package/base-files/files/etc/iproute2/rt_protos
@@ -0,0 +1,18 @@
+#
+# Reserved protocols.
+#
+0 unspec
+1 redirect
+2 kernel
+3 boot
+4 static
+8 gated
+9 ra
+10 mrt
+11 zebra
+12 bird
+13 dnrouted
+14 xorp
+15 ntk
+16 dhcp
+42 babel
diff --git a/package/base-files/files/etc/iproute2/rt_tables b/package/base-files/files/etc/iproute2/rt_tables
new file mode 100644
index 0000000..5fc09b3
--- /dev/null
+++ b/package/base-files/files/etc/iproute2/rt_tables
@@ -0,0 +1,12 @@
+#
+# reserved values
+#
+128 prelocal
+255 local
+254 main
+253 default
+0 unspec
+#
+# local
+#
+#1 inr.ruhep
diff --git a/package/base-files/files/etc/openwrt_release b/package/base-files/files/etc/openwrt_release
new file mode 100644
index 0000000..d03400c
--- /dev/null
+++ b/package/base-files/files/etc/openwrt_release
@@ -0,0 +1,7 @@
+DISTRIB_ID='%D'
+DISTRIB_RELEASE='%V'
+DISTRIB_REVISION='%R'
+DISTRIB_TARGET='%S'
+DISTRIB_ARCH='%A'
+DISTRIB_DESCRIPTION='%D %V %C'
+DISTRIB_TAINTS='%t'
diff --git a/package/base-files/files/etc/openwrt_version b/package/base-files/files/etc/openwrt_version
new file mode 100644
index 0000000..48157ed
--- /dev/null
+++ b/package/base-files/files/etc/openwrt_version
@@ -0,0 +1 @@
+%C
diff --git a/package/base-files/files/etc/os-release b/package/base-files/files/etc/os-release
new file mode 120000
index 0000000..c4c75b4
--- /dev/null
+++ b/package/base-files/files/etc/os-release
@@ -0,0 +1 @@
+../usr/lib/os-release
\ No newline at end of file
diff --git a/package/base-files/files/etc/passwd b/package/base-files/files/etc/passwd
new file mode 100644
index 0000000..1d06a80
--- /dev/null
+++ b/package/base-files/files/etc/passwd
@@ -0,0 +1,5 @@
+root:x:0:0:root:/root:/bin/ash
+daemon:*:1:1:daemon:/var:/bin/false
+ftp:*:55:55:ftp:/home/ftp:/bin/false
+network:*:101:101:network:/var:/bin/false
+nobody:*:65534:65534:nobody:/var:/bin/false
diff --git a/package/base-files/files/etc/preinit b/package/base-files/files/etc/preinit
new file mode 100755
index 0000000..75c380f
--- /dev/null
+++ b/package/base-files/files/etc/preinit
@@ -0,0 +1,33 @@
+#!/bin/sh
+# Copyright (C) 2006-2016 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+[ -z "$PREINIT" ] && exec /sbin/init
+
+export PATH="%PATH%"
+
+. /lib/functions.sh
+. /lib/functions/preinit.sh
+. /lib/functions/system.sh
+
+boot_hook_init preinit_essential
+boot_hook_init preinit_main
+boot_hook_init failsafe
+boot_hook_init initramfs
+boot_hook_init preinit_mount_root
+
+for pi_source_file in /lib/preinit/*; do
+ . $pi_source_file
+done
+
+or_failsafe_wait_timeout=$(awk 'BEGIN { RS=" "; FS="="; } $1 == "failsafe_wait" { print $2 }' < /proc/cmdline)
+[ -z "$or_failsafe_wait_timeout" ] || fs_failsafe_wait_timeout=$or_failsafe_wait_timeout
+[ "$fs_failsafe_wait_timeout" = "0" ] && pi_preinit_no_failsafe=y
+
+boot_run_hook preinit_essential
+
+pi_mount_skip_next=false
+pi_jffs2_mount_success=false
+pi_failsafe_net_message=false
+
+boot_run_hook preinit_main
diff --git a/package/base-files/files/etc/profile b/package/base-files/files/etc/profile
new file mode 100644
index 0000000..76b149b
--- /dev/null
+++ b/package/base-files/files/etc/profile
@@ -0,0 +1,40 @@
+[ -e /tmp/.failsafe ] && export FAILSAFE=1
+
+[ -f /etc/banner ] && cat /etc/banner
+[ -n "$FAILSAFE" ] && cat /etc/banner.failsafe
+
+grep -Fsq '/ overlay ro,' /proc/mounts && {
+ echo 'Your JFFS2-partition seems full and overlayfs is mounted read-only.'
+ echo 'Please try to remove files from /overlay/upper/... and reboot!'
+}
+
+export PATH="%PATH%"
+export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
+export HOME=${HOME:-/root}
+export PS1='\u@\h:\w\$ '
+export ENV=/etc/shinit
+
+case "$TERM" in
+ xterm*|rxvt*)
+ export PS1='\[\e]0;\u@\h: \w\a\]'$PS1
+ ;;
+esac
+
+[ -n "$FAILSAFE" ] || {
+ for FILE in /etc/profile.d/*.sh; do
+ [ -e "$FILE" ] && . "$FILE"
+ done
+ unset FILE
+}
+
+if ( grep -qs '^root::' /etc/shadow && \
+ [ -z "$FAILSAFE" ] )
+then
+cat << EOF
+=== WARNING! =====================================
+There is no root password defined on this device!
+Use the "passwd" command to set up a new password
+in order to prevent unauthorized SSH logins.
+--------------------------------------------------
+EOF
+fi
diff --git a/package/base-files/files/etc/protocols b/package/base-files/files/etc/protocols
new file mode 100644
index 0000000..26bc775
--- /dev/null
+++ b/package/base-files/files/etc/protocols
@@ -0,0 +1,57 @@
+# Internet (IP) protocols
+#
+# Updated from http://www.iana.org/assignments/protocol-numbers and other
+# sources.
+# New protocols will be added on request if they have been officially
+# assigned by IANA and are not historical.
+# If you need a huge list of used numbers please install the nmap package.
+
+ip 0 IP # internet protocol, pseudo protocol number
+#hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]
+icmp 1 ICMP # internet control message protocol
+igmp 2 IGMP # Internet Group Management
+ggp 3 GGP # gateway-gateway protocol
+ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
+st 5 ST # ST datagram mode
+tcp 6 TCP # transmission control protocol
+egp 8 EGP # exterior gateway protocol
+igp 9 IGP # any private interior gateway (Cisco)
+pup 12 PUP # PARC universal packet protocol
+udp 17 UDP # user datagram protocol
+hmp 20 HMP # host monitoring protocol
+xns-idp 22 XNS-IDP # Xerox NS IDP
+rdp 27 RDP # "reliable datagram" protocol
+iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905]
+dccp 33 DCCP # Datagram Congestion Control Protocol [RFC4340]
+xtp 36 XTP # Xpress Transfer Protocol
+ddp 37 DDP # Datagram Delivery Protocol
+idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
+ipv6 41 IPv6 # Internet Protocol, version 6
+ipv6-route 43 IPv6-Route # Routing Header for IPv6
+ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
+idrp 45 IDRP # Inter-Domain Routing Protocol
+rsvp 46 RSVP # Reservation Protocol
+gre 47 GRE # General Routing Encapsulation
+esp 50 IPSEC-ESP # Encap Security Payload [RFC2046]
+ah 51 IPSEC-AH # Authentication Header [RFC2402]
+skip 57 SKIP # SKIP
+ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
+ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
+ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
+rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB)
+vmtp 81 VMTP # Versatile Message Transport
+eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco)
+ospf 89 OSPFIGP # Open Shortest Path First IGP
+ax.25 93 AX.25 # AX.25 frames
+ipip 94 IPIP # IP-within-IP Encapsulation Protocol
+etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378]
+encap 98 ENCAP # Yet Another IP encapsulation [RFC1241]
+# 99 # any private encryption scheme
+pim 103 PIM # Protocol Independent Multicast
+ipcomp 108 IPCOMP # IP Payload Compression Protocol
+vrrp 112 VRRP # Virtual Router Redundancy Protocol
+l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661]
+isis 124 ISIS # IS-IS over IPv4
+sctp 132 SCTP # Stream Control Transmission Protocol
+fc 133 FC # Fibre Channel
+
diff --git a/package/base-files/files/etc/rc.button/failsafe b/package/base-files/files/etc/rc.button/failsafe
new file mode 100755
index 0000000..ba958fa
--- /dev/null
+++ b/package/base-files/files/etc/rc.button/failsafe
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "${TYPE}" = "switch" ] || echo ${BUTTON} > /tmp/failsafe_button
+
+return 0
diff --git a/package/base-files/files/etc/rc.button/power b/package/base-files/files/etc/rc.button/power
new file mode 100755
index 0000000..0080e0e
--- /dev/null
+++ b/package/base-files/files/etc/rc.button/power
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+[ "${ACTION}" = "released" ] || exit 0
+
+. /lib/functions.sh
+
+logger "$BUTTON pressed for $SEEN seconds"
+
+if [ "$SEEN" -lt 3 ]
+then
+ echo "Please press 3s" > /dev/console
+#elif [ "$SEEN" -ge 3 -a "$SEEN" -lt 5]
+#then
+# echo "3-5s" > /dev/console
+elif [ "$SEEN" -gt 3 ]
+then
+fi
+
+return 0
diff --git a/package/base-files/files/etc/rc.button/reboot b/package/base-files/files/etc/rc.button/reboot
new file mode 100755
index 0000000..cd547e3
--- /dev/null
+++ b/package/base-files/files/etc/rc.button/reboot
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+[ "${ACTION}" = "released" ] || exit 0
+
+if [ "$SEEN" -ge 5 ]
+then
+ echo "REBOOT" > /dev/console
+ sync
+ reboot
+fi
+
+return 0
diff --git a/package/base-files/files/etc/rc.button/reset b/package/base-files/files/etc/rc.button/reset
new file mode 100755
index 0000000..2403122
--- /dev/null
+++ b/package/base-files/files/etc/rc.button/reset
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+OVERLAY="$( grep ' /overlay ' /proc/mounts )"
+
+case "$ACTION" in
+pressed)
+ [ -z "$OVERLAY" ] && return 0
+
+ return 5
+;;
+timeout)
+ . /etc/diag.sh
+ set_state failsafe
+;;
+released)
+ if [ "$SEEN" -lt 1 ]
+ then
+ echo "REBOOT" > /dev/console
+ sync
+ reboot
+ elif [ "$SEEN" -ge 5 -a -n "$OVERLAY" ]
+ then
+ echo "FACTORY RESET" > /dev/console
+ jffs2reset -y && reboot &
+ fi
+;;
+esac
+
+return 0
diff --git a/package/base-files/files/etc/rc.button/rfkill b/package/base-files/files/etc/rc.button/rfkill
new file mode 100755
index 0000000..fbdda40
--- /dev/null
+++ b/package/base-files/files/etc/rc.button/rfkill
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+[ "${ACTION}" = "released" -o -n "${TYPE}" ] || exit 0
+
+. /lib/functions.sh
+
+rfkill_state=0
+
+wifi_rfkill_set() {
+ uci set wireless.$1.disabled=$rfkill_state
+}
+
+wifi_rfkill_check() {
+ local disabled
+ config_get disabled $1 disabled
+ [ "$disabled" = "1" ] || rfkill_state=1
+}
+
+config_load wireless
+case "${TYPE}" in
+"switch")
+ [ "${ACTION}" = "released" ] && rfkill_state=1
+ ;;
+*)
+ config_foreach wifi_rfkill_check wifi-device
+ ;;
+esac
+config_foreach wifi_rfkill_set wifi-device
+uci commit wireless
+wifi up
+
+return 0
diff --git a/package/base-files/files/etc/rc.common b/package/base-files/files/etc/rc.common
new file mode 100755
index 0000000..abf72ea
--- /dev/null
+++ b/package/base-files/files/etc/rc.common
@@ -0,0 +1,190 @@
+#!/bin/sh
+# Copyright (C) 2006-2012 OpenWrt.org
+
+. $IPKG_INSTROOT/lib/functions.sh
+. $IPKG_INSTROOT/lib/functions/service.sh
+
+initscript=$1
+action=${2:-help}
+shift 2
+
+start() {
+ return 0
+}
+
+stop() {
+ return 0
+}
+
+reload() {
+ restart
+}
+
+restart() {
+ trap '' TERM
+ stop "$@"
+ trap - TERM
+ start "$@"
+}
+
+boot() {
+ start "$@"
+}
+
+shutdown() {
+ stop
+}
+
+disable() {
+ name="$(basename "${initscript}")"
+ rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
+ rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
+}
+
+enable() {
+ err=1
+ name="$(basename "${initscript}")"
+ [ "$START" ] && \
+ ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" && \
+ err=0
+ [ "$STOP" ] && \
+ ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}" && \
+ err=0
+ return $err
+}
+
+enabled() {
+ name="$(basename "${initscript}")"
+ name="${name##[SK][0-9][0-9]}"
+ {
+ [ -z "${START:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/S${START}$name" ]
+ } && {
+ [ -z "${STOP:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/K${STOP}$name" ]
+ }
+}
+
+depends() {
+ return 0
+}
+
+ALL_HELP=""
+ALL_COMMANDS="boot shutdown depends"
+extra_command() {
+ local cmd="$1"
+ local help="$2"
+
+ local extra="$(printf "%-16s%s" "${cmd}" "${help}")"
+ ALL_HELP="${ALL_HELP}\t${extra}\n"
+ ALL_COMMANDS="${ALL_COMMANDS} ${cmd}"
+}
+
+help() {
+ cat <<EOF
+Syntax: $initscript [command]
+
+Available commands:
+EOF
+ echo -e "$ALL_HELP"
+}
+
+# for procd
+start_service() {
+ return 0
+}
+
+stop_service() {
+ return 0
+}
+
+service_triggers() {
+ return 0
+}
+
+service_running() {
+ local instance="${1:-*}"
+
+ procd_running "$(basename $initscript)" "$instance"
+}
+
+${INIT_TRACE:+set -x}
+
+extra_command "start" "Start the service"
+extra_command "stop" "Stop the service"
+extra_command "restart" "Restart the service"
+extra_command "reload" "Reload configuration files (or restart if service does not implement reload)"
+extra_command "enable" "Enable service autostart"
+extra_command "disable" "Disable service autostart"
+extra_command "enabled" "Check if service is started on boot"
+
+. "$initscript"
+
+[ -n "$USE_PROCD" ] && {
+ extra_command "running" "Check if service is running"
+ extra_command "status" "Service status"
+ extra_command "trace" "Start with syscall trace"
+ extra_command "info" "Dump procd service info"
+
+ . $IPKG_INSTROOT/lib/functions/procd.sh
+ basescript=$(readlink "$initscript")
+ rc_procd() {
+ local method="set"
+ [ -n "$2" ] && method="add"
+ procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
+ "$@"
+ procd_close_service "$method"
+ }
+
+ start() {
+ rc_procd start_service "$@"
+ if eval "type service_started" 2>/dev/null >/dev/null; then
+ service_started
+ fi
+ }
+
+ trace() {
+ TRACE_SYSCALLS=1
+ start "$@"
+ }
+
+ info() {
+ json_init
+ json_add_string name "$(basename ${basescript:-$initscript})"
+ json_add_boolean verbose "1"
+ _procd_ubus_call list
+ }
+
+ stop() {
+ procd_lock
+ stop_service "$@"
+ procd_kill "$(basename ${basescript:-$initscript})" "$1"
+ if eval "type service_stopped" 2>/dev/null >/dev/null; then
+ service_stopped
+ fi
+ }
+
+ reload() {
+ if eval "type reload_service" 2>/dev/null >/dev/null; then
+ procd_lock
+ reload_service "$@"
+ else
+ start
+ fi
+ }
+
+ running() {
+ service_running "$@"
+ }
+
+ status() {
+ if eval "type status_service" 2>/dev/null >/dev/null; then
+ status_service "$@"
+ else
+ _procd_status "$(basename ${basescript:-$initscript})" "$1"
+ fi
+ }
+}
+
+ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
+ALL_HELP="${ALL_HELP}${EXTRA_HELP}"
+list_contains ALL_COMMANDS "$action" || action=help
+$action "$@"
diff --git a/package/base-files/files/etc/rc.local b/package/base-files/files/etc/rc.local
new file mode 100644
index 0000000..5639477
--- /dev/null
+++ b/package/base-files/files/etc/rc.local
@@ -0,0 +1,4 @@
+# Put your custom commands here that should be executed once
+# the system init finished. By default this file does nothing.
+
+exit 0
diff --git a/package/base-files/files/etc/services b/package/base-files/files/etc/services
new file mode 100644
index 0000000..968f9e7
--- /dev/null
+++ b/package/base-files/files/etc/services
@@ -0,0 +1,173 @@
+echo 7/tcp
+echo 7/udp
+discard 9/tcp
+discard 9/udp
+daytime 13/tcp
+daytime 13/udp
+netstat 15/tcp
+chargen 19/tcp
+chargen 19/udp
+ftp-data 20/tcp
+ftp 21/tcp
+ssh 22/tcp
+ssh 22/udp
+telnet 23/tcp
+smtp 25/tcp
+time 37/tcp
+time 37/udp
+whois 43/tcp
+domain 53/tcp
+domain 53/udp
+bootps 67/tcp
+bootps 67/udp
+bootpc 68/tcp
+bootpc 68/udp
+tftp 69/udp
+finger 79/tcp
+www 80/tcp http
+kerberos 88/tcp kerberos5 krb5 kerberos-sec
+kerberos 88/udp kerberos5 krb5 kerberos-sec
+pop3 110/tcp
+pop3 110/udp
+sunrpc 111/tcp rpcbind
+sunrpc 111/udp rpcbind
+auth 113/tcp ident
+sftp 115/tcp
+nntp 119/tcp
+ntp 123/tcp
+ntp 123/udp
+netbios-ns 137/tcp
+netbios-ns 137/udp
+netbios-dgm 138/tcp
+netbios-dgm 138/udp
+netbios-ssn 139/tcp
+netbios-ssn 139/udp
+imap2 143/tcp imap
+imap2 143/udp imap
+snmp 161/tcp
+snmp 161/udp
+snmp-trap 162/tcp snmptrap
+snmp-trap 162/udp snmptrap
+xdmcp 177/tcp
+xdmcp 177/udp
+bgp 179/tcp
+bgp 179/udp
+imap3 220/tcp
+imap3 220/udp
+ldap 389/tcp
+ldap 389/udp
+https 443/tcp
+https 443/udp
+microsoft-ds 445/tcp
+microsoft-ds 445/udp
+isakmp 500/tcp
+isakmp 500/udp
+rtsp 554/tcp
+rtsp 554/udp
+ipp 631/tcp
+ipp 631/udp
+syslog 514/udp
+printer 515/tcp spooler
+dhcpv6-client 546/tcp
+dhcpv6-client 546/udp
+dhcpv6-server 547/tcp
+dhcpv6-server 547/udp
+afpovertcp 548/tcp
+afpovertcp 548/udp
+nntps 563/tcp snntp
+nntps 563/udp snntp
+submission 587/tcp
+submission 587/udp
+ldaps 636/tcp
+ldaps 636/udp
+tinc 655/tcp
+tinc 655/udp
+rsync 873/tcp
+rsync 873/udp
+ftps-data 989/tcp
+ftps 990/tcp
+imaps 993/tcp
+imaps 993/udp
+ircs 994/tcp
+ircs 994/udp
+pop3s 995/tcp
+pop3s 995/udp
+socks 1080/tcp
+socks 1080/udp
+openvpn 1194/tcp
+openvpn 1194/udp
+l2f 1701/tcp l2tp
+l2f 1701/udp l2tp
+radius 1812/tcp
+radius 1812/udp
+radius-acct 1813/tcp radacct
+radius-acct 1813/udp radacct
+nfs 2049/tcp
+nfs 2049/udp
+dict 2628/tcp
+dict 2628/udp
+gpsd 2947/tcp
+gpsd 2947/udp
+icpv2 3130/tcp icp
+icpv2 3130/udp icp
+mysql 3306/tcp
+mysql 3306/udp
+nut 3493/tcp
+nut 3493/udp
+distcc 3632/tcp
+distcc 3632/udp
+daap 3689/tcp
+daap 3689/udp
+svn 3690/tcp subversion
+svn 3690/udp subversion
+epmd 4369/tcp
+epmd 4369/udp
+iax 4569/tcp
+iax 4569/udp
+mtn 4691/tcp
+mtn 4691/udp
+munin 4949/tcp
+sip 5060/tcp
+sip 5060/udp
+sip-tls 5061/tcp
+sip-tls 5061/udp
+xmpp-client 5222/tcp jabber-client
+xmpp-client 5222/udp jabber-client
+xmpp-server 5269/tcp jabber-server
+xmpp-server 5269/udp jabber-server
+mdns 5353/tcp
+mdns 5353/udp
+postgresql 5432/tcp postgres
+postgresql 5432/udp postgres
+x11 6000/tcp
+x11 6000/udp
+mysql-proxy 6446/tcp
+mysql-proxy 6446/udp
+bacula-dir 9101/tcp
+bacula-dir 9101/udp
+bacula-fd 9102/tcp
+bacula-fd 9102/udp
+bacula-sd 9103/tcp
+bacula-sd 9103/udp
+nbd 10809/tcp
+zabbix-agent 10050/tcp
+zabbix-agent 10050/udp
+zabbix-trapper 10051/tcp
+zabbix-trapper 10051/udp
+hkp 11371/tcp
+hkp 11371/udp
+ssmtp 465/tcp smtps
+spamd 783/tcp
+zebrasrv 2600/tcp
+zebra 2601/tcp
+ripd 2602/tcp
+ripngd 2603/tcp
+ospfd 2604/tcp
+bgpd 2605/tcp
+ospf6d 2606/tcp
+ospfapi 2607/tcp
+isisd 2608/tcp
+sane-port 6566/tcp sane saned
+ircd 6667/tcp
+git 9418/tcp
+
diff --git a/package/base-files/files/etc/shadow b/package/base-files/files/etc/shadow
new file mode 100644
index 0000000..39bdb9c
--- /dev/null
+++ b/package/base-files/files/etc/shadow
@@ -0,0 +1,5 @@
+root:::0:99999:7:::
+daemon:*:0:0:99999:7:::
+ftp:*:0:0:99999:7:::
+network:*:0:0:99999:7:::
+nobody:*:0:0:99999:7:::
diff --git a/package/base-files/files/etc/shells b/package/base-files/files/etc/shells
new file mode 100644
index 0000000..006aa38
--- /dev/null
+++ b/package/base-files/files/etc/shells
@@ -0,0 +1 @@
+/bin/ash
diff --git a/package/base-files/files/etc/shinit b/package/base-files/files/etc/shinit
new file mode 100644
index 0000000..8df9771
--- /dev/null
+++ b/package/base-files/files/etc/shinit
@@ -0,0 +1,12 @@
+[ -x /bin/more ] || [ -x /usr/bin/more ] || alias more=less
+[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
+
+alias ll='ls -alF --color=auto'
+
+[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
+
+[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
+[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
+
+[ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit"
+[ -z "$KSH_VERSION" -o \! -s "$HOME/.mkshrc" ] || . "$HOME/.mkshrc"
diff --git a/package/base-files/files/etc/sysctl.conf b/package/base-files/files/etc/sysctl.conf
new file mode 100644
index 0000000..10e10b3
--- /dev/null
+++ b/package/base-files/files/etc/sysctl.conf
@@ -0,0 +1,18 @@
+# Defaults are configured in /etc/sysctl.d/* and can be customized in this file
+
+net.ipv6.conf.ccinet0.accept_ra = 2
+net.ipv6.conf.ccinet1.accept_ra = 2
+net.ipv6.conf.ccinet2.accept_ra = 2
+net.ipv6.conf.ccinet3.accept_ra = 2
+net.ipv6.conf.ccinet4.accept_ra = 2
+net.ipv6.conf.ccinet5.accept_ra = 2
+net.ipv6.conf.ccinet6.accept_ra = 2
+net.ipv6.conf.ccinet7.accept_ra = 2
+net.ipv6.conf.ccinet8.accept_ra = 2
+net.ipv6.conf.ccinet9.accept_ra = 2
+net.ipv6.conf.ccinet10.accept_ra = 2
+net.ipv6.conf.ccinet11.accept_ra = 2
+net.ipv6.conf.ccinet12.accept_ra = 2
+net.ipv6.conf.ccinet13.accept_ra = 2
+net.ipv6.conf.ccinet14.accept_ra = 2
+net.ipv6.conf.ccinet15.accept_ra = 2
diff --git a/package/base-files/files/etc/sysctl.d/10-default.conf b/package/base-files/files/etc/sysctl.d/10-default.conf
new file mode 100644
index 0000000..ee7df2b
--- /dev/null
+++ b/package/base-files/files/etc/sysctl.d/10-default.conf
@@ -0,0 +1,28 @@
+# Do not edit, changes to this file will be lost on upgrades
+# /etc/sysctl.conf can be used to customize sysctl settings
+
+kernel.panic=3
+kernel.core_pattern=/tmp/%e.%t.%p.%s.core
+fs.suid_dumpable=2
+
+fs.protected_hardlinks=1
+fs.protected_symlinks=1
+
+net.core.bpf_jit_enable=1
+net.core.bpf_jit_kallsyms=1
+
+net.ipv4.conf.default.arp_ignore=1
+net.ipv4.conf.all.arp_ignore=1
+net.ipv4.ip_forward=1
+net.ipv4.icmp_echo_ignore_broadcasts=1
+net.ipv4.icmp_ignore_bogus_error_responses=1
+net.ipv4.igmp_max_memberships=100
+net.ipv4.tcp_fin_timeout=30
+net.ipv4.tcp_keepalive_time=120
+net.ipv4.tcp_syncookies=1
+net.ipv4.tcp_timestamps=1
+net.ipv4.tcp_sack=1
+net.ipv4.tcp_dsack=1
+
+net.ipv6.conf.default.forwarding=1
+net.ipv6.conf.all.forwarding=1
diff --git a/package/base-files/files/etc/sysupgrade.conf b/package/base-files/files/etc/sysupgrade.conf
new file mode 100644
index 0000000..e06fd5e
--- /dev/null
+++ b/package/base-files/files/etc/sysupgrade.conf
@@ -0,0 +1,5 @@
+## This file contains files and directories that should
+## be preserved during an upgrade.
+
+# /etc/example.conf
+# /etc/openvpn/
diff --git a/package/base-files/files/etc/uci-defaults/10_migrate-shadow b/package/base-files/files/etc/uci-defaults/10_migrate-shadow
new file mode 100644
index 0000000..481444f
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/10_migrate-shadow
@@ -0,0 +1,10 @@
+ppwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/passwd)"
+spwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/shadow)"
+
+if [ -n "${ppwd#[\!x]}" ] && [ -z "${spwd#[\!x]}" ]; then
+ logger -t migrate-shadow "Moving root password hash into shadow database"
+ sed -i -e "s:^root\:[^\:]*\::root\:x\::" /etc/passwd
+ sed -i -e "s:^root\:[^\:]*\::root\:$ppwd\::" /etc/shadow
+fi
+
+exit 0
diff --git a/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges b/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges
new file mode 100644
index 0000000..a9dece4
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges
@@ -0,0 +1,49 @@
+. /lib/functions.sh
+
+migrate_ports() {
+ local config="$1"
+ local type ports ifname
+
+ config_get type "$config" type
+ [ "$type" != "bridge" ] && return
+
+ config_get ports "$config" ports
+ [ -n "$ports" ] && return
+
+ config_get ifname "$config" ifname
+ [ -z "$ifname" ] && return
+
+ for port in $ifname; do
+ uci add_list network.$config.ports="$port"
+ done
+ uci delete network.$config.ifname
+}
+
+migrate_bridge() {
+ local config="$1"
+ local type ifname
+
+ config_get type "$config" type
+ [ "$type" != "bridge" ] && return
+
+ config_get ifname "$config" ifname
+
+ uci -q batch <<-EOF
+ add network device
+ set network.@device[-1].name='br-$config'
+ set network.@device[-1].type='bridge'
+ EOF
+ for port in $ifname; do
+ uci add_list network.@device[-1].ports="$port"
+ done
+
+ uci -q batch <<-EOF
+ delete network.$config.type
+ delete network.$config.ifname
+ set network.$config.device='br-$config'
+ EOF
+}
+
+config_load network
+config_foreach migrate_ports device
+config_foreach migrate_bridge interface
diff --git a/package/base-files/files/etc/uci-defaults/12_network-generate-ula b/package/base-files/files/etc/uci-defaults/12_network-generate-ula
new file mode 100644
index 0000000..060d0ef
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/12_network-generate-ula
@@ -0,0 +1,9 @@
+[ "$(uci -q get network.globals.ula_prefix)" != "auto" ] && exit 0
+
+uci -q batch <<-EOF >/dev/null
+ set network.globals.ula_prefix="$(hexdump -vn 5 -e '"fd" 1/1 "%02x:" 2/2 "%x:"' /dev/urandom):/48"
+ commit network
+EOF
+
+exit 0
+
diff --git a/package/base-files/files/etc/uci-defaults/13_fix-group-user b/package/base-files/files/etc/uci-defaults/13_fix-group-user
new file mode 100644
index 0000000..c5cc74e
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/13_fix-group-user
@@ -0,0 +1,12 @@
+. /lib/functions.sh
+
+# Skip if we don't have /usr/lib/opkg/info (APK installation)
+[ -d /usr/lib/opkg/info ] || exit 0
+
+for file in $(grep -sl Require-User /usr/lib/opkg/info/*.control); do
+ file="${file##*/}"
+ file="${file%.control}"
+ add_group_and_user "${file}"
+done
+
+exit 0
diff --git a/package/base-files/files/etc/uci-defaults/50-root-passwd b/package/base-files/files/etc/uci-defaults/50-root-passwd
new file mode 100644
index 0000000..f0bb519
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/50-root-passwd
@@ -0,0 +1,18 @@
+. /usr/share/libubox/jshn.sh
+
+json_init
+json_load "$(cat /etc/board.json)"
+
+if json_is_a credentials object; then
+ json_select credentials
+ json_get_vars root_password_hash root_password_hash
+ if [ -n "$root_password_hash" ]; then
+ sed -i "s|^root:[^:]*|root:$root_password_hash|g" /etc/shadow
+ fi
+
+ json_get_vars root_password_plain root_password_plain
+ if [ -n "$root_password_plain" ]; then
+ (echo "$root_password_plain"; sleep 1; echo "$root_password_plain") | passwd root
+ fi
+ json_select ..
+fi