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 gpg
clave de firma para los paquetes y su repositorio. Conviértalo en una (4) clave de firma RSA, sin contraseña, y dele una única $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
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 /apt/
directorio del repositorio en su servidor web, pero elimine la secret.gpg
clave 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 gpg
líneas solo necesitan ejecutarse una vez, para inicializar la configuración de GPG en algún directorio $GNUPGHOME
(arriba 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
archivo 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
eventualmente).
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 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 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 aún pueden usar los usuarios promedio, pero necesita un indicador personalizado para apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Pero no use la trusted=yes
bandera 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
Hay algunas herramientas para automatizar la gestión de repositorios en estos días. E incluso hay repositorios 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 construye complejos APT y YUM repos. (Pero esperemos que RPM finalmente desaparezca 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 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).