Openwrt как установить luci без интернета

Обновлено: 30.06.2024

Для настройки статического IP в сегменте 192.168.1.x сделаем следующее:

Где 192.168.1.1 — адрес шлюза в нашей сети, а 192.168.1.222 — незанятый IP, который и будет присвоен нашей коробочке. Команда «uci changes» предоставляет возможность просмотреть все внесенные изменения. Я стараюсь не пренебрегать этой возможностью, так как устройство с неправильно настроенным интерфейсом, будучи недоступным извне, превращается в «зомби». На случай, если все таки неприятность произошла, в OpenWRT предусмотрен «режим восстановления»: при загрузке, как только кнопка «WPS» начнет мигать, зажмите ее — MR3020 загрузится с сетевыми параметрами по умолчанию.
Если в сети работает DHCP, можно задать автоматическую конфигурацию:

Вторая строчка необязательна, но может быть крайне полезна для поиска устройства. Можно будет обращаться к устройству не по IP, а по hostname, если сеть это поддерживает. Если хотите на 100% избежать поиска устройства в сети — применяйте статическую конфигурацию.
Полезно также запретить работу встроенного в наш TP-LINK dhcp-сервера:

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

Подключение клавиатуры и проверка управления светодиодами

Сайт H-WRT информирует нас, что для установки клавиатуры нужен лишь модуль kmod-usb-hid.
Установим его:

Самое время подключить клавиатуру и посмотреть, опозналась ли она:

Облом! это совсем не то, что я ожидал. В чем же дело?
Схожий багрепорт быстро находится — разработчики объясняют такое поведение аппаратными ограничениями примененного чипсета. Похоже, находящийся «на борту» USB-хаб не жалует low-speed устройства. Хотя на этом моменте дух Дзен бесследно испарился — не будем опускать руки и попробуем решить проблему подключением клавиатуры через внешний USB-хаб:

Гораздо лучше. Пускай из-за этого пришлось написать «почти получилось» в начале статьи и «способ сервировки» на фото, но так наша «Generic USB Keyboard» опозналась. На клавиатуру всегда создается два «устройства», но даже и не спрашивайте, почему эта конкретная клавиатура назвалась еще и мышью… Так или иначе — мы готовы к «аппаратному хеллоуворлду» — включить светодиод.

Здесь должен торжественно зажечься светодиод «Caps Lock». Те, кого просто радует этот факт — могут переходить к следующему шагу. Те, кто не может двинуться дальше, не узнав, что за бредовое заклинание приведено выше — заглядывают в

На все, что происходит с клавиатурой (или другим устройством ввода) генерируется событие ввода, видимое в соответствующем ему файле (в нашем случае /dev/input/event0, но это частный случай, обусловленный тем, что других устройств ввода не подключено). Структура события определяется в заголовочном файле input.h:

Где type сигнализирует о типе элемента ввода (кнопка клавиатуры или перемещение мыши/джойстика и т.п ), code — код элемента, специфичный для каждого типа (например, для клавиатурного события EV_KEY здесь будет передан номер клавиши), а value — это, соответственно, какое воздействие и какой величины (для устройств, поддерживающих это) было произведено. Например, при нажатии клавиши «Q» на клавиатуре мы получим:

