N0r*_*ert 7 upgrade package-management apt dpkg pinning
通常在我的 Ubuntu 16.04 LTS 上,我使用 APT-pin 功能锁定包版本。
例如,如果我想固定meld到1.5.3-1ubuntu1版本,我会创建以下 pin 文件:
cat <<EOF | sudo tee /etc/apt/preferences.d/pin-meld
Package: meld
Pin: version 1.5.3-1ubuntu1
Pin-Priority: 1337
EOF
Run Code Online (Sandbox Code Playgroud)
此文件系统级应用的设置:apt,apt-get,aptitude和GUI工具,如synaptic和muon尊重它。
我知道其他机制 - apt-mark. 让我们假设。我的起点 - 我已经手动安装了meld_1.5.3-1ubuntu1,它的引脚被移除了。
$ apt-mark showhold
$ apt-cache policy meld
meld:
Installed: 1.5.3-1ubuntu1
Candidate: 3.14.2-1
Version table:
3.14.2-1 500
500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
*** 1.5.3-1ubuntu1 100
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
然后我持有已安装的版本。
$ sudo apt-mark hold meld
meld set on hold.
$ dpkg -l | grep meld
hi meld 1.5.3-1ubuntu1 all graphical tool to diff and merge files
Run Code Online (Sandbox Code Playgroud)
APT-mark 显示它被搁置。但apt-cache policy meld没有变化
$ apt-cache policy meld
meld:
Installed: 1.5.3-1ubuntu1
Candidate: 3.14.2-1
Version table:
3.14.2-1 500
500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
*** 1.5.3-1ubuntu1 100
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
apt-get upgrademeld被保留的报告:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
meld
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Run Code Online (Sandbox Code Playgroud)
但是,如果我启动aptitude在交互模式我meld在升级的软件包:
Actions Undo Package Resolver Search Options Views Help
C-T: Menu ?: Help q: Quit u: Update g: Preview/Download/Install/Remove Pkgs
aptitude 0.7.4
--\ Upgradable Packages (1)
--\ gnome - The GNOME Desktop Environment (1)
--\ universe - Unsupported Free Software. (1)
ih meld 1.5.3-1ubuntu1 3.14.2-1
Run Code Online (Sandbox Code Playgroud)
如果我不小心选择了操作 -> 取消挂起的操作,保留将被删除。
据我所知,synaptic忽略apt-mark标记,其锁定版本功能的工作方式不同。
meld此处列为已安装(可升级)。Mark all upgrades按钮不会自动选择它,但包可能会被Mark for Upgrade意外升级。
Muon 以相同的方式处理由apt-mark. 但是有趣的是它的选项Lock at Current Version将 pin-file 写入/etc/apt/preferences.d/meld.
我是否正确理解 APT-pin 比 更可靠apt-mark?
是的,固定比 更可靠apt-mark。
我发现了什么:
最近 12-14 年 Synaptic 使用自己的固定文件 (/var/lib/synaptic/preferences) - 请参阅启动板上的错误 42178。对于系统范围的人可能想要在/etc和 Synaptic之间设置符号链接
sudo ln -s /etc/apt/preferences.d/synaptic /var/lib/synaptic/preferences
Run Code Online (Sandbox Code Playgroud)
所以这是解决方法,不推荐使用 Synaptic 中的锁定版本的方法(此文件不由apt-get和读取aptitude)。
Muon 中的每个应用程序使用系统范围的 pin 文件/etc/apt/preferences.d。
aptitude 有两个错误:
apt-mark(请参阅我的错误 1747189 at launchpad)。apt-mark在单击Actions -> Cancel pending actions(请参阅我的错误 1747191 at launchpad后,设置为丢失)。但是在 18.04 LTS 中aptitude没有这样的错误,这很棒。
所以我的结论如下:apt-mark仅当您仅使用 安装/删除/升级软件时才可用apt-get,否则您应该使用固定(即/etc/apt/preferences.d/),它更可靠和直接。
注意:为防止封装安装引脚优先级应为负:
P < 0 :
阻止安装版本
例如Pin-Priority: -10。
| 归档时间: |
|
| 查看次数: |
2275 次 |
| 最近记录: |