23 Listopada 2024 05:53:06
Nawigacja
· Strona Główna
· Forum

· Tomato by Shibby
· FreshTomato


Wątki na forum
Najnowsze dyskusje
· [S] Asus RT-AC56U
· DIR868l OFW asus vs ...
· Szukam zaproszenia n...
· [MOD] FreshTomato-AR...
· Asus RT-AC5300 ,prob...
· archer c6 v3.20
· [S] Nighthawk R7000P...
· [S]Asus RT-AC5300 - ...
· Tanie N100 na promce...
· net z telefonu wifi+...
· Tomato - bugi/proble...
· HUAWEI z światłowodem
· Asus TUF-AX3000_V2 p...
· rt-ax88upro częste ...
· [Howto] Xpenology na...
· Jaki router pod Open...
· Ruter z tomato
· Czy to jeszcze NAS?
· RT AC66U B1
· Wireguard na FreshTo...
Najpopularniejsze obecnie wątki
· Szukam zaproszeni... [19]
· DIR868l OFW asus ... [8]
· [S] Asus RT-AC56U [0]
Ankieta
Jaki procesor posiada twój router?

Broadcom MIPSEL
Broadcom MIPSEL
36% [151 głosów]

Broadcom ARM
Broadcom ARM
52% [219 głosów]

Atheros
Atheros
5% [22 głosów]

Marvell
Marvell
1% [4 głosów]

Ralink
Ralink
1% [3 głosów]

Intel/AMD/VIA
Intel/AMD/VIA
1% [5 głosów]

Żaden z powyższych
Żaden z powyższych
4% [15 głosów]

Ogółem głosów: 419
Musisz zalogować się, aby móc zagłosować.
Rozpoczęto: 02/02/2015 09:38
Twoje IP
3.145.61.199
Zobacz wątek
OpenLinksys » :: OPROGRAMOWANIE :: » OpenWrt - firmware
 Drukuj wątek
Yntelygentny backup routera, cz. I
jejek
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/.


#!/bin/bash

# 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

# Tablica wbudowanych w obraz pakietów
pak_wbudowane=(base-files-brcm-2.4 bridge busybox dnsmasq dropbear firewall iptables kernel kmod-diag kmod-fs-ext2 kmod-fs-ext3 kmod-ipt-nathelper kmod-switch kmod-usb-core kmod-usb-storage kmod-usb-uhci-iv kmod-usb2 libgcc mtd ntpclient nvram opkg ppp ppp-mod-pppoe swap-utils uci uclibc)

# 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



Edytowany przez jejek dnia 04-02-2010 23:01
 
Przejdź do forum
Zaloguj
Wprowadź adres e-mail lub nazwę użytkownika

Hasło



Nie masz jeszcze konta? Zarejestruj się.

Zapomniałeś/aś hasła?
Aktualnie online
· Gości online: 97

· Użytkowników online: 0

· Łą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 !Grin

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ą?

95,346,814 unikalnych wizyt