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.