Создание собственных расширений

Не секрет, что "узким местом" TCL является слабая база приложений в репозиториях. К сожалению разработчики уделяют её наполнению мало времени, и если в базе все же вы смогли найти нужное вам расширение, то с большой долей вероятности версия пакета будет сильно устаревшей. С момента моей связи с разработчиками и предложения им своей помощи в компиляции пакетов репозиторий CorePure64 (а именно его я использую последнее время) пополнился полезными новинками. hostapd-2.6 с поддержкой N-режима, обновленный PPPD умеющий теперь работать с IPv6, обновленный до версии PHP-7.1.9, как модуль APACHE так и PHP7-FPM, (о юансах настройки можно прочитать тут). В очереди на проверку такие полезные демоны для сборки роутера-минисервера как radvd, bftpd и драйвер недавно мною приобретенного на алиескпрессе всеядного модема HP un2400 на базе чипсета GOBI1000.

Что ж, база расширений TCL неспеша наполняется всё новыми расшиерниями. Но что делать, если нужного пакета в репозитории нет, а он позарез нужен? Правильно, будем создавать расширение сами. Или говоря на языке линуксоидов "компилировать" из исходников. На самом деле не так страшен чёрт как его рисуют, и в создании своего собственного пакета нет особых сложностей. Особенно если вы компилируете что-то простенькое, вроде FTP-сервера bftpd. Итак, начнём пожалуй.

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

tce-load -iw compiletc

Далее нам необходимы исходники. Их можно раздобыть на сайтах разработчиков. Как правило это *.tar.gz архивы, которые легко можно распаковать архиватором 7z, либо прямо из командной строки. После распаковки вы получите папку с исходными кодами написаными на Си. Для удобства я копирую исходники в домашнюю дирректорию /home/tc/. Так как в нашем примере мы собираем простенький bftpd, то после распаковки у нас появится папка /home/tc/bftpd/ с файлами внутри. За сборку пакета отвечает файл Makefile. Упрощенно говоря, в этом файле содержатся инструкции, некий сценарий по которому компилятор собирает бинарные файлы. Однако Makefile существует не всегда, и в этом случае файл генерируется другим скриптом, называемым конфигурационным. В конфигурационном скрипте разработчики исходников дают вам возможность задействовать или отключить те или иные опции, с которыми в последствии пакет будет собираться. Обычно настройки по умолчанию являются подходящими для большинства систем и пользователей. Менять конфигурационные настройки стоит лишь тогда, когда вы точно уверены в том, что делаете.

Конфигурационные файлы как правило имеют логичные названия configure, config или ещё проще conf. Для запуска процесса конфигурирования после правки этого файла в корне каталога достаточно его запустить:

cd /home/tc/bftp
./configure

Дело сделано. Теперь у нас есть сценарий сборки в виде файла Makefile. Всё готово к компиляции. Однако нам нужно задать ешё несколько важных переменных компилятора. Эти переменные укажут сборщику тип и архитектуру процессора, под который собирается пакет, а также тип операционной системы. Для CorePure64 эти значения будут следующими:

export CFLAGS="-mtune=generic -Os -pipe"
export CXXFLAGS="-mtune=generic -Os -pipe"
export LDFLAGS="-Wl,-O1"

Теперь мы достигли кульминационного момента. Барабанная дробь, и...

mkdir /home/tc/package
make DESTDIR=/home/tc/package install

Как видно, мы инсталлируем бинарные файлы не прямиком в систему, а в отдельную папку /home/tc/package/. Зачем это мы делаем, я объясню чуть позже, а пока идёт процесс компилирования исходников я расскажу ещё про некоторые нюансы сборки пакетов.

Обычно "мелкие" софтины вроде bftpd самодостаточны и не требуют для своей сборки дополнительных библиотек. Однако если в процесе компиляции выдается предупреждение об отсутствии тех или иных библиотек, вам придется их скачать и установить. К примеру для сборки того же hostapd-2.6 потребуются libnl и openssl. Причем не только сами пакеты но и исходные файлы. В репозитории такие расширения имеют то же название но с добавлением "-dev". Поэтому перед сборкой hostapd-2.6 кроме compiletc.tcz необходимо установить следующее:

tce-load -iw openssl-dev
tce-load -iw libnl-dev

В необходимиости тех или иных библиотек разработчики уведомляют в инструкциях по сборке, вроде файлов README. Но как показывает практика, настоящий инженер лезет в инструкции лишь после того, как компиляция прерывается с ошибками, а решений в GOOGLE найдено небыло.

Пока мы тут философствовали, наш FTP-сервер успешно собрался и "установился" в /home/tc/package. Теперь если мы полезем в эту директорию то увидим наши папки. Точнее файлы и папки, которые при копировании в корень системы "займут" свои законные места. Бинарный файл (читай exe-шник) осядет в /usr/sbin/, а конфигурационный файл bftpd.conf уютно расположится в /usr/etc/. Вам не кажется что чего-то не хватет? Видимо привычного управляющего скрипта в нашей папке /usr/local/etc/init.d/. Создаем эти папки по адресу /home/tc/package/, копируем туда скрипт созданый по образу и подобию того же POLIPO (посмотреть можно тут), называем его bftpd и переходим к финальному этапу сборки.

Ещё в особенностях работы TCL я упоминал про файловую систему squashfs. Речь шла о том, что все расширения представляют собой упакованые архивы монтируемые в систему во время загрузки. Таким образом нам необходимо упаковать всё содержимое папки /home/tc/package в единый образ. Этим и займёмся. Установим упаковщик:

tce-load -iw squashfs-tools

И упакуем в файл:

mksquashfs package bftpd.tcz

Последний штрих - контрольная сумма.

md5sum -t bftpd.tcz > bftpd.tcz.md5.txt

Теперь в папке /home/tc/ у нас будут готовое расширение bftpd.tcz и файл с контрольной суммой bftpd.tcz.md5.txt. Всё это добро копируем в дирректорию /tce/optional/, на нашем носителе (флешке), а в список автозагрузки tce/onboot.lst добавляем строчку:

tce/onboot.lst

...
bftpd.tcz

Если для компиляции вам потребовались сторонние библиотеки, как для случая с hostapd-2.6, вам придется создать ещё один файл с зависимостями такого плана:

hostapd-2.6.tcz.dep

libnl.tcz
openssl.tcz

Теперь во время загрузки системы смонтируется не только hostapd-2.6.tcz, но и все его необходимые библиотеки. Естественно файлы libnl.tcz и openssl.tcz должны присутствовать в /tce/optional/.

В принципе собраных таким образом расширений достаточно для домашнего пользования, однако эти пакеты можно ещё немного "облагородить". Точнее провести их верификацию на соответствие стандартам расширений TCL. Для этого придётся установить и запустить submitqc.tcz

tce-load -iw submitqc
submitqc --tcz=/home/tc/bftpd.tcz --strip --fix

Эта полезная утилита проверяет корректность упаковки файлов в squashfs, исправляет несоответствия с уровнями прав на папки и файлы, убирает "лишний жирок" с бинарных файлов (опция --strip), проверяет наличие всех необходимых файлов и выводит подробный отчет с рекомендациям к исправлению. Если расширение проходит валидацию без замечаний - поздравляю, ваш новоиспеченный пакет может претендовать на почетное место в репозитории Tiny Core Linux.

ранее: "Переходим на PHP-FPM"далее: "Служба автозапуска"

Обсуждение темы ещё не открыто. Вы можете быть первым.


Оставить комментарий

Имя:

Сообщение: