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

Обновлено: 04.07.2024

Пакеты расширяют возможности вашего роутера. Вы можете установить или удалить неиспользуемые пакеты, согласно вашим нуждам и возможностям вашего роутера. В случае, если вы соберетесь увеличивать память вашего устройства (за счет USB-выхода или другими способами), вы получите совершенно новый по классу роутер, с черезвычайно широким спектром функций. Имейте в виду, что устанавливая пакеты вы уменьшаете объем свободной памяти вашего устройства.

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

Окно авторизации 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.

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


OpenWrt использует opkg в качестве пакетного менеджера, точнее, собственный форк. Дебианщикам он во многом покажется знакомым: похожие команды, похожий формат репозитория и пакетов.

Мне захотелось запатчить LUCI (этого в статье не будет), но адекватного быстрого введения я не нашёл, пришлось самостоятельно собирать отрывки сведений из разрозненной документации, статей и примеров, поглядывая в код и на результаты работы. Бонусом собрал примитивный (но бесполезный на практике) пакет, которого ещё нет в репозитории. Собранным ликбезом делюсь ниже.

Чем мы можем вам сегодня помочь?

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

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

Бинарные пакеты

Бинарные пакеты почти аналогичны пакетам Debian. Разница следующая:

  1. Расширении .ipk вместо .deb .
  2. Упаковывается всё с помощью `tar` и сжимается с помощью gzip , это же справедливо для вложенных архивов. В Debian архив верхнего уровня упаковывается более примитивным ar , а вложенные архивы чаще всего имеют расширение .tar.xz , инструменты используются соответствующие.

Архив data.tar.gz содержит исполняемые файлы, файлы конфигурации и всё, ради чего устанавливается пакет. Если распаковать его в корень ФС, вы получите все ожидаемые файлы на нужных местах, в /usr/bin/ , /etc/ и так далее.

А в control.tar.gz находятся вспомогательные файлы для пакетного менеджера. Это скрипты, которые должны выполняться до или после установки и удаления ( preinst , postinst , prerm , postrm ), сведения о файлах, являющихся конфигурационными, и метаинформация о пакете, во многом повторяющая ту, что содержится в Packages .

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

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

Как устанавливать пакеты приложений?

Изменено: Пт, 2 Июн, 2017 at 9:38 AM

Т.к. роутеры и контроллеры RTU работают под управлением операционной системы OpenWRT они поддерживают практически все пакетные приложения разработанные для данной операционной системы.

Ознакомиться со списком всех приложений Вы можете на официальном сайте операционной системы OpenWRT.

ВНИМАНИЕ! Некоторые пакеты могут быть несовместимы с роутерами и контроллерами RTU из-за серьезно переработанных исходных кодов операционной системы.

Устанавливать пакеты возможно из различных источников:

1. Установка из репозитория.

2. Ручная установка.

1. Установка пакетов из репозитория

Для установки нового пакета необходимо обновить список пакетов из репозитория.

После каждой перезагрузки это необходимо делать каждый раз.

RTU должен быть подключен к интернету для обновления пакетов из официальных источников.

Переходим в меню управления пакетами "Программное обеспечение":


Нажимаем на "Обновить списки":

Увидим ответное окно с информацией о обновлении из репозитория.


Пробуем установить пакет, например agetty:


В ответ увидим информацию по установке:


Основной источник пакетов указан в "Конфигурации" пакета установщика OPKG:

Также можно вносить свои репозитории в список.




2. Ручная установка пакетов

Можно легко устанавливать те пакеты. которых нет ни в одном репозитории просто загрузив в роутер

Загрузка и установка пакета


После выбора файла и нажатия на кнопку установить, отобразится результат установки.


3. Консольные операции с пакетными приложениями

Аналогичные действия можно произвести через консоль

Обновим информацию по доступным пакетам

Увидим процесс обновления

Пробуем установить пакет agetty

opkg install agetty

Основная конфигурация источников ПО

Пользовательская конфигурация источников

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

Например мы загрузили файл enlogic_1-18_mxs.ipk в папку /tmp роутера.

Установим этот пакет

opkg install /tmp/enlogic_1-18_mxs.ipk

Installing enlogic (1-18) to root.
Configuring enlogic.
Starting EnLogic system

prepare to start EnLogic system
starting enlogic system

Удаление пакетов происходит аналогичным образом, только вместо команды install, команда remove

Настройка VirtualBox


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

Выбор ОС

Носители

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

COM-порт

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

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

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

Проверяем репозиторий вместе с пакетом

