Що потрібно мінімум, щоб створити файл RPM?


148

Я просто хочу створити файл RPM для розповсюдження мого Linux бінарного "фобар", маючи лише пару залежностей. Він має конфігураційний файл /etc/foobar.conf і його слід встановити в / usr / bin / foobar.

На жаль, документація на RPM становить 27 розділів, і я дійсно не маю день сісти і прочитати це, тому що я також зайнятий створенням .deb і EXE інсталяторів для інших платформ.

Який абсолютний мінімум я маю зробити, щоб створити RPM? Припустимо, foobar binary та foobar.conf знаходяться у поточному робочому каталозі.


1
" Як створити пакет RPM " - це хороший запис на RPM (документи Fedora)
webwesen

6
Назвати це "записом" - заниження
kernelK

Відповіді:


177

Я часто роблю двійкові обороти в хвилину на пакувальні фірмові додатки - також монітори як веб-сфера - на Linux. Тож мій досвід може бути корисним і вам, крім того, що краще зробити ПРАВИЛЬНИЙ RPM, якщо можете. Але я відступаю.

Отже, основний крок для упаковки вашої (бінарної) програми полягає в наступному - в якому я вважаю, що програма є toybinprog з версією 1.0, маєте конфіскацію, яку потрібно встановити в /etc/toybinprog/toybinprog.conf і мати контейнер для встановлення в / usr / bin називається tobinprog:

1. Створіть свою обертову кількість об / хв для RPM <4.6,4.7

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? Я намагаюся дотримуватися вашого рішення, але я хотів би поставити свої бінарні файли на / opt. Я створив файл targz відповідно до цього. І rpmbuild не працює на "файл не знайдено" у buildroot / usr / bin.
Поцілунок Вікторії

sudo dnf install rpm-build- Команда Fedora 23 для встановлення rpmbuild v4.13 +
Ray Foss

1
@ devzero2000 Що ви маєте на увазі під TRUE RPM?
RubenLaguna

@ devzero2000 папка rpmbuild має бути в / root каталозі, або я можу розмістити її десь ще?
Діого Калазанс

20

Як розповсюджувач програм, fpm звучить ідеально для ваших потреб . Тут є приклад, який показує, як упакувати додаток з джерела. FPM може створювати як деб-файли, так і файли RPM.


2
FPM - дивовижний інструмент.
Такаші

Цим інструментом ми користуємось весь час на роботі. На сьогоднішній день найпрактичніший інструмент для задоволення потреби.
djhaskin987

2
FPM має найкращий фундаментальний принцип, який можна отримати в програмному забезпеченні: якщо це не допомагає, виникає помилка. Я дорожу цією прихильністю.
рибамар

16

Щоб швидко створити RPM, перегляньте Того:

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

У проекті є посібник із швидкого запуску, і я зміг створити базовий 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 випльовується в каталог ./rpms.


Оновлено приклад, щоб відповідати сценарію, наведеному в оригінальному запитанні.
dadealeus

15

Аналогічно, мені потрібно було створити rpm із лише кількома файлами. Оскільки ці файли контролювались джерелами, і тому, що це здавалося дурним, я не хотів перебирати їх, щоб просто обернути їх. Я придумав таке:

  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. Створіть оберти: 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 -

Який трохи чистіше.

Крім того, я трапляю на RHEL5.6 з rpm версіями 4.4.2.3, тому ваш пробіг може відрізнятися.


Я повинен був повернути все , $RPM_BUILD_ROOTщоб %{buildroot}отримати його на роботу по моїй «версії Red Hat Enterprise Linux Server 6.9». Крім того, два файли, які були встановлені, повинні були знаходитись у поточному каталозі, коли я запускав rpmbuild. Я встановив його на своїй іншій машині за допомогою: sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
user1683793

4

Якщо make configпрацює для вашої програми або у вас є сценарій оболонки, який копіює два файли у відповідне місце, ви можете скористатися checkinstall . Просто перейдіть до каталогу, де знаходиться ваш makefile, і зателефонуйте до нього з параметром -R(для RPM ) та необов'язково із встановленням сценарію.


4

Простий спосіб складання пакету rpm з двійкового (ці кроки були протестовані за допомогою Fedora 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-version-release.i386 / usr / bin /
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications /
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps /

5) Вставте в ці папки файли, які ви хочете вставити в пакет:

  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin / binary_file.bin
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications / package_name.desktop
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps / package_name.png

usr / share / pixmaps / package_name.png - це значок двійкового usr / share / apps / 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

Щоб отримати детальну інформацію про створення оборотів у хвилину, перегляньте це посилання .

Програмне забезпечення Java Java для створення rpm: https://sourceforge.net/projects/javarpmbuilder/


-1

Якщо ви знайомі з Maven там, що також rpm-maven-pluginспрощує виготовлення RPM: ви повинні написати лише те, pom.xmlяке потім буде використовуватися для створення RPM. Розвиток побудови RPM створюється неявно плагіном.


-3

Процес генерації RPM з вихідного файлу:

  1. завантажити вихідний файл із розширенням.gz.
  2. встановити rpm-build та rpmdevtools з yum install. (буде створена папка rpmbuild ... SPECS, SOURCES, RPMS .. папки повинні бути створені всередині папки rpmbuild).
  3. скопіюйте вихідний код.gz у папку SOURCES. (rpmbuild / SOURCES)
  4. Зняти кульку дьогтю за допомогою наступної команди. перейдіть до папки SOURCES: rpmbuild / SOURCES, де присутній файл tar. команда: наприклад, tar -xvzf httpd-2.22.tar.gz папка httpd-2.22 буде створена тим же шляхом.
  5. перейдіть до витягнутої папки та введіть нижче команду: ./configure --prefix = / usr / local / apache2 --with-added-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker - -enable-mods-static = all (.configure може змінюватися залежно від джерела, для якого має побудувати RPM-- я зробив для apache HTTPD, якому потрібен apr та apr-util пакет залежності).
  6. запустити команду нижче, коли налаштування буде успішною: make
  7. після успішного виконання команди make run run: перевірити встановлення в тій же папці. (якщо у вас немає програмного забезпечення checkinstall, завантажте останню версію з сайту). Також у програмі checkinstall є помилка, яку можна вирішити наступним чином ::::: знайдіть checkinstallrc та замініть TRANSLATE = 1 на TRANSLATE = 0 за допомогою команди vim. Також перевірте наявність пакета виключення: EXCLUDE = "/ selinux"
  8. checkinstall запитає варіант (введіть R, якщо ви хочете створити rpm для вихідного файлу)
  9. Готовий .rpm файл буде вбудований у папку RPMS всередині файлу rpmbuild / RPMS ... ВСЕ НАЙКРАЩЕ ....

-4

RPM зазвичай будуються з джерела, а не бінарних файлів.

Вам потрібно написати файл специфікації, який стосується налаштування та компіляції вашої програми; також, які файли потрібно включити до RPM.

Швидкий огляд посібника показує, що більшість того, що вам потрібно, висвітлено у главі 8 - також, оскільки у більшості дистрибутивів на основі RPM є джерела, буквально є мільйон прикладів різних підходів, які ви можете подивитися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.