Files
nexus/wiki/concepts/软链接策略.md

3.3 KiB
Raw Blame History

软链接策略

使用符号链接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
优势 说明
简化路径 启动命令使用 /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

  1. 保持链接目标存在:删除旧版本前确保软链接已切换
  2. 使用绝对路径ln -sfn 使用绝对路径避免相对路径问题
  3. 验证后再启动:切换后验证软链接,再启动服务

Use Cases

  • FRP:版本升级无需修改 launchd plist
  • Docker:使用 :latest 标签的软链接等价物
  • Node.jsnvm 使用软链接管理多版本
  • Pythonpyenv 使用软链接切换版本
  • frp — 软链接策略的典型应用场景
  • launchd — 使用软链接路径的服务管理
  • 内网穿透 — 需要版本管理的服务

References

  • man ln
  • man readlink