Aktualizacja oprogramowania OpenWrt (bez utraty zainstalowanych pakietów)

Zawartość

Czy to zainstalowałeś oprogramowanie OpenWrt od nowa, czy też zaktualizowałeś, to, mimo że zrobiłeś kopię zapasową ustawień, wszelkie doinstalowane pakiety nie zostały (nie zostaną) zachowane, przez co przywrócenie ustawień nie spowoduje, że wszystko będzie tak jak było. Na razie jest to normalne zachowanie z OpenWrt. W związku z tym należy pomyśleć, jak do tego podejść, by aktualizacja i przywrócenie ustawień przebiegła, tak jak oczekujemy, czyli razem z pakietami.

W związku z tym, przed aktualizacją routera należy wygenerować listę zainstalowanych pakietów, które będziemy musieli przywrócić (zainstalować) przed przywróceniem naszych ustawień z kopii zapasowej.

Instalacja czystego oprogramowanie OpenWrt to nie problem. Schody zaczynają się, jak chcemy zaktualizować obecnie zainstalowany do najnowszej dostępnej wersji. W tym wypadku mamy możliwość instalacji najnowszego oprogramowania wraz z zachowaniem ustawień (ale nie pakietów) lub też z przywróceniem ustawień domyślnych.

Osobiście zachęcam do instalacji (aktualizacji) bez zachowania ustawień oraz zacząć od zera. Wszystko z tego względu, gdyż jeżeli doinstalowaliśmy pakiet, chociażby ten opisany tutaj DNS over HTTPS, to po ponownym uruchomieniu nasz internet nie będzie działać, gdyż obecne ustawienia w routerze będą próbowały przekierować ruch przez pakiet, którego w systemie nie ma i wszystko zacznie się sypać.

A więc jak zrobić wszystko poprawnie? Otóż dokonamy tego w następujących krokach.

Jako że ostatnio udało mi się zamienić mój router ASUS RT-AC57U na bardzo potężny Linksys WRT3200ACM, chciałem przenieść wszystko to, co mam już ustawione na ASUS’ie na Linksys’a. Niestety, różnice w sprzęcie i plikach konfiguracyjnych powodują, że nie wszystko jest takie łatwe. Nie ma możliwości zrobienia kopii na jednym i przywróceniu (po wgraniu pakietów) na drugim. Rozwiązaniem jest zrobienie kopii na dwóch routerach i porównanie plików ze starego i pododawanie tego, czego brakuje do nowego. Mozolne rozwiązanie, ale również działa.

W obrębie tego samego urządzenia wszystko przebiegać będzie wg powyższego schematu.

Drobna uwaga.
Jeżeli używacie tylko czystego oprogramowania OpenWrt i nie dodajecie żadnych dodatkowych pakietów, to nie musicie się zagłębiać dalej w mój wpis. Wówczas instalujecie nowe oprogramowanie z zachowaniem bieżących ustawień lub po prostu przywracacie ustawienia z zachowanej kopii zapasowej i wszystko działa. Dalsze kroki są przede wszystkim dla osób, które wykorzystują OpenWrt w jego rozszerzonych możliwościach.

Zaczynamy.


Sprawdzone w wersji OpenWrt 21.02, 22.03 oraz 23.05

Mimo tego, że wersja 22.03 bazuje na Firewall4, poniższą metodą możemy z powodzeniem zaktualizować z 21.02.x do 22.03.x. Pakiet Firewall zostanie pominięty (wraz z innymi niekompatybilnymi pakietami) i zastąpiony przez obecny już Firewall4. Nie musisz się przejmować tym, że podczas przywracania pakietów otrzymasz informacje o błędach.

W związku ze zmianą pakietu kryptograficznego w wersji 23.05 z wolfssl na mbedtls, podczas aktualizacji z wersji 22.03 do 23.05 z przywracaniem pakietów z poprzedniej wersji zalecam wprowadzenie kilka zmian aby niepotrzebnie nie instalować tego pakietu w naszym systemie.

W pliku my_installed_packages, który wygenerujemy przed przystąpieniem do aktualizacji i którego kopię zapasową utworzymy na naszym komputerze, zalecam otworzenie go w Notatniku (lub innym tego typu programie) i wyszukanie wszelkich wpisów z wolfssl i usunięcie ich. Jeżeli jakiś pakiet będzie go potrzebował to i tak go zainstaluje automatycznie.

Instalujemy pakiety tak jak w poniższym opisie, po czym przywracamy konfigurację.

