**Paketinhallintajärjestelmä** (engl. *packet management system*, PMS) pitää kirjaa tietokoneeseen asennetuista pakettitiedostoista, jotka sisältävät tietokoneohjelmia ja muita tiedostoja. Järjestelmän avulla tietokoneen käyttäjä voi hakea pakettivarastoista tiedon uusimmista pakettiversioista ja voi päivittää ohjelmat halutessaan tai automaattisesti. 

Paketinhallintajärjestelmään kuuluu tietokoneohjelma, joka tekee pakettien asennus-, poisto- ja päivitystoimia, sekä tietokanta koneella olevien pakettien tiedoista ja versioista. Paketinhallintajärjestelmä automatisoi tietokoneohjelmien asennus-, päivitys- ja poistoprosessin tietokoneen käyttöjärjestelmässä. Järjestelmä osaa pakettien asennuksen ja poiston lisäksi myös muita ylläpitotehtäviä ja järjestelmä voi tehdä myös tiettyjä konfiguraatiotoimintoja automaattisesti asennuksen yhteydessä.

Ohjelmat voivat koostua yksittäisestä paketista tai useista toisistaan riippuvista paketeista. Lisäksi yksittäinen paketti voi sisältää useita toisiinsa liittyviä ohjelmia yhdessä paketissa. Paketeissa voi olla ohjelmatiedostojen lisäksi myös muuta tietoa kuten datatiedostoja, dokumentaatiota ja niin edelleen. Asennuksen yhteydessä paketinhallintajärjestelmän tehtävä on helpottaa käsittelemään toisistaan riippuvien pakettien kokoelmia.

Paketinhallintaohjelma osaa verrata paketinhallinnalla asennettujen pakettien versioita pakettivarastojen versioihin.
Jos pakettivarastossa on uudempi versio jostakin asennetusta paketista, se ehdottaa käyttäjälle paketin päivitystä. Käyttäjä on voinut määritellä myös, että päivitys tehdään aina automaattisesti. Paketinhallintaohjelma osaa katsoa pakettien riippuvuussuhteista, vaatiiko paketin uusi versio myös jonkun toisen paketin päivittämistä uudempaan tai kokonaan uuden paketin asennusta. Jos toinenkin paketti vaatii päivittämistä myös se otetaan mukaan päivitykseen.

Käyttöjärjestelmien lisäksi eräät ohjelmistopaketit sisältävät oman paketinhallintansa. Esimerkiksi Ruby käyttää RubyGem-paketteja, Rust sisältää Cargo-paketinhallintaohjelman ja Node.js sisältää npm-ohjelman pakettien asennukseen.

Historia
--------

Varhain Unixille tarkoitetut ohjelmat käännettiin itse lähdekoodeista, jota helpottamaan tulivat automaattiset käännöstyökalut (make, autoconf).

Sun Solaris sisälsi paketinhallintaohjelman pkg ainakin 2.x-versioista 1990-luvun alkupuolelta.

Ensimmäisen paketinhallintajärjestelmän Linuxille sanotaan olleen PMS, jonka versio 1.0 julkaistiin vuonna 1994 ja sitä käytettiin Bogus Linuxissa.
Paketinhallinnalla pystyi jo varhain päättelemään mitä osia käyttöjärjestelmästä asentaa ja siten säästää tilaa. Package Management System (PMS) oli Rik Faithin kirjoittama ja piti kirjaa asennetuista paketeista, sekä mahdollisti asennettujen pakettien poistamisen.

Syitä
-----

Ennen paketinhallintajärjestelmiä ohjelmia levitettiin tar-paketteina. Ongelmana oli, ettei jälkikäteen voinut hallita ohjelmistoa: käyttäjä ei voinut tietää ohjelman versiota ja päivittäminen oli vaikeaa koska tiedostot olivat levitettyinä ympäri järjestelmää. Lisäksi jos ohjelma riippui mistä tahansa toisesta ohjelmasta käyttäjän oli itse se käsin asennettava.

Paketinhallintajärjestelmät ratkovat hallintaongelmaa lisäämällä metatietoa itse ohjelman mukaan. Metatieto sisältää yksityiskohtaisen kuvauksen paketissa olevista tiedostoista, versionumeron, paketin kuvauksen, tiedon paketin tekijästä ja kehittäjän haluamaa lisätietoa. Metatieto sisältää myös tiedon myös riippuvuuksista, jotka tarvitaan jotta ohjelma voi toimia, sekä komentokielitiedostoja, jotka tekevät toimintoja kuten luovat hakemistoja, käyttäjätunnuksia tai käynnistävät palveluita.

