ວິທີການສ້າງໂປແກຼມ GNU Hello World RPM ໃນ Fedora


RPM (ລະຫັດຫຍໍ້ ສຳ ລັບຜູ້ຈັດການແພັກເກັດ RPM) ແມ່ນລະບົບການຄຸ້ມຄອງແພັກເກດທີ່ບໍ່ເສຍຄ່າແລະເປີດເຜີຍ ສຳ ລັບ Linux. ເຖິງແມ່ນວ່າມັນຖືກສ້າງຂື້ນມາເພື່ອ ນຳ ໃຊ້ໃນ Red Hat Linux, ແຕ່ດຽວນີ້ມັນຖືກ ນຳ ໃຊ້ໃນການແຈກຢາຍ Linux ຫລາຍຢ່າງເຊັ່ນ CentOS, Fedora, ແລະ OpenSuse. ສິ່ງ ສຳ ຄັນ, ຊື່ RPM ໝາຍ ເຖິງໂປຣແກຣມຈັດການຊຸດແລະ .rpm ແມ່ນຮູບແບບເອກະສານ.

ໃນບົດຂຽນນີ້, ພວກເຮົາຈະອະທິບາຍກ່ຽວກັບການຂຽນເອກະສານ RPM, ສະແດງວິທີການສ້າງໂປແກຼມແຫຼ່ງຂໍ້ມູນແບບງ່າຍໆແລະແບບງ່າຍດາຍ, ຕົວຢ່າງ, ຊຸດ GNU“ Hello World” RPM ໃນການແຈກຈ່າຍ Fedora Linux. ພວກເຮົາສົມມຸດວ່າທ່ານມີຄວາມເຂົ້າໃຈຂັ້ນພື້ນຖານກ່ຽວກັບແພັກເກດ RPM ທີ່ຜະລິດມາກ່ອນ, ແລະໂດຍມີຂັ້ນຕອນການສ້າງໂປແກຼມໂປແກຼມ Open Source ຟຣີ.

ຕິດຕັ້ງເຄື່ອງມືພັດທະນາໃນ Fedora

ເລີ່ມຕົ້ນໂດຍການຕັ້ງສະພາບແວດລ້ອມການພັດທະນາໃນ Fedora Linux ໂດຍການ ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອຕິດຕັ້ງເຄື່ອງມືທີ່ ຈຳ ເປັນ ສຳ ລັບການສ້າງ RPMs.

$ sudo dnf install fedora-packager @development-tools

ຕໍ່ໄປ, ຕື່ມບັນຊີທີ່ບໍ່ໄດ້ຮັບສິດທິພິເສດຂອງທ່ານເຂົ້າໃນກຸ່ມ 'ເຍາະເຍີ້ຍ' ດັ່ງຕໍ່ໄປນີ້ (ແທນ tecmint ດ້ວຍຊື່ຜູ້ໃຊ້ຕົວຈິງຂອງທ່ານ). ນີ້ຈະຊ່ວຍໃຫ້ທ່ານສາມາດທົດສອບຂັ້ນຕອນການກໍ່ສ້າງໃນ chroot ທີ່ສະອາດ.

$ sudo usermod -a -G mock tecmint

ຕອນນີ້, ສ້າງ RPM ສ້າງໃນລະບົບ ~/rpmbuild ຂອງທ່ານແລະກວດສອບການສ້າງໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້. ມັນຈະສະແດງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີຍ່ອຍ, ເຊິ່ງປະກອບດ້ວຍລະຫັດແຫຼ່ງໂຄງການ, ເອກະສານການຕັ້ງຄ່າ RPM ແລະຊຸດຄູ່.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

ນີ້ແມ່ນສິ່ງທີ່ແຕ່ລະລາຍການມີຄວາມ ໝາຍ ສຳ ລັບ:

