GNU/Linux >> Znalost Linux >  >> Linux

Existuje nějaký software, který mi může pomoci přeinstalovat software po nové instalaci?

Uložte a obnovte všechny balíčky

Na systémech založených na Debian/Ubuntu můžete seznam nainstalovaných balíčků uložit do souboru

dpkg --get-selections > my_package_list.txt

a znovu je nainstalujte spuštěním

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

První řádek zajišťuje dpkg Databáze uživatele je aktuální (dnes většina lidí používá apt pro instalaci balíčků, které spravuje vlastní databázi), druhý řádek importuje vaše uložené výběry a třetí příkaz nainstaluje vybrané balíčky. Podrobnosti naleznete v příručce správce Debianu.

V případě, že jste nainstalovali balíčky z repozitářů třetích stran, musíte tyto repozitáře přidat před provedením výše uvedených kroků pro obnovení.

Ukládat a obnovovat pouze explicitně nainstalované balíčky

Aptitude automaticky instaluje závislosti (např. knihovnu vyžadovanou aplikací). Tyto balíčky jsou označeny jako "automatické" a mohou být automaticky odstraněny, když již nejsou vyžadovány. V případě, že chcete zachovat tyto "automatické" příznaky, nemůžeme použít dpkg protože nesleduje automaticky nainstalované balíčky. Místo toho musíme použít trochu tajemnější

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

Toto prohledá všechny balíčky, které jsou nainstalovány (~i ) a nikoli (! ) označeno automaticky (~M ). Pro každý odpovídající balíček název balíčku (%p ) a stav (%C ) bude vytištěno (toto napodobuje výstup dpkg --get-selections ). LC_ALL=C zajišťuje, že veškerý výstup bude proveden v angličtině bez překladu do rodného jazyka. Pro instalaci balíčků z tohoto seznamu použijte výše uvedené příkazy. Podrobnosti naleznete v uživatelské příručce aptitude.


Ansible je nástroj pro poskytování, správu konfigurace a nasazení aplikací s otevřeným zdrojovým kódem. Běží na mnoha systémech podobných Unixu a může konfigurovat systémy podobné Unixu i Microsoft Windows. Obsahuje svůj vlastní deklarativní jazyk pro popis konfigurace systému

(Z Wikipedie.) Domovská stránka (Github).

Ve stejné kategorii je několik dalších. Čtení o ansible by vám mělo poskytnout slovní zásobu, abyste mohli hledat ostatní a v případě potřeby porovnávat. Nix je novější uchazeč. Někdo říká "složitější, ale možná tak akorát.". na scéně je také šéfkuchař.

Vhodný příklad pro název hostitele myhost , modul apt (nahraďte yum nebo cokoliv jiného):

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

Seznam "tcpdump,tmux" může být rozšířen o čárky. (Skutečnost, že název hostitele myhost je v příkazovém řádku dvakrát, protože nepoužíváme pevný seznam inventáře hostitelů, ale seznam ad-hoc s čárkou na konci.)

To pouze poškrábe povrch, Ansible má rozsáhlou sbírku modulů.


Pokud chcete pouze nainstalovat spoustu balíčků, jednoduchý jednořádkový program by mohl udělat jako:

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

Smyčka není nezbytně nutná, ale pokud bez ní apt nenajde některý z programů v seznamu, nepodaří se mu nainstalovat žádný z ostatních balíčků. To se může stát například tehdy, přejdete-li na novější verzi svého distra a starší balíčky již nejsou v repozitářích. Pokud dáváte přednost všemu nebo ničemu, použijte

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

Pokud chcete také uložit své konfigurace, hledaný výraz by byl "dotfiles". Tak se nazývají konfigurace v systémech podobných Unixu, protože většinou začínají ".".

Rychlý a špinavý způsob, jak je uložit, je zkopírovat všechny tyto konfigurační adresáře do vašeho nového systému. Lepším způsobem by bylo umístit je pod správu verzí pomocí nástrojů jako git. K nastavení systému používám kombinaci git, dotbot a ručně psaných skriptů.

Aktualizovat

Jeden bod, který v diskuzi zatím chybí, je apt obvykle není jediným systémem pro správu balíčků, který člověk potřebuje pro cokoli nad rámec holých základů. Další nástroje pro správu balíčků mohou být snap , pip , conda , cargo a mnoho dalších. To je implicitně řešeno v odpovědi Alexe Stragiese. Ansible obsahuje obrovské množství modulů včetně modulů pro správu balíčků kromě apt jako snap a pip .Jelikož moje odpověď je zaměřena na psaní vlastního skriptu, rád bych to rozšířil. Dobře otestovaný rámec, jako je Ansible by měl být obecně preferován pro většinu úkolů, ale vlastnoručně psaný kód v mých očích poskytuje výhodu ve smyslu flexibility.

Malý příklad rámce

Napsal jsem malý kód v pythonu, který bude ilustrovat, jak by takový rámec mohl vypadat.

#!/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()

Základními složkami jsou funkce pro zpracování seznamu balíčků oddělených novými řádky (read_package_list ) a funkci pro spuštění příkazu instalačního programu v shellu (install_packages .Řádky pouze s mezerami a řádky začínající # jsou při čtení v seznamu balíčků ignorovány. main zpracovává argumenty, které lze zadat na příkazovém řádku jako installer command , packagefile , errorlog .

Co mi to dává?

Můžete použít libovolný instalační příkaz

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

To může být užitečné, pokud si vedete seznam balíčků, se kterými by se mělo zacházet stejně. Jakmile takový rámec existuje, je snadné jej vylepšit. Dalo by se například upravit způsob protokolování instalačního procesu nebo přizpůsobit zpracování argumentů příkazového řádku. Dalším aspektem je, že skript by pravděpodobně neměl provádět každý příkaz jako root (pokud je spouštěn jako root), jak to aktuálně dělá.


Linux
  1. Linux – Existují nějaké nástroje Gui pro Linux, které nepoužívají X11?

  2. Jak nainstalovat software, který „vyžaduje instalaci nedůvěryhodných balíčků“?

  3. Existuje software, který dokáže rozpoznat, které noty hraji do mikrofonu – aby mi pomohl cvičit hudbu?

  1. Čerstvá instalace Ubuntu 14.04.1 Lts zamrzne po přihlášení?

  2. Existuje proměnná instalační cesty Qt, kterou mohu použít v souboru .pro?

  3. Existuje nějaká metoda pro spuštění perf pod WSL?

  1. Existuje nějaká oprava distribuce Linuxu nebo jádra, která po ukončení procesu vymaže prostor v paměti procesu?

  2. Povolit uživatelům, kteří nejsou správci, instalovat balíčky přes apt nebo rpm?

  3. Existují nějaké nástroje příkazového řádku, které dokážou zachytit stisknutí tlačítka joysticku?