ค้นหาเว็บไซต์

วิธีสร้างแพ็คเกจ GNU Hello World RPM ใน Fedora


RPM (ตัวย่อแบบเรียกซ้ำสำหรับ RPM Package Manager) เป็นระบบจัดการแพ็คเกจโอเพ่นซอร์สฟรีสำหรับ Linux แม้ว่าเดิมทีมันถูกสร้างเพื่อใช้ใน Red Hat Linux แต่ตอนนี้มันถูกใช้ใน Linux หลายรุ่น เช่น CentOS, Fedora และ โอเพ่นซูส. ที่สำคัญ ชื่อ RPM หมายถึงโปรแกรมจัดการแพ็คเกจ และ .rpm เป็นรูปแบบไฟล์

ในบทความนี้ เราจะอธิบายเกี่ยวกับการเขียนไฟล์ RPM ซึ่งแสดงวิธีสร้างซอร์สอย่างง่ายและแพ็คเกจซอฟต์แวร์ไบนารี เช่น GNU “Hello World” แพ็คเกจ RPM ใน Fedora Linux แข็งแกร่ง> การกระจาย เราถือว่าคุณมีความเข้าใจพื้นฐานเกี่ยวกับแพ็คเกจ RPM ที่สร้างไว้ล่วงหน้า และเกี่ยวกับกระบวนการสร้างซอฟต์แวร์โอเพ่นซอร์สฟรี

ติดตั้งเครื่องมือการพัฒนาใน Fedora

เริ่มต้นด้วยการตั้งค่าสภาพแวดล้อมการพัฒนาใน Fedora Linux โดยการเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งเครื่องมือที่จำเป็นสำหรับการสร้าง RPM

sudo dnf install fedora-packager @development-tools

ถัดไป เพิ่มบัญชีที่ไม่มีสิทธิพิเศษของคุณในกลุ่ม 'จำลอง' ดังต่อไปนี้ (แทนที่ tecmint ด้วยชื่อผู้ใช้จริงของคุณ) สิ่งนี้จะช่วยให้คุณสามารถทดสอบขั้นตอนการสร้างใน chroot ที่สะอาดได้

sudo usermod -a -G mock tecmint

ตอนนี้ ให้สร้างบิลด์ RPM ในไดเร็กทอรี ~/rpmbuild ของคุณ และตรวจสอบบิลด์โดยใช้คำสั่งต่อไปนี้ มันจะแสดงรายการไดเรกทอรีย่อยซึ่งประกอบด้วยซอร์สโค้ดโปรเจ็กต์ ไฟล์การกำหนดค่า RPM และแพ็คเกจไบนารี

rpmdev-setuptree
tree ~/rpmbuild/

นี่คือสิ่งที่แต่ละไดเร็กทอรีมีไว้สำหรับ:

  1. BUILD – เก็บไดเร็กทอรี %buildroot ต่างๆ เมื่อมีการสร้างแพ็คเกจ
  2. RPMS – จะมี RPM แบบไบนารีในไดเรกทอรีย่อยของสถาปัตยกรรม
  3. แหล่งที่มา – เก็บไฟล์เก็บถาวรซอร์สที่บีบอัดและแพตช์ใดๆ นี่คือที่ที่คำสั่ง rpmbuild จะค้นหา
  4. SPECS – เก็บไฟล์ SPEC
  5. SRPMS – เก็บ RPM ต้นทางแทน Binary RPM

สร้าง RPM “สวัสดีชาวโลก”

ในขั้นตอนนี้ คุณจะต้องดาวน์โหลดซอร์สโค้ด (หรือที่เรียกว่าซอร์ส “อัปสตรีม”) ของโปรเจ็กต์ Hello World ที่เรากำลังรวมแพ็กเกจลงใน ~/rpmbuild/SOURCE ไดเร็กทอรีด้วยคำสั่ง wget ต่อไปนี้

cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

ต่อไป เรามากำหนดค่าแพ็คเกจ RPM โดยใช้ไฟล์ .spec (ในกรณีนี้ให้ตั้งชื่อว่า hello.spec) ใน ~/rpmbuild/SPECS ไดเรกทอรีโดยใช้โปรแกรม rpmdev-newspec

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

จากนั้นเปิดไฟล์ hello.spec โดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ

vim hello.spec

เทมเพลตเริ่มต้นควรมีลักษณะดังนี้:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