где первые 8 байт (505b 0ed9 000* ****) — время события, следующие два байта (0001) — тип события (EV_KEY), затем два байта номера клавиши (0010), которые для алфавитно-цифровых клавиш соответствуют скан -коду в Set 1. Кстати, нажатия всяких «прокачанных» клавиш вроде регулировки громкости, управления воспроизведением и т.п. отправляются во второй обработчик, созданный для клавиатуры (в нашем случае /dev/input/event1). Для них не генерируется событие автоповтора, что может оказаться весьма кстати — помните, я писал о «бонусной» возможности устройства работать на ввод? Последние 4 байта (0000 0001 или 0000 0000) указывают на то, что произошло нажатие или отпускание соответственно. Пакеты, состоящие из нулей — это специальные разделительные события EV_SYN, а зачем нужны события с типом 4 я не знаю. Определения для типов и кодов заданы в том же input.h, и подробнее описаны в этом документе. Дальше начинается самое интересное. Хотя большая часть событий передается от устройства в пространство пользователя, некоторые события могут идти в обратном направлении. Это сделано для поддержки, например, джойстиков с отдачей или (та-дам!) светодиодов. То есть, записав в /dev/event/input0 событие с типом EV_LED, кодом LED_CAPSL и значением 1, мы скомандуем клавиатуре зажечь светодиод «Caps Lock». Достаточно подробно о работе с устройствами ввода, особенно USB, рассказывают статьи Брэда Хардса (Brad Hards) The Linux USB Input Subsystem и Using the Input Subsystem (продолжение первой статьи, даже с примером кода для управления светодиодом). Жаль что я их нашел слишком поздно, когда задача уже была решена экспериментальным путем. Между прочим, мне очень повезло — последние снэпшоты, а так же бета 12.09 имеют одну особенность, из за чего отсылка событий работает нестабильно, если файл устройства постоянно не читать. Именно для этого предназначена команда Я экспериментировал сначала с прошивкой r31214, где таких особенностей не было, поэтому светодиод у меня загорелся сразу — если бы этого не произошло, то я бы еще долго искал верный путь.

Скрипт

Теперь управлять светодиодами легко. Чтобы включить, скажем, светодиод «Scroll Lock», пишем:

Можно еще «мигнуть» (scroll_pulse). Как говорит уже многими здесь уважаемый Anant Agarwal: «I could do this all day. This is so much fun!». Но все же, перейдем к следующему этапу и создадим…

Веб-интерфейс

Какой же веб-интерфейс без веб-сервера? Проверим его наличие:

Если в выводе есть строка Status: install user installed (а это будет так, если вы используете Attitude Adjustment 12.09 beta) то сервер уже установлен. Иначе установим его и настроим его запуск:


Сначала я хотел использовать JQuery.get(), но потом посчитал излишним привлекать JQuery ради всего лишь пары GET-запросов. У нас есть две JavaScript функции. Первая, command(action), запускает наш скрипт, передавая «команду» в праметре «command» GET-запроса. Какую именно — определяется в событиях onclick элементов управления. Это выглядит не очень элегантно, спору нет, но дает хорошее представление о том, как все работает. Вторая функция, get_status() запускается по событию onload, запрашивает файл с текущим состоянием светодиодов (тот, который формируется в конце скрипта) и отражает его на элементах управления страницы. По невероятному стечению обстоятельств файл состояния представляет из себя JSON-представление ассоциативного массива, и доступ к данным мы очень просто получаем с помощью JSON.parse(). Повтор запроса каждые полсекунды позволяет отслеживать измения состояния, произведенные с другого клиента. Добавка в url fuie=Math.random() нужна для того, чтобы адрес каждый раз был уникальным — тогда браузер не сможет отказаться от запроса страницы, посчитав, что она уже есть в кэше. Как можно догадаться из названия переменной, особенно склонен к такому поведению Internet Explorer.

Маленький нюанс — браузер, конечно, не имеет доступа к папке /var на сервере, поэтому предоставим ему возможность прочитать файл ledstate оттуда, куда он «дотягивается», с помощью симлинка:

Ссылку на скачивание этой странички, немного измененной, можно найти почти в самом в конце статьи. Теперь можно мигать светодиодами клавиатуры, тыкая в чекбоксы. Но, даже не учитывая того, что мигающим светодиодом сейчас никого не удивить, придется согласиться с тем, что это абсолютно бесполезно с практической точки зрения. Поэтому примемся за железо!

Схема

Уже можно разобрать клавиатуру и вытащить из нее плату:

Схему включения светодиодов клавиатуры представим следующей (весьма упрощенной) моделью (для включенного состояния):

Схема 1. Включение светодиода клавиатуры
Три проверенных «клавы» из «помоечного» сегмента имели именно такое включение светодиодов, отличаются только их токи — обычно около 18мА, но бывает и 3мА. Надо иметь ввиду, что возможны и другие схемы.
Самое простое — если необходимо коммутировать небольшое напряжение и ток (дистанционный «Reset» какого — либо устройства или эмуляция других кнопок/логических сигналов). Можно обойтись обычной оптопарой:

Схема 2. Формирование логического сигнала
Для управления устройством с питанием от сети берем твердотельное реле:

Схема 3. Управление твердотельным реле
Я использовал отечественнное реле К293КП13П из-за цены в 170 рублей. Максимальный ток в нагрузке, на которое оно рассчитано — 1А. Ток через управляющий светодиод не должен быть ниже минимального (в документации он обозначается IFmin) для используемого типа реле. Если плата клавиатуры дает меньший ток (отпаяйте один вывод светодиода и измерьте ток в разрыве) — поможет дополнительный транзисторный ключ:

Схема 4. Подключение твердотельного реле через ключ
Он же спасет, если используется твердотельное реле, управляемое напряжением или «классическое» электромеханическое реле:

Схема 5. Управление электромеханическим реле
Твердотельное реле — штука достаточно дорогая, и чем мощнее — тем дороже. Обычное реле дает больше «ампер на рубль», но имеет свои минусы. Среди них — большой потребляемый ток во включенном состоянии. Если одновременно включить три реле такой же модели, как на схеме — потребляемый от USB ток будет составлять почти 300 мА. Если не хотите так сильно «доить» порт — подключайте эмиттер не к нему (пунктирная линия на схеме), а к независимому источнику.
Схемы 4 и 5, само собой, работают только на клавиатурах где СД включены именно по схеме с «общим анодом» (проверьте сопротивление между анодами диодов и «плюсом» платы — должно быть 0 Ом). Если неохота с этим заморачиваться — можно использовать вместо ключа маломощное оптореле. Включается вместо штатного светодиода и работает при токе на светодиод от 5 до 25 мА, то есть подойдет для всех вариантов клавиатур с вероятностью 99%. Если вам надо коммутировать напряжение до 60 в и ток до 300 мА — можно убрать реле и пользоваться оптореле напрямую.

Схема 6. Управление электромеханическим реле при помощи оптореле
Неплохо добавить в коммутируемую цепь предохранитель. Транзистор в схеме 5 работает с почти максимальным коллекторным током — желательно взять с током срабатывания поменьше, или хотя бы транзистор помощнее. На выходы твердотельного реле нужно поставить демпфирующую RC-цепочку при работе на двигатель или другую индуктивную нагрузку. Компоненты подбирались лишь по критерию доступности и цены в ближайшем (ко мне) оЧень Дорогом радиомагазине — при наличии выбора можно подобрать у нормального продавца «твердотелку» на нужный ток с широким диапазоном IF и на том закрыть вопрос с коммутацией. Кроме того, представленная модель включения неточна: плата клавиатуры ведет себя как источник тока по отношению к нашему «светодиоду» только при напряжении на аноде 2.5В и выше — я старался, по возможности, обеспечить падение напряжения, сходное с таковым у заменяемого светодиода, чтобы плата «не почувствовала» подмены.


Что всегда стоит принимать в расчет — это элементарая электробезопасность. Даже тестовое устройство — особенно тестовое устройство, которое наверняка будет болтаться где-нибудь на проводках или будет забыто включенным среди прочего хлама на столе — надо защитить от случайного касания токоведущих частей, если оно предусматривает подключение к сети. Иначе по вам может потечь абсолютно реальный электрический ток.
Я собрал варианты 3 и 6 на макетке, получилось так:

Несмотря на то, что это не более чем «proof of concept», мне захотелось хоть немного «навести красоту», пускай и в собственной извращенной трактовке. Такие уж нынче времена: внешний вид ценится не меньше, а порой и беспричинно больше функциональной нагрузки. Что и приводит нас к следующему этапу.

Косметика и демонстрация

