Néha előfordul, hogy bizonyos feladatokra saját RPM telepítő fájlt kell készítened. Ez a leírás segít neked egy nagyon egyszerű rpm telepítő fájlt létrehozni.

Feladat a következő: Képzeljük el a következő szitut. Van egy programunk vagy scriptünk és azt akarjuk felrakni a szervereinkre. Úgy szeretnénk megcsinálni, hogy a vállalati repóra fel lehessen rakni és onnan bármikor telepíteni. Ehhez RPM-et kell készítsünk.
Hogy e feladatnak legyen némi haszna, ezért alapból a Meltdown-Spectra sebezhetőséget vizsgáló spectre-meltdown-checker scriptet fogom használni amit itt érhettek el.
Hát akkor lássunk hozzá!

Előfeltételek
Telepített CentOS8 rendszer (Vagy RHEL8)

cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)

Lépjünk be root-ként és frissítsük a rendszert, majd telepítsük fel a szükséges csomagokat!

yum update -y
yum install rpm* -y

Készítsünk egy felhasználót aminek a nevében elkészíthetjük az RPM fájljainkat, majd adjunk neki jelszót, majd lépjünk be a felhasználónkkal!

useradd -m rpmuser
passwd rpmuser

Muszáj lesz rendszergazdát csináljunk a felhasználónkból, hogy a végén a teszt telepítést meg tudjuk csinálni. Adjuk hozzá a wheel csoporthoz, hogy sudoers jogot kapjon! Ellenőrizzük az ID paranccsal!

usermod -aG wheel rpmuser
id rpmuser
uid=1002(rpmuser) gid=1002(rpmuser) csoportok=1002(rpmuser),10(wheel)

Lépjünk be a felhasználónkkal!

su - rpmuser

Hozzuk létre a szükséges könyvtárstruktúrát! Ehhez van egy jópofa parancsunk.

rpmdev-setuptree

Konzervatívok így is csinálhatják :P

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

Ha létrejöttek a könyvtárak, akkor valami ilyesmi szerkezetet fogunk látni:

[rpmuser@rpm ~]$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
5 directories, 0 files

Ezen felül létrejön a felhasználó könyvtárában a ​.rpmmacros fájl amiben az rpmbuild viselkedésének paramétereit adhatjuk meg. Itt adható meg a GPG kulcs is, de az másik mese lesz.

Lépjünk be a SOURCES mappába!

cd rpmbuild/SOURCES

Készítsük el a programunkat tartalmazó könyvtárat, majd lépjünk bele!

mkdir spectre-meltdown-checker-1.0 ; cd spectre-meltdown-checker-1.0

Ez az a pont amikor letöltjük a spectre-meltdown-checker programot. Valami ilyesmit kell lássunk.

[rpmuser@rpm spectre-meltdown-checker-1.0]$ wget https://meltdown.ovh -O spectre-meltdown-checker.sh
...
HTTP kérés elküldve, várakozás válaszra… 200 OK
Hossz: 220277 (215K) [text/plain]
Mentés ide: „spectre-meltdown-checker.sh”
spectre-meltdown-checker. 100%[=====================================>] 215,11K --.-KB/s idő 0,05s
2020-11-20 22:51:20 (4,65 MB/s) -- „spectre-meltdown-checker.sh” mentve [220277/220277]

Ellenőrizzük le! Ott van, tök jó.

[rpmuser@rpm spectre-meltdown-checker-1.0]$ ll
összesen 216
-rw-rw-r--. 1 rpmuser rpmuser 220277 nov 20 22.51 spectre-meltdown-checker.sh

Készítsük el a configure fájlt! Kelleni fog a becsomagolt tar fájlunkba amiből az RPM készül.

touch configure

A letöltött sh fájlra és a configure fájlra is adjunk 0755 jogot, majd lépjünk egy könyvtárral feljebb!

chmod 0775 *
cd ..

Be kell csomagoljuk a könyvtárunkat tar-ba. Ellenőrizzük! Ott van minden ahol kell, klassz.

tar czvf spectre-meltdown-checker-1.0.tar.gz spectre-meltdown-checker-1.0

[rpmuser@rpm SOURCES]$ ll
...
-rw-rw-r--. 1 rpmuser rpmuser 51466 nov 20 23.11 spectre-meltdown-checker-1.0.tar.gz

Ez volt eddig a könnyű része. El kell készíteni a spec fájlt ami tartalmazza az RPM fájl pontos konfigurációját. Ehhez lépjünk egy könyvtárral feljebb és adjuk ki a következő parancsokat:

cd ..
rpmdev-newspec SPECS/spectre-meltdown-checker.spec

Szerkesszük meg a fájlt a kedvenc szövegszerkesztőnkkel!

vim SPECS/spectre-meltdown-checker.spec

A tartalma a következő legyen:

Name: spectre-meltdown-checker
Version: 1.0
Release: 1%{?dist}
Summary: Spectre and Meltdown Checker Installer
License: Licenc típusa. PL: BSD
URL: https://torig.hu
# A tar fajlunkat kell megadni ide
Source0: spectre-meltdown-checker-1.0.tar.gz

Group: Miscellaneous
BuildArch: noarch

%description
# Leirast is adjunk hozza
Bemutato RPM a spectre-meltdown-checker felhasznalasaval. Sebezhetoseg ellenorzo telepitesehez.

%prep

%setup -q

%build

%install
rm -rf $RPM_BUILD_ROOT
# A progam a /opt/spectre-meltdown-checker konyvtarba fog kerulni a megadott jogosultsaggal.
install -d -m 0755 %{buildroot}/opt/spectre-meltdown-checker
# Megadjuk a fajlt is, hogy hova keruljon milyen joggal.
install -m 0755 spectre-meltdown-checker.sh %{buildroot}/opt/spectre-meltdown-checker/spectre-meltdown-checker.sh

