Chúng tôi có một kho lưu trữ debian riêng đã được một quản trị viên hệ thống trước đó thiết lập nhiều năm trước. Các gói được ký bởi khóa cũ hơn, 7610DDDE (mà tôi phải thu hồi), như được hiển thị ở đây cho người dùng gốc trên máy chủ repo.

# 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]>

Tất cả các lệnh dưới đây là của người dùng root. Tôi đã sửa đổi tệp kho lưu trữ / conf / phân phối để sử dụng khóa phụ mới mà tôi đã tạo rõ ràng để ký:

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

Nhưng khi tôi sử dụng dput để cập nhật gói, tôi nhận được

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)

Và khi tôi chạy reprepro export trực tiếp, tôi nhận được:

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

Tôi Googled và tìm thấy một vài chuỗi cũ cho biết có thể xảy ra sự cố với việc reprepro tìm thư mục gnupg thích hợp ... vì vậy tôi đã thử điều này với kết quả tương tự ở trên:

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

Một luồng đề xuất kiểm tra khóa bằng cách ký một tệp giả có vẻ hoạt động tốt ... ít nhất là nó không báo lỗi và tôi đã kết thúc với một tệp bla.gpg 576 byte sau khi hoàn tất.

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

Trang reprepro man cũng gợi ý "Nếu có vấn đề với việc ký, bạn có thể thử gpg --list-secret-key value để xem cách gpg có thể diễn giải giá trị. Nếu lệnh đó không liệt kê bất kỳ khóa nào hoặc nhiều khóa, hãy thử tìm một số giá trị khác (như keyid), gpg đó có thể dễ dàng kết hợp với một khóa duy nhất. " Vì vậy, tôi cũng đã kiểm tra điều đó và nhận được:

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

Và cuối cùng tôi đã có thể liên hệ với quản trị viên hệ thống, người đầu tiên thiết lập đại diện của chúng tôi và anh ấy đề xuất thử một khóa không có cụm mật khẩu. Vì vậy, tôi đã tạo khóa ký mới, DD219672, đã xuất bản nó, thực hiện lại các bước trên nhưng với kết quả tương tự.

Hôm nay, sau khi đọc nhiều hơn và nghiên cứu các trang người dùng và nhận thấy rằng pgp-agent sẽ tự động khởi động khi tôi chạy reprepro, tôi quyết định theo đuổi điều đó một thời gian.

Tôi đã thêm gpg-agent.conf với

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

Và tôi có thể thấy trong nhật ký rằng gpg-agent không tìm thấy chìa khóa

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]

Cho đến nay tôi vẫn không thể tìm ra gpg-agent đang tìm các khóa mà nó liệt kê trong HAVKEY ở đâu và làm thế nào để trỏ nó đi đúng hướng để tìm khóa mới, DD219672, để ký các gói cập nhật của chúng tôi.

answer

Tôi cũng gặp phải vấn đề tương tự, và sau nhiều lần thất vọng, cuối cùng tôi cũng tìm ra được chuyện gì đang xảy ra.

Công repreprocụ này sử dụng gpgme, dựa trên gnupg2. Bản phát hành gần đây của nó đã thay đổi cách xử lý vòng khóa bí mật: 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.

Do đó, nếu bạn tạo một khóa mới bằng gpg, gpg2 sẽ không nhìn thấy nó và ngược lại.

Bản sửa lỗi nhanh phù hợp với tôi:

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

Và nếu bạn cần đi theo hướng khác, tất nhiên:

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

Tùy thuộc vào thiết lập của bạn, bạn cũng có thể muốn / cần thêm --export-secret-subkeys

Sau khi thực hiện các bước trên, repreprokhóa mới của tôi đã hoạt động bình thường.

Đối với tôi, vấn đề là tôi đã tạo khóa với tư cách người dùngchạy reprepro dưới dạng root .

Điều gì đã xảy ra là các khóa mà tôi tạo "không có sudo" được thêm vào cục bộ của tôi pubring.gpg. Khi tôi chạy, sudo reprepro ...tôi chạy nó dưới dạng root và do đó nó cố gắng tìm chìa khóa trong root pubring.gpgvà rõ ràng là không tìm thấy.

Giải pháp là chạy tất cả gpgcác lệnh dưới dạng root (eq. sudo -iVà sau đó gpg --gen-key). Đảm bảo rằng khi bạn chạy, sudo gpg --list-keysbạn sẽ thấy các phím và dòng mong muốn của mình /root/.gnupg/pubring.gpg.

Hy vọng rằng sẽ giúp!