GNU/Linux >> Tutoriels Linux >  >> Linux

Existe-t-il un logiciel qui peut m'aider à réinstaller le logiciel après une nouvelle installation

Enregistrer et restaurer tous les packages

Sur les systèmes basés sur Debian/Ubuntu, vous pouvez vider la liste des packages installés dans un fichier

dpkg --get-selections > my_package_list.txt

et réinstallez-les en exécutant

apt-cache dumpavail | sudo dpkg --merge-avail
sudo dpkg --set-selections < my_package_list.txt
sudo apt-get dselect-upgrade

La première ligne assure dpkg la base de données de est à jour (aujourd'hui la plupart des gens utilisent apt pour installer des packages qui maintiennent sa propre base de données), la deuxième ligne importe vos sélections enregistrées et la troisième commande installe les packages sélectionnés. Consultez le manuel de l'administrateur Debian pour plus de détails.

Si vous avez installé des packages à partir de référentiels tiers, vous devez ajouter ces référentiels avant de suivre les étapes ci-dessus pour la restauration.

Enregistrer et restaurer uniquement les packages explicitement installés

Aptitude installe automatiquement les dépendances (par exemple une bibliothèque requise par une application). Ces packages sont marqués comme "automatiques" et peuvent être automatiquement supprimés lorsqu'ils ne sont plus nécessaires. Si vous souhaitez conserver ces drapeaux "automatiques", nous ne pouvons pas utiliser dpkg car il ne suit pas les packages installés automatiquement. Au lieu de cela, nous devons utiliser le légèrement plus cryptique

LC_ALL=C aptitude search -F '%p %C' '~i!~M' > my_package_list.txt

Cela recherchera tous les packages installés (~i ) et non (! ) marqué automatique (~M ). Pour chaque package correspondant, le nom du package (%p ) et le statut (%C ) sera imprimé (cela imite la sortie de dpkg --get-selections ). LC_ALL=C garantit que toutes les sorties sont effectuées en anglais sans traduction dans une langue maternelle. Utilisez les commandes mentionnées ci-dessus pour installer les packages de cette liste. Reportez-vous au manuel de l'utilisateur d'aptitude pour plus de détails.


Ansible est un outil de provisionnement de logiciels open source, de gestion de la configuration et de déploiement d'applications. Il fonctionne sur de nombreux systèmes de type Unix et peut configurer à la fois des systèmes de type Unix et Microsoft Windows. Il inclut son propre langage déclaratif pour décrire la configuration du système

(De Wikipedia.) Page d'accueil (Github).

Il y en a plusieurs autres dans la même catégorie. La lecture d'ansible devrait vous donner du vocabulaire pour rechercher les autres et comparer, si nécessaire. Nix est un nouveau concurrent. Certains disent "plus complexe, mais peut-être juste.". le chef est également sur la scène.

Exemple ansible pour le nom d'hôte myhost , module apt (remplacer par yum ou autre):

ansible -K -i myhost, -m apt -a "name=tcpdump,tmux state=present" --become myhost

La liste "tcpdump,tmux" peut être étendue avec des virgules. (Le fait que le nom d'hôte myhost est deux fois dans la ligne de commande, car nous n'utilisons pas une liste d'inventaire d'hôtes fixe, mais une liste ad hoc, avec la virgule de fin.)

Cela ne fait qu'effleurer la surface, Ansible possède une vaste collection de modules.


Si vous souhaitez simplement installer un tas de packages, un simple one-liner pourrait faire comme :

sudo bash -c 'for package in "tmux" "htop" "gimp"; do apt install -y --no-upgrade "$package"; done'

La boucle n'est pas strictement nécessaire, mais sans elle, si apt ne parvient pas à trouver l'un des programmes de la liste, il ne pourra installer aucun des autres packages. Cela peut arriver par exemple si vous passez à une version plus récente de votre distribution et que les anciens packages ne sont plus dans les repos. Si vous préférez tout ou rien, utilisez

sudo apt install -y --no-upgrade tmux htop gimp

Si vous souhaitez également enregistrer vos configurations, le terme de recherche serait "dotfiles". C'est ainsi que s'appellent les configurations dans les systèmes de type Unix, car elles commencent généralement par un ".".

Un moyen rapide et sale de les enregistrer consiste simplement à copier tous ces répertoires de configurations sur votre nouveau système. Une meilleure façon serait de les placer sous contrôle de version avec des outils comme git. J'utilise une combinaison de scripts git, dotbot et écrits à la main pour configurer mon système.

Mettre à jour

Un point qui manque à la discussion jusqu'à présent est que apt n'est généralement pas le seul système de gestion de paquets dont on a besoin pour quoi que ce soit au-delà des bases. D'autres outils de gestion de paquets peuvent être snap , pip , conda , cargo et bien d'autres. Ceci est implicitement abordé dans la réponse d'Alex Stragies. Ansible contient une grande quantité de modules, y compris des modules pour gérer les packages en dehors de apt comme snap et pip .Comme ma réponse est axée sur l'écriture de votre propre script, j'aimerais développer cela.Un cadre bien testé tel que Ansible devrait généralement être préféré pour la plupart des tâches, mais le code auto-écrit donne un avantage en termes de flexibilité à mes yeux.

Petit exemple de framework

J'ai écrit un petit code en python qui illustrera à quoi pourrait ressembler un tel framework.

#!/usr/bin/env python3

import os
import re
import sys
import subprocess

def read_package_list(path):
    package_list=[]
    try:
        with open(os.path.realpath(path)) as f:
            for line in f:
                match = re.search(r'^(?!\s*$)(?!#)\w+',line)
                if match:
                    package_list.append(match.group(0))
            return package_list
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)    
    return package_list

