Pacman
| Sammanfattning |
|---|
| pacman är Arch Linux pakethanterare (package manager). Pakethanterare används för att installera, uppgradera och ta bort programvara. Den här artikeln beskriver grundläggande användning och tips för att lösa problem. |
| Översikt |
| Paket i Arch Linux byggs genom att använda makepkg (eng.) och ett anpassat byggskript för varje paket (kallat en PKGBUILD (eng.)). När de paketerats så kan program installeras och hanteras med pacman. PKGBUILD-filer för program som finns i de officiella repositorierna (eng.) finns tillgängliga från ABS-trädet; tusentals fler är tillgängliga från det (icke officiellt stödda) Arch användarrepositorium (Arch user repository, AUR)). |
| Relaterat |
| Downgrading Packages |
| Improve Pacman Performance |
| pacman GUI Frontends |
| pacman Rosetta |
| pacman Tips |
| Pacman package signing |
| FAQ#Pakethantering |
| Pacman-key |
| Pacnew and Pacsave Files |
| Resurser |
| libalpm(3) Manual Page |
| pacman(8) Manual Page |
| pacman.conf(5) Manual Page |
| repo-add(8) Manual Page |
Pakethanteraren pacman är en av huvudfunktionerna i Arch linux. Programmet kombinerar ett enkelt binärt paketformat med ett lättanvänt byggsystem (build system) (se makepkg och Arch Build System). Målet med pacman är att göra det enkelt att hantera paket, oavsett om de kommer från Arch linux officiella repositorium) eller är byggda av användaren själv.
pacman håller systemet uppdaterat genom att synkronisera paketlistor med huvudservern. Denna server/klient modell gör det möjligt att ladda ner och installera paket med ett enkelt kommando, inklusive alla beroenden som erfordras.
pacman är skrivet i programmeringsspråket C och använder paketformatet .pkg.tar.xz.
Konfigurering
pacmans konfiguration är placerad i /etc/pacman.conf. Det är här användaren konfigurerar programmet så att det fungerar på önskvärt sätt. Fördjupad information om konfigurationsfilen kan hittas i man pacman.conf.
Generella alternativ
Generella alternativ finns i sektionen [options]. Läs man-sidorna eller se i standardfilen av pacman.conf för information om vad som kan göras där.
Ignorera att updatera paket
För att hoppa över ett specifikt paket, ange det på detta sätt:
IgnorePkg=linux
För att ignorera flera paket så använd en mellanslagsseparerad lista eller flera rader av IgnorePkg.
Ignorera att updatera paketgrupp
Liksom för paket så är det också möjligt att hoppa över uppdateringen av hela paketgrupper:
IgnoreGroup=gnome
Paketdatabaser (Repositorium)
Denna sektion definierar vilja repositorium att använda, som beskrivs i pacman.conf. Dessa kan anges direkt i denna fil eller inkluderas via en annan fil.
Alla officiella repositorium använder samma spegelfil (/etc/pacman.d/mirrorlist), som använder variabeln $repo, vilket innebär att bara en lista behöver underhållas.
Följande kod är ett exempel på detta, där de officiella repositorierna hänvisar sina speglar till filen /etc/pacman.d/mirrorlist.
#[testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [core] #SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist [extra] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist #[community-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [community] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist # If you want to run 32 bit applications on your x86_64 system, # enable the multilib repositories as required here. #[multilib-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [multilib] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist # An example of a custom package repository. See the pacman manpage for # tips on creating your own repositories. #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs
Paketsäkerhet
Pacman 4 stödjer signerade paket, vilket tillför ett extra säkerhetslager till paketen. För att aktivera signaturverifikation se här.
Användning
Nedan följer ett litet urval av uppgifter som pacman kan utföra. För att läsa mer utförliga exempel se man pacman.
Installation av paket
Installation av specifika paket
För att installera ett enskilt paket eller en lista av paket (inklusive beroenden), ge följande kommando:
# pacman -S paketnamn1 paketnamn2 ...
Ibland så finns det flera versioner av ett paket i olika repositorier, t.ex. [extra] och [testing]. För att installera versionen i [extra] så måste repositoriet anges före paketnamnet:
# pacman -S extra/paketnamn
Installation av paketgrupper
Vissa paket ingår i en paketgrupp som kan installeras samtidigt. Some packages belong to a group of packages that can all be installed simultaneously. Att t.ex. ge kommandot:
# pacman -S gnome
kommer att installera alla paket som ingår i gnome-gruppen. För att se vilka paket som ingår i gnome-gruppen, kör:
# pacman -Sg gnome
Du kan även besöka https://www.archlinux.org/groups/ för att se vilka paketgrupper som finns tillgängliga.
Borttagning av paket (avinstallation)
För att ta bort ett enskilt paket, utan att ta bort dess beroenden:
# pacman -R paketnamn
För att ta bort ett enskilt paket samt dess beroenden, så länge dessa inte behövs av andra installerade paket:
# pacman -Rs paketnamn
För att ta bort ett paket, dess beroenden, samt alla paket som är beroende av paketet som avinstalleras:
# pacman -Rsc paketnamn
För att ta bort ett paket som behövs av ett annat paket, utan att ta bort paketet som är beroende av målpaketet:
# pacman -Rdd paketnamn
pacman sparar viktiga konfigurationsfiler när vissa program tas bort och döper dem med filändelsen : .pacsave. För att hindra att dessa backup-filer skapas kan alternativet -n användas:
# pacman -Rn paketnamn
Upgradera paket
pacman kan uppgradera alla paket i systemet med bara ett kommando. Detta kan ta ganska lång tid beroende på hur uppdaterat systemet är. Detta kommando synkroniserar både repositoriedatabasen och uppgraderar systemets alla paket (förutom 'lokala' paket som inte finns i de konfigurerade repositorierna):
# pacman -Syu
pacman är en kraftfull pakethanterare, men är inte byggd för att hantera alla typer av särfall. Läs The Arch Way om detta skapar förvirring. Användare måste vara vaksamma och själva ta ansvar för att underhålla sina system. Vid en systemuppgradering så är det absolut nödvändigt att användare läser all information från pacman och använder sunt förnuft. Om en användarmodifierad konfigurationsfil måste uppgraderas för en ny paketversion så kommer en .pacnew-fil att skapas för att undvika att de användarmodifierade inställningarna skrivs över. Pacman kommer då att uppmana användaren att sammanfoga dessa filer, vilket kräver ett manuellt ingripande. Det är god praxis att hantera dessa fall direkt efter varje paketuppgradering eller borttagning. Se Pacnew and Pacsave Files för mer information.
Före uppgraderingar är det klokt att besöka Arch Linux hemsida för att kontrollera de senaste nyheterna (eller prenumerera på RSS-strömmen): när uppdateringar kräver ovanliga manuella ingripanden (mer än vad som kan hanteras bara genom att följa instruktionerna från pacman) så kommer en nyhetsuppdatering som berör detta att postas.
Om man råkar ut för problem som inte kan lösas av dessa instruktioner så se till att söka i forumet. Mest troligt så har andra användare stött på samma problem och postat instruktioner för hur det kan lösas.
Förfrågningar till paketdatabaserna
pacman förfrågar de lokala paketdatabaserna med -Q-flaggan; se:
$ pacman -Q --help
och förfrågar sync-databaserna med -S-flaggan; se:
$ pacman -S --help
pacman kan söka efter paket in databasen genom att både söka i paketnamn och beskrivningar:
$ pacman -Ss string1 string2 ...
För att söka bland redan installerade paket:
$ pacman -Qs string1 string2 ...
För att visa utförlig information om ett givet paket:
$ pacman -Si package_name
Detsamma för lokalt installerade paket:
$ pacman -Qi package_name
Genom att ange två -i-flaggor så kommer även en lista över backup-filer och deras modifikationsstatus att visas:
$ pacman -Qii package_name
För att hämta en lista över alla filer som installerats av ett paket:
$ pacman -Ql package_name
För icke-installerade paket så använd pkgfile från pkgtools eller nosr från nosr-git från AUR.
Man kan även fråga databasen om vilket paket en fil i filsystemet tillhör:
$ pacman -Qo /path/to/a/file
För att få en lista på alla paket om inte längre behövs som beroenden till andra paket (föräldralösa):
$ pacman -Qdt
För att få en lista över beroendeträdet till ett paket:
$ pactree package_name
För att få en lista över alla paket som beror på ett annat paket, använd whoneeds från pkgtools:
$ whoneeds package_name
Ytterligare kommandon
Uppgradera systemet och installera en lista med paket (med en kommandolinje):
# pacman -Syu package_name1 package_name2 ...
Ladda ner ett paket utan att installera det:
# pacman -Sw package_name
Installera ett 'lokalt' paket som inte hämtas från ett repositorium:
# pacman -U /path/to/package/package_name-version.pkg.tar.xz
Installera ett paket från en server som inte angetts som repositorium i pacmans konfigurationsfiler:
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
Rensa paketens cacheminne för paket som för närvarande inte är installerade (/var/cache/pacman/pkg):
# pacman -Sc
Rensa hela paketens cacheminne:
# pacman -Scc
Som ett alternativ till både -Sc och -Scc kan man överväga att använda Cacheclean från AUR. Detta python-skript rensar pacmans paket-cache selektivt och behåller x-antal gamla versioner av varje paket.
Partiella uppgraderingar stöds ej
Arch Linux har en rullande utgivningsmodell och nya versioner av biblioteken läggs kontinuerligt upp i repositorierna. Utvecklarna och betrodda användare bygger så om alla paket som behöver byggas om med de nya biblioteken. Om systemet har lokalt installerade paket (som t.ex. AUR-paket) så måste användarna själva bygga om dessa när paketets beroenden får en soname-uppgradering.
Detta innebär att partiella uppgraderingar inte stöds. Använd ej pacman -Sy package eller ett likvärdigt kommando som pacman -Sy följt av pacman -S package. Uppgradera alltid innan ett paket installeras -- särskilt om pacman har uppdaterat de synkroniserade repositorierna. Av samma skäl bör IgnorePkg och IgnoreGroup användas med försiktighet.
Om ett scenario med partiella uppgraderingar har skapats och binära filer inte längre fungerar, pga. att de inte kan hitta biblioteken som de är länkade mot, så försök inte "fixa" problemet bara genom att använda symlinkar. Bibliotek får soname-uppgraderingar när de inte längre är bakåtkompatibla. Det enkla kommandot pacman -Syu tillsammans med en korrekt synkroniserad spegel kommer att lösa problemet, så länge pacman själv fungerar.
Felsökning
F: En uppgradering av paket XYZ förstörde mitt system!
Det viktigaste rådet att komma ihåg är att inte "blint" uppgradera Arch-system. Läs alltid igenom listan av paket som kommer att uppgraderas. Lägg märke till om "kritiska" paket kommer att uppgraderas (linux, xorg-server osv.). Om så är fallet är det alltid en god idé att läsa nyheterna på https://www.archlinux.org/ och http://www.archlinux.se/, samt titta igenom forumen, för att se om andra användare har haft problem med uppgraderingen.
Om en paketuppdatering förväntas eller är känd att orsaka problem så kommer paketerarna att se till att pacman visar ett lämpligt meddelande när paketet uppgraderas. Om du har problem efter en uppgradering så dubbelkolla outputen från pacman genom att läsa dess loggfil (/var/log/pacman.log).
F: Jag vet att en ny version till paket ABC publicerats men pacman säger att mitt system är uppdaterat!
F: Jag får ett felmeddelande vid en uppgradering: "file exists in filesystem"!
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
Varför händer detta: pacman har identifierat en filkonflikt och kommer inte, som en del av dess design, att skriva över dessa filer åt dig. Detta är ett medvetet designval och inte en brist i programmet.
Problemet är vanligtvis trivialt att lösa. Ett säkert sätt är att först kontrollera om ett annat paket äger filen (pacman -Qo /sökväg/till/filen). Om filen ägs av ett annat paket så registrera en bugrapport (eng.). Om filen inte ägs av ett annat paket så kan filen som 'existerar i filsystemet' döpas om, varpå uppgraderingskommandot körs igen. Om allt går som det ska så kan filen då raderas.
Om du har installerat ett paket manuellt utan att använda pacman eller någon av dess programfronter, så måste du avinstallera det och radera alla dess filer innan det kan installeras på ett korrekt sätt med pacman.
Till varje installerat paket medföljer en/var/lib/pacman/local/$package-$version/files-fil som innehåller metadata om detta paket. Om denna fil skadas - är tom eller saknas - så resulterar detta i felmeddelandet "file exists in filesystem" när du försöker uppgradera paketet. Ett sådant felmeddelande berör vanligtvis bara ett paket och istället för att manuellt döpa om ta bort alla dess filer så kan kommandot pacman -S --force $package användas för att tvinga pacman att skriva över dessa filer.
pacman -Syu --force.F: Jag får ett felmeddelande vid installation av ett paket: "not found in sync db"
pacman -Syy för att tvinga en uppdatering av alla paketlistor.F: pacman fortsätter att uppgradera samma paket flera gånger!
/var/lib/pacman/local/, som t.ex. två fall av linux. pacman -Qi ger output som visar den korrekta versionen, men pacman -Qu känner igen den gamla versionen och försöker därför uppgradera denna.
Lösning: radera de felaktiga raderna i /var/lib/pacman/local/.
F: pacman kraschar under en uppgradering!
- Starta med hjälp av Arch live-CD
- Montera ditt rotfilsystem
- Uppdatera pacmans databas via
pacman -Syy - Ominstallera de trasiga paketen med
pacman -r /path/to/root -S package
F: Jag installerade mjukvara med make install; dessa filer tillhör inte något paket!
-f anges (pacman -Sf).
Se pacman Tips#Identify files not owned by any package för ett skript som söker igenom filsystemet efter filer som inte längre tillhör något paket.F: Jag behöver ett paket med en specifik fil. Hur tar jag reda på vilka paket som tillhandahåller den?
pkgfile som använder en separat databas innehållande alla filer och de paket de är associerade med.F: pacman är helt trasigt! Hur kan jag installera om det?
F: Efter att ha uppdaterat mitt system så får jag felmeddelandet "unable to find root device" efter att ha startat om, och mitt system kan inte längre starta.
--force kan vara en orsak). Använd proceduren nedan för att återställa systemet.
Starta systemet från en Arch live-cd. Kör sedan:
# mkdir /mnt/arch # mount /dev/sdaX /mnt/arch (din rotpartition) # cd /mnt/arch # mount -t proc proc proc/ # mount -t sysfs sys sys/ # mount -o bind /dev dev/ # mount /dev/sdaX boot/ (din /boot-partition) #Detta steg är bara nödvändigt om du har en separat boot-partition # chroot . # pacman -Syu udev mkinitcpio # mkinitcpio -p linuxDärefter, avmontera och starta om systemet.