Mettre en place un dépôt de paquets

En cours de développement, pour mémoire.

Introduction

Objectif d’un dépôt local :

  • Se passer d’un dépôt distant (pour des raisons de sécurité ou de performance)
  • Diminuer le temps et la bande passante consommée par des mise-à-jour et des installations
  • Offrir des dépôts de paquets supplémentaires

Cas envisagés :

  • Dépôt local Centos 7 avec une image iso
  • Dépôt Web Centos 7 avec une image iso

Plus gourmand en ressources :

  • Dépôt complet Centos 7 synchronisé avec les dépôts de référence
  • Dépôt Debian 8

1. Dépôt local Centos 7 avec une image iso

Se procurer un iso DVD de Centos 7 à partir de https://www.centos.org/download/mirrors/.

Monter l’iso dans un répertoire.

mkdir /mnt/iso
mount -o loop,ro CentOS*.iso /mnt/iso
ls /mnt/iso
CentOS_BuildTag  GPL	   LiveOS    RPM-GPG-KEY-CentOS-7
EFI		 images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA		 isolinux  repodata  TRANS.TBL

Créer un fichier .repo dans /etc/yum.repos.d/.

cat << EOF > /etc/yum.repos.d/CentOS-Local.repo
[Local]
name=Local Repo
baseurl=file:///mnt/iso
enabled=1
gpgcheck=0

EOF

Ensuite mettre à jour la liste de dépôts.

yum repolist

Une définition de dépôt avec authentification des sources.

cat << EOF > /etc/yum.repos.d/CentOS-Local.repo
[Local]
name=Local Repo
baseurl=file:///mnt/iso
enabled=1
gpgcheck=1
gpgkey=file:////mnt/iso/RPM-GPG-KEY-CentOS-7

EOF

2. Dépôt Web Centos 7 avec une image iso

Se procurer un iso DVD de Centos 7 à partir de https://www.centos.org/download/mirrors/.

Installer Apache.

yum install -y httpd

Monter l’iso.

mkdir /mnt/iso
mount -o loop,ro CentOS*.iso /mnt/iso

Copier le contenu du DVD dans /var/www/html/repo/CentOS/7/os/x86_64.

mkdir -p /var/www/html/repo/CentOS/7/os/x86_64
cd /mnt/iso
tar cvf - . | (cd /var/www/html/repo/CentOS/7/os/x86_64; tar xvf -)

Création des métadonnées des paquets et de la base de données sqlite.

yum -y install createrepo
createrepo /var/www/html/repo/CentOS/7/os/x86_64/

Assigner les attributs Selinux aux nouveaux fichiers.

restorecon -R /var/www/html

Démarrer Apache

systemctl enable httpd && systemctl start httpd

Installer de dépôt avec l’adresse de localhost en http.

cat << EOF > /etc/yum.repos.d/CentOS-Web.repo
[Web]
name=Web Local Repository
baseurl=https://localhost/repo/CentOS/7/os/x86_64
gpgcheck=1
gpgkey=https://localhost/repo/CentOS/7/os/x86_64/RPM-GPG-KEY-CentOS-7
EOF

yum repolist

Mise à jour du dépôt :

  • Miroir de synchronisation
  • Rsync avec critères exclusifs
  • createrepo --update pour mettre à jour les métadonnées des paquets et la base de données sqlite.

3. upstream_sync

#!/bin/bash
# Script to install upstream_sync.py
# To sync several repositories using reposync
# Tested with Centos 7
# 1. Set variables
destination_path="/opt/mirror/upstream"
executable_destination="/usr/local/bin"
requirements="pyOpenSSL createrepo git"
config_path="/etc/upstream_sync"
file_name="centos"
# 2. Install requirements
yum -y install ${requirements}
# 3. Create the config file
mkdir -p ${config_path}
cat << EOF > ${config_path}/${file_name}.repo
[centos-7-x86_64-os]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/os/x86_64/
path = centos/7/x86_64/os
createrepo = true

