Mam wizję wykonywania backupów OpenWRT w takich trzech krokach:
1. Zrzut listy zainstalowanych pakietów.
2. Zrzut zmienionych/dodanych plików z partycji systemowej
3. Archiwizacja reszty bambetli typu /mnt, /opt czy jak tam macie.
Dziś punkt pierwszy. Wyskrobałem skrypt, który pobiera listę zainstalowanych pakietów. Nastepnie przegląda zależności i usuwa wszystkie zależne (np. libtorrent jeśli jest zainstalowany rtorrent, bo przy instalacji tego drugiego biblioteka i tak się zainstaluje). Może nie jest to takie ważne, ale po co ma sypać komunikatami, że pakiet już jest. Na koniec usunięcie pakietów zawartych w obrazie (tutaj trzeba wpisać swoją listę, jest na początku skryptu). Wynikiem jest skrypt, który na czystej instalacji robi stan z czasu backupu. Mam nadzieję, że jakoś jasno to objaśniłem.
Wymagania są opisane na początku skryptu, bash (ze względu na użycie tablic) i link, który i tak sprawdzam. Poza tym narzędzia busyboxa, które powinny być. Opkg również.
używamy: pakiety.sh [plik]
Jak się spodoba, to pokażę skrypt realizujący drugi punkt, ale muszę go jeszcze ogarnąć, bo wstyd pokazać ;)
Skrypt w załączniku. Dałbym obrazek jakbym wiedział jak ;)
Zdrówko.
--Edit: Nie chce mi przyjąć załącznika (.sh ani .zip), wkleiłem w treść ale szlag trafił wcięcia.
A tutaj sformatowane: http://wklej.org/id/274340/.
# Użycie: pakiety.sh [plik wynikowy]
#
# Uwaga! Ze względu na wykorzystanie tablic wymagana jest powłoka bash.
# Trzeba zainstalować stosowny moduł
#
# Jeśli nie działa potok while read do; ... done < <( ... )
# ( pojawia się komunikat, że nie ma urządzenia /dev/fd/62 )
# to trzeba polinkować w następujący sposób:
# ln -s /proc/self/fd /dev/fd
#
# Plik z zależnościami pakietów. Zajrzyj do /etc/opkg.conf
PLIK_PKG=/tmp/opkg-lists/snapshots
# Czy jest katalog /dev/fd ?
if [ ! -d /dev/fd ] then
ln -s /proc/self/fd /dev/fd
fi
indeks_pakietu () {
local nazwa=$1
local __indeks=$2
local i
local ret=-1
#echo "Param: $nazwa"
for (( i=0; i<${#pakiety[@]}; i+=1 )); do
#echo "$i::${pakiety[$i]} $nazwa "
if [ "$nazwa" == "${pakiety[$i]}" ] then
ret=$i
fi
done
#echo $ret
eval $__indeks="$ret"
}
usun_pakiet () {
local indeks=$1
local i
for (( i=$indeks; i<${#pakiety[@]}-1; i+=1 )); do
pakiety[$i]=${pakiety[$i+1]}
done
unset pakiety[$[${#pakiety[@]}-1]]
}
if [ ! -f "$PLIK_PKG" ] then
opkg update || { echo "Nie potrafię uaktualnić listy pakietów."; exit 5; }
if [ ! -f "$PLIK_PKG" ] then
# Mimo pobrania pliku nadal go nie ma %-)
echo "Nieprawidłowa konfiguracja, sprawdź ustawienie PLIK_PKG."
exit 5
fi
fi
for naz_pakietu in `opkg list_installed | awk '{print $1}'`
do
wsk=${#pakiety[@]}
pakiety[$wsk]=$naz_pakietu
done
echo "Zainstalowanych pakietów: ${#pakiety[@]}"
echo "Przeglądanie zależności"
# Tablica znaczników pakietów do usunięcia
for ((i=0; i<${#pakiety[@]}; i+=1)); do
czy_usunac[$i]=0
done
# Przeglądanie pliku zależności i zaznaczenie pakietów zależnych
# od zainstalowanego pakietu do skasowania.
while read -a linia; do
indeks_pakietu ${linia[0]} ind
printf "\rSprawdzam: %-36s zależności: %2d " ${linia[0]} $[${#linia[@]}-1]
if [ $ind -ge 0 ] then
for ((i=1; i<${#linia[@]}; i+=1)); do
indeks_pakietu ${linia[$i]} ind
czy_usunac[$ind]=1
done
fi
done < <(awk '\
/^[ \t]*$/ {pakiet="@@@"} \
/^Package:/ {pakiet=$2} \
/^Depends:/ {zalezne=$0; gsub (/^Depends:/, "", zalezne); gsub (/\(.*\)/, "", zalezne); gsub (/,/, " ", zalezne); gsub (/[ \t]+/, " ", zalezne); print pakiet " " zalezne } \
' "$PLIK_PKG" )
# Teraz usuwam zależne pakiety. Koniecznie od końca!
echo -e "\nUsuwam pakiety z zależności"
for ((i=$[${#czy_usunac[@]}-1] i>=0; i-=1)); do
if [ ${czy_usunac[$i]} -eq 1 ] then
printf "\rUsuwam pakiet zależny %-36s" ${pakiety[$i]}
usun_pakiet $i
fi
done
echo -e "\nUsuwam pakiety wbudowane w obraz"
for (( i=0; i<${#pak_wbudowane[@]}; i+=1 )); do
naz=${pak_wbudowane[$i]}
indeks_pakietu $naz ind
if [ $ind -ge 0 ] then
printf "\rUsuwam pakiet wbudowany %-36s" ${pakiety[$ind]}
usun_pakiet $ind
fi
done
echo -e "\nNo i to co zostało jako backup\n"
if [ -n "$1" ] then
echo -e "# Backup pakietów z dnia `date +'%d-%m-%Y'`\n" > "$1"
fi
# Jak nie będzie parametru wywołania skryptu $1 to tee się nie wyłoży. I dobrze.
for (( i=0; i<${#pakiety[@]}; i+=1 )); do
echo "opkg install ${pakiety[$i]}" | tee -a $1
done
· Łącznie użytkowników: 24,115 · Najnowszy użytkownik: Ja
Czat
Musisz się zalogować, aby opublikować wiadomość.
Maniek91PL
06-11-2024 22:37
dzięki !
maxikaaz
29-10-2024 14:27
@Maniek91PL - Administration=> Admin Access, i tam masz "Allow Wireless Access" do zaznaczenia
Maniek91PL
26-10-2024 22:07
siemka! ktoś przypomni co się ustawiało jeśli nie mogę wejść od strony wifi do tomato? od lan działa
overflow2
04-10-2024 17:34
Kupowałem Asusy n10u albo n12d1 ale nie widzę ich, chyba już nie produkują, Chodzi o coś nowego i taniego. Transfery niewielkie.
maxikaaz
04-10-2024 09:38
@overflow2 patrząc po dostępności funkcji w nowych kompilacjach, to chyba nawet WRT54G/GL jeszcze ma OpenVPN, albo jakiś odpowiednik... zależy, na jakie transfery liczysz.
overflow2
30-09-2024 20:53
Jaki aktualnie najtańszy router do tomato do openvpn?
maxikaaz
27-07-2024 15:07
@servee - na początek router do rozebrania i obejrzenia, ciężko wróżyć tak tylko po objawach
maxikaaz
27-07-2024 14:55
@servee - cały kontroler nie pada tak sobie z powodu "zbiegu okoliczności", więc prawdopodobnie gdzieś przepięcie.
servee
25-07-2024 13:33
@maxikaaz: działało, aż pewnego pięknego dnia przestało działać. W tym dniu była też burza, ale to raczej zbieg okoliczności.
maxikaaz
25-07-2024 11:38
@servee - o ile problem jest w obrębie samych wyjść (dławiki, warystory), to naprawialne, ale jeśli w samym SoC - to nienaprawialne ze względu na koszta. A co było przyczyną?