Gym
lesson

Š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 formata
  • libfreetype — biblioteka za renderovanje fontova
  • libpng — 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:

  1. Pogleda listu dostupnih paketa iz konfigurisanih repozitorijuma
  2. Pronađe traženi paket i njegove zavisnosti
  3. Preuzme sve sa servera
  4. 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