Pacman (Polski)

From ArchWiki


Menedżer pakietów pacman jest jedną z głównych cech wyróżniających Arch Linux. Łączy prosty format pakietu binarnego z łatwym w użyciu systemem budowania. Celem pacman jest umożliwienie łatwego zarządzania pakietami, niezależnie od tego, czy pochodzą one z oficjalnych repozytoriów, czy z własnych kompilacji użytkownika.

Pacman zapewnia aktualność systemu poprzez synchronizację list pakietów z serwerem głównym. Ten model serwer/klient umożliwia również użytkownikowi pobieranie/instalowanie pakietów za pomocą prostego polecenia, wraz ze wszystkimi wymaganymi zależnościami.

Pacman jest napisany w języku programowania C i do pakowania używa formatu bsdtar(1) tar.

Tip: The pacman package contains tools such as makepkg and vercmp(8). Other useful tools such as pactree and checkupdates are found in pacman-contrib (formerly part of pacman). Run pacman -Ql pacman pacman-contrib | grep -E 'bin/.+' to see the full list.

Stosowanie

Poniżej znajduje się tylko niewielka próbka operacji, które może wykonać pacman. Aby przeczytać więcej przykładów, zobacz pacman(8).

Tip: For those who have used other Linux distributions before, there is a helpful Pacman Rosetta article.

Instalowanie pakietu

A package is an archive containing:

  • wszystkie (skompilowane) pliki aplikacji
  • metadane dotyczące aplikacji, takie jak nazwa aplikacji, wersja, zależności itp.
  • pliki instalacyjne i dyrektywy dla pacman.
  • (opcjonalnie) dodatkowe pliki ułatwiające życie, takie jak skrypt start/stop

Menedżer pakietów Archa pacman może instalować, aktualizować i usuwać te pakiety. Korzystanie z pakietów zamiast samodzielnego kompilowania i instalowania programów ma wiele zalet:

  • łatwo aktualizowalny: pacman zaktualizuje istniejące pakiety, gdy tylko będą dostępne aktualizacje
  • sprawdzanie zależności: pacman obsługuje zależności za Ciebie, wystarczy określić program, a pacman zainstaluje go razem z każdym innym potrzebnym programem
  • czyste usuwanie: pacman ma listę wszystkich plików w pakiecie; w ten sposób żadne pliki nie zostaną przypadkowo pozostawione, gdy zdecydujesz się usunąć pakiet.
Note:
  • Pakiety często mają opcjonalne zależności, które są pakietami, które zapewniają dodatkową funkcjonalność aplikacji, ale nie są ściśle wymagane do jej uruchomienia. Podczas instalacji pakietu, pacman wyświetli listę opcjonalnych zależności pakietu, ale nie zostaną one znalezione w pacman.log. Użyj polecenia #Querying package databases[broken link: invalid section], aby wyświetlić opcjonalne zależności pakietu.
  • Podczas instalowania pakietu, który jest wymagany tylko jako (opcjonalna) zależność od innego pakietu (tzn. nie jest wymagany przez Ciebie wprost), zaleca się użycie opcji --asdeps. Aby uzyskać szczegółowe informacje, zobacz sekcję Powód instalacji[broken link: invalid section].
Warning: When installing packages in Arch, avoid refreshing the package list without upgrading the system[broken link: invalid section] (for example, when a package is no longer found in the official repositories). In practice, do not run pacman -Sy package_name instead of pacman -Syu package_name, as this could lead to dependency issues. See System maintenance#Partial upgrades are unsupported and BBS#89328.

Instalowanie określonych pakietów

Aby zainstalować pojedynczy pakiet lub listę pakietów, w tym zależności, wydaj następujące polecenie:

# pacman -S package_name1 package_name2 ...

Aby zainstalować listę pakietów z wyrażeniem regularnym (zobacz ten wątek na forum):

# pacman -S $(pacman -Ssq package_regex)

Czasami istnieje wiele wersji pakietu w różnych repozytoriach (np. extra i testing). Aby zainstalować wersję z extra repozytorium w tym przykładzie, repozytorium musi być zdefiniowane przed nazwą pakietu:

# pacman -S extra/package_name

Aby zainstalować kilka pakietów o podobnych wzorach w nazwach, można użyć rozwinięcia nawiasów klamrowych. Na przykład:

# pacman -S plasma-{desktop,mediacenter,nm}

Można to rozszerzyć na dowolną liczbę potrzebnych poziomów:

# pacman -S plasma-{workspace{,-wallpapers},pa}
Pakiety wirtualne

Pakiet wirtualny to specjalny pakiet, który sam nie istnieje, ale jest dostarczany przez jeden lub więcej innych pakietów. Pakiety wirtualne pozwalają innym pakietom nie nazywać określonego pakietu jako zależności, w przypadku kilku kandydatów. Pakiety wirtualne nie mogą być instalowane według ich nazwy, zamiast tego są instalowane w twoim systemie, gdy zainstalowałeś pakiet dostarczający pakiet wirtualny.

Instalowanie grup pakietów

Niektóre pakiety należą do grupy pakietów, z których wszystkie mogą być instalowane jednocześnie. Na przykład wydając polecenie:

# pacman -S gnome

poprosi Cię o wybranie pakietów z gnome gnome, które chcesz zainstalować.

Czasami grupa pakietów będzie zawierać dużą liczbę pakietów, a może być tylko kilka, które chcesz lub nie chcesz instalować. Zamiast wprowadzać wszystkie liczby oprócz tych, których nie chcesz, czasami wygodniej jest wybrać lub wykluczyć pakiety lub zakresy pakietów o następującej składni:

Enter a selection (default=all): 1-10 15

który wybierze pakiety od 1 do 10 i 15 do instalacji lub:

Enter a selection (default=all): ^5-8 ^2

który wybierze wszystkie pakiety z wyjątkiem 5 do 8 i 2 do instalacji.

Aby zobaczyć, jakie pakiety należą do grupy gnome, uruchom:

# pacman -Sg gnome

Odwiedź także https://archlinux.org/groups/, aby zobaczyć, jakie grupy pakietów są dostępne.

Note: Jeśli pakiet z listy jest już zainstalowany w systemie, zostanie ponownie zainstalowany, nawet jeśli jest już aktualny. To zachowanie można przesłonić opcją --needed.

Usuwanie pakietów

Aby usunąć pojedynczy pakiet, pozostawiając zainstalowane wszystkie jego zależności:

# pacman -R package_name

Aby usunąć pakiet i jego zależności, które nie są wymagane przez żaden inny zainstalowany pakiet:

# pacman -Rs package_name
Warning: Podczas usuwania grupy, takiej jak „gnome”, ignoruje to powód instalacji pakietów w grupie, ponieważ działa tak, jakby każdy pakiet w grupie był wymieniony osobno. Powód instalacji jest nadal szanowany.

Powyższe może czasami odmówić uruchomienia podczas usuwania grupy zawierającej w inny sposób potrzebne pakiety. W takim przypadku spróbuj:

# pacman -Rsu package_name

Aby usunąć pakiet, jego zależności i wszystkie pakiety zależne od pakietu docelowego:

Warning: Ta operacja jest rekurencyjna i należy jej używać ostrożnie, ponieważ może usunąć wiele potencjalnie potrzebnych pakietów.
# pacman -Rsc package_name

Aby usunąć pakiet, który jest wymagany przez inny pakiet, bez usuwania pakietu zależnego:

Warning: Poniższa operacja może spowodować uszkodzenie systemu i należy jej unikać. Zobacz System maintenance#Avoid certain pacman commands.
# pacman -Rdd package_name

Pacman zapisuje ważne pliki konfiguracyjne podczas usuwania niektórych aplikacji i nazywa je rozszerzeniem: .pacsave. Aby zapobiec tworzeniu tych plików kopii zapasowej, użyj opcji -n :

# pacman -Rn package_name
Note: Pacman nie usunie konfiguracji, które sama tworzy aplikacja (na przykład "dotfiles" w katalogu domowym).

Aktualizacja pakietów

Warning:
  • Oczekuje się, że użytkownicy będą postępować zgodnie ze wskazówkami w sekcji System maintenance#Upgrading the system, aby regularnie aktualizować swoje systemy i nie uruchamiać na ślepo następującego polecenia.

Pacman może zaktualizować wszystkie pakiety w systemie za pomocą tylko jednej komendy. Może to zająć trochę czasu, w zależności od aktualnego stanu systemu. Poniższe polecenie synchronizuje bazy danych repozytoriów i aktualizuje pakiety systemu, z wyłączeniem pakietów „lokalnych”, których nie ma w skonfigurowanych repozytoriach:

# pacman -Syu

Odpytywanie baz danych pakietów

Pacman wysyła zapytanie do lokalnej bazy danych pakietów z flagą -Q, bazy danych synchronizacji z flagą -S i bazy danych plików z flagą -F. Zobacz pacman -Q --help, pacman -S --help i pacman -F --help dla odpowiednich podopcji każdej flagi.

Pacman może wyszukiwać pakiety w bazie danych, przeszukując zarówno ich nazwy jak i opisy:

$ pacman -Ss string1 string2 ...

Czasami wbudowane ERE (Rozszerzone Wyrażenia Regularne) -s może powodować wiele niepożądanych wyników, więc musi być ograniczone tylko do nazwy pakietu; nie opis ani żadne inne pole:

$ pacman -Ss '^vim-'

Aby wyszukać już zainstalowane pakiety:

$ pacman -Qs string1 string2 ...

Aby wyszukać nazwy plików pakietów w pakietach zdalnych:

$ pacman -F string1 string2 ...

Aby wyświetlić obszerne informacje o danym pakiecie:

$ pacman -Si package_name

W przypadku pakietów instalowanych lokalnie:

$ pacman -Qi package_name

Przekazanie dwóch flag -i spowoduje również wyświetlenie listy plików kopii zapasowych i stanów ich modyfikacji:

$ pacman -Qii package_name

Aby pobrać listę plików zainstalowanych przez pakiet:

$ pacman -Ql package_name

Aby pobrać listę plików zainstalowanych przez pakiet zdalny:

$ pacman -Fl package_name

Aby zweryfikować obecność plików zainstalowanych przez pakiet:

$ pacman -Qk package_name

Dwukrotne przekazanie k spowoduje dokładniejsze sprawdzenie.

Aby móc sprawdzić bazę danych, aby dowiedzieć się, czy należy dany plik w systemie plików:

$ pacman -Qo /path/to/file_name

Aby wysłać zapytanie do bazy danych, aby dowiedzieć się, do którego zdalnego pakietu należy plik:

$ pacman -F /path/to/file_name

Aby wyświetlić wszystkie pakiety, które nie są już wymagane jako zależności (sieroty):

$ pacman -Qdt
Tip: Add the above command to a pacman post-transaction hook to be notified if a transaction orphaned a package. This can be useful for being notified when a package has been dropped from a repository, since any dropped package will also be orphaned on a local installation (unless it was explicitly installed). To avoid any "failed to execute command" errors when no orphans are found, use the following command for Exec in your hook: /usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'"

Aby wyświetlić listę wszystkich pakietów zainstalowanych jawnie i niewymaganych jako zależności:

$ pacman -Qet

Zobacz Pacman/Tips and tricks, aby uzyskać więcej przykładów.

Pactree

Note: pactree(8) is not part of the pacman package anymore. Instead it can be found in pacman-contrib.

Aby wyświetlić drzewo zależności pakietu:

$ pactree package_name

Aby wyświetlić zależne drzewo pakietu, należy przekazać flagę reverse -r do pactree lub użyć whoneeds z pkgtoolsAUR

Struktura bazy danych

Bazy danych pacmana zwykle znajdują się w /var/lib/pacman/sync. Dla każdego repozytorium określonego w /etc/pacman.conf znajdzie się tam odpowiedni plik bazy danych. Pliki bazy danych to spakowane archiwa tar gzip zawierające jeden katalog na każdy pakiet, na przykład dla pakietu, which:

$ tree which-2.21-5
which-2.21-5
|-- desc

Plik desc zawiera metadane, takie jak opis pakietu, zależności, rozmiar pliku i skrót MD5.

Czyszczenie pamięci podręcznej pakietów

Pacman przechowuje pobrane pakiety w /var/cache/pacman/pkg/ i nie usuwa automatycznie starych lub odinstalowanych wersji. Ma to pewne zalety:

  1. Pozwala na obniżenie wersji pakietu bez konieczności odzyskiwania poprzedniej wersji za pomocą innych środków, takich jak Arch Linux Archive.
  2. Odinstalowany pakiet można łatwo ponownie zainstalować bezpośrednio z katalogu pamięci podręcznej, bez konieczności ponownego pobierania z repozytorium.

Jednak konieczne jest okresowe czyszczenie pamięci podręcznej, aby zapobiec nieskończonemu wzrostowi rozmiaru katalogu.

Skrypt paccache(8), dostarczony w pakiecie pacman-contrib, domyślnie usuwa wszystkie buforowane wersje zainstalowanych i odinstalowanych pakietów, z wyjątkiem ostatnich trzech:

# paccache -r

Enable and start paccache.timer to discard unused packages weekly.

Tip: You can create a hook to run this automatically after every pacman transaction, install pacman-cleanup-hookAUR and see other examples

Możesz także określić, ile ostatnich wersji chcesz zachować. Aby zachować tylko jedną poprzednią wersję, użyj:

# paccache -rk1

Dodaj przełącznik -u/--uninstalled, aby ograniczyć działanie paccache do odinstalowanych pakietów. Na przykład, aby usunąć wszystkie buforowane wersje odinstalowanych pakietów, użyj następującego:

# paccache -ruk0

Zobacz paccache -h, aby uzyskać więcej opcji.

Pacman ma również kilka wbudowanych opcji czyszczenia pamięci podręcznej i pozostałych plików bazy danych z repozytoriów, które nie są już wymienione w pliku konfiguracyjnym /etc/pacman.conf. Jednak pacman nie oferuje możliwości zachowania kilku poprzednich wersji i dlatego jest bardziej agresywny niż domyślne opcje paccache.

Aby usunąć wszystkie pakiety z pamięci podręcznej, które nie są obecnie zainstalowane, oraz nieużywaną bazę danych synchronizacji, wykonaj:

# pacman -Sc

Aby usunąć wszystkie pliki z pamięci podręcznej, użyj dwukrotnie czystego przełącznika, jest to najbardziej agresywne podejście i nie pozostawi nic w katalogu pamięci podręcznej:

# pacman -Scc
Warning: Należy unikać usuwania z pamięci podręcznej wszystkich poprzednich wersji zainstalowanych pakietów i wszystkich odinstalowanych pakietów, chyba że desperacko potrzebujemy zwolnić trochę miejsca na dysku. Zapobiegnie to obniżeniu lub ponownej instalacji pakietów bez ich ponownego pobierania.

pkgcachecleanAUR and pacleanerAUR are two further alternatives to clean the cache.

Dodatkowe polecenia

Pobierz pakiet bez instalowania:

# pacman -Sw package_name

Zainstaluj pakiet „lokalny”, który nie pochodzi ze zdalnego repozytorium (np. pakiet pochodzi z AUR):

# pacman -U /path/to/package/package_name-version.pkg.tar.zst

Aby zachować kopię lokalnego pakietu w pamięci podręcznej pacman, użyj:

# pacman -U file:///path/to/package/package_name-version.pkg.tar.zst

Zainstaluj pakiet „zdalny” (nie z repozytorium określonego w plikach konfiguracyjnych „pacmana”):

# pacman -U http://www.example.com/repo/example.pkg.tar.zst

To inhibit the -S, -U and -R actions, -p can be used.

