Обустраиваем хомяка или «OpenWrt уделывает прошивку от TP-LINK?». Часть 1 — подготовительная

в 1:37, , рубрики: diy или сделай сам, Linux для всех, open source, OpenWrt, Ubuntu, virtualbox

Обустраиваем хомяка или «OpenWrt уделывает прошивку от TP-LINK?». Часть 1 — подготовительная - 1
«Этим полукреслом мастер Гамбс начинает новую партию мебели. 1865 г. Санкт-Петербург» (И. Ильф, Е. Петров).
Вы не ошиблись, это еще одна статья о сборке альтернативной прошивки для домашних маршрутизаторов, этих горячих в некоторых местах повелителей наших малых локальных сетей. На резонный вопрос почему бы сразу не писать там, где такому материалу самое место отвечу: хочу описать процесс начав с подготовки виртуальной машины для сборки (да, это будет Ubuntu на VirtualBox), пройдя через сборку прошивки, подключение внешнего жёсткого диска и настройку загрузки с него, подключение принтера, установку и настройку пакетов вроде медиасервера и torrent клиента, и попытаться закончить описанием такой настройки StrongSwan, которая позволит подключаться к нему с IPhone, IPad и Windows Phone без установки сторонних клиентов. При этом хочется не обойти стороной как важные вещи вроде безопасности, так и полезные мелочи вроде скрипта, который будет отключать на ночь вырвиглазные синие светодиоды моего TL-WDR3600. И я совсем не уверен в полноте своих знаний по многим из озвученных сейчас вопросов.
Одним словом, на данном этапе у меня громадьё планов и сумбур. Поэтому важны любые советы и предложения. Текст статьи точно будет меняться и дополняться с течением времени, а вся статья может быть скрыта в черновики по итогам голосования чтобы не засорять Хабр. Если вы заинтересовались, хотите помочь советом или вам просто захотелось бросить в автора тапком — добро пожаловать. Далее по тексту я постараюсь подробно описать это обещающее интересное времяпрепровождение действо, суть которого схематично изобразил средневековый японский художник.

Суть процесса сборки (Внимание! 18+)

Обустраиваем хомяка или «OpenWrt уделывает прошивку от TP-LINK?». Часть 1 — подготовительная - 2

«Оружие – К Осмотру!»

Сначала кратко о возможностях стандартной прошивки TL-WDR3600 из обзора устройства заявленных на сайте производителя:

  • Одновременные соединения — до 300 Мбит/с на частоте 2,4 ГГц и до 300 Мбит/с на частоте 5 ГГц позволяют добиться общей пропускной способности 600 Мбит/с
  • Два порта USB 2.0 позволяют пользователям с легкостью организовать совместный доступ к принтеру и файлам в локальной сети или через Интернет
  • Гигабитные порты позволяют достичь максимальных скоростей передачи данных
  • Благодаря аппаратному NAT максимальная пропускная способность от WAN к LAN достигает 800 Мбит/с
  • Поддержка IGMP Proxy и режима «мост» для IPTV Мulticast

Из всего этого великолепия отдельно хочется отметить «легкость» совместного доступа к принтерам, реализуемую через фирменную утилиту страшноватого вида. Навскидку большая часть из вышеперечисленного легко реализуется с помощью OpenWrt. Но не будем забывать, наша цель не сравняться с прошивкой TP-LINK. Мы хотим выяснить насколько OpenWrt сможет её обойти.

Переход на Openwrt можно выполнить несколькими способами. Для поддерживаемых устройств можно скачать готовый образ, залив его прямо из заводской прошивки. Далее, при наличии USB-порта, к маршрутизатору подключается заранее разбитая на несколько разделов и отформатированная флешка. Настраивается загрузка с флешки, доустанавливаются необходимые пакеты. Как говорится: «Мадам! Фаустпатрон это просто».
Можно собрать собственный образ из исходников с помощью OpenWrt Buildroot, эта штука строит прошивку как чудовище Франкенштейна, собирая куски исходных кодов со множества адресов. Процесс частенько прерывается, тем чаще, чем больше времени прошло с даты релиза. Тогда новоявленный Виктор Франкенштейн с помощью лейкопластыря в виде бесконечных патчей и симлинков должен заставить работать свою кофеварку чудо-машину. Этот метод открывает множество возможностей, например, можно таки заставить BusyBox показывать кириллические символы вместо вопросительных знаков в именах файлов. Но при этом скорее всего придётся самостоятельно собирать все необходимые пакеты, большая часть пакетов из репозитория OpenWrt станет недоступна.
Мы попытаемся удержаться на золотой середине и будем использовать Image Builder, который обещает нам относительно легкую сборку прошивки из предварительно скомпилированных пакетов и совместимость нашей прошивки с пакетами из репозитория OpenWrt.

