Pull to refresh

Установка дистрибутива Debian на маршрутизатор ASUS WL-500W

Привет, Хабражитель!

Сегодня в топике я хочу поделиться своим опытом установки дистрибутива Debian на маршрутизатор ASUS WL-500W с MIPS архитектурой процессора.


Собственно приступим. Для установки дистрибутива 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"


Запускаем процесс сборки прошивки.

$ make

Нажать 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


и продолжим дальше процесс сборки прошивки. Приостановление процесса сборки нужно было для того, чтобы включить некоторые опции в конфигурации ядра, а именно:

  • Эмульяцию FPU
  • IP туннелирование


После сборки нужно скопировать модули ядра, в дальнейшем они нам понадобятся для интеграции дистрибутива 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. Она выполняется следующим образом:

  1. Подключаем питание к маршрутизатору
  2. Зажимаем кнопку «Reset» и ждем 30 секунд
  3. По истечению 30 секунд, отключаем питание маршрутизатора не отпуская кнопку «Reset» и держим ещё 30 секунд
  4. После 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


Ждем 5 минут.

Отключаем питание маршрутизатора и выходим из клиента 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"


Установим эмулятор QEMU:

$ sudo apt-get install qemu


Подключаем 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:

$ cd ..
$ nano etc/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


Создадим задание в cron'e:

$ sudo nano etc/cron.d/local

Данное задание, включит диод питания по завершению полной загрузки системы:

# Power LED
@reboot root echo 1 >/proc/diag/led/power


Размонтируем USB накопитель и осуществим переход к файлам ядра и init:

$ cd ~
$ sudo umount /mnt


Установим сервер 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


После выключения, убедимся в том, что все данные записаны:

$ sync
$ sync


Отключаем 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


После того как нашли, изменим файл настроек сетевых интерфейсов в менеджере устройств:

$ sudo /mnt/etc/udev/rules.d/70-persistent-net.rules

изменив eth2 интерфейс на eth0 и соответственно eth3 на eth1. Сохраняем изменения и размонтируем накопитель:

$ sudo umount /mnt
$ sync
$ sync


Извлекаем накопитель и отключаем маршрутизатор.

Этап 3.3. Тестируем и пользуемся.


Подключим наш подготовленный USB накопитель к маршрутизатору и включим его. Дождемся когда включится диод питания. Пробуем подключиться по SSH протоколу:

$ sudo ssh root@192.168.1.1


На этом этапе закончена установка и настройка нашего маршрутизатора ASUS WL-500W с дистрибутивом Debian на борту.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.