Giunsa Paghimo ang usa ka GNU Hello World RPM Package sa Fedora


sistema sa pagdumala sa package alang sa Linux. Bisan kung kini orihinal nga gihimo aron magamit sa Red Hat Linux, karon gigamit kini sa daghang mga distribusyon sa Linux sama sa CentOS, Fedora, ug OpenSuse. Importante, ang ngalan nga RPM nagtumong sa package manager program ug ang .rpm usa ka file format.

Niini nga artikulo, among ipasabut sa pagsulat sa RPM files, nga nagpakita kon sa unsang paagi sayon nga paghimo sa usa ka yano nga tinubdan ug binary software packages, pananglitan, GNU Hello World RPM package sa Fedora Linux distribution. Nagtuo kami nga ikaw adunay pipila ka sukaranan nga pagsabut sa mga pre-made nga RPM nga mga pakete, ug sa proseso sa pagtukod sa Libre nga Open Source Software.

I-install ang Mga Gamit sa Pag-uswag sa Fedora

Magsugod kita pinaagi sa pag-set up sa development environment sa Fedora Linux pinaagi sa pagpadagan sa mosunod nga command aron i-install ang gikinahanglan nga mga himan alang sa pagtukod sa mga RPM.

$ sudo dnf install fedora-packager @development-tools

Sunod, idugang ang imong dili pribilihiyo nga account sa grupo nga 'mock' ingon sa mosunod (ilisan ang tecmint sa imong aktwal nga username). Makapahimo kini kanimo sa pagsulay sa proseso sa pagtukod sa usa ka limpyo nga chroot.

$ sudo usermod -a -G mock tecmint

Karon, paghimo ug RPM build sa imong ~/rpmbuild directory ug pamatud-i ang build gamit ang mosunod nga mga command. Kini magpakita sa usa ka lista sa mga sub-direktoryo, nga naglangkob sa project source code, RPM configuration files ug binary packages.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

Ania kung unsa ang gipasabut sa matag direktoryo:

  1. BUILD – nagtipig lainlain nga %buildroot nga mga direktoryo kung ang mga pakete gihimo.
  2. RPMS – maglangkob ug binary RPM sa mga sub-direktoryo sa Arkitektura.
  3. SOURCES – nagtipig sa mga compressed source archive ug bisan unsang mga patch, dinhi pangitaon sila sa rpmbuild command.
  4. SPECS – nagtipig sa mga file sa SPEC.
  5. SRPMS – nagtipig sa Source RPM imbes sa Binary RPM.

Pagtukod ug “Hello World” RPM

Niini nga lakang, kinahanglan nimo nga i-download ang source code (nailhan usab nga upstream nga tinubdan) sa Hello World nga proyekto nga among giputos, ngadto sa ~/rpmbuild/SOURCE nga direktoryo nga adunay mosunod nga wget command.

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

Sunod, atong i-configure ang RPM package gamit ang .spec file (atong nganlan kini og hello.spec niini nga kaso) sa ~/rpmbuild/SPECS directory, gamit ang rpmdev- programa sa newspec.

$ cd ~/rpmbuild/SPECS
$ rpmdev-newspec hello
$ ls

Unya ablihi ang hello.spec file gamit ang imong paborito nga editor.

$ vim hello.spec

Ang default nga template kinahanglan nga tan-awon sama niini:

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

