จะสร้างไฟล์ DEB ด้วยตนเองได้อย่างไร?


46

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

เป็นไปได้ไหม


ไม่ใช่คำตอบที่ดีที่คุณเลือก?
Gigamegs

@ David จริง ๆ แล้วฉันทำด้วย "dpkg-deb" มันง่ายกว่ามากนั่นคือเหตุผลที่ฉันเลือก Gilles โดยการแสดงรายการไฟล์ในโฟลเดอร์แพ็คเกจให้มุมมองที่ชัดเจนของไฟล์ที่จะวางที่นั่น ดังนั้นฉันคิดว่าคำตอบของเขาดีกว่า ..
เดซี่

ฉันได้แสดงรายการไฟล์ทั้งหมดในแพ็คเกจด้วย
Gigamegs

11
@ David ฉันหมายถึงการพิสูจน์ว่าคำตอบของเขาคืออนุพันธ์เป็นสิ่งหนึ่ง แต่ "ไม่ใช่คำตอบที่ดีมาก"? คำตอบของ Gilles นั้นยอดเยี่ยม ไม่สำคัญว่าคำตอบของคุณจะเป็นครั้งแรกหรือเปล่า และไม่มีอะไรผิดปกติที่จะตอบคำถามที่มีอยู่และขยายออกไป นั่นเป็นเรื่องดี
Michael Mrozek

คำตอบ:


57

ทำแพ็คเกจแหล่งที่มา

คำแนะนำของฉันคือการทำแพคเกจที่มา ติดตั้งสร้างสิ่งจำเป็น , debhelper , DH-แต่งหน้า เปลี่ยนไดเรกทอรีที่ไฟล์ที่คุณต้องการติดตั้งอยู่ (ชื่อไดเรกทอรีต้องอยู่ในรูปแบบ$PACKAGE-$VERSIONเช่นmyapp-4.2-1สำหรับครั้งแรกที่บรรจุภัณฑ์ MyApp v4.2) dh_make --createorigและวิ่ง ตอบคำถาม. Debhelper จะสร้างโครงสร้างพื้นฐานพื้นฐานที่จำเป็นในการสร้างแพ็คเกจโดยการสร้างไฟล์ในไดเรกทอรีย่อยที่เรียกว่าdebianทั้งไฟล์บังคับและแม่แบบบางไฟล์สำหรับไฟล์เสริม คุณอาจต้องแก้ไขไฟล์เหล่านี้:

  • แก้ไขdebian/rulesเพื่อสร้างสิ่งที่ต้องการสร้างและติดตั้งไฟล์ในตำแหน่งที่ถูกต้อง หากคุณต้องการคัดลอกไฟล์บางไฟล์และไม่คอมไพล์ไฟล์debian/installให้แก้ไขไฟล์เพื่อระบุไฟล์ที่จะต้องติดตั้ง
  • แก้ไขdebian/copyrightเพื่อเพิ่มข้อมูลใบอนุญาตเกี่ยวกับแพคเกจของคุณและข้อมูลเกี่ยวกับสถานที่รับเวอร์ชันล่าสุด (ถ้าเกี่ยวข้อง)
  • แก้ไขdebian/changelogเพื่อลบการอ้างอิงไปยัง ITP (เฉพาะที่เกี่ยวข้องถ้าคุณทำงานให้กับโครงการ Debian) เปลี่ยนชื่อdebian/postinst.exเป็นdebian/postinstและเพิ่มคำสั่งหลังการติดตั้งที่นั่น หากคุณอัปเดตแพคเกจภายหลังให้เรียกใช้debchange -iเพื่อเพิ่มรายการบันทึกการเปลี่ยนแปลงหรือแก้ไขไฟล์ใน Emacs (เมื่อติดตั้งdpkg-dev-el )

เรียกใช้dpkg-buildpackage -rfakeroot -us -ucเพื่อสร้าง.debแพ็คเกจ (ลบ-us -ucหากคุณต้องการเซ็นชื่อแพ็คเกจด้วยคีย์ PGP ของคุณ)

ทำไบนารีแพคเกจโดยตรง

