AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1002703
Accepted
N0rbert
N0rbert
Asked: 2018-02-04 09:32:15 +0800 CST2018-02-04 09:32:15 +0800 CST 2018-02-04 09:32:15 +0800 CST

什么更可靠 - apt-mark 或 APT-pin (/etc/apt/preferences.d/pin) 用于版本锁定?

  • 772

通常在我的 Ubuntu 16.04 LTS 上,我使用 APT-pin 功能锁定软件包版本。

例如,如果我想固定到1.5.3-1ubuntu1meld版本,我会创建以下 pin 文件:

cat <<EOF | sudo tee /etc/apt/preferences.d/pin-meld
Package: meld
Pin: version 1.5.3-1ubuntu1
Pin-Priority: 1337
EOF

此文件在系统范围内应用设置:apt、、和 GUI 工具apt-get,aptitude例如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

然后我持有已安装的版本。

$ 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

APT 标记显示它处于暂停状态。但是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

apt-get upgrade保留meld的报告:

$ 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.

但是,如果我aptitude以交互模式启动,我将meld在Upgradable Packages中:

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      

如果我不小心选择了Actions -> Cancel pending actions,则保留将被删除。

据我所知,synaptic忽略apt-mark标记,其锁定版本功能的工作方式不同。
meld此处列为已安装(可升级)。标记所有升级按钮不会自动选择它,但是标记升级可能会意外升级包。

Muon 以相同的方式处理由 . 持有的包裹apt-mark。但有趣的是,它的选项Lock at Current Version将 pin-file 写入/etc/apt/preferences.d/meld.

我是否正确理解 APT-pin 比 更可靠apt-mark?

package-management upgrade dpkg apt pinning
  • 1 1 个回答
  • 2638 Views

1 个回答

  • Voted
  1. Best Answer
    N0rbert
    2018-02-04T13:01:03+08:002018-02-04T13:01:03+08:00

    是的,pinning 比apt-mark.

    我发现了什么:

    • 过去 12-14 年 Synaptic 使用自己的固定文件 (/var/lib/synaptic/preferences) - 请参阅启动板上的错误 42178。对于系统范围,可能需要在/etc和 Synaptic之间设置符号链接

      sudo ln -s /etc/apt/preferences.d/synaptic /var/lib/synaptic/preferences
      

      所以它是解决方法,不推荐在 Synaptic 中锁定版本的方法(此文件不由apt-getand读取aptitude)。

    • Muon 在/etc/apt/preferences.d.

    • aptitude有两个错误:

      1. 在 14.04 LTS 上,它并不完全尊重apt-mark(请参阅我在启动板上的错误 1747189)。
      2. 在 16.04 LTS 上,apt-mark在单击Actions -> Cancel pending actions后设置的内容会丢失(请参阅我在启动板上的错误 1747191)。

      但是在 18.04 LTSaptitude中没有这样的错误,这很棒。

    所以我的结论是:apt-mark只有当你安装/删除/升级软件时才可以使用apt-get,否则你应该使用固定(即/etc/apt/preferences.d/),它更可靠和直接。


    注意:为防止封装安装管脚优先级应为负:

    P < 0 :
    阻止安装版本

    例如Pin-Priority: -10。

    • 8

相关问题

  • 如何回滚到 PHP 5.2?

  • 包管理器之间有什么区别?

  • 从 8.04 LTS 升级到 10.04 LTS 的体验?

  • 分销升级的合理途径

  • 在不使用标准升级系统的情况下升级有哪些替代方案?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve