Sé cómo enumerar todos los paquetes instalados en mi sistema.
Pero, ¿cómo podría obtener una lista de todos los repositorios y PPA en un script que pueda ejecutar en una nueva máquina para replicar la configuración del repositorio, incluidas las claves?
Sé que puedo investigar /etc/apt/sources.list
y /etc/apt/sources.list.d
, pero estoy buscando una forma de generar una secuencia de comandos que ejecute todos los apt-add-repository
comandos en un nuevo sistema (que resuelva obtener todas las claves).
¿Algunas ideas?
command-line
scripts
ppa
repository
add-apt-repository
Stwissel
fuente
fuente
egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*
de eliminar las líneas comentadas y las líneas en blanco?^
aftergrep
ingrep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
?cat /etc/apt/sources.list /etc/apt/sources.list.d/*
Gracias por los consejos. Con un poco de limpieza obtuve un script que enumera los PPA, pero no cualquier otro repositorio:
Cuando lo llama,
listppa > installppa.sh
obtiene un script que puede copiar en una nueva máquina para reinstalar todo el PPA.Siguiente parada: haz eso para los otros repositorios:
Esto debería funcionar. Necesitaba una pregunta sobre superusuario para descubrir la expresión regular correcta.
fuente
grep -o
ejemplo, el\`
de[a-z0-9\-]
que no está haciendo lo que se espera. Realmente coincide con una barra diagonal inversa literal . No es necesario para escapar de la-
cuando se está al principio o al final de la[]
lista; en realidad, ¡no puedes escapar ! ... En este caso,\`
(probablemente) no causará un problema, porque (con suerte) no encontrarás una barra invertida en ladeb
entrada.http://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
[[:graph:]]
lugar de[a-z...blah.anything]
porque coincidirá con cualquier carácter alfanumérico + de puntuación; en eso consisten los nombres de PPA.deb
palabras al comienzo de cada línea de repositorio, si no se da enppa:$USER/$PPA
forma.grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; done
Tenga en cuenta que, tal como está escrito, le muestra el nombre del archivo del que proviene cada entrada, por lo que necesitaría hacer un recorte desde el comienzo del resultado hasta el primer colon, pero eso no es demasiado difícil con el corte. Es posible que también desee pasarlouniq
si no desea múltiples entradas para la misma fuente (por ejemplo, si tiene instalado Google Chrome Stable / Beta / Dev).Me sorprende que aún no se haya publicado la forma más simple pero efectiva de obtener todas las fuentes de software binario habilitadas junto con el archivo en el que están especificadas:
De todos los archivos procesados, esto imprimirá cada línea que comience con
deb
. Esto excluye las líneas comentadas, así como lasdeb-src
líneas para habilitar repositorios de código fuente.Realmente busca solo todos los
*.list
archivos que serán analizadosapt
, pero, por ejemplo, ningún*.list.save
archivo utilizado para copias de seguridad u otros con nombres ilegales.Si desea una salida correcta más corta pero posiblemente solo en el 99.9% de todos los casos que puede buscar demasiados archivos (incluye todos los
/etc/apt/sources.list*
archivos y directorios, no solo/etc/apt/sources.list
y `/etc/apt/sources.list.d/*), también podría utilizar este:A menos que haya archivos que no deberían estar allí, la salida será la misma.
Un ejemplo de salida en mi máquina sería este:
Si desea una salida más bonita, canalicemos
sed
:Y veremos esto:
fuente
ppa:<user>/<project>
formulario.Ejecute el siguiente comando:
Fuente
fuente
apt-cache policy
solo mostrará los repositorios después de haber ejecutadoapt-get update
. Si acaba de agregar un repositorio conadd-apt-repository
, no apareceráapt-cache policy
hasta que ejecuteapt-get update
sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -u
funciona bien. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1Utilizo este comando para enumerar todas las fuentes de software configuradas (repositorios), incluidas las actualmente deshabilitadas :
Lo uso principalmente para solucionar problemas; esto ciertamente se puede incorporar a los scripts, pero es posible que desee limitarlo
/etc/apt/sources.list.d/*
para/etc/apt/sources.list.d/*.list
que solo obtenga fuentes de software actualmente habilitadas.fuente
Entonces, cavando un poco, tenemos
AptPkg::Class
.Entonces, usando
perl
podemos hacer algo simple como esto ...Esto nos da una lista de todos los
AptPkg::Class::PkgFile
paquetes. Probablemente podrías generar losapt-add-repository
comandos con eso.fuente
https://repogen.simplylinux.ch/ le dará una lista de todos los PPA para su versión de Ubuntu. Aquí hay una lista generada sin archivos de origen y sin impresora ppa de Samsung:
fuente
Aquí está mi script, "
list-apt-repositories
", que enumera todos los repositorios en "/etc/sources.list"
y"/etc/sources.list.d/*.list
". Puede agregar--ppa-only
para mostrar solo los PPA. Los PPA se transforman automáticamente alppa:USER/REPO
formato.Las partes relevantes son las 5 líneas
list_sources
ylist_ppa
funciones, el resto es solo repetitivo para envolverlo en un útil script de shell.list-apt-repositories
:Y para hacer una secuencia de comandos de instalación, vaya a otra secuencia de comandos "
make-apt-repository-install-script
". El script generado admite el argumento-y
/--yes
para uso no interactivo (veradd-apt-repository(1)
).make-apt-repository-install-script
:Una vez más, la parte importante es el
xargs
comando en la última línea, el resto es repetitivo.fuente
Para que agregue líneas ppa.launchpad.net como ppa: $ USER / $ PPA. Agregue otros repositorios con su línea completa de archivos * .list. No hay líneas de engaño.
fuente
Gracias BobDodds!
Si alguien está interesado, he actualizado un poco su código (espero que no le importe).
Este script escribirá solo los PPA agregados por el usuario (/etc/apt/sources.list.d).
fuente
Sin embargo, eso no genera comandos para habilitar posibles repositorios de origen (deb-src).
fuente
Instalar en pc
ppa-purge
Luego obtenga la lista de ppa por finalización de pestaña ...
ppa-purge -o
(presione la Tabtecla dos veces)fuente
ppa-purge
no tiene-o
bandera según su página de manual . -1