web-dev-qa-db-fra.com

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

De temps en temps, j'ai besoin de réinstaller le système Linux (principalement des distributions basées à Ubuntu). Le processus de réinstallation de chaque logiciel dont j'ai besoin est vraiment ennuyeux et prend beaucoup de temps. Y a-t-il un logiciel qui peut m'aider? Pour Windows, il y a Ninite, y a-t-il autre chose pour Linux?

EDIT: Merci pour toutes les réponses! Je suis allé avec ansible et c'est un outil incroyable.

19
Offpics

Ansible est une offre de logiciels open-source, une gestion de la configuration et un outil 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 ainsi que Microsoft Windows. Il comprend sa propre langue déclarative pour décrire la configuration du système

(De - Wikipedia .) page d'accueil (GitHub) .

Il y a plusieurs autres dans la même catégorie. Lecture sur ansile devrait vous donner un vocabulaire pour rechercher les autres et comparer, si nécessaire. NIX est un nouveau concurrent. Certains disent "plus complexe, mais peut-être juste juste". Chef est également sur la scène.

Exemple ansite pour 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ôte fixe, mais un ad hoc, avec la virgule suivante.)

Cela ne raye que la surface, Ansible a une collection de module étendue .

10
Alex Stragies

Enregistrer et restaurer tous les paquets

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

dpkg --get-selections > my_package_list.txt

et installez-les à nouveau en courant

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 la base de données dpkg est à jour (de nos jours, 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 la sélection paquets. Voir le Handbook de Debian Administrator 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 des packages explicitement installés

aptitude installe automatiquement des dépendances (par exemple une bibliothèque requise par une application). Ces packages sont signalé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 pas suivre les packages automatiquement installés. 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 pas (!) pavillon automatique (~M). Pour chaque emballage correspondant, le nom du paquet (%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 dans cette liste. Reportez-vous au Manuel de l'utilisateur aptitude pour plus de détails.

41
Martin Konrad

Si vous voulez simplement installer un tas de paquets, une simple doublure peut 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 cela, si APT ne parvient pas à trouver l'un des programmes de la liste, il ne parviendra pas à installer l'un des autres packages. Cela peut se produire par exemple si vous passez à une version plus récente de votre distribution et de vos packages plus anciens ne sont plus dans les repos. Si vous préférez tout ou rien d'utiliser

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

Si vous souhaitez également enregistrer vos configurations, le terme de recherche serait "Dotfiles". C'est ce que les configurations dans Unix comme des systèmes comme des systèmes sont appelées car elles commencent principalement par un ".".

Une manière rapide et sale de sauver celles-ci est simplement en copiant tous ces répertoires de configurations à votre nouveau système. Un meilleur moyen serait de les placer sous contrôle de version avec des outils tels que Git. J'utilise une combinaison de scripts git, dotbot et écrit à la main pour configurer mon système.

Mettre à jour

Un point qui manque de la discussion jusqu'à présent est que apt ne soit généralement pas le seul système de gestion de paquets dont on n'a besoin pour rien au-delà des bases nues. Les autres outils de gestion de paquets peuvent être snap, pip, conda, cargo et beaucoup d'autres autres. Ceci est implicitement abordé dans la réponse par Alex Stragies. Ansible contient un vaste ammé de modules, y compris des modules pour gérer des packages à partir 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 doit 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é dans mes yeux.

Petit exemple de cadre

J'ai écrit un petit code dans python qui doit examiner comment un tel cadre pourrait regarder.

#!/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 packages séparés par les nouvelles lignes (read_package_list) et une fonction pour exécuter la commande d'installateur dans une coque (install_packages). Les lignes avec uniquement des espaces et des lignes commençant par # sont ignorées lors de la lecture dans la liste des packages. Le 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'installateur 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 pourrait être utile si l'on garde une liste de packages qui devraient tous être traités de la même manière. Une fois qu'un tel cadre existe, il est facile de s'améliorer. On pourrait, par exemple, personnaliser la manière dont le processus d'installation est enregistré ou personnalisez 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 exécute en tant que root) tel qu'il le fait actuellement.

3
Max1

Si vous installez des logiciels de la ligne de commande, alors faites

grep "^Sudo apt install" ~/.bash_history > system-setup.sh

une fois que la configuration système est terminée vous fournira un script, qui (après une modification) peut être réutilisé pour configurer un système fraîchement installé la prochaine fois que vous en avez besoin.

1
Dmitry Grigoryev