Блог о Gentoo и около-линуксовым штукам

20 июля 2015 г.

OpenWRT - торт!

02:45 Опубликовал Дмитрий Исаенко 6 коммент.
Намедни приобрёл роутер на замену сгоревшему Zyxel keenetic lite. Выбирал в первую очередь по уровню совместимости с OpenWRT, но обязательно с поддержкой 802.11ac. После долгих раздумий остановился на TP-Link Archer C7 V.2 как на наиболее подходящем по цене и по функционалу. Забегая вперёд отмечу, что в нём до сих пор используется USB 2.0, когда в иных машрутизаторах за те же деньги уже давно ставят третью версию. После пары дней тыкания стандартной для России прошивки осталось негативное ощущение - сеть wi-fi иногда отваливалась сама собой и порой требовалась даже перезагрузка. Ну я, ради эксперимента, поставил туда последнюю нерусифицированную фирмварю с офф-сайта и всё заработало на ура. Но, понятное дело, хотелось большего, а именно - OwnCloud (Очень-очень плохая идея. В итоге получился тормоз с красивым гуем). Тут-то я и начал ставить OpenWRT. Скчал сначала последний Chaos Claimer RC2 и как водится залил через стандартный инструмент обновления прошивки. Развернул, значит, настроил его и начал делать всё по инструкции. Когда я уже подошел к логическому завершению в веб-интерфейсе появилась замечательная ошибка суть которой сводилась к неустановленной системной локали. Как внезапно оказалось, OpenWRT в референсной сборке локаль и вовсе не поддерживает о чём прямо написано в начале той самой инструкции. Ну, делать нечего, прийдётся учится собирать систему самому. Да и своя сборка лучше - можно запихнуть сразу в неё все необходимые пакеты и конфиг-файлы.
Так приступим же!

Первое что нам понадобится, это скачать последние исходники. Для этого заходим на страницу https://dev.openwrt.org/wiki/GetSource и видим, что последнюю версию нужно скачивать из GIT.
Создадим папку в домашней директории и скачаем исходники:
mkdir owrt
cd owrt
git clone git://git.openwrt.org/openwrt.git
 
 

Перейдём в каталог openwrt и обновим пакеты
cd openwrt/
./scripts/feeds update -a
./scripts/feeds install -a 

Теперь выполним ещё несколько проверок и запустим n-curses интерфейс для выбора необходимых опций.
make defconfig
make prereq
make menuconfig
 Тут мы сразу выберем Target Profile -'TP-LINK Archer C5/C7'. Target System оставляем без изменений - “Atheros AR7xxx/9xxx”.

Теперь настроим поддержку USB для всяких mass-storage девайсов.
> Base system 
          <*> block-mount
 
> Kernel modules > Block Devices
          <*> kmod-scsi-generic

> Kernel modules > Filesystems 
          <*> kmod-fs-ext4
 
> Kernel modules > USB Support 
          -*- kmod-usb-storage
          <*> kmod-usb-storage-extras
 Тут уж кто что использует - то и выбирает.
Обязательно проверьте наличие ath10k драйвера, иначе AC диапазон будет недоступен.
> Kernel modules > Wireless Drivers
          <*> kmod-ath10k
Если вы собираетесь ставить OwnCloud (лучше не стоит) включите поддержку Native language support:
> Kernel modules > Native Language Support
          <*> kmod-nls-utf8.
> Global build settings 
          [*] Compile with full language support

Также в настройках можно включить поддержку веб-интерфейса Luci и сразу русифицировать его:
> LuCI > 1. Collections
          <*> luci
> LuCI > 2. Modules > Translations
          <*> Russian (ru)
Посмотрите тут также вкладку 3. Applications. Лично я тут включаю WoL, Transmission, openvpn и samba.
> LuCI > 3. Applications
          <*> luci-app-openvpn
          <*> luci-app-transmission
          <*> luci-app-wol
          <*> luci-app-samba
Для transmission также не помешает включить поддержку Web интрефейса:
 > Network > BitTorrent
           <*> transmission-web 
Плюс установим сам OpenVPN :
> Network > VPN
           <*> openvpn-easy-rsa
           <*> openvpn-openssl
