web-dev-qa-db-fra.com

Quoi de plus fiable - apt-mark ou APT-pin (/etc/apt/preferences.d/pin) pour le verrouillage de version?

Habituellement, sur mon Ubuntu 16.04 LTS, je verrouille les versions de paquet avec la fonctionnalité APT-pin.

Par exemple, si je veux épingler meld à la version 1.5.3-1ubuntu1, je crée le fichier pin suivant:

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

Ce fichier applique les paramètres système: apt, apt-get, aptitude et les outils graphiques tels que synaptic et muon le respectent.

Je connais un autre mécanisme - apt-mark. Assumons. Mon point de départ - j'ai installé manuellement meld_1.5.3-1ubuntu1, sa broche est supprimée.

$ 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

Ensuite, je tiens la version installée.

$ 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-mark indique qu'il est en attente. Mais apt-cache policy meld n'a aucun changement

$ 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 indique que meld est gardé:

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

Mais si je lance aptitude en mode interactif, j'ai meld dans paquets pouvant être mis à nivea:

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      

et si je sélectionne accidentellement Actions -> Annuler les actions en attente, la mise en attente sera supprimée.

Autant que je puisse comprendre synaptic ignore les marques apt-mark, sa fonctionnalité Version verrouillée fonctionne différemment.
meld est répertorié ici sous la forme Installé (mise à niveau). Le bouton Marquer toutes les mises à nivea ne le sélectionne pas automatiquement, mais le paquet peut être mis à jour accidentellement par Marquer pour la mise à nivea.

Muon fonctionne de la même manière avec les paquets détenus par apt-mark. Mais ce qui est intéressant, son option Verrouiller à la version actuelle écrit un fichier pin dans /etc/apt/preferences.d/meld.

Ai-je bien compris que APT-pin est plus fiable que apt-mark?

7
N0rbert

Oui, le repérage est plus fiable que _apt-mark_.

Ce que j'ai découvert

  • synaptic utilise son propre fichier d'identification (/ var/lib/synaptic/preferences) - voir bug 42178 sur le tableau de bord . Pour l’ensemble du système, il peut être utile de définir un lien symbolique entre _/etc_ et Synaptic.

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

    il est donc déconseillé de verrouiller les versions dans Synaptic (ce fichier ne peut pas être lu par _apt-get_ et aptitude).

  • Muon utilise des fichiers PIN à l’échelle du système par application dans _/etc/apt/preferences.d_.

  • aptitude a deux bogues:

    1. sur 14.04 LTS, il ne respecte pas _apt-mark_ complètement (voir mon bogue 1747189 sur le tableau de bord ).
    2. le 16.04, les réservations LTS qui ont été définies par _apt-mark_ sont perdues après un clic sur Actions -> Annuler les actions en attente (voir mon bogue 1747191 sur le tableau de bord =).

    mais en 18.04 LTS aptitude ne pas avoir de tels bugs, c'est génial.

Ma conclusion est donc la suivante: _apt-mark_ est utilisable uniquement si vous installez/supprimez/mettez à niveau un logiciel uniquement avec _apt-get_, sinon vous devez utiliser pinning (c'est-à-dire _/etc/apt/preferences.d/_), il est plus fiable et simple.


Remarque: pour éviter que la priorité des broches d’installation de paquetages ne soit soit négative :

P <0:
empêche l'installation de la version

par exemple _Pin-Priority: -10_.

5
N0rbert