สร้าง. deb แพคเกจจากสคริปต์หรือไบนารี


73

ฉันค้นหาวิธีง่ายๆในการสร้าง. deb แพ็คเกจสำหรับสิ่งที่ไม่มีซอร์สโค้ดสำหรับคอมไพล์ (configs, shellscripts, ซอฟต์แวร์ที่เป็นกรรมสิทธิ์) นี่เป็นปัญหาทีเดียวเนื่องจากบทเรียนบทเรียนส่วนใหญ่สมมติว่าคุณมีแหล่งทาร์บอลที่คุณต้องการรวบรวม จากนั้นฉันได้พบบทแนะนำสั้น ๆนี้ (ภาษาเยอรมัน)

หลังจากนั้นฉันสร้างสคริปต์ขนาดเล็กเพื่อสร้างพื้นที่เก็บข้อมูลอย่างง่าย แบบนี้:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

ฉันเพิ่มรหัสลงในพวงกุญแจ apt และรวมแหล่งที่มาเช่นนี้:

deb http://my.default.com/my-repository/ ./

ดูเหมือนว่า repo ทำงานได้ดี (ฉันพบปัญหาบางอย่างเพื่อแก้ไขพวกเขาฉันจำเป็นต้องเพิ่มแพ็คเกจสองครั้งและทำให้การแก้ไขชั่วคราวไฟล์ชั่วคราวสำหรับไฟล์ Release) ฉันยังใส่. deb ที่ดาวน์โหลดบางส่วนลงใน repo ดูเหมือนว่าพวกเขาจะทำงานได้โดยไม่มีปัญหา แต่แพ็คเกจที่ฉันสร้างขึ้นเองไม่ได้ ... ฉันทำsudo apt-get updateแล้วมันทำให้เกิดข้อผิดพลาดเช่นนี้:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

มีใครคิดบ้างไหมว่าฉันทำอะไรผิด

UPDATE 2012-03-06:เพียงคำใบ้ AA ให้แก่บุคคลอื่นที่กำลังค้นหาวิธีที่ง่ายต่อการสร้างบส์: ลองดูที่FPM


คุณเพิ่มไฟล์ DEBIAN / control ไปยังแพ็คเกจซึ่งมีฟิลด์ขึ้นอยู่กับ:
Bilal Akhtar

5
Btw ตอนนี้ฉันใช้ FPM สำหรับความต้องการบรรจุภัณฑ์ของฉัน: github.com/jordansissel/fpm
Thomas Deutsch

FWIW ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันในแพ็คเกจที่ฉันสร้างเพราะฉันได้ระบุการอ้างอิงอย่างไม่ถูกต้อง ฉันเขียน "foo> = 2.1" เมื่อมันควรจะเป็น "foo (> = 2.1)" ฉันใช้เวลากว่าหนึ่งชั่วโมงเพื่อดูข้อผิดพลาดครึ่งสุดท้ายก่อนที่ฉันจะรู้ว่าข้อผิดพลาดครึ่งแรกบอกฉันว่าเกิดอะไรขึ้น ... (PS: หิน FPM คุณมอง Aptly ด้วย)
Mark E Haase

2
ฉันเห็นด้วยอย่างยิ่งว่าไม่มีบทเรียนหรือคำแนะนำสำหรับการทำบรรจุภัณฑ์ซึ่งไม่ได้มาจาก tar ball ที่มีไฟล์ทำ ฯลฯ มันยากมากที่จะหาวิธีทำสิ่งนี้ เราต้องการแนวทางดังกล่าวสำหรับคนอย่างผู้พัฒนาจาวาที่ต้องการกระจายสงครามด้วยสคริปต์บางตัวและอาจเป็น liquibase แต่ไม่ใช่ผู้ดูแลระบบเดเบียนหรือผู้ดูแลเดเบียน FPM ไม่ได้ช่วยในกรณีนี้เพราะมันต้องการให้คุณรู้วิธีสร้างบางสิ่งบางอย่างมันสามารถจัดแพคเกจ
John Little

1
ขอบคุณมากที่แบ่งปันข้อมูลเกี่ยวกับ fpm มันใช้งานได้เหมือนมีเสน่ห์!
Damian Nadales

คำตอบ:


70

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

การสร้าง. deb สำหรับสคริปต์นั้นง่ายมากเมื่อคุณเข้าใจพื้นฐานของบรรจุภัณฑ์ โดยสังเขป:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

การเพิ่มสคริปต์เพิ่มเติมต้องการให้คัดลอกไปยังไดเรกทอรีและเพิ่มลงในไฟล์ debian / install - จากนั้นเพียงเรียกใช้ debuild อีกครั้ง คุณควรตรวจสอบและอัปเดตไฟล์ debian / * ตามต้องการ

คุณควรอ่านหน้าคนสำหรับ: dh_make, dh_installและdebuild


3
แก้ไข debian / control, "Architecture: any" ต้องเปลี่ยนเป็น "Architecture: all" อย่าลืมตั้งคำถามตามคำตอบ;)
João Pinto

3
นอกเหนือจากการเปลี่ยนชื่อไดเรกทอรีและปรับปรุงเดเบียน / เปลี่ยนคุณต้องสร้าง. orig เก็บถาวรที่สอดคล้องกับรุ่นใหม่นี้เป็นรูปแบบการเก็บถาวรเนื้อหาไดเรกทอรีแหล่งที่มา (โดยไม่รวม debian /)
João Pinto

1
ด้วยไดเรกทอรีรวมสิ่งที่ฉันมักจะทำคือสิ่งที่ต้องการ: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto

1
การเพิ่มการ--indepตั้งค่าสถานะที่dh_makeจะทำให้แพคเกจ "สถาปัตยกรรม: ทั้งหมด" นอกจากนี้ยัง-bไม่มีการตั้งค่าสถานะใน 11.04 และสูงกว่า
andrewsomething

1
หลังจากสร้างแพ็คเกจ. deb คุณควรตรวจสอบข้อผิดพลาดและการปรับปรุงด้วยlintian somescripts_0.1-1_i386.debหรือlintian package-source.changes- ดู: packaging.ubuntu.com/html/ …
rubo77
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.