Usando un archivo para instalar paquetes con apt-get

9

Me resulta muy conveniente instalar paquetes en una nueva máquina a través de archivos de paquete como brewfiles, caskfiles, dockerfiles, package.json, etc.

¿Hay una alternativa a esto para apt-get ya que todavía lo uso a
través de la línea de comandos con

apt-get install pkg1 pkg2 pkg3…

?

thibmaek
fuente
2
¿Necesita uno? Se podría utilizar xargs: xargs -P1 apt-get install < list-of-packages.
muru
@muru bueno, realmente no sé cómo funciona xargs (leyendo man ahora) pero no creo que sea una solución para tener los paquetes centralizados en un solo archivo. Todavía tendría que enumerar manualmente los archivos después del <ya que usar un archivo .txt con tres paquetes no funciona con este comando (probado en Debian)
thibmaek
1
El <es la redirección de shell. Para varios archivos, use:cat file1 file2 .. | xargs -P1 apt-get install
muru

Respuestas:

13

Como se especifica en los comentarios de su pregunta, puede crear un archivo de texto simple, llamado packages.txt, que enumere los paquetes a instalar:

iceweasel
terminator
vim

y luego ejecuta el siguiente comando:

cat packages.txt | xargs sudo apt-get install

xargs se usa para pasar los nombres de paquete desde el packages.txtarchivo a la línea de comando. Desde la página del manual:

xargs lee elementos de la entrada estándar, delimitados por espacios en blanco (que pueden protegerse con comillas dobles o simples o una barra diagonal inversa) o líneas nuevas, y ejecuta el comando (predeterminado es / bin / echo) una o más veces con cualquier argumento inicial seguido por elementos leídos de la entrada estándar.

Ortomala Lokni
fuente
9

Mejorando un poco la respuesta de @ ortomala-lokni, puede dar el archivo directamente como argumento para xargs:

xargs -a packages.txt sudo apt-get install

Opcionalmente, puede dar xargsla -ropción de evitar que la apt-getllamada se ejecute si packages.txtno contiene caracteres que no sean espacios en blanco.

quazgar
fuente
Esto puede ser una peculiaridad de Alpine / BusyBox, pero el -a arg no se habían documentado y no parecen funcionar allí: xargs: unrecognized option: a. Mi versión de salida que se muestra esBusyBox v1.27.2 (2017-12-12 10:41:50 GMT) multi-call binary.
Taylor Edmiston
El uso de la respuesta aceptada resultó en una consulta Y / n abortada de apt. Usar esto funcionó. ¡Gracias!
Ok Letsdothis
1

ingrese la descripción de la imagen aquí

funciona de ambas maneras para mí, asegúrese de tener los últimos xargs o compruebe si tiene la opción -a o no con la opción de ayuda (xargs --help)

Chinni Diwakar
fuente
55
Esta respuesta tiene problemas de accesibilidad: el texto en imágenes no puede ser leído por personas ciegas.
ctrl-alt-delor
0

Además de las soluciones de scripting más generales, puede crear un paquete deb.

necesitará

  • equivs-build, para construir el deb. El deb solo puede contener dependencias. Este es un generador de Deb simplificado.
  • gdebi para instalar el deb.

Esto funcionará en todos los sistemas basados ​​en Debian (sistemas que usan apt / deb-files).

La ventaja de hacerlo con archivos deb, en comparación con un script de shell, es que es mucho más fácil de deshacer, puede desinstalar un deb, o reconfigurar un deb y volver a instalarlo (esto hará que los archivos sean agregado y eliminado).

ctrl-alt-delor
fuente