[centos-7-x86_64-extras]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/extras/x86_64/
path = centos/7/x86_64/extras
createrepo = true
[epel-7-x86_64]
url = https://mirror.23media.com/epel/7/x86_64/
path = centos/7/x86_64/epel
createrepo = true

[centos-7-x86_64-centosplus]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/centosplus/x86_64/
path = centos/7/x86_64/centosplus
createrepo = true

[centos-7-x86_64-updates]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/updates/x86_64/
path = centos/7/x86_64/updates
createrepo = true

[centos-7-x86_64-ansible-29]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/configmanagement/x86_64/ansible-29/
path = centos/7/x86_64/ansible-29
createrepo = true

[centos-7-x86_64-kvm-common]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/virt/x86_64/kvm-common/
path = centos/7/x86_64/kvm-common
createrepo = true

# php72, php73, rubygem, vagrant, vagrant-libvirt
[centos-7-x86_64-sclo]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/sclo/x86_64/sclo/
path = centos/7/x86_64/sclo
createrepo = true

[centos-7-x86_64-samba-411]
url = http://ftp.belnet.be/mirror/ftp.centos.org/7/storage/x86_64/samba-411/
path = centos/7/x86_64/samba-411
createrepo = true

[zabbix-4.2-centos7-x86_64-samba-411]
url = https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/
path = centos/7/x86_64/zabbix-4.2
createrepo = true

[remi-php72-centos7-x86_64]
url = http://remi.mirrors.cu.be/enterprise/7/php72/x86_64/
path = centos/7/x86_64/remi-php72
createrepo = true

# Set your mariadb version
# See http://yum.mariadb.org
[mariadb-10.5-centos7-x86_64]
url = http://yum.mariadb.org/10.5/centos7-amd64/
path = centos/7/x86_64/mariadb-10.5
createrepo = true

# See if you want use Docker
[docker-ce-stable-centos7-x86_64]
url = https://download.docker.com/linux/centos/7/x86_64/stable/
path = centos/7/x86_64/docker-ce-stable
createrepo = true
EOF
# 4. Get the upstream_sync script
git clone https://github.com/goffinet/upstream_sync ~/upstream_sync
# 5. Fix the MIRROR_DIR env var
export MIRROR_DIR="${destination_path}"
# 6. Install the script
cp ~/upstream_sync/upstream_sync.py ${executable_destination}
chmod +x ${executable_destination}/upstream_sync.py
# 7. Execute the script (with privileges)
upstream_sync.py --root -v

4. Apt-Mirror

