1. คำนำ
ความรับผิดชอบต่อเครื่องหมายถึงการดูแลฮาร์ดแวร์และส่วนประกอบซอฟต์แวร์ ตามที่เห็นในชีวิตประจำวันในฐานะผู้ดูแลระบบ การติดตั้งซอฟต์แวร์เป็นแพ็คเกจซอฟต์แวร์จะดีกว่ามาก แทนที่จะติดตั้งไฟล์ต้นทางจำนวนมาก ซึ่งจะช่วยลดต้นทุนในการบำรุงรักษาระบบอย่างเหมาะสม
แพ็คเกจที่มีจำหน่ายจากผู้จัดจำหน่ายที่คุณต้องการจะได้รับการตรวจสอบและดูแลโดยผู้ดูแลแพ็คเกจ เขาทดสอบซอฟต์แวร์และรับรองว่าเหมาะสมกับแพ็คเกจซอฟต์แวร์อื่น ๆ ที่มีอยู่ในการแจกจ่าย นอกจากนี้ แพ็กเกจยังลงนามด้วยคีย์ GPG จากผู้ดูแลแพ็กเกจ สิ่งนี้รับประกันความสมบูรณ์ของแพ็คเกจและแสดงให้คุณเห็นว่าแพ็คเกจนั้นมาจากแหล่งที่เชื่อถือได้
รูปแบบแพ็คเกจขึ้นอยู่กับการแจกจ่าย Linux ของคุณ รูปแบบที่เลือกมีดังต่อไปนี้:
deb
แพ็คเกจที่ใช้ใน: เดเบียน GNU/Linux , อูบุนตู , Armbian , Linux Mint , Knoppix
rpm
แพ็คเกจที่ใช้ใน: หมวกสีแดง , Fedora , CentOS , OpenSuse
tgz and txz
แพ็คเกจที่ใช้ใน: สแล็คแวร์
tar.xz
แพ็คเกจที่ใช้ใน: Arch Linux
เอกสารนี้อธิบายวิธีสร้างแพ็คเกจสำหรับ Debian GNU/Linux แบบย่อ สำหรับข้อมูลโดยละเอียดเกี่ยวกับรูปแบบแพ็คเกจ Debian และเครื่องมือในการดูแลระบบ Linux ที่ใช้ `deb` คุณอาจดูใน Debian Package Management Book [dpmb] ในการสร้างแพ็คเกจสำหรับ Debian GNU/Linux เอกสารเหล่านี้มีความจำเป็น:
- คู่มือการดูแลผู้ใช้ Debian ใหม่ [dnmg]
- ข้อมูลอ้างอิงของนักพัฒนา Debian [GDR]
- บทแนะนำเกี่ยวกับบรรจุภัณฑ์เดเบียน [สามารถ]
- คู่มือนโยบายเดเบียน [รอบต่อนาที]
แพ็คเกจที่เราจะใช้งานนั้นมีชื่อว่า `helloworld' และมีหมายเลขเวอร์ชัน 0.1 เพื่อจุดประสงค์ในการสาธิต มันมีเพียงสคริปต์ Python ตัวเดียวที่แสดงข้อความ Hello, world!:
#!/usr/bin/python print ('Hello, world!')
2. ข้อกำหนด
2.1. คีย์ GPG
ตามขั้นตอนที่ 1 เตรียมคีย์ GPG ของคุณให้พร้อม ต่อมาจะต้องใช้กุญแจในการเซ็นรับพัสดุ โปรดทราบว่าแพ็คเกจที่ไม่ได้ลงนามนั้นไม่น่าเชื่อถือและไม่สามารถเป็นส่วนหนึ่งของจักรวาล Debian ได้
ในกรณีที่คุณยังไม่มีคีย์ GPG ให้สร้างใหม่ คุณสามารถปฏิบัติตามสามขั้นตอนด้านล่าง คำสั่งแรกสร้างคีย์ใหม่ คำสั่งที่สองส่งออกคีย์ใหม่ของคุณไปยังไฟล์แยกต่างหาก และคำสั่งที่สามเพิ่มคีย์ลงในคีย์ริงส่วนตัวของคุณ
$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg
ในระหว่างการสร้าง ตรวจสอบให้แน่ใจว่าชื่อที่ระบุ _YOUR NAME_ ถูกต้อง เป็นเรื่องปกติที่จะใช้ชื่อและนามสกุลร่วมกัน ชื่อนี้จะต้องเหมือนกันทุกประการในแพ็คเกจ จากนั้นเมื่อสร้างไฟล์ `control` ของแพ็คเกจ Debian สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ GPG โปรดดูที่ GNU Privacy Handbook [gph]
2.2. ห่วงโซ่เครื่องมือบรรจุภัณฑ์
ในการสร้างแพ็คเกจ Debian ด้วยซอร์สโค้ด จำเป็นต้องใช้แพ็คเกจซอฟต์แวร์ต่อไปนี้ในระบบของคุณ:
- สร้างสำคัญ
- autoconf
- automake
- autotools-dev
- dh-make
- debhelper
- devscripts
- รากปลอม
- xutils
- lintian
- pbuilder
ในฐานะผู้ใช้ 'รูท' คุณสามารถติดตั้งได้โดยใช้คำสั่งต่อไปนี้:
# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder
2.3. เตรียมซอฟต์แวร์ที่จะบรรจุ
เราต้องเตรียมไดเร็กทอรีเพื่อสร้างแพ็คเกจ สร้างไดเร็กทอรีเพื่อเตรียมสภาพแวดล้อมที่เราจะสร้างแพ็คเกจ:
$ mkdir -p ~./build/helloworld/0.1
คัดลอกไฟล์บีบอัด 'tar.gz' ในไดเร็กทอรี:
$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1
เปลี่ยนเป็นไดเร็กทอรีและแตกแพ็กเกจ:
$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz
ตอนนี้ ไดเร็กทอรีมีทั้งซอร์สโค้ดในไดเร็กทอรีที่แยกจากกัน และไฟล์เก็บถาวรที่บีบอัด:
~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz
3. Debianization
ณ จุดนี้ เราจะเพิ่มไฟล์เฉพาะสำหรับแพ็คเกจ Debian นั่นเป็นสาเหตุที่ขั้นตอนนี้มีชื่อว่า _Debianization_ ของซอฟต์แวร์ ทำได้ในหลายขั้นตอนเดียว
3.1 เตรียมโครงสร้างแพ็คเกจ
เปลี่ยนเป็นไดเร็กทอรีที่เก็บซอร์สโค้ดทั้งหมดของแพ็คเกจ ในตัวอย่างของเรา แพ็คเกจประกอบด้วยไฟล์ `helloworld.py' เท่านั้น:
~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py
มาเพิ่มไฟล์เฉพาะของแพ็คเกจ Debian กันเถอะ เครื่องมือ `dh_make` เข้ามามีบทบาท สวิตช์ '-e' ใช้ที่อยู่ที่ระบุเป็นที่อยู่อีเมลในช่อง 'ผู้ดูแล' ของไฟล์ 'เดเบียน/ตัวควบคุม' การสร้างแพ็คเกจใช้ที่อยู่อีเมลของคุณเองแทน อย่าลืมใช้ที่อยู่อีเมลเดียวกันกับที่ตรงกับคีย์ GPG ของคุณ
สวิตช์ `-f' ใช้ไฟล์ที่กำหนดเป็นไฟล์เก็บถาวรต้นฉบับ และข้ามการคัดลอกแผนผังโปรแกรมปัจจุบันไปที่ `program.orig'
~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz
ที่พร้อมท์ ระบบจะขอให้คุณเลือกประเภทของแพ็คเกจที่ควรสร้าง ในการเลือก _single binary_ พิมพ์ `s`
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / .
ส่งผลให้ไดเร็กทอรีชื่อ `debian':
~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py
ไดเร็กทอรีนี้มีไฟล์เฉพาะแพ็คเกจทั้งหมด
3.2. ปรับไฟล์ควบคุม
ไฟล์ `เดเบียน/การควบคุม' เก็บการพึ่งพาที่จำเป็น _to build_ แพ็คเกจ การใช้คำสั่ง `dpkg-depcheck -d ./configure` คุณจะได้รับรายการพร้อมแพ็คเกจที่จำเป็นทั้งหมด ในกรณีของเราไม่จำเป็นต้องมีแพ็คเกจเพิ่มเติมเพราะ Python เป็นภาษาที่ตีความ
ต่อไป เราต้องแก้ไขไฟล์ `debian/control' และเพิ่มค่าเฉพาะแพ็คเกจ สำหรับตัวอย่างของเรามีลักษณะดังนี้:
Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python
3.3. ปรับไฟล์ลิขสิทธิ์
ไฟล์ `เดเบียน/ลิขสิทธิ์' มีข้อมูลใบอนุญาตสำหรับแพ็คเกจซอฟต์แวร์ มันถูกเตรียมไว้สำหรับการเปิดตัวผ่าน GNU Public License 2 (GPLv2) สำหรับตัวอย่างของเรามีลักษณะดังนี้:
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'.
3.4. ปรับไฟล์บันทึกการเปลี่ยนแปลง
หลังจากข้อมูลลิขสิทธิ์แล้ว ไฟล์ `debian/changelog' จะต้องได้รับการปรับ ในตัวอย่างของเรา เราเพิ่มข้อมูล การเปิดตัวครั้งแรก
helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100
นั่นคือทั้งหมดที่เราต้องการจนถึงตอนนี้ — ในที่สุดเราก็สร้างแพ็คเกจได้แล้ว
4. สร้างแพ็คเกจ
ในการสร้างแพ็คเกจเราต้องย้ายขึ้นหนึ่งไดเร็กทอรีและรันคำสั่งต่อไปนี้:
~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot
ตัวเลือก `-rfakeroot' ช่วยให้ `dpkg-buildpackage' สามารถรันคำสั่งในฐานะผู้ใช้ที่ได้รับสิทธิพิเศษด้วยความช่วยเหลือของคำสั่ง `fakeroot' นี่เป็นสิ่งจำเป็นในการเตรียมแพ็คเกจ และสร้างไฟล์และไดเร็กทอรี
คำสั่งด้านบนส่งผลให้รายการข้อความเอาต์พุตยาวขึ้น (แสดงที่นี่ในสภาพแวดล้อมที่เป็นภาษาเยอรมัน):
dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05
4.1. กำลังตรวจสอบแพ็คเกจ
ขอแสดงความยินดี คุณสร้างแพ็คเกจ Debian สำเร็จแล้ว ใช่แล้ว! ตอนนี้เรามาดูแพ็คเกจกันดีกว่า ที่นี่ 'lintian' เข้ามามีบทบาท เครื่องมือนี้จะตรวจสอบแพ็คเกจของคุณเพื่อค้นหาการละเมิดกฎที่เข้มงวดของแพ็คเกจ Debian ที่ต้องปฏิบัติตาม
ในการรันการทดสอบให้พิมพ์คำสั่งต่อไปนี้:
lintian helloworld_0.1-1_amd64.deb
เครื่องมือนี้ไม่พบการละเมิดกฎ แต่ยังรวมถึงการสะกดผิดและอักขระที่ไม่ถูกต้อง สวิตช์ `–pedantic' ขอให้ 'lintian' มีความสำคัญมากกว่าปกติมาก ดังที่คุณเห็นด้านล่าง `lintian' ค่อนข้างไม่พอใจและได้ค้นพบคำเตือนสามข้อและข้อผิดพลาดหนึ่งข้อ
ยกเว้นการเตือนครั้งแรก เราสามารถทำให้ 'lintian' มีความสุขและปรับเนื้อหาในแพ็คเกจได้อย่างง่ายดายตามกฎที่ตั้งไว้ คำเตือน `new-package-should-close-itp-bug` หมายความว่าไม่มีรายงานข้อบกพร่องเกี่ยวกับแพ็คเกจ ITP (ITP หมายถึง _intended to package_) สำหรับแพ็คเกจ Debian ปกติ จะต้องส่งรายงานจุดบกพร่องไปยังตัวติดตามจุดบกพร่องสำหรับแพ็คเกจ ITP เพื่อแจ้งผู้อื่นว่าคุณตั้งใจที่จะเริ่มบรรจุภัณฑ์ซอฟต์แวร์นี้
4.2. คำเตือน: `readme-debian-contains-debmake-template
ไฟล์ 'README.Debian' มีวัตถุประสงค์เพื่อเก็บบันทึกเพิ่มเติมเกี่ยวกับแพ็คเกจนี้ `dh_make` สร้างไฟล์นี้ให้เรา:
helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100
ในตัวอย่างของเรา เราไม่มีข้อมูลเพิ่มเติม ดังนั้นเราจึงสามารถลบไฟล์ได้
4.3. คำเตือน: `description-starts-with-leading-spaces`
คำเตือนนี้เกิดขึ้นเนื่องจากคำอธิบายที่ยาวขึ้นของแพ็คเกจของเราในไฟล์ `debian/control' เริ่มต้นด้วยช่องว่างมากกว่าหนึ่งช่อง ทันทีที่เราลบช่องว่างเดียว คำเตือนจะหายไป
4.4. ข้อผิดพลาด: `description-synopsis-is-duplicated`
แต่ละแพ็คเกจต้องการทั้งคำอธิบายแบบสั้นและแบบยาวใน `debian/control' ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากคำอธิบายทั้งสองเหมือนกัน ทันทีที่เราขยายคำอธิบายที่ยาวขึ้น ข้อผิดพลาดจะหายไป
5. ลิงค์และข้อมูลอ้างอิง
- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, เอียนแจ็คสัน: ข้อมูลอ้างอิงของนักพัฒนา Debian
– [Dnmg] โจซิป โรดิน, โอซามุ อาโอกิ: คู่มือการดูแลผู้ใช้ Debian ใหม่
- [dpmb] แอ็กเซล เบ็คเคิร์ต, แฟรงค์ ฮอฟมันน์: หนังสือการจัดการแพ็คเกจเดเบียน
- [รอบต่อนาที] คู่มือนโยบายเดเบียน
- [สามารถ] บทแนะนำเกี่ยวกับบรรจุภัณฑ์เดเบียน
– [gph] คู่มือความเป็นส่วนตัวของ GNU
– [lushpaiPackage] อเล็กซ์ ลุชไป: วิธีสร้างแพ็คเกจเดเบียนจากแหล่งที่มา
6. รับทราบ
ผู้เขียนขอขอบคุณ Axel Beckert และ Gerold Rupprecht สำหรับการสนับสนุนและนักวิจารณ์ขณะเตรียมบทความนี้