it-swarm-es.com

¿Cómo configurar un repositorio APT?

Me gustaría configurar un repositorio APT en un servidor que proporcionará un par de paquetes.

¿Hay alguna manera de configurar uno sin instalar ningún software en el servidor?

¿Cómo deben organizarse los archivos?


Editar: Debo estar haciendo algo mal ... ¿alguien puede ayudarme? Tengo el repositorio en http://quickmediasolutions.com/apt/dists

No estoy seguro de dónde o qué, pero algo está mal configurado. Actualmente solo tengo un paquete y es para todas las arquitecturas.

Esto es lo que se ha agregado a mi /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

Configurar un repositorio trivial es muy fácil usando dpkg-scanpackages. Esta página explica cómo configurar un repositorio trivial y este explica cómo usarlo (desplácese hacia abajo hasta el ejemplo 4).

26
Michael Crenshaw

Simplemente configure un repositorio simple pero firmado en un servidor web. Como la mayoría de los otros tutoriales son algo anticuados o engorrosos, intentaré replicar el procedimiento aquí. La configuración inicial requiere un poco de esfuerzo, pero el script de compilación simple lo hace fácil de administrar. Y simplemente puede colocar nuevos *.deb archivos, luego actualizar o dejar que un trabajo cron se encargue de eso.

Generar algunas claves de firma

Primero debe crear una clave de firma gpg para los paquetes y su repositorio. Conviértalo en una (4) clave de firma RSA, sin contraseña, y asígnele un $KEYNAME único cuando se le solicite. (Otros ejemplos suponen "dpkg1" como nombre clave).

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Le dije que no tenía contraseña, porque su servidor web no tiene un mono incorporado para escribirlo repetidamente. Y los paquetes y el repositorio firmados solo están destinados a satisfacer las quejas de los administradores de actualizaciones al respecto. Simplemente cargue ambas claves en el nuevo directorio de repositorio /apt/ en su servidor web, pero elimine la clave secret.gpg después de la inicialización .

Actualizar script CGI

Este es el script simple de Shell/CGI de actualización para él:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

Las tres líneas gpg solo necesitan ejecutarse una vez, para inicializar la configuración de GPG en algún directorio $GNUPGHOME (arriba de la raíz del documento). Elimine solo el secret.gpg después del éxito.

Una característica única de este pequeño script de Shell es que acepta cualquier archivo *.deb que coloque, pero también busca de forma recursiva (a partir de un nivel superior) para otros, y los vincula simbólicamente. (Necesita .htaccess Options FollowSymLinks finalmente.)

Puede ejecutar este script manualmente como CGI o por cron-job. Pero escóndelo, o mejor aún, muévelo fuera de la raíz del documento.

Debido a que es un repositorio apt "trivial", necesita la siguiente entrada apt-sources.list:

deb http://example.org/deb/  ./    # Simple signed repo

Eso es adecuado para repositorios de arquitectura única, y si no espera cientos de paquetes.

Firma del paquete

Firmar sus paquetes individuales también es trivial, una vez que haya configurado sus claves gpg:

dpkg-sig -k dpkg1 -s builder *.deb

(Esto debe hacerse en la estación de trabajo donde se crean los paquetes, no en el servidor web del repositorio).

Repositorio sin firmar

Si no necesita paquetes firmados, puede reducir el script de actualización a solo:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Que todavía pueden usar los usuarios promedio, pero necesita un indicador personalizado para apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

Pero por favor no use la bandera trusted=yes habitualmente para todo, o si no está realmente seguro sobre el paquete Origin.

Por usabilidad

Para los usuarios finales, simplemente suelte un HEADER.html en el directorio del repositorio. Apaches mod_auto_index antepondrá esa nota:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | Sudo apt-key add -</kbd>
</dl>

Alternativas

Hay algunas herramientas para automatizar la gestión de repositorios en estos días. E incluso hay servicios de alojamiento de paquetes en línea y repositorios en línea ( gemfury , packagecloud , bintray etc.)

  • Una alternativa bastante conveniente es prm . Es una secuencia de comandos Ruby, que crea complejos APT y repositorios YUM. (Pero esperemos que RPM finalmente se extinga pronto ...) - Se instala mejor por gem install prm.

  • Y también he escrito un pequeño script para automatizar esto de manera similar: http://apt.include-once.org/apt-phparchive - Por favor, no es que no sea demasiado robusto y esté escrito en PHP (por una vez, esto es una coincidencia), y originalmente estaba destinado a DEB y paquetes RPM-over-APT y Phar.

Dado que esto está estrechamente relacionado con la pregunta original, también hay herramientas para construir paquetes Debian más fácilmente. Algo anticuado: EPM . Mucho más contemporáneo: FPM . Y mi bifurcación personal: XPM (enfoque más vago para empaquetar aplicaciones de lenguaje de scripting).

40
mario

Sí. Puedes hacerlo. Solo necesita organizar los archivos de la manera correcta y crear los archivos de índice. Si coloca la estructura del directorio dentro de la raíz del documento de su servidor web, se puede acceder a los paquetes a través del servidor web.

Aquí es una descripción detallada de cómo deben organizarse los archivos y cómo se crean los archivos de índice.

También puede usar una herramienta llamada reprepro si está dispuesto a instalar ese paquete. Esto hará que la administración sea un poco más conveniente.

7
txwikinger

Quizás también pueda considerar un Launchpad PPA

2
ups

Para cualquiera que se enfrente a este error después de seguir la respuesta de Mario:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

haz lo siguiente:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Puse mis archivos *.deb en la carpeta debs.

0
theeminence