mirror of
https://gitcode.com/JianFeeeee/webui4frpc.git
synced 2026-10-31 06:17:20 +00:00
所有交付形态统一成「只传 -config」,凭据留在配置文件 / secrets 文件里。
- systemd 单元:ExecStart 改为 `-config /etc/webui4frpc/config.json`,
EnvironmentFile 加 `-` 前缀变成可选;新增 ReadOnlyPaths=-/etc/webui4frpc/secret。
- 新增 packaging/common/config.json 示例:口令默认用
file:/etc/webui4frpc/secret/password 引用,内嵌以 "_" 开头的说明键。
- webui4frpc.env 瘦身为可选环境变量(${VAR} 取值来源),不再承载明文口令。
- deb/rpm:安装 config.json 与 0750 的 secret 目录,config.json 进 conffiles,
安装后提示改成「设置 password 文件」。
- release.sh 的分发单元模板同步改 -config;tar.gz 附 config.json.example。
- macOS pkg:写 config.json + secret/password,launch 包装脚本只传 -config。
- Windows NSIS:安装时把口令写进 secret-password.txt(icacls 限制为
SYSTEM/Administrators),生成 data/config.json 用 file: 引用,启动脚本只传
-config;顺带按 JSON 规则转义 addr/user。makensis 实测可编译通过。
197 lines
6.4 KiB
NSIS
197 lines
6.4 KiB
NSIS
; webui4frpc Windows 安装程序 (NSIS)
|
||
;
|
||
; 由 scripts/build_installers.sh 调用,需在命令行传入:
|
||
; -DVERSION=0.1.0 -DARCH=amd64 -DBINSRC=<webui4frpc.exe 路径> -DOUTFILE=<输出 exe>
|
||
|
||
!include "MUI2.nsh"
|
||
!include "LogicLib.nsh"
|
||
!include "StrFunc.nsh"
|
||
|
||
; Used to JSON-escape the free-text fields written into config.json below.
|
||
${Using:StrFunc} StrRep
|
||
|
||
!ifndef VERSION
|
||
!define VERSION "0.0.0"
|
||
!endif
|
||
!ifndef ARCH
|
||
!define ARCH "amd64"
|
||
!endif
|
||
|
||
Name "webui4frpc ${VERSION}"
|
||
OutFile "${OUTFILE}"
|
||
Unicode true
|
||
RequestExecutionLevel admin
|
||
InstallDir "$PROGRAMFILES64\webui4frpc"
|
||
InstallDirRegKey HKLM "Software\webui4frpc" "InstallDir"
|
||
|
||
VIProductVersion "${VERSION}.0"
|
||
VIAddVersionKey "ProductName" "webui4frpc"
|
||
VIAddVersionKey "FileDescription" "Visual frpc controller with token-ring cluster"
|
||
VIAddVersionKey "FileVersion" "${VERSION}"
|
||
VIAddVersionKey "ProductVersion" "${VERSION}"
|
||
VIAddVersionKey "LegalCopyright" "JianFeeeee"
|
||
|
||
!define MUI_ABORTWARNING
|
||
!insertmacro MUI_PAGE_LICENSE "LICENSE.txt"
|
||
!insertmacro MUI_PAGE_DIRECTORY
|
||
Page custom ConfigPage ConfigPageLeave
|
||
!insertmacro MUI_PAGE_INSTFILES
|
||
!insertmacro MUI_PAGE_FINISH
|
||
!insertmacro MUI_UNPAGE_CONFIRM
|
||
!insertmacro MUI_UNPAGE_INSTFILES
|
||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
||
!insertmacro MUI_LANGUAGE "English"
|
||
|
||
Var Dialog
|
||
Var LblAddr
|
||
Var TxtAddr
|
||
Var LblUser
|
||
Var TxtUser
|
||
Var LblPass
|
||
Var TxtPass
|
||
Var CfgAddr
|
||
Var CfgUser
|
||
Var CfgPass
|
||
Var EscAddr
|
||
Var EscUser
|
||
Var EscDir
|
||
|
||
Function .onInit
|
||
StrCpy $CfgAddr "0.0.0.0:7500"
|
||
StrCpy $CfgUser "admin"
|
||
StrCpy $CfgPass "admin"
|
||
FunctionEnd
|
||
|
||
Function ConfigPage
|
||
!insertmacro MUI_HEADER_TEXT "服务配置" "设置监听地址与登录凭据"
|
||
nsDialogs::Create 1018
|
||
Pop $Dialog
|
||
${If} $Dialog == error
|
||
Abort
|
||
${EndIf}
|
||
|
||
${NSD_CreateLabel} 0 0 100% 12u "监听地址 (host:port):"
|
||
Pop $LblAddr
|
||
${NSD_CreateText} 0 14u 100% 12u "$CfgAddr"
|
||
Pop $TxtAddr
|
||
|
||
${NSD_CreateLabel} 0 34u 100% 12u "管理员用户名:"
|
||
Pop $LblUser
|
||
${NSD_CreateText} 0 48u 100% 12u "$CfgUser"
|
||
Pop $TxtUser
|
||
|
||
${NSD_CreateLabel} 0 68u 100% 12u "管理员密码(请勿沿用默认值):"
|
||
Pop $LblPass
|
||
${NSD_CreatePassword} 0 82u 100% 12u "$CfgPass"
|
||
Pop $TxtPass
|
||
|
||
nsDialogs::Show
|
||
FunctionEnd
|
||
|
||
Function ConfigPageLeave
|
||
${NSD_GetText} $TxtAddr $CfgAddr
|
||
${NSD_GetText} $TxtUser $CfgUser
|
||
${NSD_GetText} $TxtPass $CfgPass
|
||
FunctionEnd
|
||
|
||
Section "webui4frpc" SecMain
|
||
SetOutPath "$INSTDIR"
|
||
File "/oname=webui4frpc.exe" "${BINSRC}"
|
||
File "README.md"
|
||
File "LICENSE.txt"
|
||
|
||
CreateDirectory "$INSTDIR\data"
|
||
|
||
; ---- 启动配置 ----
|
||
; 口令写进独立文件、由 config.json 用 "file:" 引用:既不出现在启动脚本的
|
||
; 命令行上(任务管理器 / wmic 可见),也不需要做 JSON 转义。
|
||
${StrRep} $EscDir $INSTDIR "\" "\\"
|
||
${StrRep} $EscAddr $CfgAddr "\" "\\"
|
||
${StrRep} $EscAddr $EscAddr '$\"' '\"'
|
||
${StrRep} $EscUser $CfgUser "\" "\\"
|
||
${StrRep} $EscUser $EscUser '$\"' '\"'
|
||
|
||
FileOpen $1 "$INSTDIR\secret-password.txt" w
|
||
FileWrite $1 "$CfgPass$\r$\n"
|
||
FileClose $1
|
||
; 口令文件仅 SYSTEM / Administrators 可读(Program Files 默认 Users 可读)
|
||
nsExec::ExecToLog 'icacls "$INSTDIR\secret-password.txt" /inheritance:r /grant:r *S-1-5-18:F *S-1-5-32-544:F'
|
||
|
||
FileOpen $2 "$INSTDIR\data\config.json" w
|
||
FileWrite $2 "{$\r$\n"
|
||
FileWrite $2 ' "addr": "$EscAddr",$\r$\n'
|
||
FileWrite $2 ' "user": "$EscUser",$\r$\n'
|
||
FileWrite $2 ' "password": "file:$EscDir\\secret-password.txt",$\r$\n'
|
||
FileWrite $2 ' "workdir": "data"$\r$\n'
|
||
FileWrite $2 "}$\r$\n"
|
||
FileClose $2
|
||
|
||
; 启动脚本:只传 -config,不传任何凭据
|
||
FileOpen $0 "$INSTDIR\start-webui4frpc.cmd" w
|
||
FileWrite $0 "@echo off$\r$\n"
|
||
FileWrite $0 "rem webui4frpc 启动脚本(由安装程序生成)$\r$\n"
|
||
FileWrite $0 "rem 凭据在 data\config.json(口令来自 secret-password.txt),不经过命令行。$\r$\n"
|
||
FileWrite $0 "cd /d %~dp0$\r$\n"
|
||
FileWrite $0 'webui4frpc.exe -config "%~dp0data\config.json"$\r$\n'
|
||
FileClose $0
|
||
|
||
WriteRegStr HKLM "Software\webui4frpc" "InstallDir" "$INSTDIR"
|
||
WriteRegStr HKLM "Software\webui4frpc" "Version" "${VERSION}"
|
||
|
||
; 添加/删除程序
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"DisplayName" "webui4frpc ${VERSION}"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"UninstallString" "$\"$INSTDIR\uninstall.exe$\""
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"DisplayVersion" "${VERSION}"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"Publisher" "JianFeeeee"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"URLInfoAbout" "https://gitcode.com/JianFeeeee/webui4frpc"
|
||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"NoModify" 1
|
||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc" \
|
||
"NoRepair" 1
|
||
|
||
WriteUninstaller "$INSTDIR\uninstall.exe"
|
||
|
||
; 开始菜单
|
||
CreateDirectory "$SMPROGRAMS\webui4frpc"
|
||
CreateShortcut "$SMPROGRAMS\webui4frpc\webui4frpc.lnk" \
|
||
"$INSTDIR\start-webui4frpc.cmd" "" "$INSTDIR\webui4frpc.exe" 0
|
||
CreateShortcut "$SMPROGRAMS\webui4frpc\打开管理界面.lnk" \
|
||
"http://127.0.0.1:7500"
|
||
CreateShortcut "$SMPROGRAMS\webui4frpc\卸载 webui4frpc.lnk" "$INSTDIR\uninstall.exe"
|
||
|
||
; 防火墙放行(失败不阻断安装)
|
||
nsExec::ExecToLog 'netsh advfirewall firewall add rule name="webui4frpc" \
|
||
dir=in action=allow program="$INSTDIR\webui4frpc.exe" enable=yes profile=any'
|
||
SectionEnd
|
||
|
||
Section "Uninstall"
|
||
nsExec::ExecToLog 'netsh advfirewall firewall delete rule name="webui4frpc"'
|
||
|
||
Delete "$INSTDIR\webui4frpc.exe"
|
||
Delete "$INSTDIR\start-webui4frpc.cmd"
|
||
Delete "$INSTDIR\secret-password.txt"
|
||
Delete "$INSTDIR\data\config.json"
|
||
Delete "$INSTDIR\README.md"
|
||
Delete "$INSTDIR\LICENSE.txt"
|
||
Delete "$INSTDIR\uninstall.exe"
|
||
|
||
; data 目录保留(含数据库与日志),由用户手动删除
|
||
MessageBox MB_YESNO|MB_ICONQUESTION \
|
||
"是否同时删除数据目录 $INSTDIR\data(数据库、转发配置、日志)?" \
|
||
IDNO KeepData
|
||
RMDir /r "$INSTDIR\data"
|
||
KeepData:
|
||
RMDir "$INSTDIR"
|
||
|
||
Delete "$SMPROGRAMS\webui4frpc\*.lnk"
|
||
RMDir "$SMPROGRAMS\webui4frpc"
|
||
|
||
DeleteRegKey HKLM "Software\webui4frpc"
|
||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\webui4frpc"
|
||
SectionEnd
|