பொதுவாக நாமெல்லோரும் ஒரு பயன்பாட்டை நிறுவுகைசெய்திடும் போது, வழக்கமாக ஒரு பயன்பாட்டிற்கான இயங்கக்கூடிய குறிமுறைவரிகள், ஆவணங்கள், உருவப்பொத்தான்கள் போன்ற முக்கியமான கோப்புகளைக் கொண்ட ஒரு தொகுப்பை நிறுவுகைசெய்கின்றோம் அல்லவா. லினக்ஸில், பயன்பாடுகள் பொதுவாக RPM அல்லது DEB கோப்புகளாக தொகுக்கப்படுகின்றன, மேலும் பயனர்கள் லினக்ஸ் விநியோகத்தைப் பொறுத்து dnf அல்லது apt கட்டளைகளுடன் அவற்றை நிறுவுகைசெய்துகொள்கின்றனர். இருப்பினும், புதிய பைதான் தகவமைவுகள் கிட்டத்தட்ட ஒவ்வொரு நாளும் வெளியிடப்படு கின்றன, எனவே இதுவரை தொகுக்கப்படாத ஒரு தகவமைவினை நாம் எளிதாக சந்திக்கலாம். அதனால்தான் pyp2rpm எனும் கட்டளை பயன்பாட்டில் உள்ளது. சமீபத்தில், python-concentration எனப்படும் தகவமைவினை நிறுவுகை செய்திட முயற்சித்தபோது. முயற்சி வெற்றியடையவில்லை
$ sudo dnf install python-concentration
. இது python-concentration என்பதற்கு பொருத்தமாக இல்லை:
பிழை: பொருத்தத்தைக் கண்டுபிடிக்க முடியவில்லை: python-concentration இது ஒரு PyPi தொகுப்பாகும், ஆனால் இது RPM தொகுப்பாக இன்னும் கிடைக்கவில்லை. நல்ல செய்தி என்னவென்றால், pyp2rpm ஐப் பயன்படுத்தி ஒப்பீட்டளவில் எளிமையான செயல்முறையுடன் நாமேகூட ஒரு RPM ஐ உருவாக்கலாம். இதை துவங்குவதற்கு நமக்கு இரண்டு கோப்பகங்கள் தேவைப்படும் அதற்கான கட்டளைவரி பின்வருமாறு:
$ mkdir rpmbuild
$ cd rpmbuild && mkdir SPECS
இதனோடு pyp2rpm ஐயும் நிறுவுகைசெய்திட வேண்டும் அதற்கான கட்டளைவரி:
$ sudo dnf install pyp2rpm
படிமுறை.1. spec எனும்கோப்பை உருவாக்கிடுக எந்தவொரு RPM தொகுப்பின் அடிப்படையும் spec கோப்பு எனப்படும் ஒரு கோப்பாகும். தொகுப்பை எவ்வாறு உருவாக்குவது, அதற்குத் தேவையான சார்புநிலைகள், அது வழங்கும் பயன்பாட்டின் பதிப்பு, எந்தக் கோப்புகளை நிறுவுகைசெய்கிறது ,போன்ற பலவற்றைப் பற்றிய அனைத்துத் தகவல்களும் இந்தக் கோப்பில் உள்ளன. பைதான் தகவமைவிற்கு சுட்டிக்காட்டப்பட்டால், pyp2rpm அதற்கான ஒரு spec கோப்பை உருவாக்குகிறது, அதை ஒரு RPM ஐ உருவாக்க பயன்படுத்தலாம். python-concentration ஒரு தன்னிச்சையான எடுத்துக்காட்டாகப் பயன்படுத்தி, ஒரு spec கோப்பை எவ்வாறு உருவாக்குவது என்பது பின்வருமாறு:
படிமுறை.1.
$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec
இது உருவாக்கும் கோப்பு இதோ:
# Created by pyp2rpm-3.3.8
%global pypi_name concentration
%global pypi_version 1.1.5
Name: python-%{pypi_name}
Version: %{pypi_version}
Release: 1%{?dist}
Summary: Get work done when you need to, goof off when you don’t
License: None
URL: None
Source0: %{pypi_source}
BuildArch: noarch
BuildRequires: python3-devel
BuildRequires: python3dist(setuptools)
%description
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
%package -n python3-%{pypi_name}
Summary: %{summary}
%{?python_provide:%python_provide python3-%{pypi_name}}
Requires: (python3dist(hug) >= 2.6.1 with python3dist(hug) < 3~~)
Requires: python3dist(setuptools)
%description -n python3-%{pypi_name}
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
%prep
%autosetup -n %{pypi_name}-%{pypi_version}
%build
%py3_build
%install
%py3_install
%files -n python3-%{pypi_name}
%license LICENSE
%doc README.md
%{_bindir}/concentration
%{python3_sitelib}/%{pypi_name}
%{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info
%changelog
* – 1.1.5-1
– Initial package.
படிமுறை.2. இப்போது rpmlint ஐ இயக்கிடுக spec கோப்பு தரநிலையில் இருப்பதை உறுதிசெய்ய, கோப்பில் rpmlint எனும் கட்டளையை இயக்கிடுக:
$ rpmlint ~/rpmbuild/SPEC/concentration.spec
error: bad date in %changelog: – 1.1.5-1
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
It seems the changelog entry requires a date.
%changelog
* Sat Jun 11 2022 Tux <tux@example.com> – 1.1.5-1
Try rpmlint again:
$ rpmlint ~/rpmbuild/SPEC/concentration.spec
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
வெற்றிகரமாக ஒரு spec கோப்பு உருவாகிவிட்டது!
படிமுறை.3. மூலக் குறிமுறைவரிகளைப் பதிவிறக்கம் செய்திடுக
RPM தொகுப்பை உருவாக்க, தொகுத்துகட்டுகின்ற குறிமுறைவரிகளைப் பதிவிறக்க வேண்டும். இதைச் செய்வதற்கான எளிதான வழி, இணையத்தில் மூலக் குறிமுறைவரிகளின் இருப்பிடத்தைக் கண்டறிய நம்முடைய spec கோப்பை அலசி ஆய்வுசெய்திடவேண்டு் இதற்காக . முதலில், spectool எனும்கட்டளையை dnf உடன் நிறுவுகைசெய்திடுக அதற்கான கட்டளைவரி:
$ sudo dnf install spectool
பின்னர் மூலக்குறிமுறைவரிகளைப் பதிவிறக்கம்செய்திட அதைப் பயன்படுத்திடுக:
$ cd ~/rpmbuild
$ spectool -g -R SPEC/concentration.spec
Downloading: files.pythonhosted.org/…concentration-1.1.5.tar.gz
6.0 KiB / 6.0 KiB [=====================================]
Downloaded: concentration-1.1.5.tar.gz
இது ஒரு SOURCES கோப்பகத்தை உருவாக்கி அதில் மூலக் குறிமுறைவரிகளின் காப்பகத்தை வைக்கிறது.
படிமுறை.4. மூல தொகுப்பை உருவாக்கிடுக இப்போது நம்மிடம் சரியான spec கோப்பு உள்ளது, எனவே rpmbuild கட்டளையுடன் மூல தொகுப்பை உருவாக்க வேண்டிய நேரம் இது. நம்மிடம் இன்னும் rpmbuild இல்லையென்றால், rpm-build தொகுப்பை dnf உடன் நிறுவுகைசெய்திடுக (அல்லது rpmbuild கட்டளையைப் பயன்படுத்த முயற்சிக்கும் போது, அந்த தொகுப்பை நிறுவுகைசெய்திட முனமைத்தின் வாய்ப்பை ஏற்றிடுக).
$ cd ~/rpmbuild
$ spectool -g -R SPEC/concentration.spec
Downloading: files.pythonhosted.org/…concentration-1.1.5.tar.gz
6.0 KiB / 6.0 KiB [=====================================]
Downloaded: concentration-1.1.5.tar.gz
-bs எனும் வாய்ப்பு உருவாக்க மூலத்தைக் குறிக்கிறது. இந்த வாய்ப்பு நமக்கு ஒரு src.rpm கோப்பை வழங்குகிறது, இது ஒரு குறிப்பிட்ட கட்மைப்பிற்காக மீண்டும் கட்டமைக்கப்பட வேண்டிய அனைத்து நோக்கங்களுக்கான தொகுப்பாகும். நம்முடைய கணினிக்கு நிறுவக்கூடிய RPM ஐ உருவாக்கிடுக:
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
error: Failed build dependencies:
python3-devel is needed by python-concentration-1.1.5-1.el9.noarch
இந்த தொகுப்பிற்கு பைத்தானின் மேம்பாட்டு நூலகங்கள் தேவைப்படுவது போன்று தெரிகிறது. கட்டமைப்பைத் தொடர அவற்றை நிறுவுகைசெய்திடுக. இந்த வழிமுறை உருவாக்கம் வெற்றியடைந்து அதிக வெளியீட்டை வழங்குகிறது (தெளிவுக்காக இங்கே சுருக்கமாக சொல்லப்படுகிறது):
$ sudo dnf install python3-devel -y
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
[…]
Executing(–clean): /bin/sh -e /var/tmp/rpm-tmp.TYA7l2
+ umask 022
+ cd /home/bogus/rpmbuild/BUILD
+ rm -rf concentration-1.1.5
+ RPM_EC=0
++ jobs -p
+ exit 0
நம்மமுடைய RPM தொகுப்பு RPMS துணை அடைவில் கட்டமைக்கப்பட்டுள்ளது. dnf உடன் வழக்கம் போல் இதை நிறுவுகைசெய்திடுக:
$ sudo dnf install RPMS/noarch/python3-concentration*rpm
ஏன் PyPi ஐ மட்டும் பயன்படுத்தக்கூடாது?
பைதான் தகவமைவினை RPM ஆக உருவாக்குவது முற்றிலும் அவசியமில்லை. PyPi உடன் ஒரு தகவமைவினை நிறுவுகைசெய்வதும் ஏற்றுக்கொள்ளத்தக்கது, ஆனால் PyPi மற்றொரு தொகுப்பு நிர்வாகியை நம்முடைய தனிப்பட்ட பட்டியலில் சேர்க்கிறது. dnf ஐப் பயன்படுத்தி RPM ஐ நிறுவுகைசெய்திடும் போது, கணினியில் நாம் நிறுவுகைசெய்தவற்றின் முழுமையான பட்டியல் நம்மிடம் இருக்கும். pyp2rpm செயல்முறை விரைவானது, எளிதானது தானியங்கியாக செயல்படக்கூடியது.