%clean
# Takaritunk
rm -rf $RPM_BUILD_ROOT

%files
# Root lesz a tulajdonos es a group is.
%defattr(-,root,root,-)
# Ez lesz a fajl vegleges helye. Fajlok listaja amiket masolni fogunk. Nekunk most csak egy van.
/opt/spectre-meltdown-checker/spectre-meltdown-checker.sh

%changelog
* Fri Nov 20 2020 rpmuser Elso verzio.
-

Ebbe a spec fájlba kell beleheggeszteni minden paramétert ami az RPM telepítéshez és a program beállításához szükséges. Ha kész vagyunk, lehet sütni az RPM-et.

rpmbuild -ba SPECS/spectre-meltdown-checker.spec

Müller Cecíliásan: Akkor csináltuk jól, ha hibaüzenet nélkül lefutott és az RPM fájl létrejött a RPMS/noarch/ könyvtár alatt. Bármi hibaüzenet van, valószínűleg a spec fájl van elpélecolva, vagy a szükséges fájlok, jogosultságok vannak eltolva valahol. Ellenőrizzük, létrejött-e a fájl!

[rpmuser@rpm rpmbuild]$ ll RPMS/noarch/spectre-meltdown-checker-1.0-1.el8.noarch.rpm 
-rw-rw-r--. 1 rpmuser rpmuser 53988 nov 20 23.29 RPMS/noarch/spectre-meltdown-checker-1.0-1.el8.noarch.rpm

Super. Akkor telepítsük fel!

yum localinstall RPMS/noarch/spectre-meltdown-checker-1.0-1.el8.noarch.rpm

Miért nem rpm -ivh -val telepítem? Mert így bekerül a yum history-ba és a yum history undo paranccsal vissza lehet vonni a telepítést. Illetve yum remove paranccsal el lehet távolítani. Valami hasonlót fogunk látni a telepítéskor.

[rpmuser@rpm rpmbuild]$ sudo yum localinstall RPMS/noarch/spectre-meltdown-checker-1.0-1.el8.noarch.rpm 
[sudo] rpmuser jelszava:
Az utolsó metaadat lejárati ellenőrzés ennyi ideje volt: 1:01:37, ekkor: 2020. nov. 20., péntek, 22:31:50 CET.
Függőségek feloldva.
========================================================================================================
Csomag Architektúra Verzió Tároló Méret
========================================================================================================
Telepítés:
spectre-meltdown-checker noarch 1.0-1.el8 @commandline 53 k
Tranzakció összegzés
========================================================================================================
Telepítés 1 Csomag
Teljes méret: 53 k
Telepített méret: 215 k
Ez így jó? [y/N] y
Csomagok letöltése:
Tranzakció ellenőrzés futtatása
Tranzakció ellenőrzés sikeres.
Tranzakció teszt futtatása
Tranzakció teszt sikeres.
Tranzakció futtatása
Előkészítés : 1/1
Telepítés : spectre-meltdown-checker-1.0-1.el8.noarch 1/1
Ellenőrzés : spectre-meltdown-checker-1.0-1.el8.noarch 1/1Telepítve:
spectre-meltdown-checker-1.0-1.el8.noarch
Kész!

Yum historyban látszik a telepítés.

[rpmuser@rpm rpmbuild]$ yum history
Azonos | Parancssor | Dátum és idő | Művelet(ek) | Változt
-------------------------------------------------------------------------------
5 | localinstall RPMS/noarch | 2020-11-20 23:33 | Install | 1
4 | install rpm* | 2020-11-20 22:38 | Install | 69
...

A programot szükség esetén a telepítési helyről lehet futtatni.

[rpmuser@rpm rpmbuild]$ ll /opt/spectre-meltdown-checker/spectre-meltdown-checker.sh 
-rwxr-xr-x. 1 root root 220277 nov 20 23.29 /opt/spectre-meltdown-checker/spectre-meltdown-checker.sh

Program eltávolítása ezen a ponton lehetséges sudo yum history undo 5 paranccsal. Illetve sudo yum remove spectre-meltdown-checker paranccsal. Ezt utóbbit fogom most prezentálni, de te otthon nyájas olvasóm próbáld ki mindkettőt!

[rpmuser@rpm rpmbuild]$ sudo yum remove spectre-meltdown-checker -y
Függőségek feloldva.
========================================================================================================
Csomag Architektúra Verzió Tároló Méret
========================================================================================================
Eltávolítás:
spectre-meltdown-checker noarch 1.0-1.el8 @@commandline 215 k
Tranzakció összegzés
========================================================================================================
Eltávolítás 1 Csomag
Felszabadított terület: 215 k
Tranzakció ellenőrzés futtatása
Tranzakció ellenőrzés sikeres.
Tranzakció teszt futtatása
Tranzakció teszt sikeres.
Tranzakció futtatása
Előkészítés : 1/1
Törlés : spectre-meltdown-checker-1.0-1.el8.noarch 1/1
Ellenőrzés : spectre-meltdown-checker-1.0-1.el8.noarch 1/1
Eltávolítva:
spectre-meltdown-checker-1.0-1.el8.noarch
Kész!

Nagyjából ennyi létrehozni egy RPM-et a scriptünknek. Nem mentem bele abba, hogy hogyan készítsünk forrásból RPM-et, avagy mi van akkor ha több fájlunk van, illetve hogyan írjuk alá GPG kulccsal az RPM-et és hogy készítsünk hozzá repót, és hogyan készül a szalontüdő zsemlegombóccal (egyébként a szalontüdőt marha jól csinálom), mert akkor ez a kis leírás vetekedne a Grimm mesék hosszával és az egyenlőre nem célom.