OpenWrt HowTo czyli, przewodnik po OpenWrt OpenLinksys.info Wersja 0.5 10 grudnia 2006 by ArteQ SlyT
OpenWrt HowToczyli, przewodnik po OpenWrt
OpenLinksys.infoWersja 0.5
10 grudnia 2006
byArteQSlyT
Spis treści
0.1 Instalacja OpenWrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.2 Klonowanie MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.3 Instalacja X-Wrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.4 Upgrade Busybox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.5 Synchronizacja czasu rzeczywistego . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.6 Cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
0.7 Programy warte uwagi w czasie pracy z OpenWrt . . . . . . . . . . . . . . . . . 6
0.8 Obsługa dysku USB na OpenWrt . . . . . . . . . . . . . . . . . . . . . . . . . . 6
0.9 Instalowanie pakietów na dysku zewnętrzymym . . . . . . . . . . . . . . . . . . 9
0.10 Podział pasma z użyciem SimpleShaper(ver. 0.3-1) . . . . . . . . . . . . . . . . . 13
0.11 Dzielenie zasobów w sieci lokalnej przy pomocy Samby . . . . . . . . . . . . . . 13
0.12 Prosty serwer wydruku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.13 Karta dźwiekowa USB w OpenWrt . . . . . . . . . . . . . . . . . . . . . . . . . 13
0.13.1 Instalacjia mpd(Music Player Deamon) . . . . . . . . . . . . . . . . . . . 14
0.14 Resetowanie pamięci NVRAM do wartości domyślnych . . . . . . . . . . . . . . 15
0.15 Akcja „Pin9” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
0.16 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2
0.1 Instalacja OpenWrt
Instalacja OpenWrt na multiroutach Asus sprowadza się do wgrania obrazu za pomocą oprogra-
mowania dostarczonego wraz ze sprzętem, o nazwie Restoration Tool. Aktualne obrazy OpenWrt
należy pobrać z strony oficjalnego projektu www.openwrt.org. Alternatywnym sposobem insta-
lacji jest użycie protokołu TFTP. Obraz jaki naleźy wgrać do routera to openwrt-brcm-2.4-
squashfs.trx.
W czasie instalacji na routerze ASUS WL500gP należy pamiętać, że po zakończeniu wgrywania
tj. po ok 5-6 minutach ręcznie zrestarować router, wyjmując wtyczkę zasilania. Jest to wymagane,
gdyż ten router niema funkcji automatycznego resetowania się po wgraniu firmware. Należy
mieć to na uwadze.
0.2 Klonowanie MAC
Logujemy się z użyciem SSH do naszego routera (oczywiście port 22). Z linii poleceń wpisujemy:
nvram set wan_hwaddr="aa:bb:cc:dd:ee:ff"
w miejsce aa:bb:cc:dd:ee:ff wpisujemy żądany adres MAC,
nvram commit
żeby zapisać ustawienia w pamieci flash,
reboot
żeby nowy adres MAC został użyty
0.3 Instalacja X-Wrt
Warunkiem koniecznym do naszych dalszych działań jest połączenie z Internetem. Zakładamy,
że połączenie z netem juz mamy poprawnie skonfigurowane.
Z linii poleceń wydajemy komende:
ipkg install http://ftp.berlios.de/pub/xwrt/packages/webif_milestone2.ipk
3
Po pomyslnym zainstalowaniu żądanych pakietów uruchamiamy przeglądarke internetową
(polecam Firefoxa z zestawem wtyczek Adblock Plus, Adblock Filterset.G Updater oraz
DownThemAll! ) i logujemy się do webinterfejsu wpisując http:[IP_ROUTERA] (np.
http:192.168.1.1).
Na tym etapie konfiguracja naszego routera wyda się już prosta i w zasadzie większość czynności
konfiguracyjnych dokonamy korzystając z X-Wrt.
0.4 Upgrade Busybox
Ponieważ w OpenWRT linia poleceń (busybox) jest okrojona z kilku przydatnych komend
zalecam zrobić upgrade pakietu korzystając z paczki przygotowanej przez zespół opracowujący
X-Wrt. W tym celu z linii poleceń wydajemy komendę:
ipkg install ftp://ftp.berlios.de/pub/xwrt/packages/busybox_busybox_1.2.1-6_mipsel.ipk
a po chwili cieszymy ;) się nowym lepszym biziboxem.
0.5 Synchronizacja czasu rzeczywistego
Po co ntpclient ? No więc nasz router nie ma wewnętrznego zegara i po każdym braku zasilania
resetuje datę i czas do 1 stycznia jakiegoś tam roku. Trudno przy takim rozwiązaniu odnieść się
do wpisów w logu, jak i zlecać pewne zadania cron-owi więc na nasze potrzeby uruchomimy
program który będzie okresowo synchronizował lokalny czas routera z zegarem atomowym.
Korzystając z X-Wrt instalujemy pakiet nptclient. W zakładce System / Ustawienia w pozycji
Timezone wybieramy Stockholm, Sweden a z pozycji NTP Server wpisujemy np. time.atman.pl
(z tego serwera ja korzystam i ten polecam). Zapisujemy zmiany.
W zasadzie to powinno już zadziałać, ale trochę zmodyfikujemy sobie konfigurację klienta ntp
przystosowując go do okresowego uruchamiania przez cron-a. W tym celu modyfikujemy plik
/etc/init.d/S60ntp a konkretnie jedną linię tego skryptu zaczynającą sie od:
#launch ntpclient
killall ntpclient
/usr/sbin/ntpclient -i 86400 -h $NTP_SERVER &
na
4
#launch ntpclient
killall ntpclient
/usr/sbin/ntpclient -l -h $NTP_SERVER -c 1 -s &
Zapisujemy plik (ew. zastosowujemy zmiany). Następnie przechodzimy do konfiguracji Cron-a.
0.6 Cron
Zakładam że cron jest zainstalowany i działający. Żeby dodać cykliczne (w naszym przypadku
co godzinę) uruchomienie ntpclienta z zadaniem synchronizacji czasu z linii poleceń wydajemy
komendę:
echo ,,0 * * * * /etc/init.d/S60ntp’’ >> /etc/crontabs/root
To polecenie tworzy nam w katalogu /etc/crontabs/ plik root z treścią jaka znalazła się
pomiędzy cudzysłowami ? w tym wypadku jest to
0 * * * * /etc/init.d/S60ntp
Teraz tylko musimy zrestartować usługę crona poleceniem:
/etc/init.d/S60cron restart
i juz mamy co pełną godzinę uruchamianego klienta ntp. W podobny sposób moźemy dodawać
inne programy uruchamiane cykliczne. Należy pamietać o szablonie:
minute hour day month dayofweek command
który uzupełniamy w zalezności kiedy chcemu uruchomic dany program lub skrypt.
Przykład:
minute : 22
hour : 4
day : *
month : *
dayofweek : *
Taka konfiguracja oznacza, że program będzie uruchamiany każdego dnia miesiąca o godzinie
4:22(obowiązuje czas 24-godzinny)
Gwiazdka oznacza „zawsze”
5
0.7 Programy warte uwagi w czasie pracy z OpenWrt
Nano - przyjazny edytor plików w trybie textowym
ipkg install nano
ln -s /opt/usr/share/terminfo/ /usr/share/terminfo
screen - multikonsola SSH. Dzięki temu programowi możemy mieć kilka wirualnych kon-
sol(okien SSH)przełączanych w wygodny sposób. Ciekawą funkcja tego programu jest możliwość
pozostawienia takiego wirtualnego okna w tle, czyli możemy w ten sposób odpalic np. sciaganie
pliku wget’em, bez koniecznosci aktywnie włączonej konsoli SSH,a co za tym idzie i komputera.
POLECAM!
ipkg install screen
transmissiocli - konsolowy klient sieci BitTorrent. Który w odróżnieniu od ctorrent nie jest
blokowany na trackerach. Program umożliwia ograniczenia transferów DL/UL oraz zmianę
portu.
ncftp - klient ftp
ipkg install ncftp
WinSCP - windowsowy klient SFTP, świetnie nadaje się do wgrywania, edycji plików na OpenWrt
Putty - najpopularniejszy klient SSH i telnet pod Windowsa
0.8 Obsługa dysku USB na OpenWrt
Potrzebujemy dysk USB 2.0/1.0 w kieszeni oraz wykonana część programową o której piszemy
dalej.
Instalujemy następujące pakiety:
• kmod-usb-core
• kmod-usb-ohci
• kmod-usb-storage
• kmod-usb-uhci
6
• kmod-usb2 / tylko w przypadku posiadania przez router USB 2.0
• kmod-ext2
• kmod-ext3
• kmod-vfat
wpisując w konsoli SSH:
$ ipkg install kmod-usb-core mod-usb-ohci kmod-usb-uhci kmod-usb2 \
kmod-usb-storage kmod-ext2 kmod-ext3 kmod-vfat
Podłączamy dysk USB i wykonujemy restart routera.
Po poprawnym uruchomieniu wchodzimy do konsoli SSH oraz wydajemy komendę:
$ df
Naszym oczom powinno sie pokazać
...
/dev/scsi/host0/bus0/target0/lun0/part1 10578780 2708528 7332880 27% /mnt/disc0_1
...
Oznacza to ze OpenWrt w czasie botowania automatycznie montuje dysk USB w /mnt/disc/0_1,
nie jest to dobra lokalizacja i najlepiej zrobić własne montowanie do /opt. Dobrze jest też sfor-
matować dysk twardy i utworzyć małą partycje swap oraz jedną partycje w systemie plików ext2.
Zalecam ten system plików, gdyż nie będzie wtedy problemów z prawami dostępu do katalogów.
Wykonujemy następujące kroki w celu stworzenia partycji swap o objętości 300MB, pozostałe
miejsce na dysku wykorzystujemy do utworzenia partycji ext2:
ln -s /proc/mounts /etc/mtab
ipkg install fdisk swap-utils e2fsprogs
fdisk /dev/discs/disc0/disc
Jeżeli brakuje jakiegokolwiek pakietu z potrzebnych warto poszukać na www.ipkg.be. Wciskamy
teraz pokoleji skróty do komend w poszczególnych krokach:
7
d <enter>
n <enter>
p <enter>
1 <enter>
<enter>
+300MB <enter>
n <enter>
p <enter>
2 <enter>
<enter>
<enter>
t <enter>
2 <enter>
82 <enter>
w <enter>
Komendą fdisk -l sprawdzamy czy podział dysku jest dobry oraz przechodzimy do formatowania
partycji ext2 i swap:
mk2fs -f /dev/discs/disc0/part1
mkswap /dev/discs/disc0/part2
Rebotujemy nasz router, i od razu następnym krokiem jaki wykonujemy jest mountowanie
tych partycji:
mkdir /opt
mount -f /dev/discs/disc0/part1 /opt
swapon /dev/discs/disc0/part
Sprawdzamy czy jest wszystko w porządku:
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 1024 1024 0 100% /rom
none 15252 436 14816 3% /tmp
8
/dev/mtdblock/4 6336 3068 3268 48% /jffs
/jffs 1024 1024 0 100% /
/dev/scsi/host0/bus0/target0/lun0/part1 10578780 2708532 7332876 27% /opt
$ free
total used free shared buffers
Mem: 30504 25804 4700 0 496
Swap: 1036184 400 1035784
Total: 1066688 26204 1040484
0.9 Instalowanie pakietów na dysku zewnętrzymym
Jeżeli chcemy instalować pakiety na dysku zewnętrzym naleźy wykonać ten punkt poradnika,
czyli dodać opt jako docelowe miejsce do instalacji pakietów. Będzie to też domyślne miejsce
instalacji pakietów i instalator tam będzie instalował wszystkie instalowane programy. W
zależności od wersji OpenWrt lokalizację tą dodaje sie w innych miejsach.
Należy dodać nastepujący wpis przed dest root /
dest usb /opt
czyli w zależności o wersji edytujemy odpowiedni plik
• WhiteRussian RC5
nano /etc/ipkg.conf
• WhiteRussian RC6
nano /etc/ipkg/ipkg.defs
Skoro zdecydowaliśmy sie na instalację pakietów na zewnatrzym dysku, to naleźy poinformować
system, gdzie będą zajdowały się instalowane binarki oraz biblioteki. Wykonujemy to poprzez
edycję pliku /etc/profile.
nano /etc/profile
9
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin
Zastępujemy oryginalny wpis powyższym, oraz dodajemy:
export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/usr/lib:/opt/lib
czyli ma wyglądać mniej wiecej tak(RC6):
#!/bin/sh
[ -f /etc/banner ] && cat /etc/banner
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/usr/lib:/opt/lib
export PS1=’\u@\h:\w\$ ’
alias less=more
alias vim=vi
arp() { cat /proc/net/arp; }
ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
reboot() { ifdown wan 2>&1 >/dev/null ; /sbin/reboot; }
Trzeba dodać jeszcze uruchamianie skryptów init z nowej lokalizacji /opt
nano /etc/init.d/S98opt
#!/bin/sh
#
# /opt/etc/init.d/
#
i=0
while [ $i -le 30 ]
do
if [ -d /opt/etc/init.d ]
10
then
for i in /opt/etc/init.d/S*; do
$i start 2>&1
done | logger -s -p 6 -t ’’ &
break
fi
sleep 1
i=‘expr $i + 1‘
done
chmod +x /etc/init.d/S89opt
Finalizujemy cały proces dodając mountowanie partycji na starcie OpenWrt
nano /etc/init.d/S11mount
#!/bin/sh
#
# mount script
#
# Which device needs to be mounted?
MOUNT_DEVICE0=/dev/scsi/host0/bus0/target0/lun0/part1
i=0
# Wait 15 secs, mount when ready, and continue if it dosnt get ready within 15 secs.
while [ $i -le 15 ]
do
if [ -e $MOUNT_DEVICE0 ]
then
mount $MOUNT_DEVICE0 /opt/
swapon /dev/discs/disc0/part2
echo "Success: $MOUNT_DEVICE0"
11
exit 0
fi
sleep 1
i=‘expr \$i + 1‘
done
chmod +x /etc/init.d/S11mount
Restartujemy router i powinno być juz wszystko zrobione, czyli zamountowane partycje. Teraz
możemy instalować dowolne pakiety.
UWAGA! Od teraz instalacja pakietów komendą ipkg install <pakiet> instaluje domyślnie na
/opt wszystkie pakiety.
Czasami niektóre pakiety jak. np kmod- trzeba koniecznie instalować na lokalizacji root(flash).
Jest to szczególnie ważne, gdyż taki pakiet dostarcza moduły kernela i muszą one znajdować sie
w /lib/modules/2.4.30/. W celu wymuszenia lokalizacji instalacji na root robimy:
ipkg install -d root install <pakiet>
Duża część pakietów dostarcza wszelkie pliki .conf i one będą znajdować sie na /opt/etc/
dlatego uruchamiając dany program w skrypcie init(z /opt/etc/init.d) należy wprowadzić
ścieżkę do danego pliku .conf z użyciem parametru programu. Innym spsobem jest wykonanie
symbolicznego dowiązania, np. dla programu mpd
ln -s /opt/etc/mpd.conf /etc/mpd.conf
Wtedy program odpala sie bez problemu i nie trzeba uruchamiac programu z paramterem.
Często tez programy dostarczają własne biblioteki LIB i są instalowane na /opt/, mogą pojawić
się problemy z odpaleniem takiego programu co często widać w logach(komenda logread).
Można to obejść wydając po zainstalowaniu danego programu/biblioteki komendę dowiązania
symbolicznego:
ln -s /opt/lib/* /lib/
ln -s /opt/usr/lib/* lib/
12
0.10 Podział pasma z użyciem SimpleShaper(ver. 0.3-1)
WiP
0.11 Dzielenie zasobów w sieci lokalnej przy pomocy Samby
WiP
0.12 Prosty serwer wydruku
WiP
0.13 Karta dźwiekowa USB w OpenWrt
Jak pisałem wcześniej router ASUS Wl500gPgD posiada interfejs USB, który niesie za sobą
duże możliwości rozbudowy jak np:. ...dodanie karty dźwiękowej na chipsecie C-Media.
Do uruchomienia karty dźwiękowej na OpenWrt potrzebujemy moduły kernela oraz kartę
dzwiękową dostępna do kupienia na Allegro. Pracę rozpoczynamy od przegrania modułów
kernela do folderu /lib/modules/2.4.30. Koleją czynnością jest konieczność załadowania tych
modułów poleceniem insmod, w następujący sposób:
insmod soundcore
insmod audio
Kolejność ładowania modułów jest ważna!
Sprawdzany poleceniem dmesg czy karta USB wykryta została poprawnie:
usb.c: registered new driver audio
usbaudio: device 2 audiocontrol interface 0 has 1 input and 1 output AudioStreaming interfaces
usbaudio: device 2 interface 2 altsetting 1 channels 1 framesize 2 configured
usbaudio: valid input sample rate 48000
usbaudio: valid input sample rate 44100
usbaudio: device 2 interface 2 altsetting 1: format 0x00000010 sratelo 44100 sratehi 48000 attributes 0x01
usbaudio: device 2 interface 1 altsetting 0 does not have an endpoint
usbaudio: device 2 interface 1 altsetting 1 channels 2 framesize 2 configured
13
usbaudio: valid output sample rate 48000
usbaudio: valid output sample rate 44100
usbaudio: device 2 interface 1 altsetting 1: format 0x01000010 sratelo 44100 sratehi 48000 attributes 0x01
usbaudio: registered dsp 14,3
usbaudio: constructing mixer for Terminal 6 type 0x0301
usbaudio: warning: found 1 of 2 logical channels.
usbaudio: assuming that a stereo channel connected directly to a mixer is missing in search (got Labtec headset?). Should be fine.
usbaudio: registered mixer 14,0
usbaudio: constructing mixer for Terminal 7 type 0x0101
usbaudio: registered mixer 14,16
usb_audio_parsecontrol: usb_audio_state at 81d31f00
audio.c: v1.0.0:USB Audio Class driver
Warto dodać ładowanie tych modułów na starcie. Łatwo to wykonać na X-Wrt(System >
Startup) poprzez dodanie:
insmod soundcore
insmod audio
0.13.1 Instalacjia mpd(Music Player Deamon)
ipkg install mpd
nano /opt/etc/mpd.conf
Najwżniejszą częścią pliku jest:
music_directory "/opt/daap"
playlist_directory "/opt/daap"
db_file "/tmp/mpd/mpd.db"
log_file "/tmp/mpd/mpd.log"
error_file "/tmp/mpd/mpd.error"
pid_file "/tmp/mpd/mpd.pid"
audio_output {
type "oss"
14
name "C-Media USB Audio"
device "/dev/sound/dsp" # optional
format "44100:16:2" #optional
}
#OSS Mixer
mixer_type "oss"
mixer_device "/dev/sound/mixer"
mixer_control "PCM"
zmienna music_directory wzkazuje, gdzie znajdują się nasze pliki muzyczne.
Resztę opcji programu zmieniamy w zależności o preferencji.
nano /opt/etc/init.d/S80mpd
Tworzymy plik inicjacyjny dla programu mpd, aby uruchamiał sie na starcie
#!/bin/sh
mkdir -p /tmp/mpd
touch /tmp/mpd/mpg.log
/opt/usr/bin/mpd /opt/etc/mpd.conf
Do sterowania serwerem mpd możemy uzyć klienta zainstalowanego na dowolnym komputerze.
W systemie operacyjnym Linux warto zainteresować się programem Sonata. Należy wspomnieć
że, serwer domyślnie pracuje na porce 6600.
0.14 Resetowanie pamięci NVRAM do wartości domyślnych
mtd -r erase nvram
Router sam się zresetuje z domyślnymi wartościami nvram.
0.15 Akcja „Pin9”
Jeśli twój router jest odporny na wgrywanie nowego softu programem Firmware Restoration to
znak że przyszedł czas na akcję ’Pin9’.
15
UWAGA! Skutkuje to utratą gwarancji na sprzęt więc zanim się do tego zabierzesz zastanów się
czy naprawdę warto ? jako alternatywę masz procedurę gwarancyjną i oczekiwanie na otrzymanie
sprawnego sprzętu (o ile gwarant uzna usterkę jako gwarancyjną).
No to do dzieła:
1. odłączasz router od zasilania,
2. odrywasz gumowe nóżki - pod nimi są śrubki,
3. odkręcasz śrubki - na jednej z nich jest naklejka gwarancyjna, przy odrobinie zręczności
oraz z użyciem cienkich śrubokrętów (tzw. zegarmistrzowskich) uda ci sie ja zdjąć bez
uszkodzeń,
4. zdejmujesz górną część obudowy,
5. zdejmujesz delikatnie ekran (taka blaszka przykrywającą część płytki drukowanej na której
jest proc i flash),
6. odnajdujesz interesujący cie pin (polecam lupę),
7. zwierasz pin9 z masa (najgrubsza ścieżka dookoła płytki) ? wydaje mi się ze pin9 i 10 są
ze sobą połączone więc nie jest to tak precyzyjna operacja jak to się wydaje,
8. podłączasz router do zasilania,
9. odczekujesz aż do momentu zapalenia sie diody power światłem ciągłym,
10. odłączasz router od zasilania,
11. odłączasz pin9 od masy,
12. a teraz Firmware Restoration do wgrania nowego softu.
Alternatywnym sposobem który nie skutkuje utratą gwarancji, jest wykorzystanie istniejacych
na PCB pinów do podłączenia się przez otwory w obudownie samodzielnie zrobionym kablem
RS. Więcej na ten temat (dla zaawansowanych) na stronie dokumentacji OpenWrt
16
0.16 Bibliografia
[1] www.macsat.com
[2] www.openwrt.org
[3] www.xwrt.org
[4] sokrates.mimuw.edu.pl/ sebek/openwrt/
[5] mpd.wikia.com/wiki/Main_Page
[6] www.dd-wrt.com
[7] www.xm1math.net/texmaker/
[8] Tobias Oetiiker, Hubert Partl, Nie za krótkie wprowadzenie do LaTeX 2, wrzesień 1998
17