RPM: exemplos básicos de construção de RPM

2

Eu tenho uma pergunta básica de RPM. Eu não sei muito sobre a construção do RPM, além do arquivo .rpmmacros básico, o diretório de construção, etc. Eu trabalho em uma empresa onde há um servidor de construção contínua (Jenkins) onde o departamento de Ops quer que os RPMs sejam descartados. desdobramento, desenvolvimento. Esta é a primeira vez que eu fui exposto a esta metodologia, e agora eu preciso entender o "nitty gritty" de construir um RPM. Eu sinto que, se eu entendo o espírito mais básico da lógica do rpmbuild, eu posso levá-lo a partir daí, mas tive dificuldade em encontrar tutoriais ou documentação que elucidassem o processo.

Então, basicamente, eu reduzi a um simples como eu faço essas três coisas simples tipo pergunta que eu acho que vai levantar o véu no edifício RPM.

O ponto de partida é um arquivo .spec e alguns arquivos a serem implantados.

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

Agora, o serviço da Web é composto de três partes: Um script python que atualiza um arquivo de dados, um arquivo .war que define as rotas e faz alguns cálculos em Java e um cronjob para executar o script python uma vez ao dia e reinicie um servidor, possivelmente o Jetty.

Então, em algum lugar desse arquivo de especificação, acho que preciso codificar a seguinte lógica:

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

Começando com um arquivo de especificação vazio, não tenho idéia de onde ir em seguida. Eu tentei alguns tutoriais, mas nenhum parece ser voltado para este tipo de nível simples e fundamental. Tenho a sensação de que a diretiva% files é uma chave para tudo isso, mas quando vejo exemplos de outras pessoas, tudo que vejo é uma lista de diretórios, e não está claro para mim como o rpm sabe colocar o arquivo x do caminho y para arquivar w no caminho z.

Alguém pode me ajudar a entender os detalhes básicos de como fazer isso? Isso será algo que eu preciso fazer muitas vezes pelo menos no próximo ano para que a ajuda seja muito apreciada!

Uma versão mais avançada disso será, por fim, instalar os cronjobs em tempos escalonados nos servidores, para evitar tempo de inatividade.

    
por David Williams 30.05.2013 / 19:15

1 resposta

2

Primeiro, você precisa dos arquivos que deseja instalar nos sistemas. Colocá-los em um tar.gz seria OK. Em seguida, adicione o seguinte na seção prep:

%prep
%setup -q

Ele irá descompactar seu tar.gz para rpmbuild / BUILD e cd para seu diretório.

Na seção de instalação, coloque comandos simples para copiar os arquivos de BUILD / mydir em BUILDROOT com a mesma hierarquia que você deseja com os arquivos instalados.

%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...

Finalmente, você precisa listar os arquivos que deseja no seu arquivo rpm. Se você listar um arquivo, que não foi copiado para $ RPM_BUILD_ROOT ou copiar arquivos sem listá-los, o rpmbuild irá avisá-lo. Por exemplo:

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

Você DEVE também escrever a seção do changelog, por exemplo

%changelog
* Tue Jan 08 2013 Dennis Gilmore <[email protected]> - 17-2
- add the fedora 18 GPG keys

Depois de terminar o arquivo de especificações, construa o rpm:

rpmbuild -ba myfile.spec

Ele também criará os rpms binários e de origem. O rpm de origem é denominado src.rpm e contém todos os arquivos de origem e arquivos de especificação necessários para recriar o rpm.

Espero que tenha ajudado.

Em qual sistema você está criando rpms? Eu posso te dar mais detalhes, se você quiser. :)

    
por 31.05.2013 / 10:42

Tags