web-dev-qa-db-fra.com

Annuler apt-get remove --purge

Je voulais une nouvelle installation de Python et j'ai lancé Sudo apt-get remove --purge python. Apparemment, il a tué presque tout ce que j'avais installé dans mon système.

En regardant le history.log je suppose que je pourrais réinstaller manuellement les paquets, mais il y en a des centaines, je ne peux pas simplement copier-coller.

Ironiquement, python est toujours installé. Pourrais-je effectuer quelques remplacements de regex afin de pouvoir réparer ce gâchis? Ou avec bash.

3
dabadaba

J'ai d'abord lancé Sudo apt-get install ubuntu-desktop comme je l'avais dit dans les commentaires, puis j'ai copié la partie de /var/log/apt/history.log relative à l'action de purge et y ai exécuté le script python que j'ai créé. Probablement quelqu'un de plus expérimenté en regex pleurerait en voyant comment je le faisais, mais cela a fonctionné pour moi:

import re

f = open('remove.log', 'r')
s = ""
for i in f:
    s += i + '\n'

s = re.sub(':.*?', '', s)
s = re.sub(r'\([^)]*\)', '', s)
s = re.sub(',', '', s)
s = re.sub('AMD64', '', s)

f = open('replaced.txt', 'w')
f.write(s)

Ensuite, je pouvais voir un bloc Install et un bloc Purge dans replaced.txt, de sorte que je voudrais simplement Sudo apt-get install tous les packages du premier bloc, puis du second.

Et voilà, apparemment.

6
dabadaba

J'avais un problème similaire. Le script de @ dabadaba a très bien fonctionné, mais l'installation de chaque paquet manuellement a été fastidieuse.

Voici un script python que j'ai écrit pour automatiser l'installation des packages répertoriés dans le fichier replaced.txt créé dans la réponse de @ dabadaba.

import subprocess

f = open('replaced.txt', 'r')

for line in f:
    if line.startswith('Install') or line.startswith('Purge'):
        packages = line.split()
        for in in range(1, len(packages):
            print 'Do you want to install ' + packages[i] + '? [y/n]'
            input = raw_input()
            if input == 'y':
                print 'beginning install'
                p = subprocess.Popen('apt-get install ' + packages[i], Shell=True)
                p.wait()
            else:
                print 'not installing'
3
JohannB