Come creare il primo RPM su CentOS 7
In questo tutorial andremo a descrivere nel dettaglio come poter realizzare il primo RPM su CentOS 7.
Partiamo da una macchina virtuale CentOS aggiornata alla versione 7.5 (seguire l’ articolo sull’ installazione),
yum update
cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
installiamo i pacchetti di sviluppo del gestore dei pacchetti RPM
yum install rpm-build rpmdevtools
inoltre installiamo qualche strumento utile durante la fase di creazione
yum install vim
Consideriamo di creare una cartella nella home nel nostro caso di root (per semplicità)
cd
rpmdev-setuptree
questo comando ci permette di creare l’ alberatura per la costruzione del nostro RPM
cd rpmbuild
ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
sono le cartelle che ci serviranno per tutte le fasi di creazione del pacchetto.
Creiamo un semplice script, che in seguito verrà installato con il gestore dei pacchetti RPM
vim /root/primo_rpm.sh
cat /root/primo_rpm.sh
#!/bin/sh
echo ‘ciao’
copiamo lo script nella cartella SOURCES, creiamo la seguente alberatura
cd /root/rpmbuild/SOURCES
mkdir -p primo_rpm-1
cp /root/primo_rpm.sh primo_rpm-1/
chmod +x primo_rpm-1/primo_rpm.sh
creiamo il pacchetto sorgente in formato tar (servirà per la fase di distribuzione dello script)
tar -cvzf primo_rpm-1.tar.gz primo_rpm-1/
creiamo adesso il file .spec, il file guida per la creazione del pacchetto RPM
cd /root/rpmbuild
rpmdev-newspec SPECS/primo_rpm.spec
ci viene fornito un template, effettuiamo le modifiche in base al nostro esempio
salviamo il tutto e compiliamo il pacchetto
rpmbuild -v -bb SPECS/primo_rpm.spec
avremo il seguente risultato
Esecuzione(%prep) in corso: /bin/sh -e /var/tmp/rpm-tmp.OpgrE0
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf primo_rpm-1
+ /usr/bin/tar -xf –
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/primo_rpm-1.tar.gz
+ STATUS=0
+ ‘[‘ 0 -ne 0 ‘]’
+ cd primo_rpm-1
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Esecuzione(%install) in corso: /bin/sh -e /var/tmp/rpm-tmp.jbUf3u
+ umask 022
+ cd /root/rpmbuild/BUILD
+ ‘[‘ /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64 ‘!=’ / ‘]’
+ rm -rf /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64
++ dirname /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64
+ mkdir -p /root/rpmbuild/BUILDROOT
+ mkdir /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64
+ cd primo_rpm-1
+ mkdir -p /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64/opt
+ cp -R primo_rpm.sh /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64/opt
+ ‘[‘ noarch = noarch ‘]’
+ case “${QA_CHECK_RPATHS:-}” in
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Elaborazione file: primo_rpm-1-0.noarch
Provides: primo_rpm = 1-0
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/sh
Controllo per file non pacchettizzati in corso: /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64
Scritto: /root/rpmbuild/RPMS/noarch/primo_rpm-1-0.noarch.rpm
Esecuzione(%clean) in corso: /bin/sh -e /var/tmp/rpm-tmp.2p8fgC
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd primo_rpm-1
+ rm -rf /root/rpmbuild/BUILDROOT/primo_rpm-1-0.x86_64
+ exit 0
installiamo a questo punto il pacchetto
rpm -ivh /root/rpmbuild/RPMS/noarch/primo_rpm-1-0.noarch.rpm
Preparazione in corso… ################################# [100%]
Aggiornamento / installazinone…
1:primo_rpm-1-0 ################################# [100%]
adesso se andiamo sulla cartella
cd /opt
avremo
ls -ltr
-rwxr-xr-x. 1 root root 22 24 mag 20.16 primo_rpm.sh