Как установить дополнительное ПО на домашный роутер (DD-WRT)

Быстрые ссылки
- Испытания и ограничения
- Что такое Opkg
- Требования и подготовка
- Пошаговая установка
- Настройка автозапуска
- Тесты, проверка и отладка
- Безопасность и локализация
- Справочные материалы и контрольный список
Испытания и ограничения
Я приобрёл Buffalo WZR-HP-AG300H с переименованной версией DD-WRT и обнаружил: официальные инструкции Optware/Ipkg не всегда совместимы с Atheros (ar71xx). Эти различия потребовали ручного извлечения библиотек и настройки путей выполнения. Цель этого руководства — дать воспроизводимый, пошаговый процесс, минимизирующий риск и облегчающий установку Opkg поверх существующей прошивки.
Важно: некоторые модели и сборки DD-WRT отличаются по объёму JFFS и доступным опциям. Всегда делайте резервную копию конфигурации и имейте план восстановления, прежде чем выполнять изменения.
Important: если у вас нет минимум ~4 МБ доступного постформатного пространства JFFS, описанные ниже преимущества ограничены. С 2 МБ можно провести базовую установку, но придётся каждый раз явно указывать конфиг Opkg — неудобно.
Что такое Opkg
Opkg — это лёгкий менеджер пакетов (форк ipkg), используемый в проектах вроде OpenWrt для загрузки и установки пакетов из репозиториев. Он автоматически пытается разрешить зависимости между пакетами и упрощает установку демонов и утилит на встроенные устройства.
Коротко: Opkg — это пакетный менеджер уровня ipkg/apt, адаптированный для встроенных Linux‑сред.
Пример пакетов, которые можно поставить: Transmission (BitTorrent), ssmtp (отправка почты), knockd (port knocking). Opkg упрощает управление зависимостями по сравнению с ручной установкой.
Требования и подготовка
Перед началом подтвердите следующее:
- Маршрутизатор на базе Atheros (ar71xx) с установленной DD-WRT подходящей ревизии. Я тестировал на Buffalo WZR-HP-AG300H (программная версия 17135 Pro). Другие модели на ar71xx, скорее всего, совместимы, но поведение может отличаться.
- Включён SSH‑доступ к роутеру; клиент WinSCP или аналог для копирования файлов. Если вы не включили SSH, сделайте это в WebGUI (Administration -> Services / Management — в зависимости от сборки).
- Умение подключаться к роутеру по терминалу (SSH). Инструкции есть на DD-WRT wiki.
- Доступное пространство JFFS и по крайней мере 4 МБ постформатного свободного места. Без этого вы не получите полноценного результата.
Примечание: при минимуме 2 МБ можно обойтись, но придётся каждый раз указывать опции Opkg вручную.
Краткий план действий
- Включить JFFS и SSH, подключиться к роутеру.
- Загрузить пакет opkg для архитектуры ar71xx и установить его через ipkg.
- Извлечь необходимые динамические библиотеки из корневого rootfs OpenWrt и скопировать в /jffs/usr/lib.
- Настроить LD_LIBRARY_PATH, скопировать /etc в JFFS и сделать bind‑mount, чтобы /etc стал читаемозаписываемым.
- Перенаправить /opt на JFFS и изменить opkg.conf, чтобы пакеты устанавливались в /opt.
- Создать и зарегистрировать скрипт автозапуска, монтирующий /etc и /opt при загрузке.
- Проверить работу opkg и установить пакеты вроде net-tools-netstat.
Пошаговая установка
Ниже — подробная последовательность команд и пояснений. Выполняйте их в терминале, подключённом к роутеру через SSH.
Внимание: команды изменяют системные файлы. Работайте аккуратно.
Подготовка рабочего каталога
Откройте SSH‑сессию и создайте временный каталог:
mkdir -p /tmp/1
cd /tmp/1Установка Opkg через Ipkg
Сначала загрузите пакет Opkg для ar71xx из ветки снимков OpenWrt и установите его ipkg:
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/opkg_618-2_ar71xx.ipk
ipkg install opkg_618-2_ar71xx.ipkNote: версия пакета (618-2) могла измениться; проверьте актуальную версию в репозитории OpenWrt для вашей архитектуры.
Если у вас другая архитектура — загрузите пакет opkg соответствующей архитектуры.
Получение динамических библиотек (lib)
Opkg из OpenWrt ожидает наличие определённых общих библиотек. Их можно извлечь из rootfs OpenWrt:
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-rootfs.tar.gz
tar xvzf openwrt-ar71xx-generic-rootfs.tar.gz
cp -Pp /tmp/1/lib/* /jffs/usr/lib/Примечание: вывод tar может указывать на опущенные подкаталоги — это нормально; нам нужны только файлы lib.
Настройка LD_LIBRARY_PATH
Чтобы система использовала эти библиотеки в первую очередь, временно установите переменную окружения:
export LD_LIBRARY_PATH=/jffs/usr/lib:$LD_LIBRARY_PATHЭта команда действует только в текущей сессии; позже мы добавим её в скрипт автозапуска.
Сделать /etc доступным для записи
Чтобы пакеты могли сохранять конфигурации в /etc, переместим /etc в JFFS и сделаем bind‑mount.
mkdir -p /jffs/geek/etc
cp -a /etc/* /jffs/geek/etc/
mount -o bind /jffs/geek/etc/ /etc/Пояснение: bind‑mount перенаправляет обращения к /etc в версию на JFFS, которая является записываемой.
Перенаправить /opt на JFFS
Opkg по умолчанию ожидает корень файловой системы доступным для записи. Мы зададим /opt как каталог установки пакетов и переместим его на JFFS:
mkdir -p /jffs/opt
mount -o bind /jffs/opt/ /opt/Для продвинутых пользователей: можно указать в opkg.conf путь к дисковому разделу (USB HDD) вместо JFFS, чтобы сохранить место в JFFS.
Изменение конфигурации opkg
Переместите конфиг opkg в /etc (теперь это JFFS) и отредактируйте пути:
mv /jffs/etc/opkg.conf /etc/
vi /etc/opkg.confСодержимое opkg.conf должно содержать корректный источник и указание каталога установки. Пример обновлённой строки конфигурации (в одну строку):
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlayИзмените dest root / на dest root /opt или укажите опции так, чтобы пакеты попадали в /opt. Один из возможных вариантов (см. ниже в шаблоне конфигурации).
Примечание: если вы укажете lists_dir на JFFS, списки пакетов останутся после перезагрузки, но вы пожертвуете ~1.5 МБ в JFFS — учтите компромисс.
Проверка работы Opkg
Обновите списки пакетов и посмотрите доступное:
opkg update
opkg listЕсли команды прошли без ошибок, Opkg функционирует.
Установка тестового пакета (netstat)
Проверим установку утилиты netstat (иногда отсутствует в DD-WRT):
opkg update
opkg list | grep netstat
opkg install net-tools-netstat
netstat -anПосле установки netstat должен работать.
Скрипт автозапуска (geek-init.sh)
Чтобы все бинды и настройки применялись при каждой загрузке, добавьте и зарегистрируйте инициализационный скрипт. Ниже — пример простого geek-init.sh. Отредактируйте пути и команды под вашу конфигурацию.
#!/bin/sh
# geek-init.sh — инициализация JFFS, библиотек и путей для Opkg
# Создано для запуска на старте системы
# Подождать пока система смонтирует базовые fs
sleep 2
# Подключаем /jffs/usr/lib в LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/jffs/usr/lib:$LD_LIBRARY_PATH
# Bind /etc к /jffs/geek/etc если ещё не смонтировано
if [ -d /jffs/geek/etc ] && [ ! -L /etc ]; then
mountpoint -q /etc || mount -o bind /jffs/geek/etc/ /etc/
fi
# Bind /opt к /jffs/opt
if [ -d /jffs/opt ] && [ ! -L /opt ]; then
mountpoint -q /opt || mount -o bind /jffs/opt/ /opt/
fi
# Убедимся, что opkg использует правильный config
if [ -f /etc/opkg.conf ]; then
echo "opkg config OK"
fi
exit 0Установите права и подключите в WebGUI (Administration -> Commands) командой:
chmod +x /jffs/geek/etc/geek-init.sh
# В WebGUI -> Administration -> Commands вставьте:
/jffs/geek/etc/geek-init.sh web-gui
# Нажмите Save StartupПримечание: путь к скрипту и способ регистрации могут отличаться в зависимости от вашей сборки DD-WRT.
Отладка и типичные ошибки
Ниже — частые проблемы и способы их решения.
- Ошибка “opkg: not found” после установки: проверьте LD_LIBRARY_PATH и наличие бинарника /opt/bin/opkg. Переместите пути, перезапустите сессию.
- Ошибки о недостающих символах при запуске opkg: значит, не все необходимые библиотеки скопированы. Проверьте содержимое /jffs/usr/lib и сравните с rootfs из OpenWrt.
- “Not enough space” при установке: проверьте свободное место в /jffs и /opt. Возможно, стоит перенести списки пакетов в RAM (если есть место) или подключить внешний диск.
- При перезагрузке бинды не сохраняются: убедитесь, что скрипт стартапа зарегистрирован в WebGUI и запускается. Логи можно смотреть в /var/log/messages (если доступны) или подключиться по UART/SSH сразу после загрузки.
Расширенная диагностика
- Проверить наличие библиотек:
ls -l /jffs/usr/lib | grep lib
ldd /opt/bin/opkg- Проверить точки монтирования:
mount | grep jffs
mount | grep bind- Логи ошибок opkg:
opkg update 2>&1 | tee /tmp/opkg-update.log
cat /tmp/opkg-update.logБезопасность и лучшие практики
- Всегда обновляйте только из проверенных репозиториев. Для ar71xx используйте официальные snapshot‑репозитории OpenWrt или проверенные зеркала.
- Отключите удалённый доступ по Telnet; используйте SSH с ключами. В WebGUI отключите remote administration.
- Ограничьте сетевой доступ к сервисам, которые вы установите (например, BitTorrent или веб-интерфейсы). Закрывайте ненужные порты в firewall DD-WRT.
- Резервные копии: сохраните конфигурацию DD-WRT (Administration -> Backup) и сделайте копию /jffs перед глобальными изменениями.
- Привилегии: не запускайте дополнительные демоны с правами root, если это можно избежать; используйте возможности sandboxing/изоляции там, где возможно.
Privacy note: если вы на роутере устанавливаете почтовые агенты или серверы, помните, что конфигурации и логи могут содержать персональные данные. Храните их защищёнными и регулярно очищайте/архивируйте.
Альтернативные подходы
- Установка Ipkg в firmware: прошивка кастомной сборки с ipkg/opkg (более рискованно, требует перезаписи flash).
- Использование USB HDD для /opt: экономит JFFS и повышает выгодность установки больших пакетов. Потребует монтирования ext2/3/4 и корректных fstab/инициализаций.
- Использование chroot контейнера или скриптов для сборки приложений локально на ПК и копирования бинарников в /opt (сложно из‑за зависимостей).
Когда этот метод не подходит:
- Если у вас меньше 2 МБ свободного места JFFS.
- Если ваша сборка DD-WRT не поддерживает bind‑mount или имеет ограниченный набор утилит.
Чек‑лист перед началом
- Выполнен backup конфигурации DD-WRT
- Включён SSH и протестировано подключение
- Включён JFFS и проверено свободное место (>4 МБ рекомендуемо)
- Подключён USB‑накопитель (если планируется использовать HDD)
- Подготовлен доступ к репозиторию OpenWrt (ссылка на ar71xx)
Ролевые чек‑листы
Администратор/установщик:
- Проверить совместимость архитектуры
- Подготовить пакеты opkg и rootfs
- Настроить автозагрузку и логи
Домашний пользователь:
- Сделать резервную копию настроек роутера
- Убедиться, что JFFS имеет место
- Установить минимальные пакеты (netstat, htop, busybox варианты)
Разработчик сервиса на роутере:
- Тестировать зависимости в chroot или на подобной архитектуре
- Минимизировать footprint пакета
- Логгировать ошибки установки
Критерии приёмки
Чтобы считать установку успешной, проверьте:
- opkg update проходит без ошибок.
- opkg list возвращает список пакетов.
- Установленный тестовый пакет (например, net-tools-netstat) запускается.
- После перезагрузки bind‑mount и LD_LIBRARY_PATH восстанавливаются автоматически через geek-init.sh.
Тесты и приёмочные сценарии
- Тест 1: После установки opkg выполнить opkg update; ожидание — завершение без ошибок.
- Тест 2: Установить net-tools-netstat; ожидание — успешная установка и работа команды netstat.
- Тест 3: Ребут роутера; ожидание — opkg продолжает работать и ранее установленные пакеты доступны.
Шаблоны конфигурации и примеры
Пример минимального /etc/opkg.conf (адаптируйте URL и пути под вашу арх-туру):
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
dest root /opt
dest ram /tmp
lists_dir /tmp/opkg-lists
option overlay_root /overlayПример записи в WebGUI Administration -> Commands для автозапуска:
/jffs/geek/etc/geek-init.sh web-guiМентальные модели и эвристики
- Treat JFFS как ограниченный ресурс: экономьте место, переносите большие пакеты на внешний диск.
- Если пакет требует запись в /etc — обеспечьте bind‑mount /etc на JFFS.
- Используйте opkg для управления зависимостями; если пакет отсутствует, ищите пакет с похожим именем в repo.
Совместимость и миграция
- Архитектура должна совпадать: ar71xx пакеты не будут работать на mipsel или other CPU.
- Если вы переходите на другую сборку DD-WRT, проверяйте наличие необходимых утилит (mount, tar, wget).
- При миграции на OpenWrt/LEDE — многие шаги опускаются, так как Opkg встроен.
Сценарии отказа и восстановление
- Если роутер не загружается: используйте TFTP/Recovery режим производителя для восстановления заводской прошивки.
- Если opkg ломает систему: войдите в режим single‑user через SSH (если доступно) и отмонтируйте /jffs или восстановите /etc из бэкапа.
Фактбокс
- Минимальный рекомендуемый размер JFFS для полноценной работы: ~4 МБ
- Минимальный возможный размер для упрощённой установки: ~2 МБ
- Опция lists_dir на JFFS экономит перезагрузки, но занимает ~1.5 МБ JFFS
Краткое резюме
Opkg даёт гибкость установки пакетов на роутер с DD-WRT без полной перепрошивки. Ключевые шаги: установка пакета opkg через ipkg, копирование библиотек из rootfs OpenWrt, перенаправление /etc и /opt на JFFS и автоматизация через startup‑скрипт. Следуйте чек‑листу, делайте бэкапы и применяйте базовые рекомендации по безопасности.
Summary:
- Проверьте совместимость и свободное пространство JFFS
- Установите opkg и необходимые библиотеки
- Перенаправьте /etc и /opt на JFFS
- Настройте автозапуск и протестируйте установку пакетов
Если вам нужна помощь с конкретной моделью роутера, выводом команды dmesg или логами opkg, приложите их — и я помогу проанализировать проблему.
“Если такая машина — виртуально невозможна, значит она конечная невероятность…”
Похожие материалы
Как подписаться на канал YouTube
DNS‑сервер не отвечает в Windows 7 — как исправить
Как смотреть американское ТВ через VPN
Как переключить аудио на YouTube
Форматирование в Google Sheets — TO_ функции