From eb183849775a2348a333fb44c0e05af9f2864de8 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 15 Jul 2026 16:50:30 +0800 Subject: [PATCH 01/19] =?UTF-8?q?gentoo=5Fportage:=20=E5=8E=BB=E6=8E=89=20?= =?UTF-8?q?Emacs=20=E7=9A=84=20gtk=20USE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/package.use | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gentoo_portage/package.use b/gentoo_portage/package.use index 5bf1495..3d16ac6 100644 --- a/gentoo_portage/package.use +++ b/gentoo_portage/package.use @@ -18,7 +18,7 @@ x11-terms/rxvt-unicode 256-color blink fading-colors pixbuf unicode3 #www-servers/uwsgi cgi python # emacs -app-editors/emacs cairo dynamic-loading gtk gui gzip-el harfbuzz json libxml2 sound source sqlite tree-sitter wide-int +app-editors/emacs cairo dynamic-loading -gtk gui gzip-el harfbuzz json libxml2 sound source sqlite tree-sitter wide-int app-emacs/emacs-common gui # 7zip From d9e0ad2e88e20b3eff2f9225ca63d018f79d2a2a Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 18 Jul 2026 04:45:40 +0800 Subject: [PATCH 02/19] =?UTF-8?q?dot:=20=E5=8E=BB=E6=8E=89=20realpath=20-m?= =?UTF-8?q?=20=E4=BB=A5=E5=B0=BD=E9=87=8F=E5=85=BC=E5=AE=B9=20FreeBSD=20(?= =?UTF-8?q?=E5=85=B6=20realpath=20=E4=B8=8D=E6=94=AF=E6=8C=81=20-m=20?= =?UTF-8?q?=E4=B8=94=E8=A1=8C=E4=B8=BA=E5=AD=98=E5=9C=A8=E5=B7=AE=E5=BC=82?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dot/.bashrc.d/android-studio.bash | 2 +- dot/.bashrc.d/fnm.bash | 2 +- dot/.bashrc.d/function.bash | 4 ++-- dot/.bashrc.d/llama-cpp.bash | 2 +- dot/.bashrc.d/manager/mise.bash | 2 +- dot/.bashrc.d/manager/rust.bash | 2 +- dot/.bashrc.d/pnpm.bash | 2 +- dot/.bashrc.d/uv.bash | 2 +- dot/.bashrc.d/volta.bash | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dot/.bashrc.d/android-studio.bash b/dot/.bashrc.d/android-studio.bash index 2fb75cf..7c91486 100644 --- a/dot/.bashrc.d/android-studio.bash +++ b/dot/.bashrc.d/android-studio.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir diff --git a/dot/.bashrc.d/fnm.bash b/dot/.bashrc.d/fnm.bash index 35fa523..a9b34cb 100644 --- a/dot/.bashrc.d/fnm.bash +++ b/dot/.bashrc.d/fnm.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir diff --git a/dot/.bashrc.d/function.bash b/dot/.bashrc.d/function.bash index 311f622..d0857a9 100644 --- a/dot/.bashrc.d/function.bash +++ b/dot/.bashrc.d/function.bash @@ -9,7 +9,7 @@ generate-bash-completion() { fi local completion_dir="${HOME}/.local/share/bash-completion/completions" - local completion_file="$(realpath -m "${completion_dir}/${file}")" + local completion_file="${completion_dir}/${file}" if [[ -d "$completion_dir" && ! -w "$completion_dir" ]]; then echo "ERROR: has no permission to write to directory '${completion_dir}'" >&2 @@ -64,7 +64,7 @@ load-bash-completion() { local completion_dir="${HOME}/.local/share/bash-completion/completions" for file in "${files[@]}"; do - local completion_file="$(realpath -m "${completion_dir}/${file}")" + local completion_file="${completion_dir}/${file}" if [[ ! -e "$completion_file" ]]; then if [[ "$silence" == false ]]; then diff --git a/dot/.bashrc.d/llama-cpp.bash b/dot/.bashrc.d/llama-cpp.bash index 4cf79c0..bcf9187 100644 --- a/dot/.bashrc.d/llama-cpp.bash +++ b/dot/.bashrc.d/llama-cpp.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir diff --git a/dot/.bashrc.d/manager/mise.bash b/dot/.bashrc.d/manager/mise.bash index 2431341..8f40693 100644 --- a/dot/.bashrc.d/manager/mise.bash +++ b/dot/.bashrc.d/manager/mise.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/../function.bash" unset basedir diff --git a/dot/.bashrc.d/manager/rust.bash b/dot/.bashrc.d/manager/rust.bash index 730ce0d..d065795 100644 --- a/dot/.bashrc.d/manager/rust.bash +++ b/dot/.bashrc.d/manager/rust.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/../function.bash" unset basedir diff --git a/dot/.bashrc.d/pnpm.bash b/dot/.bashrc.d/pnpm.bash index 310cfa5..a7d41a5 100755 --- a/dot/.bashrc.d/pnpm.bash +++ b/dot/.bashrc.d/pnpm.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir diff --git a/dot/.bashrc.d/uv.bash b/dot/.bashrc.d/uv.bash index 138b13c..b287472 100644 --- a/dot/.bashrc.d/uv.bash +++ b/dot/.bashrc.d/uv.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir diff --git a/dot/.bashrc.d/volta.bash b/dot/.bashrc.d/volta.bash index 2716380..cb17c7c 100644 --- a/dot/.bashrc.d/volta.bash +++ b/dot/.bashrc.d/volta.bash @@ -1,4 +1,4 @@ -basedir=$(realpath -m $(dirname "${BASH_SOURCE[0]:-$0}")) +basedir=$(realpath $(dirname "${BASH_SOURCE[0]:-$0}")) source "${basedir}/function.bash" unset basedir From 1872cd2fc9f43937fbadaa1f9db7da74bdc194e8 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 18 Jul 2026 08:45:54 +0800 Subject: [PATCH 03/19] =?UTF-8?q?dot:=20.bashrc=20=E5=A2=9E=E5=8A=A0=20Fre?= =?UTF-8?q?eBSD=20=E4=B8=8B=20ls=20=E9=A2=9C=E8=89=B2=E5=88=AB=E5=90=8D?= =?UTF-8?q?=E4=B8=8E=20bash-completion=20=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dot/.bashrc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dot/.bashrc b/dot/.bashrc index 2e4a849..1dd8493 100644 --- a/dot/.bashrc +++ b/dot/.bashrc @@ -63,3 +63,13 @@ for _ in ${HOME}/.bashrc.d/*; do source "$_" fi done + +if [[ "$(uname)" == "FreeBSD" ]]; then + # ls with color + alias ls="ls -G" + + # bash-completion need load manually in FreeBSD + if [[ -f /usr/local/share/bash-completion/bash_completion.sh ]]; then + source /usr/local/share/bash-completion/bash_completion.sh + fi +fi From 7c1031cf204cca0ece919e2edb434391b989fde3 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Thu, 23 Jul 2026 02:19:03 +0800 Subject: [PATCH 04/19] update ccache.conf --- gentoo_portage/ccache.conf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gentoo_portage/ccache.conf b/gentoo_portage/ccache.conf index e3541b7..e1451ed 100644 --- a/gentoo_portage/ccache.conf +++ b/gentoo_portage/ccache.conf @@ -1,5 +1,11 @@ # Maximum cache size to maintain -max_size = 20.0G +max_size = 50.0G # Allow others to run 'ebuild' and share the cache. umask = 002 + +compiler_check = %compiler% -dumpversion + +cache_dir = /var/cache/ccache +# chown distcc:portage /var/cache/ccache +# chmod 2775 /var/cache/ccache \ No newline at end of file From 4b8b990417387a22a9ca92944299500b6c97b6f2 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Thu, 23 Jul 2026 02:20:39 +0800 Subject: [PATCH 05/19] gentoo_portage: enable distcc and ccache features --- gentoo_portage/make.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gentoo_portage/make.conf b/gentoo_portage/make.conf index 92ee604..26e82a6 100644 --- a/gentoo_portage/make.conf +++ b/gentoo_portage/make.conf @@ -21,9 +21,9 @@ BINPKG_FORMAT="gpkg" EMERGE_DEFAULT_OPTS="--buildpkg --buildpkg-exclude \"virtual/* sys-kernel/*-sources */*-bin\" ${EMERGE_DEFAULT_OPTS}" # ccache and distcc -# FEATURES="distcc ${FEATURES}" -# CCACHE_DIR="/var/cache/ccache" -# FEATURES="ccache ${FEATURES}" +FEATURES="distcc ccache ${FEATURES}" +CCACHE_DIR="/var/cache/ccache" +CCACHE_UMASK="0002" # ABI_X86="32 64" ALSA_CARDS="hda-intel" From 4d8a809e71b95550ce599eb323e1d779cdda5d44 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Thu, 23 Jul 2026 21:09:36 +0800 Subject: [PATCH 06/19] =?UTF-8?q?gentoo=5Fportage:=20=E6=B8=85=E7=90=86?= =?UTF-8?q?=E6=97=A0=E6=95=88=E7=9A=84=20accept=5Fkeywords=20=E4=B8=8E=20l?= =?UTF-8?q?icense=20=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/package.accept_keywords | 3 +-- gentoo_portage/package.license | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gentoo_portage/package.accept_keywords b/gentoo_portage/package.accept_keywords index 0990cc0..0bd4b10 100644 --- a/gentoo_portage/package.accept_keywords +++ b/gentoo_portage/package.accept_keywords @@ -2,7 +2,6 @@ app-editors/cursor ~amd64 app-editors/emacs ** app-editors/vscode ~amd64 -app-emacs/emacs-common ~amd64 # imput method app-i18n/fcitx ~amd64 @@ -15,7 +14,7 @@ app-i18n/librime ~amd64 # dev-libs/tree-sitter* ~amd64 # audroid studio -dev-util/android-studio::gentoo ~amd64 +dev-util/android-studio ~amd64 # frp net-vpn/frp ~amd64 diff --git a/gentoo_portage/package.license b/gentoo_portage/package.license index eb309ed..a58077b 100644 --- a/gentoo_portage/package.license +++ b/gentoo_portage/package.license @@ -22,7 +22,7 @@ net-im/wemeet wemeet_license net-misc/anydesk AnyDesk-TOS net-misc/baidunetdisk BaiduNetDisk net-misc/teamviewer TeamViewer -sys-kernel/linux-firmware no-source-code linux-fw-redistributable +sys-kernel/linux-firmware linux-fw-redistributable www-client/google-chrome google-chrome www-client/microsoft-edge microsoft-edge www-plugins/adobe-flash AdobeFlash-11.x From 6563e818ae04417acede7a0de3900d0e7c62fe99 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 12 Aug 2026 23:31:16 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V2RayA-RoutingA.conf | 35 ++++++++++++++++++++++++++ dot/.mozilla/autoproxy.pac | 2 ++ gentoo_portage/package.accept_keywords | 3 +++ gentoo_portage/package.mask | 1 - note/docker.org | 2 +- 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 V2RayA-RoutingA.conf diff --git a/V2RayA-RoutingA.conf b/V2RayA-RoutingA.conf new file mode 100644 index 0000000..bbd9eb8 --- /dev/null +++ b/V2RayA-RoutingA.conf @@ -0,0 +1,35 @@ +default: direct + +# 去广告 +domain(geosite:category-ads-all) -> block + +domain(geosite: gfw) -> proxy + +# 国外域名即使有中国IP也要优先代理 +domain(geosite:geolocation-!cn)->proxy + + +default: proxy + +# 特定域名直连 +domain(domain: gitweb.gentoo.org, domain: zedhugh.fun, domain: www.gnu.org)->direct +domain(geosite:codeberg) -> direct + +domain(domain: linuxeden.com) -> proxy + +# 去广告 +domain(geosite:category-ads-all) -> block + +# 国外域名即使有中国IP也要优先代理 +domain(geosite:geolocation-!cn)->proxy + +# 学术网站 +domain(geosite:google-scholar)->proxy +domain(geosite:category-scholar-!cn, geosite:category-scholar-cn)->direct + +# 国内直连 +domain(geosite:cn) -> direct +ip(geoip:cn) -> direct + +# 局域网直连 +ip(geoip:private) -> direct diff --git a/dot/.mozilla/autoproxy.pac b/dot/.mozilla/autoproxy.pac index 0f6db89..5a26104 100644 --- a/dot/.mozilla/autoproxy.pac +++ b/dot/.mozilla/autoproxy.pac @@ -7,12 +7,14 @@ const direct_ip_list = [ ["192.168.0.0", "255.255.255.0"], ["192.168.1.0", "255.255.255.0"], ["192.168.2.0", "255.255.255.0"], + ["127.0.0.1", "255.255.255.0"], ]; const direct_domain_list = [ "zedhugh.fun", "codeberg.org", "gitweb.gentoo.org", + "localhost" ]; /** diff --git a/gentoo_portage/package.accept_keywords b/gentoo_portage/package.accept_keywords index 0bd4b10..9bfc672 100644 --- a/gentoo_portage/package.accept_keywords +++ b/gentoo_portage/package.accept_keywords @@ -49,3 +49,6 @@ sci-ml/llama-cpp ** # nvidia cuda toolkit dev-util/nvidia-cuda-toolkit ~amd64 + +# proxy +net-proxy/shadowsocks-rust ~amd64 \ No newline at end of file diff --git a/gentoo_portage/package.mask b/gentoo_portage/package.mask index 7a4c217..34e1243 100644 --- a/gentoo_portage/package.mask +++ b/gentoo_portage/package.mask @@ -1,3 +1,2 @@ dev-lang/rust -net-proxy/shadowsocks-rust::gentoo-zh >=x11-drivers/nvidia-drivers-581 diff --git a/note/docker.org b/note/docker.org index 80812db..6607fa6 100644 --- a/note/docker.org +++ b/note/docker.org @@ -40,7 +40,7 @@ docker 拉取命令 --network=host \ --name v2raya \ -e V2RAYA_LOG_FILE=/tmp/v2raya.log \ - -e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \ + -e V2RAYA_V2RAY_BIN=/usr/bin/v2raya_core \ -e V2RAYA_NFTABLES_SUPPORT=off \ -e IPTABLES_MODE=legacy \ -v /lib/modules:/lib/modules:ro \ From 31d6916dd0d55ea3f80918a748342ae1b216b641 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Thu, 13 Aug 2026 14:49:46 +0800 Subject: [PATCH 08/19] =?UTF-8?q?account.org.gpg:=20=E6=96=B0=E5=A2=9E=20a?= =?UTF-8?q?ipixit=20R2=20=E6=A1=B6=E7=9A=84=E8=AE=BF=E9=97=AE=E5=AF=86?= =?UTF-8?q?=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- note/account.org.gpg | Bin 4588 -> 4712 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/note/account.org.gpg b/note/account.org.gpg index 115f1a250caaf81921a739b10cfc35c347f6de86..969a1fcb66923b88cd76758eb82796476cc06585 100644 GIT binary patch literal 4712 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 qyn|ac|oKxj+0|XYp#iwK*G9jfGv|SlpHZarx literal 4588 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 WM|a!QU=?W#Wh^!(r3#y;p1fREqVe1S From 1c8243dbaa188ba9d0243769a6898386bfeec299 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sun, 16 Aug 2026 18:03:40 +0800 Subject: [PATCH 09/19] =?UTF-8?q?docker:=20docker=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=94=BE=E5=88=B0=20docker=20=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/README.org | 16 +++++++ .../V2RayA-RoutingA.conf | 0 docker/xray-config.json | 44 ++++++++++++++++++ docker/y480.yaml | 30 ++++++++++++ note/account.org.gpg | Bin 4712 -> 4934 bytes 5 files changed, 90 insertions(+) create mode 100644 docker/README.org rename V2RayA-RoutingA.conf => docker/V2RayA-RoutingA.conf (100%) create mode 100644 docker/xray-config.json create mode 100644 docker/y480.yaml diff --git a/docker/README.org b/docker/README.org new file mode 100644 index 0000000..eaca0d2 --- /dev/null +++ b/docker/README.org @@ -0,0 +1,16 @@ +#+title: docker 配置说明 + +每个及其需要用到的 docker 都通过 =docker-compose.yaml= 配置,避免每次升级都自己手动写命令行。 + +* 文件用途 + +| 文件 | 说明 | +|----------------------+--------------------------------| +| y480.yaml | 家用服务器 docker compose 配置 | +| xray-config.json | xray 服务器配置 | +| V2RayA-RoutingA.conf | V2rayA 路由配置 | + +* docker 镜像对应的 git 仓库 + +- https://github.com/ronggang/OWSS +- https://github.com/v2rayA/v2rayA diff --git a/V2RayA-RoutingA.conf b/docker/V2RayA-RoutingA.conf similarity index 100% rename from V2RayA-RoutingA.conf rename to docker/V2RayA-RoutingA.conf diff --git a/docker/xray-config.json b/docker/xray-config.json new file mode 100644 index 0000000..421dfac --- /dev/null +++ b/docker/xray-config.json @@ -0,0 +1,44 @@ +{ + "log": { + "loglevel": "warning", + "access": "/var/log/xray/access.log", + "error": "/var/log/xray/error.log" + }, + "inbounds": [ + { + "listen": "0.0.0.0", + "port": 443, + "protocol": "vless", + "settings": { + "clients": [ + { + "id": "817a867d-7bcf-48d1-b30e-5c6794852e13", + "flow": "xtls-rprx-vision" + } + ], + "decryption": "none", + "udp": true + }, + "streamSettings": { + "network": "tcp", + "security": "reality", + "realitySettings": { + "dest": "dl.google.com:443", + "serverNames": ["www.cloudflare.com"], + "privateKey": "uJQs7FOMjafiU-7kxOUpfJut8ocj5kpr_p-zH7RTt1g", + "shortIds": ["1e21014957dfc7a9"] + } + }, + "sniffing": { + "enabled": true, + "destOverride": ["http", "tls", "quic"] + } + } + ], + "outbounds": [ + { + "protocol": "freedom", + "tag": "direct" + } + ] +} diff --git a/docker/y480.yaml b/docker/y480.yaml new file mode 100644 index 0000000..0d89629 --- /dev/null +++ b/docker/y480.yaml @@ -0,0 +1,30 @@ +services: + owss: + image: ronggang/owss:latest + container_name: owss + restart: always + privileged: true + # host 模式和 bridge 模式二选一 + network_mode: host + # ports: + # - "8088:8088" + volumes: + - /OWSS/storage:/app/storage + - /OWSS/config:/app/config + + v2raya: + image: mzz2017/v2raya:latest + container_name: v2raya + restart: always + privileged: true + network_mode: host + volumes: + - /lib/modules:/lib/modules:ro + - /etc/resolv.conf:/etc/resolv.conf + - /etc/v2raya:/etc/v2raya + environment: + # V2RAYA_V2RAY_BIN: /usr/local/bin/v2ray # 老版本用这个,要开 xray 不设置这个环境变量 + # V2RAYA_V2RAY_BIN: /usr/bin/v2raya_core # 新版本用这个,或者不设置这个环境变量 + V2RAYA_LOG_FILE: /tmp/v2raya.log + V2RAYA_NFTABLES_SUPPORT: off + IPTABLES_MODE: legacy diff --git a/note/account.org.gpg b/note/account.org.gpg index 969a1fcb66923b88cd76758eb82796476cc06585..5f234c41048d5253b73ed3b12696ce3ba8d961fc 100644 GIT binary patch literal 4934 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 EdXVmxOaK4? literal 4712 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 qyn|ac|oKxj+0|XYp#iwK*G9jfGv|SlpHZarx From eef4881ffd74f039910acb9199bdf71c073438f1 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 18 Aug 2026 03:16:42 +0800 Subject: [PATCH 10/19] =?UTF-8?q?ansible:=20=E6=96=B0=E5=A2=9E=20VPS=20?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=20playbook=20=E4=B8=8E=20shadowsock?= =?UTF-8?q?s-libev=20=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ansible/group_vars/vps_debian.yml | 4 + ansible/inventory.ini | 2 + ansible/playbooks/shadowsocks-libev.yaml | 34 ++++++++ ansible/playbooks/vps_debian_provision.yaml | 88 +++++++++++++++++++++ ansible/templates/ss-config.json.j2 | 9 +++ ansible/vars/vault.yaml | 14 ++++ 6 files changed, 151 insertions(+) create mode 100644 ansible/group_vars/vps_debian.yml create mode 100644 ansible/inventory.ini create mode 100644 ansible/playbooks/shadowsocks-libev.yaml create mode 100644 ansible/playbooks/vps_debian_provision.yaml create mode 100644 ansible/templates/ss-config.json.j2 create mode 100644 ansible/vars/vault.yaml diff --git a/ansible/group_vars/vps_debian.yml b/ansible/group_vars/vps_debian.yml new file mode 100644 index 0000000..d487002 --- /dev/null +++ b/ansible/group_vars/vps_debian.yml @@ -0,0 +1,4 @@ +--- +ansible_user: zedhugh +ansible_python_interpreter: /usr/bin/python3 +ansible_ssh_port: 44444 diff --git a/ansible/inventory.ini b/ansible/inventory.ini new file mode 100644 index 0000000..f340097 --- /dev/null +++ b/ansible/inventory.ini @@ -0,0 +1,2 @@ +[vps_debian] +yunyoo-tokyo diff --git a/ansible/playbooks/shadowsocks-libev.yaml b/ansible/playbooks/shadowsocks-libev.yaml new file mode 100644 index 0000000..f6ab341 --- /dev/null +++ b/ansible/playbooks/shadowsocks-libev.yaml @@ -0,0 +1,34 @@ +--- +- name: 配置 shadowsocks-libev 服务器 + hosts: vps_debian + become: true + vars_files: + - ../vars/vault.yaml + + tasks: + - name: 安装 shadowsocks-libev + apt: + name: shadowsocks-libev + state: present + update_cache: true + + - name: 配置 shadowsocks-libev 服务器 + template: + src: ../templates/ss-config.json.j2 + dest: /etc/shadowsocks-libev/config.json + owner: root + group: root + mode: '0644' + notify: restart shadowsocks-libev server + + - name: 启动 shadowsocks-libev 服务器 + systemd: + name: shadowsocks-libev + enabled: true + state: started + + handlers: + - name: restart shadowsocks-libev server + systemd: + name: shadowsocks-libev + state: restarted diff --git a/ansible/playbooks/vps_debian_provision.yaml b/ansible/playbooks/vps_debian_provision.yaml new file mode 100644 index 0000000..192774c --- /dev/null +++ b/ansible/playbooks/vps_debian_provision.yaml @@ -0,0 +1,88 @@ +--- +- name: 新机器初始化 + hosts: vps_debian + gather_facts: yes + + vars: + ansible_user: root + ansible_ssh_port: 22 + + admin_user: zedhugh + ssh_port: 44444 + timezone: Asia/Shanghai + ssh_public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" + + tasks: + - name: 启用 BBR + sysctl: + name: net.ipv4.tcp_congestion_control + value: bbr + sysctl_set: yes + reload: yes + + - name: 设置时区 + timezone: + name: "{{ timezone }}" + + - name: 创建管理员用户 + user: + name: "{{ admin_user }}" + shell: /bin/bash + create_home: yes + state: present + + - name: 确保 sudo 已安装 + apt: + name: sudo + state: present + + - name: 确保 sudoers.d 目录存在 + file: + path: /etc/sudoers.d + state: directory + owner: root + group: root + mode: '0755' + + - name: 配置 sudo 免密码 + copy: + content: "{{ admin_user }} ALL=(ALL) NOPASSWD: ALL\n" + dest: "/etc/sudoers.d/{{ admin_user }}" + owner: root + group: root + mode: '0440' + validate: '/usr/sbin/visudo -cf %s' + + - name: 复制 SSH 密钥 + authorized_key: + user: "{{ admin_user }}" + key: "{{ ssh_public_key }}" + state: present + + - name: 修改 SSH 端口 + lineinfile: + path: /etc/ssh/sshd_config + regexp: "^#?Port " + line: "Port {{ ssh_port }}" + notify: restart ssh + + - name: 禁止 root 密码登录 + lineinfile: + path: /etc/ssh/sshd_config + regexp: "^#?PermitRootLogin" + line: "PermitRootLogin prohibit-password" + notify: restart ssh + + - name: 禁止密码认证 + lineinfile: + path: /etc/ssh/sshd_config + regexp: "^#?PasswordAuthentication" + line: "PasswordAuthentication no" + notify: restart ssh + + + handlers: + - name: restart ssh + systemd: + name: sshd + state: restarted diff --git a/ansible/templates/ss-config.json.j2 b/ansible/templates/ss-config.json.j2 new file mode 100644 index 0000000..6d3afcb --- /dev/null +++ b/ansible/templates/ss-config.json.j2 @@ -0,0 +1,9 @@ +{ + "server": "0.0.0.0", + "mode": "{{ vault_ss_mode }}", + "server_port": {{ vault_ss_server_port }}, + "local_port": {{ vault_ss_local_port }}, + "password": "{{ vault_ss_password }}", + "timeout": 60, + "method": "{{ vault_ss_method }}" +} diff --git a/ansible/vars/vault.yaml b/ansible/vars/vault.yaml new file mode 100644 index 0000000..c0192bb --- /dev/null +++ b/ansible/vars/vault.yaml @@ -0,0 +1,14 @@ +$ANSIBLE_VAULT;1.1;AES256 +33313937633334633738393933643562333861303332623836313735383561396636333034616662 +3239633666346235303830346135663362666533353363620a313930393362393536383063326135 +34363462633030646566643531316466373062343437643863306463626532663761643432366434 +3964623835393037310a366534643464626161353739383639386264613861326533616164656238 +38326565616131643131386338363036363765313434316661666535333434396337323039613735 +32393137393631613333356238613265663839666237623664373431383463323833326164373264 +33383765393236303263623861376366633862303366356638336363333135623437636133653664 +64336231333531363339656530393438343265643836363736646438373964313236366437383863 +64626638363935383664633739363732366461313566393533353333623565313766326231316263 +36383434313966373461616562353862613237666464653530643431326366353230333735306436 +32623434306462633830356637626262613131386238656665653831353137356565353539623365 +38656232323266346266313235343662646137626163653439616334656335383631396438386436 +3239 From 6f5e3dee55abd86446f5d8479beb976ea6250d2c Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 18 Aug 2026 22:20:23 +0800 Subject: [PATCH 11/19] =?UTF-8?q?ansible:=20=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E6=98=BE=E5=BC=8F=E5=BC=80?= =?UTF-8?q?=E5=90=AF=20ssh=20=E5=85=AC=E9=92=A5=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ansible/playbooks/vps_debian_provision.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ansible/playbooks/vps_debian_provision.yaml b/ansible/playbooks/vps_debian_provision.yaml index 192774c..5570432 100644 --- a/ansible/playbooks/vps_debian_provision.yaml +++ b/ansible/playbooks/vps_debian_provision.yaml @@ -80,6 +80,13 @@ line: "PasswordAuthentication no" notify: restart ssh + - name: 开启公钥认证 + lineinfile: + path: /etc/ssh/sshd_config + regexp: "^#?PubkeyAuthentication" + line: "PubkeyAuthentication yes" + notify: restart ssh + handlers: - name: restart ssh From 3329694df2cc6603f91139be18f15f53385ac0de Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 22 Aug 2026 21:51:51 +0800 Subject: [PATCH 12/19] =?UTF-8?q?ansible:=20=E6=B7=BB=E5=8A=A0=20frp=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ansible/playbooks/frps.yaml | 85 +++++++++++++++++++++++++++++++ ansible/templates/frps.service.j2 | 13 +++++ ansible/templates/frps.toml.j2 | 14 +++++ ansible/vars/vault.yaml | 37 +++++++++----- 4 files changed, 136 insertions(+), 13 deletions(-) create mode 100644 ansible/playbooks/frps.yaml create mode 100644 ansible/templates/frps.service.j2 create mode 100644 ansible/templates/frps.toml.j2 diff --git a/ansible/playbooks/frps.yaml b/ansible/playbooks/frps.yaml new file mode 100644 index 0000000..35ec5fe --- /dev/null +++ b/ansible/playbooks/frps.yaml @@ -0,0 +1,85 @@ +--- +- name: 配置 frps 服务端 + hosts: vps_debian + gather_facts: false + become: true + vars: + frp_version: "0.71.0" + frp_download_url: "https://github.com/fatedier/frp/releases/download/v{{ frp_version }}/frp_{{ frp_version }}_linux_amd64.tar.gz" + frp_local_archive: "/tmp/frp_{{ frp_version }}_linux_amd64.tar.gz" + frp_local_tmp_dir: "/tmp/frp_{{ frp_version }}_linux_amd64" + frp_install_dir: "/opt/frp" + frp_config_dir: "/etc/frp" + vars_files: + - ../vars/vault.yaml + + tasks: + - name: 创建 frp 目录 + file: + path: "{{ item }}" + state: directory + mode: '0755' + loop: + - "{{ frp_install_dir }}" + - "{{ frp_config_dir }}" + + - name: 检查本地是否已有该版本的压缩包 + stat: + path: "{{ frp_local_archive }}" + register: local_archive + delegate_to: localhost + run_once: true + + - name: 下载 frp 压缩包到本地 + get_url: + url: "{{ frp_download_url }}" + dest: "{{ frp_local_archive }}" + timeout: 60 + delegate_to: localhost + run_once: true + become: false + when: not local_archive.stat.exists + + - name: 解压 frp 压缩包到本地 + unarchive: + src: "{{ frp_local_archive }}" + dest: "/tmp/" + creates: "{{ frp_local_tmp_dir }}" + delegate_to: localhost + run_once: true + become: false + when: not local_archive.stat.exists + + - name: 复制 frps 二进制文件到目标机器 + copy: + src: "{{ frp_local_tmp_dir }}/frps" + dest: "{{ frp_install_dir }}/frps" + mode: '0755' + notify: restart frps + + - name: 生成 frps.toml 配置文件 + template: + src: ../templates/frps.toml.j2 + dest: "{{ frp_config_dir }}/frps.toml" + mode: '0644' + notify: restart frps + + - name: 创建 frps 的 systemd 服务文件 + template: + src: ../templates/frps.service.j2 + dest: /etc/systemd/system/frps.service + mode: '0644' + notify: restart frps + + - name: 启用并启动 frps 服务 + systemd: + name: frps + enabled: true + state: started + daemon_reload: true + + handlers: + - name: restart frps + systemd: + name: frps + state: restarted diff --git a/ansible/templates/frps.service.j2 b/ansible/templates/frps.service.j2 new file mode 100644 index 0000000..2c7093a --- /dev/null +++ b/ansible/templates/frps.service.j2 @@ -0,0 +1,13 @@ +[Uint] +Description=Frp Server Service +After=network.target + +[Service] +Type=simple +Restart=on-failure +RestartSec=5s +ExecStart={{ frp_install_dir }}/frps -c {{ frp_config_dir }}/frps.toml +LimitNOFILE=1048576 + +[Install] +WantedBy=multi-user.target diff --git a/ansible/templates/frps.toml.j2 b/ansible/templates/frps.toml.j2 new file mode 100644 index 0000000..f027098 --- /dev/null +++ b/ansible/templates/frps.toml.j2 @@ -0,0 +1,14 @@ +bindPort = {{ vault_frps_bind_port }} + +vhostHTTPPort = {{ vault_frps_vhost_http_port }} +vhostHTTPSPort = {{ vault_frps_vhost_https_port }} + +auth.method = "token" +auth.token = "{{ vault_frps_token }}" + +webServer.addr = "0.0.0.0" +webServer.port = {{ vault_frps_dashboard_port }} +webServer.user = "{{ vault_frps_dashboard_user }}" +webServer.password = "{{ vault_frps_dashboard_password }}" + +log.to = "/var/log/frps.log" diff --git a/ansible/vars/vault.yaml b/ansible/vars/vault.yaml index c0192bb..266cf94 100644 --- a/ansible/vars/vault.yaml +++ b/ansible/vars/vault.yaml @@ -1,14 +1,25 @@ $ANSIBLE_VAULT;1.1;AES256 -33313937633334633738393933643562333861303332623836313735383561396636333034616662 -3239633666346235303830346135663362666533353363620a313930393362393536383063326135 -34363462633030646566643531316466373062343437643863306463626532663761643432366434 -3964623835393037310a366534643464626161353739383639386264613861326533616164656238 -38326565616131643131386338363036363765313434316661666535333434396337323039613735 -32393137393631613333356238613265663839666237623664373431383463323833326164373264 -33383765393236303263623861376366633862303366356638336363333135623437636133653664 -64336231333531363339656530393438343265643836363736646438373964313236366437383863 -64626638363935383664633739363732366461313566393533353333623565313766326231316263 -36383434313966373461616562353862613237666464653530643431326366353230333735306436 -32623434306462633830356637626262613131386238656665653831353137356565353539623365 -38656232323266346266313235343662646137626163653439616334656335383631396438386436 -3239 +61636265383264303933623962346361346339663364393133333235613736373561353863303237 +3565323065346438656438623061396164323136666531340a313238643033383537363439626136 +65646239663263336431353266316238623035666635623265643863353936363035343135326431 +6565373532396335330a316432393238353666646235353430343237653034326430653131313561 +32383865313634623131396661326365303833383734396632616664383363383935353935636137 +64666662663437633135316634333438313263643862386566353762313161623836373232336262 +65346131653362343164353739376266386336653331316433353431373334646665646130326437 +65356237383238323665633866333235383135653039633330336339393163356233333431323064 +33633130633936643265353332356664326562386565623765313064363431366365646162313464 +61306333663335616333316362393636383036313364363537393861353935376536343761386335 +32663364356336363139323138656238313366663062663235353838363864313732373830336565 +31643132633266346235323436353736373865633166646138333830653762366432353531393732 +65643061313261613633333236653864396634633931366432666161363730306563316266653464 +62366331613064633364373464613237383434343765653436323665363434383632363039303864 +65333934306531316435383635346130303637663636353039636361353132346231373062656631 +35616530643534396138356238626134666365316630666137616134393561366138386631636239 +39636538633164383863333431366463313566393131633463623665653264663865386663616632 +36636265313338396635303764633235376463643938663233393635613333623238636264323934 +36623561653764376134353534303166363833326136313161313531386239643263326663386432 +38353965663063393131666464353235316438333365303061303135383863376136653134396330 +63343230386332323232396136343030663563646366623137383334306161366232323964633562 +39626636366630363262643533323836333664376634313564613833343533656431353035316262 +33666137653762383937366237626130333437346165336466326539366566323834366161373265 +38323432653932666561 From 0f79d5ca9b830d4bfffa5523ee4ad84f96400721 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sun, 23 Aug 2026 01:05:08 +0800 Subject: [PATCH 13/19] =?UTF-8?q?ansible:=20=E6=B7=BB=E5=8A=A0=20xray=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ansible/playbooks/xray-server.yaml | 45 +++++++++++++++ .../templates/xray-config.json.j2 | 10 ++-- ansible/vars/vault.yaml | 57 +++++++++++-------- 3 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 ansible/playbooks/xray-server.yaml rename docker/xray-config.json => ansible/templates/xray-config.json.j2 (75%) diff --git a/ansible/playbooks/xray-server.yaml b/ansible/playbooks/xray-server.yaml new file mode 100644 index 0000000..f1a1282 --- /dev/null +++ b/ansible/playbooks/xray-server.yaml @@ -0,0 +1,45 @@ +--- +- name: 配置 xray 服务 + hosts: vps_debian + become: true + gather_facts: false + vars: + xray_config_file: /usr/local/etc/xray/config.json + xray_bin: /usr/local/bin/xray + vars_files: + - ../vars/vault.yaml + + tasks: + - name: 确保有 curl 软件包 + apt: + name: + - curl + state: present + update_cache: true + + - name: 安装 xray + shell: | + bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install + notify: restart xray + + - name: 生成 xray 配置 + template: + src: ../templates/xray-config.json.j2 + dest: "{{ xray_config_file }}" + owner: root + group: root + mode: '0644' + notify: restart xray + + - name: 启动 xray 服务并添加开机启动 + systemd: + name: xray + enabled: true + state: started + daemon_reload: true + + handlers: + - name: restart xray + systemd: + name: xray + state: restarted diff --git a/docker/xray-config.json b/ansible/templates/xray-config.json.j2 similarity index 75% rename from docker/xray-config.json rename to ansible/templates/xray-config.json.j2 index 421dfac..b39c768 100644 --- a/docker/xray-config.json +++ b/ansible/templates/xray-config.json.j2 @@ -7,12 +7,12 @@ "inbounds": [ { "listen": "0.0.0.0", - "port": 443, + "port": {{ vault_xray_port }}, "protocol": "vless", "settings": { "clients": [ { - "id": "817a867d-7bcf-48d1-b30e-5c6794852e13", + "id": "{{ vault_xray_uuid }}", "flow": "xtls-rprx-vision" } ], @@ -24,9 +24,9 @@ "security": "reality", "realitySettings": { "dest": "dl.google.com:443", - "serverNames": ["www.cloudflare.com"], - "privateKey": "uJQs7FOMjafiU-7kxOUpfJut8ocj5kpr_p-zH7RTt1g", - "shortIds": ["1e21014957dfc7a9"] + "serverNames": ["dl.google.com"], + "privateKey": "{{ vault_xray_private_key }}", + "shortIds": ["{{ vault_xray_short_id }}"] } }, "sniffing": { diff --git a/ansible/vars/vault.yaml b/ansible/vars/vault.yaml index 266cf94..e81828a 100644 --- a/ansible/vars/vault.yaml +++ b/ansible/vars/vault.yaml @@ -1,25 +1,34 @@ $ANSIBLE_VAULT;1.1;AES256 -61636265383264303933623962346361346339663364393133333235613736373561353863303237 -3565323065346438656438623061396164323136666531340a313238643033383537363439626136 -65646239663263336431353266316238623035666635623265643863353936363035343135326431 -6565373532396335330a316432393238353666646235353430343237653034326430653131313561 -32383865313634623131396661326365303833383734396632616664383363383935353935636137 -64666662663437633135316634333438313263643862386566353762313161623836373232336262 -65346131653362343164353739376266386336653331316433353431373334646665646130326437 -65356237383238323665633866333235383135653039633330336339393163356233333431323064 -33633130633936643265353332356664326562386565623765313064363431366365646162313464 -61306333663335616333316362393636383036313364363537393861353935376536343761386335 -32663364356336363139323138656238313366663062663235353838363864313732373830336565 -31643132633266346235323436353736373865633166646138333830653762366432353531393732 -65643061313261613633333236653864396634633931366432666161363730306563316266653464 -62366331613064633364373464613237383434343765653436323665363434383632363039303864 -65333934306531316435383635346130303637663636353039636361353132346231373062656631 -35616530643534396138356238626134666365316630666137616134393561366138386631636239 -39636538633164383863333431366463313566393131633463623665653264663865386663616632 -36636265313338396635303764633235376463643938663233393635613333623238636264323934 -36623561653764376134353534303166363833326136313161313531386239643263326663386432 -38353965663063393131666464353235316438333365303061303135383863376136653134396330 -63343230386332323232396136343030663563646366623137383334306161366232323964633562 -39626636366630363262643533323836333664376634313564613833343533656431353035316262 -33666137653762383937366237626130333437346165336466326539366566323834366161373265 -38323432653932666561 +31623833356637343262363863626534323535626238346439333262633332633136633261306466 +6236333066363461326664306262633937323864306462370a333631643039653664643662366234 +30643231336631313930663637396537663162623938363263336333343262376561323765356630 +6332383136383336640a336536316566393461666463616265363830383331363838613839636338 +63666365333233646533303166316333393535313466393832643966306331666434333065333238 +37633735313832366131653833363762393265656439663135376265366466333838623761646535 +64633236663738653233633566633734306138393462383532306436373537343332343565356466 +62386664373631336138396134613833636232663936363963656638353133386430376631383438 +35313866343438636564373566373239656233376432363362613466356334346339616562316530 +62306361646362353631336134326136346663623061643231666433353265653736323162616166 +32313132643832306563623861393735623439376432346136623732353737356338616432316161 +64316436653531356362316366383039616465313233393663663566316532626138363936363736 +31386237653634343236326639376531653465636233636662303037643930633661623338356537 +34636639383662646234313037363230373333333731323666383232626330663561396330356361 +36346537376431333235393938636664306532373863353862663166613862363165643433626361 +37616337356538373733313130633334353436643437366534326636616539316166336137346461 +63633130623436316463623461353762313533636262653262393930666434386664326464636562 +35636233656365616332383565623230353062663236316437333830626463333366633230393432 +33386533346436623132313036646536366339646333643732633133626631396463653533363763 +37623439303931363933336432386430336662353138663231316436356535373831653232633562 +33626463303134323032643535373038303530376632393162356630613134396261633661393335 +30646133366166313533666565326335656231663864666333366136616264356535303033313832 +35323432613063356161383365653964613339346136333363363763316463396364383264343634 +65623039343064356430386662323135303134306539313138316633396635333331636137356665 +38623531613138316162353733663631396562313033393066303266396533613762643936663936 +65663762646264616439666138636364343264323961343739336330663237666661303639363835 +63636562636336613665366533333563323239633338663738363931383333356264313166393132 +30643636303333616161346166323933623432613633643965313366643565343931633338303237 +35636365333262386135623866343839313836616664663764323938636630393062383462343437 +32636664663635643934396166373462303638343437623961373362366230633466363936326162 +38303130346439323863643836666565326530363362306432623036303562636532333966386463 +31353063363839633736366133353535643064363461653030346432393461623666616666643231 +63333831653963356632316333396130653934653134623339323438653638643031 From 43603b8f50d4526fc226e41eff555ddcb84d7d6e Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 05:42:55 +0800 Subject: [PATCH 14/19] =?UTF-8?q?docker:=20=E9=87=8D=E6=96=B0=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E6=9C=8D=E5=8A=A1=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 用功能更强大的 WebDAV 代替掉 OWSS - WebDAV 和 v2raya 服务都拆成单独的配置文件 --- docker/{y480.yaml => v2raya.yaml} | 13 ----------- docker/webdav-config.yaml | 36 ++++++++++++++++++++++++++++++ docker/webdav.yaml | 36 ++++++++++++++++++++++++++++++ note/account.org.gpg | Bin 4934 -> 5009 bytes 4 files changed, 72 insertions(+), 13 deletions(-) rename docker/{y480.yaml => v2raya.yaml} (67%) create mode 100644 docker/webdav-config.yaml create mode 100644 docker/webdav.yaml diff --git a/docker/y480.yaml b/docker/v2raya.yaml similarity index 67% rename from docker/y480.yaml rename to docker/v2raya.yaml index 0d89629..6f94529 100644 --- a/docker/y480.yaml +++ b/docker/v2raya.yaml @@ -1,17 +1,4 @@ services: - owss: - image: ronggang/owss:latest - container_name: owss - restart: always - privileged: true - # host 模式和 bridge 模式二选一 - network_mode: host - # ports: - # - "8088:8088" - volumes: - - /OWSS/storage:/app/storage - - /OWSS/config:/app/config - v2raya: image: mzz2017/v2raya:latest container_name: v2raya diff --git a/docker/webdav-config.yaml b/docker/webdav-config.yaml new file mode 100644 index 0000000..a8059b3 --- /dev/null +++ b/docker/webdav-config.yaml @@ -0,0 +1,36 @@ +address: 0.0.0.0 +port: 46065 +auth: true +prefix: / +tls: false +behindProxy: true +log: + format: console + colors: true + outputs: + - /logs/webdav.log +logLevel: info + +directory: /data +permissions: R + +users: + - username: zedhugh + password: "{bcrypt}$2a$10$nP6GQJidzLyhwkkQGQH/KOAQq2KjNW5Fbb.I/XD2OD2oxCxEoXbUO" + directory: /data + permissions: CRUD + + - username: PT + password: "{bcrypt}$2a$10$cK9NWvSafxne2Fv6P6ZH7.Q/tVKk5M4pqXgsuOi2bF/zsCopFHsC2" + directory: /data/users/PT + permissions: CRUD + + - username: v2rayNG + password: "{bcrypt}$2a$10$jvjejyOea8Xqsik8a9M71.rvC/0kdFah2WuMCTKHBQJ8PxGkdFmKC" + directory: /data/users/v2rayNG + permissions: CRUD + + - username: guest + password: "guest" + directory: /data/public + permissions: R diff --git a/docker/webdav.yaml b/docker/webdav.yaml new file mode 100644 index 0000000..dee4c86 --- /dev/null +++ b/docker/webdav.yaml @@ -0,0 +1,36 @@ +x-data-volume: &data-volume + type: bind + source: /var/db/webDAV + target: /data + +x-user-dirs: &user-dirs + /data/users/PT + /data/users/v2rayNG + /data/public + +services: + WebDAV-init: + image: busybox:latest + container_name: webdav-init + restart: no + volumes: + - *data-volume + environment: + DIRS: *user-dirs + command: sh -c "mkdir -p $$DIRS" + + WebDAV: + image: hacdias/webdav:latest + container_name: webdav + restart: always + depends_on: + WebDAV-init: + condition: service_completed_successfully + command: ["-c", "/config.yaml"] + network_mode: host + volumes: + - ./webdav-config.yaml:/config.yaml:ro + - /var/log:/logs + - *data-volume + environment: + TZ: Asia/Shanghai diff --git a/note/account.org.gpg b/note/account.org.gpg index 5f234c41048d5253b73ed3b12696ce3ba8d961fc..16d9869023be3dad6c4048746e8a51b5aed52a52 100644 GIT binary patch literal 5009 zcmV;C6K?E<0Sp73f@FT-kgh2K2mqPwZP^sXS#3^_*eXAxGav__el8LQ)hPh-9sxsr zTKKBeqA{6AVn}Q3p1qBNfxkWkysh}80)nPWrSpQFT0AJ02p-fX*Ne4OXEOk&uGHu& z0t7BOq~#@j`>RN1={~4FE!G@<_Qu&L7626}ZrA0r-}I9oZ6KO`&qsfmi4k9$9h3@~ zp-+E16E~}C`F_NwxhY|WKRwAB1MMl&pqC;-v}OUXhdqafT~G_xA9a=2ZFWc853N*qPGm0oYnXP&tGr=PP{{lwr|2A!*MTng(fSzB(yI9G;%N z!VQ+~mT;<;WS@@jte5}mrVOX?Oy)5-;7bcZa&je{+X}Y4d7PKMI&vZ1q{=1LOeRha zjP4R;=c{>VSZ(?_$ z(dvEwIR!;X#%gXhOu1;h3K`^}ROMm83AADqhqg^;_yzpa>H1mW3Lt5Y!jGW4J(FW5 z<`)Cq3T^LfU0?XGlE^ZJFgR!(LpChb5W8qE&E@Khn#ZfyWLdGM14;nv6mopd(8d=& z*c5|fJa^=?D@B1^G&c6QfiJg_Uj}-pLixN;H!ErA(@?&^KW!M_?fzs;as>tTr9c9x zU2CmR`xyK)7w+*_6RAzN6;2VtSuNN&(MwP)7I00J6n0M}Fx{~Fq_D}Bn+adBF~)Kr zV*_c=TkCc<*?Rbkb{&3L^x0Lrjzm6g4qJ@R`;3^~k6-dOfBKni0=$=szW~F^%{p>*0J?97=Ok5ETn&%5fj#+*;+0|%ELwa_J-RMEL z7cn8Zl1h@hw7d_p9BM5FvGK}uQg4#Cv@JG7d_7(i+%V&xKxGdEkvQuZl;_e#`(x8j zti;WEn6YYj?1V-z8N9MsTUj|fj+%tQSxGJN<0daLhz`7d@gelu>xnCL)sMdHjH4{s zeu?C%Ry8X2!tpV~E@1B5Ra3F-#CooNTAA$Wv*`+KOY&fslAJEc8YbCe47W%k&5Xrtz}FNAF}!QJ~bWypt_ZUL{xwn6#E zidt!{S~*dsNDDYv1r^<^3obEYAc<)t&fTfNcVG>wV3rgvbmPzk}zt2{ZnLoli$6g{J6h zsN><9kH`E5@%T>c!WZz+$Nx(uA6$r{(xDW93B;b2ZcWBP+DQO2kaA@gyrsB;g+Oy0 zBg;O%i9fnpoyGIo$W_pFAbjWd{A&YhtLYpV& z3mk50I|Sy+x1FK%tXE=1U$Y(KqHR?8rwz4ZaU;IBG(F*&bKDkhL6 z5@uSqJb>kn(ncR53mTcr-D*JR=YT=YdvtGa#EI?RfxRsu#v>v?m??>DsVfRdZ}`D% z(k)2Uglxio(2{S@0Eu)K$pgUvN+_ zsA)v5)23%HMsx|I)xdy%jVKsTh_oBjN(s1|E(qo8WD)u3-^fDgbmWRM zgwLb-1aV@4{TkyQhb8JWZ*^@#`<_rE%_Hf*Njoa78eh*W$=QV+R;;4u)S?#I-z7u_ zBE)Q6SA9l#G6VeZ2X*hnJH#3r&t$UI<3L&~_nPgoly0G=b?;To%ybKiQSm7ZaO^VR zO>g1;l?YJBU*dbMxq&{S$A0TUIw943S{aC$^(`*!#aI54(P0gpCzysgR*QY&%P6+~ zXpbU+^gVIhvUqW>v05jKVCa67YA2FqJ0HWo#%cQ%xFcXXbgyk1aq3b1E=3P`Ijc(& zrGj~!A&{y9Mpe&%8y6_K*4|z+Z-%?}HIIFBZS^R8q+z;!(vhaAJ|5013ox32s`TK& zuVcsL?JqWeM&dU<1g_cI{{TX*t`Y|_Rhr`xw6O|39}OlSnj{x*FNy1zmX-3Er7n7F zzsN(u#4u<;C4mfG_VX;_e&j7P#5o$yz|^oal%!VM)j6viXej!Uz-%$@EP)RggH+b+ zzc;jIdQaC-#Dm|KCTB|+C4e1^`=2(1!B>WKFhsqsXA?q7x>!9Wq+|MdLC_(`8zjxv zvg^1fUt{%oQRV*c!IGOM+a~%#fpQB~K?;2iRo5RKDAwzW=5fH{&dv1VGi-AcSuWw_ zou!<7)`Ed&#j-yvfFw+|);N{UrrzpoToQ z$ly>kv$jj=#MbzRrMGi8sXna(BEz0Ta8{@@rlT-qQ;~lRSvRFvXBG!uU@lPkwm#TqIOEx~#vO9RZ+E9LA?9@bv;;O3NSGr!Mr^7YcMZ|kSW*kRxytjwC| z!dhef`66@2E;xivN|w;|#wW-RYR85-K|Sc#X6$EVOWy`|PL{s31q1FU!dC9iv>wmx zbuxPTrezDw+`PEXwxZWqPI8eewOe-%W3$b@bXCRPgab*I?H0f{49DrK_~sKc7++0d z0%;C@UANw}*u6c>fsqRY+e63O##2im!peTqMF~7M27HaKDSk*4)Tk4MbTRA9*vQ++ zCc>tUW6~sZ5?-2Sqe8Uia)m}+%=LIP5wB}96M@0yLKDsXxNDAM^dyg$cZe)r!7Ll0 z7Eq_3mxXKll*dHbUaLt@(i#Kxr^9(gT~i8TV^=@rIL$MsS8E$Y`d)`9MobT*fjZ^= zdiLIGS{ai0X2h9Cw6(uL1d%l`#R%8G0uP}}!B@OQB4EU_T1pjV)?39`8`%Y(W7+;Qt>ZAB(@qqO@EK&=3 zi|h8Locb3Pbsr8>P_5we?hFxf3w0uc(PM>6?&~5jA+Ty#Ab6spyMBtvE_R!3uKR|= z&D^5GOWb^JN`L(Hy=JiyWH1y9QB52dntP`Tox|_!sN1hL zDHTaMy}IEjM)z2SCTnBfH@n#OXN<;sZ&PrF+`bPVX!0PH=G*%z!B)kbb1a1vy|A$w z){h^E-DYRWqe+){&nM`suqN=WSln=x@r@rrSsYni%R)>mVtI1%-4mT6S`!v-9=a-_ z5-RV>g5r9Y*`ol$s>bZo;$t`#b9JWSsAH;ur~R@0ne^f!ddxNW2pfLLoJVayg{f0l z35mhJb;;#Cc@oBL6H6Py|3@F%$hVxq@S$mZlOYV-etm^4LQ2LjOe7khk$q`Y)B3zI zuOK8=zU;8jQphp{hoe-BOO;A4BhlYwD3b;Oa!}yXT2LzU+GqIK@vt8Iiy>|8ZK@k8 zE|)kTZ-t+NPCr}i5FKGXB?G+vfhZ)OZDtk}+xp-JJ*WUgg2;N6sH0>luZ}~V!TxD! zZ|Se%;GKrj36BkiOO#L1$#a02P$f?8@pfpx{fT1tHndVw}G(?eQlnM^xas;Z75?7)q~>hjd6UF86@ z4f-Wo+DCU9g=XPJ-oQ>0WMp-Y6b&)mHkw9A;_d+`M&oc^NY<5Eu2V7pu$HXrHC>{| zCk8s{2`%dtc=Qei8vminy#K8E&g5(QBCld+2MgGve+0}U3Ci#0-CoEZmkH_A+(+E@ zb|cPx#wZ7jdy!jwbm;9FhgCp9F>6eFh(+GjwHMH^v1qZoK}br2O{r}r5i&Zzf?#&U zKDcCN8)#kwlLA=<8COuqm=2;&?fPCcf^RbGe#=gGen`CQ3#%xX$Z-XQpuut%#Gp1r z?=-DeX78r_%$|)l@+sWb(!r$;5pcx& z-Sxs$%2okpf8)p2mIVn@NUhx_AI`lkX+p1<>k38qI^4JP_e8cH|1#4GiZiLjf4 z7Sz457PjF8*{7POcg>#glwRfN2-#R5n|)5m&XHdK8@rqks@S2ZT_72qBZ@lOsYU-{ z>|CGB)0(Mmpy#lc&4kn|R$Kxt!~^`Km$Tk7E&S6y4%D$(@37XUL?ir$m!glEt(@2T z^2~a%<^$9EwL@m<;82$G)qM7O?J@zpOkwac2aDk4%N=;-jC(_S+s?a!Dnf!UG|Qe+ zZo&v7Pr2b5tzE(>QP!CTnJJ~>zJ;^}3Z>>?v_P=g!nuT!4hhFaz?OO9CLfBB%uA+; zvW-u7J*1mIvLbJgB;}*=>IKaF^N*6x-1Od zU2qM;*;sahkYnk1YDXf(s%b;J^ITaw1xnZ~y;VB3*`*fEd72=xTVRV$OzMGde;9=e1s^aIhSLHd&-;(z@X*Y++auSdoJXhYF)7)7zmq z0dB<_xbbX`?Elc^a*C`I3?M1ZfsR>LY%G(uMqr>{X`bt6MsUB;bW9K6*LN59fkmwf z7$zUcBDT>tq=KcdT86)wwLHuUuMW7+pyDGT0z-3Opmw__7*P-Lo5}uSLkxH_9)odlx`<|S1wx_o;a_5XnggJQT+CDIOa|o0 z17v7?0#zF(L1+e5^uoFmA3y%0m{CEJN=TUCp=S6I4KHtWu#viTInK4@kQz+*QmwNwf=<%f1$wQYe3eb- bj%Xr6r6(^@QnXO4k8qt|J%djI^5{Q5KxV!` literal 4934 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 EdXVmxOaK4? From 1e4024ac023dbd7145a6eaae35661a13be07d309 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 05:44:25 +0800 Subject: [PATCH 15/19] =?UTF-8?q?account.org.gpg:=20=E6=B7=BB=E5=8A=A0=20V?= =?UTF-8?q?ultr=202FA=20=E6=81=A2=E5=A4=8D=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- note/account.org.gpg | Bin 5009 -> 5132 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/note/account.org.gpg b/note/account.org.gpg index 16d9869023be3dad6c4048746e8a51b5aed52a52..82df693e6946dbb6346386b3edfb41d437fb00ee 100644 GIT binary patch literal 5132 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 bj%Xr6r6(^@QnXO4k8qt|J%djI^5{Q5KxV!` From a8399284d6348b334cdcbdba76969a6562719f8b Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 06:08:11 +0800 Subject: [PATCH 16/19] =?UTF-8?q?gentoo=5Fportage:=20=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E6=98=BE=E5=BC=8F=E9=85=8D=E7=BD=AE=20MAKEOPTS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/make.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/gentoo_portage/make.conf b/gentoo_portage/make.conf index 26e82a6..b95e55e 100644 --- a/gentoo_portage/make.conf +++ b/gentoo_portage/make.conf @@ -34,7 +34,6 @@ VIDEO_CARDS="amdgpu dummy fbdev intel nouveau nvidia radeon radeonsi vesa" GENTOO_MIRRORS=" http://distfiles.gentoo.org/ " -MAKEOPTS="-j9 ${MAKEOPTS}" DESKTOP_USE="X alsa apng dbus fbcon ffmpeg flac fuse gif gtk gtk2 gtk3 http2 icu jack jpeg mp3 mp4 mpeg mtp nvidia ogg opengl pdf png pipewire pulseaudio svg tiff unicode vaapi vdpau webp xinerama xv xvmc" #USE="${USE} ${DESKTOP_USE} consolekit cups policykit pulseaudio truetype udev xft xcb xkb -bluetooth -gpm -libva -modemmanager" From 28dec3e4afb1df063d7cde49503b9013a182e738 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 06:09:26 +0800 Subject: [PATCH 17/19] =?UTF-8?q?gentoo=5Fportage:=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=BC=80=E5=90=AF=20vulkan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/make.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gentoo_portage/make.conf b/gentoo_portage/make.conf index b95e55e..175b84a 100644 --- a/gentoo_portage/make.conf +++ b/gentoo_portage/make.conf @@ -35,6 +35,6 @@ GENTOO_MIRRORS=" http://distfiles.gentoo.org/ " -DESKTOP_USE="X alsa apng dbus fbcon ffmpeg flac fuse gif gtk gtk2 gtk3 http2 icu jack jpeg mp3 mp4 mpeg mtp nvidia ogg opengl pdf png pipewire pulseaudio svg tiff unicode vaapi vdpau webp xinerama xv xvmc" +DESKTOP_USE="X alsa apng dbus fbcon ffmpeg flac fuse gif gtk gtk2 gtk3 http2 icu jack jpeg mp3 mp4 mpeg mtp nvidia ogg opengl pdf png pipewire pulseaudio svg tiff unicode vaapi vdpau vulkan webp xinerama xv xvmc" #USE="${USE} ${DESKTOP_USE} consolekit cups policykit pulseaudio truetype udev xft xcb xkb -bluetooth -gpm -libva -modemmanager" USE="${USE} ${DESKTOP_USE} bluetooth cups elogind policykit truetype udev xft xcb xkb -gpm -libva -modemmanager" From 3a1b5e0f350b2e493d2b2b685f6dd02ae1b70ea7 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 06:10:24 +0800 Subject: [PATCH 18/19] =?UTF-8?q?gentoo=5Fportage:=20=E5=85=B3=E6=8E=89=20?= =?UTF-8?q?distcc=20=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/make.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gentoo_portage/make.conf b/gentoo_portage/make.conf index 175b84a..c1b6bef 100644 --- a/gentoo_portage/make.conf +++ b/gentoo_portage/make.conf @@ -21,7 +21,7 @@ BINPKG_FORMAT="gpkg" EMERGE_DEFAULT_OPTS="--buildpkg --buildpkg-exclude \"virtual/* sys-kernel/*-sources */*-bin\" ${EMERGE_DEFAULT_OPTS}" # ccache and distcc -FEATURES="distcc ccache ${FEATURES}" +FEATURES="ccache ${FEATURES}" CCACHE_DIR="/var/cache/ccache" CCACHE_UMASK="0002" From c9beed8f0dee8f308cd71cf47a919d747dcce00e Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sat, 29 Aug 2026 06:14:34 +0800 Subject: [PATCH 19/19] =?UTF-8?q?gentoo=5Fportage:=20distcc=20=E5=92=8C=20?= =?UTF-8?q?ccache=20=E7=89=B9=E6=80=A7=E5=88=86=E5=BC=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gentoo_portage/make.conf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gentoo_portage/make.conf b/gentoo_portage/make.conf index c1b6bef..88cea96 100644 --- a/gentoo_portage/make.conf +++ b/gentoo_portage/make.conf @@ -20,7 +20,11 @@ QUICKPKG_DEFAULT_OPTS="--include-config y" BINPKG_FORMAT="gpkg" EMERGE_DEFAULT_OPTS="--buildpkg --buildpkg-exclude \"virtual/* sys-kernel/*-sources */*-bin\" ${EMERGE_DEFAULT_OPTS}" -# ccache and distcc +# distcc +# FEATURES="distcc ${FEATURES}" +DISTCC_DIR="/var/tmp/distcc" + +# ccache FEATURES="ccache ${FEATURES}" CCACHE_DIR="/var/cache/ccache" CCACHE_UMASK="0002"