Atong ipasabut sa daklit ang default nga mga parameter sa usa ka .spec file:

  • Ngalan – gigamit para magbutang ug ngalan para sa package.
  • Bersyon – kinahanglang magsalamin sa upstream.
  • Pagpagawas – mga numero nga imong gigamit sulod sa Fedora.
  • Summary – usa ka mubo nga usa ka linya nga deskripsyon sa package, ang unang letra kinahanglan nga uppercase aron malikayan ang mga reklamo sa rpmlint.
  • Lisensya – susiha ang License status sa software pinaagi sa pagsusi sa source files ug/o sa ilang LICENSE files, ug/o pinaagi sa pagpakigsulti sa mga author.
  • URL – nagpiho sa home page sa software package.
  • Source0 – nagtino sa tinubdan nga mga file. Mahimo kini nga direktang URL o agianan sa compressed source code sa software.
  • BuildRequires – nagtino sa mga dependency nga gikinahanglan sa paghimo sa software.
  • Kinahanglan – nagtino sa mga dependency nga gikinahanglan sa pagpadagan sa software.
  • %prep – gigamit sa paghimo sa palibot para sa paghimo sa rpm package.
  • %build – gigamit sa pag-compile ug paghimo sa source codes.
  • %install – kini gigamit sa pag-instalar sa mga programa. Naglista kini og (mga) sugo nga gikinahanglan aron kopyahon ang resulta nga file gikan sa proseso sa pagtukod ngadto sa direktoryo sa BUILDROOT.
  • %files – kini nga seksyon naglista sa mga file nga gihatag sa package, nga i-install sa sistema.
  • %changelog – kinahanglan magtipig sa trabaho sa pag-andam sa RPM, labi na kung adunay seguridad ug mga bug patch nga gilakip sa ibabaw sa base sa upstream nga gigikanan. Kini awtomatik nga namugna samtang nagmugna sa hello.spec file. Ang data sa changelog kasagarang gipakita sa rpm --changelog -q .

Karon usba ang imong .spec file ug paghimo og mga kausaban sama sa gipakita.

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

Mamatikdan nimo nga gigamit namon ang pipila ka bag-ong mga parameter sa ibabaw nga file nga wala pa gipatin-aw. Gitawag kini nga mga macro, nga gigamit sa paghimo sa mga invocation sa sistema nga gihubit sa RPM aron magbutang mga agianan sa pag-install alang sa mga pakete. Busa, kasagarang mas maayo nga dili i-hard-code kini nga mga agianan sa mga spec file, apan gamita ang parehas nga mga macro alang sa pagkamakanunayon.

Ang mosunod mao ang RPM build ug directory macros uban sa ilang mga kahulugan ug default values:

  • %{make_build} – gigamit sa %build nga seksyon sa spec file, kini nagpadagan sa make command.
  • %{name} – naghubit sa ngalan sa pakete o direktoryo.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{bersyon}-%{release}.%{_arch}, pareho sa $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, default: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, default: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, default: /usr/bin

Timan-i nga makit-an nimo ang mga kantidad alang niini nga mga macro sa /usr/lib/rpm/platform/*/macros o tan-awa ang Mga Giya sa Packaging: RPM Macros.

Pagtukod sa RPM Package

Aron matukod ang gigikanan, binary ug debugging nga mga pakete, padagana ang mosunod nga rpmbuild nga mando.

$ rpmbuild -ba hello.spec

Human sa proseso sa pagtukod, ang tinubdan nga RPMs ug binary RPMs himoon sa ../SRPMS/ ug ../RPMS/ directory matag usa. Mahimo nimong gamiton ang rpmlint nga programa aron masusi ug masiguro nga ang spec file ug RPM file nga gihimo nahiuyon sa mga lagda sa disenyo sa RPM:

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

Kung adunay bisan unsang mga sayup sama sa gipakita sa screenshot sa ibabaw, ayoha kini sa dili ka pa makapadayon.

Katapusan apan dili labing gamay, gamita ang programa sa pagbiaybiay aron masusi nga ang pagtukod sa pakete magmalampuson sa gipugngan nga palibot sa pagtukod sa Fedora.

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

Alang sa dugang nga kasayuran, konsultaha ang dokumentasyon sa Fedora: Paghimo RPM Packages.

Kana lang! Sa kini nga artikulo, among gipasabut kung giunsa ang pagpataas sa imong Fedora system aron makahimo usa ka yano nga gigikanan ug binary software package. Gipakita usab namo kung giunsa paghimo ang usa ka GUN Hello Word RPM nga pakete. Gamita ang porma sa feedback sa ubos aron maabot kami alang sa bisan unsang mga pangutana o komento.