Вы можете проверить всё на настоящем роутере (не забудьте только выбрать правильный таргет), но я воспользовался Докером. В Докерхабе есть образ OpenWrt для x86_84, который можно запустив, пробросив внутрь контейнера директорию с SDK: sudo docker run -it --name openwrt_test -v $PWD:/opt openwrtorg/rootfs . Потыкайте кнопку ввода пока не появится приглашение Баша.

Копирую ключ из проброшенной директории ( cp /opt/key-build.pub /etc/opkg/keys/usign -F -p /opt/key-build.pub , название ключа обязательно должно совпадать с идентификатором), добавляю свой локальный репозиторий ( echo src/gz local file:///opt/bin/packages/x86_64/base >> /etc/opkg/customfeeds.conf ), обновляю репозиторий ( opkg update ). Вывод начинается с обнадёживающего текста, всё подписано верно:


Осталось только установить и проверить:


Ура, готово! Несмотря на разбросанную по статьям документацию, процесс сборки пакетов довольно прост.

Предпологается что у нас установлена OpenWRT на роутер, а на компьютере Windows.

Скачиваем, и начинаем действовать:
1. Сохранение репозитория OpenWRT на диск (ознакамливаеся и скачиваем репозиторий).
2. HSF

И так. Скачали репозиторий. Для начала подключим роутер по LAN (можно и по wifi) и скармливаем папку с репозиторием HSF.

Открываем и добавляем папку pakages.

Туда скачиваем Packages.gz Это для того чтобы opkg распознала информацию о пакетах, без него будет ошибка.

http://storage3.static.itmages.ru/i/13/0123/h_1358955062_6061383_3ebe7e4b06.jpg

Я выбрал реальную папку.

http://storage4.static.itmages.ru/i/13/0123/h_1358955092_8739295_a97c583e0c.jpg

Затем сохранил как файловую систему.

http://storage1.static.itmages.ru/i/13/0123/h_1358955398_8668990_9913cbfa8d.jpg

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

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

vi /etc/opkg.conf

Меняем на ссылку, что нам дал HSF.

http://storage4.static.itmages.ru/i/13/0123/h_1358956495_8619997_aeb82bad5e.jpg

Внимание! Убедитесь что в конце ссылки не стоит "/"

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

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

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

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

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

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

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

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

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

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

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

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

Устройство репозитория

В файловой системе OpenWrt есть файл /etc/opkg/distfeeds.conf , в нём указывается системный (предоставленный разработчиками OpenWrt и opkg) список репозиториев. Собственные и сторонние репозитории можно указать в /etc/opkg/customfeeds.conf . Формат однострочный, состоит из трёх слов:

  1. src или src/gz , от этого зависит, будет качаться файл Packages или Packages.gz . Судя по коду, есть другие опции для первого слова, но я не нашёл репозиториев, для которых это было бы актуально. Несмотря на src в названии, это репозиторий для бинарных пакетов. Специального формата репозиториев для пакетов с исходным кодом, аналогичного тому, что используется в Debian/APT, у opkg не предусмотрено.
  2. Название репозитория или «фида» в терминологии opkg/OpenWrt.
  3. URL, внутри которого лежит файл Packages / Packages.gz .
  1. При перезагрузке кэш очистится. На встроенных системах вроде роутеров это абсолютно разумно.
  2. В /etc/opkg/customfeeds.conf можно оверрайдить системные фиды своими собственными, дав им такое же название. opkg ругнётся, но проглотит оверрайд, сложив нужный файлик вместо загруженного ранее.
  • Package , имя пакета;
  • Version , версия, при наличии нескольких пакетов с одинаковым именем можно выбрать версию, по умолчанию установится самая свежая;
  • Depends , зависимости от других пакетов, пакетный менеджер доустановит перечисленные пакеты в случае их отсутствия в системе;
  • Filename , путь к файлу относительно базового URL репозитория, обычно репозиторий плоский и всё лежит там же, где и `Packages.gz`;
  • SHA256sum , заявленный репозиторием хэш пакета.

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

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

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

Система сборки пакетов

Сборочная система (она же SDK) выполнена в виде Make-фреймворка. Фреймворк не подразумевает, что вы будете собирать пакеты по отдельности, его основная задача заключается в сборке целых репозиториев.

SDK для x86_64 лежит в git. Есть архив (ссылка скоро устареет, но найти свежий несложно), который сэкономит вам время на компиляции тулчейна для сборки. Внутри особый интерес представляет файл feeds.conf.default . Формат несложный, через пробел:

  1. Ключевое слово src-git . Поддерживается не только git, но сейчас репозиториев в иных VCS нет.
  2. Название фида.
  3. URL git-репозитория, в котором можно указать коммит или тег. Если вы знаете, как называется такая спецификация, подскажите, пожалуйста.

Настройка VirtualBox








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


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

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

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

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

Использование пакетного менеджера OPKG

→ opkg – Полное описание всех команд. Ниже приведен короткий список самых часто используемых команд:

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


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

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

Официальные пакеты

У каждого нового релиза есть своя дирректтория, в которую входят суб-дирректории для различных поддерживаемых платформ, а каждая платформная дирректория содержит собранные файлы (pre-build images), а дирректория packages содержит установочные файлы *.ipk.

Сторонние пакеты

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

Примеры источников сторонних пакетов:

Создание собственных пакетов

Тестовая сборка

Я попробовал собрать GNU Hello, чтобы проверить, как работает SDK. Это сравнительно монструозный Hello World, написанный в строгом соответствии с гайдлайнами проекта GNU, его единственная задача заключается в иллюстрации этих гайдлайнов. Отдельный репозиторий для него не создавал, а вместо этого «подсунул» в базовые пакеты SDK, откуда и скомпилировал.

Для работы самого SDK в окружениии Debian понадобятся пакеты libncurses-dev (для меню сборки), build-essential (GCC и прочие стандартные зависимости программ на C), gawk , unzip , file , rsync и python3 . Также для создания репозитория из собранных пакетов, потребуется утилита для генерации ключей usign . Её в репозитории нет, поэтому дополнительно потребуется `cmake` для сборки. Этот инструмент можно заменить как на GPG, так и на signify-openbsd , но она рекомендуется и разрабатывается проектом OpenWrt, а также гораздо приятней в использовании.

Компилируем и устанавливаем usign :


Вместо установки ( sudo make install ) можете просто запомнить, где находится бинарь, чтобы в дальнейшем дёргать его руками.

Теперь базовая настройка SDK:


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

Выполняя ./scripts/feeds update -a мы клонируем/обновляем все репозитории из feeds.conf(.default), проверяем зависимости и готовим директорию staging_dir/host/bin с исполняемыми файлами (в основном это симлинки на системные утилиты). Следующая команда, ./scripts/feeds install -a , рассовывает симлинки в package/feeds , откуда они и будут браться для компиляции. Эти две команды не обязательны для сборки моего кастомного пакета.

Далее выполняется make menuconfig . Можно пропустить, но при компиляции пакета всё равно выдаст соответствующее окошко. В нём достаточно поменять таргет и сабтаргет, чтобы всё скомпилировалось под x86_64 и выйти, согласившись с сохранением конфига. Также потребуется собрать вспомогательный инструментарий для сборки ( make tools/install ) и тулчейн ( make toolchain/install ). Если вы качали SDK из архива, то make menuconfig вам не покажет опций для выбора таргета, а сборка инструментария и тулчейна не требуется — всё уже есть на месте.

Теперь я создаю директорию package/devel/hello , в которой размещаю Makefile следующего содержания:

В основном всё должно быть понятно без пояснений. Подключаются файлы фреймворка, описываются основные параметры пакета, @GNU подменяется на зеркала проекта GNU (определены во фреймворке), а путь состоит из двух частей: PKG_SOURCE_URL , в котором указывается базовый URL для всех версий и расширяется конкатенацией именем файла из PKG_SOURCE через слэш. В Package/hello/install содержатся инструкции по сборке бинарей в архив data.tar.gz . Дополнительные опции для сборки, если потребуются, доступны в документации. Кстати, не забудьте, что make очень требователен к отступам, у меня вместо начальных пробелов были одиночные табы.

Снова вызываете make menuconfig , проверяете, что в обозначенной секции (Development в моём случае) отмечен пакет hello и выходим сохранив конфиг. Наконец, собираем пакет в три этапа; скачивание, распаковка и собственно компиляция:


В результате я получил пакет bin/packages/x86_64/base/hello_2.9-1_x86_64.ipk . Можно собирать репозиторий. Генерируем пару ключей ( usign -G -c 'openwrt test repo' -s key-build -p key-build.pub , приватный ключ обязательно должен называться `key-build`), и собираем репозиторий: make package/index . На этом этапе сборка может ругнуться на отсутствие usign в директории со вспомогательными утилитами, я решил проблему симлинком: ln -s `which usign` staging_dir/host/bin/usign . Теперь рядом с пакетом лежит полный набор, необходимый для репозитория.

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


Запустите виртуальную машину. По окончании загрузки нажмите 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, пароль вы задали при первой загрузке.

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