มาอธิบายสั้นๆ เกี่ยวกับพารามิเตอร์เริ่มต้นในไฟล์ .spec:

  • ชื่อ – ใช้เพื่อตั้งชื่อแพ็คเกจ
  • เวอร์ชัน – ควรสะท้อนต้นทาง
  • ปล่อย – หมายเลขที่คุณใช้งานภายใน Fedora
  • สรุป – เป็นคำอธิบายสั้นๆ หนึ่งบรรทัดของแพ็คเกจ ตัวอักษรตัวแรกควรเป็นตัวพิมพ์ใหญ่เพื่อหลีกเลี่ยงการร้องเรียน rpmlint
  • ใบอนุญาต – ตรวจสอบสถานะใบอนุญาตของซอฟต์แวร์โดยการตรวจสอบไฟล์ต้นฉบับและ/หรือไฟล์ใบอนุญาต และ/หรือโดยการพูดคุยกับผู้เขียน
  • URL – ระบุหน้าแรกของแพ็คเกจซอฟต์แวร์
  • Source0 – ระบุไฟล์ต้นฉบับ อาจเป็น URL โดยตรงหรือเส้นทางของซอร์สโค้ดที่บีบอัดของซอฟต์แวร์
  • BuildRequires – ระบุการพึ่งพาที่จำเป็นในการสร้างซอฟต์แวร์
  • ต้องการ – ระบุการขึ้นต่อกันที่จำเป็นในการใช้งานซอฟต์แวร์
  • %prep – ใช้เพื่อสร้างสภาพแวดล้อมสำหรับการสร้างแพ็คเกจ rpm
  • %build – ใช้ในการคอมไพล์และสร้างซอร์สโค้ด
  • %การติดตั้ง – ใช้สำหรับติดตั้งโปรแกรม โดยแสดงรายการคำสั่งที่จำเป็นในการคัดลอกไฟล์ผลลัพธ์จากกระบวนการสร้างไปยังไดเร็กทอรี BUILDROOT
  • %files – ส่วนนี้แสดงรายการไฟล์ที่มาจากแพ็คเกจ ซึ่งจะถูกติดตั้งบนระบบ
  • %changelog – ควรจัดเก็บงานในการเตรียม RPM โดยเฉพาะอย่างยิ่งหากมีการรักษาความปลอดภัยและแพทช์ข้อบกพร่องรวมอยู่ด้านบนของต้นทางอัปสตรีมพื้นฐาน มันถูกสร้างขึ้นโดยอัตโนมัติในขณะที่สร้างไฟล์ hello.spec ข้อมูลบันทึกการเปลี่ยนแปลงมักจะแสดงเป็น rpm --changelog -q

ตอนนี้แก้ไขไฟล์ .spec ของคุณและทำการเปลี่ยนแปลงตามที่แสดง

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

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

ต่อไปนี้คือแมโครการสร้าง RPM และไดเร็กทอรีพร้อมกับคำจำกัดความและค่าเริ่มต้น:

  • %{make_build} – ใช้ในส่วน %build ของไฟล์ข้อมูลจำเพาะ โดยจะรันคำสั่ง make
  • %{name} – กำหนดชื่อแพ็คเกจหรือไดเร็กทอรี
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch} เหมือนกับ $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info ค่าเริ่มต้น: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man ค่าเริ่มต้น: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin ค่าเริ่มต้น: /usr/bin

โปรดทราบว่าคุณสามารถค้นหาค่าสำหรับมาโครเหล่านี้ได้ใน /usr/lib/rpm/platform/*/macros หรืออ้างอิงถึงแนวทางการบรรจุ:มาโคร RPM

การสร้างแพ็คเกจ RPM

หากต้องการสร้างแพ็กเกจซอร์ส ไบนารี และการดีบัก ให้รันคำสั่ง rpmbuild ต่อไปนี้

rpmbuild -ba hello.spec

หลังจากกระบวนการสร้าง RPM ต้นทางและ RPM ไบนารีจะถูกสร้างขึ้นในไดเร็กทอรี ../SRPMS/ และ ../RPMS/ ตามลำดับ คุณสามารถใช้โปรแกรม rpmlint เพื่อตรวจสอบและให้แน่ใจว่าไฟล์ spec และไฟล์ RPM ที่สร้างขึ้นเป็นไปตามกฎการออกแบบ RPM:

rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

หากมีข้อผิดพลาดตามที่แสดงในภาพหน้าจอด้านบน ให้แก้ไขก่อนดำเนินการต่อ

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

mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

หากต้องการข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบของ Fedora: การสร้างแพ็คเกจ RPM

นั่นคือทั้งหมด! ในบทความนี้ เราได้อธิบายวิธียกระดับระบบ Fedora ของคุณเพื่อสร้างซอร์สอย่างง่ายและแพ็คเกจซอฟต์แวร์ไบนารี นอกจากนี้เรายังแสดงวิธีสร้างแพ็คเกจ GUN Hello Word RPM ใช้แบบฟอร์มคำติชมด้านล่างเพื่อติดต่อเราหากมีคำถามหรือความคิดเห็น