Pull to refresh

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

Котэ, Одминь, Шрёдер © БОР
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.