Korisnik:Snupisnoopy/pesak

Synaptic, primer upravljača paketa na Debian distribuciji
Pacman sinhronizacija paketa

Sistem za upravljanje paketima

uredi

Sistem za upravljanje paketima ili upravljač paketa (eng. Package manager) je skup softverskih alata za automatizovanje toka instaliranja, ažuriranja, konfigurisanja i brisanja računarskih programa.[1]

Sistem za upravljanje paketima upravlja formatom datoteka zvanim paket, arhiviranim fajlovima koji sadrže metapodatke. Pri instaliranju paketa na računaru, podaci o paketu se skladište u lokalnoj bazi podataka upravljača paketa. Takve baze često sadrže ime programa, opis, verziju, ime prodavca ili programera, kontrolni zbir, i listu zavisnosti (eng. Dependency). Ovakvi podaci su od ključnog značaja kako bi sistem mogao da precizno prati i upravlja verzijama softvera i spreči probleme pri nedostatku zavisnosti.

Prilikom preuzimanja paketa sa interneta, sistemi za upravljanje paketima pristupaju javnim ili privatnim repozitorijumima, centralizovanim skladištima koji programeri koriste za objavljivanje izvornog ili binarnog koda svog programa.

Pojam sistema za upravljanjem paketima se na različitim sistemima može javiti u drugačijim oblicima. Na Linux distribucijama koriste se različiti softverski alati u ovu svrhu, ponekad bez grafičkog interfejsa, i najčešće dolaze instalirani uz distribuciju. Na mobilnim operativnim sistemima prepoznajemo pojednostavljene sisteme za upravljanje paketima u vidu zvaničnih kataloga aplikacija (eng. App stores).

Ovakvi sistemi eleminišu potrebu za ručnom instalacijom i ažuriranjem softvera, što može biti korisno pri velikim firmama kojima je potrebno održavanje i administracija velike količine aplikativnih i sistemskih programa.[2]

Istorija

uredi

Za potrebe IBM AIX 3.0 operativnog sistema, razvijen je upravljač paketa SMIT (sa svojim backend-om installp) 1989. godine.

Rani upravljači paketa, oko 1994. godine nisu imali automatsko razrešavanje zavisnosti [3] ali su mogli da pojednostave proces dodavanja i brisanja softverskih paketa. [4]

Oko 1995. godine, počevši sa CPAN repozitorijumum, upravljači paketa su mogli da preuzimaju pakete sa repozitorijuma i automatski da rešavaju probleme zavisnosti, što ih je učinilo jednostavnijim za korišćenje. [5]

Funkcije

uredi
 
Stablo zavisnosti na NPM upravljaču paketa

Sistemi za upravljanje paketima imaju zadatak da pronađu, instaliraju, održavaju i obrišu (deinstaliraju) softverske pakete. Softverski paket je arhivirani fajl koji sadrži računarski program kao i neophodne metapodatke za potrebe instalacije. Računalni program može biti u izvornom kodu koji prvo mora biti preveden i izgrađen (build-ovan).[6] Metapodaci paketa uključuju opis paketa, verziju paketa i zavisnosti.

Tipične funkcije sistema za upravljanje paketima su:

  • Rad sa fajl arhivarima kako bi se paket ekstraktovao.
  • Provera kontrolnih zbirova i sertifikata javnih ključeva.
  • Pretraga, preuzimanje, instaliranje i ažuriranje postojaćeg softvera pristupanjem softverskih repozitorijuma.
  • Grupisanje paketa po funkcijama.
  • Provera zavisnosti, i instalacija svih potrebnih.

Izazovi sa deljenim bibliotekama - dependency hell

uredi

Kod računarskih sistema koji deljene programske biblioteke povezuju dinamički (eng. dynamic linking), umesto statičkog povezivanja, može doći do konflikta zavisnosti gde dva paketa zahtevaju različite verzije iste biblioteke. Takav slučaj se popularno naziva dependency hell. Na Microsoft Windows operativnim sistemima ovaj slučaj se takođe zove DLL hell kada se radi sa dinamično povezanim bibliotekama (eng. dynamically linked libraries). [7]

Moderni upravljači su uglavnom rešili ovaj problem, dopuštanjem koegzistiranja više verzija jedne biblioteke, uvođenjem slotova, pa čak i dopuštanjem prevođenja biblioteka različitim verzijama kompajlera.

Razrešavanje lokalno prevedenih paketa

uredi

Kako se softver može preuzeti i ne korišćenjem sistema za upravljanje paketima, potrebno je sinhronizovati lokalne verzije softvera sa bazom podataka upravljača paketa. Ponekad je potrebno ručno upravljanje nekim zavisnostima ili integracija promenjenog stanja sa upravljačem paketa.

Za takve potrebe, postoje dostupni alati koji dopuštaju da se lokalno prevedeni paketi integrišu u sistem za upravljanje paketima. Na primer, za distribucije bazirane na .rpm ili .deb formatima fajla postoji CheckInstall. [8]

Održavanje konfiguracionih datoteka

uredi

Prilikom ažuriranja određenih softvera, dolazi do ažuriranja konfiguracionih fajlova, što može proizvesti probleme ako se ne izvede korektno. Kako je upravljač paketa nastao kao derivat arhivara datoteka (na UNIX sistemima), uglavnom može samo da piše preko postojećih ili zadrži stare konfiguracione fajlove. Do problema može da dođe ako se format konfiguracionog fajla promeni, na primer, ako stari konfiguracioni fajl eksplicitno ne isključi nova podešavanja koja bi trebala biti isključena. Neki sistemi za upravljanje paketima, kao što je Debian-ov dpkg, dozvoljava konfiguraciju tokom instalacije. Ukoliko to nije moguće, poželjna je konfiguracija pre instalacije, što je takođe jedna od mogućnosti na dpkg-u.

Repozitorijumi

uredi

Repozitorijumi su dizajnirani tako da sadrže korisne pakete. Veći i oficijalni repozitorijumi su dizajnirani tako da ne sadrže malvere. Ako je upravljač paketa konfigurisan tako da preuzima isključivo datoteke sa elektronskim potpisom i ako su repozitorijumi od reputabilnog izdavača - možemo očekivati da takvi paketi ne sadrže maliciozan softver, pa po tome nije ni potreban antivirus. Nažalost, u praksi to nije slučaj i potrebno je obratiti pažnju na napade tzv. repozitorijumske zabune. [9]

Suzbijanje ažuriranja

uredi

Pri ažuriranju softvera, upravljač paketa omogućuje ažuriranje naveliko kao i izbor pojedinih paketa. Upravljači paketa mogu biti konfigurisani tako da nikad ne ažuriraju softver, ili da to uradi onda kada je verzija ranjiva ili nestabilna. Postupak suzbijanja verzija se naziva pinovanje (eng. version pinning).

Primeri (openoffice):

  • yum ovo podržava sa sintaksom exclude=openoffice* [10]
  • pacman sa IgnorePkg=openoffice [11]
  • dpkg podržava ovo korišćenjem hold zastavice pri izboru paketa
  • APT proširuje funkcionalnost hold zastavice sa kompleksnijim pinning mehanizmom [12] (takođe je moguće blacklist-ovanje paketa) [13]
  • aptitude ima hold i forbid zastavice
  • portage podržava ovo korišćenjem package.mask konfiguracione datoteke

Lančano brisanje paketa

uredi

Neki od naprednijih urpavljača paketa nude opciju „lančanog brisnaja paketa” (cascade) [11], gde se brišu svi paketi koji zavise od ciljanog paketa, i svi paketi od kojih zavisi samo ciljni paket.

Primeri sistema za upravljanje paketima i formata

uredi

Upravljači artifakta

uredi

Takođe zvani upravljači binarnih repozitorijuma ili univerzalni upravljači, su softverski alati namenjeni preuzimanju i skladištenju binarnih datoteka, artifakta (eng. Artifact) i paketa koji su korišćeni i proizvedeni u razvojnom ciklusu softvera. Ovakvi sistemi daju organizacijama kontrolu nad svim komponentama njihovog lanca snabdevanja softverom (tj. artefaktima, binarnim datotekama, paketima i komponentama).[14] Upravljači artifakta se smatraju ključnim alatom u DevOps toolchain-u. [15]

Formati paketa

uredi

Svaki upravljač paketa prepoznaje i radi sa specifičnim tipom (formatom) paketa. Za fundamentalno upravljanje paketima odgovoran je osnovni skup alata jednog upravljača paketa. Često možemo videti da više različitih upravljača paketa koriste isti osnovni skup alata (eng. core utilities), a na to dodaju novi skup funkcionalnosti.

Na primer, yum (Yellowdog Updater Modified) koristi rpm kao svoj backend. Yum time proširuje funkcionalnost backend-a dodavanjem karakteristika kao što su konfiguracije za održavanje sistema na mreži. Synaptic nam obezbeđuje grafički korisnički interfejs i baziran je na APT (Advanced Packaging Tool) biblioteci, koja je sama bazirana na dpkg za osnovni skup alata.

Alien je program koji konvertuje različite formate paketa na Linux-u, podržava konverziju između LSB-usklađenih .rpm paketa, .deb, Stampede (.slp), Solaris (.pkg) i Slackware paketa tarball tipa (.tgz, .txz, .tbz, .tlz).

Na mobilnim operativnim sistemima, Google-ov katalog aplikacija - Google Play koristi .APK (Android application package) paket format, dok Microsoft Store koristi .APPX i .XAP formate. Apple-ov ekvivalent prodavnice aplikacija koristi .IPA za aplikacije napisane u Swift-u ili Objective-C-u.

Besplatan i softver otvorenog koda

uredi

Po prirodi besplatnog i softvera otvorenog koda, paketi sa sličnim i kompatibilnim licencama su dostupni na različitim operativnim sistemima. Ovakvi paketi mogu da se kombinuju i distribuiraju korišćenjem kompleksnih sistema za upravljanje paketima, koji mogu da podrže razrešavanje visoke količine zavisnosti i permutacija softvera. Većina sistema za upravljanje paketima koji rade sa besplatnim paketima otvorenog koda, su i sami po sebi otvorenog koda i razvijani od strane zajednice koja ga koristi. Glavna razlika između sistema za upravljanje paketima na vlasničkim operativnim sistemima, i na operativnim sistemima slobodnog ili otvorenog koda (kao što je Linux), je u tome što nevlasnički operativni sistemi dozvoljavaju instaliranje softvera trećih strana putem istog mehanizma, dok upravljači paketa na Mac OS X i Windows-u dozvoljavaju isključivo instaliranje i ažuriranje programa dostupnih od strane ovih firmi (izuzetak mogu biti neki drajveri na Windows-u).

Na slobodnim i otvorenim upravljačima paketa moguće je instalirati ili ažurirati softver treće strane dodavanjem veb adrese repozitorijuma u konfiguracioni fajl upravljača.

Upravljači paketa aplikacionog nivoa

uredi

Za razliku od upravljača paketa sistemskog softvera, upravljači aplikacionog nivoa fokusiraju se na manju celinu softvera. Uglavnom se nalaze u direktorijumu koji nije pod uticajem od upravljača sistemskog nivoa, kao što je c:\cygwin na Windows-u ili /opt/sw na Linux-u. [16] Ovo doduše nije slučaj sa upravljačima paketa koji upravljaju bibliotekama programskih jezika, što može dovesti do konflikta gde oba upravljača tvrde da „poseduju” datoteku.

Neki od poznatijih upravljača paketa aplikacionog nivoa:

  • Conda - upravljač paketa za Python i R programske jezike.
  • Gradle - alat za build-ovanje i upravljač paketa za Java bazirane jezike.
  • Docker - sistem za upravljanje kontejnerima, služi kao upravljač paketa za postavljanje aplikacija u kontejnerima.
  • npm - programska biblioteka i upravljač paketa za Node.js i JavaScript.
  • NuGet - upravljač paketa za Microsoft-ove platforme kao što su .NET Framework i Xamarin.
  • pip - popularan upravljač paketa za Python i PyPI programsku biblioteku.

Upravljanje zavisnostima podataka

uredi

Edgar Marks, informatičar sa univerziteta u Lajpcigu je 2016. godine osmislio izraz Data Dependency Management [17] upućujući na sisteme koji upravljaju podacima. Sistemi za upravljanje zavisnostima podataka su dizajnirani tako da olakšaju postavljanje i upravljanje podacima na cloud-u, ličnim računarima ili pametnim uređajima. Framework-ovi za upravljanje zavisnostima podataka se koriste da bi se opisalo kako su podaci dobijeni, koje su njihove licence i kakve su njihove zavisnosti. Koncept za ovakve sisteme dolazi iz upravljačkih alata kao što su npm, NuGet itd. Koriste se za objavljivanje, lociranje i instalaciju paketa podataka. Tipični primeri upravljača zavisnostima podataka su framework-ovi kao što su Hugging Face, Kbox i drugi. [18]

Poređenje sa sličnim programima

uredi

Instaleri

uredi
 
Instalacioni čarobnjak na Windows operativnom sistemu

Upravljač paketa se kao termin često meša sa instalerima, što može dovesti do konfuzije. Razlika je sledeća:

Poređenje upravljača paketa sa instalerima
Kriterijum Upravljač paketa Instaler
Dolazi sa Operativnim sistemom ili samostalno. Svakim računarskim programom.
Lokacija o instalacionim informacijama Jedna - centralna baza podataka. Zavisi od instalera, može se nalaziti u direktorijumu programa, ili među sistemskim datotekama.
Oblast održavanja Potencijalno svi paketi na sistemu. Samo sopstveni program.
Razvijen od Izdavača package manager-a, ponekad projekat zajednice. Uglavnom od izdavača softvera.
Format paketa Određeni broj javno poznatih paketa. Standardizovani formati ne postoje, tj. svaki instaler ima svoj format.
Kompatibilnost formata paketa Potrebno je proveriti podržavanje određenih formata. Instaler će uvek podržavati svoj format arhiva.
 
Instaliranje plaćenih aplikacija na iOS app store-u

Katalozi aplikacija

uredi

Katalozi aplikacija, na engleskom - app stores se mogu smatrati upravljačima paketa aplikacionog nivoa. Za razliku od tradicionalnih upravljača paketa, katalozi su dizajnirani da omoguće plaćanje za sam softver koji se preuzima, i može samo da ponudi jednoslojne pakete bez zavisnosti i rešavanja zavisnosti. Zbog svoje komercijalne prirode, uglavnom su jako jednostavni i ograničeni u upravljaju. Česti su na vlasničkim operativnim sistemima i zaključanim pametnim uređajima.

Programi za automatizaciju izgradnje

uredi

Programi za automatizaciju izgradnje uzimaju datoteke ljudski čitljivog izvornog koda i automatizuju proces pretvaranja datoteka u binarne izvršne pakete na istom ili udaljenom računaru. Nakon toga, upravljač paketa na drugom računaru preuzima ovakve pakete preko interneta i instalira ih.

Doduše oba tipa alata imaju zajedničke karakteristike:

  • Na primer, topološko sortiranje grafova zavisnosti korišćeno kod upravljača paketa pri upravljanju zavisnostima, je takođe korišćeno kod upravljača izgradnje za upravljanje zavisnosti izvornih komponenti.
  • Na primer, moguće je instaliranje make datoteka komandom make install.
  • Na primer, svaki upravljač paketa koji radi na distribuciji baziranoj na izvornom kodu paketa (npr. Portage, Sorcery, Homebrew), podržava konvertovanje izvornog koga u binarne izvršne fajlove.

Neki alati kao što su Maak ili A-A-P, su dizajnirani da se bave i izgradnjom i distribucijom paketa, i mogu da se koriste kao upravljači izgradnje ili kao upravljači paketa ili oba. [19]

Uticaj

uredi

Ian Mudrok je prokomentarisao da su upravljači paketa „najbolji napredak koje je Linux doneo u industriji”, da takvi sistemi zamagljuju granice između operativnih sistema i aplikacija i da omogućava „jednostavnije postavljanje novih inovacija na tržište”, kao i „evoluciju operativnog sistema tokom vremena”. [20]