Вторая и третья строчка «перепрятывают» файл веб-интерфейса роутера (если он установлен) в отдельную папку, теперь он доступен по адресу _адрес_роутера_/luci. А «главной» страничкой, доступной по адресу сервера, становится наша.
Ну и, напоследок — говорят, что картинка стоит тысячи слов. В этом видео почти тысяча картинок. Надеюсь, оно хоть как-то уравновесит мою многословность.

3. Native language support

LuCI uses English by default. You can search and install additional packages for native language support.

You can also install multiple language packs and switch between them in the LuCI settings.

LuCI is being actively translated into many languages by volunteers.

4. Additional web applications

Search and install luci-app-* packages if you want to configure services via LuCI.

5. Alternative ports

Use alternative ports:

Выбор прошивки

Если интересующая вас прошивка доступна только как raw образ (img.gz, image.gz, bin) будет необходимо воспользоваться входящим в комплект VirtualBox конвертером. Под Windows для этого сохраните в папке VirtualBox (могут понадобиться права администратора) следующий текстовой файл и задайте ему расширение .bat или .cmd:

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

Настройка VirtualBox


Создайте новую виртуальную машину. Тип – Linux, версия – Linux 2.6. Откажитесь на данном этапе от подключения диска — это будет сделано позже.
Откройте свойства новой виртуальной машины (кнопка «Настроить») и перейдите в раздел Сеть. Вместо режима NAT выберите Сетевой мост (Bridged) – это позволит получить доступ к виртуальной машине с других устройств в сети. Если же у вас нет домашней сети (хотя бы роутера) оставьте NAT и добавьте второй адаптер «Виртуальный адаптер хоста».
Затем в разделе COM-порты обязательно поставьте галочку, чтобы активировать эмуляцию порта. В противном случае OpenWrt не сможет загрузиться.
Наконец, в разделе Носители добавьте к контролёру IDE образ прошивки OpenWrt, как жёсткий диск. Если к контроллёру SATA подключены устройства – удалите их.
Нажмите OK, сохранив настройки.

Выбор ОС

Носители

Настройки сети

COM-порт

Extras

Details

Configuration

LuCI on other web servers

LuCI on nginx

For routers without significant space constraints running on snapshots/master or v19 or later, it is possible to install using nginx. LuCI on nginx is currently supported by using uwsgi as plain-cgi interpreter. You need to install one of this 2 variants of the LuCI meta-package:

luci-nginx - Autoinstall nginx, uwsgi-cgi and the default config file to make luci work on nginx. luci-ssl-nginx - Autoinstall nginx-ssl, uwsgi-cgi and the default config file to make luci wok on nginx.

Currently LuCI on nginx is fully supported (maybe only in master snapshots for now, as of 16-Feb-2019). If any problem is found, report them to the support forum.

Offline installation

Download the following packages from the package repository using your platform and release version:

Взял с собой на дачу роутер, с желанием на выходные снести это "асусовское чудо" и установить OpenWRT.
Скачал свежую (на данный момент) версию 19.07.3 и прошил роутер. Но как оказалось, в прошивке по умолчанию отключены радио-модули, и соответственно WiFi не доступен:

5eedbc77186b8777234265.jpg

Не понятно с какой целью это было сделано, из безопасности или желания сэкономить место для IPv6.
И как теперь обновить пакеты и вообще что либо делать - не понятно.

На данном ПК интернет только по WiFi (свисток на чердаке).
Если через CMDER (сайт) подключиться к роутеру: ssh root@192.168.1.1 и запустить opkg update то естественно:

Пробовал в свойствах беспроводного соединения (на вкладке Доступ) выставить разрешение "другим пользователям сети использовать подключение к интернету данного компьютера" - не помогло. Установил HSF (сайт) и закинул туда нужный пакет - тоже самое.