หากคุณตัดสินใจที่จะสร้างไบนารีแพคเกจโดยตรงโดยไม่ต้องสร้างจากแพ็กเกจซอร์สซึ่งไม่ได้ง่ายกว่าจริง ๆ เพราะไม่มีเครื่องมือมากมายที่จะอำนวยความสะดวกให้กับกระบวนการคุณจะต้องคุ้นเคยกับรูปแบบของแพ็กเกจพื้นฐาน มันเป็นเรื่องที่อธิบายไว้ในคู่มือนโยบาย Debianโดยเฉพาะอย่างยิ่งCH 3 (รูปแบบของแพ็คเกจไบนารี) , ch. 5 (ไฟล์ควบคุม) , ch. 6 (สคริปต์การติดตั้ง)และภาคผนวก B (การจัดการแพคเกจไบนารี)

คุณตรวจสอบให้แน่ใจว่าแพ็คเกจของคุณติดตั้งไฟล์ที่คาดหวัง/usr/share/doc/copyright(ที่มีสิทธิ์ใช้งานเนื้อหาแพ็คเกจรวมถึงตำแหน่งที่จะค้นหาแพ็คเกจล่าสุด) และ/usr/share/doc/changelog.Debian.gz(มีการเปลี่ยนแปลงของแพ็คเกจ deb) คุณไม่จำเป็นต้องใช้สิ่งเหล่านี้หากคุณจะใช้แพ็คเกจภายใน บริษัท แต่จะดีกว่าถ้ามีแพ็คเกจเหล่านี้

เกี่ยวกับ Debian และอนุพันธ์

หากคุณมีเครื่องมือ Debian ให้ใช้dpkg-debเพื่อสร้างแพ็คเกจ ในไดเรกทอรีที่มีข้อมูลที่จะติดตั้งเพิ่มไดเรกทอรีที่เรียกว่าDEBIANที่ระดับบนสุดที่มีไฟล์ควบคุมและสคริปต์ผู้ดูแล

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

วิธีที่ยาก

หากคุณไม่ได้มีเครื่องมือ Debian สร้างที่เก็บของไฟล์ที่คุณต้องการแพคเกจที่เรียกว่าdata.tar.gzเป็นที่เก็บแยกต่างหากจากไฟล์ควบคุมที่เรียกว่าcontrol.tar.gz(ไม่ไดเรกทอรีย่อย) และไฟล์ข้อความที่เรียกว่าและมีข้อความdebian-binary2.0

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

คุณต้องไม่น้อยกว่าแฟ้มควบคุมด้วยฟิลด์Package, Maintainer, Priority, Architecture, Installed-Size, Version, และการประกาศการพึ่งพาใด ๆ ที่จำเป็น

postinstสคริปต์ที่จะดำเนินการหลังจากการติดตั้งจะเรียกว่า ตรวจสอบให้แน่ใจว่าสามารถเรียกใช้งานได้ มันไปพร้อมcontrolกัน

การแปลงแพ็คเกจไบนารีจากรูปแบบอื่น

หากคุณมีแพ็คเกจไบนารีจากการกระจายอื่นคุณสามารถใช้เอเลี่ยนเพื่อแปลงเป็น


3
IMO เป็นสำเนาจาก anwser ของฉันหรือไม่ คุณคิดอย่างไร?
Gigamegs

1
คำตอบที่สันนิษฐานว่า OP รู้วิธีใช้ emacs emacs จำเป็นจริงๆหรือไม่? สำหรับการแก้ไขการเปลี่ยนแปลงฉันคิดว่าสามารถdch -iใช้ได้
Faheem Mitha

กำลังarทำอะไรอยู่ที่tarไม่ใช่?
mmstick

@mmstick มันเป็นรูปแบบที่แตกต่างกัน ฉันไม่รู้ว่าทำไมผู้ออกแบบรูปแบบ deb เลือกใช้เท่นี่
Gilles 'SO- หยุดความชั่วร้าย'

1
หากคุณต้องการเปลี่ยนชื่อและอีเมลที่dh_make --createorigใช้คุณต้องexport DEBEMAIL="me@example.com"และexport DEBFULLNAME="Firstname Lastname"ก่อน
Ryan

10

ก่อนอื่นคุณต้องสร้างโฟลเดอร์ build และไฟล์เก็บถาวรของคุณ: tar czvf data.tar.gz files

จากนั้นในโฟลเดอร์สร้างคุณต้องสร้างไฟล์ควบคุมด้วยข้อมูลที่ต้องการ:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

