Как стать автором
Обновить

Dir-300 NRU B7 под соусом OpenWRT с USB. Внимание трафик

В статье пойдет речь о установке OpenWRT и дальнейшей пляске с бубном (да, да, да, ежемесячно или даже еженедельно кто-то пишет про установку OpenWRT, но у каждого возникают свои заморочки).

Итак, что мы имеем:
  • Dir-300 NRU B7;
  • Желание прикрутить USB 2.0;
  • Желание пощупать OpenWRT.

Добро пожаловать под кат.

Все началось с изучения возможностей DIR-300 и его последующей модернизации. USB разведено на плате, но отсутствуют элементы. Руки вроде прямые, но трясутся, паяльником орудовать малость умею. OpenWRT устанавливается и работает без каких-либо проблем. OpenWrt — Linux, пусть и урезанный, значит можно и в нем поднять немного знаний в *nix среде.

Фото пациента
image

image

1. Начнем с USB


Почитав даташит на чип RT-3050, понял, что можно запустить USB 2.0, но для этого нужно впаять резистор на 8,2 КоМ. Серфинг привел на статью Установка антенны и распайка USB. Однако в ней не было точного описания техпроцесса и возможных альтернатив решения поставленной цели.

В комментариях появилась ссылка на подробный техпроцесс по прикручиванию USB. Изучив обе статьи, я приступил к паяльным процедурам.

Понадобилось:
  • Конденсатор — 6.3V 1000мF
  • Резистор — 8,2 КоМ
  • Керамический конденсатор подходящий по размеру в место пайки.
  • Резистор 3шт. — 0 оМ (перемычка) — обошелся свинцовыми соплями.

Места пайки элементов видно на фото (фото из статьи ''Прикручиваем USB'')
image

image

Моя реализация
image

image

image

image

(Гуру пайки и мастера работы с фотоаппаратурой, попрошу без комментариев о том, какой автор криворук и прочее, трясущиеся руки с детства и подозрение на Паркенсон думаю достаточный довод не язвить.)

Запаяли, закрутили,
Скотчем порт мы прилепили,
Прошу от кинетик загрузили,
Радость от процесса получили.

Итог: залил прошивку от кинетика 3г (точно не помню, но какое-то зюкселевкое бррр), через аварийный режим.
Зажать reset и подключить питание, роутер загрузиться в аварийном режиме и будет доступен или по 192.168.0.1 или 192.168.1.1
Будет кнопка выбора файла прошивки. Прошивку будет заливать без проверки на валидность и прочее, будьте бдительны


Порадовался успеху и новой прошивке, но понял что надо лить OpenWRT.

Вот тут, как говориться, пришел медведь. Запускаю роутер в режим аварийной загрузки, а фиг там — прошивка изменила бут и не грузит предыдущий бутлоадер. Ну, думаю, приехал.

Побродив по форумам, понял, что зуксель, как и циска, любит tftp для восстановления прошивки, причем без проверки на содержимое. Устанавливаю и запускаю tftp, включаю роутер, и в окне программы начинает сыпаться сообщение о необходимости файла "...bin". Хорошо, беру прошивку OpenWRT с сайта «openwrt-15.05-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin» переименовываю в нужный файл для восстановления, кидаю в папку tftp, перегружаю роутер в аварийный режим и — вуаля: скушал прошивку, перегрузился, и Люся радостно отозвалась на 192.168.1.1.

Полазив по настройкам и почитав форумы, понял, что мне надо ставить пакеты для поддержки USB. С радостью полез в «Программное обеспечение» и понял что кердык: места хватает только для «block mount».

2. OpenWRT, готовое решение, сборка из исходников и танцы с бубном для установки забытого


Почитав многочисленные статьи про установку OpenWRT и сборку из исходников, понял, что для того, чтобы запустить USB на DIR-300, желательно собрать прошивку из исходников, убрав все лишнее. И если я прикручиваю USB, то есть смысл сразу перенести систему на флешку.

За основу взяты статьи: раз, два и три.

Поставил виртуалку с убунтой 12, обновил репозиторий и понеслась.

Сборка из исходников
sudo apt-get install subversion git
sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk libssl-dev

Дальше стал выбор ядра, я выбрал ломателя барьеров.
svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker wrt

cd ~/wrt
./scripts/feeds update -a
./scripts/feeds install -a

~/wrt$ make prereq

make menuconfig

Конфигурируем прошивку под себя:

Target System — Ralink RT288x/RT3xxx
Subtarget — RT3x5x/RT5350 based boards
Target Profile — Default Profile

Далее выбираем нужные модули и плюшки.
Global build settings
[ ] Enable IPv6 support in packages

Base system --->
<*> block-mount