Конечно, можно взять роутер и отвезти его туда - где есть "проводной" интернет и всё обновить/установить/настроить. Но сейчас то как быть. (( На сайте написано как включить файл конфигурации для радио-модуля и все его настройки, но это ничего не даст, так как для него не установлены пакеты.

В общем ерунда какая то. Мне это почему то напомнило бред майкрософта, когда при включении ПК и отключенной в этот момент клавиатуры писалось "Keyboard not found. Press F1 to continue." Что там люди курят не понятно, намудрили капец.

Может есть какой способ загрузить эти пакеты локально, ну не знаю, может с флешки или еще как подсунуть?

Веб-интерфейс

Окно авторизации LuCI

В большинство версий OpenWrt изначально входит веб оболочка LuCI. LuCI расшифровывается как Lua Configuration Interface. Перейдите в браузере по сетевому адресу вашего «роутера», ведите заданный вначале пароль и сможете поэксперементировать с LuCI.

Доступен русский перевод. Для установки перейдите раздел System — Software, введите в поле Filter слово «russian» и на вкладке Available packages (russian) установите пакет luci-i18n-russian. Либо установите его при помощи opkg, как описано выше, а затем выберите язык в разделе System — System — Language and Style — Language.

Доступ к файловой системе

Запустите WinSCP (или аналог) и подключитесь к виртуальной машине.

Вы увидите стандартный двухпанельный файловый менеджер. Теперь вы можете редактировать конфигурационные файлы в удобном графическом режиме. Так же возможно копировать файлы в «роутер» и обратно. Попробуйте перейти в правой части в корень (/), а затем в /etc/config/ и запустить network.

При желании внесите изменения и сохраните результат.

Настройка сети


Запустите виртуальную машину. По окончании загрузки нажмите Enter. Станет доступна консоль.

Первый запуск


В первую очередь задайте пароль администратора, введя passwd и новый пароль в ответ на приглашение.
По умолчанию OpenWrt создаёт собственную подсеть, игнорируя существующие и получает в ней адрес 192.168.1.1. Вы можете попробовать подключиться к виртульной машине по этому адресу, задав своему компьютеру (сетевой карте либо виртуальному адаптеру хоста, в зависимости от сделанных настроек VirtualBox) статичный адрес в подсети 192.168.1.*. Но удобнее вариант, при котором эмулируемый «роутер» соединяется с существующей сетью, получая доступ в интернет и к устройствам в вашей сети. При помощи встроенного текстового редактора vi можно редактировать конфигурационные файлы. Наберите vi /etc/config/network для изменения настроек сети. Управление курсором в vi осуществляется стрелками, для удаления строки можно нажать dd, переход в режим редактирования происходит нажатием кнопки i, возврат в режим команд по Esc. Приведите данный файл к следующему виду (поменять option proto со static на dhcp):

После чего перейдя по Esc в коммандный режим наберите :wq и Enter для сохранения и выхода из редактора. Чтобы выйти без сохранения, наберите команду :q!. Эти настройки означают, что эмулируемый «роутер» попробует получить доступный ip адрес. Если у вас нет настоящего роутера и возможности получить более одного адреса — выберите в настройках сети VirtualBox режим «Виртуальный адаптер хоста».

Для применения новых настроек перезагрузите виртуальную машину или введите /etc/init.d/network restart.

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

Поздравляю, OpenWrt запущена и доступна по сети. Имейте ввиду: данный адрес (192.168.1.23 в моём случае) — временный и может меняться после перезапуска эмулятора или спустя какое-то время (несколько часов). Запустите Putty и попробуйте подключиться к виртуальной машине по данному адресу. Логин для подключения – root, пароль вы задали при первой загрузке.

Установка пакетов

Имейте ввиду, архитектура вашей прошивки и устанавливаемого пакета должна совпадать.

Установка программ

В первую очередь, установите эмулятор VirtualBox, если его у вас нет. Чтобы иметь возможность выполнять команды вне консоли окна эмулятора, понадобится SSH клиент. Например, Putty. При этом вам станет доступен буфер обмена домашней системы. Для удобного доступа к файловой системе «роутера» нужен графический SCP клиент. Например, WinSCP для Windows. Для Linux будет достаточно встроенного файлового менеджера. Например, Krusader, Dolphin, Nautilus.

Читайте также: