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/

image

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 :

image

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 :

image

image

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.

image

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.

image

...

image

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.

image

Ici vivent les métadonnées pour les paquets. Le fichier Packages est lisible par l'homme (mais très long).

image

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.

image

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.0

cat < /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 :

image

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 :

image

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

image

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

image

Cette capture d'écran montre qu'apt lit également le nouveau dépôt.

image

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 faisons tout ce qui concerne les Raspberry Pi pour vivre. N'hésitez pas à nous contacter si vous avez besoin d'un soutien professionnel pour votre installation.

Nous facturons actuellement un tarif forfaitaire de 1500 € par jour (+taxes). Nous serons heureux de vous aider 🙂 .

Autres lectures

A propos des paquets :