Création d'un dépôt Raspbian
Si vous souhaitez héberger votre propre dépôt Raspbian, cet article est pour vous.
Un référentiel Raspbian consiste en une structure de répertoire spéciale sur un serveur web. Les fichiers, y compris les paquets, sont tous statiques - par conséquent, ce référentiel pourrait aussi être simplement hébergé sur une instance Amazon S3, par exemple.
L'entrée de sources.list dans Raspbian
/etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
/etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ étirer l'interface principale
Ce sont les entrées par défaut pour les dépôts de paquets sur Raspbian.
La structure est la suivante :
- deb : source des paquets binaires
- http://raspbian.raspberrypi.org/raspbian/ : URL du référentiel
- stretch : la "distribution" / version / nom de code (dans certains cas, il est également possible de spécifier des sous-répertoires imbriqués plus profondément, par exemple stretch/updates)
- main contrib non-free rpi : les composants de ce dépôt qui vous intéressent, séparés par un espace.
NB : apt à partir de Debian / Raspbian Stretch inclut le support de https par défaut. Sinon, vous devez installer le paquet apt-transport-https ;
Voici une page web expliquant pourquoi https n'est pas nécessaire pour l'installation des paquets.
Une structure de répertoire du référentiel
Jetez un coup d'œil à la http://raspbian.raspberrypi.org/ structure du répertoire du dépôt :
http://raspbian.raspberrypi.org/
Ce répertoire principal contient plusieurs sous-répertoires, et notamment le répertoire raspbian.public.key
Certains des sous-répertoires sont destinés à des fins diverses, par exemple des images - non nécessaires pour un dépôt normal de Debian / Raspbian Raspberry Pi.
Les éléments intéressants sont les suivants
- copain
- raspbian
et les sous-répertoires déjà mentionnés. raspbian.public.key.
La clé est un fichier texte, généré par GnuPG. Voici à quoi ça ressemble :
etc.
Cette clé est nécessaire pour vérifier que vous communiquez bien avec le bon dépôt, ce qu'il prétend être. Si vous faites confiance au dépôt, vous ajoutez la clé à votre trousseau apt (voir les instructions ci-dessous pour savoir comment ajouter votre propre clé et installer des paquets à partir de votre propre nouveau dépôt).
Ensuite, il peut être utilisé par apt pour vérifier les signatures des métadonnées du référentiel APT. Les paquets eux-mêmes ne sont généralement pas signés GPG / ne sont pas vérifiés. Consultez l'article de packagecloud pour plus de détails.
Dépôts en tant que sous-dossiers
mate et raspbian sont deux dépôts différents (pour le Raspberry Pi dans ce cas).
Veuillez noter : aptly - l'outil pour publier votre propre dépôt expliqué ci-dessous - utilisera par défaut le webroot, et affichera le dossier dists dans le webroot, mais vous pouvez également spécifier un chemin pour publier sous.
Nous allons examiner le dossier raspbian, qui, pour nos besoins, est un de ces dépôts :
Le dossier dists contient les versions / distributions de Raspbian - nom de code en synchronisation avec les versions Debian. La version stable actuelle - en date du 2.4.2019 - est la suivante Stretch.
Ils sont nommés d'après les personnages de Toy Story. La prochaine sortie est Buster.
"stable"est identique à "stretch" (actuellement). Il pointera vers la version stable la plus récente.
Ce répertoire contient plusieurs fichiers nécessaires au fonctionnement des outils apt. Notamment les fichiers InRelease, Release et Release.gpg.
- InRelease : signé en ligne
- Release - va de pair avec Release.gpg (signature)
ces fichiers listent les fichiers d'index de la distribution et leurs hachages.
...
un exemple de fichier InRelease, avec la signature en ligne en bas.
C'est une sorte de carte pour apt - où les fichiers de la liste des paquets peuvent être trouvés, et dans quels formats (.gz et .xz étant des formats compressés) ils peuvent être téléchargés.
Ici vivent les métadonnées pour les paquets. Le fichier Packages est lisible par l'homme (mais très long).
notamment ce fichier contient un lien vers le "pool", pour le paquet réel.
Nom de fichier : pool/rpi/g/gst-omx1.0/gstreamer1.0-omx_1.0.0.1-0+rpi12+jessiepmg_armhf.deb
rpi est le nom du composant, et les paquets sont ensuite divisés par leur première lettre.
le site piscine est utilisé pour éviter la duplication des paquets.
Regardez ce site informatif pour plus d'informations sur le format du référentiel Debian :
https://wiki.debian.org/DebianRepository/Format
Utiliser aptly - publier votre propre dépôt, avec vos propres paquets
Aptly est un outil pour mettre en place et publier facilement votre propre dépôt .deb - pour Debian et ses frères et cousins.
Cela inclut Ubuntu, mais bien sûr aussi Raspbian.
Ainsi, si vous souhaitez publier un dépôt Raspbian, voici comment procéder.
Configurer un conteneur Docker
J'ai créé un conteneur Docker, basé sur ce dépôt git :
https://github.com/urpylka/docker-aptly
les changements que j'ai introduits :
- DE ubuntu:bionic
- gnupg1
- gpgv1
- commande gpg exécutée explicitement en tant que gpg1 (sinon les clés publiques et privées seront enregistrées différemment, et tout ne fonctionnera pas comme prévu)
C'est pourquoi il y aura quelques explications supplémentaires ci-dessous. Dans l'ensemble, le script d'urpylka est un point de départ très pratique, si vous voulez utiliser Docker.
En outre, je vous recommande vivement d'utiliser docker-compose, au lieu d'exécuter manuellement ces longues commandes docker run.
Voici mon fichier docker pour votre référence
# Copyright 2019 Maximilian Batz
# Copyright 2018 Artem B. Smirnov
# Copyright 2018 Jon Azpiazu
# Copyright 2016 Bryan J. Hong
#
# Sous licence de la licence Apache, version 2.0 (la "licence") ;
# vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence.
# Vous pouvez obtenir une copie de la licence à l'adresse suivante
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# À moins que la loi applicable ne l'exige ou que cela ne fasse l'objet d'un accord écrit, le logiciel
# distribué sous la licence est distribué sur une base "AS IS",
# SANS GARANTIE NI CONDITION DE QUELQUE NATURE QUE CE SOIT, expresse ou implicite.
# Voir la licence pour les termes spécifiques régissant les permissions et les autorisations.
Les limitations de # dans le cadre de la Licence.DE ubuntu:bionic
LABEL maintainer="" (en anglais seulement)
ENV DEBIAN_FRONTEND non interactif
RUN apt-get -q update \
&& apt-get -y install \n
gnupg1 && apt-key adv -keyserver pool.sks-keyservers.net -recv-keys ED75B5A4483DA07C \
&& echo "deb http://repo.aptly.info/ squeeze main" >> /etc/apt/sources.list# Mise à jour du référentiel APT et installation des paquets
RUN apt-get -q update \
&& apt-get -y install \n
aptly=1.3.0 \N
bzip2 \
gpgv1 \
graphviz \N
superviseur \N
nginx \N
wget \
xz-utils \
apt-utils \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*Configuration de l'installation de # Aptly
COPY assets/aptly.conf /etc/aptly.conf# Scripts d'installation
COPY assets/*.sh /opt/# Installer Nginx Config
RUN rm /etc/nginx/sites-enabled/*
COPY assets/supervisord.nginx.conf /etc/supervisor/conf.d/nginx.conf
RUN echo "daemon off ;" >> /etc/nginx/nginx.conf# Emplacement du support de fixation
VOLUME ["/opt/aptly"]# Exécuter le script de démarrage au démarrage du conteneur
ENTRYPOINT [ "/opt/startup.sh" ]
Remarque : à partir du 2.4.2019, la version 1.3.0 d'aptly est toujours la plus récente.
Connexion au conteneur aptly
docker exec -it aptly /bin/bash
Votre conteneur, bien nommé dans ce cas, ouvre un terminal interactif avec /bin/bash. Toutes les autres commandes sont exécutées à l'intérieur du conteneur.
Génération des clés GPG
Le script docker mentionné ci-dessus crée automatiquement les clés GPG pour vous, en passant votre phrase de passe dans un fichier dans le conteneur. L'extrait de script pertinent est le suivant :
# ! /usr/bin/env bash
# Copyright 2016 Bryan J. Hong
# Sous licence de la licence Apache, version 2.0cat < /opt/gpg_batch
%echo Generating a GPG key, might take a while
Type de clé : RSA
Longueur de clé : 4096
Type de sous-clé : ELG-E
Sous-clé-Longueur : 1024
Nom-Réel : ${FULL_NAME}
Nom-Commentaire : Signature de la Repo Aptly
Nom-Email : ${ADRESSE_ÉLECTRONIQUE}
Date d'expiration : 0
Phrase de passe : ${GPG_PASSWORD}
%pubring /opt/aptly/aptly.pub
%secring /opt/aptly/aptly.sec
%commit
%echo done
EOF
Cette opération est exécutée si les clés n'existent pas, à partir du point d'entrée du conteneur :
# Si la paire de clés GPG du référentiel n'existe pas, créez-la.
si [[ ! -f /opt/aptly/aptly.sec ]] || [[ ! -f /opt/aptly/aptly.pub ]] ; alors
echo "Génération de nouvelles clés gpg"
cp -a /dev/urandom /dev/random
/opt/gpg_batch.sh
# Si votre système n'a pas beaucoup d'entropie, cela peut prendre beaucoup de temps.
# Google comment créer une entropie "artificielle" si cela reste bloqué.
gpg1 -batch -gen-key /opt/gpg_batch
sinon
echo "Il n'est pas nécessaire de générer de nouvelles clés gpg".
fi
Notez ma version "améliorée" (gpg1 au lieu de juste gpg) - cela semble être nécessaire pour Ubuntu bionic beaver, car sinon vous aurez gpg 2 par défaut.
Note : ce fichier contiendra votre phrase de passe ! Je vous recommande donc de le supprimer une fois la configuration initiale terminée.
Malheureusement, gpg1 ne semble PAS prendre en charge le contrôle de la phrase de passe %ask. Par conséquent, si vous voulez faire une génération par lot des clés, le mot de passe de la clé doit être dans le fichier de lot.
Publier / exporter la clé publique GPG
mkdir -p /opt/aptly/public
gpg1 -export -armor > /opt/aptly/public/repository.picockpit.key
nommez la clé de manière appropriée. -armor est utilisé pour exporter la clé dans un format ASCII (par opposition au format binaire).
Notez que ce sont deux tirets, j'espère que WordPress ne les détruira pas. De plus, ici gpg1 est utilisé au lieu de gpg seulement
Créer un nouveau référentiel
aptly repo create -comment="picockpit.com Repository" -component="main" -distribution="stretch" pcp-repository
Crée un nouveau dépôt local, dans lequel vous pouvez ajouter des paquets. Ce dépôt n'est pas encore publié.
-comment : texte pour décrire le référentiel local
-composant : composant par défaut lors de la publication
-distribution : distribution par défaut (release) lors de la publication
pcp-repository : c'est un nom personnalisé que j'ai donné à ce dépôt local, vous pouvez utiliser le vôtre ici. Assurez-vous de modifier les autres commandes en conséquence et d'utiliser le nom que vous avez choisi ici.
Ajouter des paquets .deb au référentiel
aptly repo add pcp-repository /opt/aptly/testpackage/
Ici, j'ajoute un dossier de paquets au dépôt local que j'ai créé à l'étape précédente. aptly reconnaîtra les paquets ajoutés, comme ceci :
Créer un instantané
Bien qu'il soit possible de publier un repo directement, il est fortement recommandé de créer un instantané, puis de publier cet instantané.
aptly snapshot create pcp-snapshot from repo pcp-repository
pcp-snapshot étant un nom personnalisé, et pcp-repository le nom que vous avez donné au dépôt plus haut.
Publier l'instantané
aptly publish snapshot pcp-snapshot
Pendant la publication de l'instantané, vous serez invité à saisir votre phrase de passe gpg à deux reprises :
aptly publiera dans le répertoire /opt/aptly/public, que Nginx ou un autre serveur web de votre choix servira. Pas besoin de
Reportez-vous également à cette documentation :
Changement de référentiel publié
Si vous avez fait une erreur, et que vous souhaitez changer le dépôt publié pour un instantané différent, vous pouvez utiliser aptly publish switch :
aptly publish switch stretch raspbian pcp-snapshot
Cela changera la distribution stretch, sous le chemin raspbian, avec le nouveau snapshot pcp-snapshot.
Ajout de votre référentiel à un système
Importer la clé
curl -L http://192.168.1.2:3200/repository.picockpit.key | sudo apt-key add -
La commande récupère la clé à l'aide de curl, puis l'introduit dans apt-key. Il existe également une fonctionnalité de récupération de clé dans apt-key, mais elle dépend d'un paquet qui n'est pas installé par défaut sur Raspbian.
Si vous ne le faites pas, apt ne sera pas en mesure de récupérer les paquets du nouveau dépôt, et lancera des erreurs !
Ajouter le référentiel
echo "deb http://192.168.1.2:3200/raspbian stretch main" | sudo tee -append /etc/apt/sources.list.d/picockpit.list
Le sous-répertoire sous /etc/apt/sources.list.d est uniquement accessible en écriture par root. le -append assure que le fichier n'est pas écrasé, s'il doit déjà exister.
Il serait également possible de créer le fichier manuellement et, par exemple, à l'aide de nano, d'ajouter la ligne suivante
deb http://192.168.1.2:3200/raspbian main tendue
Installer les paquets
sudo apt-get update
sudo apt-get install nom du paquet
Cette capture d'écran montre qu'apt lit également le nouveau dépôt.
l'installation d'un paquet type.
Création d'un paquet
Je vous renvoie à cet excellent article sur la création d'un paquet Debian.
Veillez seulement à changer Architecture en armhf pour la plateforme Raspberry Pi.
Vous avez besoin d'un soutien professionnel ?
Nous facturons actuellement un tarif forfaitaire de 1500 € par jour (+taxes). Nous serons heureux de vous aider 🙂 .
Autres lectures
- https://blog.packagecloud.io/eng/2014/10/28/howto-gpg-sign-verify-deb-packages-apt-repositories/
- https://wiki.debian.org/DebianRepository/Format
- https://github.com/urpylka/docker-aptly
A propos des paquets :