<

  • ສ້າງ - ເກັບມ້ຽນປື້ມໄດເລກະທໍລີ%% ເມື່ອແພັກເກດຖືກສ້າງ.
  • RPMS - ຈະມີ RPM ຖານສອງໃນລາຍການຍ່ອຍຂອງສະຖາປັດຕະຍະ ກຳ.
  • SOURCES - ເກັບມ້ຽນຮວບຮວມແຫຼ່ງຂໍ້ມູນທີ່ຖືກບີບອັດແລະບ່ອນໃດກໍ່ຕາມ, ນີ້ແມ່ນບ່ອນທີ່ ຄຳ ສັ່ງ rpmbuild ຈະຊອກຫາ.
  • SPECS - ເກັບຮັກສາເອກະສານ SPEC.
  • SRPMS - ເກັບ RPM Source ແທນ RPM Binary.
  • ການກໍ່ສ້າງ 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.
    • ໃບອະນຸຍາດ - ກວດເບິ່ງສະຖານະຂອງໃບອະນຸຍາດຂອງຊອບແວໂດຍການກວດສອບເອກະສານທີ່ມາແລະ/ຫຼືເອກະສານ LICENSE ຂອງເຂົາເຈົ້າ, ແລະ/ຫຼືໂດຍລົມກັບຜູ້ຂຽນ.
    • URL - ລະບຸ ໜ້າ ທຳ ອິດຂອງຊຸດຊອບແວ.
    • Source0 - ລະບຸແຟ້ມແຫຼ່ງຂໍ້ມູນ. ມັນສາມາດເປັນ URL ໂດຍກົງຫລືເສັ້ນທາງຂອງລະຫັດແຫຼ່ງທີ່ຖືກບີບອັດຂອງຊອບແວ.
    • BuildRequires - ລະບຸຄວາມເພິ່ງພາອາໄສທີ່ ຈຳ ເປັນໃນການສ້າງໂປແກຼມ software.
    • ຕ້ອງການ - ລະບຸຄວາມເພິ່ງພາອາໃສທີ່ ຈຳ ເປັນເພື່ອ ດຳ ເນີນການຊອບແວ.
    • % prep - ແມ່ນໃຊ້ເພື່ອສ້າງສະພາບແວດລ້ອມໃນການສ້າງຊຸດ rpm.
    • % build - ແມ່ນໃຊ້ເພື່ອລວບລວມແລະສ້າງລະຫັດແຫຼ່ງ.
    • % install - ນີ້ແມ່ນໃຊ້ເພື່ອຕິດຕັ້ງໂປແກຼມຕ່າງໆ. ມັນມີລາຍການ ຄຳ ສັ່ງທີ່ ຈຳ ເປັນເພື່ອ ສຳ ເນົາເອກະສານທີ່ໄດ້ຮັບຈາກຂັ້ນຕອນການກໍ່ສ້າງໄປຫາໄດເລກະທໍລີ BUILDROOT.
    • ແຟ້ມເອກະສານ% - ສ່ວນນີ້ຈະບອກລາຍຊື່ໄຟລ໌ທີ່ໃຫ້ໂດຍຊຸດ, ເຊິ່ງຈະຖືກຕິດຕັ້ງຢູ່ໃນລະບົບ.
    • % changelog - ຄວນເກັບຮັກສາວຽກງານໃນການກະກຽມ RPM, ໂດຍສະເພາະຖ້າມີການປ້ອງກັນຄວາມປອດໄພແລະຂໍ້ບົກຜ່ອງຢູ່ເທິງສຸດຂອງແຫຼ່ງນ້ ຳ ທີ່ຢູ່ຂ້າງເທິງ. ມັນຖືກຜະລິດໂດຍອັດຕະໂນມັດໃນຂະນະທີ່ສ້າງເອກະສານສະບາຍດີ. ຂໍ້ມູນຂອງ changelog ມັກຈະຖືກສະແດງໂດຍ 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} - ຖືກ ນຳ ໃຊ້ໃນສ່ວນສ້າງ% ຂອງເອກະສານສະເພາະ, ມັນໃຊ້ ຄຳ ສັ່ງເຮັດ.
    • % {ຊື່} - ກຳ ນົດຊຸດຫຼືຊື່ໄດເລກະທໍລີ.
    • % {buildroot} -% {_ buildrootdir} /% {ຊື່} -% {ລຸ້ນ} -% {ປ່ອຍ}.% {_ arch}, ຄືກັນກັບ
    • % {_ infodir} -% {_ datarootdir}/ຂໍ້ມູນ, ຄ່າເລີ່ມຕົ້ນ:/usr/share/ຂໍ້ມູນ
    • % {_ mandir} -% {_ datarootdir}/man, ຄ່າເລີ່ມຕົ້ນ:/usr/share/man
    • % {_ bindir} -% {_ exec_prefix}/bin, ຄ່າເລີ່ມຕົ້ນ:/usr/bin

    ໃຫ້ສັງເກດວ່າທ່ານສາມາດຊອກຫາຄ່າຕ່າງໆ ສຳ ລັບມະຫາພາກເຫຼົ່ານີ້ຢູ່ໃນ/usr/lib/rpm/platform/*/macros ຫຼືອ້າງເຖິງ ຄຳ ແນະ ນຳ ກ່ຽວກັບການຫຸ້ມຫໍ່: RPM Macros.

    ການກໍ່ສ້າງແພັກເກັດ RPM

    ເພື່ອສ້າງແພັກເກັດແຫຼ່ງຂໍ້ມູນ, ຖານສອງແລະ debugging, ດຳ ເນີນການ ຄຳ ສັ່ງ rpmbuild ຕໍ່ໄປນີ້.

    $ rpmbuild -ba hello.spec
    

    ຫຼັງຈາກຂັ້ນຕອນການກໍ່ສ້າງ, ແຫຼ່ງຂໍ້ມູນ RPMs ແລະຖານຂໍ້ມູນ RPMs ຖານຂໍ້ມູນຈະຖືກສ້າງຂື້ນໃນລະບົບ ../SRPMS/ ແລະ ../RPMS/ ລາຍຊື່ຕາມ ລຳ ດັບ. ທ່ານສາມາດໃຊ້ໂປແກຼມ rpmlint ເພື່ອກວດສອບແລະຮັບປະກັນວ່າເອກະສານ spec ແລະເອກະສານ RPM ທີ່ຖືກສ້າງຂື້ນສອດຄ່ອງກັບກົດລະບຽບການອອກແບບ RPM:

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

    ຖ້າມີຂໍ້ຜິດພາດດັ່ງທີ່ສະແດງຢູ່ໃນພາບ ໜ້າ ຈໍຂ້າງເທິງ, ແກ້ໄຂພວກມັນກ່ອນທີ່ທ່ານຈະ ດຳ ເນີນການ.

    ສຸດທ້າຍ, ໃຫ້ໃຊ້ໂປແກຼມ mock ເພື່ອກວດສອບວ່າການກໍ່ສ້າງຊຸດຈະປະສົບຜົນ ສຳ ເລັດໃນສະພາບແວດລ້ອມການກໍ່ສ້າງທີ່ ຈຳ ກັດຂອງ Fedora.

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

    ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ປຶກສາເອກະສານກ່ຽວກັບ Fedora: ການສ້າງຊຸດ RPM.

    ຫມົດເທົ່ານີ້! ໃນບົດຂຽນນີ້, ພວກເຮົາໄດ້ອະທິບາຍວິທີການປັບປຸງລະບົບ Fedora ຂອງທ່ານເພື່ອສ້າງຊຸດຊອບແວແລະແຫຼ່ງຂໍ້ມູນທີ່ງ່າຍດາຍ. ພວກເຮົາຍັງໄດ້ສະແດງວິທີການສ້າງຊຸດ GUN Hello Word RPM. ໃຊ້ແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້ເພື່ອຕິດຕໍ່ຫາພວກເຮົາ ສຳ ລັບ ຄຳ ຖາມຫຼື ຄຳ ເຫັນ.