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.