Что мы точно потеряем, не считая потраченного времени:

  • Гарантию на устройство, в гарантийных обязательствах сказано, что пользователь лишается гарантии если:

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

  • Аппаратный NAT тоже работать не будет, и есть мнение что не заработает никогда в обозримом будущем. Хотя там же утверждают что он толком не работает не нужен и в родных прошивках.

«Раздатчику боеприпасов, выдать смене по три боевых патрона!»

  • Скачиваем и устанавливаем Oracle VM VirtualBox и Oracle VM VirtualBox Extension Pack.
  • Скачиваем образ установочного диска любимого привычного дистрибутива Linux. Если такого нет, можно скачать текущую LTS версию Ubuntu Linux. В таком случае рекомендую скачать network installer со страницы альтернативных загрузок — он меньшего размера, и при установке можно будет выбрать необходимые пакеты, например, окружение рабочего стола.
    У меня, при работе в VirtualBox, оболочка по умолчанию — Unity жестоко тормозила даже после установки дополнений гостевой системы. Я не пытался разобраться почему и можно ли это вылечить, а просто на этапе выбора пакетов отметил Xubuntu desktop, основанный на Xfce. По поводу разрядности гостевой системы думаю что, если вы не собираетесь отдавать виртуальной машине больше 4 GB оперативной памяти, i386 будет логичным выбором.
  • Создаем виртуальную машину, гостевой операционной системой выбираем Ubuntu Linux той же разрядности что и скачанный образ, оперативной памяти для начала хватит 1 GB, жёсткого диска размером около 20 GB тоже будет достаточно. После создания машины перенастраиваем сеть, вместо NAT выбираем сетевой мост. Для ноутбука нужно еще вместо wifi адаптера выбрать сетевую карту, если она есть. В привод оптических дисков монтируем образ установочного диска.
  • Устанавливаем гостевую операционную систему. На этом этапе все банально кроме того, что на этапе разметки диска рекомендую не соглашаться на автоматическую разметку, а создать вручную два первичных раздела. Первый — 2 GB под своп, остальное — под корень. Такая разметка диска позволит, в случае необходимости, быстро изменить размер корневого раздела после увеличения виртуального жесткого диска.
  • После установки операционной системы на виртуальную машину в VirtualBox будут доступны несколько стандартных разрешений экрана. Подходящих для своего ноутбука или монитора с большой диагональю вы среди них скорее всего не найдёте. Исправим это недоразумение и установим дополнения VirtualBox для гостевой системы. Заодно поставим консольный файловый менеджер — Midnight Commander.
    Для начала добавим недостающее разрешение экрана. Насколько я знаю, можно добавить до 16 определяемых пользователем разрешений экрана. В примере ниже «Test» — имя виртуальной машины, а «1366x768x32» — добавляемое разрешение экрана. Открываем командную строку хостовой системы, переходим в каталог VirtualBox и добавляем нужное разрешение экрана:

    cd "C:Program FilesOracleVirtualBox"
    VBoxManage setextradata "Test" "CustomVideoMode1" "1366x768x32"
  • Переходим в гостевую систему. Открываем эмулятор терминала, обновляем списки пакетов, устанавливаем Midnight Commander и пакеты, необходимые для сборки модулей ядра — dkms и build-essential. Здесь и далее я предполагаю, что вы работаете с Ubuntu или другой Debian подобной системой, а aptitude и nano уже установлены. При установке с образа network installer так и будет. Если это не так, корректируйте команды из примеров под себя:
    sudo aptitude update && sudo aptitude upgrade
    sudo aptitude install dkms build-essential mc

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

    cd /media/%username%/VBOXADDITIONS_4.3.20_96996/
    sudo ./VBoxLinuxAdditions.run

    После завершения работы скрипта закрываем терминал, отключаем образ дополнений гостевой системы и перезагружаем виртуальную машину. Если все прошло хорошо, то при переходе в полноэкранный режим разрешение экрана виртуальной машины будет соответствовать нормальному разрешению вашего монитора. Но пока только в графическом режиме, при переходе в консоль вы все равно увидите что она занимает небольшую часть по центру экрана. Чтобы это исправить, нужно немного подправить настройки загрузчика. Открываем эмулятор терминала, редактируем настройки загрузчика:

    sudo nano /etc/default/grub

    Настраиваем отображение меню Grub при загрузке:

    #GRUB_HIDDEN_TIMEOUT=0

    Настраиваем разрешение графического меню Grub, сохраняем для консоли разрешение, установленное загрузчиком:

    # The  resolution used on graphical terminal
    # note that you can use only  modes which your graphic card supports via VBE
    # you can see them in  real GRUB with the command 'vbeinfo'
    GRUB_GFXMODE=1366x768
    GRUB_GFXPAYLOAD_LINUX=keep

    Сохраняем настройки, обновляем конфигурацию загрузчика и перезагружаемся:

    sudo update-grub && sudo reboot

    У меня после обновления конфигурации загрузчика при перезагрузке меню не отображалось. Если у вас так же, выключаем и опять включаем виртуальную машину. При запуске в полноэкранном режиме должно в полный экран отобразиться меню загрузчика, а при переходе в первую консоль по Ctrl+Alt+F1 она тоже займет весь экран. Если всё так и есть, можете ввести логин, пароль и настроить шрифты. Тут все конечно индивидуально, но мне стандартный шрифт обычно кажется мелковатым. Если вам тоже, делаем так:

    sudo dpkg-reconfigure console-setup

    Если любите полужирные шрифты — выбирайте TerminusBold, если нет — Terminus. Размер — по своему зрению, чтобы определиться можно попробовать несколько.
    Боюсь оскорбить вас мелочной опекой, но в Ubuntu вернуться из консоли в графический режим можно по Ctrl+Alt+F7.

  • Скачиваем и распаковываем свою версию Image Builder. Я собирал прошивку для TL-WDR3600, для него нужно выбрать архитектуру ar71xx generic. Уточнить архитектуру для своего устройства и узнать, поддерживается ли оно OpenWrt можно в таблице поддерживаемых устройств. Архив распаковываем в домашний каталог и для удобства сокращаем название до OpenWrt-ImageBuilder. Переходим в OpenWrt-ImageBuilder и создаем каталог files для файлов, которые мы будем добавлять в прошивку.
  • Чтобы сборка прошивки нормально заработала, мне пришлось немного подправить скрипт. Суть проблемы заключается в том, что команда «make clean» не очищает каталог dl, в который сохраняются скачанные при сборке файлы, а удаляет его. Потом я даже нашел посвященный этой ошибке тикет, помеченный как fixed. Чтобы всё заработало, открываем эмулятор терминала и редактируем Makefile, находим строки 161-162:
    clean: 
    	 	        rm -rf $(TOPDIR)/tmp $(TOPDIR)/dl $(TARGET_DIR) $(BIN_DIR)

    И приводим к такому виду:

    clean: 
    	 	        rm -rf $(TOPDIR)/tmp $(TOPDIR)/dl/* $(TARGET_DIR) $(BIN_DIR)

    После этой небольшой доработки напильником можно провести пробную сборку, она выполняется командой:

    make image PROFILE=WNDR3700 PACKAGES="pkg1 pkg2 pkg3 -pkg4 -pkg5 -pkg6" FILES=files/

    Где: WNDR3700 — профиль вашего устройства; pkg1 — пакет, который будет добавлен в прошивку; -pkg4 — пакет, который будет удален из прошивки. Список профилей можно посмотреть в выводе команды «make info». Почитать подробнее о работе с Image Builder можно в OpenWrt Wiki. До начала сборки нужно еще добавить репозитории в файл repositories.conf. Открываем его в редакторе и приводим к такому виду:

    src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/base
    src/gz barrier_breaker_luci http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/luci
    src/gz barrier_breaker_management http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/management
    src/gz barrier_breaker_oldpackages http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/oldpackages
    src/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/packages
    src/gz barrier_breaker_routing http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/routing
    src/gz barrier_breaker_telephony http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/telephony
    ## This is the local package repository, do not remove!
    src imagebuilder file:packages

    Мы добавили официальные репозитории Openwrt. Учитывая громадьё наших планов и чтобы облегчить запуск сборщика прошивок создаем в каталоге OpenWrt-ImageBuilder небольшой скрипт:

    #!/bin/bash
    # Build OpenWRT 14.07 for TP-LINK TL-WDR3500/3600/4300/4310/MW4350R
    echo "Prepare OpenWRT images for Tp-Link TL-WDR3500/3600/4300/4310/MW4350R n"
    make image PROFILE="TLWDR4300" PACKAGES="luci openssh-sftp-server nano" FILES="files/"

    Сохраним скрипт, например, как tl-wdr3600.sh, разрешим его выполнение, и запустим сборку прошивки:

    chmod +x tl-wdr3600.sh
    ./tl-wdr3600.sh

    По окончании сборки в каталоге bin должны появиться несколько файлов. Определить который из них ваша прошивка можно по модели устройства в имени файла. Слово factory в имени значит, что такой файл можно заливать на ваше устройство поверх заводской прошивки. Подробнее об этом, еще раз о разнице между JFFS2 и SquashFS, а также о многом другом собираюсь рассказывать дальше.
    Ну а пока, «Рядовой Хомяк к бою готов!», продолжение следует…

Автор: 069056

Источник



https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js