core: 支持 frpc.ini

This commit is contained in:
bin456789
2026-03-08 23:50:50 +08:00
parent 28119bb0c5
commit 2c6b28108a
6 changed files with 75 additions and 56 deletions

View File

@ -181,7 +181,7 @@ bash reinstall.sh anolis 7|8|23
- `--ssh-key KEY` Set up SSH login public key, [formatted as follows](#--ssh-key). When using public key, password is empty.
- `--ssh-port PORT` Change the SSH port (for log observation during installation and for the new system)
- `--web-port PORT` Change the Web port (for log observation during installation only)
- `--frpc-toml PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL
- `--frpc-config PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL of the configuration file.
- `--hold 1` Reboot only into install environment, without running installer, only for SSH connect to test network connection.
- `--hold 2` Prevent reboot after installation completes, allowing SSH login to modify system content; the system is mounted at `/target` for Debian/Kali and `/os` for other distros.
@ -247,7 +247,7 @@ bash reinstall.sh dd --img "https://example.com/xxx.xz"
- `--rdp-port PORT` Change RDP port (DD Windows only)
- `--ssh-port PORT` Change SSH port (for log observation during installation)
- `--web-port PORT` Change Web port (for log observation during installation)
- `--frpc-toml PATH` Add frpc for intranet tunneling (DD Windows only). Parameter can be local filepath or HTTP URL
- `--frpc-config PATH` Add frpc for intranet tunneling (DD Windows only). Parameter can be local filepath or HTTP URL of the configuration file.
- `--cloud-data PATH_OR_URL` Inject cloud-init NoCloud configuration into the DD'd Linux image (DD Linux only)
- `--hold 1` Reboot only into install environment, without running installer, only for SSH connect to test network connection.
- `--hold 2` Prevent reboot after the DD process finishes. For SSH login to modify system content. The Windows system will be mounted at `/os`, but Linux systems will **NOT** be automatically mounted.
@ -298,7 +298,7 @@ bash reinstall.sh alpine --hold 1
- `--password PASSWORD` Set password
- `--ssh-port PORT` Change SSH port
- `--ssh-key KEY` Set up SSH login public key, [formatted as follows](#--ssh-key). When using public key, password is empty.
- `--frpc-toml PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL
- `--frpc-config PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL of the configuration file.
### Feature 4: Reboot to <img width="16" height="16" src="https://netboot.xyz/img/favicon.ico" /> netboot.xyz
@ -453,7 +453,7 @@ bash reinstall.sh windows \
- `--add-driver INF_OR_DIR` Add additional driver, specifying .inf path, or the folder contains .inf file.
- The driver must be downloaded to current system first.
- This parameter can be set multiple times to add different driver.
- `--frpc-toml PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL
- `--frpc-config PATH` Add frpc for intranet tunneling. Parameter can be local filepath or HTTP URL of the configuration file.
- `--hold 1` Reboot only into install environment, without running installer, only for SSH connect to test network connection.
- `--hold 2` Allow SSH connections for modifying `boot.wim`, `install.wim` or other contents before rebooting into the official Windows installation program, with the disk mounted at `/os`.

View File

@ -181,7 +181,7 @@ bash reinstall.sh anolis 7|8|23
- `--ssh-key KEY` 设置 SSH 登录公钥,[格式如下](#--ssh-key)。当使用公钥时,密码为空
- `--ssh-port PORT` 修改 SSH 端口(安装期间观察日志用,也作用于新系统)
- `--web-port PORT` 修改 Web 端口(安装期间观察日志用)
- `--frpc-toml PATH` 添加 frpc 内网穿透,参数填本地路径或 HTTP 链接
- `--frpc-config PATH` 添加 frpc 内网穿透,参数填配置文件的本地路径或 HTTP 链接
- `--hold 1` 仅重启到安装环境,不运行安装,用于 SSH 登录验证网络连通性
- `--hold 2` 安装结束后不重启,用于 SSH 登录修改系统内容Debian/Kali 会挂载在 `/target`,其它系统会挂载在 `/os`
@ -247,7 +247,7 @@ bash reinstall.sh dd --img "https://example.com/xxx.xz"
- `--rdp-port PORT` 修改 RDP 端口 (仅限 DD Windows)
- `--ssh-port PORT` 修改 SSH 端口(安装期间观察日志用)
- `--web-port PORT` 修改 Web 端口(安装期间观察日志用)
- `--frpc-toml PATH` 添加 frpc 内网穿透(仅限 DD Windows参数填本地路径或 HTTP 链接
- `--frpc-config PATH` 添加 frpc 内网穿透(仅限 DD Windows参数填配置文件的本地路径或 HTTP 链接
- `--cloud-data PATH_OR_URL` 为 DD Linux 镜像注入 cloud-init NoCloud 配置(仅限 DD Linux
- `--hold 1` 仅重启到安装环境,不运行安装,用于 SSH 登录验证网络连通性
- `--hold 2` DD 结束后不重启,用于 SSH 登录修改系统内容Windows 系统会挂载在 `/os`Linux 系统**不会**自动挂载
@ -298,7 +298,7 @@ bash reinstall.sh alpine --hold 1
- `--password PASSWORD` 设置密码
- `--ssh-port PORT` 修改 SSH 端口
- `--ssh-key KEY` 设置 SSH 登录公钥,[格式如下](#--ssh-key)。当使用公钥时,密码为空
- `--frpc-toml PATH` 添加 frpc 内网穿透,参数填本地路径或 HTTP 链接
- `--frpc-config PATH` 添加 frpc 内网穿透,参数填配置文件的本地路径或 HTTP 链接
### 功能 4: 重启到 <img width="16" height="16" src="https://netboot.xyz/img/favicon.ico" /> netboot.xyz
@ -453,7 +453,7 @@ bash reinstall.sh windows \
- `--add-driver INF_OR_DIR` 添加额外驱动,填写 .inf 路径,或者 .inf 所在的文件夹
- 需先下载驱动到当前系统
- 可多次设置该参数以添加不同的驱动
- `--frpc-toml PATH` 添加 frpc 内网穿透,参数填本地路径或 HTTP 链接
- `--frpc-config PATH` 添加 frpc 内网穿透,参数填配置文件的本地路径或 HTTP 链接
- `--hold 1` 仅重启到安装环境,不运行安装,用于 SSH 登录验证网络连通性
- `--hold 2` 用于在进入 Windows 官方安装程序之前SSH 登录修改 `boot.wim``install.wim` 或者其它内容,硬盘挂载在 `/os`

View File

@ -206,7 +206,7 @@ d-i preseed/early_command string true; \
ssh-keygen -A; \
run_as_service_with_screen /usr/sbin/sshd -D; \
if [ -s /configs/frpc.toml ]; then \
if ls /configs/frpc.* >/dev/null 2>&1; then \
url=$(sh /get-frpc-url.sh linux); \
mkdir -p /usr/local/bin; \
mkdir -p /usr/local/etc/frpc; \
@ -217,8 +217,8 @@ d-i preseed/early_command string true; \
sleep 5; \
done; \
chmod a+x /usr/local/bin/frpc; \
cp /configs/frpc.toml /usr/local/etc/frpc/; \
run_as_service_with_screen /usr/local/bin/frpc -c /usr/local/etc/frpc/frpc.toml; \
cp /configs/frpc.* /usr/local/etc/frpc/; \
run_as_service_with_screen /usr/local/bin/frpc -c /usr/local/etc/frpc/frpc.*; \
fi; \
if [ -d /cdrom/simple-cdd ]; then \
@ -296,11 +296,11 @@ d-i preseed/late_command string true; \
echo "Port $ssh_port" >>/target/etc/ssh/sshd_config; \
fi; \
if [ -s /configs/frpc.toml ]; then \
if ls /configs/frpc.* >/dev/null 2>&1; then \
mkdir -p /target/usr/local/bin; \
mkdir -p /target/usr/local/etc/frpc; \
cp /usr/local/bin/frpc /target/usr/local/bin/; \
cp /usr/local/etc/frpc/frpc.toml /target/usr/local/etc/frpc/; \
cp /usr/local/etc/frpc/frpc.* /target/usr/local/etc/frpc/; \
chmod a+x /target/usr/local/bin/frpc; \
cp /frpc.service /target/etc/systemd/system/; \
in-target systemctl enable frpc; \

View File

@ -10,8 +10,8 @@ Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frpc -c /usr/local/etc/frpc/frpc.toml
ExecReload=/usr/local/bin/frpc reload -c /usr/local/etc/frpc/frpc.toml
ExecStart=/usr/local/bin/frpc -c /usr/local/etc/frpc/frpc.conf
ExecReload=/usr/local/bin/frpc reload -c /usr/local/etc/frpc/frpc.conf
[Install]
WantedBy=multi-user.target

View File

@ -83,16 +83,16 @@ Usage: $reinstall_____ anolis 7|8|23
netboot.xyz
Options: For Linux/Windows:
[--password PASSWORD]
[--ssh-key KEY]
[--ssh-port PORT]
[--web-port PORT]
[--frpc-toml PATH]
[--password PASSWORD]
[--ssh-key KEY]
[--ssh-port PORT]
[--web-port PORT]
[--frpc-config PATH]
For Windows Only:
[--allow-ping]
[--rdp-port PORT]
[--add-driver INF_OR_DIR]
[--rdp-port PORT]
[--add-driver INF_OR_DIR]
Manual: https://github.com/bin456789/reinstall
@ -3779,7 +3779,7 @@ This script is outdated, please download reinstall.sh again.
save_password $initrd_dir/configs
fi
if [ -n "$frpc_config" ]; then
cat "$frpc_config" >$initrd_dir/configs/frpc.toml
cat "$frpc_config" >$initrd_dir/configs/frpc.conf
fi
# 收集 cloud-data 打包进 initrd
@ -3974,7 +3974,7 @@ for o in ci installer debug minimal allow-ping force-cn help \
web-port: http-port: \
allow-ping: \
commit: \
frpc-conf: frpc-config: frpc-toml: \
frpc-conf: frpc-config: \
force-boot-mode: \
force-old-windows-setup:; do
[ -n "$long_opts" ] && long_opts+=,
@ -3986,9 +3986,7 @@ if ! opts=$(getopt -n $0 -o "h,x" --long "$long_opts" -- "$@"); then
exit
fi
# /tmp 挂载在内存的话,可能不够空间
# 处理 --frpc--toml 时会下载文件,因此在处理参数前就创建临时目录
tmp=/reinstall-tmp
# 处理 --frpc-config 时会下载文件,因此在处理参数前就创建临时目录
mkdir_clear "$tmp"
eval set -- "$opts"
@ -4036,13 +4034,14 @@ while true; do
hold=$2
shift 2
;;
--frpc-conf | --frpc-config | --frpc-toml)
--frpc-conf | --frpc-config)
[ -n "$2" ] || error_and_exit "Need value for $1"
case "$(to_lower <<<"$2")" in
http://* | https://*)
frpc_config_url=$2
frpc_config=$tmp/frpc_config
frpc_config=$tmp/frpc.conf
# 用 file 识别文件类型?
if ! curl -L "$frpc_config_url" -o "$frpc_config"; then
error_and_exit "Can't get frpc config from $frpc_config_url"
fi

View File

@ -1539,12 +1539,12 @@ install_alpine() {
chroot /os rc-update add fix-eth-name boot
# 安装 frpc
if [ -s /configs/frpc.toml ]; then
if ls /configs/frpc.* >/dev/null 2>&1; then
chroot /os apk add frp
# chroot rc-update add 默认添加到 sysinit
# 但不加 chroot 默认添加到 default
chroot /os rc-update add frpc boot
cp /configs/frpc.toml /os/etc/frp/frpc.toml
cp -f /configs/frpc.* /os/etc/frp/
fi
# setup-disk 会自动选择固件,但不包括微码?
@ -1770,19 +1770,40 @@ $(del_comment_lines </configs/ssh_keys | del_empty_lines | quote_line | add_spac
nix_ssh_ports="services.openssh.ports = [ $ssh_port ];"
fi
# 虽然是原始 frpc.toml (string) 转成 toml 类型,再转成最终使用的 frpc.toml (string)
# 但是可以避免原始 frpc.toml 有错误导致失联
if [ -s /configs/frpc.toml ]; then
if ls /configs/frpc.* >/dev/null 2>&1; then
nix_frpc=$(
cat <<EOF
if false; then
# 原始 frpc.toml 转 toml 对象 ,再转成最终使用的 frpc.toml
# 可以避免原始 frpc.toml 有错误导致失联
# 但是 frpc 配置还支持 ini json yaml
# 因此不使用这个方法
cat <<EOF
services.frp = {
enable = true;
role = "client";
settings = builtins.fromTOML ''
$(del_comment_lines </configs/frpc.toml | add_space 4)
$(cat /configs/frpc.* | add_space 4)
'';
};
EOF
else
# 直接使用原始文件
(
umask 077
cp /configs/frpc.* /os/etc/nixos/
)
ext=$(basename /configs/frpc.* | awk -F. '{print $NF}')
cat <<EOF
services.frp = {
enable = true;
role = "client";
};
systemd.services.frp.serviceConfig = {
LoadCredential = "frpc.$ext:/etc/nixos/frpc.$ext";
ExecStart = lib.mkForce "\${pkgs.frp}/bin/frpc -c \\\${CREDENTIALS_DIRECTORY}/frpc.$ext";
};
EOF
fi
)
fi
@ -1915,7 +1936,7 @@ get_frpc_url() {
add_frpc_systemd_service_if_need() {
local os_dir=$1
if [ -s /configs/frpc.toml ]; then
if ls /configs/frpc.* >/dev/null 2>&1; then
mkdir -p "$os_dir/usr/local/bin"
mkdir -p "$os_dir/usr/local/etc/frpc"
@ -1931,7 +1952,7 @@ add_frpc_systemd_service_if_need() {
chmod a+x "$os_dir/usr/local/bin/frpc"
# frpc conf
cp /configs/frpc.toml "$os_dir/usr/local/etc/frpc/frpc.toml"
cp -f /configs/frpc.* "$os_dir/usr/local/etc/frpc/"
# 添加服务
add_systemd_service "$os_dir" frpc
@ -3092,24 +3113,23 @@ modify_windows() {
done
# 5 frp
if [ -s /configs/frpc.toml ]; then
# 好像 win7 无法运行 frpc暂时不管
windows_arch=$(get_windows_arch_from_windows_drive "$os_dir" | to_lower)
if [ "$windows_arch" = amd64 ] || [ "$windows_arch" = arm64 ]; then
mkdir -p "$os_dir/frpc/"
url=$(get_frpc_url windows "$nt_ver")
download "$url" $os_dir/frpc/frpc.zip
# -j 去除文件夹
# -C 筛选文件时不区分大小写,但 busybox zip 不支持
unzip -o -j "$os_dir/frpc/frpc.zip" '*/frpc.exe' -d "$os_dir/frpc/"
rm -f "$os_dir/frpc/frpc.zip"
cp -f /configs/frpc.toml "$os_dir/frpc/frpc.toml"
download "$confhome/windows-frpc.xml" "$os_dir/frpc/frpc.xml"
download "$confhome/windows-frpc.bat" "$os_dir/frpc/frpc.bat"
bats="$bats frpc\frpc.bat"
if ls /configs/frpc.* >/dev/null 2>&1; then
if [ "$(get_windows_arch_from_windows_drive "$os_dir" | to_lower)" = x86 ]; then
os_bit=32
else
warn "$windows_arch Not Support frpc"
os_bit=64
fi
mkdir -p "$os_dir/frpc/"
url=$(get_frpc_url windows "$nt_ver" "$os_bit")
download "$url" $os_dir/frpc/frpc.zip
# -j 去除文件夹
# -C 筛选文件时不区分大小写,但 busybox zip 不支持
unzip -o -j "$os_dir/frpc/frpc.zip" '*/frpc.exe' -d "$os_dir/frpc/"
rm -f "$os_dir/frpc/frpc.zip"
cp -f /configs/frpc.* "$os_dir/frpc/"
download "$confhome/windows-frpc.xml" "$os_dir/frpc/frpc.xml"
download "$confhome/windows-frpc.bat" "$os_dir/frpc/frpc.bat"
bats="$bats frpc\frpc.bat"
fi
if $use_gpo; then
@ -7565,12 +7585,12 @@ fi
# 设置 frpc
# 并防止重复运行
if [ -s /configs/frpc.toml ] && ! pidof frpc >/dev/null; then
if ls /configs/frpc.* >/dev/null 2>&1 && ! pidof frpc >/dev/null; then
info 'run frpc'
add_community_repo
apk add frp
while true; do
frpc -c /configs/frpc.toml || true
frpc -c /configs/frpc.* || true
sleep 5
done &
fi