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
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).
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.
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 .
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.
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).
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.
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>
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).
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.
Quizás también pueda considerar un Launchpad PPA
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
.