Base system
busybox
Networking utilities
[ ] Enabled IPv6 support

Kernel modules
Netfilter Extensions
[ ]kmod-ip6tables

Kernel modules
Network support
[ ] kmod-ipv6

Kernel modules --->
USB Support --->
<*> kmod-usb-core
<*> kmod-usb-ohci
<*> kmod-usb-storage
<*> kmod-usb-usb2

Kernel modules --->
Filesystems --->
<*> kmod-fs-ext4

Libraries
Firewall
< > libip6tc

LuCI --->
1. Collections --->
<*> luci
5. Translations --->
<*> luci-i18n-russian

Network --->
<*> ppp
<*> ppp-mod-pppoe
<*> ppp-mod-pppol2tp
<*> ppp-mod-pptp

Network
< > 6relayd
< > odhcp6c

Нажимаем Exit, сохраняем конфигурацию и собираем прошивку.

make V=99
(Если будете собирать под локально установленной убунтой можно добавить параметр "-j3" если у вас 4 ядра на проце, ускорит процесс сборки «make -j3 V=99»)

Как сборка будет окончена, лезем в "~/wrt/bin" и ищем «openwrt-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin». Заливаем прошивку и радуемся.

Подключаем флешку и настраиваем загрузку OpenWRT с флешки
Итак, прошили «openwrt-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin». Подготавливаем флешку: из убунты форматируем и приводим в к следующему виду (можно и в акронисе, на вкус и цвет фломастеры разные):

image

Далее подключаем флешку к роутеру, подключаемся по ssh и вводим «dmesg | grep sda». Должно вывести следующее:
[ 5069.910000] sd 0:0:0:0: [sda] No Caching mode page present
[ 5069.920000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 5069.920000] sda: sda1 sda2 sda3
[ 5069.930000] sd 0:0:0:0: [sda] No Caching mode page present
[ 5069.940000] sd 0:0:0:0: [sda] Assuming drive cache: write through

Выполняем:
block detect > /etc/config/fstab

Приводим fstab к следующему виду:
root@OpenWrt:~# cat /etc/config//fstab

config global
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'

config mount
option uuid «здесь ваш UUID»
option device '/dev/sda1'
option fstype 'ext4'
option options 'rw,sync'
option enabled '1'
option is_rootfs '1'
option enabled_fsck '0'
option target '/overlay'

config mount
option target '/home'
option uuid «здесь ваш UUID»
option device '/dev/sda2'
option fstype 'ext4'
option options 'rw,sync'
option enabled '1'
option enabled_fsck '0'

config swap
option uuid «здесь ваш UUID»
option enabled '1'

Используя UUID, мы точно будем уверенны что загрузимся с нашей флешки, если подключим 2 флешку или внешний винт и прочее.

После, осуществляем процесс переноса системы на флешку.
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
mkdir /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf — . | tar -C /mnt/sda1 -xvf — sync; umount /mnt/sda1
umount /tmp/cproot

Перегружаем роутер и проверяем все ли правильно примонтировалось
df -h

Filesystem Size Used Available Use% Mounted on
rootfs 476.2M 16.2M 431.0M 4% /
/dev/root 2.5M 2.5M 0 100% /rom
tmpfs 14.4M 628.0K 13.8M 4% /tmp
/dev/sda1 476.2M 16.2M 431.0M 4% /overlay
overlayfs:/overlay 476.2M 16.2M 431.0M 4% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda2 368.7M 2.0M 343.2M 1% /home

У меня все прошло без геморроя, так что если у вас возникли проблемы и роутер не грузится, вытащите флешку, отформатируйте и попробуйте по новой.
Если необходимо все сбросить на ноль, то вводим:
mtd -r erase rootfs_data

Радуемся: система стартует с флешки и теперь можно ставить хоть какие пакеты, не задумываясь о нехватке места.

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

Все вышесказанное — ИМХО.

Танцы с бубном и монтируем шары из сети
Захотелось, чтобы OpenWRT могла использовать сетевые шары, ну так, на всякий случай. Почитав статью из Вики проекта, решил установить следующие пакеты:
opkg install kmod-fs-cifs kmod-nls-utf8 kmod-nls-base kmod-crypto-hmac kmod-crypto-md5 kmod-crypto-misc cifsmount

Но система меня послала, начав ругаться на несоответствие ядра пакета и ядра установленной OpenWRT. Выходом стала пересборка прошивки, включив необходимые пакеты. Сделал и приуныл. Прошивка весила практически 5 метров, она физически не помещалась в роутер т.к. там 4 метра. Конечно, можно было перепаять флеш, но у меня нету под рукой ни программатора, ни нужной флешки, ни паяльной станции. Была мысль распаковать прошивку сразу на флешку, но отказался от этой идеи, ибо руки болели от постукивания в бубен. Но главное — после компиляции прошивки на 5 метров пакеты уже были собраны и лежали тихо-мирно в папке «packages». Скопировал нужные пакеты на флешку и прописал:
opkg install /home/kmod-crypto-misc_3.10.49-1_ramips_24kec

