RPM फ़ाइल बनाने के लिए मुझे न्यूनतम क्या करना होगा?


148

मैं केवल अपने लिनक्स बाइनरी "फोबार" को वितरित करने के लिए एक आरपीएम फ़ाइल बनाना चाहता हूं, केवल कुछ निर्भरता के साथ। यह एक config फाइल, /etc/foobar.conf है और इसे / usr / bin / foobar में स्थापित किया जाना चाहिए।

दुर्भाग्य से RPM के लिए दस्तावेज़ीकरण 27 अध्याय लंबा है और मेरे पास वास्तव में बैठने और इसे पढ़ने के लिए एक दिन नहीं है, क्योंकि मैं अन्य प्लेटफार्मों के लिए .deb और EXE इंस्टालर बनाने में भी व्यस्त हूं।

RPM बनाने के लिए मुझे पूर्ण न्यूनतम क्या करना होगा? मान लें कि फोबार बाइनरी और फोबार.कॉन्फ मौजूदा वर्किंग डायरेक्टरी में हैं।


1
" RPM पैकेज कैसे बनाएं " RPM (फेडोरा डॉक्स) पर एक अच्छा लेखन है
webwesen

6
इसे 'राइट-अप' कहना एक समझदारी है
कर्नेल

जवाबों:


177

मैं अक्सर बाइनरी आरपीएम प्रति पैकेजिंग मालिकाना ऐप्स पर करता हूं - भी websphere के रूप में सबसे अधिक - लिनक्स पर। तो मेरा अनुभव आपके लिए भी उपयोगी हो सकता है, इसके अलावा अगर आप कर सकते हैं तो एक TRUE RPM करना बेहतर होगा। लेकिन मैं पीछे हटा।

तो आपके (बाइनरी) प्रोग्राम की पैकेजिंग के लिए एक बुनियादी कदम इस प्रकार है - जिसमें मुझे लगता है कि प्रोग्राम 1.0 संस्करण के साथ टॉयबिनप्रोग है, को /etc/toybinprog/toybinprog.conf में स्थापित करने के लिए एक मान है और एक बिन को स्थापित करना है। in / usr / bin जिसे tobinprog कहा जाता है:

1. RPM <4.6,4.7 के लिए अपना आरपीएम बिल्ड env बनाएं

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2. अपने प्रोजेक्ट का टारबॉल बनाएं

mkdir toybinprog-1.0
mkdir -p toybinprog-1.0/usr/bin
mkdir -p toybinprog-1.0/etc/toybinprog
install -m 755 toybinprog toybinprog-1.0/usr/bin
install -m 644 toybinprog.conf toybinprog-1.0/etc/toybinprog/

tar -zcvf toybinprog-1.0.tar.gz toybinprog-1.0/

3. स्रोतों को कॉपी करें

cp toybinprog-1.0.tar.gz SOURCES/

cat <<EOF > SPECS/toybinprog.spec
# Don't try fancy stuff like debuginfo, which is useless on binary-only
# packages. Don't strip binary too
# Be sure buildpolicy set to do nothing
%define        __spec_install_post %{nil}
%define          debug_package %{nil}
%define        __os_install_post %{_dbpath}/brp-compress

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009  Elia Pinto <devzero2000@rpm5.org> 1.0-1
- First Build

EOF

4. स्रोत और बाइनरी आरपीएम का निर्माण करें

rpmbuild -ba SPECS/toybinprog.spec

और बस यही।

उममीद है कि इससे मदद मिलेगी


6
यदि आप "rpmbuild: कमांड नहीं मिला", तो wiki.centos.org/HowTos/SetupRpmBuildEnvironment पर देखें । लेकिन यह मार्गदर्शिका rpm के आंतरिक कामकाज को सीखने में मेरे लिए एक अच्छी शुरुआत है
icasimpan

4
आपके उदाहरण में _bindir क्या सेट करता है? मैं आपके समाधान का पालन करने की कोशिश कर रहा हूं, लेकिन मैं अपने बायनेरिज़ को / ऑप्ट करना चाहूंगा। मैंने उसी के अनुसार टार्गेट फ़ाइल बनाई। और rpmbuild बिल्डरो / usr / बिन में "फ़ाइल नहीं मिली" पर विफल हो रहा है।
चुंबन विक्टोरिया

sudo dnf install rpm-build- फेडोरा 23 कमांड ने rpmbuild v4.13 +
रे फॉस

