¿Cómo crear rápidamente un repositorio apto local para paquetes aleatorios usando una distribución de Linux basada en Debian?

20

Algunas situaciones requieren la instalación manual de un paquete local mediante dpkg -i <packagename>. A veces puede ser más útil aprovechar la funcionalidad de aptese paquete, por lo que la pregunta es:

¿Cómo se crea rápidamente un repositorio local para paquetes aleatorios utilizando una distribución de Linux basada en Debian, como Xubuntu 13.04 / Ubuntu?


fuente
Solo para tu información. Lo habitual es seguir dpkg -i <packagename>con apt-get -f installpara obtener los paquetes necesarios. Además, lo habitual para crear repositorios aptos para Debian es reprepro.
Faheem Mitha
He encontrado reprepro útil
Gilles 'SO- deja de ser malvado'
Gracias por tus comentarios. @Faheem Mitha: ¿puede ampliar brevemente por qué sería necesario ejecutar aptcon --fix-brokendespués de instalar un paquete local con dpkg -i? ¿No se encargaría dpkg de eso? Yo leí que puede ser necesaria la primera vez que se ejecute apt? @ FM y Gilles: Acerca de reprepro . Parece útil si pudiera hacer que funcione (no estoy seguro sobre la estructura del directorio, el contenido de 3 archivos o los parámetros en tiempo de ejecución). Intentará nuevamente y actualizará o publicará la pregunta completa.
1
@ illuminÉ: dpkgno resuelve dependencias, pero lo apthace. dpkgadvertirá sobre dependencias rotas, pero es de bajo nivel, por lo que no intentará solucionarlas. El dpkg -i *.debseguido por apt-get -f installes el procedimiento estándar. Hay un error en la lista de deseos para aptmanejar el caso de la instalación del paquete local, e incluso hay un parche, creo, pero aún no se ha implementado. Ver apt-get install también podría instalar archivos de paquetes locales , originalmente archivados en 1999.
Faheem Mitha
@ illuminÉ Expresar interés en esta función no le hará daño. Creo que cuantas más personas expresen (cortésmente) interés, es más probable que se implemente. Tenga en cuenta también que gdebi es una alternativa, como se señala en el informe de error. Esa es parte de la razón por la que no se ha implementado, creo. Aunque tener esa funcionalidad básica parte de apt sería mejor que tener esta funcionalidad como parte de otro paquete.
Faheem Mitha

Respuestas:

29

Esto debe distinguirse de la situación en la que intenta replicar un árbol de paquete completo de un repositorio oficial y ajustar las prioridades de las fuentes . Los paquetes aleatorios significan paquetes virtuales, paquetes que se compilan localmente o se copian poco a poco con fines de prueba. Aquí hay una configuración simple basada en documentación ahora obsoleta .

Primero, haga un directorio para alojar los paquetes:

mkdir <packagedir>

Luego mueva sus archivos de paquete .deb allí. Ejecute este comando desde el directorio arriba del que acabamos de crear (¡asegúrese de que los permisos lo permitan!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Ahora crea un archivo con la extensión .listde /etc/apt/sources.list.d/los contenidos:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

y actualice la base de datos apt:

apt-get update

En este punto, los paquetes en nuestro repositorio local pueden instalarse como cualquier otro paquete que utilice apt-get install <packagename>. Cuando se agregan nuevos paquetes al repositorio local, el dpkg-scanpackagescomando prescrito debe emitirse nuevamente para actualizar el archivo Packages.gz y aptdebe actualizarse antes de que los nuevos paquetes estén disponibles. Esperemos que esto pueda ser útil para fines de prueba .

usuario44370
fuente
66
Con el nuevo apt 1.1, uno necesita [trusted=yes]entre deby el file:///URI (vea la sources.list(5)página del manual), de lo contrario apt-get updatefalla debido a la falta de firma.
vinc17
2

Si desea crear un repositorio con la estructura completa que necesita para herramientas como debootstrap, la forma más simple que he encontrado es:

  1. Crea un directorio de repositorio.

    # mkdir -p /opt/debian
    
  2. Crea un subdirectorio conf.

    # mkdir /opt/debian/conf
    
  3. Cree un archivo / opt / debian / conf / distributions con contenido como este (ajústelo según corresponda para la distribución que está utilizando):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Importa tu paquete con reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Importe un montón de paquetes con un shell for-loop, por ejemplo, todo desde su caché APT:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Esto creará un archivo sin firmar. Se puede usar con debootstrap con la opción --no-check-gpg.

Andrew Klaassen
fuente