Comment puis-je revenir d'une mise à niveau vers le référentiel proposé?

Réponses:

24

Voici un moyen plus général de revenir des packages installés localement, des packages proposés et rétroportés au canal stable + mises à jour. Bien que les autres réponses soient correctes et fonctionnent de manière similaire, je pense que c'est une approche plus élégante.

  1. Assurez-vous d'avoir supprimé les entrées de -proposedou -backportsdans vos fichiers /etc/apt/sources.listet /etc/apt/sources.list.d/*.
  2. Ajoutez un fichier apt-preferences, par exemple /etc/apt/preferences.d/99-back-to-stable-updatescontenant (pour preciseici - remplacez par votre version):

    Package: *
    Pin: release a=precise
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-updates
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-security
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-proposed
    Pin-Priority: -10
    
    Package: *
    Pin: release a=precise-backports
    Pin-Priority: -10
    

    Cet épinglage de> 1000 rendra apt forcer une rétrogradation sur les packages de ce canal et une priorité de <0 sur les canaux -proposedet -backportsfera également supprimer tous les packages supplémentaires.

  3. Maintenant, lancez

    sudo apt-get update
    sudo apt-get dist-upgrade
    

    Inspectez la solution proposée que apt vous donnera, et si vous pensez que ça va, acceptez-la. Si vous avez besoin de vérifier pourquoi et vers quelle version il sera rétrogradé, vérifiez-le avec apt-cache policy packagenamepour voir quelles versions sont disponibles et quelle apt décide est le candidat pour l'installation.

  4. Supprimez à /etc/apt/preferences.d/99-back-to-stable-updatesnouveau le fichier, car il n'est plus nécessaire.

Merci aux mlindforums Ubuntu pour cette inspiration sur l'épinglage dans son message d'il y a plus de 5 ans - mais cela m'a assez bien aidé aujourd'hui.

gertvdijk
la source
Je suppose que cela devrait également fonctionner avec Debian. Malheureusement, cela ne fait rien pour moi: /
Michael
@Michael 1) Debian n'a pas le concept de référentiels officiels proposés. 2) Ce site concerne Ubuntu, pas Debian. Je vous suggère de poser une nouvelle question sur Unix.SE .
gertvdijk
Cette solution fonctionnait également avec la version 'xenial'! (après avoir remplacé précis par xenial dans le fichier, bien sûr) Merci beaucoup!
morhook
4

Cette page suggère que l'épinglage Apt peut être utilisé pour rétrograder à partir d'un référentiel entier en tirant parti du fait que les priorités de broches supérieures à 1000 peuvent entraîner des rétrogradations de packages .

Une solution pourrait alors consister à incrémenter temporairement de 1 000 les priorités par défaut de tous les fichiers de package, à l'exception de ceux du natty-proposedréférentiel:

apt-cache policy | awk '
    /^ [0-9]+ / {
        p = $1;
        getline;
        r = $0;
        if (r !~ /a=natty-proposed/) p += 1000;
        print "Package: *\nPin: " r "\nPin-priority: " p "\n"
    }
' | sudo tee /etc/apt/preferences.d/downgrade-from-natty-proposed

(Remarque: cette méthode n'augmente pas la priorité des fichiers de package dont les champs de version contiennent des virgules. Voir cette question .)

Après cela, apt-get --simulate upgradepeut être utilisé pour tester la détection de la rétrogradation. Après avoir confirmé que les déclassements corrects sont détectés, cela sudo apt-get upgradedevrait être tout ce qui est nécessaire pour effectuer le déclassement.

Une fois la rétrogradation terminée, utilisez les sources logicielles pour désactiver le référentiel des mises à jour préliminaires (proposé par natty) , puis supprimez l'augmentation de priorité temporaire:

sudo rm /etc/apt/preferences.d/downgrade-from-natty-proposed

Enfin, redémarrez afin que tous les programmes en cours d'exécution soient leurs versions rétrogradées.

ændrük
la source
1
Solution intéressante, probablement meilleure et plus générale que la mienne. Soit dit en passant, le nombre de packages rétrogradés est le même, ce qui confirme l'exactitude des deux approches.
enzotib
2

Je ne trouve pas de solution plus simple que la suivante. Espérant pourtant que quelqu'un obtienne une meilleure réponse.

Le script suivant qui peut exécuter la rétrogradation

#!/bin/bash

# get a list of installed packages
dpkg --get-selections | awk '{ print $1 }' > all-packages

# run apt-cache policy on each of them, then elaborate with the awk script 
apt-cache policy $(<all-packages) |
  ./get-prev-pkg-vers >old-versions

# install previous version of packages
sudo apt-get --simulate install $(< old-versions)

Le awkscript, nommé get-prev-pkg-versest comme suit

#!/usr/bin/awk -f

/^[^ ]/ {
    package = $1
    gsub(":", "", package)
    search_next = 0
}
/^     [^ ]/ {
    installed = 0
    version = $1
    if (search_next == 1) {
        print package "=" version
        search_next = 0
    }
}
/^ \*\*\* [^ ]/ {
    installed = 1
}
/^        [^ ]/ {
    branch = $3
    if (installed == 1 && branch ~ /proposed/) {
        search_next = 1
    }
    installed = 0
}

Lors de l'exécution du script, le dépôt proposé ne devrait PAS encore avoir été désactivé.

N'oubliez pas de définir le bit exécutable sur les deux scripts.

Un problème avec cette approche est que tous les packages rétrogradés seront installés manuellement (également ceux qui ont été installés automatiquement).

Pour être sûr, ajoutez l' --simulateoption apt-getà la fin du script bash.

enzotib
la source
2

Il n'est probablement pas nécessaire de rétablir tous les packages de natty-propose: la plupart des packages seront bientôt mis à jour vers les mêmes versions via natty-updates.

Dans le cas où vous avez un problème avec un package, vous pouvez rétablir ce package en utilisant la méthode que darent présente (après avoir désactivé -proposé), ou vous pouvez utiliser sudo aptitude install packagename/natty. Mais plus important encore, vous devez déposer un bogue contre le package. Peu de gens testent réellement les natty proposés, et si des régressions (= nouveaux problèmes) surviennent, elles devraient certainement être signalées. Sinon, ils pourraient se retrouver dans les mises à jour pour tous les utilisateurs d'ubuntu. Donc, si vous avez des problèmes, veuillez nous en informer.

johanvdw
la source
1

Dans synaptique, vous pouvez désactiver le référentiel pour proposé et mettre à jour vos sources. Ensuite, vous verrez que tous les packages qui ont été mis à jour apparaissent comme installés localement (car ils ne sont plus dans les dépôts).

Vous devrez maintenant "rétrograder" ces packages. Sélectionnez-les un par un et choisissez dans le menu supérieur:

package > force version

(ou Contrôle + E)

Un menu apparaîtra avec les options disponibles. Je choisirais le numéro de version inférieur pour chaque package. Si vous faites une erreur et qu'il existe une version plus récente dans les dépôts normaux, elle sera résolue dans une mise à jour ultérieure.

Une solution rapide serait d'utiliser la commande purge-ppa pointant vers le référentiel porposed, mais je ne sais pas si cela fonctionnerait avec eux, je ne l'ai utilisé que pour purger les ppa externes et rétrograder les packages vers les versions officielles d'ubuntu. Je ne vous recommanderai pas de le faire dans ce cas, peut-être que quelqu'un sait si c'est une méthode sûre ...

animaletdesequia
la source
Le dernier paragraphe n'est que de la spéculation et doit donc être un commentaire sur la question ou bien étudié.
Karl Richter