ഫെഡോറയിൽ ഒരു ഗ്നു ഹലോ വേൾഡ് ആർപിഎം പാക്കേജ് എങ്ങനെ സൃഷ്ടിക്കാം


Linux-നുള്ള പാക്കേജ് മാനേജ്മെന്റ് സിസ്റ്റം. Red Hat Linux-ൽ ഉപയോഗിക്കാനാണ് ഇത് ആദ്യം സൃഷ്ടിച്ചതെങ്കിലും, ഇപ്പോൾ ഇത് CentOS, Fedora, OpenSuse തുടങ്ങിയ പല ലിനക്സ് വിതരണങ്ങളിലും ഉപയോഗിക്കുന്നു. പ്രധാനമായി, RPM എന്ന പേര് പാക്കേജ് മാനേജർ പ്രോഗ്രാമിനെ സൂചിപ്പിക്കുന്നു, .rpm എന്നത് ഒരു ഫയൽ ഫോർമാറ്റാണ്.

ഈ ലേഖനത്തിൽ, ആർuപിuഎം ഫയലുകൾ എഴുതുന്നതിനെക്കുറിച്ച് ഞങ്ങൾ വിശദീകരിക്കും, ലളിതമായ ഉറവിടവും ബൈനറി സോഫ്റ്റ്uവെയർ പാക്കേജുകളും എങ്ങനെ എളുപ്പത്തിൽ സൃഷ്ടിക്കാമെന്ന് കാണിക്കുന്നു, ഉദാഹരണത്തിന്, ഫെഡോറ ലിനക്സ് വിതരണത്തിലെ ഗ്നു “ഹലോ വേൾഡ്” ആർuപിuഎം പാക്കേജ്. മുൻകൂട്ടി തയ്യാറാക്കിയ RPM പാക്കേജുകളെക്കുറിച്ചും സ്വതന്ത്ര ഓപ്പൺ സോഴ്uസ് സോഫ്റ്റ്uവെയർ നിർമ്മാണ പ്രക്രിയയെക്കുറിച്ചും നിങ്ങൾക്ക് കുറച്ച് അടിസ്ഥാന ധാരണയുണ്ടെന്ന് ഞങ്ങൾ അനുമാനിക്കുന്നു.

ഫെഡോറയിൽ ഡെവലപ്uമെന്റ് ടൂളുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക

ആർuപിuഎമ്മുകൾ നിർമ്മിക്കുന്നതിന് ആവശ്യമായ ഉപകരണങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിച്ച് ഫെഡോറ ലിനക്സിൽ ഡെവലപ്uമെന്റ് എൻവയോൺമെന്റ് സജ്ജീകരിച്ചുകൊണ്ട് നമുക്ക് ആരംഭിക്കാം.

$ sudo dnf install fedora-packager @development-tools

അടുത്തതായി, ഇനിപ്പറയുന്ന രീതിയിൽ 'മോക്ക്' ഗ്രൂപ്പിലേക്ക് നിങ്ങളുടെ പ്രത്യേകാവകാശമില്ലാത്ത അക്കൗണ്ട് ചേർക്കുക (നിങ്ങളുടെ യഥാർത്ഥ ഉപയോക്തൃനാമം ഉപയോഗിച്ച് tecmint മാറ്റിസ്ഥാപിക്കുക). വൃത്തിയുള്ള ക്രോട്ടിൽ ബിൽഡ് നടപടിക്രമം പരിശോധിക്കാൻ ഇത് നിങ്ങളെ സഹായിക്കും.

$ sudo usermod -a -G mock tecmint

ഇപ്പോൾ, നിങ്ങളുടെ ~/rpmbuild ഡയറക്uടറിയിൽ ഒരു RPM ബിൽഡ് സൃഷ്uടിക്കുകയും ഇനിപ്പറയുന്ന കമാൻഡുകൾ ഉപയോഗിച്ച് ബിൽഡ് പരിശോധിക്കുകയും ചെയ്യുക. പ്രോജക്റ്റ് സോഴ്uസ് കോഡ്, ആർപിഎം കോൺഫിഗറേഷൻ ഫയലുകൾ, ബൈനറി പാക്കേജുകൾ എന്നിവ അടങ്ങുന്ന സബ് ഡയറക്uടറികളുടെ ഒരു ലിസ്റ്റ് ഇത് കാണിക്കും.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

