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