Paketin asennukseen käytettävä ohjelma purkaa tiedostot paketista oikeisiin paikkoihin ja seuraa asennettuja paketteja. Ohjelma pystyy asentamaan, poistamaan, varmistamaan ja päivittämään paketteja sekä sillä voi kysyä tietoja asennetuista paketeista.

Paketinhallintajärjestelmä organisoi ja yksinkertaistaa ohjelmien asennusta ja hallintaa standardoimalla ja organisoimalla ohjelmistokokoelmien tuotannon ja käytön. Paketinhallintajärjestelmien tuoma rakenne istuu ohjelmien kehitykseen ja uudelleenkäytettävyyteen sekä integroituu IT-hallintaan.

Vaikutus
--------

Ian Murdockin mukaan paketinhallinta on suurin yksittäinen edistysaskel, jonka Linux on tuonut ohjelmistoteollisuuteen. Aiemmat käyttöjärjestelmät olivat suuria monoliittisia tuotteita ja sovellukset olivat suuria monoliittisia tuotteita niiden päällä. Murdockin mukaan käyttöjärjestelmien ja sovelluksien raja on hämärtynyt kun sovellukset asennetaan käyttöjärjestelmään integroiduilla työkaluilla ja itse sovellus integroituu käyttöjärjestelmän kanssa saumattomasti.

Toiminnot
---------

Tyypillisiä paketinhallinnan toimintoja ovat:

* Päivitystiedostojen varmistus alkuperäisyyden varmistamiseksi (kryptografisella tiivisteellä).
* Digitaalisten allekirjoitusten autentikointi pakkauksien alkuperäisyyden varmistukseksi.
* Pakkausohjelmien lisäys pakattujen tiedostojen hallintaan.
* Ohjelmien päivitys viimeisimpiin versioihin, tyypillisesti pakettivarastoista.
* Pakkauksien ryhmittely tietokoneen käyttäjän epätietoisuuden eliminoimiseksi.
* Riippuvuuksien hallinta, jotta päivitys päivittää kaikki muutkin ohjelmat, joiden päivitystä tämä päivitettävä ohjelma tarvitsee.

Paketinhallintaohjelma voi myös havaita, jos jotkin ohjelmat tai komponentit ovat tulleet tarpeettomiksi kun mikään muu paketti ei viittaa niihin.

Linuxin paketinhallinta
-----------------------

Synaptic, yksi eniten ja laajimmalla käytetty graafinen käyttöliittymä paketinhallinnalle Linux-käyttöjärjestelmissä.
Linuxin eri distribuutioille on olemassa useita paketinhallintaohjelmia.

* Arch Linux, Manjaro: pacman
* Red Hat Linux, Fedora, openSUSE: RPM, YUM, DNF
* Debian, Ubuntu: APT, apt-get, adept, aptitude, dpkg
* Gentoo Linux: Portage
* Slackware: pkgtool
* muita: apt-rpm, urpmi

BSD-jakeluissa käytetty pkgsrc on myös saatavilla Linuxille.

Homebrew on saatavilla sekä macOS:lle että Linuxille.

Flatpak, Snap ja AppImage ovat uudempia menetelmiä, joissa ohjelman tarvitsema ajonaikainen ympäristö on erillään varsinaisesta alustasta (isäntäjärjestelmästä).

Microsoft Windowsin paketinhallinta
-----------------------------------

Windowsissa on päivityksien asentamiseen käytetty Windows Update ja ohjelmien asentamiseen käytetty Windows Installer.

Lähteet
-------

1. 1 2 3 4  What is a package manager? *debian.org*. Viitattu 20.3.2022. (englanniksi)
2. ↑
3. ↑
4. ↑
5. ↑
6. ↑  The history of \*nix package management *eerielinux.wordpress.com*. Viitattu 15.2.2022. (englanniksi)
7. 1 2  Caleb Epstein: A review of InfoMagic's December 1994 Release *linuxjournal.com*.  1.4.1995. Viitattu 15.2.2022. (englanniksi)
8. 1 2 3 4 5 6  A Comparative Study of various Linux Package-Management Systems (PDF) *ripublication.com*. Viitattu 15.2.2022. (englanniksi)
9. 1 2  Package Management Security (PDF) *ssl.engineering.nyu.edu*. Viitattu 15.2.2022. (englanniksi)
10. 1 2  Package Management Systems *computer.org*. doi:10.1109/MS.2012.38.  Viitattu 15.2.2022. (englanniksi)
11. 1 2 3  How package management changed everything *ianmurdock.com*.  21.7.2007.  Arkistoitu. Viitattu 15.2.2022. (englanniksi)
12. ↑  flatpak(1) *man.archlinux.org*. Viitattu 14.2.2022. (englanniksi)
13. ↑  Jonathan Corbet: The universal application distribution mechanism? *lwn.net*.  15.6.2016. Viitattu 14.2.2022. (englanniksi)