Разработка пакета
Разработка пакета
Есть два варианта:
- Просто поставить пакет на роутер или виртуалку и прямо редактировать через SFTP (opkg install openssh-sftp-server)
- SDK, чтобы собирать пакеты
Для сборки пакетов нужен SDK, один из вариантов скачать прям файл и разархивировать https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/ Нужен файл в имени которого есть SDK
wget https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/openwrt-sdk-24.10.2-x86-64_gcc-13.3.0_musl.Linux-x86_64.tar.zst
tar xf openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64 SDKПоследнее делается для удобства.
Создаём директорию для пакета
mkdir package/utilitesСимлинк из репозитория
ln -s ~/podkop/podkop package/utilites/podkop
ln -s ~/podkop/luci-app-podkop package/luci-app-podkopВ первый раз для сборки luci-app необходимо обновить и установить пакеты
./scripts/feeds update -a
./scripts/feeds install -aДля make можно добавить флаг -j N, где N - количество ядер для сборки.
При первом make выводится меню, можно просто save, exit и всё. Первый раз долго грузит зависимости.
Сборка пакета. Сами пакеты собираются быстро.
make package/podkop/{clean,compile} V=sТакже для LuCi
make package/luci-app-podkop/{clean,compile} V=sОба сразу
make package/luci-app-podkop/{clean,compile} package/podkop/{clean,compile} V=s.ipk находятся в bin/packages/x86_64/base/
Ошибки
Makefile:17: /SDK/feeds/luci/luci.mk: No such file or directory
make[2]: *** No rule to make target '/SDK/feeds/luci/luci.mk'. Stop.
time: package/luci/luci-app-podkop/clean#0.00#0.00#0.00
ERROR: package/luci/luci-app-podkop failed to build.
make[1]: *** [package/Makefile:129: package/luci/luci-app-podkop/clean] Error 1
make[1]: Leaving directory '/SDK'
make: *** [/SDK/include/toplevel.mk:226: package/luci-app-podkop/clean] Error 2Не загружены пакеты для LuCi
Зависимости make
https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem
Ubuntu
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils rsync unzip zlib1g-dev file wgetПримеры ссылок-конфигураций
https://github.com/itdoginfo/podkop/blob/main/String-example.md
Интернационализация (i18n)
Интернационализация — это подготовка пакета к переводу на разные языки.
На этом этапе помечаются строки кода, подлежащие локализации с помощью gettext,
и создаются шаблоны переводов .pot (Portable Object Template),
которые затем используются для создания конкретных файлов перевода .po.
В LuCI функция gettext имеет алиас _, который чаще используется в коде для краткости, например:
let o = s.tab('basic', _('Basic Settings'));Этапы создания или обновления шаблона перевода
- Перейдите в поддиректорию
luci-app-podkopпроектаpodkop.
cd luci-app-podkop- Запустите скрипт генерации шаблона переводов:
./xgettext.sh Скрипт соберёт все строки, помеченные с помощью _(), и создаст обновлённый шаблон перевода podkop.pot.
Шаблон перевода podkop.pot будет находиться в соответствующей папке шаблонов, обычно po/templates/podkop.pot
После этого .pot можно использовать для создания или обновления файлов перевода .po для нужных локалей.
Локализация (l10n)
Для локализации интерфейса podkop на выбранный язык используется дополнительный языковой пакет, например luci-i18n-podkop-ru.
Перед сборкой пакета следует обновить или создать файл перевода .po (Portable Object) для соответствующей локали.
Этапы создания или обновления перевода
- Перейдите в поддиректорию
luci-app-podkopпроектаpodkop.
cd luci-app-podkop- Запуск скрипта обновления перевода
Для создания или обновления .po файла используйте скрипт msgmerge.sh с указанием кода локали, например:
./msgmerge.sh ru- Скрипт автоматически создаст новый
.poфайл, если его ещё нет, или объединит существующий файл перевода с обновлённым шаблоном.pot .poфайлы будут находиться в соответствующей папке локали, обычноpo/<код_локали>/podkop.po
- Редактирование перевода
После выполнения скрипта откройте .po файл и переведите строки, помеченные как msgid, например:
msgid "Settings"
msgstr "Настройки"- Проверка
Проверьте корректность .po файла:
msgfmt po/ru/podkop.po -o /dev/null --checkПосле этого необходимо зафиксировать изменения шаблона .pot и файлов перевода .po, после чего отправить их в репозиторий.