Debmirror (https://help.ubuntu.com/community/Debmirror) et Apt-Mirror (https://apt-mirror.github.io/) sont des solutions de création et de maintenance de mirroirs Debian/Ubuntu.

La création d’un miroir pour les paquets accessibles par votre gestionnaire de paquets va vous permettre de créer et de maintenir la copie conforme de dépôts (officiels ou non) en local. La raison principale est de ne plus avoir besoin de connexion vers le net pour pouvoir installer un paquet ou bien faire des mises à jour. C’est donc une solution pratique et efficace pour une install party, la mise à jour d’un parc de machines (dans ce cas le miroir peut être couplé avec un serveur, un proxy, etc.) ou, pour en finir, la mise à jour ou l’installation chez une personne ne disposant pas d’une connexion vers le net, ou dont la connexion est trop lente. Cela est particulièrement utile pour certains pays africains avec un faible accès à internet et permet d’y vulgariser facilement Linux.

Ce n’est donc pas une procédure à prendre à la légère, car vous allez aspirer complètement le contenu d’un ou plusieurs dépôts et les stocker dans un dossier. Ce dossier peut être sur un disque dur interne ou externe et il vous faudra une connexion internet conséquente. Pour l’exemple, toute une nuit à été nécessaire pour aspirer les plus de 90 Gio (sans les sources) des dépôts officiels pour la 14.04. Après cela vous pourrez installer une Ubuntu 14.04 sur un PC sans accès à Internet, le mettre à jour et ajouter n’importe quel paquet et ses dépendances du moment qu’il existe sur les dépôts officiels.

Faudra-t-il aussi mettre à jour le miroir quotidiennement.

Source : https://doc.ubuntu-fr.org/tutoriel/creer_un_miroir_de_depot

5. Apt-cacher

Source : https://doc.ubuntu-fr.org/apt-cacher et https://help.ubuntu.com/community/Apt-Cacher-Server

apt-cacher est une solution proxy de mise en cache des paquets Debian. À travers ce proxy, un ensemble d’ordinateurs clients accède indirectement aux dépôts.

Quand un paquet est demandé pour la première fois, il est téléchargé par le proxy et transmis au client tout en conservant une copie en local. Pour toute future demande du même paquet, le proxy ne télécharge pas les paquets mais transmet la copie locale. Ainsi, on économise la bande passante externe et du temps pour les clients.

Source de l’image

Pré-requis

  • Vérifier que le dépôt universe soit bien activé et mis à jour.
  • Avoir les droits d’administration sur toutes les machines.
  • Une instance d’apt-cacher différente pour chaque distributions linux différentes (ie: Debian et Ubuntu).

Installer les paquets apt-cacher et apache2 :

sudo apt-get install apt-cacher apache2

Configuration du serveur

Activer apt-cacher automatiquement

Il est recommandé pour des raisons de performances et d’utilisation de la mémoire de lancer apt-cacher en mode autonome (Stand-alone Daemon) :

Éditer le fichier /etc/default/apt-cacher et mettre l’option AUTOSTART à 1 :

AUTOSTART=1

Lancer apt-cacher :

sudo service apt-cacher start

À partir de Ubuntu 12.04, il faut modifier allowed_hosts dans /etc/apt-cacher/apt-cacher.conf. Par exemple :

allowed_hosts = *

Puis relancer apt-cacher :

sudo service apt-cacher restart

Tester. Taper l’adresse suivante dans votre navigateur web :

https://"adresse_du_serveur_apt-cacher":3142

Si vous n’obtenez pas une page détaillant la configuration d’apt-cacher, relancer apache2.

Mettre en cache les fichiers .deb déjà téléchargés

Pour mettre dans le cache d’apt-cacher les fichiers .deb déjà présents dans le cache apt du serveur, il suffit d’exécuter la commande suivante :

sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives

Si cette commande ne passe pas essayez :

sudo /usr/share/apt-cacher/apt-cacher-import.pl -r -R /var/cache/apt/archives

Utilisation d’un proxy

Si votre connexion internet passe par un proxy Éditer le fichier /etc/apt-cacher/apt-cacher.conf et modifier ces lignes :

http_proxy=hostname:port
use_proxy=1
http_proxy_auth=username:password
use_proxy_auth=1

Remplacer les mots “hostname” par le nom ou l’adresse de votre Proxy Internet, le “port” et le “username”:”password” par les vôtres pour l’authentification au niveau du Proxy Internet.

Configuration des clients

Le port par défaut est 3142.

Il existe deux manières pour configurer le client avec apt-cacher.

  • Méthode par modification de la sources.list
  • Modifier le fichier /etc/apt/sources.list du client en insérant adresse_du_serveur_apt-cacher:le_port. Par exemple :
deb https://archive.ubuntu.com/ubuntu/ hardy main restricted

devient :

deb https://adresse_du_serveur_apt-cacher:3142/archive.ubuntu.com/ubuntu/ hardy main restricted

Méthode Proxy

Cette méthode très simple à mettre en place à l’avantage de permettre de mettre à jour le système directement via les dépôts si le proxy apt-cacher n’est pas disponible. Elle ne pose donc aucun problème avec un ordinateur portable.

Éditer le fichier /etc/apt/apt.conf.d/01proxy, et insérez la ligne suivante :

Acquire::http::Proxy "https://<adresse_du_serveur_apt-cacher>:3142";

Puis rechargez la liste des paquets :

sudo apt-get update