2

У меня есть основной вопрос об RPM. Я не очень много знаю о сборке RPM, кроме основного файла .rpmmacros, каталога сборки и т.д. Я работаю в компании, где есть сервер непрерывной сборки (Jenkins), где отдел операций хочет, чтобы автономные RPM были отброшены для развертывания. Это первый раз, когда я столкнулся с этой методологией, и теперь мне нужно понять "мелкие мелочи" создания RPM. Я чувствую, что если я понимаю основную логику логики rpmbuild, я могу взять ее оттуда, но мне было трудно найти учебники или документацию, которые объясняют процесс.

Итак, в основном, я свел это к простому вопросу, как мне сделать эти три простых вопроса типа вопроса, который, я думаю, поднимет завесу в построении RPM.

Отправной точкой является файл .spec и пара файлов, которые необходимо развернуть.

Name:           my-ws
Version:        0.1.0
Release:        1
Summary:        A web service to do cool stuff 
URL:            http://my.ws/
BuildRoot:      %{_tmppath}/my-ws-build-root
Requires:       some-web-server-such-as-Jetty

%description
my-ws war file and data update script

%prep
%build
%install
%pre
%preun
%postun
%clean
%files
%defattr(-,www-data,www-data,-)
%doc

Теперь веб-сервис на самом деле состоит из 3 частей кода: сценарий Python, который обновляет файл данных, файл .war, который определяет маршруты и выполняет некоторые вычисления в Java, и cronjob для запуска сценария Python один раз в день и перезапуска сервер, возможно Jetty.

Так что где-то в этом файле спецификации я думаю, что мне нужно кодировать следующую логику:

To install this rpm
   copy the python script my-ws-update.py to /opt/my-ws/bin and chown it to www-data
   copy the war file my-ws.war to /opt/webapps
   install a cronjob for www-data to run my-ws-update.py and restart some server

To uninstall this rpm
   undo install steps

Начиная с пустого файла спецификации, я понятия не имею, куда идти дальше. Я пробовал несколько учебных пособий, но ни один из них не предназначен для такого простого, фундаментального уровня. У меня такое ощущение, что директива% files является одним из ключей ко всему этому, но когда я смотрю на примеры других людей, я вижу только список каталогов, и мне не ясно, как rpm знает, как поместить файл x из пути y подать w в путь z.

Может кто-нибудь помочь мне понять основные гайки и болты в этом? Это будет то, что мне нужно сделать много раз, по крайней мере, в течение следующего года, поэтому помощь очень ценится!

Более продвинутая версия этого в конечном итоге будет заключаться в установке cronjobs в шахматном порядке на серверах, чтобы избежать простоев.

1 ответ1

2

Сначала вам нужны файлы, которые вы хотите установить в системах. Поместить их в tar.gz было бы хорошо. Затем добавьте следующее в подготовительный раздел:

%prep
%setup -q

Он распакует ваш tar.gz в rpmbuild/BUILD и перейдет в ваш каталог.

В разделе установки поместите простые команды для копирования файлов из BUILD/mydir в папку BUILDROOT с той же иерархией, что и для установленных файлов.

%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/dir/to/create
cp -a my-ws-update.py $RPM_BUILD_ROOT/dir/to/create
etc...

Наконец, вы должны перечислить файлы, которые вы хотите в вашем файле RPM. Если вы укажете файл, который не был скопирован в $ RPM_BUILD_ROOT, или скопируете файлы без их перечисления, rpmbuild предупредит вас. Например:

error: Installed (but unpackaged) file(s) found:
    /etc/redhat-release
    /etc/system-release

Вы ДОЛЖНЫ также написать раздел журнала изменений, например

%changelog
* Tue Jan 08 2013 Dennis Gilmore <dennis@ausil.us> - 17-2
- add the fedora 18 GPG keys

После завершения spec-файла соберите rpm:

rpmbuild -ba myfile.spec

Он также создаст двоичные и исходные rpms. Исходный rpm называется src.rpm, который будет содержать все исходные файлы и файлы спецификаций, необходимые для воссоздания rpm.

Надеюсь, это помогло.

На какой системе вы строите RPM? Я могу дать вам больше деталей, если вы хотите. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .