Wir haben ein privates Debian-Repository, das vor Jahren von einem früheren Systemadministrator eingerichtet wurde. Pakete wurden mit dem älteren Schlüssel 7610DDDE signiert (den ich widerrufen musste), wie hier für den Root-Benutzer auf dem Reposerver gezeigt.
# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024D/2D230C5F 2006-01-03 [expired: 2007-02-07]
uid Debian Archive Automatic Signing Key (2006) <ftpmaster@debian.org>
pub 1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid Archive Maintainer <root@xxxxxxxxxx.com>
pub 4096R/DD219672 2016-04-18
uid Archive Maintainer <root@xxxxxxxxxx.com>
Alle folgenden Befehle gelten als Root-Benutzer. Ich habe die Datei repository / conf / distributions geändert, um den neuen Unterschlüssel zu verwenden, den ich explizit zum Signieren erstellt habe:
Architectures: i386 amd64 source
Codename: unstable
Components: main
...
SignWith: DD219672
Aber wenn ich ein Paket mit dput aktualisiere, bekomme ich
Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!
This means that from outside your repository will still look like before (and
should still work if this old state worked), but the changes intended with this
call will not be visible until you call export directly (via reprepro export)
Und wenn ich reprepro export direkt starte, bekomme ich:
# reprepro -V export unstable
Exporting unstable...
generating main/Contents-i386...
generating main/Contents-amd64...
Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!
Ich habe gegoogelt und ein paar alte Threads gefunden, die auf ein mögliches Problem bei der Suche nach dem richtigen Gnupg-Verzeichnis durch reprepro hinwiesen. Deshalb habe ich dies mit den gleichen Ergebnissen wie oben versucht:
# GNUPGHOME=/root/.gnupg reprepro -V export unstable
Ein Thread schlug vor, den Schlüssel zu testen, indem er eine Dummy-Datei signierte, die anscheinend einwandfrei funktionierte. Zumindest wurden keine Fehler gemeldet, und ich erhielt nach Abschluss eine 576-Byte-bla.gpg-Datei.
# touch bla
# gpg -u DD219672 --sign bla
Die Manpage reprepro schlägt außerdem vor: "Wenn beim Signieren Probleme auftreten, können Sie versuchen, den Wert von gpg --list-secret-keys zu ermitteln, um zu sehen, wie gpg den Wert interpretieren kann. Wenn dieser Befehl keine oder mehrere Schlüssel auflistet, versuchen Sie zu finden einen anderen Wert (wie die keyid), den gpg leichter mit einem eindeutigen Schlüssel assoziieren kann. " Also habe ich das auch überprüft und bekam:
# gpg --list-secret-keys DD219672
sec 4096R/DD219672 2016-04-18
uid Archive Maintainer <root@xxxxxxxxxx.com>
Und schließlich konnte ich mich mit dem Sys-Administrator in Verbindung setzen, der zuerst unsere Repros eingerichtet hat, und er schlug vor, einen Schlüssel ohne Passphrase zu versuchen. Also habe ich einen neuen Signaturschlüssel generiert, DD219672, veröffentlicht und die obigen Schritte erneut ausgeführt, jedoch mit demselben Ergebnis.
Nachdem ich heute mehr Manpages gelesen und studiert und festgestellt habe, dass pgp-agent automatisch gestartet wird, wenn ich reprepro starte, habe ich mich entschlossen, das für eine Weile zu verfolgen.
Ich habe eine gpg-agent.conf mit hinzugefügt
debug-level 7
log-file /root/gpg.agent.log
debug-all
Und ich kann im Protokoll sehen, dass gpg-agent die Schlüssel nicht findet
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK Pleased to meet you, process 18903
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- RESET
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttyname=/dev/pts/0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttytype=xterm-256color
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- GETINFO version
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> D 2.1.11
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION allow-pinentry-notify
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION agent-awareness=2.1.0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- AGENT_ID
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67109139 Unknown IPC command <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- HAVEKEY C2C5C59E5E90830F314ABB66997CCFAACC5DEA2F 416E8A33354912FF4843D52AAAD43FBF206252D9 8CE77065EA6F3818A4975072C8341F32CB7B0EF0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67108881 No secret key <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- [eof]
Bisher konnte ich nicht herausfinden, wo gpg-agent die in HAVKEY aufgelisteten Schlüssel findet und wie man sie in die richtige Richtung zeigt, um den neuen Schlüssel DD219672 zum Signieren unserer aktualisierten Pakete zu finden.