Saltar al contenido

¿Cómo configurar un repositorio APT?

Solución:

Solo configura un repositorio simple pero firmado en un servidor web. Debido a que 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 sencillo script de compilación hace que sea fácil de administrar. Y puedes simplemente dejar caer una nueva *.deb archivos, luego actualícelos o deje que un trabajo cron se encargue de eso.

Genera algunas claves de firma

Primero necesitas crear un gpg clave de firma para paquetes y su repositorio. Conviértalo en una (4) clave de firma RSA, sin contraseña, y asígnele una $KEYNAME 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

Dije que no hay 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 al nuevo /apt/ directorio de repositorio en su servidor web, pero elimine el secret.gpg llave después inicialización.

Actualizar el script CGI

Este es el script de shell / CGI de actualización simple 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

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

Una característica única de este pequeño script de shell es que acepta cualquier *.deb archivos que ingresa, pero también busca de forma recursiva (comenzando desde un nivel hacia arriba) para otros, y los vincula simbólicamente (necesita .htaccess Options FollowSymLinks finalmente.)

Puede ejecutar este script manualmente como CGI o por trabajo cron. Pero escóndelo, o mejor aún, sácalo de la raíz del documento.

Debido a que es un repositorio de apt “trivial”, necesita lo siguiente apt-sources.list entrada:

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

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

Firma de paquetes

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

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

(Esto debe hacerse en la estación de trabajo donde se compilan 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 una marca personalizada para apt.sources:

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

Pero por favor no uses el trusted=yes marque habitualmente para todo, o si no está seguro del origen del paquete.

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

Actualmente, existen algunas herramientas para automatizar la gestión de repositorios. E incluso hay servidores de repositorio en línea y servicios de creación de paquetes (gemfury, packagecloud, bintray, etc.)

  • Una alternativa bastante conveniente es prm. Es un script Ruby, que crea repositorios APT y YUM complejos. (Pero esperemos que RPM finalmente se extinga pronto …) – Es mejor instalarlo por gem install prm.

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

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

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

Si. 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í hay una descripción detallada de cómo se deben organizar los archivos y cómo se crean los archivos de índice.

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *