Šta su paketi?
Zamisli da hoćeš da instaliraš program na Linuxu. Na Windows-u bi preuzeo .exe datoteku sa sajta i pokrenuo čarobnjak za instalaciju. Na macOS-u — .dmg fajl ili App Store. Na Linuxu, standardan način je kroz paket.
Paket je arhiva koja sadrži:
- prekompilovane binarne fajlove (izvršni program)
- konfiguracione fajlove
- dokumentaciju
- metapodatke — ime, verziju, autora, opis
- listu zavisnosti — drugih paketa koji su potrebni da ovaj radi
Zavisnosti (dependencies)
Retko koji program radi potpuno sam. Većina programa oslanja se na biblioteke — skupove već napisanog koda koji rešavaju opšte probleme (rukovanje mrežom, čitanje slika, šifrovanje...).
Na primer, program koji prikazuje PDF dokumente možda koristi:
libpoppler— biblioteka za čitanje PDF formatalibfreetype— biblioteka za renderovanje fontovalibpng— biblioteka za PNG slike
Sve te biblioteke su zasebni paketi. Sistem za upravljanje paketima automatski pronalazi i instalira sve što je potrebno — to se naziva rešavanje zavisnosti.
program-koji-hoces
├── libpoppler ← zavisnost
│ └── libfreetype ← zavisnost zavisnosti
└── libpng ← zavisnost
Bez ovog mehanizma, morao bi ručno da tražiš i instaliraš svaku biblioteku — što bi bio noćna mora.
Repozitorijumi — centralizovani izvor paketa
Repozitorijum (repo) je server koji sadrži kolekciju paketa. Možeš ga zamisliti kao app store za Linux — ali besplatan, otvoren i kontrolisan od strane zajednice ili distributera.
Kada instaliraš paket, tvoj sistem:
- Pogleda listu dostupnih paketa iz konfigurisanih repozitorijuma
- Pronađe traženi paket i njegove zavisnosti
- Preuzme sve sa servera
- Instalira ih ispravnim redom
Prednosti ovakvog pristupa:
- Bezbednost — paketi su potpisani digitalnim potpisom, sistem proverava autentičnost
- Ažuriranja — jednom komandom ažuriraš sve programe na sistemu
- Konzistentnost — paketi su testirani zajedno i za određenu distribuciju
- Brisanje — sistem zna tačno šta je instalirao i može to potpuno da ukloni
Formati paketa: .deb i .rpm
Linux distribucije koriste različite formate paketa. Dva najrasprostranjenija su:
| Format | Distribucije | Alati |
|---|---|---|
.deb |
Debian, Ubuntu, Linux Mint, Pop!_OS | apt, dpkg |
.rpm |
Red Hat, Fedora, CentOS, RHEL, openSUSE | dnf, yum, rpm |
Ovi formati nisu međusobno kompatibilni — .deb paket ne možeš direktno koristiti na Fedori, i obrnuto.
Napomena: Postoje i univerzalni formati kao što su Snap, Flatpak i AppImage koji rade na svim distribucijama, ali imaju drugačiji pristup (svi pakuju zavisnosti unutar sebe).
Zašto ne preuzimamo softver ručno sa interneta?
Veoma je uobičajeno pitanje: zašto ne preuzmem .tar.gz arhivu ili skriptu sa GitHub-a i ne pokrenem je?
Postoji nekoliko dobrih razloga da se to izbegava:
1. Bezbednost Paketi u repozitorijumima su digitalno potpisani. Sistem proverava potpis pre instalacije. Fajl preuzet sa nasumičnog sajta nema takvu garanciju — možda je izmenjen ili sadrži malware.
2. Ažuriranja Ručno instaliran softver sistem ne zna da postoji. Nikada ga neće ažurirati automatski. Paket iz repozitorijuma se ažurira zajedno sa svim ostalim.
3. Zavisnosti Ručna instalacija znači da i zavisnosti moraš ručno da rešiš. Menadžer paketa to radi umesto tebe.
4. Čišćenje Ako jednog dana hoćeš da ukloniš program, menadžer paketa zna tačno koje fajlove je instalirao i može ih sve obrisati. Ručno instaliran softver može ostaviti ostatke svuda po sistemu.
Preporuka: Uvek koristi zvanični repozitorijum distribucije kada je to moguće. Dodaj spoljne repozitorijume samo kada je potrebno, i samo ako im veruješ (na primer, zvanični repo nekog projekta).
Rezime
- Paket = prekompilovani softver + metapodaci + lista zavisnosti
- Zavisnosti = drugi paketi koji su potrebni da program radi
- Repozitorijum = centralizovani, verifikovani izvor paketa
.deb→ Debian/Ubuntu familija;.rpm→ Red Hat/Fedora familija- Paket menadžeri automatski rešavaju zavisnosti, bezbednost i ažuriranja