通常、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
このファイルはシステム全体に設定を適用します:apt
、apt-get
、aptitude
、およびsynaptic
やmuon
などの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
そして、誤ってアクション->保留中のアクションをキャンセルを選択すると、保留が解除されます。
synaptic
がapt-mark
マーキングを無視することを理解できる限り、そのロックバージョン機能の動作は異なります。meld
は、ここにインストール済み(アップグレード可能)としてリストされています。 すべてのアップグレードをマークするボタンはそれを自動選択しませんが、パッケージはアップグレード用にマークするによって誤ってアップグレードされる場合があります。
Muonは、apt-mark
が保持するパッケージでも同じように機能します。しかし、興味深いのは、オプション現在のバージョンでロックがpinファイルを/etc/apt/preferences.d/meld
に書き込むことです。
APTピンはapt-mark
よりも信頼性が高いことを正しく理解していますか?
はい、ピン留めは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つのバグがあります。
apt-mark
を完全に尊重しません( ランチパッドのバグ1747189 を参照)。apt-mark
で設定された16.04 LTSホールドでは、アクションをクリックすると失われます->保留中のアクションをキャンセル( ランチパッドのバグ1747191 を参照) 。しかし、18.04 LTS aptitude
にはそのようなバグはありません。それは素晴らしいことです。
したがって、私の結論は次のとおりです:apt-mark
は、apt-get
でのみソフトウェアをインストール/削除/アップグレードする場合にのみ使用できます。そうでない場合は、ピン留め(つまり/etc/apt/preferences.d/
)、より信頼性が高く簡単です。
注:パッケージのインストールピンの優先順位を防ぐために、 マイナスにする :
P <0:
バージョンがインストールされないようにします
たとえば、Pin-Priority: -10
。