J'aimerais créer mon propre référentiel local sur mon réseau local, afin que les machines du réseau puissent effectuer des mises à jour et des mises à niveau à partir de celui-ci. Je veux télécharger les paquets et les stocker sur mon serveur local afin de pouvoir effectuer des mises à jour, des mises à niveau, des installations, etc. à partir de celui-ci, sans utiliser Internet.
Réponses
Trop de publicités?De la Wiki d'aide Ubuntu :
La mise en place d'un référentiel simple se fait en 4 étapes
1.Installer
dpkg-dev
2. mettre les paquets dans un répertoire
3. créer un script qui va analyser les paquets et créer un fichier qu'apt-get update peut lire.
4. Ajoutez une ligne à votre sources.list pointant vers votre dépôtInstaller dpkg-dev
Tapez dans un terminal
sudo apt-get install dpkg-dev
L'annuaire
Créez un répertoire où vous conserverez vos paquets. Pour cet exemple, nous utiliserons
/usr/local/mydebs.
sudo mkdir -p /usr/local/mydebs
Déplacez maintenant vos paquets dans le répertoire que vous venez de créer.
Les paquets précédemment téléchargés sont généralement stockés sur votre système dans le répertoire suivant le site
/var/cache/apt/archives
répertoire. Si vous avez installé apt-cacher, vous aurez des paquets supplémentaires stockés dans son répertoire /packages dans son répertoire /packages.Le script update-mydebs
C'est un simple trois lignes :
#! /bin/bash cd /usr/local/mydebs dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
Coupez et collez ce qui précède dans gedit, et sauvegardez-le en tant que update-mydebs dans le fichier ~/bin. (le tilde '~' signifie votre répertoire personnel. Si ~/bin n'existe pas n'existe pas, créez-le : Ubuntu mettra ce répertoire dans votre PATH. C'est un bon endroit pour mettre des scripts personnels). Ensuite, rendez le scripts exécutable :
chmod u+x ~/bin/update-mydebs How the script works:
dpkg-scanpackages examine tous les paquets de mydebs, et la sortie est compressée et écrite dans un fichier (Packages.gz) qu'apt-get update peut lire (voir ci-dessous pour une référence qui explique cela en détails). /dev/null est un fichier vide ; c'est un substitut d'un fichier d'un fichier de remplacement qui contient des informations supplémentaires sur les paquets. paquets, ce qui n'est pas vraiment nécessaire dans ce cas. Voir deb-override(5) si vous voulez en savoir plus.
Sources.list
ajouter la ligne
deb file:/usr/local/mydebs ./
à votre /etc/apt/sources.list, et vous avez terminé.
Option CD
Vous pouvez graver le répertoire contenant les debs sur un CD et l'utiliser en tant que et l'utiliser également comme référentiel (idéal pour le partage entre ordinateurs). Pour utiliser le comme référentiel, exécutez simplement
sudo apt-cdrom add
Utilisation du référentiel
Chaque fois que vous mettez un nouveau deb dans le répertoire mydebs, exécutez
sudo update-mydebs sudo apt-get update
Maintenant, vos paquets locaux peuvent être manipulés avec Synaptic, aptitude et les commandes apt : apt-get, apt-cache, etc. Lorsque vous essayez de faire un apt-get d'installer, toutes les dépendances seront résolues pour vous, tant qu'elles peuvent être satisfaites.
Les paquets mal faits échoueront probablement, mais vous n'aurez pas enduré l'enfer de dpkg.
* Pour créer un dépôt hors ligne sur le réseau local *.
Installer un serveur web Apache local
# apt-get install apache2
Par défaut, le paquet Apache de Debian configurera un site web sous /var/www
sur votre système. Pour nos besoins, c'est très bien, il n'y a donc aucune raison de faire quelque chose de plus. Vous pouvez facilement le tester en faisant pointer votre navigateur préféré sur http://localhost
Vous devriez voir la page web de post-installation par défaut qui est en fait stockée dans le fichier /var/www/index.html
Créer un répertoire du dépôt de paquets Debian
a choisi de créer un répertoire /var/www/debs
pour cela. Sous celui-ci, vous devez créer des répertoires "architecture", un pour chaque architecture que vous devez prendre en charge. Si vous n'utilisez qu'un seul ordinateur (ou type d'ordinateur), vous n'en aurez besoin que d'un seul -- typiquement "i386" pour les systèmes 32 bits ou "amd64" pour 64 bits. Si vous utilisez une autre architecture, je suppose que vous êtes déjà au courant. Il ne vous reste plus qu'à copier les fichiers de paquets ".deb" pour une architecture donnée dans les répertoires appropriés. Si vous pointez maintenant votre navigateur web préféré sur http://localhost/debs/amd64
(par exemple), vous verrez une liste des paquets pour les systèmes 64 bits.
Créer un fichier Packages.gz
Maintenant, nous devons créer un fichier de catalogue à utiliser par APT. Ceci est fait avec un utilitaire appelé "dpkg-scanpackages". Voici les commandes que j'utilise pour mettre à jour les paquets AMD64 sur mon LAN :
# cd /var/www/debs/
# dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz
Faire connaître le référentiel à APT
Maintenant, la seule chose qui reste à faire est de faire connaître à APT votre référentiel. Vous faites cela en mettant à jour votre fichier /etc/apt/sources.list. Vous aurez besoin d'une entrée comme celle-ci :
deb http://localhost/debs/ amd64/
J'ai utilisé le nom d'hôte réel de mon système au lieu de localhost - de cette façon, le code est le même pour tous les ordinateurs de mon réseau local, mais localhost fera l'affaire si vous n'utilisez qu'un seul ordinateur.
Maintenant, mettez à jour APT :
# apt-get update
Création d'un référentiel authentifié
J'ai jeté un coup d'oeil aux réponses ici et sur d'autres sites et la plupart ont le (gros IMHO) inconvénient que vous mettez en place un référentiel non authentifié. Cela signifie que vous devez exécuter apt-get
con --allow-unauthenticated
pour installer des paquets à partir de celui-ci. Cela peut constituer un risque pour la sécurité, notamment dans les scripts où les paquets que vous installez peuvent ne pas tous provenir de votre dépôt local.
Notez que je n'ai pas couvert ici la façon de le rendre disponible sur le réseau local, mais c'est une configuration assez générique utilisant Apache ou nginx (voir les autres réponses ici).
Configurer le répertoire repo
mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial
Ajoutez ensuite une ligne comme celle-ci à sources.list
:
deb file:/home/srv/packages/local-xenial/ ./
Ajout et suppression de paquets
supprimer les paquets
rm /home/srv/packages/local-xenial/some_package_idont_like
ajouter des paquets
cp /some/dir/apackage.deb /home/srv/packages/local-xenial
Exécutez maintenant le script suivant qui génère les fichiers Packages, Release et InRelease et les signe avec votre clé privée gpg :
#!/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 script\n
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
Exemple Contenu du fichier conf/distributions
Origin: My_Local_Repo Label: My_Local_Repo Codename: xenial Architectures: i386 amd64 Components: main Description: My local APT repository SignWith: 12345ABC
Liens
https://wiki.debian.org/RepositoryFormat
http://ubuntuforums.org/showthread.php?t=1090731
https://help.ubuntu.com/community/CreateAuthenticatedRepository
Vous pouvez également configurer un serveur source local par nginx et reprepro :
-
Installer les paquets debian
sudo apt-get install reprepro nginx
-
créer des répertoires pour reprepro et l'éditer
sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp} $ cd /srv/reprepro/ubuntu/ $ sudo chown -R `whoami` . # changes the repository owner to the current user
/srv/reprepro/ubuntu/conf/distributions
Origin: Your Name Label: Your repository name Codename: karmic Architectures: i386 amd64 source Components: main Description: Description of repository you are creating SignWith: YOUR-KEY-ID
/srv/reprepro/ubuntu/conf/options
ask-passphrase basedir .
-
L'inclure dans reprepro, le construire
$ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \ # change /path/to/my-package_0.1-1.deb to the path to your package
-
Configurer nginx :
/etc/nginx/sites-available/vhost-packages.conf
server { listen 80; server_name packages.internal; access_log /var/log/nginx/packages-access.log; error_log /var/log/nginx/packages-error.log; location / { root /srv/reprepro; index index.html; } location ~ /(.*)/conf { deny all; } location ~ /(.*)/db { deny all; } }
-
Optimiser la taille du seau :
/etc/nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;
Référence à Lien vers le guide d'installation
Les instructions dans La réponse de @BigSack y Le post officiel du wiki d'Ubuntu ne fonctionnait pas pour moi sur Ubuntu 18.04, jusqu'à ce que je fasse ces deux changements :
-
Générer un fichier simple, non compressé
Packages
(lors de l'exécution de ce fichier, le répertoire de travail doit être l'endroit où se trouvent tous les paquets)cd /usr/local/mydebs dpkg-scanpackages -m . > Packages
-
Ajoutez l'entrée suivante dans
/etc/apt/sources.list
deb [trusted=yes] file:/usr/local/mydebs ./
- Réponses précédentes
- Plus de réponses