Какой минимум мне нужно сделать, чтобы создать файл RPM?


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

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

Что такое Абсолютный минимум, который я должен сделать, чтобы создать оборотах? Предположим фрагментик бинарных и программой.conf находятся в текущем рабочем каталоге.

9 140

9 ответов:

Я часто делаю binary rpm на упаковку проприетарных приложений-также moster, как websphere-на linux. Так что мой опыт может быть полезен и вам, кроме того, что было бы лучше сделать истинный RPM, если вы можете. Но я отвлекся.

таким образом, основной шаг для упаковки вашей (двоичной) программы заключается в следующем: программа toybinprog с версией 1.0, есть conf для установки в /etc/toybinprog / toybinprog.conf и есть бин для установки в /usr / bin под названием tobinprog :

1. создайте свой rpm build env для RPM
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. Копировать в исходники dir

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. построить источник и двоичный rpm

rpmbuild -ba SPECS/toybinprog.spec

и это все.

надеюсь, что это поможет

как распространитель приложений,fpm звучит идеально подходит для ваших нужд. Есть здесь который показывает, как упаковать приложение из источника. FPM может создавать как файлы deb, так и файлы RPM.

точно так же мне нужно было создать rpm всего с несколькими файлами. Поскольку эти файлы контролировались исходным кодом, и потому что это казалось глупым, я не хотел проходить через их заделку, чтобы иметь rpm untar их. Я придумал следующее:

  1. настройка среды:

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

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

  2. создайте свой файл спецификации, foobar.спецификация, со следующим содержание:

    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 -

который немного чище.

кроме того, я нахожусь на RHEL5.6 с версиями rpm 4.4.2.3, поэтому ваш пробег может отличаться.

для быстрого построения 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 выплевывается в него .каталог /МЗП.

Если make config работает для вашей программы или у вас есть сценарий оболочки, который копирует ваши два файла в соответствующее место, которое вы можете использовать checkinstall. Просто перейдите в каталог, где находится ваш makefile, и вызовите его с параметром -R (для об / мин) и дополнительно с помощью сценария установки.

простой способ построить rpm пакет из двоичного файла (эти шаги были протестированы с Fedora 18):

1) Сначала вы должны установить rpmdevtools, поэтому выполните эти команды (внимание: Запуск от имени обычного пользователя)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) в папке ~/rpmbuild/SPECS создайте новый файл: имя_пакета.спецификации

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.бин
  • ~ / rpmbuild/BUILDROOT / package_name-version-release.i386/usr/share/applications / package_name.рабочий стол
  • ~ / rpmbuild/BUILDROOT / package_name-version-release.i386/usr/share/pixmaps / package_name.png

usr / share/pixmaps / package_name.png-это иконка бинарных usr / share/applications / package_name.рабочий стол-это правила для вставки программы в меню

6) имя_пакета.рабочий стол должен быть таким:

[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;

категории таковы: standards.freedesktop.org/menu-spec/latest/apa.html

7) Run $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) ваш пакет был встроен в папку ~/rpmbuild/RPMS

если вы устанавливаете этот пакет, он устанавливает:

  • / usr/bin / binary_file.бункер
  • / usr/share/applications / package_name.рабочий стол
  • / usr/share/pixmaps / package_name.png

благодаря: losurs.org/docs/tips/redhat/binary-rpms

для получения более подробной информации о создании rpm взгляните на это ссылке.

программное обеспечение GUI java для построения rpm:https://sourceforge.net/projects/javarpmbuilder/

Если вы знакомы с Maven там также rpm-maven-plugin что упрощает создание RPM: вы должны писать только pom.xml который затем будет использоваться для построения RPM. Оборотах создание среды, которая создается с помощью плагина.

процесс генерации RPM из исходного файла:

  1. скачать исходный файл.продление ГЗ.
  2. install rpm-build и rpmdevtools от yum install. (будет создана папка rpmbuild...СПЕЦИФИКАЦИИ, ИСТОЧНИКИ, ОБОРОТЫ.. папки должны быть созданы внутри папки rpmbuild).
  3. скопировать исходный код.GZ в папку SOURCES.(rpmbuild / SOURCES)
  4. открутите шар дегтя с помощью следующей команды. перейдите в папку SOURCES: rpmbuild/SOURCES где присутствует файл tar. команда: например tar-xvzf httpd-2.22.смола.ГЗ папка httpd-2.22 будет создана по тому же пути.
  5. перейдите в извлеченную папку и введите команду ниже: ./настроить --префикс=/usr/местные/apache2 не-с-в комплекте-апреля --включить-прокси-активация-прокси-балансировщик-с-МПМ=работник опцией --enable-моды-статический=все (.настройка может варьироваться в зависимости от источника, для которого RPM должен быть построен - я сделал для apache HTTPD, который нуждается в зависимости apr и apr-util пакет.)
  6. выполнить команду ниже После успешной настройки: сделай
  7. после успешного выполнения od выполнить команду: checkinstall в той же папке. (если у вас нет программного обеспечения checkinstall, загрузите последнюю версию с сайта) Также checkinstall программная ошибка, которая может быть решена следующим образом::::: найдите checkinstallrc и замените TRANSLATE = 1 на TRANSLATE=0 с помощью команды vim. Также проверьте наличие пакета exclude: EXCLUDE=" / selinux"
  8. checkinstall запросит опцию (введите R, Если вы хотите TP build rpm для исходного файла)
  9. сделано .файл rpm будет построен в папке RPMS внутри файла rpmbuild/RPMS... всего хорошего....

RPM обычно строятся из исходного кода, а не из двоичных файлов.

вам нужно написать файл спецификации, который описывает, как настроить и скомпилировать ваше приложение; также, какие файлы включить в ваш RPM.