Temat: [howto] Extroot dla Gargoyle na TL-MR3420/MR3220/MR3020/MR3040
Opis uruchomienia extroota. Dotyczy to tylko mojego obrazu Gargoyle PL opartego na Attitude Adjustment dla TP-Linka TL-MR3420/MR3220/MR3020/MR3040. Dla tych routerów zostaje bardzo niewiele miejsca w pamięci flash, praktycznie nie da się nic więcej zainstalować, więc o ile włączenie extroota odbywa się tak samo jak w przestawionym poradniku, o tyle formatowanie nośnika związane jest ze specjalną instalacją narzędzi. Nie wiesz co to extroot? Nie wiesz do czego służy? Patrz wspomniany już poradnik.
Niezbędne będą:
- router
- pendrive lub dysk podłączony przez USB.
Karta uSD w modemie GSM może być tylko i wyłącznie pod warunkiem przełączenia modemu na "stałe". Bez tego extroot nie będzie działał poprawnie na modemie.
Nośnik ma być podłączony do routera. Na nośniku zostanie zmieniony system plików, więc nie może być na niej żadnych plików (zostaną one skasowane!).
UWAGA: w przypadku innych routerów może okazać się koniecznie doinstalowanie pakietu block-mount wraz z zależnościami. Zobacz także ten temat: http://eko.one.pl/?p=gargoyle-fstab.
Patrz też uwagi na końcu poradnika zanim zaczniesz.
1. Instalacja firmware
Należy zainstalować firmware z katalogu http://dl.eko.one.pl/gargoyle-pl/attitu … nt/ar71xx/ .
Jeżeli robimy to z oryginalnego oprogramowania należy wybrać plik z factory w nazwie.
Jeżeli robimy to z openwrt/gargoyle należy wybrać plik z sysupgrade w nazwie.
Należy pamiętać o wybraniu pliku z nazwą danego routera oraz o odpowiedniej wersji (v1/v2).
Informacje o zawartości tych obrazów zawarte są w tym dokumencie: http://eko.one.pl/?p=openwrt-gargoylepl
Po instalacji (przez gui, jako Firmware Upgrade), należy odczekać chwilę aż przestanie migać dioda SYS, dać mu jeszcze minutę (robi w tym czasie jffs), a następnie połączyć się przy pomocy programu putty:
Hostname: 192.168.1.1
Connection Type: SSH
Klikamy "Open", login to root, hasło password. Powinno ukazać się zgłoszenie do systemu (dla przykładu):
BusyBox v1.19.4 (2013-01-19 12:07:48 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_____ _
| __ \ | |
| | \/ __ _ _ __ __ _ ___ _ _| | ___
| | __ / _` | '__/ _` |/ _ \| | | | |/ _ \
| |_\ \ (_| | | | (_| | (_) | |_| | | __/
\____/\__,_|_| \__, |\___/ \__, |_|\___|
__/ | __/ |
|___/ |___/
----------------------------------------------------------------
| |
| Gargoyle PL 1.5.9.2 (eaab12e) |
| OpenWrt Attitude Adjustment 12.09-rc1 (r35298) |
| Zbudowano: 2013-01-26 09:34 CET |
| |
| Cezary Jackiewicz (obsy), http://eko.one.pl |
| |
----------------------------------------------------------------
root@Gargoyle:~$
2. Przygotowanie nośnika
Przejdź do punktu 3 jeżeli pendrive/dysk/karta ma już system plików ext2. Jeżeli nie lub nie wiesz tego czytaj dalej.
2a. Odmontowanie karty
Mogło się zdarzyć, że system już widzi kartę i ją zamontował. Należy ją wtedy odmontować. Aby to sprawdzić należy wydać polecenie:
mount | grep /dev/sd
Jeżeli nic się nie wyświetli to jest ok, jeżeli będzie coś w rodzaju
/dev/sda1 on /mnt/sda1 type ext2 (rw,noatime,errors=continue)
(zamontowany partycja w /mnt/sda1) to należy wydać polecenie
umount /dev/sda1
Można się w/w sposobem upewnić ponownie czy została odmontowana.
UWAGA: w zależności od ilości podłączonych nośników i ilości partycji nazwa może być /dev/sdb1, sda2, sdc2 itd. Należy upewnić się którą partycję chcemy wykorzystać i odpowiednio dostosować oznaczenie partycji!
2b. Połączenie z internetem
Niestety do formatowania nośnika niezbędne są narzędzia których nie ma w systemie i dlatego potrzebne będzie połączenie do internetu. Albo kablem (do portu wan koniecznie!), albo przez modem GSM (przykładowe ustawienia dla Orange pokazane są poniżej, pin oczywiście należy podać taki jak powinien być):
Istnienie połączenia można łatwo sprawdzić:
root@Gargoyle:~$ ping -c 1 eko.one.pl
PING eko.one.pl (94.152.131.216): 56 data bytes
64 bytes from 94.152.131.216: seq=0 ttl=41 time=382.487 ms
--- eko.one.pl ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 382.487/382.487/382.487 ms
Jeżeli odpowiedział to wszystko jest ok. Jeżeli nie ma odpowiedzi - należy upewnić się, że jest połączenie do internetu.
2c. Instalacja narzędzi
Narzędzia będą instalowane w pamięci ram (we flash nie ma już miejsca na to). Po restarcie systemu znikną one i nie będą dostępne (bo instalowane są w pamięci). W razie potrzeby trzeba ponowić czynność.
Wydajemy polecenia
opkg update
opkg install -d ram e2fsprogs
W moim przypadku wyglądało to tak:
root@Gargoyle:~# opkg update
Downloading http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/ar71xx/generic/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/attitude_adjustment.
Downloading http://ecco.selfip.net/attitude_adjustment/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/eko1.
Downloading http://ecco.selfip.net/gargoyle-pl/attitude_adjustment/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/gargoylepl.
root@Gargoyle:~# opkg install -d ram e2fsprogs
Installing e2fsprogs (1.42.4-1) to ram...
Downloading http://ecco.selfip.net/attitude_adjustment/ar71xx/packages/e2fsprogs_1.42.4-1_ar71xx.ipk.
Installing libblkid (2.21.2-1) to ram...
Downloading http://ecco.selfip.net/attitude_adjustment/ar71xx/packages/libblkid_2.21.2-1_ar71xx.ipk.
Configuring libblkid.
Configuring e2fsprogs.
W zależności od ilości zainstalowanych rzeczy może ściągnąć więcej zależności. Ponieważ zainstalowane zostały one w pamięci ram a nie normalnie we flash, należy jeszcze sprawić, aby system widział zainstalowane biblioteki:
ln -s /tmp/usr/lib/lib* /usr/lib/
ln -s /tmp/lib/lib* /lib/
2d. Formatowanie nośnika
Należy utworzyć system plików ext2 na nośniku. Musi on być odmontowany (patrz punkt 2a).
W moim przypadku był to 4GB pendrive. Aby to zrobić należy wydać polecenie:
/tmp/usr/sbin/mke2fs -m 0 /dev/sda1
W tym przypadku wynikiem działania było:
root@Gargoyle:~# /tmp/usr/sbin/mke2fs -m 0 /dev/sda1
mke2fs 1.42.4 (12-June-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
250976 inodes, 1003008 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1027604480
31 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
3. Włączenie extroota
Mamy już nośnik z właściwym systemem plików. Należy teraz włączyć extroot. Najpierw odczytujemy unikalny identyfikator dysku poleceniem :
blkid
W tym przypadku było to:
root@Gargoyle:~# blkid
/dev/sda1: UUID="8d019034-872b-4571-89da-1b2d32e993c5" TYPE="ext2"
Interesują nas te cyferki. Włączenie extroota to polecenia:
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].uuid=8d019034-872b-4571-89da-1b2d32e993c5
uci set fstab.@mount[0].target=/overlay
uci set fstab.@mount[0].fstype=ext2
uci set fstab.@mount[0].options=rw,noatime
uci commit fstab
Gdzie uuid to ten wcześniej odczytany identyfikator. Dzięki takiemu rozwiązaniu extroot zostanie na swoim miejscu nawet gdy podłączymy do routera następny dysk lub używamy do extroota pendrve a mamy także kartę SD w modemie.
3a. Skopiowanie istniejącej konfiguracji - opcjonalnie.
Jeżeli przed zrobieniem extroota zostały wykonane jakieś ustawienia lub/i doinstalowane pakiety i chcemy przenieść to na extroota to należy skopiować konfigurację. Nie jest to wymagane, bo można po prostu ustawić wszystko jeszcze raz.
mount -t ext2 /dev/sda1 /mnt
cp -R /overlay/* /mnt
umount /dev/sda1
sync
4. Sprawdzenie działania
Wykonujemy restart
root@Gargoyle:~# reboot
Po restarcie system powinien mieć już uruchomiony extroot. Można to sprawdzić wydając polecenia
mount | grep /dev/sd
df -h | grep /dev/sd
W moim przypadku było to:
root@Gargoyle:~$ mount | grep /dev/sd
/dev/sda1 on /overlay type ext2 (rw,noatime,errors=continue)
root@Gargoyle:~$ df -h | grep /dev/sd
/dev/sda1 3.8G 8.5M 3.8M 0% /overlay
Jak widać /overlay jest zamontowane na /dev/sda1 o pojemności prawie 4GB, czyli jest to mój pendrive. Dysponujemy więc zwiększoną ilością pamięci na instalację następnych pakietów.
Całość jest bardzo prosta: jeżeli mamy nośnik w ext2 to wystarczy tylko włączyć opcje w fstab, wskazać urządzenie i to wszystko.
AKTUALIZACJA #1:
Spotyka się modemy, które odłączają kartę przy przełączaniu modemu (większość modemów GSM obecnie dostępnych w sprzedaży). Objawia się to tym, że po zrobieniu extroota w logach jest cała masa informacji o błędach systemu plików, mimo że po sprawdzeniu błędów nie ma. Taki modem nie nadaje w takim stanie do extroota, chyba że zostanie na stałe przełączony. Patrz AKTUALIZACJA #3
AKTUALIZACJA #2: sprawdzenie systemu plików
Czasami, w przypadku nagłych wyłączeń routera może się okazać że system plików "się rozleciał" i zgłasza błędy. W/w obrazy nie mają w sobie narzędzi do sprawdzania systemów plików, należy więc wtedy zrobić to:
- wyłączyć router
- odłączyć dysk
- włączyć router
- skonfigurować połączenie (tak żeby był dostęp do internetu), o ile wcześniej go nie było
- podłączyć dysk (przy uruchomionym routerze)
- upewnić się że dysk nie został automatycznie zamontowany
root@Gargoyle:~$ mount | grep sd
(nic nie powinno się wypisać)
- zainstalować narzędzia zgodnie z punktem 2c
- uruchomić skanowanie systemu plików
root@Gargoyle:~$ /tmp/usr/sbin/e2fsck -y /dev/sda1
W zależności o wielkości nośnika może to chwilę potrwać.
- zrestartować router z podłączonym nośnikiem, extroot powinien się normalnie aktywować.
AKTUALIZACJA #3: przełączenie modemu w tryb... modemu
UWAGA: nie rób tego jeżeli nie wiesz o co chodzi. Możesz uszkodzić modem.
Szybka teoria: zwykły modem składa się zwykle z trzech elementów: wirtualnego CDROMu, modemu i karty pamięci. Po podłączeniu modemu (obojętnie czy Windows czy Linux), widoczny jest tylko wirtualny CDROM i czasami karta pamięci. Odpowiednie programy (sterownik pod windows lub usb-modeswitch pod linuksem) przełączają później urządzenie żeby był dostępny właśnie modem i karta pamięci. Wadą tej czynności jest zwykle to że karta pamięci na czas przełączenia przestaje być widoczna, co powoduje że nie nadaje się na extroota bo powoduje to błędy w systemie plików. Trzeba więc modem tak skonfigurować, żeby był na stałe przełączony, bez potrzeby wykonywania tej czynności. Do tego niezbędne jest odpowiednie polecenie które modem przełączy - zobacz http://3g-modem.wetpaint.com/page/Huawei+AT-commands . Dla Huawei E173 jest to AT^U2DIAG=256, dla innych modemów tego producenta może być inne (^SETPORT).
Windows: wystarczy uruchomić putty, wybrać "Connection Type" na "Serial" oraz wskazać numer portu "COMx". X zależy od przypisanego numeru do modemu i trzeba to odszukać w Menadżerze urządzeń. Prędkość ustawiamy na 115200. Klikamy "Open" powinien zgłosić się modem. Dalsze czynności napisane są poniżej.
Linux/OpenWrt: instalujemy program picocom, uruchamiamy poleceniem picocom -b 115200 /dev/ttyUSBx. X zależy od przypisanego numeru do modemu i jest to zwykle 0, czyli /dev/ttyUSB0. Dalej postępujemy wg poniższych wskazówek.
Wpisujemy "AT" (bez cudzysłowu), naciskamy enter. Modem powinien odpowiedzieć "OK". Jeżeli nie odpowiedział należy ponownie uruchomić program terminala podając inny numer portu. Jeżeli nie widać tego co wpisujmy można wydać polecenie "ATE1<enter>". Aby przełączyć modem należy wpisać polecenie "AT^U2DIAG=256<enter>" (bez cudzysłowu - lub inne, w zależności o typu modemu). Po tej czynności należy odczekać parę chwil i fizycznie odłączyć modem. Po ponownym podłączeniu powinien od razu zgłosić się modem i karta pamięci.
W openwrt należy później odinstalować program usb-modeswitch: opkg remove usb-modeswitch; opkg remove usb-modeswitch-data.
UWAGA: robisz to na własną odpowiedzialność. Polecenie należy dostosować do posiadanego modemu i producenta; złe polecenie może zakończyć się uszkodzeniem modemu.