Arch Linux jest często chwalony za nowatorskie oprogramowanie i model kroczących wydań. Omawiamy te cechy bardziej szczegółowo w naszym artykule porównującym Arch Linuksa i Manjaro. Oprócz tych pochwał, Arch Linux ma również reputację systemu niestabilnego. Reputacja ta wynika z nieprzewidywalnej natury najnowocześniejszego oprogramowania. Najnowsze oprogramowanie od deweloperów może zawierać błędy, które nie były widoczne podczas wstępnych testów. W rezultacie zawsze istnieje ryzyko, że aktualizacja za pomocą menedżera pakietów, pacman
, może przynieść nieoczekiwane rezultaty. Mogą one obejmować konkretny element oprogramowania, który nie działa poprawnie (lub w ogóle) lub nawet wiele aplikacji lub środowisk Desktop nie działa już zgodnie z oczekiwaniami.
Regularne tworzenie kopii zapasowych systemu GNU/Linux jest najlepszym zabezpieczeniem, aby złagodzić ból głowy, który może to spowodować. Nie brakuje rozwiązań do tworzenia kopii zapasowych dla Linuksa; niektóre z opcji tworzenia kopii zapasowych obejmują dd, BackupPC, rsync, Fsarchiver , rsnapshot. Jeśli posiadasz regularne rozwiązanie do tworzenia kopii zapasowych, może być pocieszające wiedzieć, że możesz przywrócić dane z kopii zapasowej w przypadku, gdy pacman
aktualizacja spowodowała problemy, ale byłoby idealnie, gdybyś nie musiał tego robić. W tym artykule pokażemy jak cofnąć pacman
aktualizacje w Arch Linuksie. Istnieją dwa sposoby aby to osiągnąć. Jeden sposób to użycie pacman cache
; drugi to użycie Arch Linux Archive
. Omówimy obie metody.
W tym tutorialu nauczysz się:
- Jak cofnąć aktualizacje Arch Linuksa używając pacman cache
- Jak cofnąć aktualizacje Arch Linuksa używając Arch Linux Archive
Wymagania sprzętowe i stosowane konwencje
Kategoria | Wymagania, konwencje lub używane wersje oprogramowania |
---|---|
System | Arch Linux |
Oprogramowanie | pacman |
Inne | Przywilejowany dostęp do systemu Linux jako root lub poprzez polecenie sudo . |
Zastrzeżenia | # – wymaga, aby dane polecenia linuksowe były wykonywane z uprawnieniami roota albo bezpośrednio jako użytkownik root, albo przez użycie polecenia sudo $ – wymaga, aby dane polecenia linuksowe były wykonywane jako zwykły użytkownik niebędącyuprzywilejowany użytkownik |
Jak cofnąć aktualizacje Arch Linuksa używając pacman cache
Za każdym razem, gdy instalujesz lub aktualizujesz pakiet pacman
zapisuje ten pakiet w /var/cache/pacman/pkg/
pacman
pozwala również na ręczne uaktualnienie pakietu poprzez flagę -U
. Jak się okazuje, ta metoda aktualizacji może być również użyta do zainstalowania starszej wersji pakietu, efektywnie obniżając jego poziom.
Obniżanie poziomu pojedynczego pakietu
Załóżmy, że właśnie zaktualizowałeś swój system poprzez komendę $ sudo pacman -Syu
, a następnie otworzyłeś firefox
, aby przeglądać strony internetowe, tylko po to, aby zdać sobie sprawę, że teraz zawiesza się, podczas gdy nigdy wcześniej tego nie robił. Możesz łatwo obniżyć firefox
do poprzedniej wersji, którą zainstalowałeś za pomocą pacman cache.
Po pierwsze, sprawdź pakiety firefox
wymienione w /var/cache/pacman/pkg/
$ ls /var/cache/pacman/pkg/firefox*
Powinieneś zobaczyć najnowszą wersję, do której właśnie się zaktualizowałeś i wszystkie poprzednie wersje, które miałeś zainstalowane. W naszym przykładzie, to jest wyjście, które otrzymujemy.
/var/cache/pacman/pkg/firefox-81.0.1-1-x86_64.pkg.tar.zst/var/cache/pacman/pkg/firefox-83.0-2-x86_64.pkg.tar.zst
Wiemy, że zaktualizowaliśmy wersję 81.0.1-1
do 83.0-2
i podejrzewamy, że mogło to spowodować problem. Aby sprawdzić tę teorię, po prostu cofnij się do wersji 81.0.1-1
używając pacman cache z następującym poleceniem.
$ sudo pacman -U /var/cache/pacman/pkg/firefox-81.0.1-1-x86_64.pkg.tar.zst
APPLY NOW
Zobaczysz następujące dane wyjściowe.
loading packages...warning: downgrading package firefox (83.0-2 => 81.0.1-1)resolving dependencies...looking for conflicting packages...Packages (1) firefox-81.0.1-1Total Installed Size: 206.76 MiBNet Upgrade Size: -0.13 MiB:: Proceed with installation?
Po wpisaniu y
aby kontynuować będziesz miał zainstalowaną poprzednio wersję firefox
i możesz ją otworzyć, aby sprawdzić, czy problem został rozwiązany.
Zmniejszanie wartości wielu pakietów
Używając cache pacmana, możesz zmniejszyć wartość wielu pakietów przez podanie ich jako oddzielnych argumentów do pacman -U
. Na przykład
$ sudo pacman -U /var/cache/pacman/pkg/firefox-81.0.1-1-x86_64.pkg.tar.zst /var/cache/pacman/pkg/alsa-lib-1.2.3.2-1-x86_64.pkg.tar.zst /var/cache/pacman/pkg/adwaita-icon-theme-3.38.0-1-any.pkg.tar.zst
Podczas aktualizacji wielu pakietów korzystne może być przejście do katalogu /var/cache/pacman/pkg
tak, aby nie trzeba było wpisywać pełnej ścieżki do każdego pakietu, który chcemy zaktualizować.
$ cd /var/cache/pacman/pkg$ sudo pacman -U firefox-81.0.1-1-x86_64.pkg.tar.zst alsa-lib-1.2.3.2-1-x86_64.pkg.tar.zst adwaita-icon-theme-3.38.0-1-any.pkg.tar.zst
Najprawdopodobniej zaczynasz myśleć, że downgrade dużej ilości pakietów w ten sposób byłby co najmniej uciążliwy. Możesz znaleźć się w sytuacji gdzie podejrzewasz, że 20 różnych pakietów może potencjalnie powodować problem lub nie masz pojęcia jakie pakiety powodują problem i chcesz je wszystkie zdegradować. Te scenariusze mogą być lepiej dostosowane do użycia Arch Linux Archive
, ale zanim o tym porozmawiamy, zbadajmy kilka przykładów sytuacji, w których moglibyśmy zhakować razem rozwiązanie, aby użyć pacman cache
do tego celu, bez konieczności ręcznego wpisywania każdej nazwy pakietu.
Downgrading wielu powiązanych pakietów o podobnym schemacie nazewnictwa
Załóżmy, że właśnie uruchomiłeś swój komputer po tym jak nie używałeś go przez kilka tygodni. Przystąpiłeś do aktualizacji systemu poprzez komendę $ sudo pacman -Syu
i zauważyłeś, że wszystkie twoje aplikacje oparte na qt nie działają poprawnie, ale wszystkie inne aplikacje tak. Ponieważ wiele fundamentalnych pakietów qt i bibliotek ma qt
w nazwie pliku i jest bardzo mało prawdopodobne, że jakiekolwiek pakiety nie-qt mają to w nazwie pliku, jest możliwe cofnięcie tylko aktualizacji qt z ostatniej aktualizacji systemu.
Kiedy wykonujesz aktualizację używając pacman
zapis dokładnie co i kiedy aktualizowałeś jest przechowywany w /var/log/pacman.log
. Przykładowa linia poniżej.
upgraded qt5-xmlpatterns (5.15.1-1 -> 5.15.2-1)
Możemy użyć tego logu aby pomóc nam systematycznie aktualizować tylko pakiety qt poprzez szukanie linii w pacman.log
, które pokazują pakiety zawierające qt w nazwie pliku, które zostały zaktualizowane dzisiaj i wykonując na nich pewne manipulacje tekstowe, a następnie przekazując je jako argumenty do pacman -U
w pętli for. Poniższy przykład zakłada, że aktualna data to 30 listopada 2020 roku. Dostosuj datę odpowiednio, jeśli chcesz z niego skorzystać.
$ grep -a qt /var/log/pacman.log | grep 2020-11-30 > /tmp/qtupdates.txt$ awk '{print $4}' /tmp/qtupdates.txt > /tmp/lines1;awk '{print $5}' /tmp/qtupdates.txt | sed 's/(/-/g' > /tmp/lines2$ paste /tmp/lines1 /tmp/lines2 > /tmp/lines$ tr -d "" < /tmp/lines > /tmp/packages$ cd /var/cache/pacman/pkg/$ for i in $(cat /tmp/packages); do sudo pacman --noconfirm -U "$i"*; done
Downgrading all upgraded packages
Załóżmy, że właśnie uruchomiłeś swój komputer po tym, jak nie używałeś go przez kilka tygodni. Przystąpiłeś do aktualizacji systemu za pomocą polecenia $ sudo pacman -Syu
i wtedy zauważyłeś, że cały system jest nienormalnie wolny. Nie masz pojęcia, co aktualizacja pakietu może być przyczyną tego, co się dzieje i chcesz tymczasowo cofnąć wszystkie 512 z nich do poprzedniej wersji, które zostały zainstalowane.
To rzeczywiście nie wymaga więcej wysiłku niż w poprzednim przykładzie. Wykonujesz te same kroki, z wyjątkiem tego, że używasz pacman.log
pliku, aby uzyskać nazwy wszystkich pakietów, które zostały zaktualizowane dzisiaj, a nie tylko te, które pasują do określonego schematu nazewnictwa. Będzie to działać dla dowolnej liczby pakietów, zasadniczo funkcjonując jako duży przycisk cofania dla pacman
. Poniższy przykład zakłada, że aktualna data to 30 listopada 2020 roku. Dostosuj datę odpowiednio, jeśli chcesz z niego skorzystać.
$ grep -a upgraded /var/log/pacman.log| grep 2020-11-30 > /tmp/lastupdates.txt $ awk '{print $4}' /tmp/lastupdates.txt > /tmp/lines1;awk '{print $5}' /tmp/lastupdates.txt | sed 's/(/-/g' > /tmp/lines2$ paste /tmp/lines1 /tmp/lines2 > /tmp/lines$ tr -d "" < /tmp/lines > /tmp/packages$ cd /var/cache/pacman/pkg/$ for i in $(cat /tmp/packages); do sudo pacman --noconfirm -U "$i"*; done
Jak cofnąć aktualizacje Arch Linuksa używając Archiwum Arch Linuksa
Archiwum Arch Linuksa jest oficjalnym archiwum, które zawiera migawki poprzednich wersji pakietów. Są one zapisywane w katalogu packages na stronie. Istnieją dwie potencjalne korzyści z używania Arch Linux Archive
zamiast pacman cache
. Po pierwsze, pacman cache
zajmuje miejsce na lokalnym magazynie użytkownika. W związku z tym niektórzy ludzie zdecydują się regularnie czyścić pamięć podręczną. Po drugie, archiwum udostępnia wszystkie poprzednie wersje pakietów, nie tylko te, które zostały wcześniej zainstalowane.
Obniżanie poziomu pojedynczego pakietu
Aby obniżyć poziom pakietu do poprzedniej wersji, najpierw znajdujemy go w archiwum, a następnie używamy pacman
aby obniżyć poziom do tej konkretnej wersji. Jeśli ponownie przeanalizujemy nasz poprzedni przykład obniżenia wersji Firefox
, nie jesteśmy już ograniczeni do obniżenia wersji 83.0-2
do 81.0.1-1
. Jak widać w archiwum firefoxa, mamy również możliwość downgrade’u do następujących wersji pośrednich: 81.0.2-1, 82.0-1, 82.0.2-1, 82.0.3-1, 83.0-1
.
Aby dokonać downgrade’u do Firefox
wersji 83.0-1
za pomocą Arch Linux Archive
wprowadź następujące polecenie.
$ sudo pacman -U https://archive.archlinux.org/packages/f/firefox/firefox-83.0-1-x86_64.pkg.tar.zst
Downgrade wszystkich pakietów do poprzedniej daty
Inną opcją, którą masz dostępną podczas korzystania z Arch Linux Archive
jest przywrócenie wszystkich pakietów w systemie do „aktualnej” wersji, która istniała w repozytoriach w określonym czasie. Może to być przydatne jeśli napotykasz problemy z systemem Arch teraz, ale pamiętasz, że kilka tygodni temu nie miałeś takich problemów. W poniższym przykładzie dokonamy downgrade’u wszystkich pakietów do 10 listopada 2020 roku. Aby dokonać downgrade’u pakietów będziemy musieli poinformować pacmana, że chcemy użyć archiwalnego repo poprzez edycję /etc/pacman.d/mirrorlist
. Przed dokonaniem jakichkolwiek zmian w pliku, zalecane jest wykonanie jego kopii zapasowej, abyśmy mogli łatwo powrócić do aktualnego pliku mirrorlist
kiedy będziemy chcieli.
$ sudo cp /etc/pacman.d/mirrorlist{,.bak}
Następnie edytuj swój plik /etc/pacman.d/mirrorlist
za pomocą dowolnego edytora:
$ sudo vim /etc/pacman.d/mirrorlist
i zmień jego zawartość na następującą.
### Arch Linux repository mirrorlist### Created to downgrade to Nov 10th 2020Server=https://archive.archlinux.org/repos/2020/10/11/$repo/os/$arch
Teraz, aby sfinalizować aktualizację pakietów, wprowadź następujące polecenie.
$ sudo pacman -Syyuu
Podsumowanie
W tym artykule przeanalizowaliśmy dwie metody cofania lub obniżania wersji pakietów w Arch Linuksie, pacman cache
i Arch Linux Archive
. Obie metody są potężne i mają swoje zalety. Zastanówmy się krótko nad tymi zaletami, kończąc ten artykuł.
Główną zaletą korzystania z pacman cache
jest to, że nie wymaga połączenia z Internetem ani pobierania pakietów, ponieważ jest przechowywany lokalnie. W rezultacie, proces obniżania wersji jest szybszy. Kolejną zaletą jest to, że pacman cache
zawiera wersje pakietów, które już wcześniej zainstalowałeś w swoim systemie, dlatego najprawdopodobniej masz pojęcie jak dobrze one działały. Trzecią korzyścią jest to, że można obniżyć poziom wielu pakietów bez konieczności edytowania jakichkolwiek plików konfiguracyjnych.
Główną korzyścią z używania Arch Linux Archive
jest to, że można obniżyć poziom do dowolnej wersji pakietu, niezależnie od tego, czy kiedykolwiek wcześniej go zainstalowaliśmy. Kolejną zaletą jest to, że nie zajmuje on lokalnego miejsca w pamięci, więc jeśli masz mało miejsca i chciałbyś wyczyścić cache pacmana, wiesz, że jest inna realna opcja aktualizacji. Trzecią korzyścią jest to, że możesz łatwo obniżyć rangę każdego pakietu w twoim systemie tylko przez edycję jednego pliku konfiguracyjnego.