Daha önceki bir sistem yöneticisi tarafından yıllar önce kurulmuş özel bir debian havuzumuz var. Paketler, repo sunucusundaki kök kullanıcı için burada gösterildiği gibi 7610DDDE (iptal etmek zorunda kaldığım) eski anahtar tarafından imzalandı.

# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/2D230C5F 2006-01-03 [expired: 2007-02-07]
uid                  Debian Archive Automatic Signing Key (2006)  <[email protected]>

pub   1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid                  Archive Maintainer <[email protected]>

pub   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

Aşağıdaki tüm komutlar kök kullanıcı gibidir. Depo/conf/dağıtım dosyasını, imza için açıkça oluşturduğum yeni alt anahtarı kullanacak şekilde değiştirdim:

Architectures: i386 amd64 source
Codename: unstable
Components: main
...
SignWith: DD219672

Ancak bir paketi güncellemek için dput kullandığımda şunu alıyorum:

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)

Ve doğrudan reprepro ihracatını çalıştırdığımda şunu alıyorum:

# 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'!

Google'a baktım ve reprepro'nun uygun gnupg dizinini bulmasıyla ilgili olası bir sorunu belirten birkaç eski konu buldum... bu yüzden bunu yukarıdaki aynı sonuçlarla denedim:

# GNUPGHOME=/root/.gnupg reprepro -V export unstable

Bir iş parçacığı, iyi çalışıyor gibi görünen sahte bir dosyayı imzalayarak anahtarı test etmeyi önerdi... en azından hiçbir hata bildirmedi ve bittikten sonra 576 baytlık bir bla.gpg dosyası buldum.

# touch bla
# gpg -u DD219672 --sign bla

reprepro kılavuz sayfasında ayrıca "İmzalamayla ilgili sorunlar varsa, gpg --list-secret-keys değerini deneyerek gpg'nin değeri nasıl yorumladığını deneyebilirsiniz. Bu komut herhangi bir anahtarı veya birden çok anahtarı listelemiyorsa, bulmaya çalışın" gpg'nin benzersiz bir anahtarla daha kolay ilişkilendirebileceği başka bir değer (anahtar kimliği gibi). Bunu da kontrol ettim ve şunu aldım:

# gpg --list-secret-keys DD219672
sec   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

Sonunda, repros'umuzu ilk kuran sistem yöneticisiyle iletişime geçebildim ve o, parolasız bir anahtarı denemeyi önerdi. Bu yüzden, DD219672 adlı yeni bir imzalama anahtarı oluşturdum, yayınladım, yukarıdaki adımlardan tekrar geçtim, ancak aynı sonuçla.

Bugün, man sayfalarını daha fazla okuyup inceledikten ve reprepro çalıştırdığımda pgp-agent'ın otomatik olarak başladığını fark ettikten sonra, bir süre bunun peşinden gitmeye karar verdim.

ile bir gpg-agent.conf ekledim

debug-level 7
log-file    /root/gpg.agent.log
debug-all

Ve günlükte gpg-agent'ın anahtarları bulamadığını görebiliyorum.

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]

Şu ana kadar gpg-agent'ın HAVKEY'de listelediği anahtarları nerede bulduğunu ve güncellenmiş paketlerimizi imzalamak için yeni anahtar DD219672'yi bulmak için onu doğru yöne nasıl yönlendireceğimi çözemedim.

answer

Aynı sorunu yaşadım ve çok fazla hayal kırıklığından sonra nihayet neler olduğunu buldum.

repreproDayanmaktadır aracı kullandığı gpgme, gnupg2. Bunun yakın zamanda yayınlanan bir sürümü, gizli anahtarlığın işlenme şeklini değiştirdi: https://www.gnupg.org/faq/whats-new-in-2.1.html

gpg used to keep the public key pairs in two files: pubring.gpg and secring.gpg ... With GnuPG 2.1 this changed ... To ease the migration to the no-secring method, gpg detects the presence of a secring.gpg and converts the keys on-the-fly to the the key store of gpg-agent (this is the private-keys-v1.d directory below the GnuPG home directory (~/.gnupg)). This is done only once and an existing secring.gpg is then not anymore touched by gpg. This allows co-existence of older GnuPG versions with GnuPG 2.1. However, any change to the private keys using the new gpg will not show up when using pre-2.1 versions of GnuPG and vice versa.

Bu nedenle, gpg ile yeni bir anahtar oluşturursanız, gpg2 bunu görmez ve bunun tersi de geçerlidir.

Benim için işe yarayan hızlı düzeltme:

gpg --export-secret-keys | gpg2 --import -

Ve tabii ki diğer tarafa gitmeniz gerekiyorsa:

gpg2 --export-secret-keys | gpg --import -

Kurulumunuza bağlı olarak, ayrıca eklemek isteyebilirsiniz/gerekebilir --export-secret-subkeys

Yukarıdakileri yaptıktan sonra, repreproyeni anahtarımla düzgün çalıştı.

Benim için sorun, anahtarları kullanıcı olarak oluşturmam ve reprepro'yu root olarak çalıştırmamdı .

Olan, "olmadan sudo" ürettiğim anahtarların yerelime eklenmesiydi pubring.gpg. Çalıştırdığımda sudo reprepro ...root olarak çalıştırıyorum ve bu nedenle root'taki anahtarı bulmaya çalışıyor pubring.gpgve açıkçası bir tane bulamıyor.

Çözüm, tüm gpgkomutları root (eq. sudo -ive sonra gpg --gen-key) olarak çalıştırmaktı. Koşarken sudo gpg --list-keysistediğiniz tuşları ve çizgiyi gördüğünüzden emin olun /root/.gnupg/pubring.gpg.

Umarım yardımcı olur!