def install_packages(command,package_list,err_log):
    try:
        with open(err_log,'w+') as f:
            for p in package_list:
                print('executing '+command+' '+str(p))
                out=subprocess.run(command+' '+p,shell=True,stderr=f)
    except Exception as e:
        print(e.message)
        print(e.args)
        sys.exit(1)

def main():
    args = sys.argv[1:]
    package_list = read_package_list(args[1])
    err_log=os.path.realpath(args[2])
    install_packages(args[0],package_list,err_log)

if __name__ == '__main__':
    main()

Les ingrédients de base sont une fonction pour traiter une liste de paquets séparés par des retours à la ligne (read_package_list ) et une fonction pour exécuter la commande d'installation dans un shell (install_packages ).Lignes avec uniquement des espaces et lignes commençant par # sont ignorés lors de la lecture dans la liste des paquets. Les main traite les arguments qui peuvent être donnés sur la ligne de commande comme installer command , packagefile , errorlog .

Qu'est-ce que cela me donne ?

Eh bien, vous pouvez simplement utiliser n'importe quelle commande d'installation que vous aimez

./installerscript.py 'apt install --dry-run' myaptpackages.txt apt_err.log
./installerscript.py 'snap install' mysnaps.txt snap_err.log
./installerscript.py 'pip install --user' mypy.txt py_err.log
./installerscript.py 'git clone' repos.txt git_err.log

Cela peut être utile si l'on conserve une liste de packages qui doivent tous être traités de la même manière. Une fois qu'un tel framework existe, il est facile de l'améliorer. On pourrait, par exemple, personnaliser la façon dont le processus d'installation est enregistré ou personnaliser le traitement des arguments de la ligne de commande. Un autre aspect est que le script ne devrait probablement pas exécuter chaque commande en tant que root (s'il est exécuté en tant que root) comme il le fait actuellement.


Linux
  1. Comment installer des packages logiciels avec un playbook Ansible

  2. Paquets cassés d'Ubuntu 16.04 après une nouvelle installation ?

  3. Existe-t-il un logiciel capable de reconnaître les notes de musique que je joue dans le microphone - pour m'aider à pratiquer la musique ?

  4. La nouvelle installation d'Ubuntu 14.04.1 Lts se bloque après la connexion ?

  5. Comment savoir quelles versions d'un paquet puis-je installer sur APT

Comment installer des paquets sur Debian 10

Pourquoi ne pas installer des progiciels à partir d'Internet

Apprendre Ubuntu Apt Passer à travers des exemples

Les 30 meilleurs logiciels d'assistance pour les entreprises utilisant Linux

Est-il possible d'installer tous les packages à partir d'un référentiel APT ?

Existe-t-il une distribution Linux ou un correctif du noyau qui efface l'espace mémoire d'un processus après la fin du processus ?