Теперь выходим из настроек сохраняя созданный нами конфиг.
Перед непосредственным началом компиляции у нас есть возможность добавить все необходимые конфиг-файлы в будущую систему. Для этого в этой же директории создайте каталог ./files/ и поместите свои файлы в соответсвующие поддиректории. Например файл network с настройками сети следует поместить в ./files/etc/config/network.

Теперь всё готово к компиляции. Запустим её коммандой
make -j9 V=s
Когда сборка завершится, нам останется только загрузить прошивку на маршрутизатор. Тут есть несколько вариантов, но я копировал её по scp на внешний HDD и оттуда уже запускал обновление системы.
scp /home/USERNAME/owrt/openwrt/bin/ar71xx/openwrt-ar71xx-generic-archer-c7-v2-squashfs-factory.bin root@192.168.1.1:/mnt/точка_монтирования/
sysupgrade -v /mnt/точка_монтирования/openwrt-ar71xx-generic-archer-c7-v2-squashfs-factory.bin 
После этого я запускал "mtd -r erase rootfs_data", но позднее обнаружил более правильный метод обновления - коммандой
mtd -r write /mnt/точка_монтирования/openwrt-ar71xx-generic-archer-c7-v2-squashfs-factory.bin firmware
mtd -r erase rootfs_data 
Теперь остаётся подключиться к роутеру по telnet и установить пароль.
telnet 192.168.1.1
passwd
Вот почти и всё. Только включим поддержку fstab, а настроить все параметры монтирования можно будет в Luci.
block detect > /etc/config/fstab
/etc/init.d/fstab enable
/etc/init.d/fstab start

Поздравляю! Теперь у нас есть свой OpenWRT с фичами плюшками :)

p.s. рекомендую также сразу раскрасить приглашение коммандной строки изменив переменную среды PS1. Делается это в файле /etc/profile, а строка должна выглядеть примерно так:
export PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '

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

  1. После того как отработал make, в папке bin/ar71xx вижу кучу образов но не вижу чего-то вроде ...-squashfs-factory.bin с названием чипсета.
    Что сделал не так?! Подскажешь??

    ОтветитьУдалить
    Ответы
    1. После того, как make отработал, посмотри этот файл в папке bin/ar71xx/

      Удалить
    2. из того что там насобиралось с названием чипсета и версией я вижу только openwrt-ar71xx-generic-tl-mr3220-v2-initramfs-kernel.bin, остальное все типа ..generic-vmlinux.bin, uImage и прочее... что из них прошивка?! или в параметрах сборки чего-то нехватает?

      Удалить
    3. Прошивка из них openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin . Подозреваю, что в menuconfig не был выбран 'Target Profile (TP-LINK TL-MR3220)'. Собрал ради интереса - у меня всё на месте. Синопсис:
      ололошка@пк ~ $ cd /tmp/
      ололошка@пк /tmp $ mkdir owrt
      ололошка@пк /tmp $ cd owrt/
      ололошка@пк /tmp/owrt $ git clone git://git.openwrt.org/openwrt.git
      ололошка@пк /tmp/owrt $ cd openwrt/
      ололошка@пк /tmp/owrt/openwrt $ cd scripts/
      ололошка@пк /tmp/owrt/openwrt/scripts $ ./feeds update -a
      ололошка@пк /tmp/owrt/openwrt/scripts $ cd ..
      ололошка@пк /tmp/owrt/openwrt $ make defconfig
      ололошка@пк /tmp/owrt/openwrt $ make prereq
      ололошка@пк /tmp/owrt/openwrt $ make menuconfig
      Ставлю Target Profile
      ололошка@пк /tmp/owrt/openwrt $ make -j9
      ололошка@пк /tmp/owrt/openwrt $ ls bin/ar71xx/|grep mr3220 |grep v2
      openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin
      openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-sysupgrade.bin

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

      Удалить
    5. Разобрался. Как оказалось, для всех пакетов, что я отметил, не хватало места, вот образ и не создавался. Увидел ошибку при запуске make V=99
      Еще вот вариант:
      make V=99 2>&1 | tee build.log | grep -i error
      С записью лога в файл, там удобнее отловить ошибку.

      Удалить