Postoji takođe i konferencija programera upravljača paketa pod nazivom PackagingCon. Osnovana je 2021. godine sa ciljem da se razumeju različiti pristupi u upravljanju paketima. [21]

Vidi još

uredi

Reference

uredi
  1. ^ „What is a package manager?”. debian.org. Архивирано из оригинала 17. 10. 2017. г. Приступљено 19. 5. 2024. 
  2. ^ „Software Distribution”. Dell KACE. Архивирано из оригинала 03. 10. 2015. г. Приступљено 19. 5. 2024. 
  3. ^ „The history of *nix package management”. 15. 8. 2017. Архивирано из оригинала 24. 10. 2021. г. Приступљено 19. 5. 2024. 
  4. ^ Epstein, Caleb (1. 4. 1995). „A review of InfoMagic's December 1994 Release”. Архивирано из оригинала 29. 10. 2021. г. Приступљено 19. 5. 2024. 
  5. ^ „The Timeline of Perl and its Culture”. perl.org. Архивирано из оригинала 11. 1. 2013. г. Приступљено 19. 5. 2024. 
  6. ^ Courtes, Ludovic (јун 2013). „Functional Package Management with Guix”. European Lisp Symposium 2013. Архивирано из оригинала 15. 05. 2020. г. 
  7. ^ Tucker, Chris (15. 03. 2007). „OPIUM: Optimal Package Install/Uninstall Manager” (PDF). 29th International conference on Software Engineering (ICSE'07): str.1. ISBN 978-0-7695-2828-1. doi:10.1109/ICSE.2007.59. Архивирано из оригинала (PDF) 14. 06. 2011. г. 
  8. ^ „CheckInstall”. help.ubuntu.com. 29. 08. 2019. Приступљено 19. 5. 2024. 
  9. ^ Nelson, Nate (4. 3. 2024). „Millions of Malicious Repositories Flood GitHub”. darkreading.com. Приступљено 19. 5. 2024. 
  10. ^ „[CentOS] yum pinning rpms”. centos.org. 1. 5. 2005. Архивирано из оригинала 02. 11. 2007. г. Приступљено 19. 5. 2024. 
  11. ^ а б „pacman(8) Manual Page”. archlinux.org. Архивирано из оригинала 31. 08. 2019. г. Приступљено 19. 05. 2024. 
  12. ^ „How to keep specific versions of packages installed (complex)”. debian.org. Архивирано из оригинала 14. 11. 2019. г. Приступљено 19. 5. 2024. 
  13. ^ „apt pinning to blacklist a package”. derkeiler.com. 7. 7. 2009. Архивирано из оригинала 22. 7. 2011. г. Приступљено 19. 5. 2024. 
  14. ^ „What Is Artifactory?”. JFrog. Приступљено 16. 5. 2024. 
  15. ^ Xavier, Decoster (18. 8. 2013). „An Overview of the NuGet Ecosystem”. CodeProject.com. Архивирано из оригинала 5. 7. 2020. г. Приступљено 16. 5. 2024. 
  16. ^ „Fink - F.A.Q.”. finkproject.org. Приступљено 18. 5. 2024. 
  17. ^ „The Knowledge Box”. github.com. Приступљено 18. 5. 2024. 
  18. ^ Marx, Edgard; Baron, Ciro; Soru, Tommaso. „KBox”. gieeexplore.ieee.org: 125—132. doi:10.1109/ICSC.2017.77. Приступљено 18. 5. 2024 — преко IEEE. 
  19. ^ Dolstra, Eleco. „Integrating Software Construction and Software Deployment” (PDF). Архивирано (PDF) из оригинала 21. 9. 2019. г. Приступљено 19. 5. 2024. 
  20. ^ Murdock, Ian. „How package management changed everything”. Ian Murdock's weblog. Архивирано из оригинала 23. 2. 2009. г. Приступљено 19. 5. 2024. 
  21. ^ „PackagingCon - a conference for package manager developers and packagers”. packaging-con.org. Архивирано из оригинала 2. 9. 2021. г. Приступљено 19. 5. 2024. 

Spoljne veze

uredi