From 6c79d18ef483adada138160957632d26a25eb2e8 Mon Sep 17 00:00:00 2001 From: actions-user Date: Sun, 16 Feb 2025 22:20:56 +0800 Subject: [PATCH] update 2025-02-16 22:20:56 --- istoreos-files/Makefile | 94 ++++++++++++++ istoreos-files/files/etc/board.d/10_system | 18 +++ istoreos-files/files/etc/crontabs/root | 1 + .../etc/dropbear/dropbear_failsafe_host_key | Bin 0 -> 805 bytes .../files/etc/hotplug.d/block/09-blockmount | 3 + .../files/etc/hotplug.d/iface/19-fw-wan-input | 58 +++++++++ istoreos-files/files/etc/init.d/blockmount | 27 ++++ istoreos-files/files/etc/init.d/debug | 23 ++++ istoreos-files/files/etc/init.d/fix_luci_lang | 22 ++++ istoreos-files/files/etc/init.d/io_uring | 32 +++++ istoreos-files/files/etc/init.d/isos_stop | 13 ++ istoreos-files/files/etc/init.d/isos_upgrade | 102 +++++++++++++++ istoreos-files/files/etc/init.d/wan_drop | 26 ++++ istoreos-files/files/etc/init.d/zprintk | 20 +++ .../etc/sysctl.d/12-nf-conntrack-max.conf | 4 + .../files/etc/uci-defaults/09_istoreos | 87 +++++++++++++ .../files/etc/uci-defaults/41_upnp_force | 10 ++ .../files/etc/uci-defaults/99_docker_nat_fw4 | 15 +++ .../files/etc/uci-defaults/99_theme | 24 ++++ .../lib/preinit/99_11_failsafe_dropbear_quick | 4 + istoreos-files/files/usr/bin/luci18n2name | 45 +++++++ .../lib/lua/luci/controller/admin/compat.lua | 10 ++ .../files/usr/libexec/blockmount.sh | 117 ++++++++++++++++++ istoreos-files/files/usr/libexec/blockphy.sh | 82 ++++++++++++ istoreos-files/files/usr/sbin/curl | 7 ++ .../luci/menu.d/luci-mod-system-fstab.json | 9 ++ .../luci-static/resources/easepi/easeicon.css | 57 +++++++++ .../luci-static/resources/easepi/iconfont.ttf | Bin 0 -> 2880 bytes .../resources/easepi/iconfont.woff | Bin 0 -> 1992 bytes .../resources/easepi/iconfont.woff2 | Bin 0 -> 1516 bytes istoreos-files/image-config.in | 30 +++++ istoreos-files/intl/etc/.istoreos-intl | 1 + 32 files changed, 941 insertions(+) create mode 100644 istoreos-files/Makefile create mode 100755 istoreos-files/files/etc/board.d/10_system create mode 100644 istoreos-files/files/etc/crontabs/root create mode 100644 istoreos-files/files/etc/dropbear/dropbear_failsafe_host_key create mode 100644 istoreos-files/files/etc/hotplug.d/block/09-blockmount create mode 100644 istoreos-files/files/etc/hotplug.d/iface/19-fw-wan-input create mode 100755 istoreos-files/files/etc/init.d/blockmount create mode 100755 istoreos-files/files/etc/init.d/debug create mode 100755 istoreos-files/files/etc/init.d/fix_luci_lang create mode 100755 istoreos-files/files/etc/init.d/io_uring create mode 100755 istoreos-files/files/etc/init.d/isos_stop create mode 100755 istoreos-files/files/etc/init.d/isos_upgrade create mode 100755 istoreos-files/files/etc/init.d/wan_drop create mode 100755 istoreos-files/files/etc/init.d/zprintk create mode 100644 istoreos-files/files/etc/sysctl.d/12-nf-conntrack-max.conf create mode 100644 istoreos-files/files/etc/uci-defaults/09_istoreos create mode 100644 istoreos-files/files/etc/uci-defaults/41_upnp_force create mode 100644 istoreos-files/files/etc/uci-defaults/99_docker_nat_fw4 create mode 100644 istoreos-files/files/etc/uci-defaults/99_theme create mode 100644 istoreos-files/files/lib/preinit/99_11_failsafe_dropbear_quick create mode 100755 istoreos-files/files/usr/bin/luci18n2name create mode 100644 istoreos-files/files/usr/lib/lua/luci/controller/admin/compat.lua create mode 100755 istoreos-files/files/usr/libexec/blockmount.sh create mode 100755 istoreos-files/files/usr/libexec/blockphy.sh create mode 100755 istoreos-files/files/usr/sbin/curl create mode 100644 istoreos-files/files/usr/share/luci/menu.d/luci-mod-system-fstab.json create mode 100644 istoreos-files/files/www/luci-static/resources/easepi/easeicon.css create mode 100644 istoreos-files/files/www/luci-static/resources/easepi/iconfont.ttf create mode 100644 istoreos-files/files/www/luci-static/resources/easepi/iconfont.woff create mode 100644 istoreos-files/files/www/luci-static/resources/easepi/iconfont.woff2 create mode 100644 istoreos-files/image-config.in create mode 100644 istoreos-files/intl/etc/.istoreos-intl diff --git a/istoreos-files/Makefile b/istoreos-files/Makefile new file mode 100644 index 00000000..6628347d --- /dev/null +++ b/istoreos-files/Makefile @@ -0,0 +1,94 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=istoreos-files +PKG_VERSION:=1.0 +PKG_RELEASE:=$(COMMITCOUNT) +PKG_FLAGS:=hold essential nonshared + +PKG_LICENSE:=CC0-1.0 +PKG_MAINTAINER:=jjm2473 + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + SECTION:=base + CATEGORY:=Base system + TITLE:=iStoreOS files + MAINTAINER:=jjm2473 + DEFAULT:=y + HIDDEN:=y + DEPENDS:=+luci-theme-argon +endef + +define Package/$(PKG_NAME)/description + The iStoreOS. +endef + +define Package/istoreos-intl + SECTION:=base + CATEGORY:=Base system + TITLE:=iStoreOS intl + MAINTAINER:=jjm2473 + DEPENDS:=$(PKG_NAME) +endef + +define Package/istoreos-intl/description + iStoreOS internationalization. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Compile/Default + +endef +Build/Compile = $(Build/Compile/Default) + +define Package/$(PKG_NAME)/install + $(CP) ./files/* $(1)/ +endef + +define Package/$(PKG_NAME)/postinst +#!/bin/sh + +HOST_SED="$(subst ${STAGING_DIR_HOST},$${STAGING_DIR_HOST},$(SED))" +HOST_LN="$(subst ${STAGING_DIR_HOST},$${STAGING_DIR_HOST},$(LN))" + +[ -n "$${IPKG_INSTROOT}" ] && { + $${HOST_SED} 's,^src/gz istoreos_,src/gz openwrt_,g' -e '/^src\/gz openwrt_\(core\|base\|kmods\|luci\|packages\|routing\|telephony\) /!d' "$${IPKG_INSTROOT}/etc/opkg/distfeeds.conf" + + $${HOST_SED} 's/"192.168.1.1"/"192.168.100.1"/' \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/controller/admin/system.lua" \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/controller/admin/ota.lua" \ + "$${IPKG_INSTROOT}/bin/config_generate" + + $${HOST_SED} "s/'192\\.168\\.1\\.1'/'192.168.100.1'/; s/'openwrt\\.lan'/window.location.host/" "$${IPKG_INSTROOT}/www/luci-static/resources/view/system/flash.js" + + $${HOST_SED} 's/s\.anonymous = true/s\.anonymous = true\ns\.addremove = true/' "$${IPKG_INSTROOT}/usr/lib/lua/luci/model/cbi/hd_idle.lua" + + $${HOST_SED} 's#"/opt"#"/overlay/upper/opt/docker"#' "$${IPKG_INSTROOT}/usr/lib/lua/luci/model/cbi/admin_system/fstab/mount.lua" + + rm -f "$${IPKG_INSTROOT}/sbin/jffs2reset" + $${HOST_LN} /sbin/firstboot "$${IPKG_INSTROOT}/sbin/jffs2reset" + + $${HOST_SED} '//a ' \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/view/themes/argon/header.htm" \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/view/themes/argon_dark/header.htm" \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/view/themes/argon_light/header.htm" \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/view/themes/argon_dark_purple/header.htm" \ + "$${IPKG_INSTROOT}/usr/lib/lua/luci/view/themes/argon_light_green/header.htm" + + rm -f "$${IPKG_INSTROOT}/etc/uci-defaults/luci-argon-config" + +} +true + +endef + +define Package/istoreos-intl/install + $(CP) ./intl/* $(1)/ +endef + +$(eval $(call BuildPackage,istoreos-files)) +$(eval $(call BuildPackage,istoreos-intl)) diff --git a/istoreos-files/files/etc/board.d/10_system b/istoreos-files/files/etc/board.d/10_system new file mode 100755 index 00000000..8905a273 --- /dev/null +++ b/istoreos-files/files/etc/board.d/10_system @@ -0,0 +1,18 @@ +#!/bin/sh +# +# Copyright (C) 2018 OpenWrt.org +# + +. /lib/functions/uci-defaults.sh + +board_config_update + +ucidef_set_hostname "iStoreOS" + +ucidef_set_timezone "CST-8" + +ucidef_set_ntpserver "0.cn.pool.ntp.org" "1.cn.pool.ntp.org" "2.cn.pool.ntp.org" "3.cn.pool.ntp.org" + +board_config_flush + +exit 0 \ No newline at end of file diff --git a/istoreos-files/files/etc/crontabs/root b/istoreos-files/files/etc/crontabs/root new file mode 100644 index 00000000..124b31fe --- /dev/null +++ b/istoreos-files/files/etc/crontabs/root @@ -0,0 +1 @@ +# see https://man7.org/linux/man-pages/man5/crontab.5.html diff --git a/istoreos-files/files/etc/dropbear/dropbear_failsafe_host_key b/istoreos-files/files/etc/dropbear/dropbear_failsafe_host_key new file mode 100644 index 0000000000000000000000000000000000000000..d77ac5ca165ea22c026c2a38f7fa4d68abddeec8 GIT binary patch literal 805 zcmV+=1KRum000Mbb7(Dcb724g00RL40RR920RXW^tm3E{d7FWpnJXpu9k1G1;Apof z(FAy@rA%MNWK%4Uw`nx5 z`{Q^@6(@=(q+8=1QcTs3;|foeDG_B;5czA_g!jRvT%UT+w$Ols5?Z#}ypBpH4bmR=nk=u%adn_3-DOC{iN6M>gm@Hhwqs9o?6s07y zNK>BeE7umVO*(#zD#%P){S4fuTqsvv17F!Y{a>b!D$vgqGxbVT)TIKbFE*j)j`x)7 z+dcO5VQXQOMJ8Hz%t`$t1yD9q1EsWt3>;Bn#iUZ)|`= z09i(MUn~F`s=TFu?1*D+ce=zlxG@eg;*n#Zq*ooNHfNLwC7_W*`K_yIs=<2|yDl-l#>R4+ z$I=5>wzDD#Sl`Il0%>g9x-FR$rQE$0?l}WNUEXW}@1Y$7N*#{Qk8M};bi5Lc_J5DD z2|)<}004mi!e2$ZEwCDkb(EoZqP5}4vVlha?{;v8)*3SnrnNccDg1Tm)(|1YkvIHl z-Xn#6GGZR&{nIcU^{iE4Yfe{X)BX~6X$90V&c_wbArW5V0;x$c9uWhPleot8Hl(dD j0iS}dPEZU4kcF$>ce(1N1*0)2z5z3Ct`YFkk_(_08D)Jz literal 0 HcmV?d00001 diff --git a/istoreos-files/files/etc/hotplug.d/block/09-blockmount b/istoreos-files/files/etc/hotplug.d/block/09-blockmount new file mode 100644 index 00000000..0fe6211d --- /dev/null +++ b/istoreos-files/files/etc/hotplug.d/block/09-blockmount @@ -0,0 +1,3 @@ +if [ "$ACTION" = "add" ]; then + [ "`uci -q get fstab.@global[0].port_mount`" = "1" ] && /usr/libexec/blockmount.sh +fi \ No newline at end of file diff --git a/istoreos-files/files/etc/hotplug.d/iface/19-fw-wan-input b/istoreos-files/files/etc/hotplug.d/iface/19-fw-wan-input new file mode 100644 index 00000000..d3fa6673 --- /dev/null +++ b/istoreos-files/files/etc/hotplug.d/iface/19-fw-wan-input @@ -0,0 +1,58 @@ +#!/bin/sh + +[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0 +[ "$ACTION" = ifupdate -a -z "$IFUPDATE_ADDRESSES" -a -z "$IFUPDATE_DATA" ] && exit 0 +[ "$INTERFACE" = wan ] || exit 0 + +uci -q get firewall.allow_wan_input || exit 0 + +is_private_ipv4() { + local ADDRESS="$1" + local MASK="$2" + local IP NETMASK BROADCAST NETWORK PREFIX + if [ "$MASK" -ge 8 ]; then + NETWORK= + eval $(ipcalc.sh "$ADDRESS/8") + [ "$NETWORK" = "10.0.0.0" ] && return 0 + fi + if [ "$MASK" -ge 12 ]; then + NETWORK= + eval $(ipcalc.sh "$ADDRESS/12") + [ "$NETWORK" = "172.16.0.0" ] && return 0 + fi + if [ "$MASK" -ge 16 ]; then + NETWORK= + eval $(ipcalc.sh "$ADDRESS/16") + [ "$NETWORK" = "192.168.0.0" ] && return 0 + fi + return 1 +} + +WAN_IS_PRIVATE=false +( + ADDRESS= + MASK= + PROTO= + UP= + + eval $(ifstatus wan | jsonfilter \ + -e 'ADDRESS=@["ipv4-address"][0].address' \ + -e 'MASK=@["ipv4-address"][0].mask' \ + -e 'PROTO=@.proto' \ + -e 'UP=@.up' + ) + + logger -t allow_wan_input "WAN up:$UP proto:$PROTO ip:$ADDRESS mask:$MASK" + [ "$PROTO" = dhcp ] || exit 1 + [ -n "$ADDRESS" -a -n "$MASK" ] || exit 1 + is_private_ipv4 "$ADDRESS" "$MASK" +) && WAN_IS_PRIVATE=true + +if $WAN_IS_PRIVATE ; then + logger -t allow_wan_input "Enable allow_wan_input rule for private address" + uci delete firewall.allow_wan_input.enabled +else + logger -t allow_wan_input "Disable allow_wan_input rule for public address" + uci set firewall.allow_wan_input.enabled=0 +fi +uci commit firewall diff --git a/istoreos-files/files/etc/init.d/blockmount b/istoreos-files/files/etc/init.d/blockmount new file mode 100755 index 00000000..06af19c6 --- /dev/null +++ b/istoreos-files/files/etc/init.d/blockmount @@ -0,0 +1,27 @@ +#!/bin/sh /etc/rc.common + +START=11 + +USE_PROCD=1 + +auto_mount() { + [ "`uci -q get fstab.@global[0].port_mount`" = "1" ] && /usr/libexec/blockmount.sh + return 0 +} + +boot() { + auto_mount + start "$@" +} + +service_triggers() { + procd_add_reload_trigger "fstab" +} + +reload_service() { + auto_mount +} + +start_service() { + return 0 +} diff --git a/istoreos-files/files/etc/init.d/debug b/istoreos-files/files/etc/init.d/debug new file mode 100755 index 00000000..ebaffc8e --- /dev/null +++ b/istoreos-files/files/etc/init.d/debug @@ -0,0 +1,23 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +STOP=00 + +shutdown() { + local message="System Shutting Down" + logger -s -t "DEBUG" "$message" + logger -t "DEBUG" "$message" + + local consoles="$(cat /sys/class/tty/console/active)" + [ -n "$consoles" ] || consoles=console + for console in $consoles; do + [ -c "/dev/$console" ] && echo "$message" >"/dev/$console" + done + + # blink led + . /etc/diag.sh + [ -n "$running" ] && { + status_led="$running" + status_led_blink_preinit_regular + } +} diff --git a/istoreos-files/files/etc/init.d/fix_luci_lang b/istoreos-files/files/etc/init.d/fix_luci_lang new file mode 100755 index 00000000..d3a03c7b --- /dev/null +++ b/istoreos-files/files/etc/init.d/fix_luci_lang @@ -0,0 +1,22 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2016 OpenWrt.org + +START=49 + +list_langs() { + cd /usr/lib/lua/luci/i18n + ls | sed -e 's/.*\.\([^\.]*\)\.lmo/\1/g' | sort -u +} + +boot() { + local lang + local name + for lang in `list_langs` + do + if ! uci get luci.languages.${lang//-/_} >/dev/null 2>&1; then + name=`luci18n2name $lang` + uci set "luci.languages.${lang//-/_}=${name:-$lang}" + fi + done + uci changes luci | grep -Fqm1 luci 2>/dev/null && uci commit luci >/dev/null 2>&1 +} \ No newline at end of file diff --git a/istoreos-files/files/etc/init.d/io_uring b/istoreos-files/files/etc/init.d/io_uring new file mode 100755 index 00000000..7f674820 --- /dev/null +++ b/istoreos-files/files/etc/init.d/io_uring @@ -0,0 +1,32 @@ +#!/bin/sh /etc/rc.common + +START=97 + +check_kernel() { + local major=$1 + local minor=$2 + [ "$major" -gt 5 -o \( "$major" -eq 5 -a "$minor" -ge 4 \) ] +} + +boot() { + if check_kernel `uname -r | grep -Eo '[0-9]+\.[0-9]+' | sed 's/\./ /g'`; then + if [ ! -f /usr/lib/samba/vfs/io_uring.so ]; then + if [ -f /usr/lib/samba/vfs/io_uring.so.bak ]; then + mv /usr/lib/samba/vfs/io_uring.so.bak /usr/lib/samba/vfs/io_uring.so + elif [ -f /rom/usr/lib/samba/vfs/io_uring.so ]; then + mkdir -p /usr/lib/samba/vfs + cp -a /rom/usr/lib/samba/vfs/io_uring.so /usr/lib/samba/vfs/io_uring.so + cat /usr/lib/samba/vfs/io_uring.so >/dev/null + rm -f /overlay/upper/usr/lib/samba/vfs/io_uring.so + fi + fi + rm -f /usr/lib/samba/vfs/io_uring.so.bak + elif [ -f /usr/lib/samba/vfs/io_uring.so ]; then + rm -f /usr/lib/samba/vfs/io_uring.so.bak + if [ ! -d /overlay/upper -o -f /overlay/upper/usr/lib/samba/vfs/io_uring.so ]; then + mv /usr/lib/samba/vfs/io_uring.so /usr/lib/samba/vfs/io_uring.so.bak + else + rm -f /usr/lib/samba/vfs/io_uring.so + fi + fi +} diff --git a/istoreos-files/files/etc/init.d/isos_stop b/istoreos-files/files/etc/init.d/isos_stop new file mode 100755 index 00000000..84830d0c --- /dev/null +++ b/istoreos-files/files/etc/init.d/isos_stop @@ -0,0 +1,13 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +STOP=89 + +shutdown() { + + /etc/init.d/dockerman stop 2>/dev/null + /etc/init.d/dockerd stop 2>/dev/null + /etc/init.d/netdata stop 2>/dev/null + + while /usr/bin/umount -R -d /overlay/upper/opt/docker; do true; done +} diff --git a/istoreos-files/files/etc/init.d/isos_upgrade b/istoreos-files/files/etc/init.d/isos_upgrade new file mode 100755 index 00000000..2d8fc676 --- /dev/null +++ b/istoreos-files/files/etc/init.d/isos_upgrade @@ -0,0 +1,102 @@ +#!/bin/sh /etc/rc.common +# istoreos upgrade post process +# Copyright (C) 2022 jjm2473 + +START=14 + +split_opkg_status() { + local line + local gap=1 + exec 3>/dev/null + rm -rf $2 + mkdir -p $2 + cat $1 | while read; do + line="$REPLY" + if [ -z "$line" ]; then + echo >&3 + exec 3>&- + exec 3>/dev/null + gap=1 + else + if [[ "x1" = "x$gap" && "$line" = "Package: *" ]]; then + exec 3>&- + exec 3>$2/${line##Package: } + gap=0 + fi + echo "$line" >&3 + fi + done + exec 3>&- +} + +split_both_status() { + split_opkg_status /usr/lib/opkg/status /tmp/newopkgstatus & + split_opkg_status /rom/usr/lib/opkg/status /tmp/romopkgstatus & + wait +} + +ls_all_pkgs() { + ( cd /usr/lib/opkg/info ; find . -maxdepth 1 -name '*.control' | sed -E 's#./(.*).control#\1#g' | grep -v '^kernel$' ) +} + +rebuild_opkg_status() { + local line + [ -f /tmp/romopkgstatus/kernel ] && cat /tmp/romopkgstatus/kernel + ls_all_pkgs | while read line; do + if [ -f /overlay/upper/usr/lib/opkg/info/$line.control -o -f /ext_overlay/upper/usr/lib/opkg/info/$line.control ]; then + echo /tmp/newopkgstatus/$line + else + echo /tmp/romopkgstatus/$line + fi + done | xargs cat +} + +clean_tmp_files() { + rm -rf /tmp/newopkgstatus + rm -rf /tmp/romopkgstatus +} + +clean_themes() { + local line + local name + local path + uci show luci.themes | tail -n +2 | sed "s/^luci.themes.//g; s/'//g" | while read; do + line="$REPLY" + name=`echo "$line" | cut -d= -f 1` + path=`echo "$line" | cut -d= -f 2` + [ "x$path" != "x" -a -d /www$path ] || uci delete "luci.themes.$name" + done + uci commit luci +} + +is_overlayed() { + [ -e "/overlay/upper$1" -o -e "/ext_overlay/upper$1" ] +} + +upgrade_opkg_distfeeds() { + local newrelease=$(grep -m1 '/base$' /rom/etc/opkg/distfeeds.conf | grep -Eo '/releases/[^/]+/') + local oldrelease=$(grep -m1 '/base$' /etc/opkg/distfeeds.conf | grep -Eo '/releases/[^/]+/') + [ -z "$newrelease" -o -z "$oldrelease" ] && return 0 + [ "$newrelease" = "$oldrelease" ] && return 0 + sed -i -e 's#'"$oldrelease"'#'"$newrelease"'#g' /etc/opkg/distfeeds.conf +} + +boot() { + [ -f /.recovery_mode ] && return 0 + + if [ -f /usr/lib/opkg/.upgrading ]; then + rm -f /usr/lib/opkg/.upgrading + is_overlayed /usr/lib/opkg/status && { + split_both_status + rebuild_opkg_status > /usr/lib/opkg/status + clean_tmp_files + } + is_overlayed /etc/config/luci && { + clean_themes + } + is_overlayed /etc/opkg/distfeeds.conf && { + upgrade_opkg_distfeeds + } + fi + rm -f /overlay/upper/.upgrading +} diff --git a/istoreos-files/files/etc/init.d/wan_drop b/istoreos-files/files/etc/init.d/wan_drop new file mode 100755 index 00000000..4404dc72 --- /dev/null +++ b/istoreos-files/files/etc/init.d/wan_drop @@ -0,0 +1,26 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2016 OpenWrt.org + +START=20 +USE_PROCD=1 + +start_service() { + /etc/init.d/wan_drop enabled || return 0 + local PROTO=`uci get network.wan.proto` + logger -t 'wan_drop' "current proto $PROTO" + if [ "$PROTO" = "pppoe" ]; then + WAN_ZONE=`uci show firewall | grep -E '^firewall\.@zone\[[0-9]+\]\.name='"'wan'" | head -n1 | head -c -12` + if [ "`uci get ${WAN_ZONE}.input`" = "ACCEPT" ]; then + logger -t 'wan_drop' "set firewall drop input from wan" + uci -q batch <<-EOF >/dev/null + set ${WAN_ZONE}.input=DROP + commit firewall +EOF + /etc/init.d/firewall reload >/dev/null + fi + fi +} + +service_triggers() { + procd_add_reload_trigger "network" +} diff --git a/istoreos-files/files/etc/init.d/zprintk b/istoreos-files/files/etc/init.d/zprintk new file mode 100755 index 00000000..29b1bfde --- /dev/null +++ b/istoreos-files/files/etc/init.d/zprintk @@ -0,0 +1,20 @@ +#!/bin/sh /etc/rc.common +# 2022 jjm2473 + +START=99 + +boot() { + # tune printk level after success boot, avoid noise in console + echo '4 5 1 7' > /proc/sys/kernel/printk + + # notify console system is ready + sleep 1 + local pids=`pgrep -P 1 askfirst 2>/dev/null` + if [ -n "$pids" ]; then + local pid + for pid in $pids; do + echo "iStoreOS is ready!" >/proc/$pid/fd/1 + echo "Please press Enter to activate this console." >/proc/$pid/fd/1 + done + fi +} diff --git a/istoreos-files/files/etc/sysctl.d/12-nf-conntrack-max.conf b/istoreos-files/files/etc/sysctl.d/12-nf-conntrack-max.conf new file mode 100644 index 00000000..c9d1a985 --- /dev/null +++ b/istoreos-files/files/etc/sysctl.d/12-nf-conntrack-max.conf @@ -0,0 +1,4 @@ +net.netfilter.nf_conntrack_max=65535 +net.netfilter.nf_conntrack_helper=1 +net.netfilter.nf_conntrack_buckets=16384 +net.netfilter.nf_conntrack_expect_max=16384 diff --git a/istoreos-files/files/etc/uci-defaults/09_istoreos b/istoreos-files/files/etc/uci-defaults/09_istoreos new file mode 100644 index 00000000..dbc0f6ab --- /dev/null +++ b/istoreos-files/files/etc/uci-defaults/09_istoreos @@ -0,0 +1,87 @@ +#!/bin/sh +# Copyright (C) 2022 jjm2473 + +if [ ! -f /etc/config/fstab ]; then + /usr/libexec/blockmount.sh detect 2>/dev/null +fi + +uci -q batch <<-EOF >/dev/null + set system.@system[-1].zonename='Asia/Shanghai' + commit system +EOF + +uci set dockerd.globals.data_root=/overlay/upper/opt/docker + +if grep -qFw nas /proc/device-tree/chosen/default-firewall; then + WAN_ZONE=`uci show firewall | grep -E '^firewall\.@zone\[[0-9]+\]\.name='"'wan'" | head -n1 | head -c -12` + uci -q batch <<-EOF >/dev/null + del_list dockerd.firewall.blocked_interfaces=wan + set ${WAN_ZONE}.input=ACCEPT + commit firewall +EOF + + uci -q batch <<-EOF >/dev/null + delete ucitrack.@wan_drop[-1] + add ucitrack wan_drop + set ucitrack.@wan_drop[-1].init=wan_drop + commit ucitrack +EOF +else + /etc/init.d/wan_drop disable + if grep -qFw dual /proc/device-tree/chosen/default-firewall; then + # firewall.allow_wan_input will auto enabled by /etc/hotplug.d/iface/19-fw-wan-input + uci -q batch <<-EOF >/dev/null + set firewall.allow_wan_input=rule + set firewall.allow_wan_input.name='Allow-WAN-Input' + set firewall.allow_wan_input.proto='all' + set firewall.allow_wan_input.src='wan' + set firewall.allow_wan_input.target='ACCEPT' + set firewall.allow_wan_input.enabled='0' + commit firewall +EOF + fi +fi + +if ! grep -qFw router /proc/device-tree/chosen/default-firewall; then + + WAN_IF=`jsonfilter -i /etc/board.json -e '@.network.wan.device'` + if [ -n "$WAN_IF" -a -e /etc/config/minidlna ]; then + uci -q batch <<-EOF >/dev/null + set minidlna.@minidlna[0].interface='br-lan,$WAN_IF' + commit minidlna +EOF + fi + if [ -e /etc/config/ttyd ]; then + uci -q batch <<-EOF >/dev/null + delete ttyd.@ttyd[0].interface + commit ttyd +EOF + fi + for samba in samba4 samba ; do + if [ -e /etc/config/$samba ]; then + uci -q batch <<-EOF >/dev/null + set $samba.@samba[0].interface='lan wan' + commit $samba +EOF + fi + done +fi + +uci -q batch <<-EOF >/dev/null + commit dockerd +EOF + +uci -q batch <<-EOF >/dev/null + set luci.apply.rollback=30 + set luci.apply.holdoff=2 + commit luci +EOF + +if [ -f /etc/config/argon ]; then + uci -q batch <<-EOF >/dev/null + set argon.@global[0].mode=light + commit argon +EOF +fi + +exit 0 diff --git a/istoreos-files/files/etc/uci-defaults/41_upnp_force b/istoreos-files/files/etc/uci-defaults/41_upnp_force new file mode 100644 index 00000000..a8a57d01 --- /dev/null +++ b/istoreos-files/files/etc/uci-defaults/41_upnp_force @@ -0,0 +1,10 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete upnpd.config.use_stun + set upnpd.config.stun_host='stun.sipgate.net' + set upnpd.config.force_forwarding='1' + commit upnpd +EOF + +exit 0 diff --git a/istoreos-files/files/etc/uci-defaults/99_docker_nat_fw4 b/istoreos-files/files/etc/uci-defaults/99_docker_nat_fw4 new file mode 100644 index 00000000..c6ca0148 --- /dev/null +++ b/istoreos-files/files/etc/uci-defaults/99_docker_nat_fw4 @@ -0,0 +1,15 @@ +#!/bin/sh + +uci -q batch <<-EOF + set firewall.docker_nat=nat + set firewall.docker_nat.name='DockerNAT' + set firewall.docker_nat.family='ipv4' + set firewall.docker_nat.proto='all' + set firewall.docker_nat.src='lan' + set firewall.docker_nat.target='MASQUERADE' + set firewall.docker_nat.extra='-i docker0' + set firewall.docker_nat.src_ip='172.16.0.0/12' + commit firewall +EOF + +exit 0 diff --git a/istoreos-files/files/etc/uci-defaults/99_theme b/istoreos-files/files/etc/uci-defaults/99_theme new file mode 100644 index 00000000..f44af0a4 --- /dev/null +++ b/istoreos-files/files/etc/uci-defaults/99_theme @@ -0,0 +1,24 @@ +#!/bin/sh + +mediaurlbase= +theme= + +if [ -d /www/luci-static/argon_light_green -a -e /proc/device-tree/chosen/default-password ]; then + mediaurlbase=/luci-static/argon_light_green +else + for theme in argon argon_dark material ; do + if [ -d /www/luci-static/$theme ]; then + mediaurlbase=/luci-static/$theme + break + fi + done +fi + +if [ -n "$mediaurlbase" ]; then + uci -q batch <<-EOF >/dev/null + set luci.main.mediaurlbase=$mediaurlbase + commit luci +EOF +fi + +exit 0 diff --git a/istoreos-files/files/lib/preinit/99_11_failsafe_dropbear_quick b/istoreos-files/files/lib/preinit/99_11_failsafe_dropbear_quick new file mode 100644 index 00000000..22471750 --- /dev/null +++ b/istoreos-files/files/lib/preinit/99_11_failsafe_dropbear_quick @@ -0,0 +1,4 @@ +failsafe_dropbear () { + cp -a /etc/dropbear/dropbear_failsafe_host_key /tmp/dropbear_failsafe_host_key + dropbear -r /tmp/dropbear_failsafe_host_key <> /dev/null 2>&1 +} \ No newline at end of file diff --git a/istoreos-files/files/usr/bin/luci18n2name b/istoreos-files/files/usr/bin/luci18n2name new file mode 100755 index 00000000..3edf84ad --- /dev/null +++ b/istoreos-files/files/usr/bin/luci18n2name @@ -0,0 +1,45 @@ +#!/bin/sh +# author: jjm2473 + +toname() { + local lang_ar="العربية (Arabic)" + local lang_bg="български (Bulgarian)" + local lang_bn="বাংলা (Bengali)" + local lang_ca="Català (Catalan)" + local lang_cs="Čeština (Czech)" + local lang_da="Dansk (Danish)" + local lang_de="Deutsch (German)" + local lang_el="Ελληνικά (Greek)" + local lang_en="English" + local lang_es="Español (Spanish)" + local lang_fi="Suomi (Finnish)" + local lang_fr="Français (French)" + local lang_he="עִבְרִית (Hebrew)" + local lang_hi="हिंदी (Hindi)" + local lang_hu="Magyar (Hungarian)" + local lang_it="Italiano (Italian)" + local lang_ja="日本語 (Japanese)" + local lang_ko="한국어 (Korean)" + local lang_mr="Marāṭhī (Marathi)" + local lang_ms="Bahasa Melayu (Malay)" + local lang_no="Norsk (Norwegian)" + local lang_nl="Nederlands (Dutch)" + local lang_pl="Polski (Polish)" + local lang_pt_br="Português do Brasil (Brazilian Portuguese)" + local lang_pt="Português (Portuguese)" + local lang_ro="Română (Romanian)" + local lang_ru="Русский (Russian)" + local lang_sk="Slovenčina (Slovak)" + local lang_sv="Svenska (Swedish)" + local lang_tr="Türkçe (Turkish)" + local lang_uk="Українська (Ukrainian)" + local lang_vi="Tiếng Việt (Vietnamese)" + local lang_zh_cn="简体中文 (Chinese Simplified)" + local lang_zh_tw="繁體中文 (Chinese Traditional)" + + eval "[ -n \"\${lang_$1}\" ] && echo \${lang_$1}" +} + +if [ -n "$1" ]; then + toname ${1//-/_} +fi \ No newline at end of file diff --git a/istoreos-files/files/usr/lib/lua/luci/controller/admin/compat.lua b/istoreos-files/files/usr/lib/lua/luci/controller/admin/compat.lua new file mode 100644 index 00000000..bad1b46e --- /dev/null +++ b/istoreos-files/files/usr/lib/lua/luci/controller/admin/compat.lua @@ -0,0 +1,10 @@ +-- Copyright 2022 jjm2473 +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.compat", package.seeall) + +function action_fatab() + local dsp = require "luci.dispatcher" + + luci.http.redirect(dsp.build_url("admin/system/mounts")) +end diff --git a/istoreos-files/files/usr/libexec/blockmount.sh b/istoreos-files/files/usr/libexec/blockmount.sh new file mode 100755 index 00000000..7cdfbae9 --- /dev/null +++ b/istoreos-files/files/usr/libexec/blockmount.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +DETECT=0 + +if [ -z "$ACTION" ]; then +log() { + echo "$*" >&2 +} +else +log() { + logger -t "blockmount" "$*" +} +fi + +# uci_section UUID LABEL DEVICE MOUNTPOINT +check_mount() { + local uuid + local label + local device + local target + config_get uuid $1 uuid + config_get label $1 label + config_get device $1 device + config_get target $1 target + + if [ "$DEVICE_CONFIGURED" = "0" -a \( "$uuid" = "$2" -o "$device" = "$4" -o "$target" = "$5" -o \( -n "$3" -a "$3" = "$label" \) \) ]; then + export -n DEVICE_CONFIGURED=1 + [ -z "$ACTION" ] && log "found $1 ($uuid, $label, $device, $target) matches ($2, $3, $4, $5)" + fi +} + +# UUID LABEL DEVICE MOUNTPOINT +check_configured() { + local DEVICE_CONFIGURED=0 + config_foreach check_mount mount "$1" "$2" "$3" "$4" + return $DEVICE_CONFIGURED +} + +handle_part() { + [ -z "$ACTION" ] && log "$1 UUID=$UUID TYPE=$TYPE LABEL=$LABEL MOUNT=$MOUNT" + [ -n "$1" ] || return 1 + + # ignore mounted device, unknown fs type, swap or raid member + [ -z "$UUID" -o -z "$TYPE" \ + -o "$TYPE" = "swap" \ + -o "$TYPE" = "linux_raid_member" \ + ] && return 0 + + if [ "$DETECT" = "1" ]; then + [ -z "$MOUNT" ] && return 0 + # in this case, only add mounted device: boot,root,overlayfs, and disable them + log "add mount $UUID => $MOUNT" + uci -q batch <<-EOF >/dev/null + add fstab mount + set fstab.@mount[-1].uuid=$UUID + set fstab.@mount[-1].target=$MOUNT + set fstab.@mount[-1].enabled=0 +EOF + elif [ -z "$MOUNT" ]; then + local DEVICENAME="${1#/dev/}" + local candidate="`/usr/libexec/blockphy.sh "$DEVICENAME"`" + [ -z "$candidate" ] && return 0 + candidate="/mnt/$candidate" + + # check if candidate mount point is busy + mountpoint -q "$candidate" && return 0 + + # check if configured + check_configured "$UUID" "$LABEL" "$1" "$candidate" || return 0 + + # log "add mount $UUID => $candidate" + mkdir -p "$candidate" && mount "$1" "$candidate" + fi + +} + +scan_all() { + local line + local dev + + if [ "$DETECT" = "0" -a -n "$DEVNAME" ]; then + dev="/dev/$DEVNAME" + fi + + block info $dev | while read; do + line="$REPLY" + eval "${line##*: } handle_part ${line%%: *}" + done +} + +if [ "$1" = "detect" ]; then + DETECT=1 + cat <<-EOF >/etc/config/fstab +config global + option anon_swap '0' + option anon_mount '0' + option port_mount '0' + option auto_swap '1' + option auto_mount '1' + option delay_root '5' + option check_fs '0' + +EOF +fi + +. /lib/functions.sh + +config_load fstab + +scan_all + +if [ "$DETECT" = "1" ]; then + uci -q batch <<-EOF >/dev/null + set fstab.@global[0].port_mount=1 + commit fstab +EOF +fi diff --git a/istoreos-files/files/usr/libexec/blockphy.sh b/istoreos-files/files/usr/libexec/blockphy.sh new file mode 100755 index 00000000..5ffb24e5 --- /dev/null +++ b/istoreos-files/files/usr/libexec/blockphy.sh @@ -0,0 +1,82 @@ +#!/bin/sh + +DEVNAME=${1#/dev/} +[ -z "$DEVNAME" ] && exit 1 + +getdisk() { + local DISK=$1 + local path=`readlink /sys/block/$DISK` + local usb=`echo "$path" | grep -oE '/usb[0-9]+/[^:]+'` + if [ -n "$usb" ]; then + usb=${usb##*/} + usb=${usb%%-1} + echo usb`echo "$usb" | sed 's/[-.]/_/g'` + return 0 + fi + case "$DISK" in + mmcblk*) + echo "$path" | grep -oE '/mmc[0-9]+/' + return 0 + ;; + nvme*) + echo "/$DISK/" + return 0 + ;; + esac + # sata + local sata=`echo "$path" | grep -oE '/ata[0-9]+/host[0-9]+/target[0-9]+:[0-9]+'` + if [ -n "$sata" ]; then + sata=`echo "$sata" | sed -r 's#/ata([0-9]+)/host[0-9]+/target[0-9]+:([0-9]+)#sata\1.\2#'` + sata=${sata%%.0} + echo "/$sata/" + return 0 + fi + # virtio + sata=`echo "$path" | grep -oE '/virtio[0-9]+/host[0-9]+/target[0-9]+:[0-9]+:[0-9]+'` + if [ -n "$sata" ]; then + sata=`echo "$sata" | sed -r 's#/virtio([0-9]+)/host[0-9]+/target[0-9]+:[0-9]+:([0-9]+)#vio\1.\2#'` + sata=${sata%%.0} + echo "/$sata/" + return 0 + fi + # sas + sata=`echo "$path" | grep -oE '/host[0-9]+/port-[0-9]+:[0-9]+'` + if [ -n "$sata" ]; then + sata=`echo "$sata" | sed -r 's#/host([0-9]+)/port-[0-9]+:([0-9]+)#sas\1.\2#'` + sata=${sata%%.0} + echo "/$sata/" + return 0 + fi + # scsi + sata=`echo "$path" | grep -oE '/host[0-9]+/target[0-9]+:[0-9]+:[0-9]+'` + if [ -n "$sata" ]; then + sata=`echo "$sata" | sed -r 's#/host([0-9]+)/target[0-9]+:[0-9]+:([0-9]+)#scsi\1.\2#'` + sata=${sata%%.0} + echo "/$sata/" + return 0 + fi + echo "$path" | grep -oE '/host[0-9]+/' | sed 's/host/sata/g' + return 0 +} + +getphy() { + [ -e /sys/block/$1 ] || return 1 + local disk=`getdisk $1` + disk=${disk#/} + echo "${disk%/}-${2:-0}" +} + +# sd[a-z]+([0-9]+)? +# mmcblk[0-9]+(p[0-9]+)? +# nvme[0-9]+n[0-9]+(p[0-9]+)? + +case "$DEVNAME" in + sd*) + getphy `echo "$DEVNAME" | sed -r 's/^(sd[a-z]+)([0-9]+)?$/\1 \2/g'` ;; + mmcblk*) + getphy `echo "$DEVNAME" | sed -r 's/^(mmcblk[0-9]+)(p([0-9]+))?$/\1 \3/g'` ;; + nvme*) + getphy `echo "$DEVNAME" | sed -r 's/^(nvme[0-9]+n[0-9]+)(p([0-9]+))?$/\1 \3/g'` ;; + *) + exit 1; +esac diff --git a/istoreos-files/files/usr/sbin/curl b/istoreos-files/files/usr/sbin/curl new file mode 100755 index 00000000..4f3b2004 --- /dev/null +++ b/istoreos-files/files/usr/sbin/curl @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -x /rom/usr/bin/curl ]; then + /usr/bin/curl -V >/dev/null 2>&1 && exec /usr/bin/curl "$@" + exec /rom/usr/bin/curl "$@" +fi +exec /usr/bin/curl "$@" diff --git a/istoreos-files/files/usr/share/luci/menu.d/luci-mod-system-fstab.json b/istoreos-files/files/usr/share/luci/menu.d/luci-mod-system-fstab.json new file mode 100644 index 00000000..88d8977c --- /dev/null +++ b/istoreos-files/files/usr/share/luci/menu.d/luci-mod-system-fstab.json @@ -0,0 +1,9 @@ +{ + "admin/system/fstab": { + "action": { + "type": "call", + "module": "luci.controller.admin.compat", + "function": "action_fatab" + } + } +} diff --git a/istoreos-files/files/www/luci-static/resources/easepi/easeicon.css b/istoreos-files/files/www/luci-static/resources/easepi/easeicon.css new file mode 100644 index 00000000..356ba8f7 --- /dev/null +++ b/istoreos-files/files/www/luci-static/resources/easepi/easeicon.css @@ -0,0 +1,57 @@ +@font-face { + font-family: "easeicon"; /* Project id 3156136 */ + src: url('iconfont.woff2?t=1642756089463') format('woff2'), + url('iconfont.woff?t=1642756089463') format('woff'), + url('iconfont.ttf?t=1642756089463') format('truetype'); +} + +.easeicon { + font-family: "easeicon" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.eicon-store:before { + content: "\e60f"; +} + +.eicon-docker:before { + content: "\e659"; +} + +.eicon-network:before { + content: "\ecc7"; +} + +.eicon-dashboard:before { + content: "\e664"; +} + +.main>.main-left>.nav>li.slide>.menu[data-title=Docker]:before { + font-family: 'easeicon' !important; + content: "\e659" !important; + color: #0c93f3; +} + +.main>.main-left>.nav>li.slide>.menu[data-title=iStore]:before, +.main>.main-left>.nav>li>a[data-title=iStore]:before { + font-family: 'easeicon' !important; + content: "\e60f" !important; + color: #8965e0; +} + +.main>.main-left>.nav>li.slide>.menu[data-title=QuickStart]:before, +.main>.main-left>.nav>li>a[data-title=QuickStart]:before { + font-family: 'easeicon' !important; + content: "\e664" !important; + color: #11cdef; +} + +.main>.main-left>.nav>li.slide>.menu[data-title=NetworkGuide]:before, +.main>.main-left>.nav>li>a[data-title=NetworkGuide]:before { + font-family: 'easeicon' !important; + content: "\ecc7" !important; + color: #fb6340; +} diff --git a/istoreos-files/files/www/luci-static/resources/easepi/iconfont.ttf b/istoreos-files/files/www/luci-static/resources/easepi/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..df1420e06824ef53c668583e6a8239b24707d920 GIT binary patch literal 2880 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 AtpET3 literal 0 HcmV?d00001 diff --git a/istoreos-files/files/www/luci-static/resources/easepi/iconfont.woff2 b/istoreos-files/files/www/luci-static/resources/easepi/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aeeadd4c93f51dc15e47db01c4ec4ab87c70742d GIT binary patch literal 1516 zcmV00o`^0RR9100000000000000000000 z0000SR0d!GgE9(3X9rFjz6r>Vk=yeuzpVI^&p&SZ_vIx( zlS*oGRwiDti3pw2PK-j3EhRl66Azoiz5`R!mM`uQZSEcgL+KmX;==y8S2bf|Fu~+r z)<6peaL(P@2a9OI#vW8Fc!5e*5wA*gUNh+h?DzzkXe7!u&5Il?xMc#E z-9+}dY%twiU_&SbCaWRtku1oo-~eVN^8mmr>d%vJP!7?d@2MkFISN zp8tmj5HMgt0b&4WiU+=@k?lFP$Oi&^K9&y*@VSEzEb#4Z7bs!5?RfwhKn?>W#_-J! zr4T^DWyGb$HRo8C<7oXXy~H!k<^2r}ffp~pzh$jAljKI*s-yh5oWc5f#QUSsiGlWe zDne=d^Y1m-6h7~xzj#p{IOpFVJgcAaZL7>kTa&dWdt>X06MSOY3u`v&t@T1M`9U{3 zoG;GI*wxUihKE3iq!5i()ff+(pkt~re7_Qn_K6aIRRdq(18FZt*Ju~rT3>Gk9|++@ z*TaGUYH&3nQvL|flLnVQnnW^A_CUtTuufYy&@3$!AiExA1k=M&{le;8)MakY%v>!9 zaw2C$iX;+2UGD{Efi3JUF{?$TKFpMcJvM?=4 zQh%h%j%QIEk}Yh#F4s1`-=&Krb(tk8ck1$fRz7`;$W735SoF;#PB8=z_AVS+&~}J~ zDwJzyDcIY@xHIq5kACSisN2|SJ;urvx}Z2I^{>UlO&N^}{x41}XcWqybKvfQ4`okw z`_9E}njOqHTJi_JMhl0IXfd>z?ab23RipZBZCtsvbV~2te&r|rBvGuP6OKOj zC7OCqd78z1^N%;K$@Nrb6m#pOe6jP*v1MgU*_jG=R^Hj^zvCv?o??C9<)Xd!GRI1~ z#M?S`G#OklsGu$Tb1OHGv-DW{YMP^o$BHIDRmm*KAuZW~KOcx4I&c5>IQi{VW?#yK z34HQ*%QyZR?X#>)c`lbhS(AYzkXW**4ctT4)(l!<11L#w^^q=mk1A_7}i{`3Yh-tByLUa;EOk zfq##!aOgAIadJ}E-%P?GlYL)oa}k@w{)(Mx(7C|wZANU>pCLSB~b*eH|vTH?dO{?o%TZr>yi3*!W0$k{n6m zGM$X9hOB5WRFSARlLu=zD^;W<26})p9kN=JL7y31%4mGR$t=#Q6t&Fy*UccKq%f=V z-)t(0ou-I8MWIe-#Xxe#H5HX>shz;;LvU5@V>!YQN?5`X12~_isFJ~<*r!RV(JN^) S6?Iyi!{&3>C^ppr0002~ZOb|U literal 0 HcmV?d00001 diff --git a/istoreos-files/image-config.in b/istoreos-files/image-config.in new file mode 100644 index 00000000..7458b18e --- /dev/null +++ b/istoreos-files/image-config.in @@ -0,0 +1,30 @@ + +if PACKAGE_istoreos-files + config PACKAGE_istoreos-files_CUSTOMIZE_SETTINGS + bool + default y + select LUCI_LANG_zh_Hans + select KERNEL_PROC_PAGE_MONITOR + select BUSYBOX_CUSTOM + select BUSYBOX_CONFIG_TOP + select BUSYBOX_CONFIG_FEATURE_TOPMEM # top -m + select BUSYBOX_CONFIG_DD + select BUSYBOX_CONFIG_FEATURE_DD_SIGNAL_HANDLING + select BUSYBOX_CONFIG_FEATURE_DD_THIRD_STATUS_LINE # dd show speed + + config LUCI_LANG_zh-cn + tristate + default LUCI_LANG_zh_Hans + config LUCI_LANG_zh-tw + tristate + default LUCI_LANG_zh_Hant + config LUCI_LANG_pt-br + tristate + default LUCI_LANG_pt_BR + config LUCI_LANG_no + tristate + default LUCI_LANG_nb_NO + config LUCI_LANG_bn + tristate + default LUCI_LANG_bn_BD +endif diff --git a/istoreos-files/intl/etc/.istoreos-intl b/istoreos-files/intl/etc/.istoreos-intl new file mode 100644 index 00000000..fe9c2dc0 --- /dev/null +++ b/istoreos-files/intl/etc/.istoreos-intl @@ -0,0 +1 @@ +# dummy file