ഓരോ ഡയറക്ടറിയും എന്താണ് ഉദ്ദേശിക്കുന്നതെന്ന് ഇതാ:

  1. BUILD – പാക്കേജുകൾ നിർമ്മിക്കുമ്പോൾ വിവിധ %buildroot ഡയറക്uടറികൾ സംഭരിക്കുന്നു.
  2. ആർuപിuഎംuഎസ് - ആർക്കിടെക്uചറിന്റെ ഉപ ഡയറക്uടറികളിൽ ബൈനറി ആർuപിuഎമ്മുകൾ അടങ്ങിയിരിക്കും.
  3. ഉറവിടങ്ങൾ - കംപ്രസ് ചെയ്uത ഉറവിട ആർക്കൈവുകളും ഏതെങ്കിലും പാച്ചുകളും സംഭരിക്കുന്നു, ഇവിടെയാണ് rpmbuild കമാൻഡ് അവയെ തിരയുന്നത്.
  4. SPECS - SPEC ഫയലുകൾ സംഭരിക്കുന്നു.
  5. എസ്ആർപിഎംഎസ് – ബൈനറി ആർപിഎമ്മിന് പകരം സോഴ്സ് ആർപിഎം സംഭരിക്കുന്നു.

ഒരു ഹലോ വേൾഡ് ആർപിഎം നിർമ്മിക്കുന്നു

ഈ ഘട്ടത്തിൽ, ഞങ്ങൾ പാക്കേജിംഗ് ചെയ്യുന്ന ഹലോ വേൾഡ് പ്രോജക്റ്റിന്റെ സോഴ്സ് കോഡ് (അപ്സ്ട്രീം ഉറവിടം എന്നും അറിയപ്പെടുന്നു) നിങ്ങൾ ~/rpmbuild/SOURCE ഡയറക്ടറിയിലേക്ക് ഇനിപ്പറയുന്ന wget കമാൻഡ് ഉപയോഗിച്ച് ഡൗൺലോഡ് ചെയ്യേണ്ടതുണ്ട്.

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