1
@ devzero2000 TRUE RPM से आपका क्या अभिप्राय है?
रुबेनलागुना

@ devzero2000 rpmbuild फ़ोल्डर / रूट निर्देशिका में होना चाहिए या मैं इसे कहीं और रख सकता हूं?
डियोगो कैलाज़न्स

20

एक आवेदन वितरक के रूप में, fpm आपकी आवश्यकताओं के लिए एकदम सही लगता है । यहां एक उदाहरण है जो दिखाता है कि किसी एप्लिकेशन को स्रोत से कैसे पैकेज किया जाए। एफपीएम डिबेट फाइल और आरपीएम फाइल दोनों का उत्पादन कर सकता है।


2
FPM एक कमाल का टूल है।
ताकाशी

हम हर समय इस उपकरण का उपयोग करते हैं। अब तक की जरूरत के हिसाब से सबसे व्यावहारिक उपकरण।
djhaskin987 20

2
एफपीएम में सबसे अच्छा मौलिक सिद्धांत है जो एक सॉफ्टवेयर में मिल सकता है: यदि यह मदद नहीं कर रहा है, तो एक बग है। यह मेरी प्रतिबद्धता की तरह है।
रिबमार

16

त्वरित RPM भवन के लिए, टोगो देखें:

https://github.com/genereese/togo-rpm

प्रोजेक्ट में क्विक-स्टार्ट गाइड है और मैं 3 मिनट से भी कम समय में एक बुनियादी आरपीएम बनाने में सक्षम था।

मूल प्रश्न में दिए गए डेटा का उपयोग करके उदाहरण:

1) स्क्रिप्ट का उपयोग करके परियोजना निर्देशिका बनाएं:

$ togo project create foobar; cd foobar

2) अपनी वांछित निर्देशिका संरचना के तहत ./root करें और उसमें अपनी फ़ाइलों को कॉपी करें:

$ mkdir -p root/etc; cp /path/to/foobar.conf root/etc/
$ mkdir -p root/usr/bin; cp /path/to/foobar root/usr/bin/

3) अपने RPM के स्वामित्व से सिस्टम-स्वामित्व वाली निर्देशिकाओं को बाहर करें:

$ togo file exclude root/etc root/usr/bin

4) (वैकल्पिक) अपने पैकेज विवरण / निर्भरता / संस्करण / जो भी, आदि को बदलने के लिए उत्पन्न कल्पना को संशोधित करें।:

$ vi spec/header

5) RPM बनाएँ:

$ togo build package

और अपने RPM को ./rp निर्देशिका में थूक दिया जाता है।


मूल प्रश्न में दिए गए परिदृश्य से मिलान करने के लिए उदाहरण को अपडेट किया।
डैडिएलस

15

इसी तरह, मुझे केवल कुछ फ़ाइलों के साथ एक आरपीएम बनाने की आवश्यकता थी। चूँकि ये फाइलें स्रोत नियंत्रित थीं, और क्योंकि यह मूर्खतापूर्ण लगती थी, इसलिए मैं उन्हें आरपीएम के माध्यम से टारगेट करके नहीं जाना चाहता था। मैं निम्नलिखित के साथ आया:

  1. अपना वातावरण सेट करें:

    mkdir -p ~/rpm/{BUILD,RPMS}

    echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros

  2. निम्नलिखित सामग्री के साथ अपनी कल्पना फ़ाइल, foobar.spec बनाएँ:

    Summary: Foo to the Bar
    Name: foobar
    Version: 0.1
    Release: 1
    Group: Foo/Bar
    License: FooBarPL
    Source: %{expand:%%(pwd)}
    BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
    
    %description
    %{summary}
    
    %prep
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/usr/bin
    mkdir -p $RPM_BUILD_ROOT/etc
    cd $RPM_BUILD_ROOT
    cp %{SOURCEURL0}/foobar ./usr/bin/
    cp %{SOURCEURL0}/foobar.conf ./etc/
    
    %clean
    rm -r -f "$RPM_BUILD_ROOT"
    
    %files
    %defattr(644,root,root)
    %config(noreplace) %{_sysconfdir}/foobar.conf
    %defattr(755,root,root)
    %{_bindir}/foobar
    
  3. अपने rpm बनाएँ: rpmbuild -bb foobar.spec

