Je souhaite créer mon propre référentiel local sur mon réseau local, afin que les machines du réseau local puissent se mettre à jour et se mettre à niveau. Je souhaite télécharger les packages et les stocker sur mon serveur local afin de pouvoir les mettre à jour, mettre à niveau, installer, etc. sans utiliser Internet.
* Pour créer un référentiel hors ligne sur un 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 notre propos, c'est bien, il n'y a donc aucune raison de faire autre chose. Vous pouvez facilement le tester en pointant votre navigateur favori sur http://localhost
. La page Web de post-installation par défaut devrait s'afficher, elle-même stockée dans /var/www/index.html
.
Créez un répertoire de référentiel 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 à prendre en charge. Si vous n'utilisez qu'un seul ordinateur (ou type d'ordinateur), vous n'en aurez besoin que d'un seul: généralement "i386" pour les systèmes 32 bits ou "AMD64" pour 64 bits. Si vous utilisez une autre architecture, je suppose que vous êtes probablement déjà au courant. Maintenant, copiez simplement les fichiers de package ".deb" pour une architecture donnée dans les répertoires appropriés. Si vous pointez maintenant votre navigateur Web favori sur http://localhost/debs/AMD64
(par exemple), vous verrez une liste des packages pour les systèmes 64 bits.
Créer un fichier Packages.gz
Nous devons maintenant créer un fichier catalogue que APT peut utiliser. Ceci est fait avec un utilitaire appelé "dpkg-scanpackages". Voici les commandes que j'utilise pour mettre à jour les paquets AMD64 sur mon réseau local:
# cd /var/www/debs/
# dpkg-scanpackages AMD64 | gzip -9c > AMD64/Packages.gz
Faire connaître le référentiel à APT
Il ne reste maintenant qu’à informer APT de votre référentiel. Pour cela, vous devez mettre à 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. Ainsi, le code est le même pour tous les ordinateurs de mon réseau local, mais localhost fera l'affaire si vous n'exécutez qu'un seul ordinateur.
Maintenant, mettez à jour APT:
# apt-get update
Depuis le wiki d'aide Ubunt :
Il y a 4 étapes pour créer un référentiel simple pour vous-même
1.Installer
dpkg-dev
2. Mettez les paquets dans un répertoire
3.Créez un script qui analysera les paquets et créera un fichier que apt-get update peut lire
4. Ajouter une ligne à votre sources.list pointant sur votre référentielInstallez dpkg-dev
Tapez un terminal
Sudo apt-get install dpkg-dev
Le répertoire
Créez un répertoire dans lequel vous garderez vos paquets. Pour cet exemple, nous utiliserons
/usr/local/mydebs.
Sudo mkdir -p /usr/local/mydebs
Maintenant, déplacez vos paquets dans le répertoire que vous venez de créer.
Les packages précédemment téléchargés sont généralement stockés sur votre système dans le répertoire
/var/cache/apt/archives
. Si vous avez installé apt-cacher, vous aurez des paquets supplémentaires stockés 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, puis enregistrez-le sous update-mydebs dans ~/bin. (Le tilde '~' signifie votre répertoire personnel. Si ~/bin 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 script exécutable:
chmod u+x ~/bin/update-mydebs How the script works:
dpkg-scanpackages examine tous les paquets dans mydebs, et le résultat est compressé et écrit dans un fichier (Packages.gz) qu'apt-get update peut lire (voir ci-dessous pour une référence qui explique cela en détail insoutenable)./dev/null est un fichier vide; c'est un substitut à un fichier de substitution qui contient des informations supplémentaires sur les packages, qui dans ce cas n'est pas vraiment nécessaire. Voir deb-override (5) si vous voulez en savoir plus.
Sources.list
ajouter la ligne
deb file:/usr/local/mydebs ./
sur 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 également comme référentiel (idéal pour le partage entre ordinateurs). Pour utiliser le CD en tant que référentiel, lancez simplement
Sudo apt-cdrom add
Utiliser le référentiel
Chaque fois que vous mettez un nouveau deb dans le répertoire mydebs, lancez
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 d'installer apt-get, toutes les dépendances seront résolues pour vous, à condition qu'elles puissent être satisfaites. .
Les paquets mal faits vont probablement échouer, mais vous n'aurez pas enduré l'enfer de dpkg.
Création d'un référentiel authentifié
J'ai jeté un coup d'œil aux réponses ici et sur d'autres sites et la plupart ont le désavantage (grand IMHO) de configurer un référentiel non authentifié. Cela signifie que vous devez exécuter apt-get
avec --allow-unauthenticated
pour installer les packages à partir de celui-ci. Cela peut constituer un risque pour la sécurité, en particulier dans les scripts où les packages que vous installez ne proviennent peut-être pas tous de votre référentiel local.
Notez que je n’ai pas expliqué ici comment 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).
Configurez le répertoire du dépôt
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 packages
supprime les packages
rm /home/srv/packages/local-xenial/some_package_idont_like
ajoute des packages
cp /some/dir/apackage.deb /home/srv/packages/local-xenial
lance 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 le serveur source local par nginx et reprepro:
Installer les paquets Debian
Sudo apt-get install reprepro nginx
faire des répertoires pour reprepro et le modifier
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 .
Incluez-le dans reprepro, construisez-le
$ 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
Config 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
Vous voudrez peut-être jeter un oeil à apt-mirror
et apt-cacher
.
Voici un guide sur comment installer et l'utiliser.
Il est possible que vous souhaitiez créer un référentiel local pour plusieurs raisons. La première est que vous souhaitez économiser sur la bande passante si vous devez mettre à jour plusieurs machines Ubuntu. Par exemple, si vous avez 25 machines Ubuntu devant toutes être mises à jour au moins une fois par semaine, vous économiserez beaucoup de bande passante, car vous pourriez tout faire localement, à l'exception du référentiel.
La plupart des organisations ont une bande passante décente pour leurs passerelles réseau, mais cette bande passante est un produit précieux qui doit être utilisé à bon escient.
De nombreuses entreprises ont toujours des routeurs avec des limites de 10 ou 100 Mo au niveau de la passerelle, mais des connexions réseau de 1 Go en interne afin d'optimiser l'utilisation de la bande passante en interne. La deuxième raison de la création de votre propre référentiel est que vous pouvez contrôler les applications chargées sur vos machines Ubuntu internes.
Vous pouvez supprimer toutes les applications que votre organisation ne souhaite pas utiliser sur le réseau local du référentiel qui met à jour les ordinateurs. Mieux encore, vous pouvez créer une boîte de test et tester des applications et des versions avant de les autoriser à se déployer sur votre réseau, garantissant sécurité et stabilité.
Vous devez d’abord installer un miroir. Pour ce faire, il vous suffit d’appuyer sur Ctrl+Alt+T sur votre clavier pour ouvrir Terminal. Quand il s'ouvre, lancez la commande ci-dessous.
apt-get install apt-mirror
Une fois que vous avez configuré apt-mirror, vous pouvez lancer le téléchargement du référentiel avec cette commande.
apt-mirror /etc/apt/mirror.list1
1 Source: créer un référentiel Ubunt
Les instructions dans réponse de BigSack et publication officielle sur le wiki d'Ubunt ne fonctionnaient pas pour moi sur Ubuntu 18.04, jusqu'à ce que je fasse ces deux modifications:
Générez un fichier Packages
simple et non compressé (lors de l’exécution de ce dernier, le répertoire de travail doit être là où se trouvent tous les packages).
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 ./
Pour créer un référentiel local hors ligne
1. rendre un répertoire accessible (au moins par root)
Sudo mkdir/var/mon-local-repo
Sudo dpkg-scanpackages/var/mon-rep-local/dev/null>/var/mon-rep-local/Packages
echo "fichier deb:/var/my-local-repo ./"> /tmp/my-local.list
Sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list
Sudo apt-get update
J'ai essayé d'utiliser apt-rdepends
comme dans la réponse sélectionnée, mais lorsque j'ai essayé d'installer le paquet à partir de mon référentiel local, il s'est plaint des dépendances manquantes.
apt-rdepends
ne listait pas certaines des dépendances de mon paquet. Je suppose que cela a quelque chose à voir avec le fait que apt-cache show
montre plusieurs enregistrements pour cela.
Au lieu de cela, j'ai utilisé apt-cache depends
, et c'est ce qui a joué:
Obtenir une liste récursive de dépendances
apt-cache depends <packagename> -i --recurse
-i
: dépendances importantes uniquement --recurse
: récursif
le transformer en une liste digestible
| tr -d "|,<,>, "
| sed -e 's/^Depends://g' | sed -e 's/^PreDepends://g'
| sort
| uniq > list.txt
Commande complète:
apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt
Télécharger les packages
for i in $( cat list.txt ); do apt-get download $i; done;
Rechercher les paquets et les transformer en packages.gz
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz