Chez ovhcloud, Debian est installée en quelques cliques. Il suffit d’entrer sa clé publique SSH dans le formulaire. La particularité est d’utiliser la clé gpg déjà créée avec pgpid (outil foopgp) comme clé SSH (une sous clé avec une utilisation A pour “authenticate capability”).
$ gpg --export-ssk-key <ID|mail>
Pour l’agent, dans .bashrc
:
unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi
On peut alors se connecter en ssh avec la yubikey qui protége la clé privée.
Si on est sur une autre machine qui n’a pas déjà utilisé pgpid
, quelques manipulations peuvent être nécessaires avant :
scdaemon
$ gpg --card-status
$ gpg --card-edit
puis fetch
$ gpg --list-secret-keys
pour vérifierAu moment de la connexion ssh la clé doit déjà être connectée (ssh-agent
pour vérifier).
Pour rajouter les acces à un tiers, on rajoute sa clé publique dans ~/.ssh/authorized_keys
.
Un serveur web apache est installé. Un fichier de configuration par site est créé dans /etc/apache2/sites-available
. On active et désactive chaque site avec sudo a2ensite <conf>
et sudo a2dissite <conf>
suivi de sudo service apache2 reload
.
On installe logrotate
, on vérifie les conf dans /etc/logrotate.d/
. Systemd
avec des timers
peut être utilisé à la place de cron
(c’est le cas ici par défaut).
Les fichiers vidéos sont dans un sous-dépot et il faut utiliser git-lfs pour récupérer les fichiers.
$ apt install git-lfs
$ git lfs install
Le site utilise hugo et est sur un dépot git (en fait 3, avec le thème et les fichiers vidéos en submodule).
# Parce qu'on veut la branche "public" et uniquement elle qui n'est pas par défaut.
$ git clone --branch public --single-branch https://codeberg.org/foopgp/foopgp-hugowebsite.git
$ git submodule update --init --recursive
On installe hugo pour “compiler” le site et obtenir la partie publique (dossier “public”).
$ sudo apt install hugo
$ hugo # à la racine du site
Le serveur de clés pgp est onak et les cgi font le lien entre onak et les requêtes http.
Une page index.html
est rajoutée comme interface web avec des formulaires qui utilisent les url et les paramètres des cgi.
Let’s encrypt est utilisé pour obtenir un certificat TLS . Les tutoriels sont nombreux et faciles à mettre en place. La subtilité ici était de s’apercevoir que l’IPv6 a été utilisé par défaut et le DNS n’était pas encore à jour en v6.
$ sudo apt install certbot python3-certbot-apache
$ sudo certbot --apache -d foopgp.org -d keys.foopgp.org
Dans /etc/apache2/sites-available
on retrouve et adapte si besoin les nouveaux sites, la version https de chaque site déjà fonctionnelle en http.
$ sudo apt update
$ sudo apt install fail2ban
$ systemctl enable --now fail2ban
Dans /etc/fail2ban/jail.conf
on édite backend = systemd
.
Pour lancer maintenant et au rédémarrage : sudo systemctl enable --now fail2ban
.
En quelques minutes on a déjà une première ip de bannie.
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
debian@ns3017519:/var/log$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 7
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 193.32.162.157
Création de packages deb pour les outils de foopgp.
Dans mon .bashrc
:
export DEBEMAIL=piseb@mailo.com
export DEBFULLNAME='Sébastien Picardeau'
export DEB_BUILD_OPTIONS=nocheck
Documentation : https://www.debian.org/doc/manuals/maint-guide/first.fr.html#dh-make
bash-libs
Préparation du workspace git :
$ mkdir demo-bash-libs
$ cd demo-bash-libs/
$ git clone ssh://git@codeberg.org/foopgp/bash-libs.git
$ cd bash-libs/
$ git checkout v0.0.2 # on veut un package de cette release
$ git switch -c debian/latest # par convention pour le nom
Basculement sur la nouvelle branche 'debian/latest'
# On a (pas) besoin d'une release :
$ curl https://codeberg.org/foopgp/bash-libs/archive/v0.0.2.tar.gz -o ../bash-libs.tar.gz
# en fait touch ../bash-libs.tar.gz suffit car on va passer à gbp
# On génère une conf comme point de départ (on pourrait aussi créer les fichiers directement)
$ debmake -x 1
I: set parameters
I: =================================================================
I: package_dir = /usr/lib/python3/dist-packages
I: base_path = /usr
I: base_lib_path = /usr/lib/debmake
I: base_share_path = /usr/share/debmake
I: =================================================================
I: sanity check of parameters
I: pkg="bash", ver="libs", rev="1"
I: *** start packaging in "bash-libs". ***
I: provide bash_libs.orig.tar.gz for non-native Debian package
I: pwd = "/tmp/demo-bash-libs"
I: $ ln -sf bash-libs.tar.gz bash_libs.orig.tar.gz
I: pwd = "/tmp/demo-bash-libs/bash-libs"
I: parse binary package settings:
I: binary package=bash Type=bin / Arch=any M-A=foreign
I: analyze the source tree
I: build_type = make
I: scan source for copyright+license text and file extensions
I: 27 %, ext = md
I: 14 %, ext = text
I: 9 %, ext = adoc
I: 9 %, ext = yml
I: 9 %, ext = bats
I: 5 %, ext = gitattributes
I: 5 %, ext = hook
I: 5 %, ext = editorconfig
I: 5 %, ext = shellcheckrc
W: archive type exists. Maybe non-DFSG!
I: 5 %, ext = archive
I: 5 %, ext = gitignore
I: 5 %, ext = bash
I: check_all_licenses
I: .....W: Non-UTF-8 char found, using latin-1: main.tar.gz
W: analyze_copyright: skip name="", years=9999-0
.......................
I: check_all_licenses completed for 28 files.
I: bunch_all_licenses
I: format_all_licenses
I: make debian/* template files
I: debmake -x "1" ...
I: creating => debian/control
I: creating => debian/copyright
I: substituting => /usr/share/debmake/extra0/rules
I: creating => debian/rules
I: substituting => /usr/share/debmake/extra0/changelog
I: creating => debian/changelog
I: substituting => /usr/share/debmake/extra1/watch
I: creating => debian/watch
I: substituting => /usr/share/debmake/extra1/README.Debian
I: creating => debian/README.Debian
I: substituting => /usr/share/debmake/extra1source/format
I: creating => debian/source/format
I: substituting => /usr/share/debmake/extra1tests/control
I: creating => debian/source/control
I: substituting => /usr/share/debmake/extra1upstream/metadata
I: creating => debian/upstream/metadata
I: substituting => /usr/share/debmake/extra1tests/control
I: creating => debian/tests/control
I: substituting => /usr/share/debmake/extra1patches/series
I: creating => debian/patches/series
I: substituting => /usr/share/debmake/extra1sourcex/local-options
I: creating => debian/source/local-options
I: substituting => /usr/share/debmake/extra1sourcex/options
I: creating => debian/source/options
I: substituting => /usr/share/debmake/extra1sourcex/patch-header
I: creating => debian/source/patch-header
I: run "debmake -x2" to get more template files
I: $ wrap-and-sort
Même avec -x 1
on a des fichiers de configuration qu’on utilise pas. On commence par un petit nettoyage du surplus.
$ cd debian
$ rm -r tests/ upstream/ watch
$ rm -v source/{control,local-options,options,patch-header}
'source/control' supprimé
'source/local-options' supprimé
'source/options' supprimé
'source/patch-header' supprimé
$ ls source/
format # ne pas effacer
On édite changelog
pour corriger le nom et la version.
$ vim changelog
$ cat changelog
bash-libs (0.0.2-1) UNRELEASED; urgency=low
* Initial release.
...
On édite aussi control
.
$ cat control
Source: bash-libs
Section: utils
Priority: optional
Maintainer: Sébastien Picardeau <piseb@mailo.com>
Build-Depends: debhelper-compat (= 13), pandoc
Standards-Version: 4.5.1
Homepage: https://foopgp.org
Rules-Requires-Root: no
Vcs-Git: https://codeberg.org/foopgp/bash-libs.git
Vcs-Browser: https://codeberg.org/foopgp/bash-libs
Package: bash-libs
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: TODO
Le fichier copyright
va demander un petit travail pour être correct mais ce n’est pas obligatoire pour le moment (voir le dépôt git).
On voit tout de suite un avantage d’avoir une branch dédiée au packaging. Le Makefile
du projet est configuré pour s’installer dans /usr/local
, on veut que notre package deb s’installe désormais dans /usr
. On édite donc rules
ainsi :
$ vim rules
$ cat rules
dh $@
override_dh_auto_install:
dh_auto_install -- prefix=/usr
Le README.Debian
sera à éditer.
On passe a une rapide configuration pour gbp
, on précise juste les branch et tag.
$ vim gbp.conf # toujours dans bash-libs/debian
seb@PC1:~/demo-bash-libs/bash-libs/debian$ cat gbp.conf
[DEFAULT]
upstream-branch = main
upstream-tag = v%(version)s
debian-branch = debian/latest
debian-tag = debian/latest/%(version)s
On retourne dans bash-libs
: $ cd ..
.
Petit nettoyage du debmake
: $ rm ../bash_libs.orig.tar.gz ../bash-libs.tar.gz
.
Build :
$ curl https://codeberg.org/foopgp/bash-libs/archive/v0.0.2.tar.gz -o ../bash-libs_0.0.2.orig.tar.gz
$ gbp buildpackage --git-ignore-new # on a pas commit
Un minimum de vérification est de vérifier le contenu du deb créé : $ dpkg -c ../bash-libs_0.0.2-1_amd64.deb
On veut commit notre configuration de build mais pas que les fichiers crées pour le build soient commit, donc on rajoute dans .gitignore
:
debian/*.debhelper
debian/debhelper-build-stamp
debian/bash-libs.debhelper.log
debian/bash-libs.substvars
debian/bash-libs/
debian/files
Pour installer :
$ sudo apt install ./bash-libs_0.0.2-1_amd64.deb
$ apt list --installed bash-libs
En train de lister... Fait
bash-libs/now 0.0.2-1 amd64 [installé, local]
Dès qu’on est satisfait on peut commit et push.
Dépôt git : https://codeberg.org/foopgp/bash-libs/src/branch/debian/latest .
Documentation :
https://www.debian.org/doc/manuals/debmake-doc/ch05.en.html#step-debmake
https://honk.sigxcpu.org/projects/git-buildpackage/manual-html/
https://www.debian.org/doc/manuals/maint-guide/modify.fr.html
Pour pgpig
une manipulation complémentaire est nécessaire.
$ mkdir demo-pgpid && cd demo-pgpid
$ git clone https://codeberg.org/foopgp/pgpid.git
$ mv pgpid pgpid-0.0.1
$ curl https://codeberg.org/foopgp/pgpid/archive/main.tar.gz -o pgpid_0.0.1.orig.tar.gz
$ cd pgpid-0.0.1/
$ git tag v0.0.1 # car pas dans le dépôt
$ git switch -c debian/latest
$ debmake -x1
$ rm -rv debian/{tests,upstream,watch} debian/source/{control,local-options,options,patch-header}
$ vim debian/control
$ cat debian/control
Source: pgpid
Section: utils
Priority: optional
Maintainer: Sébastien Picardeau <piseb@mailo.com>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
Homepage: https://foopgp.org
Rules-Requires-Root: no
Vcs-Git: https://codeberg.org/foopgp/pgpid.git
Vcs-Browser: https://codeberg.org/foopgp/pgpid
Package: pgpid
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, bash-libs, facedetect, graphicsmagick, tesseract-ocr, qrencode, gpg-wks-client, cups-client, zbar-tools, scdaemon, pandoc, texlive-extra-utils, xxd, libgfshare-bin, cups-bsd
Description: TODO
$ mv ../pgpid-0.0.1/ ../pgpid # j'ai bien précisé en accélérée
$ gbp buildpackage --git-ignore-new
On constate que le deb ne contient pas bin/
ni data/
. (Ils sont pas compilés mais à copier.)
$ dpkg -c ../pgpid_0.0.1-1_amd64.deb
drwxr-xr-x root/root 0 2025-05-27 16:02 ./
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/pgpid/
-rw-r--r-- root/root 230 2025-05-27 16:02 ./usr/share/doc/pgpid/README.Debian
-rw-r--r-- root/root 190 2025-05-27 16:02 ./usr/share/doc/pgpid/changelog.Debian.gz
-rw-r--r-- root/root 5251 2025-05-27 16:02 ./usr/share/doc/pgpid/copyright
On rajoute dans notre configuration les deux dossiers à copier et leur destination.
$ vim debian/install
$ cat debian/install
bin/ /usr/
data/ /usr/share/pgpid/
Nouvel essai :
$ gbp buildpackage --git-ignore-new
$ dpkg -c ../pgpid_0.0.1-1_amd64.deb
drwxr-xr-x root/root 0 2025-05-27 16:02 ./
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/bin/
-rwxr-xr-x root/root 25769 2025-05-27 15:47 ./usr/bin/pgpid-gen
-rwxr-xr-x root/root 13005 2025-05-27 15:47 ./usr/bin/pgpid-qrscan
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/pgpid/
-rw-r--r-- root/root 230 2025-05-27 16:02 ./usr/share/doc/pgpid/README.Debian
-rw-r--r-- root/root 190 2025-05-27 16:02 ./usr/share/doc/pgpid/changelog.Debian.gz
-rw-r--r-- root/root 5251 2025-05-27 16:02 ./usr/share/doc/pgpid/copyright
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/pgpid/
drwxr-xr-x root/root 0 2025-05-27 15:47 ./usr/share/pgpid/data/
-rw-r--r-- root/root 114860 2025-05-27 15:47 ./usr/share/pgpid/data/country_centroids_az8.csv
-rw-r--r-- root/root 6886 2025-05-27 15:47 ./usr/share/pgpid/data/geolist_centroid.txt
-rw-r--r-- root/root 1452847 2025-05-27 15:47 ./usr/share/pgpid/data/mrz.traineddata
-rw-r--r-- root/root 11396382 2025-05-27 15:47 ./usr/share/pgpid/data/mrz_best.traineddata
-rw-r--r-- root/root 40641 2025-05-27 15:47 ./usr/share/pgpid/data/tesseract.parameters.ref
lrwxrwxrwx root/root 0 2025-05-27 16:02 ./usr/bin/bl-interactive -> ../bash-libs/bin/bl-interactive
lrwxrwxrwx root/root 0 2025-05-27 16:02 ./usr/bin/bl-json -> ../bash-libs/bin/bl-json
lrwxrwxrwx root/root 0 2025-05-27 16:02 ./usr/bin/bl-log -> ../bash-libs/bin/bl-log
lrwxrwxrwx root/root 0 2025-05-27 16:02 ./usr/bin/bl-security -> ../bash-libs/bin/bl-security
lrwxrwxrwx root/root 0 2025-05-27 16:02 ./usr/bin/data -> ../data
Pour bin/
ça semble correct, mais maintenant on a des liens qui ne fonctionneront pas.
Pour retirer ces fichiers :
$ vim debian/clean
$ cat debian/clean
bin/bl-interactive
bin/bl-json
bin/bl-log
bin/bl-security
bin/data
Je préfère inclure le dossier bin
en entier et exclure une sélection. Je trouve ça plus propre en cas de nouveaux fichiers à l’avenir.
De nouveau :
$ gbp buildpackage --git-ignore-new
$ dpkg -c ../pgpid_0.0.1-1_amd64.deb
drwxr-xr-x root/root 0 2025-05-27 16:02 ./
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/bin/
-rwxr-xr-x root/root 25769 2025-05-27 15:47 ./usr/bin/pgpid-gen
-rwxr-xr-x root/root 13005 2025-05-27 15:47 ./usr/bin/pgpid-qrscan
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/doc/pgpid/
-rw-r--r-- root/root 230 2025-05-27 16:02 ./usr/share/doc/pgpid/README.Debian
-rw-r--r-- root/root 190 2025-05-27 16:02 ./usr/share/doc/pgpid/changelog.Debian.gz
-rw-r--r-- root/root 5251 2025-05-27 16:02 ./usr/share/doc/pgpid/copyright
drwxr-xr-x root/root 0 2025-05-27 16:02 ./usr/share/pgpid/
drwxr-xr-x root/root 0 2025-05-27 15:47 ./usr/share/pgpid/data/
-rw-r--r-- root/root 114860 2025-05-27 15:47 ./usr/share/pgpid/data/country_centroids_az8.csv
-rw-r--r-- root/root 6886 2025-05-27 15:47 ./usr/share/pgpid/data/geolist_centroid.txt
-rw-r--r-- root/root 1452847 2025-05-27 15:47 ./usr/share/pgpid/data/mrz.traineddata
-rw-r--r-- root/root 11396382 2025-05-27 15:47 ./usr/share/pgpid/data/mrz_best.traineddata
-rw-r--r-- root/root 40641 2025-05-27 15:47 ./usr/share/pgpid/data/tesseract.parameters.ref
Mais dis-moi Jammy ça roule ! Non, et voilà pourquoi :
$ grep '$(dirname' bin/*
bin/pgpid-gen:TESSDATADIR="$(dirname "$0")/data/"
bin/pgpid-gen:GEOLIST_CENTROID="$(dirname "$0")/data/geolist_centroid.txt"
bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-interactive --
bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-security --
bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-json --
bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-interactive --
bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-security --
Il faut remplacer ces chemins relatifs par les futurs chemins. On va patcher avec les outils dédiés à ce cas d’usage.
Dans mon ~/.bashrc
:
alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
. /usr/share/bash-completion/completions/quilt
complete -F _quilt_completion -o filenames dquilt
Dans ~/.quiltrc-dpkg
:
d=. ; while [ ! -d $d/debian -a $(readlink -e $d) != / ]; do d=$d/..; done
if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
# if in Debian packaging tree with unset $QUILT_PATCHES
QUILT_PATCHES="debian/patches"
QUILT_PATCH_OPTS="--reject-format=unified"
QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
fi
$ sudo apt install quilt
$ source ~/.bashrc
/data/
Avant :
$ grep /data/ bin/*
../bin/pgpid-gen:TESSDATADIR="$(dirname "$0")/data/"
../bin/pgpid-gen:GEOLIST_CENTROID="$(dirname "$0")/data/geolist_centroid.txt"
dquilt :
$ dquilt new fix-pgpid-gen-data-path.patch
$ dquilt add bin/pgpid-gen
$ sed -i -e 's/$(dirname "$0")/\/usr\/share/g' bin/pgpid-gen
$ grep /data/ bin/* # après
bin/pgpid-gen:TESSDATADIR="/usr/share/data/"
bin/pgpid-gen:GEOLIST_CENTROID="/usr/share/data/geolist_centroid.txt"
$ dquilt refresh
$ dequil header -e
Le patch créé :
$ cat debian/patches/fix-pgpid-gen-data-path.patch
--- a/bin/pgpid-gen
+++ b/bin/pgpid-gen
@@ -50,8 +50,8 @@
FACE_MARGIN_WIDTH="25/100"
FACE_MARGIN_HEIGHT="50/100"
-TESSDATADIR="$(dirname "$0")/data/"
-GEOLIST_CENTROID="$(dirname "$0")/data/geolist_centroid.txt"
+TESSDATADIR="/usr/share/data/"
+GEOLIST_CENTROID="/usr/share/data/geolist_centroid.txt"
ONLYUDID=false
### Default option values ###
On peut revenir avant patch, il sera appliqué au build automatiquement.
$ dquilt pop -a
Retrait de fix-pgpid-gen-data-path.patch
Restoring bin/pgpid-gen
Aucun patch n'est appliqué
bl-
Avant :
$ grep bl- bin/*
../bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
../bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-interactive --
../bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-security --
../bin/pgpid-gen:. "$(dirname "$BASH_SOURCE")"/bl-json --
../bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
../bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-interactive --
../bin/pgpid-qrscan:. "$(dirname "$BASH_SOURCE")"/bl-security --
Nouveau patch :
$ dquilt new fix-bash-libs-paths.patch
Le patch fix-bash-libs-paths.patch est maintenant au sommet
$ dquilt add bin/pgpid-gen bin/pgpid-qrscan
Le fichier bin/pgpid-gen a été ajouté au patch fix-bash-libs-paths.patch
Le fichier bin/pgpid-qrscan a été ajouté au patch fix-bash-libs-paths.patch
$ sed -i -e 's/"$(dirname "$BASH_SOURCE")"/\/usr\/bin/g' bin/pgpid-gen bin/pgpid-qrscan
Après :
$ grep bl- bin/*
bin/pgpid-gen:. /usr/bin/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
bin/pgpid-gen:. /usr/bin/bl-interactive --
bin/pgpid-gen:. /usr/bin/bl-security --
bin/pgpid-gen:. /usr/bin/bl-json --
bin/pgpid-qrscan:. /usr/bin/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
bin/pgpid-qrscan:. /usr/bin/bl-interactive --
bin/pgpid-qrscan:. /usr/bin/bl-security --
Enregistrer le patch :
$ dquilt refresh
Patch fix-bash-libs-paths.patch rafraîchi
$ dquilt header -e
Le patch :
$ cat debian/patches/fix-bash-libs-paths.patch
--- a/bin/pgpid-gen
+++ b/bin/pgpid-gen
@@ -136,10 +136,10 @@
### functions ###
-. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
-. "$(dirname "$BASH_SOURCE")"/bl-interactive --
-. "$(dirname "$BASH_SOURCE")"/bl-security --
-. "$(dirname "$BASH_SOURCE")"/bl-json --
+. /usr/bin/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
+. /usr/bin/bl-interactive --
+. /usr/bin/bl-security --
+. /usr/bin/bl-json --
# Implementation of ICAO doc 9303 part 3 (Specifications Common to all MRTDs - 4.9)
icao9303_mrz_checkdigit() {
--- a/bin/pgpid-qrscan
+++ b/bin/pgpid-qrscan
@@ -107,9 +107,9 @@
### functions ###
-. "$(dirname "$BASH_SOURCE")"/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
-. "$(dirname "$BASH_SOURCE")"/bl-interactive --
-. "$(dirname "$BASH_SOURCE")"/bl-security --
+. /usr/bin/bl-log --no-act --log-level "$LOGLEVEL" --log-exit "$LOGEXITPRIO"
+. /usr/bin/bl-interactive --
+. /usr/bin/bl-security --
# Do nothing else if sourced
[[ "$BASH_SOURCE" == "$0" ]] || return 0
Build final : $ gbp buildpackage --git-ignore-new
.
On peut désormais commit, push, installer et utiliser le résultat final. Dépôt git : https://codeberg.org/foopgp/pgpid/src/branch/debian/latest
.
Documentation :
Le projet est de créer une iso Debian personnalisée avec un environnement pré-configuré et avec les outils foopgp.
Créer une base fonctionnelle se fait en quelques lignes.
$ sudo apt install live-build
$ mkdir demo-debian-live && cd demo-debian-live
$ lb config # initialise une configuration
$ cp -v /usr/share/doc/live-build/examples/auto/* auto/
'/usr/share/doc/live-build/examples/auto/build' -> 'auto/build'
'/usr/share/doc/live-build/examples/auto/clean' -> 'auto/clean'
'/usr/share/doc/live-build/examples/auto/config' -> 'auto/config'
Une configuration minimale fonctionnelle :
$ cat auto/config
#!/bin/sh
# doc:
# man lb config
set -e
lb config noauto \
--archive-areas "main contrib non-free-firmware" \
--debian-installer live \
--debian-installer-distribution bookworm \
--debootstrap-options "--include=apt-transport-https,ca-certificates,openssl" \
--distribution bookworm \
"${@}"
$ cat config/package-lists/demo.list.chroot
task-xfce-desktop
Avec les dépendances tout le nécessaire est installé.
Pour build l’iso :
$ sudo lb clean && lb config && time sudo lb build
P: Build completed successfully
$ ls *iso
live-image-amd64.hybrid.iso
Pour retrouver la configuration étape par étape voir les commits : https://codeberg.org/foopgp/debian-live-foopgp/commits/branch/main
Documentation :
On signe avec sa clé privée et un tiers peut vérifier une signature avec la clé publique correspondante.
On doit donc renseigner sa clé publique dans la configuration du dépot git, pour codeberg.org
: configuration > Clés SSH / GPG
.
Pour obtenir sa clé publique en ASCII (--armor
) :
$ gpg --armor --export piseb@mailo.com
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaBhvbRYJKwYBBAHaRw8BAQdAptz0xzoRLmzYZcNvQZ/bbT7aPIK13xNkJiGv
...
-----END PGP PUBLIC KEY BLOCK-----
Un challenge est demandé pour vérifier qu’on possède la clé privée correspondante.
Pour automatiser les signatures, dans ~/.gitconfig
:
...
[user]
email = piseb@mailo.com
name = piseb
signingKey = 2110EF0D733D76275412AD502C364630A2436D7E
[commit]
gpgSign = true
Désormais une signature est rajoutée pour les commits et les tags, et encore mieux avec la clé privée protégée par smart card.
Exemple :
bash-libs$ git log --show-signature -1
commit 95310bb37d6880e6c1e8e104bcc39ef0645f54f7 (HEAD -> debian/latest, origin/debian/latest)
gpg: Signature faite le lun. 19 mai 2025 14:58:11 CEST
gpg: avec la clef EDDSA 2110EF0D733D76275412AD502C364630A2436D7E
gpg: Bonne signature de « piseb <piseb@mailo.com> (udid4=D9SrwuxesuMU90PM8xypxQe_48.78_002.19) » [ultime]
gpg: alias « [jpeg image of size 5259] » [ultime]
Author: piseb <piseb@mailo.com>
Date: Mon May 19 14:58:11 2025 +0200
[debian] fix copyright
Pour que la signature soit validée en local, la clé publique doit être importée si elle n’est pas déjà présente.
Documentation :