Pacman zawsze wyświetla listę pakietów do zainstalowania lub usunięcia i prosi o pozwolenie przed podjęciem działań.

Powód instalacji

Baza danych pacman dzieli zainstalowane pakiety na dwie grupy, w zależności od powodu instalacji:

  • zainstalowane-jawnie: pakiety, które zostały dosłownie przekazane do ogólnego polecenia pacman -S lub -U;
  • zależności: pakiety, które pomimo tego, że nigdy (ogólnie) nie zostały przekazane do polecenia instalacji pacmana, zostały zainstalowane niejawnie, ponieważ były wymagane przez pakiety zainstalowane jawnie.

Podczas instalacji pakietu można wymusić „zależność” jego powodu instalacji z:

# pacman -S --asdeps package_name

Polecenie jest zwykle używane, ponieważ pakiety zainstalowane jawnie mogą oferować pakiety opcjonalne, zwykle dla nieistotnych funkcji, co do których użytkownik może według własnego uznania.

Tip: Installing optional dependencies with --asdeps will ensure that, if you remove orphans, pacman will also remove optional packages set this way.

Jednak podczas ponownej instalacji pakietu domyślnie zachowywany jest bieżący powód instalacji.

The list of explicitly-installed packages can be shown with pacman -Qe, while the complementary list of dependencies can be shown with pacman -Qd.

Aby zmienić powód instalacji już zainstalowanego pakietu, wykonaj:

# pacman -D --asdeps package_name

Użyj --asexplicit, aby wykonać odwrotną operację.

Note: Używanie opcji --asdeps i --asexplicit podczas aktualizacji, takich jak pacman pacman -Syu package_name --asdeps jest odradzane. Zmieniłoby to przyczynę instalacji nie tylko instalowanego pakietu, ale także aktualizowanych pakietów.

Wyszukaj pakiet zawierający określony plik

Merge-arrows-2.pngThis article or section is a candidate for merging with pacman/Tips and tricks.Merge-arrows-2.png

Notes: Looking at #Querying package databases this section duplicates but expands what is already covered there. Either this should be moved inside the previous section or merged as a pacman tip in the dedicated article, which is already linked (Discuss in Talk:Pacman (Polski))

Zsynchronizuj bazę danych plików:

# pacman -Fy

Wyszukaj pakiet zawierający plik, np.:

$ pacman -F pacman
core/pacman 5.2.1-1 (base base-devel) [installed]
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.43-1
    usr/lib/xscreensaver/pacman
Tip: Możesz ustawić zadanie cron lub systemd timer, aby regularnie synchronizować bazę danych plików.

Aby uzyskać zaawansowane funkcje, zainstaluj plik pkgfile, który korzysta z oddzielnej bazy danych ze wszystkimi plikami i powiązanymi z nimi pakietami.

Co się dzieje podczas instalacji/aktualizacji/usuwania pakietu?

Po pomyślnym przebiegu transakcji przepływ pracy obejmuje pięć etapów wysokiego poziomu oraz punkty zaczepienia przed/po transakcji:

  1. Zainicjuj transakcję, jeśli nie ma blokady bazy danych
  2. Wybierz, które pakiety zostaną dodane lub usunięte w transakcji
  3. Przygotuj transakcję w oparciu o flagi, wykonując testy poprawności w bazach danych synchronizacji, pakietach i ich zależnościach
  4. Zatwierdź transakcję:
    1. W stosownych przypadkach pobierz pakiety (_alpm_sync_load)
    2. Jeśli mają zastosowanie istniejące wcześniej hooki pacman PreTransaction, są one wykonywane.
    3. Usuwane są pakiety, które mają zostać zastąpione, są w konflikcie lub są wyraźnie przeznaczone do usunięcia
    4. Jeśli są pakiety do dodania, każdy pakiet jest zatwierdzony
      1. If the package has an install script, its pre_install function is executed (or pre_upgrade or pre_remove in the case of an upgraded or removed package).
      2. Pacman deletes all the files from a pre-existing version of the package (in the case of an upgraded or removed package). However, files that were marked as configuration files in the package are kept (see /Pacnew and Pacsave).
      3. Pacman rozpakowuje pakiet i zrzuca swoje pliki do systemu plików (w przypadku zainstalowanego lub zaktualizowanego pakietu). Pliki, które zastąpiłyby zachowane i ręcznie zmodyfikowane pliki konfiguracyjne (patrz poprzedni krok), są przechowywane pod nową nazwą (.pacnew).
      4. If the package has an install script, its post_install function is executed (or post_upgrade or post_remove in the case of an upgraded or removed package).
    5. If pacman PostTransaction hooks that exist at the end of the transaction apply, they are executed.
  5. Release the transaction and transaction resource (i.e. database lock)

Konfiguracja

Ustawienia Pacmana znajdują się w /etc/pacman.conf: jest to miejsce, w którym użytkownik konfiguruje program, aby działał w żądany sposób. Szczegółowe informacje o pliku konfiguracyjnym można znaleźć w pacman.conf(5).

Opcje ogólne

Opcje ogólne znajdują się w sekcji [options]. Przeczytaj pacman.conf(5) lub zajrzyj do domyślnego pliku pacman.conf, aby dowiedzieć się, co można tutaj zrobić.

Porównanie wersji przed aktualizacją