वहाँ एक छोटी सी हैकरी है जो आपके वर्तमान निर्देशिका के रूप में 'स्रोत' को निर्दिष्ट करती है, लेकिन यह कहीं अधिक सुरुचिपूर्ण लगती थी फिर विकल्प, जो मेरे मामले में था, एक अलग स्क्रिप्ट लिखने के लिए, एक टारबॉल बनाने के लिए, आदि, आदि।

नोट: मेरी विशेष स्थिति में, मेरी फ़ाइलों को फ़ोल्डर्स में व्यवस्थित किया गया था, जहाँ उन्हें इस तरह जाने की आवश्यकता थी:

./etc/foobar.conf
./usr/bin/foobar

और इसलिए प्रस्तुत करने का खंड बन गया:

%prep
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
tar -cC %{SOURCEURL0} --exclude 'foobar.spec' -f - ./ | tar xf -

जो थोड़ा साफ हो।

इसके अलावा, मैं rpm संस्करणों 4.4.2.3 के साथ RHEL5.6 पर होता हूं, इसलिए आपका माइलेज अलग-अलग हो सकता है।


मैं सभी बढ़ने की बात थी $RPM_BUILD_ROOTकरने के लिए %{buildroot}मेरे "रेड हैट एंटरप्राइज लिनक्स सर्वर रिलीज 6.9" पर काम करने के लिए इसे पाने के लिए। इसके अलावा, दो फाइलें जो स्थापित की गई थीं, जब मुझे rpmbuild भागा, तो वर्तमान निर्देशिका में होना चाहिए। मैंने इसे अपनी अन्य मशीन पर स्थापित किया: sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
user1683793

4

यदि make configआपके प्रोग्राम के लिए काम करता है या आपके पास एक शेल स्क्रिप्ट है, जो आपकी दो फाइलों को उपयुक्त जगह पर कॉपी करता है, तो आप चेक-इन का उपयोग कर सकते हैं । बस उस निर्देशिका पर जाएं जहां आपका मेकफाइल है और इसे पैरामीटर -R( आरपीएम के लिए ) और वैकल्पिक रूप से इंस्टॉलेशन स्क्रिप्ट के साथ कॉल करें ।


4

बाइनरी से आरपीएम पैकेज बनाने का आसान तरीका (इन चरणों का फेडोरा 18 के साथ परीक्षण किया गया था):

1) सबसे पहले आपको rpmdevtools स्थापित करना है, इसलिए इन कमांड को चलाएँ (ध्यान दें: सामान्य उपयोगकर्ता के रूप में चलाएँ)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) ~ / rpmbuild / SpecS फ़ोल्डर में नई फ़ाइल बनाएँ: package_name.spec

3) इसे एक संपादक के साथ खोलें (जैसे gedit) और इसे लिखें:

Name:           package_name
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/bin/binary_file.bin
/usr/share/applications/package_name.desktop
/usr/share/pixmaps/package_name.png

%changelog
* date Packager's Name <packager's_email> version-revision
- Summary of changes

#For more details see: docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

4) ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 बनायें और उन रास्तों को पुन: उत्पन्न करें जहाँ फ़ाइलें रखी जाएँगी इसलिए इस मामले में उदाहरण के लिए बनाएँ:

  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / bin /
  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / share / अनुप्रयोगों /
  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / share / पिक्समैप /

5) इन फ़ोल्डरों में उन फाइलों को डालें जिन्हें आप पैकेज में सम्मिलित करना चाहते हैं:

  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / bin / binary_file.bin
  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / share / अनुप्रयोगों / package_name.desktop
  • ~ / Rpmbuild / BUILDROOT / PACKAGE_NAME-संस्करण-release.i386 / usr / share / पिक्समैप / package_name.png

usr / share / pixmaps / package_name.png बाइनरी usr / शेयर / एप्लिकेशन / package_name.desktop का आइकन है, मेनू प्रविष्टियों में प्रोग्राम सम्मिलित करने के लिए नियम हैं

6) package_name.desktop इस तरह होना चाहिए:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=example
GenericName=Short description
Comment=Comment of the application
Exec=package_name
Icon=package_name
Terminal=false
Categories=System;

श्रेणियाँ ये हैं: standard.freedesktop.org/menu-spec/latest/apa.html

7) भागो $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) आपका पैकेज ~ / rpmbuild / RPMS फ़ोल्डर में बनाया गया था

यदि आप इस पैकेज को स्थापित करते हैं तो यह स्थापित होता है:

  • /usr/bin/binary_file.bin
  • /usr/share/applications/package_name.desktop
  • /usr/share/pixmaps/package_name.png

