Aktualizacja oprogramowania OpenWrt (bez utraty zainstalowanych pakietów)

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 oraz OpenWrt 22.03.
Mimo tego, że wersja 22.03.z 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.
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
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
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
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
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 > 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 CAwget --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
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