[Résolu] Stretch + dépot local

Bonjour,

avec Stretch je n’arrive plus à utiliser un dépôt local minimaliste comme je le faisait avec Jessie.

Mes quelques paquets .deb sont dans un répertoire binary-amd64/ et j’utilise la fonction :

dpkg-scanpackages binary-amd64/ /dev/null | gzip > binary-amd64/Packages.gz

pour créer le fichier Packages.gz

et j’ai un fichier /etc/apt/sources.list.d/mes_packages.list :

deb file:///le_chemin_qui_va_bien/debian binary-amd64/

Maintenant, lorsque je fais :

root@debian:/etc/apt/sources.list.d# aptitude update
Prendre : 1 file:/le_chemin_qui_va_bien/debian binary-amd64/ InRelease
Ignoré file:/le_chemin_qui_va_bien/debian binary-amd64/ InRelease
Prendre : 2 file:/le_chemin_qui_va_bien/debian binary-amd64/ Release
Erreur file:/le_chemin_qui_va_bien/debian binary-amd64/ Release
Fichier non trouvé - /le_chemin_qui_va_bien/debian/binary-amd64/Release (2: Aucun fichier ou dossier de ce type)
Ignoré http://debian.proxad.net/debian stretch InRelease
Atteint http://security.debian.org/debian-security stretch/updates InRelease
Atteint http://debian.proxad.net/debian stretch-updates InRelease
Atteint http://debian.proxad.net/debian stretch-backports InRelease
Atteint http://debian.proxad.net/debian stretch Release
E: The repository ‘file:/le_chemin_qui_va_bien/debian binary-amd64/ Release’ does not have a Release file.
E: Failed to download some files
W: impossible de récupérer file:/le_chemin_qui_va_bien/debian/binary-amd64/Release : Fichier non trouvé - /le_chemin_qui_va_bien/debian/binary-amd64/Release (2: Aucun fichier ou dossier de ce type)
E: Échec du téléchargement pour certains fichiers d’index. Soit ils ont été ignorés, soit les anciens fichiers ont été utilisés à la place.

il recherche un fichier Release qui n’existe pas !!!

Comment peut-on créer ce fichier manquant ?

Ou sinon, qu’elle est la nouvelle manière de créer un dépôt local minimaliste ?
Je n’ai pas trouvé d’information là dessus.

Merci.

Bonjour,

Voici ce que dit le wiki debian : l’outil ne peut pas créer le fichier Release tout seul mais il existe un script mkdebidx.sh (en mksh) en dehors de debian qui propose de le faire.

DebianRepository/Setup - Debian Wiki
3. Debian Repository Generation Tools
9. dpkg-scanpackages and dpkg-scansources

Il existe peut-être une autre solution incluse dans debian.

Merci jcsm33 pour ta réponse.

Les trois liens pointent vers le même document. Je ne sais pas si c’est voulu…

mkdebidx.sh semblait être la solution, mais ce script recherche un autre script distinfo.sh dans les sous-répertoires dist/* du dépôt local et je n’ai pas de tel fichier.

Une recherche sur le net pour distinfo.sh ne me donne rien de concluant…

Et en créant un fichier vide ?

Non, ça ne marche toujours pas.

libresurf@debian:/le_chemin_qui_va_bien/debian$ ./mkdebidx.sh
./mkdebidx.sh[380]: .: dists/*/distinfo.sh: No such file or directory

J’ai même rajouté :

#!/bin/mksh

dans le ficher distinfo.sh et mis les droits en exécution, c’est pareil.

Première fois que j’entends parler de /bin/mksh C’est nouveau ?

