Ett programvarupaket är en arkivfil som innehåller ett datorprogram samt nödvändiga metadata för distributionen av det. Datorprogrammet kan finnas i källkod som först måste kompileras och byggas. Paketmetadata omfattar paketbeskrivning, paketversion och beroenden (andra paket som måste installeras i förväg).
Pakethanterare har till uppgift att hitta, installera, underhålla eller avinstallera programvarupaket på användarens kommando. Typiska funktioner i ett pakethanteringssystem är bland annat följande:
- Arbeta med filarkiverare för att extrahera paketarkiv
- Säkerställa paketens integritet och äkthet genom att verifiera deras kontrollsummor respektive digitala certifikat
- Söka upp, hämta, installera eller uppdatera befintlig programvara från ett programvaruarkiv eller en app-butik
- Gruppera paketen efter funktion för att minska användarens förvirring
- Hantera beroenden för att se till att ett paket installeras tillsammans med alla paket det kräver, och på så sätt undvika ”beroendehelvetet”
Utmaningar med delade bibliotekRedigera
Datorsystem som förlitar sig på dynamisk bibliotekslänkning, i stället för statisk bibliotekslänkning, delar exekverbara bibliotek med maskininstruktioner mellan paket och program. I dessa system leder komplexa förhållanden mellan olika paket som kräver olika versioner av bibliotek till en utmaning som i vardagligt tal kallas ”beroendehelvetet”. I Microsoft Windows-system kallas detta även för ”DLL-helvetet” när man arbetar med dynamiskt länkade bibliotek. En bra pakethantering är avgörande för dessa system. Framework-systemet från OPENSTEP var ett försök att lösa detta problem genom att tillåta att flera versioner av bibliotek installeras samtidigt och att programvarupaket anger vilken version de länkas mot.
Frontender för lokalt kompilerade paketRedigera
Systemadministratörer kan installera och underhålla programvara med hjälp av andra verktyg än pakethanteringsprogram. En lokal administratör kan till exempel hämta opaketerad källkod, kompilera den och installera den. Detta kan leda till att tillståndet i det lokala systemet inte längre är synkroniserat med tillståndet i pakethanterarens databas. Den lokala administratören måste då vidta ytterligare åtgärder, t.ex. hantera vissa beroenden manuellt eller integrera ändringarna i pakethanteraren.
Det finns verktyg för att se till att lokalt kompilerade paket integreras i pakethanteringen. För distributioner baserade på .deb- och .rpm-filer samt Slackware Linux finns CheckInstall, och för receptbaserade system som Gentoo Linux och hybridsystem som Arch Linux är det möjligt att först skriva ett recept som sedan ser till att paketet passar in i den lokala paketdatabasen.
Underhåll av konfigurationEdit
Partikulärt besvärligt vid programvaruuppgraderingar är uppgraderingar av konfigurationsfiler. Eftersom pakethanterare, åtminstone på Unix-system, har sitt ursprung som tillägg till verktyg för arkivering av filer, kan de vanligtvis bara antingen skriva över eller behålla konfigurationsfiler, snarare än att tillämpa regler på dem. Det finns undantag från detta ?som vanligtvis gäller kärnkonfiguration (som, om den bryts, gör datorn obrukbar efter en omstart). Problem kan uppstå om konfigurationsfilernas format ändras; till exempel om den gamla konfigurationsfilen inte uttryckligen inaktiverar nya alternativ som bör inaktiveras. Vissa pakethanterare, till exempel Debians dpkg, tillåter konfiguration under installationen. I andra situationer är det önskvärt att installera paket med standardkonfigurationen och sedan skriva över denna konfiguration, till exempel vid huvudlösa installationer på ett stort antal datorer. Denna typ av förkonfigurerad installation stöds också av dpkg.
RepositoriesEdit
För att ge användarna mer kontroll över vilka typer av programvaror de tillåter att installeras på deras system (och ibland på grund av juridiska skäl eller bekvämlighetsskäl från distributörernas sida), hämtas programvaror ofta från ett antal programvaruupplagor.
Undertryckande av uppgraderingEdit
När en användare interagerar med pakethanteringsprogrammet för att åstadkomma en uppgradering är det vanligt att användaren får en lista över de åtgärder som skall utföras (vanligen en lista över de paket som skall uppgraderas och eventuellt med angivande av det gamla och det nya versionsnumret), och att användaren antingen kan acceptera uppgraderingen som en helhet eller välja ut enskilda paket för uppgradering. Många pakethanterare kan konfigureras så att vissa paket aldrig uppgraderas, eller så att de endast uppgraderas när kritiska sårbarheter eller instabiliteter upptäcks i den tidigare versionen, enligt vad programvarans paketerare har definierat. Den här processen kallas ibland för versionspinning.
Till exempel:
- yum stöder detta med syntaxen exclude=openoffice*
- pacman med IgnorePkg= openoffice (för att undertrycka uppgradering av openoffice i båda fallen)
- dpkg och dselect stöder detta delvis genom flaggan hold. i paketval
- APT utökar hold-flaggan genom den komplexa ”pinning”-mekanismen (användare kan också svartlista ett paket)
- aptitude har ”hold”- och ”forbid”-flaggor
- portage stöder detta genom paketet.mask configuration file
Cascading package removalEdit
En del av de mer avancerade pakethanteringsfunktionerna erbjuder ”cascading package removal”, där alla paket som är beroende av målpaketet och alla paket som endast målpaketet är beroende av också tas bort.
Jämförelse av kommandonEdit
Och även om kommandona är specifika för varje enskild pakethanterare är de i stor utsträckning översättbara, eftersom de flesta pakethanterare erbjuder liknande funktioner.
Action | sypper | pacman | apt | dnf (yum) | portage |
---|---|---|---|---|---|
installera paket | zypper i PKG |
pacman -S PACKAGE |
apt install PACKAGE |
dnf install PACKAGE |
emerge PACKAGE |
remove package | zypper rm -RU PKG |
pacman -R PACKAGE |
apt remove PACKAGE |
dnf remove --nodeps PACKAGE |
emerge -C PACKAGE eller emerge --unmerge PACKAGE |
remove package+orphans | zypper rm -u --force-resolution PKG |
pacman -Rs PACKAGE |
apt autoremove PACKAGE |
dnf remove PACKAGE |
emerge -c PACKAGE eller emerge --depclean PACKAGE |
uppdatera programvarudatabas | zypper ref |
pacman -Sy |
apt update |
dnf check-update |
emerge --sync |
visa uppdaterbara paket | zypper lu |
pacman -Qu |
apt list --upgradable |
dnf check-update |
emerge -avtuDN --with-bdeps=y @world eller emerge --update --pretend @world |
delete orphans+config | zypper rm -u |
pacman -Rsn $(pacman -Qdtq) |
apt autoremove |
dnf erase PKG |
emerge --depclean |
show orphans | zypper pa --orphaned --unneeded |
pacman -Qdt |
package-cleanup --quiet --leaves --exclude-bin |
emerge -caD eller emerge --depclean --pretend |
|
uppdatera alla | zypper upp |
pacman -Syu |
apt upgrade |
dnf update |
emerge --update --deep --with-bdeps=y @world |
The Arch Linux Pacman/Rosetta wiki offers an extensive overview.