Установка дистрибутива Debian на маршрутизатор ASUS WL-500W
Собственно приступим. Для установки дистрибутива Debian на маршрутизатор, нам понадобиться:
1) Маршрутизатор ASUS WL-500W;
2) USB-флешка на 4 Гигабайта;
3) Любой дистрибутив LINUX, но предпочтительно использовать дистрибутив Debian Lenny или Squeeze;
4) Безлимитный интернет;
5) Терпение.
Дальше я разбил всё на три этапа.
Этап 1. Сборка и установка прошивки OpenWRT.
Суть этапа заключается в правильной настройке ядра, модулей и дальнейшая сборка прошивки OpenWRT для нашего маршрутизатора. Большая часть этого этапа проходит не под «суперпользователем», для этого требуется обычный пользователь в вашей системе. Для сборки и установки прошивки OpenWRT, я использовал дистрибутив Debian i386, но можно использовать различные архитектуры, т.к. OpenWRT использует свой инструмент кросс-компиляции.
Итак, проверим, установлены ли у вас все пакеты для сборки прошивки. Выполним следующие команды:
$ sudo apt-get update
$ sudo apt-get install tftp subversion make unzip flex patch autoconf bison zlib1g-dev libncurses5-dev gawk g++ bzip2 python
Этап 1.2. Скачивание исходного кода OpenWRT.
$ mkdir /home//debwrt
$ cd /home//debwrt
$ svn checkout svn://svn.openwrt.org/openwrt/branches/backfire
На момент написания топика последняя версия прошивки была 26803.
Этап 1.3. Сборка OpenWRT и BusyBox.
Сейчас выполним настройку прошивки OpenWRT и BusyBox:
$ cd backfire
$ wget -O .config «http://dl.dropbox.com/u/21316076/DebWRT/OpenWRT/config/config-26803»
Запускаем процесс сборки прошивки.
Нажать CTRL-C когда на дисплее отобразиться строка:
make[3] -C target/linux compile
это приостановит процесс сборки ядра прошивки OpenWRT для нашего маршрутизатора и скопируем заранее подготовленный файл настроек в папку ядра:
$ cd build_dir/linux-brcm47xx/linux-2.6.32.27/
$ wget -O .config «http://dl.dropbox.com/u/21316076/DebWRT/OpenWRT/config/kconfig-26803»
$ cd ../../../
$ make
и продолжим дальше процесс сборки прошивки. Приостановление процесса сборки нужно было для того, чтобы включить некоторые опции в конфигурации ядра, а именно:
После сборки нужно скопировать модули ядра, в дальнейшем они нам понадобятся для интеграции дистрибутива Debian и прошивки OpenWRT:
$ mkdir ../modules
$ cd build_dir/linux-brcm47xx/linux-2.6.32.27/
$ ARCH=mips INSTALL_MOD_PATH=../../../../modules make modules_install
$ cd ../../../../modules/
$ fakeroot tar cvf ../modules.tar .
И наконец, скопировать образ прошивки в папку:
$ cd ..
$ mkdir build
$ cp -pi backfire/bin/brcm47xx/openwrt-brcm47xx-squashfs.trx build/
Этап 1.4. Загрузка прошивки на маршрутизатор ASUS WL-500W.
Настраиваем свой сетевой интерфейс на ip адрес 192.168.1.2:
sudo ifconfig ethx inet 192.168.1.1 netmask 255.255.255.0
Для чистой и правильно загрузки прошивки OpenWRT, нужно выполнить так называемую операцию 30/30/30. Она выполняется следующим образом:
- Подключаем питание к маршрутизатору
- Зажимаем кнопку «Reset» и ждем 30 секунд
- По истечению 30 секунд, отключаем питание маршрутизатора не отпуская кнопку «Reset» и держим ещё 30 секунд
- После 30 секунд снова подключаем питание к маршрутизатору не отпуская кнопку «Reset» и держим ещё 30 секунд
На последних 30 секундах, диод питания начнет мигать, это означает, что маршрутизатор перешел в режим перепрошивки по протоколу tftp. Это операция выполняется, чтобы получить доступ к перепрошивки nvram. Подключаем витую пару в любой из LAN портов маршрутизатора. И начинаем перепрошивать.
Первый файл, который мы отправим маршрутизатору, очистит оперативную память nvram:
$ wget «http://dl.dropbox.com/u/21316076/DebWRT/nvram%20recover/wl500g-clear-nvram.trx»
$ tftp 192.168.1.1
tftp> binary
tftp> trace
tftp> put wl500g-clear-nvram.trx
После того как файл будет загружен на маршрутизатор, нужно выждать 3 минуты.
Отключаем питание маршрутизатора и выходим из клиента tftp. Повторяем операцию 30/30/30 и загружаем второй файл для восстановления начального nvram:
$ wget «http://dl.dropbox.com/u/21316076/DebWRT/nvram%20recover/wl500g-recover.trx»
$ tftp 192.168.1.1
tftp> binary
tftp> trace
tftp> put wl500g-recover.trx
Отключаем питание маршрутизатора и выходим из клиента tftp. Повторяем операцию 30/30/30 и загружаем образ прошивки OpenWRT:
$ cd build/
$ tftp 192.168.1.1
tftp> binary
tftp> trace
tftp> openwrt-brcm47xx-squashfs.trx
Ждем 5 минут, за это время прошивка запишется в nvram. Отключаем питание маршрутизатора. Собственно на этом первый этап заканчивается.
Этап 2. Установка Debian MIPS на USB.
Этап 2.1. Установка базовой системы Debian MIPS.
Скачаем ядро и initrd системы:
$ wget «http://dl.dropbox.com/u/21316076/DebWRT/Debian/vmlinux-2.6.26-2-4kc-malta»
$ wget «http://dl.dropbox.com/u/21316076/DebWRT/Debian/initrd.gz»
Подключаем USB накопитель и смотрим примонтировался ли он в системе. Если устройство примонтировано, то размонтируйте его. Далее создадим виртуальную машину с архитектурой MIPS и подключим сразу USB накопитель:
$ sudo qemu-system-mipsel -M malta -m 256 -nographic -no-reboot -hda /dev/sdX -kernel vmlinux-2.6.26-2-4kc-malta -initrd initrd.gz
где — /dev/sdX ваш USB накопитель.
Далее будет запущен процесс стандартной установки Debian в терминальном режиме. Собственно указываем все как обычно до операции по разметке диска. USB накопитель нужно разбить на два раздела:
1-раздел -> Create a new partition -> 3.0 GB -> Primary -> Beginning -> Mount options выбрать «noatime» -> Done setting up the partition.
2-раздел -> Create a new partition -> 1.0 GB -> Primary -> Beginning -> Use as выбрать «swap area» -> Done setting up the partition.
Дальше выбираем опцию «Finish partitioning and write changes to disk» и соглашаемся с внесением изменений в разметку нашего накопителя. Выберите устанавливаемое ПО на свой вкус, но я оставлял только стандартный набор.
При появлении предупреждения «The kernel version running is the same as the one being installed.» и «No boot loader installed.» просто продолжаем установку. Все установится корректно!
Этап 2.2. Подготовка операционной системы Debian MIPS для интеграции с прошивкой OpenWRT.
После завершении установки дистрибутива, созданная виртуальная машина QEMU выключиться. На этом этапе нужно проверить возможно ли чтение файловой системы накопителя. Отключите накопитель и снова подключите, если он примонтирован, то размонтируйте.
Проверяем накопитель на возможность чтения:
$ sudo tune2fs -c0 -i0 /dev/sdX1
$ sudo mount /dev/sdX1 /mnt
$ cd /mnt
Скопируем подготовленные модули от прошивки OpenWRT:
$ sudo tar xvpf /home//debwrt/modules.tar
Копируем утилиту управления свитчем в нашем маршрутизаторе:
$ sudo wget «http://dl.dropbox.com/u/21316076/DebWRT/Debian/robocfg»
$ sudo cp -pi /mnt/robocfg usr/local/sbin
$ sudo chown root:root usr/local/sbin/robocfg
$ sudo chmod 755 usr/local/sbin/robocfg
Создадим директорию для root прошивки OpenWRT. Чтобы упростить задачу замены директорий, поместим скрипт «init» в папку root на USB накопителе.
$ sudo mkdir initrd
$ cd root/
$ sudo wget «http://dl.dropbox.com/u/21316076/DebWRT/Debian/init»
$ sudo chmod +x init
Изменим содержимое файла fstab:
Копируем данный контекст и производим замену старого:
# /etc/fstab: static file system information.
#
# proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro,noatime 0 1
/dev/sda2 none swap sw 0 0
ramdisk /var/run tmpfs defaults,size=163840 0 2
ramdisk /var/lock tmpfs defaults,size=163840 0 2
ramdisk /etc/network/run tmpfs defaults,mode=0755,size=16384 0 2
ramdisk /tmp tmpfs defaults 0 2
Далее настроим сетевые интерфейсы. Интерфейс eth0 будет для LAN, а eth1 соответственно для WAN.
$ sudo nano etc/network/interfaces
Копируем данный контекст и производим замену старого:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
pre-up ifconfig eth0 up
address 192.168.1.1
netmask 255.255.255.0
up /usr/local/sbin/robocfg switch disable vlans disable reset vlan 0 ports «4 5u» vlan 1 ports «0 1 2 3 4 5u» port 0 state enabled stp none switch enable
allow-hotplug eth1
iface eth1 inet dhcp
Данное задание, включит диод питания по завершению полной загрузки системы:
# Power LED
@reboot root echo 1 >/proc/diag/led/power
Размонтируем USB накопитель и осуществим переход к файлам ядра и init:
Установим сервер OpenSSH на дистрибутив Debian MIPS. Для этого создадим виртуальную машину в QEMU:
$ cd debwrt
$ sudo qemu-system-mipsel -M malta -m 256 -nographic -no-reboot -hda /dev/sdX -kernel vmlinux-2.6.26-2-4kc-malta -append root=/dev/hda1 -net nic,vlan=0 -net user,vlan=0 -net nic,vlan=1 -net user,vlan=1
# aptitude install —without-recommends openssh-server
# shutdown -h now
После выключения, убедимся в том, что все данные записаны:
Отключаем USB накопитель. На этом 2-ой этап заканчивается. Дальше будет производиться интеграция дистрибутива Debian с прошивкой OpenWRT.
Этап 3. Интеграция дистрибутива Debian с прошивкой OpenWRT.
Этап 3.1. Подготовка прошивки OpenWRT к корректной загрузке.
Подключаем питание к маршрутизатору и дожидаемся когда прошивка OpenWRT полностью загрузиться. Изначально диод питания отключиться, но вскоре снова включится, что будет означать о полной загрузке маршрутизатора.
Подключимся к маршрутизатору и посмотрим, если ли подключенные SCSI устройства:
$ telnet 192.168.1.1
root@OpenWrt:/# ls -ltr /dev/sd*
Если ничего не вывелось, значит все в хорошо и все идет по плану. Далее подключим USB накопитель и проверим как он подключился:
root@OpenWrt:/# ls -ltr /dev/sd*
brw-r—r— 1 root root 8, 0 Jan 1 00:02 /dev/sda
brw-r—r— 1 root root 8, 2 Jan 1 00:02 /dev/sda2
brw-r—r— 1 root root 8, 1 Jan 1 00:02 /dev/sda1
Теперь примонтируем раздел USB накопителя и скопируем скрипт «init»:
root@OpenWrt:/# mount -o ro /dev/sda1 /mnt
root@OpenWrt:/# ls -l /sbin/init
lrwxrwxrwx 1 root root 14 Apr 28 2011 /sbin/init -> ../bin/busybox
root@OpenWrt:/# rm /sbin/init
root@OpenWrt:/# cp -pi /mnt/root/init /sbin
root@OpenWrt:/# ls -l /sbin/init
-rwxr-xr-x 1 root root 1479 Apr 28 2011 /sbin/init
root@OpenWrt:/# umount /mnt
root@OpenWrt:/# sync
root@OpenWrt:/# sync
root@OpenWrt:/# reboot
Этап 3.2. Конфигурация оборудования в дистрибутиве Debian.
В данный момент маршрутизатор начнет загружать дистрибутив Debian, но после загрузки сеть будет не доступна. подправим . Дождемся пока маршрутизатор загрузиться до конца и операции I\O накопителя буду остановлены. После того как все загружено, отключаем USB накопитель и подключаем к компьютеру. Далее примонтируем корневой раздел накопителя и отредактируем настройки сетевых интерфейсов для корректной работы. Открываем файл /mnt/var/log/kern.log и ищем eth0. Ищем вот эти строки:
udev: renamed network interface eth0 to eth2
udev: renamed network interface eth1 to eth3
После того как нашли, изменим файл настроек сетевых интерфейсов в менеджере устройств:
изменив eth2 интерфейс на eth0 и соответственно eth3 на eth1. Сохраняем изменения и размонтируем накопитель:
$ sudo umount /mnt
$ sync
$ sync
Извлекаем накопитель и отключаем маршрутизатор.
Этап 3.3. Тестируем и пользуемся.
Подключим наш подготовленный USB накопитель к маршрутизатору и включим его. Дождемся когда включится диод питания. Пробуем подключиться по SSH протоколу:
На этом этапе закончена установка и настройка нашего маршрутизатора ASUS WL-500W с дистрибутивом Debian на борту.