3.3 KiB
3.3 KiB
软链接策略
使用符号链接(Symbolic Link)实现软件版本管理和无缝切换的最佳实践。
Overview
软链接策略是一种软件版本管理技术,通过创建指向不同版本目录的符号链接,实现:
- 简化启动命令
- 实现无缝版本升级
- 避免配置文件中的硬编码路径
Core Concept
/opt/frp/
├── frp_0.65.0_darwin_arm64/ # 实际安装目录
├── frp_0.66.0_darwin_arm64/ # 新版本目录
└── current -> frp_0.65.0_darwin_arm64/ # 软链接指向 current
Why Use Symlinks?
| 优势 | 说明 |
|---|---|
| 简化路径 | 启动命令使用 /opt/frp/current/frpc 而非长版本号路径 |
| 快速升级 | 只需修改软链接,无需更新配置或启动脚本 |
| 版本回滚 | 出现问题时快速切换回旧版本 |
| 保持兼容性 | 配置文件中使用稳定路径,升级不受影响 |
Implementation
创建软链接
# 创建指向特定版本的软链接
ln -sfn /opt/frp/frp_0.65.0_darwin_arm64 /opt/frp/current
# 验证
ls -la /opt/frp/current
# lrwxr-xr-x 1 user staff 35 Apr 14 10:00 /opt/frp/current -> frp_0.65.0_darwin_arm64
升级版本
# 1. 下载并解压新版本
wget https://github.com/fatedier/frp/releases/download/v0.66.0/frp_0.66.0_darwin_arm64.tar.gz
tar -xzf frp_0.66.0_darwin_arm64.tar.gz
# 2. 停止旧版本服务
launchctl stop com.frpc.client
# 或
pkill frpc
# 3. 切换软链接
ln -sfn /opt/frp/frp_0.66.0_darwin_arm64 /opt/frp/current
# 4. 验证
ls -la /opt/frp/current # 确认指向新版本
# 5. 启动服务
launchctl start com.frpc.client
回滚版本
# 停止服务
launchctl stop com.frpc.client
# 切换回旧版本
ln -sfn /opt/frp/frp_0.65.0_darwin_arm64 /opt/frp/current
# 启动服务
launchctl start com.frpc.client
Launchd Integration
<key>ProgramArguments</key>
<array>
<string>/opt/frp/current/frpc</string> <!-- 使用软链接路径 -->
<string>-c</string>
<string>/opt/frp/current/frpc.toml</string>
</array>
Best Practices
Directory Structure
/opt/<software>/
├── <software>_v1.0.0/
├── <software>_v1.1.0/
├── <software>_v1.2.0/
├── current -> <software>_v1.2.0/
└── configs/ # 可选:配置文件独立存放
├── v1.0.0.toml
├── v1.1.0.toml
└── current.toml -> v1.2.0.toml
Naming Convention
- 版本目录:
<name>_v<major>.<minor>.<patch>_<platform>_<arch> - 软链接名称:
current(行业标准)或<name>-latest
Security Considerations
- 保持链接目标存在:删除旧版本前确保软链接已切换
- 使用绝对路径:
ln -sfn使用绝对路径避免相对路径问题 - 验证后再启动:切换后验证软链接,再启动服务
Use Cases
- FRP:版本升级无需修改 launchd plist
- Docker:使用
:latest标签的软链接等价物 - Node.js:nvm 使用软链接管理多版本
- Python:pyenv 使用软链接切换版本
Related Concepts
References
man lnman readlink