Na naszych routerach nie często pojawia się oryginalne firmware, za to często jest to alternatywa: DD-WRT, OpenWrt lub Tomato. Nic nie stoi na przeszkodzie, aby uruchomić na routerze "normalny" system, linuksa, który będzie dysponował ogromną bazą pakietów.
W tym przykładzie pokażę jak szybko uruchomić debiana na naszym routerze z wykorzystaniem pewnego mechanizmu zwanego
chroot (a dzięki czemu będzie można się go pozbyć bez utraty podstawowego systemu).
Zasada działania jest prosta - uruchamiamy normalny router, ładuje się kernel linuksowy, a później wykonujemy opcję przełączenia na innych system. Brzmi prosto i jest proste do wykonania. Niestety wymagany jest do spełnienia jeden warunek - kernel musi mieć wkompilowaną emulację FPU. Jeżeli samodzielnie kompilujemy obraz, należy w kernelu zaznaczyć tą opcję.
Co jest potrzebne:
- router z USB: Linksys WRT160NL, TP-Link TL-WR1043ND i inne na ar71xx - to jest architektura MIPS. Jeżeli użyjemy np. Asusa WL-500gP - to jest MIPSEL
- pendrive z systemem plików ext2/ext3/ext4
- dostęp do komputera z linuksem (może być ubuntu LiveCD)
- normlany firmware do routera, np. openwrt.
1. Generujemy system plikówŚciągamy system plików debiana przy użyciu narzędzia
debootstrap na normalnym linuksie. W debianie/ubuntu można go doinstalować poleceniem
apt-get install debootstrap, w gentoo
emerge dev-util/debootstrap. Następnie wykonujemy polecenia
mkdir -p /tmp/fs
cd /tmp
debootstrap --arch=mips lenny fs http://ftp.pl.debian.org/debian
Ściągnie odpowiednie pakiety i rozpakuje je do katalogu fs. Zapewne zakończy się to błędem, ale należy zignorować bo ściągamy pakiety dla innej architektury i nie można wykonać binarek.
Dla Broadcoma należy oczywiście podać mipsel zamiast mips.
2. Kopiujemy zawartość katalogu na pendriveNie sam katalog fs tylko jego zawartość
3. Instalujemy OpenWrt na routerze. Należy pamiętać o potrzebie zaznaczenia odpowiedniej opcji
make kernel_menuconfig -> [x] Enable FPU emulation. Bez tego może się nie dać uruchomić debiana. Później należy doinstalować obsługę USB/usb_storage i system plików, np. ext2 jeżeli takiego używamy na pendrive.
4. Dokończenie instalacjiTeraz należy włożyć pendrive do USB, zamontować nośnik i dokończyć instalację.
mkdir -p /tmp/debian
mount /dev/sda1 /tmp/debian
Teraz należy wykonać
chrootchroot /tmp/debian /bin/bash
A następnie dokończyć instalację pakietów:
cd /var/cache/apt/archives/
dpkg --force-all -i dpkg*deb
dpkg --force-all -i libc6*deb
dpkg -iGREB .
ponieważ instalacja i konfiguracja pakietów nie jest wykonywana we właściwej kolejności to po ostatnim poleceniu mogą pojawić się błędy. Należy powtórzyć ostatnie polecenie aż nie będzie błędów (5 czy 6 razy). Zostaje tylko konfiguracja niektórych rzeczy
dpkg-reconfigure -a
exit
I mamy gotowego debiana.
5. Skrypty startoweWystarczy np. w /etc/rc.local dodać następujące linie:
sleep 20
mkdir -p /tmp/debian
mount /dev/sda1 /tmp/debian
chroot /tmp/debian /bin/bash
exit 0
Tym samym mamy system, który normalnie uruchamia jądro pochodzące w tym przypadku z openwrt a następnie uruchamiające samego debiana. Wszystkie niezbędne moduły można albo dodać do debiana (wypakować odpowiednie pliki z pakietów openwrt) lub prościej po prostu zainstalować w openwrt i pozwolić samodzielnie załadować je przez openwrt.
Debian dysponuje znacznie większą liczbą pakietów, wiec może więc być bardziej użyteczny pod tym względem. Należy pamiętać że 32MB dla wielu usług może być za małą wartością; warto zrobić odpowiedni swap.