1

Temat: Cloudbackup

Niektóre sprawy są tak oczywiste, że aż czasami trudno sobie uświadomić że należało by je opisać.

W wątku na forum został poruszony temat ponownej instalacji pakietów instalowanych przez użytkownika po wykonaniu aktualizacji systemu. Wszystko jest dobrze dopóki mamy faktycznie listę pakietów które chcemy odtworzyć. A teraz wyobraźmy sobie taki scenariusz: padł nam soft, zrobiliśmy błąd konfiguracyjny, wyłożył się router lub cokolwiek innego co zmusza nas do ponownej instalacji czystego obrazu. I co wtedy z konfiguracją i pakietami?

System OpenWrt umożliwia robienie backupów plików konfiguracyjnych ale co jak tego backupu nie mamy przy sobie? I tu przychodzi na myśl tytuł tego tematu czyli backup konfiguracji w chmurze. Chmura nie jest już chwytliwym słowem używanym do przerażenia zwykłego użytkownika, jest już rzeczą na porządku dziennym którą większość z nas używa i nawet już nie myśli o tym jako o "chmurze".

Więc - czy OpenWrt może mieć backup w chmurze? Na czystym obrazie - nie. Tak, jeżeli to sobie oprogramujemy. Jak to zrobić? Zanim przedstawię prawie-że-gotowe rozwiązanie to najpierw prześledźmy jak taki przykładowy mechanizm działa.

Na działającym systemie musimy mieć zainstalowane pakiety:
* ekooneplstat (mój pakiet do statystyk), będzie potrzebny do uzyskania unikalnego tokenu urządzenia, którym będzie się "identyfikował" w chmurze
* backupandrestore (mój pakiet do instalacji pakietów użytkownika który pojawił się ostatnio w moim repo, opis jest we wcześniejszym linku) - będzie służył do ponownej instalacji pakietów użytkownika
* curl, niezbędny do wysłania backupu do chmury (curla można zastąpić wbudowanym uclient-fetch, o ile jest w dość aktualnej wersji)
* openssl, niezbędny do zapewnienia sobie prywatności i zaszyfrowania backupu