Aby zobaczyć stare i nowe wersje dostępnych pakietów, odkomentuj wiersz "VerbosePkgLists" w /etc/pacman.conf Wyjście pacman -Syu będzie wyglądać tak:

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB

Włączanie równoległego pobierania

Pacman 6.0 wprowadził opcję równoległego pobierania pakietów. ParallelDownloads w [options] musi być ustawiony na dodatnią liczbę całkowitą w /etc/pacman.conf, aby użyć tej funkcji 5). W przeciwnym razie pakiety będą pobierane sekwencyjnie, jeśli ta opcja nie jest ustawiona.

Pomiń pakiet od aktualizacji

Warning: Zachowaj ostrożność w pomijaniu pakietów, ponieważ częściowe aktualizacje nie są obsługiwane.

Aby konkretny pakiet został pominięty podczas upgrading[broken link: invalid section] systemu, dodaj tę linię w sekcji [options]:

IgnorePkg=linux

For multiple packages use a space-separated list, or use additional IgnorePkg lines. Also, glob patterns can be used. If you want to skip packages just once, you can also use the --ignore option on the command-line - this time with a comma-separated list.

It will still be possible to upgrade the ignored packages using pacman -S: in this case pacman will remind you that the packages have been included in an IgnorePkg statement.

Pomiń grupę pakietów przed aktualizacją

Warning: Zachowaj ostrożność w pomijaniu grup pakietów, ponieważ częściowe aktualizacje nie są obsługiwane.

Podobnie jak w przypadku pakietów, możliwe jest również pominięcie całej grupy pakietów:

IgnoreGroup=gnome

Pomiń aktualizację pliku

Wszystkie pliki wymienione z dyrektywą NoUpgrade nigdy nie zostaną dotknięte podczas instalacji/uaktualnienia pakietu, a nowe pliki zostaną zainstalowane z rozszerzeniem .pacnew.

NoUpgrade=path/to/file

Wiele plików można określić w następujący sposób:

NoUpgrade=path/to/file1 path/to/file2
Note: Ścieżka odnosi się do plików w archiwum pakietów. Dlatego nie uwzględniaj wiodącego ukośnika.

Pomiń instalację plików w systemie

Aby zawsze pomijać instalację określonych katalogów, wymień je w NoExtract. Na przykład, aby uniknąć instalacji jednostek systemd, użyj tego:

