Saltar al contenido

¿Cómo crear un repositorio APT local?

Recuerda que en las ciencias un error casi siempre tiene diferentes soluciones, pero nosotros aquí te compartimos lo más óptimo y eficiente.

Solución:

Desde la wiki de ayuda de Ubuntu:

Hay 4 pasos para configurar un repositorio simple para usted

1.Instalar dpkg-dev

2.Ponga los paquetes en un directorio
3.Cree un script que escanee los paquetes y cree un archivo que apt-get update pueda leer
4. Agregue una línea a su sources.list apuntando a su repositorio

Instalar dpkg-dev

Escribe una terminal

sudo apt-get install dpkg-dev

El directorio

Cree un directorio donde guardará sus paquetes. Para este ejemplo, usaremos /usr/local/mydebs.

sudo mkdir -p /usr/local/mydebs

Ahora mueva sus paquetes al directorio que acaba de crear.

Los paquetes descargados previamente generalmente se almacenan en su sistema en el /var/cache/apt/archives directorio. Si ha instalado apt-cacher, tendrá paquetes adicionales almacenados en su directorio / packages.

El script update-mydebs

Es un simple trazador de líneas de tres:

#! /bin/bash
 cd /usr/local/mydebs
 dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Corta y pega lo anterior en gedit y guárdalo como update-mydebs en ~ / bin. (la tilde ‘~’ significa su directorio de inicio. Si ~ / bin no existe, créelo: Ubuntu pondrá ese directorio en su RUTA. Es un buen lugar para poner scripts personales). A continuación, haga que el script sea ejecutable:

chmod u+x ~/bin/update-mydebs

How the script works:

dpkg-scanpackages examina todos los paquetes en mydebs, y la salida se comprime y se escribe en un archivo (Packages.gz) que apt-get update puede leer (consulte a continuación para obtener una referencia que explica esto con un detalle insoportable). / dev /null es un archivo vacío; es un sustituto de un archivo de anulación que contiene información adicional sobre los paquetes, que en este caso no es realmente necesaria. Consulte deb-override (5) si desea conocerlo.

Sources.list

agrega la línea

deb file:/usr/local/mydebs ./

a su /etc/apt/sources.list, y ya está.

Opción de CD

Puede grabar el directorio que contiene los debs en un CD y usarlo también como repositorio (bueno para compartir entre computadoras). Para usar el CD como repositorio, simplemente ejecute

sudo apt-cdrom add

Usando el repositorio

Siempre que ponga un nuevo deb en el directorio mydebs, ejecute

sudo update-mydebs
sudo apt-get update

Ahora sus paquetes locales pueden manipularse con los comandos Synaptic, aptitude y apt: apt-get, apt-cache, etc. Cuando intente instalar apt-get, se resolverán todas las dependencias, siempre que se puedan cumplir .

Los paquetes mal hechos probablemente fallarán, pero no habrás soportado el infierno de dpkg.

*Para hacer un repositorio sin conexión a través de LAN *

Instalar un servidor web Apache local

# apt-get install apache2

De forma predeterminada, el paquete Apache de Debian configurará un sitio web en /var/www en su sistema. Para nuestros propósitos, está bien, así que no hay razón para hacer nada más. Puede probarlo fácilmente apuntando su navegador favorito a http://localhost Debería ver la página web predeterminada posterior a la instalación que en realidad está almacenada en /var/www/index.html

Crear un directorio de repositorio de paquetes de Debian

eligió crear un directorio /var/www/debs para esto. Debajo, debe crear directorios de “arquitectura”, uno para cada arquitectura que necesite admitir. Si está usando solo una computadora (o tipo de computadora), entonces solo necesitará una, generalmente “i386” para sistemas de 32 bits o “amd64” para 64 bits. Si está utilizando alguna otra arquitectura, asumiré que probablemente ya lo sepa. Ahora simplemente copie los archivos del paquete “.deb” para una arquitectura dada en los directorios apropiados. Si ahora apunta su navegador web favorito a http://localhost/debs/amd64 (por ejemplo) verá una lista de los paquetes para sistemas de 64 bits.