इसके लिए धन्यवाद: losurs.org/docs/tips/redhat/binary-rpms

आरपीएम बनाने के लिए अधिक जानकारी के लिए इस लिंक पर एक नज़र डालें ।

GUI जावा सॉफ्टवेयर rpm बनाने के लिए: https://sourceforge.net/projects/javarpmbuilder/


-1

यदि आप मावेन से परिचित हैं, rpm-maven-pluginजो आरपीएम बनाने को सरल बनाता है: आपको केवल वही लिखना pom.xmlहोगा जो आरपीएम बनाने के लिए उपयोग किया जाएगा। RPM बिल्ड वातावरण प्लगइन द्वारा अंतर्निहित रूप से बनाया गया है।


-3

स्रोत फ़ाइल से RPM बनाने की प्रक्रिया:

  1. .gz एक्स्टेंशन के साथ स्रोत फ़ाइल डाउनलोड करें।
  2. yum install से rpm-build और rpmdevtools स्थापित करें। (rpmbuild फ़ोल्डर उत्पन्न किया जाएगा ... विशेषण, स्रोत, RPMS .. फ़ोल्डर rpmbuild फ़ोल्डर के भीतर उत्पन्न किया जाना चाहिए)।
  3. स्रोत कोड कॉपी करें। स्रोत फ़ोल्डर में जाएं। (rpmbuild / स्रोत)
  4. निम्नलिखित कमांड का उपयोग करके टार बॉल को अनटार करें। स्रोत फ़ोल्डर पर जाएं: rpmbuild / SOURCES जहां टार फ़ाइल मौजूद है। कमांड: जैसे टार -xvzf httpd-2.22.tar.gz httpd-2.22 फोल्डर एक ही पथ में उत्पन्न होगा।
  5. निकाले गए फ़ोल्डर पर जाएं और फिर कमांड के नीचे टाइप करें: ./configure --prefix = / usr / local / apache2 --with-शामिल- apr-enable -xy-enable -xy -xy-balancer --with-mpm - कार्यकर्ता - -enable-mods-static = सभी (.configure उस स्रोत के अनुसार भिन्न हो सकते हैं जिसके लिए RPM को बनाया गया है - मैंने Apache HTTPD के लिए किया है जिसे apr और apr-use dependency package की आवश्यकता है)।
  6. कॉन्फ़िगर सफल होने के बाद कमांड के नीचे चलाएँ: बनाओ
  7. सफल निष्पादन के बाद कमांड रन बनाते हैं: tha एक ही फ़ोल्डर में स्थापना रद्द करें। (यदि आपके पास चेकइंस्टॉफ़्ट सॉफ़्टवेयर नहीं है, तो कृपया साइट से नवीनतम संस्करण डाउनलोड करें) इसके अलावा चेक-इन सॉफ़्टवेयर में बग है, जिसे निम्न तरीके से हल किया जा सकता है ::::: checkinstallrc खोजें और फिर विम कमांड का उपयोग करके ट्रांसलेट = 1 को ट्रांसलेट = 0 पर बदलें। पैकेज को बाहर करने के लिए भी जाँच करें: EXCLUDE = "/ selinux"
  8. checkinstall विकल्प के लिए पूछेगा (यदि आप स्रोत फ़ाइल के लिए tp बिल्ड rpm चाहते हैं तो R टाइप करें)
  9. Rrmbuild / RPMS फ़ाइल के अंदर RPMS फ़ोल्डर में Dr .rpm फ़ाइल बनाई जाएगी ... ALL BEST ...।

-4

RPM आमतौर पर स्रोत से निर्मित होते हैं, बायनेरिज़ से नहीं।

आपको उस विशेष फ़ाइल को लिखना होगा जो आपके एप्लिकेशन को कॉन्फ़िगर और संकलित करने के लिए कवर करती है; यह भी कि आपके RPM में कौन सी फाइलें शामिल हैं।

मैनुअल पर एक त्वरित नज़र से पता चलता है कि आपको जो सबसे ज्यादा जरूरत है वह अध्याय 8 में शामिल है - साथ ही, अधिकांश आरपीएम-आधारित वितरण में स्रोत उपलब्ध हैं, वस्तुतः विभिन्न दृष्टिकोणों के उदाहरणों का एक ज़िल है जो आप देख सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.