จากนั้นคุณสามารถเพิ่มสคริปต์เปลือก preinst, postint, prerm และ postrm ได้อย่างอิสระเพื่อควบคุมการติดตั้งก่อนและหลังการติดตั้งและก่อนและโพสต์พฤติกรรมการลบของไฟล์. deb จากนั้นคุณสามารถสร้างไฟล์เก็บถาวรควบคุมด้วย tar: tar czvf control.tar.gz control preinst postinst prerm postrm

echo 2.0 > debian-binaryแล้วคุณจะต้องเป็นไฟล์ไบนารีเดเบียน: ในการสร้างโฟลเดอร์ที่คุณควรมีในขณะนี้ไฟล์เหล่านี้: และdebian-binary control.tar.gzdata.tar.gz

ในที่สุดคุณจำเป็นต้องมีarแพคเกจเพื่อสร้างไฟล์. deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz


1
เกี่ยวกับความar -r xxx.deb debian-binary control.tar.gz data.tar.gzคุ้มค่าของการเน้นย้ำลำดับสำคัญ: การควบคุมต้องมาก่อนข้อมูล
Hibou57

@Bytemain คำตอบที่ได้รับการโหวตสูงสุดจะมีลักษณะบางส่วนตามข้อความของคุณ แต่เพิ่มรายละเอียดและสามารถอ่านได้ดีกว่า ลำดับที่เราสามารถคัดลอก / วางทำให้หล่อขึ้นโดยเฉพาะอย่างยิ่ง
mariotomo

3

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

Debreate เป็น GUI ที่ง่ายมากสำหรับการสร้างแพ็คเกจ DEB อย่างง่าย คุณสามารถระบุไฟล์ที่จะไปและถ้า / สิ่งที่ควรดำเนินการในการติดตั้ง / ถอนการติดตั้ง / ถอนการติดตั้ง / ก่อน ฉันเคยทำแพ็คเกจทั้งหมดด้วยวิธีมาตรฐาน แต่หลังจากฉันเริ่มใช้เครื่องมือนี้ฉันจะกลับไปเมื่อจำเป็นเท่านั้น



1

วิ่งเข้าไปหาสิ่งนี้ด้วย Zimbra 7 บน Debian โดยใช้แพ็คเกจ Ubuntu (ฉันหัวแข็งฉันชอบ Debian> bUbuntu ถึงแม้ Zimbra จะปล่อยเฉพาะ Ubuntu เท่านั้น) ไม่แน่ใจว่าฉันจะแก้ไขปัญหานี้ได้อย่างไรก่อนหน้านี้ฉันแน่ใจว่าฉันไม่ต้องทำสิ่งนี้เมื่อฉันติดตั้งก่อนหน้านี้!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

ไฟล์ทั้งหมด .deb new/ใหม่ของคุณจะอยู่ใน

หมายเหตุ : นี่เป็นบีบ - dpkg ใน wheezy มี --force-bad-version ตอนนี้


1

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


ฟังก์ชั่นนี้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับแพ็คเกจการติดตามที่คุณต้องติดตั้งจากแหล่งที่มา คุณช่วยเสนอรายละเอียดเพิ่มเติมได้ไหม? เช่นในระหว่างการติดตั้งคุณสามารถเปลี่ยน symlink ลบไฟล์แก้ไขไฟล์ config เพิ่ม daemons ฯลฯ ... ผู้ตรวจสอบจะติดตั้ง track track และเลิกทำการเปลี่ยนแปลงเหล่านี้ในระดับใด คุณสามารถแก้ไขเอาต์พุตเพื่อเพิ่มสคริปต์ prerm และ postrm ได้อย่างง่ายดายหรือไม่?
AatG

ดูwiki.debian.org/CheckInstallหากคุณต้องการเปลี่ยนแปลงสิ่งต่าง ๆ ระหว่างการติดตั้ง - วิธีที่ง่ายที่สุดคือแก้ไข Makefile เพื่อเปลี่ยนการติดตั้ง prerm / postrm - ฉันไม่พบวิธีแก้ไข เป็นเพียงโปรแกรมขนาดเล็กที่อนุญาตการถอนการติดตั้งอย่างง่าย
ยกเลิกกำหนด

-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.