ฉันจะลงนามแพ็คเกจที่ฉันแก้ไขและคอมไพล์ใหม่ได้อย่างไร?


20

ฉันวิ่งไปdpkg-buildpackageหลังจากรับapt-get source nginxnginx เวอร์ชัน backport และปรับเปลี่ยนdebian/rulesเพื่อรวมโมดูล uwsgi ผลลัพธ์สุดท้ายของคำสั่งคือ:

dpkg-deb: building package `nginx' in `../nginx_0.7.67-3~bpo50+1_i386.deb'.
dpkg-deb: building package `nginx-dbg' in `../nginx-dbg_0.7.67-3~bpo50+1_i386.deb'.
 signfile nginx_0.7.67-3~bpo50+1.dsc
gpg: keyring `/home/shogun/.gnupg/secring.gpg' created
gpg: skipped "Faidon Liambotis <paravoid@debian.org>": secret key not available
gpg: [stdin]: clearsign failed: secret key not available

 dpkg-genchanges  >../nginx_0.7.67-3~bpo50+1_i386.changes
dpkg-genchanges: warning: the current version (0.7.67-3~bpo50+1) is smaller than the previous one (0.7.67-3)
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
dpkg-buildpackage: warning: Failed to sign .dsc and .changes file

มันบ่นว่าเพราะฉันไม่ใช่ผู้ดูแลเดิมของแพ็คเกจคีย์ของฉันไม่ตรงกัน

นี่เป็นสิ่งที่จำเป็นจริง ๆ หรือไม่และถ้าเป็นเช่นนั้นฉันจะใช้ปุ่มเพื่อทำการจับคู่ gpg ได้อย่างไร?

คำตอบ:


32

แพ็คเกจ Debian ที่ลงนามโดย PGP นั้นไม่จำเป็นถ้าคุณสร้างมันขึ้นมาเพื่อการใช้งานส่วนตัวของคุณเอง เป็นเพียงวิธีการตรวจสอบสิทธิ์ทั่วไปสำหรับนักพัฒนา Debian เมื่อพวกเขาอัปโหลดแพ็คเกจใหม่ไปยังสาขา Debian ที่ "ไม่เสถียร"

ในการหลีกเลี่ยงข้อความแสดงข้อผิดพลาดให้ใช้:

dpkg-buildpackage -uc -us

(ดู manpage ของ dpkg-buildpackage)


ฉันเพียงแค่มองไปที่ไดเรกทอรีแม่และดูเหมือนว่ามันไม่ได้สร้างไฟล์ .deb ls -alเหล่านั้นขึ้นอยู่กับการปรับเปลี่ยนจากวันที่ มันล้มเหลวในการสร้างพวกเขาเนื่องจากการตรวจสอบความล้มเหลวของ gpg ใช่ไหม? ความหมายของคำสั่งใหม่ของคุณมันควรจะสร้างมันขึ้นมาเหรอ? หรือฉันเข้าใจผิด?
meder omuraliev

6

เมื่อคุณสร้างแพคเกจรุ่นอื่น (เช่นเดียวกับที่คุณทำเนื่องจากคุณเปลี่ยนกฎการสร้าง) คุณควรเพิ่มรายการการเปลี่ยนแปลง ด้วยวิธีนี้แพคเกจของคุณจะมีหมายเลขเวอร์ชันที่แตกต่างกัน (ดังนั้นคุณจะรู้ได้ทันทีว่าไม่ใช่แพ็คเกจมาตรฐานจากการแจกจ่าย) และคุณจะมีร่องรอยของสิ่งที่คุณเปลี่ยนไป

แก้ไขdebian/changelogและเพิ่มรายการที่เลียนแบบรูปแบบของรายการที่มีอยู่ นับจากวันนี้และเลือกหมายเลขรุ่นlike 0.7.67-3~bpo50+meder1(คุณต้องการบางอย่างที่dpkg --compare-versionsบอกว่ารุ่นของคุณเป็นรุ่นล่าสุด) ใส่ที่อยู่อีเมลของคุณเป็นผู้ดูแล ด้วยวิธีดังกล่าวคุณมีข้อบ่งชี้ชัดเจนว่านี่เป็นแพ็คเกจที่คุณแก้ไขและdpkg-buildpackageจะขอข้อความรหัสผ่าน GPG ของคุณ

หากคุณเป็นผู้ใช้ Emacs ให้ติดตั้งdpkg-dev-elแพคเกจและใช้คำสั่งC-c C-aและC-c C-cเพื่อเพิ่มและจบรายการการเปลี่ยนแปลงของคุณ


5

ในขณะที่ไม่จำเป็นต้องเซ็นชื่อแพคเกจและ-uc -usตัวเลือกสามารถใช้เพื่อหลีกเลี่ยงขั้นตอนนั้นได้นอกจากนี้ยังมีประโยชน์ในการเซ็นแพคเกจโดยเฉพาะถ้าคนอื่นจะใช้มันหรือคุณจะส่งมันผ่านเส้นทางการสื่อสารที่ไม่ปลอดภัย และมันก็ไม่ยากเลย

เพื่อสร้างลายเซ็นที่ดีให้ดูหน้าคนสำหรับ dpkg-buildpackage โดยค่าเริ่มต้นจะลงนามในแพ็คเกจด้วย gpg จากข้อความแสดงข้อผิดพลาดที่พิมพ์ออกมาดูเหมือนว่าคุณยังไม่ได้สร้างคีย์ gpg เลย ดูตัวอย่างGnuPrivacyGuardHowto - เอกสารชุมชนของ Ubuntuสำหรับคำแนะนำและพื้นหลัง

ในฐานะที่เป็น @Gilles บันทึกย่อคุณควรเปลี่ยนหมายเลขรุ่นของแพ็คเกจผ่านไฟล์ changelog และระบุที่อยู่อีเมลสำหรับรหัส gpg ที่คุณกำลังใช้งาน วิธีง่ายๆในการทำเช่นนั้นคือเพียงเรียกใช้dch --local fooคำสั่งโดยที่ "foo" เป็นคำหลักสำหรับการเปลี่ยนแปลง จริงๆถ้าคุณไม่ต้องการที่จะทำเช่นนั้นและความจำเป็นในการระบุผู้ดูแลที่แตกต่างกันหรือชื่อผู้อัปโหลด / ที่อยู่หรือที่สำคัญที่เฉพาะเจาะจงที่จะใช้เมื่อการลงนามนอกจากนี้คุณยังสามารถใช้-m, -eหรือ-kตัวเลือกเมื่ออาคาร

ดูวิธีการสร้างแพ็คเกจ Debian ใหม่สำหรับเคล็ดลับเพิ่มเติม

ส่วนที่ยุ่งยากมาเมื่อมีคนพยายามที่จะตัดสินใจว่าแพคเกจที่กำหนดมีการลงนามโดยคนที่พวกเขาไว้วางใจ ตรวจสอบเว็บของ PGP ที่น่าเชื่อถือเพื่อจัดการกับปัญหาที่ละเอียดอ่อนที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.