apt 固定版本的两个办法
阻止某个包被自动升级有两条路:apt-mark hold 快速按住单个包,适合临时处理或个别关键包;/etc/apt/preferences.d 下的 Pin 规则可以按仓库与版本精细控制优先级,适合混合源的复杂环境。实践中常先用 hold 顶上,再收敛成规范化的 Pin 策略。
基本信息
| 快捷方式 | apt-mark hold / unhold 单个包 |
|---|---|
| 精细方式 | /etc/apt/preferences.d/*.pref 中的 Package、Pin、Pin-Priority |
| 查看状态 | apt-mark showhold、apt-cache policy 包名 |
| 优先级含义 | 大于 1000 强制该版本,990 只为常规安装提供偏好 |
典型使用场景
- 关键中间件固定在小版本,避免自动升级打断业务
- 混合官方源与第三方源时,防止从非预期源升级
- 灰度升级期间只放开部分机器的版本
- 排查「升级后行为变了」时锁定版本便于回退
- 内网源与外部源并存时的版本收敛
- 变更窗口之外冻结包,控制变更节奏
apt-mark 快法
apt-mark 快法
apt-mark showhold # 查看当前被 hold 的包
sudo apt-mark hold nginx # 按住,不参与自动升级
sudo apt-mark unhold nginx # 解除按住
apt list --upgradable # 被 hold 的包不会出现在升级列表preferences 细法
preferences 细法
sudo tee /etc/apt/preferences.d/99-pin-nginx > /dev/null <<'EOF'
Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001
EOF
apt-cache policy nginx # 验证候选版本符合预期两种手段对照
| 手段 | 粒度 | 适用场景 |
|---|---|---|
| apt-mark hold | 单个包 | 临时冻结或个别关键包 |
| preferences 的 Pin | 按包、版本、来源 | 混合源环境的长期策略 |
| Pin-Priority 1001 | 强制使用指定版本 | 可能带来降级,改动前评估 |
| Pin-Priority 990 | 偏好但非强制 | 常规安装时的默认选择 |
| apt-cache policy | 查询候选与已装版本 | 修改策略后的验证入口 |
Pin-Priority 大于 1000 表示强制使用指定版本,可能触发降级;990 只让常规安装偏好它。改动策略后一定用 apt-cache policy 复核候选版本。
hold 只挡自动升级:手工 apt install 指定版本仍可能绕开它,相关约定要写进变更文档,否则冻结形同虚设。
preferences 里的优先级写错会让其它包意外降级,属于高影响误操作;改动后建议先在测试机跑一遍完整升级流程。
被 hold 的包在安全检查与补丁修复时也可能被一起挡住:定期用 apt-mark showhold 回顾清单,确认冻结范围仍然必要,别让冻结变成长期欠账。