web-dev-qa-db-ja.com

バージョンのロックのためのapt-markまたはAPT-pin(/etc/apt/preferences.d/pin)より信頼性の高いものは何ですか?

通常、Ubuntu 16.04 LTSでは、APTピン機能を使用してパッケージバージョンをロックします。

たとえば、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

このファイルはシステム全体に設定を適用します:aptapt-getaptitude、およびsynapticmuonなどのGUIツールはそれを尊重します。

私は他のメカニズムを知っています-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があります。

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      

そして、誤ってアクション->保留中のアクションをキャンセルを選択すると、保留が解除されます。

synapticapt-markマーキングを無視することを理解できる限り、そのロックバージョン機能の動作は異なります。
meldは、ここにインストール済み(アップグレード可能)としてリストされています。 すべてのアップグレードをマークするボタンはそれを自動選択しませんが、パッケージはアップグレード用にマークするによって誤ってアップグレードされる場合があります。

Muonは、apt-markが保持するパッケージでも同じように機能します。しかし、興味深いのは、オプション現在のバージョンでロックがpinファイルを/etc/apt/preferences.d/meldに書き込むことです。

APTピンはapt-markよりも信頼性が高いことを正しく理解していますか?

7
N0rbert

はい、ピン留めはapt-markよりも信頼性があります。

私が発見したこと:

  • 過去12〜14年Synapticは独自のピン留めファイル(/ var/lib/synaptic/preferences)を使用します- launchpadのバグ42178 を参照してください。システム全体では、/etcとSynapticの間にシンボリックリンクを設定したい場合があります。

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

    回避策であるため、Synapticでのバージョンのロックは推奨されません(このファイルはapt-getおよびaptitudeによって読み取られません)。

  • Muonは、/etc/apt/preferences.dでアプリケーションごとにシステム全体のピンファイルを使用します。

  • aptitudeには2つのバグがあります。

    1. 14.04 LTSでは、apt-markを完全に尊重しません( ランチパッドのバグ1747189 を参照)。
    2. apt-markで設定された16.04 LTSホールドでは、アクションをクリックすると失われます->保留中のアクションをキャンセルランチパッドのバグ1747191 を参照) 。

    しかし、18.04 LTS aptitudeにはそのようなバグはありません。それは素晴らしいことです。

したがって、私の結論は次のとおりです:apt-markは、apt-getでのみソフトウェアをインストール/削除/アップグレードする場合にのみ使用できます。そうでない場合は、ピン留め(つまり/etc/apt/preferences.d/)、より信頼性が高く簡単です。


注:パッケージのインストールピンの優先順位を防ぐために、 マイナスにする

P <0:
バージョンがインストールされないようにします

たとえば、Pin-Priority: -10

5
N0rbert