Stali czytelnicy bloga wiedzą, że ma moim routerze TP-Link TL-WR1043ND od dawna gości OpenWrt (aktualnie w wersji Gargoyle PL). Niedawno stałem się też posiadaczem innego routera TP-Linka – mianowicie TL-WDR4900. Jako, że nie znalazłem jakoś szczególnie interesującego buildu OpenWrt dla tego modelu zdecydowałem się wgrać DD-WRT. Po początkowym zachwycie ilością opcji w GUI zatęskniłem za tym co najbardziej lubię w OpenWrt – możliwością instalacji wybranych pakietów – a mówiąc językiem użytkowników DD-WRT za możliwością instalacji optware 🙂
Przygotowanie sprzętu pod instalację Optware
Oprócz samego routera działającego pod kontrolą DD-WRT potrzebny nam będzie jakiś dysk USB lub pendrive. Będziemy musieli podzielić go na partycje. Najlepiej zrobić to z poziomu desktopowego Linuksa, przykładowo w programie GParted. Podział partycji jaki sam stosuję i Wam proponuję zaczerpnąłem od Vargaleksa:
- Partycja Swap – 128 MB,
- Partycja Optware na ext4 – 512 MB,
- Partycja Data – cała reszta przeznaczona na dane.
Tak przygotowany dysk USB / pendrive podłączamy do routera. I przechodzimy do konfiguracji samego routera, gdzie na zakładce Services -> USB włączamy:
- Core USB Support
- USB Storage Support
- Automatic Drive Mount
Po czym na zakładce Administration -> Management klikamy Reboot Router.
Po ponownym zalogowaniu na zakładce Services -> USB powinniśmy stwierdzić, że partycje zostały automatycznie zamontowane.
Najważniejsze dla informacje znajdują się na dole strony, a są to:
- /dev/sda1 mounted to swap
- /dev/sda2 mounted to /opt
- /dev/sda3 mounted to /tmp/mnt/sda3
Dysk USB / pendrive zamontował się zatem prawidłowo.
Instalacja Optware
Dalsza część opisu bazuje na tym tutorialu. Okazało się jednak, że nie mogłem ślepo za nim podążać – pojawiły się błędy. Tak zaczęły się eksperymenty, które doprowadziły do powstania poprawionego (pozbawionego błędów) i uproszczonego (pozbawionego niepotrzebnych kroków) opisu instalacji optware w DD-WRT.
Logujemy się do routera przez SSH i wykonujemy:
1 2 3 4 5 |
touch /opt/optware.enable cp -a /etc/. /opt/etc cp -a /tmp/root/. /opt/root mount -o bind /opt/etc /etc mount -o bind /opt/root /tmp/root |
Pierwsza z komend utworzy plik, po którym będzie rozpoznawana partycja Optware
. Kolejne przeniosą lokalizację katalogów /etc
i /tmp/root
(katalog domowy roota) na partycję Optware
.
Zmodyfikujemy plik konfiguracyjny ipkg
, co pozwoli nam na zainstalowanie menadżera pakietów opkg
. opkg
jest forkiem ipkg
i w całości go zastępuje. Będzie nam służył do ściągania i instalacji pakietów OpenWrt, pilnując przy tym zależności. W dalszej części tutoriala zwróć uwagę na architekturę routera. Poniższy opis dotyczy routera TP-Link TL-WDR4900 zbudowanego na platformie Freescale MPC85xx, stąd mpc85xx
w nazwach plików i katalogów, jeśli twój router zbudowany jest na innej architekturze, pamiętaj o zmianie nazw. Pewnie najczęściej będziecie to zmiana na ar71xx
🙂 Pamiętajcie także o zmianie wersji pakietów na aktualne.
1 2 3 4 5 6 |
sed -i 's%dest root.*%dest root /opt%g' /etc/ipkg.conf sed -i 's%dest ram.*%dest ram /opt/tmp%g' /etc/ipkg.conf cd /opt wget http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/base/opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_mpc85xx.ipk ipkg install opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_mpc85xx.ipk rm opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_mpc85xx.ipk |
Podczas instalacji opkg
powinniśmy zobaczyć taki komunikat:
1 2 3 4 5 6 7 8 9 10 |
root@DD-WRT:/opt# ipkg install opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_mpc85xx.ipk ERROR: File not found: //usr/local/lib/ipkg/lists/whiterussian You probably want to run `ipkg update' ERROR: File not found: //usr/local/lib/ipkg/lists/non-free You probably want to run `ipkg update' ERROR: File not found: //usr/local/lib/ipkg/lists/backports You probably want to run `ipkg update' /bin/ipkg: line 1184: sort: not found Unpacking opkg...Done. Configuring opkg...Done. |
To był pierwszy i ostatni raz kiedy musieliśmy użyć menadżera pakietów ipkg
, od tej chili posługujemy się już tylko opkg
. Nie przejmujemy się powyższymi błędami, zaraz je naprawimy, zgodnie z resztą z powyższą sugestią.
Zmodyfikujemy zatem plik konfiguracyjny opkg
oraz uaktualnimy listę dostępnych pakietów OpenWrt:
1 2 3 4 5 6 |
sed -i 's%dest root.*%dest root /opt%g' /etc/opkg.conf sed -i 's%dest ram.*%dest ram /opt/tmp%g' /etc/opkg.conf sed -i 's%lists_dir ext.*%lists_dir ext /opt/var/opkg-lists%g' /etc/opkg.conf echo 'src/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/packages' >> /etc/opkg.conf echo 'src/gz barrier_breaker_oldpackages http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/oldpackages' >> /etc/opkg.conf opkg update |
Powinniśmy zobaczyć:
1 2 3 4 5 6 7 8 9 |
root@DD-WRT:/opt# opkg update Downloading http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/base/Packages.gz. Updated list of available packages in /opt/var/opkg-lists/barrier_breaker_base. Downloading http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/luci/Packages.gz. Updated list of available packages in /opt/var/opkg-lists/barrier_breaker_luci. Downloading http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/packages/Packages.gz. Updated list of available packages in /opt/var/opkg-lists/barrier_breaker_packages. Downloading http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/oldpackages/Packages.gz. Updated list of available packages in /opt/var/opkg-lists/barrier_breaker_oldpackages. |
Wcześniej napisałem, że menadżer pakietów opkg
dba o zależności, ale jest od tego wyjątek – standardową bibliotekę języka C musimy zainstalować ręcznie:
1 2 3 |
wget http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/base/libc_0.9.33.2-1_mpc85xx.ipk opkg install libc_0.9.33.2-1_mpc85xx.ipk rm libc_0.9.33.2-1_mpc85xx.ipk |
O prawidłowym przebiegu instalacji świadczyć będzie następujący komunikat:
1 2 3 4 5 6 |
root@DD-WRT:/opt# opkg install libc_0.9.33.2-1_mpc85xx.ipk Installing libc (0.9.33.2-1) to root... Installing libgcc (4.8-linaro-1) to root... Downloading http://downloads.openwrt.org/barrier_breaker/14.07/mpc85xx/generic/packages/base/libgcc_4.8-linaro-1_mpc85xx.ipk. Configuring libgcc. Configuring libc. |
Na koniec musimy jeszcze przejść na zakładkę Administration -> Commands, wkleić poniższy skrypt startowy:
1 2 3 4 5 |
#!/bin/ash if [ -f /opt/optware.enable ]; then mount -o bind /opt/etc /etc mount -o bind /opt/root /tmp/root fi |
a następnie kliknąć Save Startup.
Skrypt ten sprawdza obecność partycji Optware, po czym montuje odpowiednie katalogi z tejże partycji pod /etc
i /tmp/root
(katalog domowy roota).
Ostatni raz przechodzimy na zakładkę Administration -> Management, gdzie klikamy Reboot Router. Po restarcie logujemy się przez SSH, gdzie możemy sprawdzić listę dostępnych pakietów OpenWrt:
1 |
opkg list | more |
czy zainstalować któryś z nich:
1 |
opkg install coreutils-sort |