Uruchamiamy skrypt który po kolei:
- robi backup listy pakietów zainstalowanych przez użytkownika
- robi backup plików konfiguracyjnych przy pomocy standardowego programu sysupgrade (polecam poradnik https://eko.one.pl/?p=openwrt-backup )
- szyfruje ten backup podanym przez nas hasłem (w backupie są hasła do wifi, certyfikaty do openvpn, klucze do wiregaurd itp. więc dobrze by było żeby to nie wyciekło. Ponadto nie wiadomo gdzie będą siedziały pliki i kto je będzie oglądał po drugiej stronie)
- wysyła backup do chmury przy pomocy curl'a

Jak  w praktyce takie coś wygląda? Przykładowa sesja z backupowaniem konfiguracji.

root@OpenWrt:~# cloudbackup.sh 
Podaj hasło do backupu
root@OpenWrt:~# 

Nie podaliśmy hasła i nic nie zrobi. Więc trzeba podać jakieś skomplikowane:

root@OpenWrt:~#  cloudbackup.sh jas1malGOSI@
Sat Aug 26 16:28:37 CEST 2023 upgrade: Saving config files...
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
Backup został utworzony
root@OpenWrt:~# 

Backup został utworzony, zaszyfrowany określonym algorytmem (akurat u mnie chacha20) i wysłany do chmury.

Proste i szybkie. I teraz - tracimy konfig, instalujemy system na czysto i nie mamy nic. Jak odzyskać konfigurację? Musimy mieć w obrazie (lub zainstalować) elementy podane powyżej, a później po prostu uruchamiamy skrypt który odczyta nam z chmury backup i zaktualizuje system:

root@OpenWrt:~# cloudrestore.sh 
Podaj hasło do backupu
root@OpenWrt:

Znów bez hasła. Zobaczmy co będzie jak hasło będzie złe:

root@OpenWrt:~# cloudrestore.sh 1234
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16240  100 16240    0     0  74525      0 --:--:-- --:--:-- --:--:-- 74495
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
Błąd odszyfrowania backupu. Może to było złe hasło?
root@OpenWrt:

Podajmy w końcu dobre hasło:

root@OpenWrt:~# cloudrestore.sh jas1malGOSI@
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16219  100 16219    0     0  71041      0 --:--:-- --:--:-- --:--:-- 71449
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
Sat Aug 26 16:02:39 CEST 2023 upgrade: Restoring config files...
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/base/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/luci/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/routing/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading https://downloads.openwrt.org/releases/23.05-SNAPSHOT/packages/x86_64/telephony/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/targets/x86/64/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_core
Downloading https://dl.eko.one.pl/openwrt-23.05/targets/x86/64/packages/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/base/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_base
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/base/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_luci
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/luci/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_packages
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/packages/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_routing
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/routing/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_telephony
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/telephony/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-23.05/targets/x86/64/kmods-5.15.127/Packages.gz
Updated list of available packages in /var/opkg-lists/eko1_kmods
Downloading https://dl.eko.one.pl/openwrt-23.05/targets/x86/64/kmods-5.15.127/Packages.sig
Signature check passed.
Package curl (8.2.1-1) installed in root is up to date.
Installing easyconfig (20230421) to root...
Downloading https://dl.eko.one.pl/openwrt-23.05/packages/x86_64/base/easyconfig_20230421_all.ipk
Configuring easyconfig.
Package libcurl4 (8.2.1-1) installed in root is up to date.
Package libnghttp2-14 (1.51.0-1) installed in root is up to date.
Backup został przywrócony
root@OpenWrt:~# 

I teraz ew wykonujemy restart urządzenia i mamy ponownie gotowy i skonfigurowany system.
Czyli tak naprawdę uruchamiamy jeden skrypt z hasłem i to jest całe odtwarzanie systemu.

Skrypt ten:
* pobiera backup z chmury
* próbuje odszyfrować jego zawartość wykorzystując podaje hasło
* przywraca backup korzystając z systemowego sysupgrade
* i na koniec odczytuje listę pakietów użytkownika i instaluje je ponownie

Przykładowe pliki implementujące backup w chmurze, cloudbackup.sh i cloudrestore.sh można znaleźć u mnie w przykładowych projektach: https://dl.eko.one.pl/projekty/cloudbackup/ . Nie traktujcie tego jako ostatecznie rozwiązanie, raczej jako przykład do samodzielnej rozbudowy o dalsze elementy.

W tym opisie kilka razy padło słowo "chmura". Fizycznie dla w/w skryptów jest to obecnie moje dl.eko.one.pl które potrafi obsłużyć takie żądania. Ale nie przyzwyczajajcie się do dl.eko.one.pl, nie mam w planach prowadzić publicznego serwera do przechowywania backupów. Natomiast jeżeli ktoś chciałby korzystać z takiego rozwiązania to należy sobie takie  serwer do obsługi chmury napisać samodzielnie lub zamiast curla wykorzystać dowolny inny element który umożliwia przesłanie gdzieś pliku - np. jakieś serwer w internecie do którego możemy uploadować pliki przez php czy przez scp. Tutaj już jest pełna dowolność rozwiązania.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

2

Odp: Cloudbackup

Brawo! Pierwszy użytkownik który skorzystał z rozwiązania smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Cloudbackup

ja używam do backupu openwrt curl + darmowego dropbox.com, upload da się zrobić postem, trzeba tylko token wyklikać na koncie

4

Odp: Cloudbackup

Tak jest. Wtedy nawet nie trzeba szyfrować backupu bo po prostu jest na naszym "prywatnym" dropboxie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Cloudbackup

pytanie...  a co się stanie jak mam podpięty pendrive i opkg jest skonfigurowane tak, że ma możliwość instalacji na usb i mam tam zainstalowany  pakiet - powiedzmy  gcc ?

6

Odp: Cloudbackup

Odtworzy backup (więc przywróci opkg.conf), wykona później opkg install gcc czyli zainstaluje po prostu pakiet, a jeżeli miałeś wskazane że ma instalować na pendrive to właśnie tak to zrobi.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7

Odp: Cloudbackup

Wiem, że dużo wymagam ale fajnie by było dodać możliwość wysyłania backupu lokalnie do podłączonego do routera pendriva/dysku łup po SMB.

WinISO.pl - Archiwum polskich wersji systemów Windows, Windows Serwer i Office

8

Odp: Cloudbackup

I w czym widzisz problem? Przecież backup to zwykły plik, możesz do sobie skopiować w dowolne miejsce, na lokalny dysk czy na zasób sieciowy na sambę czy nfs.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9 (edytowany przez ookris 2023-09-29 13:51:17)

Odp: Cloudbackup

Tak, tylko wygodniej by było aby działo się to automatycznie. Ale zaje sobie sprawę z tego, że dodanie GUI do samego skryptu wymaga sporo zmian. Dla tego tylko o tym wspomniałem na wypadek gdybyś chciał kiedyś rozbudować swoje narzędzie.

WinISO.pl - Archiwum polskich wersji systemów Windows, Windows Serwer i Office