Разработка пакета

Разработка пакета

Разработка пакета #

Есть два варианта:

  • Просто поставить пакет на роутер или виртуалку и прямо редактировать через 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'));

Этапы создания или обновления шаблона перевода #

  1. Перейдите в поддиректорию luci-app-podkop проекта podkop.
cd luci-app-podkop
  1. Запустите скрипт генерации шаблона переводов:
./xgettext.sh 

Скрипт соберёт все строки, помеченные с помощью _(), и создаст обновлённый шаблон перевода podkop.pot. Шаблон перевода podkop.pot будет находиться в соответствующей папке шаблонов, обычно po/templates/podkop.pot

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

Локализация (l10n) #

Для локализации интерфейса podkop на выбранный язык используется дополнительный языковой пакет, например luci-i18n-podkop-ru.

Перед сборкой пакета следует обновить или создать файл перевода .po (Portable Object) для соответствующей локали.

Этапы создания или обновления перевода #

  1. Перейдите в поддиректорию luci-app-podkop проекта podkop.
cd luci-app-podkop
  1. Запуск скрипта обновления перевода

Для создания или обновления .po файла используйте скрипт msgmerge.sh с указанием кода локали, например:

./msgmerge.sh ru
  • Скрипт автоматически создаст новый .po файл, если его ещё нет, или объединит существующий файл перевода с обновлённым шаблоном .pot
  • .po файлы будут находиться в соответствующей папке локали, обычно po/<код_локали>/podkop.po
  1. Редактирование перевода

После выполнения скрипта откройте .po файл и переведите строки, помеченные как msgid, например:

msgid "Settings"
msgstr "Настройки"
  1. Проверка

Проверьте корректность .po файла:

msgfmt po/ru/podkop.po -o /dev/null --check

После этого необходимо зафиксировать изменения шаблона .pot и файлов перевода .po, после чего отправить их в репозиторий.