Création d'un référentiel authentifié
J'ai examiné les réponses ici et sur d'autres sites et la plupart ont le désavantage (gros IMHO) que vous configurez 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 être 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 il s'agit d'une configuration assez générique utilisant Apache ou nginx (voir les autres réponses ici).
Configurez le répertoire du référentiel
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
supprimer les packages
rm /home/srv/packages/local-xenial/some_package_idont_like
ajouter des packages
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 de 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
lien
lien
lien