วิธีสร้างแพ็คเกจ deb ที่ติดตั้งชุดไฟล์


23

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

คำถามคือ - เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร

ให้ตัวอย่าง:

~/mypluginfolder/มีไฟล์x,, yโฟลเดอร์ย่อยที่เรียกว่าabcและภายในไฟล์อื่นที่เรียกว่าzและภายในว่าไฟล์อื่นที่เรียกว่า

ฉันต้องการ tar โฟลเดอร์นี้: tar -cvf myfiles.tar ~/mypluginfolder

ฉันคิดว่าแพ็กเกจเดเบียนของฉันจะเป็นอย่างไร

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

เป็นไปได้ไหมที่จะไม่myfiles.tarยกตัวอย่างไปยังตำแหน่งโฟลเดอร์ที่รู้จัก

/usr/share/rhythmbox/plugins/

ดังนั้นผลลัพธ์สุดท้ายจะเป็น:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

ถ้า - สันนิษฐานว่า launchpad ต้องการแหล่งข้อมูลคำแนะนำคือที่ที่ฉันควรจะวางโฟลเดอร์ซอร์สและไฟล์ลงในโครงสร้างแพ็คเกจ deb


ในที่สุดสิ่งนี้จะกลายเป็นชุดของแพ็คเกจ PPA สำหรับแต่ละแพ็คแพด

สิ่งที่ฉันชอบ (แต่อาจจะไม่สามารถบรรลุ ... ) เพื่อให้บรรจุภัณฑ์ของฉันให้น้อยที่สุด - สร้างชุดของแพคเกจจากแม่แบบและปรับขั้นต่ำเปล่า (changelog ฯลฯ + โครงสร้างไฟล์ / ไฟล์และโฟลเดอร์ tar) .


อืม ... ทำไมคุณต้องการ .deb ที่จะทำสกัด tar ? ทำไมไม่เพียงนำซอร์สโค้ดจาก tar และสร้าง deb จากศูนย์ด้วยซอร์ส?
โธมัสวอร์ด

2
ความเป็นไปได้อาจเป็นได้ว่าคุณได้เล่น tarball จากที่อื่น ๆ ซึ่งเป็นสไตล์อะโดบีแฟลช
jrg

@jrg ที่ดาวน์โหลดตัวติดตั้ง. bin ไม่ใช่ tarball รูปแบบการบรรจุ adobe ไม่ได้ระบุแหล่งที่มา (แหล่งที่มาปิด) แม้ว่าแนวคิดจะยังคงเหมือนเดิมให้ดาวน์โหลดรหัสจากที่อื่นแล้วแยก / ติดตั้ง (ฉันเป็น nit = picky ที่นี่: P)
Thomas Ward

@LordofTime ความแตกต่างที่เหมือนกัน ; p
jrg

คำตอบ:


31

ด้านล่างฉันสมมติว่าซอร์สนั้นเปิด (เช่นสคริปต์ Python) ซึ่งไม่ได้ผูกกับสถาปัตยกรรมใด ๆ (เช่น amd64 หรือ i386) ดังนั้น "all" หากคุณมีซอร์ส C บางตัวคุณต้องใช้ไฟล์Architecture: amd64 i386ต้นฉบับของคุณcontrol


การสร้างแพคเกจพร้อมสำหรับ Launchpad

ในที่สุดสิ่งนี้จะกลายเป็นชุดของแพ็คเกจ PPA สำหรับแต่ละแพ็คแพด

สิ่งที่ฉันชอบ (แต่อาจไม่สามารถบรรลุ ... ) คือการทำให้บรรจุภัณฑ์ของฉันให้น้อยที่สุด - สร้างชุดของแพคเกจจากแม่แบบและปรับขั้นต่ำเปล่า (changelog ฯลฯ + ไฟล์ tar)

Launchpad ยอมรับเฉพาะแพ็คเกจต้นทางดังนั้นสร้างrulesไฟล์ที่ติดตั้งในตำแหน่งที่ถูกต้อง เพื่อความสะดวกผมจะใช้debhelper ไดเรกทอรีพร้อมไฟล์ของคุณควรมีลักษณะดังนี้:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

debian/copyrightไฟล์ก็อาจจะเป็นประโยชน์สำหรับการแจ้งผู้ใช้เกี่ยวกับใบอนุญาตที่เกี่ยวข้องกับแพคเกจ ฉันไม่คิดว่าคุณต้องการpostinstสคริปต์เนื่องจากคุณต้องการแยกไฟล์บางไฟล์เท่านั้น compatควรมีระดับความเข้ากันได้ของ debhelper, พูดว่า "8" (โปรดดูหน้าคู่มือของ debhelperสำหรับรายละเอียดเพิ่มเติม)

changelogไฟล์ที่สามารถแก้ไขได้ด้วยdchคำสั่งพร้อมใช้งานจากdevscriptsแพคเกจ rules(ใช้ debhelper) ควรมี:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

ทำให้มันใช้งานchmod 755 debian/rulesได้ debuild -Sแพคเกจที่มาสามารถสร้างใช้ <package-name>-<version>ให้แน่ใจว่าจะอยู่ในไดเรกทอรีชื่อ ข้อมูลเพิ่มเติมเกี่ยวกับoverride_พฤติกรรมและdhคำสั่งสามารถพบได้ในหน้าคู่มือหน้าคู่มือของมัน

คู่มือ Debian ใหม่ Maintainers'เป็นที่มีคุณค่ามากสำหรับผมที่จะเข้าใจในเรื่องนี้ก็อ่านหนังสือที่แนะนำ บรรจุภัณฑ์ตัวอย่างสามารถพบได้บนhttps://github.com/Bumblebee-Project/bumblebee-ppa


การสร้างแพ็คเกจจากแผนผังไฟล์ที่มีอยู่

dpkg-deb -bสามารถใช้สำหรับการสร้าง tarballs จากทรีไฟล์ที่มีอยู่ ก่อนอื่นให้เริ่มด้วยการสร้างไดเรกทอรีที่ควรตั้งชื่อตามแพ็คเกจของคุณ ฉันจะถือว่าคุณต้องการที่จะตั้งชื่อและใส่ไว้ในmyplugin /usr/share/rhythmbox/plugins/mypluginfolderนอกจากนี้ให้สร้างDEBIANไดเรกทอรี (ตัวพิมพ์ใหญ่!) สำหรับจัดเก็บข้อมูลแพ็คเกจ:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

คัดลอกไฟล์ของคุณ:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

ถัดไปคุณจะต้องมีไฟล์ควบคุมที่เรียกว่าmyplugin/DEBIAN/controlซึ่งอธิบายแพคเกจ เนื้อหาของไฟล์ดังกล่าวอยู่ด้านล่าง:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

ตอนนี้คุณสามารถเลือกที่จะตรวจสอบเนื้อหาของแพ็คเกจของคุณ คำสั่งถัดไปแสดงเนื้อหาไฟล์และรายการไดเรกทอรีของmyplugin:

find myplugin -ls

หากคุณพอใจให้สร้างแพ็คเกจในไดเรกทอรีปัจจุบัน:

dpkg-deb -b myplugin .

ไฟล์ใหม่จะปรากฏขึ้นชื่อเหมือน<package>_<version>_<architecture>.debซึ่งอยู่ในตัวอย่างmyplugin_1.0-1_all.debนี้ คุณสามารถใช้lessโปรแกรมเพื่อดูไฟล์ ตัวอย่างเช่นless myplugin_1.0-1_all.deb.


3
+1 อัจฉริยะพิเศษ - ฉันคำนับคุณครับ ขอบคุณ!
fossfreedom

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