mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-14 20:48:17 +08:00
🚀 Sync 2026-11-14 19:18:28
This commit is contained in:
1 parent
4e24fe7535
commit
645709eea5
9 files changed
+116
-54
No files matched your search
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=filebrowser-q
|
||||
PKG_VERSION:=2.1.5-beta
|
||||
PKG_RELEASE:=18
|
||||
PKG_RELEASE:=19
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/gtsteffaniak/filebrowser/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@@ -2,4 +2,5 @@ config filebrowser 'config'
|
||||
option enabled '0'
|
||||
option listen_port '8787'
|
||||
option root_path '/'
|
||||
|
||||
option cacheDir '/tmp'
|
||||
option cacheDirMaxSizeMB '500'
|
||||
@@ -6,7 +6,7 @@ START=99
|
||||
CONF="filebrowser-q"
|
||||
PROG="/usr/bin/filebrowser-q"
|
||||
CONF_PATH="/etc/filebrowser-q/config.yaml"
|
||||
DB_PATH="/etc/filebrowser-q/database.db"
|
||||
DB_PATH="/etc/filebrowser-q/filebrowser.sqlite"
|
||||
|
||||
start_service() {
|
||||
config_load "$CONF"
|
||||
@@ -15,16 +15,22 @@ start_service() {
|
||||
config_get_bool enabled "config" "enabled" "0"
|
||||
[ "$enabled" -eq "1" ] || return 1
|
||||
|
||||
local listen_port root_path root_name
|
||||
config_get listen_port "config" "listen_port" "8787"
|
||||
config_get root_path "config" "root_path" "/"
|
||||
local listen_port root_path root_name adminUsername adminPassword cacheDir cacheDirMaxSizeMB
|
||||
config_get listen_port "config" "listen_port" "8787"
|
||||
config_get root_path "config" "root_path" "/"
|
||||
config_get cacheDir "config" "cacheDir" "/tmp"
|
||||
config_get cacheDirMaxSizeMB "config" "cacheDirMaxSizeMB" "500"
|
||||
|
||||
root_name=""
|
||||
[ "$root_path" = "/" ] && root_name="root"
|
||||
root_name=""
|
||||
[ "$root_path" = "/" ] && root_name="root"
|
||||
|
||||
if [ ! -f "$CONF_PATH" ]; then
|
||||
mkdir -p "$(dirname "$CONF_PATH")"
|
||||
cat <<EOF > "$CONF_PATH"
|
||||
# Migrate config files generated by older package versions.
|
||||
if grep -q 'database.db' "$CONF_PATH"; then
|
||||
mv -f "$CONF_PATH" "$CONF_PATH".old
|
||||
fi
|
||||
if [ ! -f "$CONF_PATH" ]; then
|
||||
mkdir -p "$(dirname "$CONF_PATH")"
|
||||
cat <<EOF > "$CONF_PATH"
|
||||
http:
|
||||
port: $listen_port
|
||||
server:
|
||||
@@ -35,38 +41,28 @@ server:
|
||||
name: "$root_name"
|
||||
config:
|
||||
defaultEnabled: true
|
||||
cacheDir: "$cacheDir"
|
||||
cacheDirCleanup: true
|
||||
cacheDirMaxSizeMB: $cacheDirMaxSizeMB
|
||||
auth:
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
adminUsername: "admin"
|
||||
adminPassword: "admin"
|
||||
adminPassword: "admin123"
|
||||
userDefaults:
|
||||
ui:
|
||||
locale: "zhCN"
|
||||
EOF
|
||||
else
|
||||
# Migrate config files generated by older package versions.
|
||||
if grep -q '^ database: "' "$CONF_PATH"; then
|
||||
sed -i \
|
||||
-e "s/^server:$/http:\\n port: $listen_port\\nserver:/" \
|
||||
-e "/^ port:/d" \
|
||||
-e 's,^ database: "\(.*\)", database:\n path: "\1",' \
|
||||
-e '/^auth:$/a\
|
||||
methods:\
|
||||
password:\
|
||||
enabled: true' \
|
||||
-e 's/^ adminUsername:/ adminUsername:/' \
|
||||
-e 's/^ adminPassword:/ adminPassword:/' \
|
||||
"$CONF_PATH"
|
||||
fi
|
||||
|
||||
grep -q " name:" "$CONF_PATH" || sed -i "s,.*- path:.*,&\n name: \"\"," "$CONF_PATH"
|
||||
sed -e "s/^ port:.*/ port: $listen_port/" \
|
||||
-e "s, - path:.*, - path: \"$root_path\"," \
|
||||
-e "s/ name: \".*\"/ name: \"$root_name\"/" \
|
||||
-i "$CONF_PATH"
|
||||
fi
|
||||
else
|
||||
grep -q " name:" "$CONF_PATH" || sed -i "s,.*- path:.*,&\n name: \"\"," "$CONF_PATH"
|
||||
sed -e "s/^ port:.*/ port: $listen_port/" \
|
||||
-e "s, - path:.*, - path: \"$root_path\"," \
|
||||
-e "s/ name: \".*\"/ name: \"$root_name\"/" \
|
||||
-e "s,^ cacheDir:.*, cacheDir: \"$cacheDir\"," \
|
||||
-e "s/^ cacheDirMaxSizeMB:.*/ cacheDirMaxSizeMB: $cacheDirMaxSizeMB/" \
|
||||
-i "$CONF_PATH"
|
||||
fi
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG"
|
||||
@@ -79,7 +75,6 @@ EOF
|
||||
procd_set_param respawn
|
||||
|
||||
procd_close_instance
|
||||
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
|
||||
@@ -4,17 +4,19 @@ Date: Sun, 25 Oct 2026 15:11:25 +0800
|
||||
Subject: [PATCH] Add control script for AdGuardHome management
|
||||
|
||||
This script manages the AdGuardHome service, including input validation, port management, and redirect handling.
|
||||
|
||||
In exchange mode the saved old_port is recorded in the same sense it is compared later (the port dnsmasq holds once the swap is in place), so repeated runs no longer tear the swap down and rebuild it.
|
||||
---
|
||||
root/usr/share/AdGuardHome/control.sh | 273 ++++++++++++++++++++++++++
|
||||
1 file changed, 273 insertions(+)
|
||||
root/usr/share/AdGuardHome/control.sh | 284 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 284 insertions(+)
|
||||
create mode 100644 root/usr/share/AdGuardHome/control.sh
|
||||
|
||||
diff --git a/root/usr/share/AdGuardHome/control.sh b/root/usr/share/AdGuardHome/control.sh
|
||||
new file mode 100644
|
||||
index 0000000..eabfcf3
|
||||
index 0000000..5917abb
|
||||
--- /dev/null
|
||||
+++ b/root/usr/share/AdGuardHome/control.sh
|
||||
@@ -0,0 +1,273 @@
|
||||
@@ -0,0 +1,284 @@
|
||||
+#!/bin/sh
|
||||
+# /usr/share/AdGuardHome/control.sh
|
||||
+. /usr/share/AdGuardHome/helper.sh
|
||||
@@ -267,9 +269,20 @@ index 0000000..eabfcf3
|
||||
+ fi
|
||||
+ fi
|
||||
+
|
||||
+ # In exchange mode old_port is compared later against the port dnsmasq
|
||||
+ # holds (the AdGuardHome port before the swap). If the swap is already in
|
||||
+ # place (yaml 53, dnsmasq elsewhere), record dnsmasq's port, otherwise the
|
||||
+ # next run sees a bogus change and tears the swap down and rebuilds it.
|
||||
+ local state_port="$adguardhome_PORT"
|
||||
+ if [ "$redirect" = "exchange" ] && [ "$enabled" = "1" ] && [ "$adguardhome_PORT" = "53" ]; then
|
||||
+ local dp
|
||||
+ dp="$(uci -q get dhcp.@dnsmasq[0].port)"
|
||||
+ is_port "$dp" && [ "$dp" != "53" ] && state_port="$dp"
|
||||
+ fi
|
||||
+
|
||||
+ # All three values are validated above, so this is plain data.
|
||||
+ printf 'old_redirect="%s"\nold_port="%s"\nold_enabled="%s"\n' \
|
||||
+ "$redirect" "$adguardhome_PORT" "$enabled" > "$STATE_FILE"
|
||||
+ "$redirect" "$state_port" "$enabled" > "$STATE_FILE"
|
||||
+
|
||||
+ if [ "$enabled" = "0" ] || [ "$adguardhome_PORT" = "0" ]; then
|
||||
+ printf '%s' "0" > /var/run/AdGredir
|
||||
|
||||
@@ -4,17 +4,19 @@ Date: Sun, 25 Oct 2026 15:13:27 +0800
|
||||
Subject: [PATCH] Add helper script for YAML configuration management
|
||||
|
||||
This script provides auxiliary functions for reading and writing YAML configuration files, including a secure method for editing keys and values.
|
||||
|
||||
config_editor replaces the file atomically (mktemp in the same directory, owner and mode kept, then rename) so AdGuard Home can never read a truncated file while it is being edited.
|
||||
---
|
||||
root/usr/share/AdGuardHome/helper.sh | 65 ++++++++++++++++++++++++++++
|
||||
1 file changed, 65 insertions(+)
|
||||
root/usr/share/AdGuardHome/helper.sh | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
create mode 100644 root/usr/share/AdGuardHome/helper.sh
|
||||
|
||||
diff --git a/root/usr/share/AdGuardHome/helper.sh b/root/usr/share/AdGuardHome/helper.sh
|
||||
new file mode 100644
|
||||
index 0000000..ddc401f
|
||||
index 0000000..fdff92b
|
||||
--- /dev/null
|
||||
+++ b/root/usr/share/AdGuardHome/helper.sh
|
||||
@@ -0,0 +1,65 @@
|
||||
@@ -0,0 +1,76 @@
|
||||
+#!/bin/sh
|
||||
+# Auxiliary functions specially used for reading and writing YAML
|
||||
+#
|
||||
@@ -27,7 +29,7 @@ index 0000000..ddc401f
|
||||
+# ever handed to a shell. VALUE reaches awk through the environment (no -v escape
|
||||
+# processing) and the rewrite is done by awk itself, not by system("sed ...").
|
||||
+config_editor() {
|
||||
+ local key="$1" value="$2" file="$3" ro="$4" tmp nl
|
||||
+ local key="$1" value="$2" file="$3" ro="$4" tmp new nl
|
||||
+ nl='
|
||||
+'
|
||||
+ [ -f "$file" ] && [ ! -L "$file" ] || return 1
|
||||
@@ -44,8 +46,19 @@ index 0000000..ddc401f
|
||||
+
|
||||
+ tmp="$(mktemp /tmp/agh_yaml.XXXXXX)" || return 1
|
||||
+ if AGH_VALUE="$value" awk -v yaml="$key" -v ro="" "$AGH_YAML_AWK" "$file" > "$tmp" && [ -s "$tmp" ]; then
|
||||
+ # Write through the existing file so owner and mode are preserved.
|
||||
+ cat "$tmp" > "$file"
|
||||
+ # Replace the file atomically: AdGuardHome may be (re)starting right now,
|
||||
+ # and truncating it in place lets it read an empty file and overwrite the
|
||||
+ # whole config with defaults. mktemp (O_EXCL) in the same directory gives
|
||||
+ # a rename on the same filesystem and cannot be redirected by a symlink.
|
||||
+ new="$(mktemp "$file.XXXXXX")" || { rm -f "$tmp"; return 1; }
|
||||
+ if cat "$tmp" > "$new" \
|
||||
+ && chown "$(ls -ln "$file" | awk '{print $3":"$4}')" "$new" \
|
||||
+ && chmod "$(ls -l "$file" | awk '{m=0; s=substr($1,2,9); for(i=1;i<=9;i++) if(substr(s,i,1)!="-") m+=2^(9-i); printf "%o", m}')" "$new" \
|
||||
+ && mv -f "$new" "$file"; then
|
||||
+ :
|
||||
+ else
|
||||
+ rm -f "$new"
|
||||
+ fi
|
||||
+ fi
|
||||
+ rm -f "$tmp"
|
||||
+}
|
||||
|
||||
@@ -250,9 +250,20 @@ _do_redirect() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# In exchange mode old_port is compared later against the port dnsmasq
|
||||
# holds (the AdGuardHome port before the swap). If the swap is already in
|
||||
# place (yaml 53, dnsmasq elsewhere), record dnsmasq's port, otherwise the
|
||||
# next run sees a bogus change and tears the swap down and rebuilds it.
|
||||
local state_port="$adguardhome_PORT"
|
||||
if [ "$redirect" = "exchange" ] && [ "$enabled" = "1" ] && [ "$adguardhome_PORT" = "53" ]; then
|
||||
local dp
|
||||
dp="$(uci -q get dhcp.@dnsmasq[0].port)"
|
||||
is_port "$dp" && [ "$dp" != "53" ] && state_port="$dp"
|
||||
fi
|
||||
|
||||
# All three values are validated above, so this is plain data.
|
||||
printf 'old_redirect="%s"\nold_port="%s"\nold_enabled="%s"\n' \
|
||||
"$redirect" "$adguardhome_PORT" "$enabled" > "$STATE_FILE"
|
||||
"$redirect" "$state_port" "$enabled" > "$STATE_FILE"
|
||||
|
||||
if [ "$enabled" = "0" ] || [ "$adguardhome_PORT" = "0" ]; then
|
||||
printf '%s' "0" > /var/run/AdGredir
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
# ever handed to a shell. VALUE reaches awk through the environment (no -v escape
|
||||
# processing) and the rewrite is done by awk itself, not by system("sed ...").
|
||||
config_editor() {
|
||||
local key="$1" value="$2" file="$3" ro="$4" tmp nl
|
||||
local key="$1" value="$2" file="$3" ro="$4" tmp new nl
|
||||
nl='
|
||||
'
|
||||
[ -f "$file" ] && [ ! -L "$file" ] || return 1
|
||||
@@ -27,8 +27,19 @@ config_editor() {
|
||||
|
||||
tmp="$(mktemp /tmp/agh_yaml.XXXXXX)" || return 1
|
||||
if AGH_VALUE="$value" awk -v yaml="$key" -v ro="" "$AGH_YAML_AWK" "$file" > "$tmp" && [ -s "$tmp" ]; then
|
||||
# Write through the existing file so owner and mode are preserved.
|
||||
cat "$tmp" > "$file"
|
||||
# Replace the file atomically: AdGuardHome may be (re)starting right now,
|
||||
# and truncating it in place lets it read an empty file and overwrite the
|
||||
# whole config with defaults. mktemp (O_EXCL) in the same directory gives
|
||||
# a rename on the same filesystem and cannot be redirected by a symlink.
|
||||
new="$(mktemp "$file.XXXXXX")" || { rm -f "$tmp"; return 1; }
|
||||
if cat "$tmp" > "$new" \
|
||||
&& chown "$(ls -ln "$file" | awk '{print $3":"$4}')" "$new" \
|
||||
&& chmod "$(ls -l "$file" | awk '{m=0; s=substr($1,2,9); for(i=1;i<=9;i++) if(substr(s,i,1)!="-") m+=2^(9-i); printf "%o", m}')" "$new" \
|
||||
&& mv -f "$new" "$file"; then
|
||||
:
|
||||
else
|
||||
rm -f "$new"
|
||||
fi
|
||||
fi
|
||||
rm -f "$tmp"
|
||||
}
|
||||
|
||||
@@ -47,8 +47,8 @@ return view.extend({
|
||||
let webport = (uci.get(data, 'config', 'listen_port') || '8787');
|
||||
|
||||
m = new form.Map('filebrowser-q', _('FileBrowser Quantum'),
|
||||
_('The best free self-hosted web-based file manager.') + '<br />'+
|
||||
_('Default login username is %s and password is %s.').format('<code>admin</code>', '<code>admin</code>'));
|
||||
_('The best free self-hosted web-based file manager.') + '<br />' +
|
||||
_('Default login username is %s and password is %s.').format('<code>admin</code>', '<code>admin123</code>'));
|
||||
|
||||
s = m.section(form.TypedSection);
|
||||
s.anonymous = true;
|
||||
@@ -63,7 +63,7 @@ return view.extend({
|
||||
return E('div', { class: 'cbi-section', id: 'status_bar' }, [
|
||||
E('p', { id: 'service_status' }, _('Collecting data...'))
|
||||
]);
|
||||
}
|
||||
};
|
||||
|
||||
s = m.section(form.NamedSection, 'config', 'filebrowser');
|
||||
|
||||
@@ -80,6 +80,15 @@ return view.extend({
|
||||
o.default = '/';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'cacheDir', _('Cache directory'));
|
||||
o.default = '/tmp';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'cacheDirMaxSizeMB', _('Cache max size (MB)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '500';
|
||||
o.rmempty = false;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -8,6 +8,12 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Cache directory"
|
||||
msgstr "缓存目录"
|
||||
|
||||
msgid "Cache max size (MB)"
|
||||
msgstr "最大缓存大小 (MB)"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "正在收集数据中..."
|
||||
|
||||
@@ -31,3 +37,6 @@ msgstr "运行中"
|
||||
|
||||
msgid "Root directory"
|
||||
msgstr "根目录"
|
||||
|
||||
msgid "The best free self-hosted web-based file manager."
|
||||
msgstr "好用的免费自托管 Web 文件管理器。"
|
||||
Reference in new issue
Block a user