Каков минимум, который мне нужно сделать для создания RPM файла?
Я просто хочу создать RPM файл для распространения моего Linux-бинарного "foobar", всего за пару зависимостей. Он имеет конфигурационный файл, /etc/foobar.conf и должен быть установлен в /usr/bin/foobar.
К сожалению, документация для RPM - 27 глав, и у меня действительно нет дня, чтобы сесть и прочитать это, потому что я также заняты созданием установщиков .deb и EXE для других платформ.
Каков абсолютный минимум, который я должен сделать для создания RPM? Предположим, что foobar binary и foobar.conf находятся в текущем рабочем каталоге.
Ответы
Ответ 1
Я часто делаю двоичные rpm на упаковку собственных приложений, также наиболее распространенных как websphere - на linux.
Поэтому мой опыт может быть полезен и вам, кроме того, если вам удастся сделать TRUE RPM. Но я отвлекся.
Итак, основной шаг для упаковки вашей (двоичной) программы - это следующее: я полагаю, что
программа - toybinprog с версией 1.0, есть конфиг, который должен быть установлен в /etc/toybinprog/toybinprog.conf, и у вас есть мусор, который будет установлен в /usr/bin под названием tobinprog:
1. создайте rpm build env для 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. Скопируйте в источник 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 <[email protected]> 1.0-1
- First Build
EOF
4. постройте источник и двоичный об/мин
rpmbuild -ba SPECS/toybinprog.spec
И все.
Надеемся на эту помощь
Ответ 2
В качестве распространителя приложений fpm отлично подходит для ваших нужд. Здесь представлен пример, который показывает, как упаковать приложение из источника. FPM может создавать как файлы deb, так и файлы RPM.
Ответ 3
Аналогичным образом мне нужно было создать rpm с несколькими файлами. Поскольку эти файлы были контролируемыми из источника, и потому что это казалось глупым, я не хотел проходить через них, просто чтобы развернуть их. Я придумал следующее:
-
Настройте свою среду:
mkdir -p ~/rpm/{BUILD,RPMS}
echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros
-
Создайте свой spec файл 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
-
Создайте свои обороты:
rpmbuild -bb foobar.spec
Там немного хакера, указывающего "источник" как ваш текущий каталог, но он казался намного более элегантным, чем альтернатива, которая в моем случае заключалась в создании отдельного script для создания tarball и т.д. и т.д..
Примечание. В моей конкретной ситуации мои файлы были расположены в папках в соответствии с тем, куда они должны были идти, например:
./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, поэтому ваш пробег может отличаться.
Ответ 4
Для быстрого создания RPM проверьте Togo:
https://github.com/genereese/togo-rpm
В проекте есть руководство по быстрому запуску, и я смог создать базовый RPM менее чем за 3 минуты.
Пример использования данных, представленных в исходном вопросе:
1) Создайте каталог проекта с помощью script:
$ 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.
Ответ 5
Простой способ сборки пакета 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 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/бен/
- ~/rpmbuild/Buildroot/package_name-версия-release.i386/USR/доли/приложений/
- ~/rpmbuild/Buildroot/package_name-версия-release.i386/USR/доли/растровые изображения /
5) Вставьте в эти папки файлы, которые вы хотите вставить в пакет:
- ~/rpmbuild/Buildroot/package_name-версия-release.i386/USR/бен/binary_file.bin
- ~/rpmbuild/Buildroot/package_name-версия-release.i386/USR/доли/приложений/package_name.desktop
- ~/rpmbuild/Buildroot/package_name-версия-release.i386/USR/доли/растровые изображения /package _name.png
usr/share/pixmaps/package_name.png - это значок двоичного кода
usr/share/applications/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
Подробнее о создании rpm см. ссылку .
Программное обеспечение GUI java для сборки rpm: https://sourceforge.net/projects/javarpmbuilder/
Ответ 6
Если make config
работает для вашей программы или у вас есть оболочка script, которая копирует ваши два файла в соответствующее место, вы можете использовать checkinstall. Просто перейдите в каталог, в котором находится ваш файл makefile, и вызовите его с параметром -R
(для RPM) и, при необходимости, с установкой script.
Ответ 7
Если вы знакомы с Maven, там также rpm-maven-plugin
, который упрощает создание RPM: вам нужно написать только pom.xml
, который затем будет использоваться для создания RPM. Среда сборки RPM создается неявно плагином.
Ответ 8
Процесс генерации RPM из исходного файла:
- скачать исходный файл с расширением .gz.
- установите rpm-build и rpmdevtools из yum install. (будет создана папка rpmbuild... В папке rpmbuild должны быть созданы папки SPECS, SOURCES, RPMS..).
- скопируйте исходный код .gz в папку SOURCES. (rpmbuild/SOURCES)
- Отмените шарик tar, используя следующую команду.
перейдите в папку SOURCES: rpmbuild/SOURCES, где присутствует tar файл.
команда: например tar -xvzf httpd-2.22.tar.gz
Папка httpd-2.22 будет сгенерирована по тому же пути.
- перейдите в извлеченную папку и введите команду ниже:
. /configure --prefix =/usr/local/apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = рабочий --enable-mods-static = all
(.configure может варьироваться в зависимости от источника, для которого необходимо создать RPM - я сделал для apache HTTPD, которому нужен пакет зависимости apr и apr-util).
- выполните команду ниже, как только настройка будет успешной:
сделать
- после успешного выполнения команды make make:
Checkinstall
в той же папке. (если у вас нет программного обеспечения для проверки, загрузите последнюю версию с сайта)
Также в программном обеспечении checkinstall есть ошибка, которая может быть решена следующим образом:::
найдите checkinstallrc, а затем замените TRANSLATE = 1 на TRANSLATE = 0 с помощью команды vim.
Также проверьте пакет исключений: EXCLUDE = "/selinux"
- checkinstall запросит опцию (введите R, если вы хотите tp build rpm для исходного файла)
- Файл DOM.rpm будет создан в папке RPMS внутри файла rpmbuild/RPMS...
ВСЕ ЛУЧШИЕ....
Ответ 9
RPM обычно создаются из источника, а не из двоичных файлов.
Вам нужно написать спецификационный файл, который описывает, как настроить и скомпилировать ваше приложение; также, какие файлы включать в ваш RPM.
Быстрый взгляд на руководство показывает, что большая часть того, что вам нужно, рассматривается в главе 8 - также, поскольку большинство распределений на основе RPM имеют доступные источники, есть буквально миллионы примеров различных подходов, на которые вы могли бы обратить внимание.