GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay algún software que pueda ayudarme a reinstalar el software después de una instalación nueva?

Guardar y restaurar todos los paquetes

En los sistemas basados ​​en Debian/Ubuntu, puede volcar la lista de paquetes instalados en un archivo

dpkg --get-selections > my_package_list.txt

e instálelos de nuevo ejecutando

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

La primera línea asegura dpkg La base de datos de está actualizada (hoy en día la mayoría de la gente usa apt para instalar paquetes que mantienen su propia base de datos), la segunda línea importa sus selecciones guardadas y el tercer comando instala los paquetes seleccionados. Consulte el Manual del administrador de Debian para obtener más información.

En caso de que haya instalado paquetes de repositorios de terceros, debe agregar estos repositorios antes de seguir los pasos anteriores para la restauración.

Guardar y restaurar solo paquetes instalados explícitamente

Aptitude instala automáticamente las dependencias (por ejemplo, una biblioteca requerida por una aplicación). Estos paquetes están marcados como "automáticos" y se pueden eliminar automáticamente cuando ya no se necesitan. En caso de que quiera conservar estas banderas "automáticas", no podemos usar dpkg ya que no rastrea los paquetes instalados automáticamente. En su lugar, tenemos que usar el algo más críptico

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

Esto buscará todos los paquetes que están instalados (~i ) y no (! ) marcado automático (~M ). Para cada paquete coincidente, el nombre del paquete (%p ) y el estado (%C ) se imprimirá (esto imita la salida de dpkg --get-selections ). LC_ALL=C asegura que toda la producción se realice en inglés sin traducción a un idioma nativo. Use los comandos mencionados anteriormente para instalar los paquetes de esta lista. Consulte el manual del usuario de aptitude para obtener más detalles.


Ansible es una herramienta de implementación de aplicaciones, gestión de configuración y aprovisionamiento de software de código abierto. Se ejecuta en muchos sistemas similares a Unix y puede configurar tanto sistemas similares a Unix como Microsoft Windows. Incluye su propio lenguaje declarativo para describir la configuración del sistema

(De Wikipedia.) Página de inicio (Github).

Hay varios otros en la misma categoría. Leer sobre ansible debería darle vocabulario para buscar los demás y comparar, si es necesario. Nix es un contendiente más nuevo. Algunos dicen "más complejo, pero tal vez lo correcto". el chef también está en la escena.

Ejemplo de Ansible para el nombre de host myhost , módulo apt (reemplazar con yum o lo que sea):

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

La lista "tcpdump,tmux" se puede ampliar con comas. (El hecho de que el nombre de host myhost es dos veces en la línea de comandos, porque no estamos usando una lista de inventario de host fija, sino una ad-hoc, con la coma final).

Esto solo toca la superficie, Ansible tiene una extensa colección de módulos.


Si solo desea instalar un montón de paquetes, una sola línea podría ser como:

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

El bucle no es estrictamente necesario, pero sin él, si apt no encuentra ninguno de los programas en la lista, no podrá instalar ninguno de los otros paquetes. Esto puede suceder, por ejemplo, si cambia a una versión más reciente de su distribución y los paquetes más antiguos ya no están dentro de los repositorios. Si prefiere todo o nada use

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

Si también desea guardar sus configuraciones, el término de búsqueda sería "dotfiles". Así se llaman las configuraciones en los sistemas similares a Unix, ya que en su mayoría comienzan con un ".".

Una forma rápida y sucia de guardarlos es simplemente copiando todos esos directorios de configuraciones a su nuevo sistema. Una mejor manera sería colocarlos bajo el control de versiones con herramientas como git. Utilizo una combinación de git, dotbot y scripts escritos a mano para configurar mi sistema.

Actualizar

Un punto que falta en la discusión hasta ahora es que apt normalmente no es el único sistema de administración de paquetes que uno necesita para algo más allá de lo básico. Otras herramientas de administración de paquetes pueden ser snap , pip , conda , cargo y muchos más. Esto se aborda implícitamente en la respuesta de Alex Stragies. Ansible contiene una gran cantidad de módulos, incluidos módulos para administrar paquetes además de apt como snap y pip .Como mi respuesta se centra en escribir su propio script, me gustaría ampliarlo. Un marco bien probado como Ansible en general, debería preferirse para la mayoría de las tareas, pero el código escrito por uno mismo ofrece una ventaja en términos de flexibilidad en mi opinión.

Pequeño marco de ejemplo

He escrito un pequeño código en python que ejemplificará cómo podría verse dicho marco.

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

Los ingredientes básicos son una función para procesar una lista de paquetes separados por saltos de línea (read_package_list ) y una función para ejecutar el comando del instalador en un shell (install_packages ). Líneas con solo espacios en blanco y líneas que comienzan con # se ignoran cuando se leen en la lista de paquetes. El main procesa los argumentos que se pueden dar en la línea de comando como installer command , packagefile , errorlog .

¿Qué me da eso?

Bueno, puedes usar cualquier comando de instalación que quieras

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

Esto podría ser útil si uno mantiene una lista de paquetes que deben tratarse de la misma manera. Una vez que existe dicho marco, es fácil mejorarlo. Uno podría, por ejemplo, personalizar la forma en que se registra el proceso de instalación o personalizar el procesamiento de los argumentos de la línea de comandos. Otro aspecto es que el script probablemente no debería ejecutar cada comando como root (si se ejecuta como root) como lo hace actualmente.


Linux
  1. Linux:¿hay alguna interfaz gráfica de usuario para Linux que no use X11?

  2. ¿Ubuntu 16.04 paquetes rotos después de una instalación nueva?

  3. ¿Existe un software que pueda reconocer qué notas musicales estoy tocando en el micrófono para ayudarme a practicar música?

  4. ¿La instalación nueva de Ubuntu 14.04.1 Lts se congela después de iniciar sesión?

  5. ¿Hay una variable de ruta de instalación de Qt que pueda usar en el archivo .pro?

Cómo instalar paquetes en Debian 10

¿Por qué no instalar paquetes de software desde Internet?

Aprendiendo Ubuntu Apt Get Through Ejemplos

Los 30 mejores software de soporte técnico para empresas que aprovechan Linux

¿Permitir que los usuarios que no son administradores instalen paquetes a través de apt o rpm?

¿Hay alguna utilidad de línea de comandos que pueda capturar las pulsaciones de los botones del joystick?