NoExtract=usr/lib/systemd/system/*

Późniejsze reguły zastępują poprzednie i możesz je zanegować, dołączając !.

Tip: Pacman wyświetla komunikaty ostrzegawcze o brakujących lokalizacjach podczas aktualizacji pakietu, dla którego lokalizacje zostały wyczyszczone przez localpurge lub bleachbit. Komentowanie opcji CheckSpace w pacman.conf blokuje takie ostrzeżenia, ale należy wziąć pod uwagę, że funkcja sprawdzania miejsca będzie wyłączona dla wszystkich pakietów.

Zachowaj kilka plików konfiguracyjnych

Jeśli masz kilka plików konfiguracyjnych (np. konfigurację główną i konfigurację z włączonym repozytorium testing) i musisz dzielić opcje pomiędzy konfiguracjami, możesz użyć opcji Include zadeklarowanej w plikach konfiguracyjnych, np.:

Include = /path/to/common/settings

gdzie /path/to/common/settings ustawień zawiera te same opcje dla obu konfiguracji.

Hooks

Pacman może uruchamiać hooki przed i po transakcji z katalogu /usr/share/libalpm/hooks/; więcej katalogów można określić za pomocą opcji HookDir w pacman.conf, która domyślnie to /etc/pacman.d/hooks. Nazwy plików przechwytujących muszą mieć przyrostek .hook. Haki Pacmana nie są interaktywne.

Haki Pacman są używane na przykład w połączeniu z systemd-sysusers i systemd-tmpfiles do automatycznego tworzenia użytkowników systemu i plików podczas instalacji pakietów. Na przykład tomcat8 określa, że chce użytkownika systemowego o nazwie tomcat8 i określonych katalogów należących do tego użytkownika. Pacman przechwytuje systemd-sysusers.hook i systemd-tmpfiles.hook wywołuje systemd-sysusers i systemd-tmpfiles, gdy pacman stwierdzi, że tomcat8 zawiera pliki określające użytkowników i pliki tmp.

Więcej informacji o hakach alpm znajdziesz w alpm-hooks(5).

Repozytoria i mirrory

Oprócz specjalnej sekcji [options[broken link: invalid section]], każda inna [section] w pacman.conf definiuje repozytorium pakietów, które ma być używane. Repozytorium to logiczny zbiór pakietów, które są fizycznie przechowywane na jednym lub kilku serwerach: z tego powodu każdy serwer jest nazywany mirrorem repozytorium.

Repozytoria rozróżnia się na oficjalne i nieoficjalne. Kolejność repozytoriów w pliku konfiguracyjnym ma znaczenie; repozytoria wymienione jako pierwsze będą miały pierwszeństwo przed tymi wymienionymi później w pliku, gdy pakiety w dwóch repozytoriach mają identyczne nazwy, niezależnie od numeru wersji. Aby korzystać z repozytorium po jego dodaniu, musisz najpierw upgrade[broken link: invalid section] cały system.

Każda sekcja repozytorium umożliwia zdefiniowanie listy swoich serwerów lustrzanych bezpośrednio lub w dedykowanym pliku zewnętrznym poprzez dyrektywę Include; na przykład serwery lustrzane oficjalnych repozytoriów znajdują się w /etc/pacman.d/mirrorlist. Zobacz artykuł Mirrors, aby dowiedzieć się jak skonfigurować mirror.

Katalog cache pakietów

Pacman przechowuje pobrane pliki pakietów w pamięci podręcznej, w katalogu oznaczonym CacheDir w sekcji [options[broken link: invalid section]] pliku pacman.conf (domyślnie/var/cache/pacman/pkg/, jeśli nie jest ustawiony).

Katalog Cachej może z czasem się rozrastać, nawet przy zachowaniu tylko najświeższych wersji zainstalowanych pakietów.

Jeśli chcesz przenieść ten katalog w bardziej dogodne miejsce, wykonaj jedną z następujących czynności:

  • Ustaw opcję CacheDir w pacman.conf na nowy katalog. Pamiętaj o zachowaniu końcowego ukośnika. To jest zalecane rozwiązanie.
  • Zamontuj dedykowaną partycję lub np. Btrfs subvolume w /var/cache/pacman/pkg/.
  • Zamontuj wybrany katalog w /var/cache/pacman/pkg/.
Warning: Nie dowiązuj symbolicznie katalogu /var/cache/pacman/pkg/ do innej lokalizacji. Spowoduje to, że pacman będzie się źle zachowywał, zwłaszcza gdy pacman spróbuje się zaktualizować.

Package security

Pacman obsługuje podpisy pakietów, które dodają dodatkową warstwę bezpieczeństwa do pakietów. Domyślna konfiguracja, SigLevel = Required DatabaseOptional, umożliwia weryfikację podpisu dla wszystkich pakietów na poziomie globalnym. Można to zastąpić wierszami SigLevel dla poszczególnych repozytorium. Aby uzyskać więcej informacji na temat podpisywania pakietów i weryfikacji podpisów, spójrz na pacman-key

Rozwiązywanie problemów

"Failed to commit transaction (conflicting files)" error

Jeśli zobaczysz następujący błąd: [1]

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.

Dzieje się tak, ponieważ pacman wykrył konflikt plików i zgodnie z projektem nie nadpisze plików. Jest to zgodne z projektem, a nie wada.

The problem is usually trivial to solve. A safe way is to first check if another package owns the file (pacman -Qo /path/to/file). If the file is owned by another package, file a bug report. If the file is not owned by another package, rename the file which 'exists in filesystem' and re-issue the update command. If all goes well, the file may then be removed.

If you had installed a program manually without using pacman, for example through make install, you have to remove/uninstall this program with all of its files. See also Pacman tips#Identify files not owned by any package.

Every installed package provides a /var/lib/pacman/local/package-version/files file that contains metadata about this package. If this file gets corrupted, is empty or goes missing, it results in file exists in filesystem errors when trying to update the package. Such an error usually concerns only one package. Instead of manually renaming and later removing all the files that belong to the package in question, you may explicitly run pacman -S --overwrite glob package to force pacman to overwrite files that match glob.

Warning: Generally avoid using the --overwrite switch. See System maintenance#Avoid certain pacman commands.

"Failed to commit transaction (invalid or corrupted package)" error

Poszukaj plików .part (częściowo pobranych pakietów) w /var/cache/pacman/pkg/ i usuń je (często spowodowane użyciem niestandardowego XferCommand w pacman.conf).

# find /var/cache/pacman/pkg/ -iname "*.part" -delete

Ten sam błąd może się również pojawić, jeśli archlinux-keyring jest nieaktualny, co uniemożliwia pacmanowi weryfikację podpisów. Zobacz Pacman/Package signing#Upgrade system regularly, aby poznać poprawkę i sposoby jej uniknięcia w przyszłości.

"Failed to init transaction (unable to lock database)" error

Kiedy pacman zamierza zmienić bazę danych pakietów, na przykład zainstalować pakiet, tworzy plik blokady w /var/lib/pacman/db.lck. Zapobiega to jednoczesnej próbie zmiany bazy danych pakietów przez inną instancję pacmana.

Jeśli pacman zostanie przerwany podczas zmiany bazy danych, ten przestarzały plik blokady może pozostać. Jeśli masz pewność, że żadne instancje pacmana nie są uruchomione, usuń plik blokady:

# rm /var/lib/pacman/db.lck
Tip: Możesz uruchomić fuser fuser /var/lib/pacman/db.lck jako root, aby sprawdzić, czy jakiś proces nadal go używa.

Packages cannot be retrieved on installation

Ten błąd objawia się jako Not found in sync db, Target not found lub Failed retrieving file.

Po pierwsze, upewnij się, że pakiet rzeczywiście istnieje. Jeśli masz pewność, że pakiet istnieje, Twoja lista pakietów może być nieaktualna. Spróbuj uruchomić pacman -Syu, aby wymusić odświeżenie wszystkich list pakietów i aktualizację. Upewnij się również, że wybrane serwery lustrzane są aktualne, a repozytoria[broken link: invalid section] są poprawnie skonfigurowane.

Może się również zdarzyć, że repozytorium zawierające pakiet nie jest włączone w twoim systemie, np. pakiet może znajdować się w repozytorium multilib, ale multilib nie jest włączony w twoim pacman.conf.

Zobacz też FAQ#Why is there only a single version of each shared library in the official repositories?.

Pacman ulega awarii podczas aktualizacji

W przypadku awarii pacmana z błędem „zapisu do bazy danych” podczas usuwania pakietów, a ponowna instalacja lub aktualizacja pakietów nie powiedzie się, wykonaj następujące czynności:

  1. Uruchom komputer za pomocą nośnika instalacyjnego Arch. Najlepiej używać najnowszego nośnika, aby wersja pacmana była zgodna/była nowsza niż system.
  2. Zamontuj główny system plików systemu, np. mount /dev/sdaX /mnt jako root i sprawdź, czy w mount jest wystarczająca ilość miejsca za pomocą df -h
  3. Zamontuj również systemy plików proc, sys i dev: mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
  4. Jeśli system używa domyślnych lokalizacji baz danych i katalogów, możesz teraz zaktualizować systemową bazę danych pacman i zaktualizować ją przez pacman --sysroot /mnt -Syu jako root.
  5. Po aktualizacji, jeden ze sposobów, aby dokładnie sprawdzić, czy pakiety nie są uaktualnione, ale nadal są uszkodzone: find /mnt/usr/lib -size 0
  6. Po czym następuje ponowna instalacja wciąż uszkodzonego pakietu przez pacman --sysroot /mnt -S package.

pacman: command not found

Jeśli /var/cache/pacman/pkg jest dowiązaniem symbolicznym, pacman spróbuje zamiast tego utworzyć katalog, a tym samym usunie to dowiązanie symboliczne podczas samodzielnej aktualizacji. Spowoduje to niepowodzenie aktualizacji. W rezultacie brakuje /usr/bin/pacman i innej zawartości pakietu pacman.

Nigdy nie dowiązuj symbolicznie /var/cache/pacman/pkg, ponieważ jest kontrolowany przez pacmana. Zamiast tego użyj opcji CacheDir lub montowania powiązania; zobacz #Package cache directory[broken link: invalid section].

Jeśli już napotkałeś ten problem i zepsułeś system, możesz ręcznie wyodrębnić zawartość /usr z pakietu, aby przywrócić pacman, a następnie zainstalować go ponownie; zobacz FS#73306 i powiązany wątek na forum, aby uzyskać szczegółowe informacje.

Ręczna ponowna instalacja pacman

Korzystanie z pacman-static

pacman-staticAUR jest statycznie skompilowaną wersją pacmana, więc będzie mógł działać nawet wtedy, gdy biblioteki w systemie nie działają. Może się to również przydać, gdy przeprowadzono częściową aktualizację i pacman nie może już działać.

Przypięty komentarz i PKGBUILD umożliwiają bezpośrednie pobranie pliku binarnego, którego można użyć do ponownej instalacji pacmana lub aktualizacji całego systemu w przypadku aktualizacji częściowych.

Korzystanie z zewnętrznego pacmana

Jeśli nawet pacman-static nie działa, możliwe jest odzyskanie za pomocą zewnętrznego pacmana. Jedną z najłatwiejszych metod jest użycie archiso i po prostu użycie --sysroot lub --root do określenia punktu montowania. Zobacz Chroot#Using chroot, aby dowiedzieć się, jak zamontować niezbędne systemy plików wymagane przez --sysroot.

Poprzez ręczne wyodrębnianie

Warning: Przy użyciu tego podejścia niezwykle łatwo jest zepsuć system jeszcze gorzej. Użyj tego tylko w ostateczności, jeśli metoda z #Pacman crashes during an upgrade[broken link: invalid section] nie jest opcją.

Nawet jeśli pacman jest strasznie zepsuty, możesz go naprawić ręcznie, pobierając najnowsze pakiety i rozpakowując je we właściwych lokalizacjach. Wstępne kroki do wykonania to:

  1. Określ zależności pacman do zainstalowania
  2. Pobierz każdy pakiet z wybranego mirrora
  3. Wypakuj każdy pakiet do roota
  4. Zainstaluj ponownie te pakiety za pomocą pacman pacman -S --overwrite, aby odpowiednio zaktualizować bazę danych pakietów
  5. Wykonaj pełną aktualizację systemu

Jeśli masz pod ręką zdrowy system Arch, możesz zobaczyć pełną listę zależności z:

$ pacman -Q $(pactree -u pacman)

Ale w zależności od problemu może być konieczne zaktualizowanie tylko kilku z nich. Przykładem wyodrębniania pakietu jest

# tar -xvpwf package.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO

Zwróć uwagę na użycie flagi w dla trybu interaktywnego. Uruchamianie w trybie nieinteraktywnym jest bardzo ryzykowne, ponieważ możesz nadpisać ważny plik. Zadbaj również o wyodrębnienie pakietów we właściwej kolejności (tj. najpierw zależności). Ten post na forum zawiera przykład tego procesu, w którym uszkodzonych jest tylko kilka zależności od pacmana.

"Unable to find root device" error after rebooting

Najprawdopodobniej initramfs został uszkodzony podczas aktualizacji jądra (przyczyną może być niewłaściwe użycie opcji --overwrite w pacman). Istnieją dwie opcje; najpierw wypróbuj wpis Fallback.

Tip: In case you removed the Fallback entry, you can always press the Tab key when the boot loader menu shows up (for Syslinux) or e (for GRUB or systemd-boot), rename it initramfs-linux-fallback.img and press Enter or b (depending on your boot loader) to boot with the new parameters.

Po uruchomieniu systemu uruchom to polecenie (dla podstawowego jądra linux) z konsoli lub terminala, aby odbudować obraz initramfs:

# mkinitcpio -p linux

Jeśli to nie zadziała, z bieżącego wydania Arch (CD/DVD lub pamieci USB), zamontuj partycje root i boot odpowiednio do /mnt i /mnt/boot. Następnie wykonaj chroot za pomocą arch-chroot:

# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Note:
  • If you do not have a current release or if you only have some other "live" Linux distribution laying around, you can chroot using the old fashioned way. Obviously, there will be more typing than simply running the arch-chroot script.
  • If pacman fails with Could not resolve host, please check your internet connection.
  • If you cannot enter the arch-chroot or chroot environment but need to re-install packages you can use the command pacman --sysroot /mnt -Syu foo bar to use pacman on your root partition.

Ponowna instalacja jądra (pakietu linux) spowoduje automatyczne ponowne wygenerowanie obrazu initramfs za pomocą polecenia mkinitcpio -p linux. Nie ma potrzeby robienia tego osobno.

Następnie zalecane jest uruchomienie exit, umount /mnt/{boot,} i reboot.

"Warning: current locale is invalid; using default "C" locale" error

Jak mówi komunikat o błędzie, Twoje ustawienia regionalne nie są poprawnie skonfigurowane. Zobacz Locale.

Pacman nie uwzględnia ustawień proxy

Make sure that the relevant environment variables ($http_proxy, $ftp_proxy etc.) are set up. If you use pacman with sudo, you need to configure sudo to pass these environment variables to pacman. Also, ensure the configuration of dirmngr has honor-http-proxy in /etc/pacman.d/gnupg/dirmngr.conf to honor the proxy when refreshing the keys.

Jak ponownie zainstalować wszystkie pakiety, zachowując informacje o tym, czy coś zostało zainstalowane jawnie, czy jako zależność?

Aby ponownie zainstalować wszystkie pakiety natywne: pacman -Qnq | pacman -S - lub pacman -S $(pacman -Qnq) (opcja -S domyślnie zachowuje przyczynę instalacji).

Będziesz musiał ponownie zainstalować wszystkie obce pakiety, które można wyświetlić za pomocą pacman -Qmq

"Cannot open shared object file" error

Wygląda na to, że poprzednia transakcja pacman została usunięta lub uszkodzone biblioteki współdzielone potrzebne do samego pacmana.

Aby wyjść z tej sytuacji, musisz ręcznie rozpakować wymagane biblioteki do systemu plików. Najpierw znajdź pakiet zawierający pominiętą bibliotekę, a następnie zlokalizuj go w pamięci podręcznej pacmana (/var/cache/pacman/pkg/). Rozpakuj wymaganą bibliotekę współdzieloną do systemu plików. Umożliwi to uruchomienie pacmana.

Teraz musisz ponownie zainstalować[broken link: invalid section] uszkodzony pakiet. Zauważ, że musisz użyć flagi --overwrite, ponieważ właśnie rozpakowujesz pliki systemowe, a pacman o tym nie wie. Pacman poprawnie zastąpi nasz plik biblioteki współdzielonej jednym z pakietu.

To wszystko. Zaktualizuj resztę systemu.

Freeze of package downloads

Zgłoszono pewne problemy dotyczące problemów z siecią, które uniemożliwiają pacmanowi aktualizację/synchronizację repozytoriów. [2] [3] Podczas instalacji Arch Linux natywnie problemy te zostały rozwiązane przez zastąpienie domyślnego programu do pobierania plików pacman alternatywą (zobacz Improve pacman performance, aby uzyskać więcej informacji). Podczas instalowania Arch Linux jako systemu gościa w VirtualBox problem ten został również rozwiązany poprzez użycie interfejsu hosta zamiast NAT we właściwościach komputera.

Failed retrieving file 'core.db' from mirror

Jeśli otrzymasz ten komunikat o błędzie z poprawnymi serwerami lustrzanymi, spróbuj ustawić inny serwer nazw.

error: 'local-package.pkg.tar': permission denied

Jeśli chcesz zainstalować pakiet sshfs mount za pomocą pacman -U i pojawi się ten błąd, przenieś pakiet do katalogu lokalnego i spróbuj ponownie zainstalować.

error: could not determine cachedir mount point /var/cache/pacman/pkg

Podczas wykonywania np. pacman -Syu w środowisku chroot pojawia się błąd:

error: could not determine cachedir mount point /var/cache/pacman/pkg
error: failed to commit transaction (not enough free disk space)

Jest to często spowodowane tym, że katalog chroot nie jest punktem montowania w momencie wejścia do chroota. Zobacz notatkę w sekcji Zainstaluj Arch Linux z istniejącego systemu Install Arch Linux from existing Linux#Downloading basic tools dla rozwiązania i arch-chroot(8), aby uzyskać wyjaśnienie i przykład użycia montowania z wiązaniem, aby katalog chroot stał się punktem montowania. :

error: GPGME error: No data

Jeśli nie możesz zaktualizować pakietów i otrzymasz ten błąd, spróbuj rm -r /var/lib/pacman/sync/ przed próbą aktualizacji.