И тут меня ждал облом, установщик ругался на неправильную контрольную сумму. Курение мануалов и форумов дало следующее решение:
opkg install --nodeps --force-checksum /home/kmod-crypto-misc_3.10.49-1_ramips_24kec

Ура пакет установился без каких-либо ошибок. Пакеты, которые нужны для работы cifs:
kmod-fs-cifs — поддержка файловой системы
kmod-nls-utf8 — поддержка кодировки
kmod-crypto-misc — то же за чем-то надо )))
cifsmount — набор утилит для работы через mount -t cifs (без него у меня жаловался на неправильные аргументы)

Данные пакеты уже были установлены в системе, видимо, kmod-fs-ext4 их подтянул как зависимости:

kmod-nls-base
kmod-crypto-hmac
kmod-crypto-md5

Проверяем:
mount -t cifs -o rw,guest,iocharset=utf8 //192.168.0.2/d /mnt/h0mikus_D

ls -l /mnt/h0mikus_D

root@OpenWrt:~# ls -l /mnt/h0mikus_D/
drwxr-xr-x 0 root root 0 Jun 13 2015 !!!PAP5450_firmware_update
drwxr-xr-x 0 root root 0 Dec 20 19:52 !!!iPhone
drwxr-xr-x 0 root root 0 Dec 2 21:25 !!!temp_downloads
drwxr-xr-x 0 root root 0 Nov 16 23:04 $RECYCLE.BIN
drwxr-xr-x 0 root root 0 Dec 26 01:41 111hgk
drwxr-xr-x 0 root root 0 Jun 13 2015 Cert
-rwxr-xr-x 0 root root 3552 Aug 25 2013 Chizh — Bombardirovschiki intro.gp5
drwxr-xr-x 0 root root 0 Oct 14 12:54 Cisco Packet Tracer 6.2sv
drwxr-xr-x 0 root root 0 Dec 13 17:56 Games
drwxr-xr-x 0 root root 0 Nov 17 20:36 Install
drwxr-xr-x 0 root root 0 Jun 13 2015 System Volume Information
drwxr-xr-x 0 root root 0 Dec 3 11:33 VirtualBox
drwxr-xr-x 0 root root 0 Dec 25 03:06 _acestream_cache_
drwxr-xr-x 0 root root 0 Dec 4 19:46 backup
drwxr-xr-x 0 root root 0 Oct 11 13:41 downloads
drwxr-xr-x 0 root root 0 Sep 5 19:59 old work
-rwxr-xr-x 0 root root 3407876 Dec 2 18:09 openwrt-15.05-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin
-rwxr-xr-x 0 root root 3670020 Dec 25 20:59 openwrt-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin
drwxr-xr-x 0 root root 0 Nov 27 18:07 study
-rwxr-xr-x 0 root root 3407876 Dec 25 00:36 work_openwrt-ramips-rt305x-dir-300-b7-squashfs-sysupgrade.bin
drwxr-xr-x 0 root root 0 Oct 22 13:30 Диета
drwxr-xr-x 0 root root 0 Jun 13 2015 Диплом
-rwxr-xr-x 0 root root 3149509277 Jan 10 2011 Карьерный рост.mp4
drwxr-xr-x 0 root root 0 Jun 13 2015 Мое
dr-xr-xr-x 0 root root 0 Jun 13 2015 Мои Документы
drwxr-xr-x 0 root root 0 Jun 13 2015 Полезное
drwxr-xr-x 0 root root 0 Nov 14 12:31 Прощивка ПРИМ-88КТ

Русский понимает, и это радует. Но остался вопрос: когда роутер ребутнется, то шара не примонтируется. Почитав форумы, думал прописать в fstab конструкцию монтирования шары, но вспомнил что Linux грузит файловые системы и прочее раньше сетевых интерфейсов. В итоге «rc.local» решил данную проблему.
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

mount -t cifs -o rw,guest,iocharset=utf8 //192.168.0.2/d /mnt/h0mikus_D/

exit 0

</spoiler
На этом все. Статья писалась в помощь для незнающих и как памятка для себя. Если где-то есть ошибки по тексту и прочее, тапками не кидаться, а ткнуть носом. Если стиль написания кривой и читать невозможно, подскажите как правильнее.

Котэ, Одминь, Шрёдер © БОР
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.