суббота, 8 января 2011 г.

Установка программного обеспечения на NETGEAR WNDR3700 (прикручиваем opkg)

Итак, DD-WRT установлен, железка настроена, а всё равно чего-то не хватает, у нас же простаивает 680 мегагерцовый процессор и 64 мегабайта оперативной памяти.  Плюс в стандартной прошивке отсутствует  возможность использовать USB порт в качестве принтсервера,  и многое-многое другое...


Для начала давайте определимся,  куда мы будем устанавливать дополнительное программное обеспечение. DD-WRT предлогает нам два варианта - установка в свободное место на встроенной флеш-памяти (JFFS2 раздел), либо на внешний накопитель (жесткий диск, флешку) подключенный к USB порту устройства.  К сожалению места на встроенной флеш-памяти нам не остается совсем, свободно всего 124 кб, а это очень  мало для наших запросов
так что придется задействовать под это дело старинную двухгиговую флешку (вообще-то нам подошла бы флешка и гораздо более скромного объема, но какая есть, такая есть)

1. Размечаем на флешке разделы и форматируем их.

по хорошему это надо было бы сделать средствами роутера, но..    в Firmware: DD-WRT v24-sp2 (12/24/10) std для WNDR3700 нет ни fdisk ни mke2fs  :o Найти и запустить fdisk, работающий на нашей системе не составило труда, а вот запустить e2fsprogs (а в частности mke2fs) у меня простым способом не получилось,  поэтому флешка была размечена под Windows с помощью Acronis Disk Director (есть еще куча способов разметить флешку в ext2, воспользуйтесь любым, который считаете наиболее простым для себя).

В итоге флешка была размечена следующим образом:


первый раздел 128Мб под своп (пока он особо не нужен, но возможно когда-нить и пригодится,  второй  раздел ext2 объемом 256Мб под устанавливаемый софт, и оставшееся место третьим разделом  ext2

.
Итак, флешка размечена на разделы и вставлена в роутер.  Теперь заходим в веб морду роутера в раздел Services/USB и выбираем Core USB Support / Enable, после этого выставляем основные настройки как на скриншоте ,



 нажимаем "Apply Settings" и перезагружаем роутер из веб морды Administration/Management и в самом низу Reboot Router.


2. Подключаемся к роутеру с помощью putty по ssh. 

Заходим в вебморду,  в раздел  Services/Services и устанавливаем настройки как на картинке
После этого жмем "Apply Settings"

Запускаем putty, настройки выставляем как на картинке
 нажимаем кнопку "Open"
login as: root
password: ваш_пароль_для_вебморды


вводим
insmod mbcache.ko
insmod ext2.ko
mount  -t ext2
/dev/sda2 /mnt

проверяем , как подмонтировался наш раздел для установки софта
df -h
видим что наш раздел примонтирован


Подключаем своп
mkswap /dev/sda1
swapon /dev/sda1

проверяем, что из этого вышло командой free


3.  Устанавливаем OPKG.

отключаем  jffs раздел, он нам больше не понадобится, для этого в вебморде заходим в раздел Administration/Management , отключаем JFFS2 Support и нажимаем "Apply Settings"

  Запускаем putty, логинимся и вводим:

cd /mnt
mkdir etc opt root
chmod 755 etc opt root  
mkdir opt/lib
chmod 755 opt/lib
cp -a /etc/* /mnt/etc/
mount -o bind /mnt/etc /etc
mount -o bind /mnt/opt /jffs

Скачиваем библиотеки (зеркало) для установки OPKG. Разархивируем их в папку lib у себя на жестком диске и запускаем WinSCP, вот с такими настройками (User Name - root , Password -  ваш_пароль_для_вебморды

Нажимаем "Login"

Программа при первом коннекте ругнется




Нажимаем "Update", и потом "Continue"

C помощи нее заливаем содержимое папки lib (приготовленной нами чуть выше) в папку /jffs/lib на роутере.


проверяем, все ли скорпировалось, для этого в putty (вы ведь еще ее не закрыли?) вводим
ls /jffs/lib
назначаем права залитым файлам
chmod a+x /jffs/lib/* 

теперь наконец-то можно приступить к установке OPKG
cd /tmp
wget http://downloads.openwrt.org/backfire/10.03.1-rc4/ar71xx/packages/opkg_576-1_ar71xx.ipk
ipkg install /tmp/opkg_576-1_ar71xx.ipk


на возникшие ошибки, типа "ERROR: File not found: //usr/local/lib/ipkg/lists/whiterussian You probably want to run `ipkg update' " не обращаем внимания

 создаем конфигурационный файл для установленного opkg
cat > /etc/opkg.conf << EOF
src/gz snapshots http://downloads.openwrt.org/backfire/10.03.1-rc4/ar71xx/packages/
dest root /opt
dest ram /tmp
lists_dir ext /tmp/var/opkg-lists
EOF

теперь осталось внести изменения в автозагрузку, чтобы при перезагрузке роутера остались все сделанные нами изменения

создаем скрипт, для запуска optware при загрузке роутера

cat > /mnt/optware.sh  << EOF
#!/bin/sh
 swapon /dev/sda1
mount -o bind /mnt/etc /etc
mount -o bind /mnt/root /tmp/root
mount -o bind /mnt/opt /opt
if [ -d /opt/usr ]; then
export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib'
export PATH='/opt/bin:/opt/usr/bin:/opt/sbin:/opt/usr/sbin:/bin:/sbin:/usr/sbin:/usr/bin'
else
exit
fi
EOF

делаем его запускаемым

chmod a+x /mnt/optware.sh

заходим в вебморду роутера, и выбираем  раздел Administration/Commands и в окошке Command Shell/Commands вводим
insmod mbcache.ko 
insmod ext2.ko
mount -t ext2 /dev/sda2 /mnt
/mnt/optware.sh
нажимаем Save Startup  и перезагружаем роутер



4.  Проверяем что у нас в итоге получилось
Запускаем putty, логинимся  и вводим
 mount
если все до этого сделано правильно, то результат  будет такой

вводим
 export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib'
export PATH='/opt/bin:/opt/usr/bin:/opt/sbin:/opt/usr/sbin:/bin:/sbin:/usr/sbin:/usr/bin'
opkg update

обновляем основные библиотеки и busybox
opkg install libc
opkg install libgcc
opkg install uclibcxx
opkg install libncurses
opkg install busybox


Cоздаем скрипт, который будет запускаться при каждом логине по ssh
cat > /mnt/root/.profile << EOF
export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib:/opt/usr/local/lib'
export PATH='/sbin:/opt/bin:/opt/usr/bin:/opt/sbin:/opt/usr/sbin:/bin:/usr/bin:/usr/sbin:/opt/usr/local/bin'
export PS1='\[\033[01;31m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
export TERMINFO='/opt/usr/share/terminfo'

export TERM="xterm"
export LANG='ru_RU.UTF-8'
EOF


Перелогиниваемся с помощью putty и проверяем что в итоге получилось, устанавливаем nano (довольно удобный текстовый редактор) и Midnight Commander
opkg update
opkg install nano
opkg install mc

когда все установится, набираем mc  и празднуем нашу первую маленькую победу


upd: 10.01.11
Только вчера написал отдельный пост то как установить ntfs-3g и примонтировать NTFS раздел, сегодня удалил её, oказывается ntfs-3g уже включен в прошивку и его не надо устанавливать (спасибо lpx1 за подсказку), делается это примерно так

insmod fuse.ko
ntfs-3g /dev/sdaX /opt/mnt

где X это порядковый номер раздела

20 комментариев:

  1. Привет.
    Хочу узнать, а для подключения HDD такие же манипуляции делать как и для флэшки ? да ?
    У меня просто сразу же задается вопрос как правильно разбить флэшку (HDD ) сейчас разбил флэшку но при подключение к ноуту у меня просит отформатировать ее, это правильно ?

    ОтветитьУдалить
  2. Homavi
    такие манипуляции можно делать и для жесткого диска. В программе в которой разбиваете диск на разделы надо еще и отформатировать разделы в нужную файловую систему. Винда скорее всего ругается на раздел под своп

    ОтветитьУдалить
  3. у меня при повторном введение первых пунктов выводит ошибку
    insmod: cannot insert '/lib/modules/2.6.34.7-svn15928/kernel/fs/mbcache.ko': File exists
    в чем проблема может быть ?

    ОтветитьУдалить
  4. Включили автомонтирование в веб/морде? тогда строчки
    insmod mbcache.ko
    insmod ext2.ko
    mount -t ext2 /dev/sda2 /mnt

    из Startup скрипта в вебморде можно убрать, и во втором шаге инструкции их тоже набирать не надо. Только точку монтирования в настройках вебморды поставьте в /mnt

    ОтветитьУдалить
  5. ага включил автомонтирование.
    кстати хотел узнать на счет того что у меня будет раздел под NTFS ?
    мне так же создавать 3 раздела ? своп, ext2 и NTFS ? да ?

    и после всех проделанных операций в твоей статье прописывать в конце этот скрипт ?
    insmod fuse.ko
    ntfs-3g /dev/sdaX /opt/mnt
    ?

    ОтветитьУдалить
  6. у меня еще вопрос в догонку к этому ))
    можно просто смонтировать автоматически раздел, без всяких прописи скриптов и сразу же прикрутить торрент ? или все же надо прописывать скрипты эти ??

    ОтветитьУдалить
  7. Homavi
    По поводу NTFS - да, можно создать третий раздел NTFS а не еxt2, и когда он будет нужен, монтировать его к любой папке командой
    ntfs-3g /dev/sdaX /папка , (где X- номер раздела на на флешке) перед этим надо будет загрузить модуль fuse.ko , он автоматически не загружается.
    Например у Вас это третий раздел и подмонитровать вы его хотите к папке /mnt/share тогда порядок действий будет такой:
    insmod fuse.ko
    ntfs-3g /dev/sda3 /mnt/share

    ОтветитьУдалить
  8. optware.sh не запускается после перезагрузки, при этом ручной запуск через putty прекрасно работает. Такое ощущение, что система запускает этот startup скрипт до монтирования флэшки в /mnt?!! Что можно сделать?

    ОтветитьУдалить
  9. что делать?
    отключить автомонитирование флешки в вебморде и монтировать ее Shell/Commands в Startup скрипте.. если это не помогает, попробовать добавить паузу например 2 секунды после команд монтирования (sleep 2), получится примерно так:

    insmod mbcache.ko
    insmod ext2.ko
    mount -t ext2 /dev/sda2 /mnt
    sleep 2
    /mnt/optware.sh

    ОтветитьУдалить
  10. сразу скажу, что эти строки:
    insmod mbcache.ko
    insmod ext2.ko
    mount -t ext2 /dev/sda2 /mnt
    -не работают на моем WNDR-3700 ни при каком раскладе...
    Такое ощущение, что можно без них обойтись...

    после добавления строки sleep 5 перед запуском скрипта, всё заработало:-))

    ОтветитьУдалить
  11. PhYziCiAN
    монтируете автомонтом из веб морды, вот и не работают. Если у Вас флешка размечена именно так как в примере, то особого смысла монтировать раздел ручками вроде как и нет. Он появится, если у Вас перед разделом под софт будет другой раздел FAT или ext2. автомоунт монтирует первый раздел этих типов который сможет найти на флешке

    ОтветитьУдалить
  12. gas твоя правда оказалась...Флэшку надо было переразбить!
    оффтоп - попробовал lighttpd+php с англоязычного блога, работает

    ОтветитьУдалить
  13. После перегрузки роутера, отваливается usb-драйв. Приходится физически отключать и затем включать либо питание драйва либо usb-кабель.
    Я новичек. Помогите, пожалуйста решить проблему.

    ОтветитьУдалить
  14. Господа, все нормально сделалось до
    4 го пункта. При вводе команды mount появляется все рОвно то, что указано на скрине.
    Но после ввода opkg update и далее - "not found" :(
    Что я делаю не так?

    ОтветитьУдалить
  15. Этот комментарий был удален автором.

    ОтветитьУдалить
  16. Подскажите почему у меняпри команде insmod fuse.ko выходит вот такая ошибка:
    insmod: fuse.ko: module not found
    Вот по этой инструкции http://www.dd-wrt.com/wiki/index.php/Установка_полной_поддержки_дисков_NTFS_в_режиме_чтение/запись устанавливал пакет ntfs-3g.
    И еще вопрос как установить веб интерфейс для самбы которая включена в веб интерфейсе?

    ОтветитьУдалить
  17. не получается
    root@DD-WRT:/mnt# insmod mbcache.ko
    insmod: cannot insert '/lib/modules/2.6.34.8-svn16372/kernel/fs/mbcache.ko': File exists
    root@DD-WRT:/mnt# insmod ext2.ko
    insmod: cannot insert '/lib/modules/2.6.34.8-svn16372/kernel/fs/ext2/ext2.ko': File exists
    root@DD-WRT:/mnt# mount -t ext2 /dev/sda2 /mnt
    mount: mounting /dev/sda2 on /mnt failed: No such device or address
    что делаю не так?

    ОтветитьУдалить
  18. ---4. Проверяем что у нас в итоге получилось
    Запускаем putty, логинимся и вводим
    mount
    если все до этого сделано правильно, то результат будет такой---

    у меня последние строчки немного другие
    /dev/sda2 on /mnt type ext2 (rw,relatime,errors=continue)
    /dev/sda2 on /etc type ext2 (rw,relatime,errors=continue)
    /dev/sda2 on /tmp/root type ext2 (rw,relatime,errors=continue)
    /dev/sda2 on /opt type ext2 (rw,relatime,errors=continue)

    ОтветитьУдалить
  19. Привет. Хочу установить всё это дело на внешний USB диск разбитый как Partituon #1. Optware (ext3): монтируется в /opt. Сюда будут устанавливаться пакеты Optware. Размер не менее 512 мегабайт.
    Partituon #2. Swap (Linux Swap): собственно своп. Большой размер не нужен. Достаточно и 128 мегабайт.
    Partituon #3. JFFS (ext3): монтируется в /temp. Размер не менее 128 мегабайт.
    Partituon #4. Share (ext3): монтируется в /mnt. Собственно тут и будет шара для самбы.
    t. Сможешь подсказать, что изменится в текущем варианте не прокатывает. Версия DD-WRT r17201.

    ОтветитьУдалить
  20. А на DGND3700-100PES можно DD-WRT поставить? Кто нибудь пробовал? Модем при этом работал?

    ОтветитьУдалить