അടുത്തതായി, rpmdev- ഉപയോഗിച്ച് ~/rpmbuild/SPECS ഡയറക്uടറിയിൽ ഒരു .spec ഫയൽ (ഈ സാഹചര്യത്തിൽ hello.spec എന്ന് നാമകരണം ചെയ്യാം) ഉപയോഗിച്ച് RPM പാക്കേജ് ക്രമീകരിക്കാം. 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 ഫയലിലെ ഡിഫോൾട്ട് പാരാമീറ്ററുകൾ നമുക്ക് ഹ്രസ്വമായി വിശദീകരിക്കാം:

  • പേര് - പാക്കേജിന് ഒരു പേര് സജ്ജീകരിക്കാൻ ഉപയോഗിക്കുന്നു.
  • പതിപ്പ് - അപ്uസ്ട്രീം മിറർ ചെയ്യണം.
  • റിലീസ് - നിങ്ങൾ ഫെഡോറയിൽ പ്രവർത്തിക്കുന്ന നമ്പറുകൾ.
  • സംഗ്രഹം - പാക്കേജിന്റെ ഒരു ഹ്രസ്വമായ ഒറ്റവരി വിവരണമാണ്, rpmlint പരാതികൾ ഒഴിവാക്കാൻ ആദ്യ അക്ഷരം വലിയക്ഷരം ആയിരിക്കണം.
  • ലൈസൻസ് - സോഴ്uസ് ഫയലുകൾ കൂടാതെ/അല്ലെങ്കിൽ അവയുടെ ലൈസൻസ് ഫയലുകൾ പരിശോധിച്ച് കൂടാതെ/അല്ലെങ്കിൽ രചയിതാക്കളുമായി സംസാരിച്ച് സോഫ്റ്റ്uവെയറിന്റെ ലൈസൻസ് സ്റ്റാറ്റസ് പരിശോധിക്കുക.
  • URL – സോഫ്റ്റ്uവെയർ പാക്കേജിന്റെ ഹോം പേജ് വ്യക്തമാക്കുന്നു.
  • Source0 – ഉറവിട ഫയലുകൾ വ്യക്തമാക്കുന്നു. ഇത് നേരിട്ടുള്ള URL അല്ലെങ്കിൽ സോഫ്uറ്റ്uവെയറിന്റെ കംപ്രസ് ചെയ്uത സോഴ്uസ് കോഡിന്റെ ഒരു പാത്ത് ആകാം.
  • BuildRequires – സോഫ്റ്റ്uവെയർ നിർമ്മിക്കുന്നതിന് ആവശ്യമായ ഡിപൻഡൻസികൾ വ്യക്തമാക്കുന്നു.
  • ആവശ്യമുണ്ട് - സോഫ്റ്റ്uവെയർ പ്രവർത്തിപ്പിക്കുന്നതിന് ആവശ്യമായ ഡിപൻഡൻസികൾ വ്യക്തമാക്കുന്നു.
  • %prep – rpm പാക്കേജ് നിർമ്മിക്കുന്നതിനുള്ള അന്തരീക്ഷം സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുന്നു.
  • %build – കംപൈൽ ചെയ്യുന്നതിനും സോഴ്സ് കോഡുകൾ നിർമ്മിക്കുന്നതിനും ഉപയോഗിക്കുന്നു.
  • %ഇൻസ്റ്റാൾ - പ്രോഗ്രാമുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ഇത് ഉപയോഗിക്കുന്നു. ബിൽഡ് പ്രോസസ്സിൽ നിന്ന് ബിൽഡ്റൂട്ട് ഡയറക്uടറിയിലേക്ക് ഫലമായുണ്ടാകുന്ന ഫയൽ പകർത്താൻ ആവശ്യമായ കമാൻഡ്(കൾ) ഇത് ലിസ്റ്റ് ചെയ്യുന്നു.
  • %files – ഈ വിഭാഗം പാക്കേജ് നൽകുന്ന ഫയലുകൾ ലിസ്റ്റുചെയ്യുന്നു, അവ സിസ്റ്റത്തിൽ ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും.
  • %changelog – RPM തയ്യാറാക്കുന്നതിനുള്ള ജോലികൾ സംഭരിക്കും, പ്രത്യേകിച്ചും അടിസ്ഥാന അപ്uസ്ട്രീം ഉറവിടത്തിന് മുകളിൽ സുരക്ഷയും ബഗ് പാച്ചുകളും ഉൾപ്പെടുത്തിയിട്ടുണ്ടെങ്കിൽ. hello.spec ഫയൽ സൃഷ്uടിക്കുമ്പോൾ ഇത് സ്വയമേവ ജനറേറ്റുചെയ്യുന്നു. ചേഞ്ച്ലോഗ് ഡാറ്റ സാധാരണയായി rpm --changelog -q ആണ് പ്രദർശിപ്പിക്കുന്നത്.

ഇപ്പോൾ നിങ്ങളുടെ .spec ഫയൽ എഡിറ്റ് ചെയ്uത് കാണിച്ചിരിക്കുന്നതുപോലെ മാറ്റങ്ങൾ വരുത്തുക.

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 നിർവചിച്ചിരിക്കുന്ന സിസ്റ്റം ഇൻവോക്കേഷനുകൾ നിർമ്മിക്കാൻ ഉപയോഗിക്കുന്ന ഇവയെ മാക്രോകൾ എന്ന് വിളിക്കുന്നു. അതിനാൽ, സ്uപെക്ക് ഫയലുകളിൽ ഈ പാതകൾ ഹാർഡ്-കോഡ് ചെയ്യാതിരിക്കുന്നതാണ് നല്ലത്, എന്നാൽ സ്ഥിരതയ്ക്കായി അതേ മാക്രോകൾ ഉപയോഗിക്കുക.