Jako, że każda duża aktualizacja wnosi sporo zmian, zalecam jednak na poświęcenie nieco czasu i ręczne zainstalowanie pakietów, które używamy, na świerzo wgramyn OpenWrt po czym na skorzystanie z przyrwócenia kopii zapasowej. Wówczas, aktualizacja z wersji 23.05.0 do kolejnych z tej serii, które zostaną wypuszczone w przyszłości, powinna być bezproblemowa zgodnie z opisem.


Kopia zapasowa obecnych ustawień

W pierwszej kolejności przechodzimy do panelu administracyjnego poprzez przeglądarkę internetową.

Tam wybieramy System > Backup / Flash firmware

OpenWrt - System Backup - Flash Firmware OpenWrt > System > Backup / Flash Firmware

W celu wykonania kopii zapasowej ustawień wystarczy w sekcji Kopii Zapasowej (Backup) kliknąć przycisk generowania archiwum (Generate archive).

OpenWrt - System Backup - Flash Firmware - Generate Archive OpenWrt > System > Backup / Flash Firmware > Generate Archive

Nim to jednak zrobimy, osobiście zalecam zmianę ustawień, w celu rozszerzenia zakresu kopii zapasowej o dodatkowe foldery. Jeżeli używaliście mojego poradnika m.in. jak dodać serwer VPN do waszego routera, w zakładce Configuration dodajemy dodatkowe foldery.

/etc/ssl/
/etc/wireguard/
/etc/config/
/root/

OpenWrt - System Backup - Flash Firmware - Configuration OpenWrt > System > Backup / Flash Firmware > Configuration

Mimo że domyślnie kopia zapasowa wykonuje kopię zmodyfikowanych plików w folderze /etc/config, osobiście preferuję posiadanie pełnej kopii tego folderu.

To co zdefiniowaliśmy na tym etapie, zachowywane jest domyślnie w pliku /etc/sysupgrade.conf podczas standardowej aktualizacji oprogramowania.

Dalej klikamy przycisk Zapisz (Save) i wracamy do zakładki Akcje (Actions) i generujemy nasze archiwum kopii zapasowej (Generate archive).


Wygenerowanie listy zainstalowanych pakietów

Mając już kopię zapasową ustawień, pora na wygenerowanie listy pakietów, które mamy zainstalowane w systemie. Zauważ, że w poprzednim kroku dodałem folder /root/ do włączenia w zakres kopii zapasowej ustawień. W tym folderze mam zapisany plik, który zawiera m.in. listę pakietów, którą zapiszemy za chwilę.

W przypadku, gdy przenosimy ustawienia z jednego routera do drugiego, warto sobie tę listę skopiować i zapisać, o czym również napiszę.

A więc, aby wygenerować listę zainstalowanych pakietów, wykonujemy komendę w terminalu SSH:

opkg list-installed > /root/my_installed_packages

Warto również zapisać tę listę na komputerze lokalnym.

Nie będę nie tu rozpisywał jak to zrobić różnymi metodami (inna dla innego systemu operacyjnego), gdyż jest to stratą czasu.

Owy plik, który potrzebujecie, będzie zapisany w świeżo wygenerowanej kopi zapasowej, z pierwszego kroku. Przejdźcie jeden krok wstecz i gotowe. Wystarczy rozpakować wasz backup przy pomocy Keka (dla macOS) lub 7Zip (dla Windows) i poszukać go w folderze /root/. Proste!

Możemy również wykonać polecenie:

cat /root/my_installed_packages

I metodą kopiuj/wklej, skopiować zawartość do pliku na naszym komputerze.


Aktualizacja oprogramowania OpenWrt z przywróceniem ustawień domyślnych

Na tym etapie nie będę rozpisywał się, jak zainstalować oprogramowanie OpenWrt na waszym routerze, gdyż to zależy od sprzętu, jaki używacie (odsyłam tutaj). Obstawiam, że wasz router ma już zainstalowane oprogramowanie OpenWrt - czy to czyste, czy też w innej wersji, którą będziecie chcieli zaktualizować.

Aktualizacji oprogramowania dokonujemy z poziomu System > Backup / Flash firmware, w sekcji Flash new firmware image.

OpenWrt - System Backup - Flash Firmware OpenWrt > System > Backup / Flash Firmware

Oczywiście wybieramy oprogramowanie przygotowane dla naszej wersji routera.

Wgrywamy przycisk do naszego routera i na odpowiednim kroku wybieramy CZY chcemy, czy też nie, zachować ustawienia naszego routera (Keep settings and retain the current configuration). Osobiście preferuje ich NIE zachowywać, gdyż w moim przypadku, z ustawionym DoH, nie będzie działać mój DNS, przez co nie będę mógł wykonać następnych kroków.

OpenWrt - System Backup - Flash Firmware - Uploading file OpenWrt > System > Backup / Flash Firmware > Uploading file

OpenWrt - System Backup - Flash Firmware - flash image OpenWrt > System > Backup / Flash Firmware > flash image

Możecie poeksperymentować, zachowując ustawienia i przywracając pakiety (następny krok), pamiętając jednak, że po przywróceniu poprzednio zainstalowanych pakietów, możliwe będzie, że będziecie musieli przywrócić i tak kopię zapasową.


Przywrócenie pakietów z poprzednio wygenerowanej listy

Upewniając się, że posiadamy połączenie z internetem (domyślnie musimy to zrobić na kablu, gdyż WiFi z reguły jest wyłączone), przechodzimy do naszego routera za pomocą terminala SSH:

ssh root@192.168.1.1 -p 22

W pierwszej kolejności zaleciłbym wykonanie aktualizacji pakietów, które aktualnie znajdują w systemie, niż weźmiemy nie za przywracanie. Dokonujemy tego za pomocą komendy:

opkg update; opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

W niektórych przypadkach powyższa komenda wyświetli błąd pobierania (Failed to download) lub też zwróci informację, że nie mamy połączenia z internetem (Check your network settings and connectivity).

Wówczas należy wykonać komendę: opkg update osobno, zainstalować najnowszą wersję wget za pomocą opkg install wget oraz pobrać najnowsze certyfikaty CA wget --no-check-certificate -O /etc/ssl/certs/ca-certificates.crt http://curl.se/ca/cacert.pem.

Wówczas powtarzając powyższą komendę wszystko powinno zacząć działać.

Pora na przywrócenie pakietów.

Jeżeli zaczynamy wszystko od zera, należy wygenerować plik my_installed_packages

touch /root/my_installed_packages

Następnie przechodzimy do jego edycji.

vim /root/my_installed_packages

Klikając klawisz “i” wchodzimy w tryb edycji. Teraz, za pomocą Kopiuj/Wklej przenosimy zawartość naszego pliku z kopii zapasowej (lub też w pliku do którego zapisaliśmy zawartość my_installed_packages z poprzednich kroków). Po pomyślnym wklejeniu zawartości klikamy przycisk Esc a następnie wykonujemy “:w” w celu zapisania zawartości, oraz “:q” w celu opuszczenia edycji.

I tak mamy wszystko gotowe na przywrócenie pakietów. Poniższa komenda porówna, to co jest już w naszym systemie z tym, co mamy w naszym pliku i zainstaluje, to co brakuje. Jeżeli w liście naszych pakietów znajdzie się jakiś, który jest niekompatybilny z aktualnym oprogramowaniem OpenWrt, zostanie on automatycznie pominięty.

opkg update && opkg list-installed | cut -f 1 -d ' ' | sort -u > /tmp/currentpkg && cat /root/my_installed_packages | cut -f 1 -d ' ' | sort -u > /tmp/oldpkg && grep -v -F -x -f /tmp/currentpkg /tmp/oldpkg > /tmp/inst && opkg install $(cat /tmp/inst | sort -u) && rm /tmp/currentpkg /tmp/oldpkg /tmp/inst

Przywrócenie ustawień z kopii zapasowej

Ostatnim krokiem będzie przywrócenie naszych ustawień z zapisanej kopii zapasowej.

OpenWrt - System Backup - Flash Firmware - firmware restore OpenWrt > System > Backup / Flash Firmware > firmware restore

Ponownie przechodzimy do System > Backup / Flash firmware i z pozycji przywracanie (Restore) wybieramy Upload archive, gdzie wskazujemy nasz plika zapisany na naszym komputerze, po czym potwierdzamy wszystko, gdy zostaniemy zapytani, czy zastosować zmiany (Apply backup?) przyciskiem Continue.

Uruchamiamy ponownie router (o ile nie nastąpi to po przywróceniu ustawień) i sprawdzamy wszystko czy działa.

Takim sposobem, na 99% wszystko powinno działać. Zawsze istnieje szansa, że coś nie pójdzie, tak jak trzeba. Jak coś, dajcie znać w komentarzach.


Credits: forum.openwrt.org/t/how-to-keep-packages-settings-after-upgrading/38998

Komentarze
Kategorie