Cree un archivo Packages.gz

Ahora necesitamos crear un archivo de catálogo para que lo use APT. Esto se hace con una utilidad llamada “dpkg-scanpackages”. Estos son los comandos que utilizo para actualizar los paquetes AMD64 en mi LAN:

# cd /var/www/debs/

# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz

Dar a conocer el repositorio a APT

Ahora lo único que queda por hacer es informar a APT sobre su repositorio. Para ello, actualice su archivo /etc/apt/sources.list. Necesitará una entrada como esta:

deb http://localhost/debs/ amd64/

Usé el nombre de host real de mi sistema en lugar de localhost; de esta manera, el código es el mismo para todas las computadoras en mi LAN, pero localhost funcionará bien si está ejecutando solo una computadora.
Ahora, actualice APT:

# apt-get update

Creación de un repositorio autenticado

He echado un vistazo a las respuestas aquí y en otros sitios y la mayoría tiene la (en mi humilde opinión, gran) desventaja de que está configurando un repositorio no autenticado. Esto significa que necesitas correr apt-get con --allow-unauthenticated para instalar paquetes desde él. Esto puede ser un riesgo para la seguridad, especialmente en scripts donde los paquetes que está instalando pueden no ser todos de su repositorio local.

Tenga en cuenta que no he cubierto aquí cómo hacer que esté disponible a través de la LAN, pero esa es una configuración bastante genérica usando Apache o nginx (vea las otras respuestas aquí).

Configurar el directorio de repositorio

mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial

Luego agregue una línea como esta a sources.list:

deb file:/home/srv/packages/local-xenial/ ./

Agregar y eliminar paquetes

eliminar paquetes

rm /home/srv/packages/local-xenial/some_package_idont_like

agregar paquetes

cp /some/dir/apackage.deb /home/srv/packages/local-xenial

ahora ejecute el siguiente script que genera los archivos Packages, Release e InRelease y los firma con su gpg privado key:

#!/bin/bash

if [ -z "$1" ]; then
       echo -e "usage: `basename $0` DISTRO
where DISTRO is the Ubuntu version codename (e.g. 14.04 is trusty)n
The way to use this script is to do the changes to the repo first, i.e. delete or copy in the .deb file to /srv/packages/local-DISTRO, and then run this scriptn
This script can be run as an unprivileged user - root is not needed so long as your user can write to the local repository directory"
else
    cd /srv/packages/local-"$1"

    # Generate the Packages file
    dpkg-scanpackages . /dev/null > Packages
    gzip --keep --force -9 Packages

    # Generate the Release file
    cat conf/distributions > Release
    # The Date: field has the same format as the Debian package changelog entries,
    # that is, RFC 2822 with time zone +0000
    echo -e "Date: `LANG=C date -Ru`" >> Release
    # Release must contain MD5 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e 'MD5Sum:' >> Release
    printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf 'n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
    # Release must contain SHA256 sums of all repository files (in a simple repo just the Packages and Packages.gz files)
    echo -e 'nSHA256:' >> Release
    printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
    printf 'n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release

    # Clearsign the Release file (that is, sign it without encrypting it)
    gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
    # Release.gpg only need for older apt versions
    # gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release

    # Get apt to see the changes
    sudo apt-get update
fi

Contenido de ejemplo del archivo conf / distribuciones

Origin: My_Local_Repo
Label: My_Local_Repo
Codename: xenial
Architectures: i386 amd64
Components: main
Description: My local APT repository
SignWith: 12345ABC

Enlaces

https://wiki.debian.org/RepositoryFormat

http://ubuntuforums.org/showthread.php?t=1090731

https://help.ubuntu.com/community/CreateAuthenticatedRepository

¡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 *