ഇനിപ്പറയുന്നവ RPM ബിൽഡും ഡയറക്ടറി മാക്രോകളും അവയുടെ നിർവചനങ്ങളും ഡിഫോൾട്ട് മൂല്യങ്ങളും ചേർന്നതാണ്:

  • %{make_build} – സ്uപെക്ക് ഫയലിന്റെ %build വിഭാഗത്തിൽ ഉപയോഗിക്കുന്നു, അത് make കമാൻഡ് പ്രവർത്തിപ്പിക്കുന്നു.
  • %{name} – പാക്കേജിന്റെയോ ഡയറക്ടറിയുടെയോ പേര് നിർവ്വചിക്കുന്നു.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, $BUILDROOT പോലെ
  • %{_infodir} – %{_datarootdir}/info, default: /usr/share/info
  • %{_mandir} – %{_datarootdir}/മാൻ, ഡിഫോൾട്ട്: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, സ്ഥിരസ്ഥിതി: /usr/bin

നിങ്ങൾക്ക് ഈ മാക്രോകൾക്കായുള്ള മൂല്യങ്ങൾ /usr/lib/rpm/platform/*/macros എന്നതിൽ കണ്ടെത്താനാകുമെന്നത് ശ്രദ്ധിക്കുക അല്ലെങ്കിൽ പാക്കേജിംഗ് മാർഗ്ഗനിർദ്ദേശങ്ങൾ:RPM Macros കാണുക.

ആർപിഎം പാക്കേജ് നിർമ്മിക്കുന്നു

ഉറവിടം, ബൈനറി, ഡീബഗ്ഗിംഗ് പാക്കേജുകൾ നിർമ്മിക്കുന്നതിന്, ഇനിപ്പറയുന്ന rpmbuild കമാൻഡ് പ്രവർത്തിപ്പിക്കുക.

$ rpmbuild -ba hello.spec

നിർമ്മാണ പ്രക്രിയയ്ക്ക് ശേഷം, ഉറവിട RPM-കളും ബൈനറി RPM-കളും യഥാക്രമം ../SRPMS/, ../RPMS/ ഡയറക്uടറികളിൽ സൃഷ്uടിക്കപ്പെടും. സൃഷ്uടിച്ച സ്uപെക് ഫയലും ആർuപിuഎം ഫയലുകളും ആർuപിuഎം ഡിസൈൻ നിയമങ്ങൾക്ക് അനുസൃതമാണോയെന്ന് പരിശോധിക്കാനും ഉറപ്പാക്കാനും നിങ്ങൾക്ക് rpmlint പ്രോഗ്രാം ഉപയോഗിക്കാം:

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

മുകളിലെ സ്ക്രീൻഷോട്ടിൽ കാണിച്ചിരിക്കുന്നതുപോലെ എന്തെങ്കിലും പിശകുകൾ ഉണ്ടെങ്കിൽ, നിങ്ങൾക്ക് തുടരുന്നതിന് മുമ്പ് അവ പരിഹരിക്കുക.

അവസാനമായി പക്ഷേ, ഫെഡോറ നിയന്ത്രിത ബിൽഡ് എൻവയോൺമെന്റിൽ പാക്കേജ് ബിൽഡ് വിജയിക്കുമോ എന്ന് പരിശോധിക്കാൻ മോക്ക് പ്രോഗ്രാം ഉപയോഗിക്കുക.

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

കൂടുതൽ വിവരങ്ങൾക്ക്, ഫെഡോറ ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക: ആർപിഎം പാക്കേജുകൾ സൃഷ്ടിക്കുന്നു.

അത്രയേയുള്ളൂ! ഈ ലേഖനത്തിൽ, ഒരു ലളിതമായ ഉറവിടവും ബൈനറി സോഫ്uറ്റ്uവെയർ പാക്കേജും സൃഷ്uടിക്കുന്നതിന് നിങ്ങളുടെ ഫെഡോറ സിസ്റ്റം എങ്ങനെ വർദ്ധിപ്പിക്കാമെന്ന് ഞങ്ങൾ വിശദീകരിച്ചിട്ടുണ്ട്. ഒരു GUN Hello Word RPM പാക്കേജ് എങ്ങനെ സൃഷ്ടിക്കാമെന്നും ഞങ്ങൾ കാണിച്ചുതന്നു. എന്തെങ്കിലും ചോദ്യങ്ങൾക്കും അഭിപ്രായങ്ങൾക്കും ഞങ്ങളെ ബന്ധപ്പെടാൻ ചുവടെയുള്ള ഫീഡ്uബാക്ക് ഫോം ഉപയോഗിക്കുക.