fp2@debpacha:~$ l /bin/*sh
1076 -rwxr-xr-x 1 root root 1099016 mai   15 21:45 /bin/bash
   0 lrwxrwxrwx 1 root root       4 mai   15 21:45 /bin/rbash -> bash
 116 -rwxr-xr-x 1 root root  117208 janv. 24  2017 /bin/dash
   0 lrwxrwxrwx 1 root root       4 janv. 24  2017 /bin/sh -> dash
fp2@debpacha:~$ 

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة

F. Petitjean

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

Je n’en sais rien, apparemment c’est lié à un MiscOS que je ne connais pas non plus.

En tout cas, ce qui est nouveau, c’est que dpkg-scanpackages ne suffit plus à créer un dépôt local minimaliste. :frowning:

Je progresse, mais ce n’est pas encore ça…

Il semblerait qu’il faille utiliser le programme apt-ftparchive en remplacement à dpkg-scanpackages.

Pour que ça fonctionne bien, il faut signer le dépôt donc avoir une clé cryptographique renseignée dans le GnuPG de l’utilisateur qui crée le dépôt.

Il faut alors exporter sa partie publique et l’importer dans APT.
En tant que root, faire :

apt-key add the_public_key.asc

Voici mon petit script pour générer les bons fichiers (à exécuter en tant qu’utilisateur) :

echo "-- Traitement du répertoire binary-amd64/ …"
rm -f binary-amd64/Packages*
rm -f binary-amd64/Contents*
rm -f binary-amd64/Release*
apt-ftparchive packages binary-amd64/ | gzip > binary-amd64/Packages.gz
apt-ftparchive contents binary-amd64/ | gzip > binary-amd64/Contents.gz
apt-ftparchive release binary-amd64/ | gzip > binary-amd64/Release
gpg -abs -o binary-amd64/Release.gpg binary-amd64/Release

La partie de suppression des fichiers existants est importante sinon ça pollue le futur fichier Release et aptitude émet un message d’erreur.

Cependant, j’ai maintenant d’autres messages d’erreur d’aptitude :

root@debian:/etc/apt/sources.list.d# aptitude update
Prendre : 1 file:///le_chemin_qui_va_bien/debian binary-amd64/ InRelease
Ignoré file:///le_chemin_qui_va_bien/debian binary-amd64/ InRelease
Prendre : 2 file:///le_chemin_qui_va_bien/debian binary-amd64/ Release [433 B]
Prendre : 3 file:///le_chemin_qui_va_bien/debian binary-amd64/ Release [433 B]
Prendre : 4 file:///le_chemin_qui_va_bien/debian binary-amd64/ Release.gpg [488 B]
Prendre : 5 file:///le_chemin_qui_va_bien/debian binary-amd64/ Release.gpg [488 B]
Ignoré http://debian.proxad.net/debian stretch InRelease
Atteint http://debian.proxad.net/debian stretch-updates InRelease
Atteint http://security.debian.org/debian-security stretch/updates InRelease
Atteint http://debian.proxad.net/debian stretch Release
E: Impossible de traiter le fichier /var/lib/apt/lists/partial/___le_chemin_qui_va_bien_debian_binary-amd64_Release (1)
E: The repository ‘file:///le_chemin_qui_va_bien/debian binary-amd64/ Release’ provides only weak security information.
E: Failed to download some files
W: impossible de récupérer file:///le_chemin_qui_va_bien/debian/binary-amd64/Release : Pas de sections dans le fichier Release /var/lib/apt/lists/partial/___le_chemin_qui_va_bien_debian_binary-amd64_Release
E: Échec du téléchargement pour certains fichiers d’index. Soit ils ont été ignorés, soit les anciens fichiers ont été utilisés à la place.

Là, ça devient compliqué et je sèche un peu…
Il semblerait qu’il manque des sections dans le fichier Release.

J’ai finalement laissé tombé mon script et je me suis inspiré de celui de Adrian Arroyo Calle sur GitHub.

Et ça marche très bien !!! :slight_smile: :slight_smile: :slight_smile:

Essayons de trier :

apt-ftparchive.conf

Dir {
	ArchiveDir "./debian";
	CacheDir "./cache";
};
Default {
	Packages::Compress ". gzip bzip2";
	Sources::Compress ". gzip bzip2";
	Contents::Compress ". gzip bzip2";
};
TreeDefault {
	BinCacheDB "packages-$(SECTION)-$(ARCH).db";
	Directory "pool/$(SECTION)";
	Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
	SrcDirectory "pool/$(SECTION)";
	Sources "$(DIST)/$(SECTION)/source/Sources";
	Contents "$(DIST)/Contents-$(ARCH)";
};
Tree "dists/stable" {
	Sections "main";
	Architectures "i386 amd64 all source";
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Debian repository</title>
  </head>
  <body>
    <h1>Debian repository</h1>
    <p>Add the following lines to your sources.list file</p>
    <code>
      deb http://HOSTNAME/debian stable main
      <br>
      deb-src http://HOSTNAME/debian stable main
    </code>
  </body>
</html>

stable.conf

APT::FTPArchive::Release::Codename "stable";
APT::FTPArchive::Release::Origin "Your hosted repo";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "Packages hosted by you";
APT::FTPArchive::Release::Architectures "i386 amd64 all source";
APT::FTPArchive::Release::Suite "stable";

update.sh

#!/bin/bash
# Put your packages and sources *.deb, *.orig.tar.gz, *.dsc, *.changes to debian/pool/main
#This should be on the root of Apache or Nginx

mkdir -p debian/dists/stable/main/{binary-all,binary-i386,binary-amd64,source}
mkdir -p debian/pool/main
mkdir -p cache
apt-ftparchive generate apt-ftparchive.conf
apt-ftparchive -c stable.conf release debian/dists/stable > debian/dists/stable/Release
gpg --output debian/dists/stable/Release.gpg -ba debian/dists/stable/Release

Ne manque-t-il pas le drapeau -s pour gpg ?

Merci jcsm33 d’avoir détaillé la procédure.

Comme indiqué dans le fichier update.sh, il faut placer tous les fichiers .deb dans le répertoire debian/pool/main.
Ensuite, il n’y a plus qu’à exécuter le script update.sh.

Concernant le drapeau -s pour gpg, qui concerne la création d’une signature, elle est remplacée par l’option -b qui crée une signature détachée et qui est accompagnée de l’option -a qui crée une sortie ASCII “blindée”.

Pour moi, ça fonctionne tel quel.