Компиляция отдельного пакета для OpenWRT
- Подробности
- Категория: Сборка
- Опубликовано: 05 января 2018
- Просмотров: 21005
Очень часто бывает так, что существующий в репозитарии OpenWRT установочный пакет какого-нибудь приложения не работает должным образом, либо вообще скомпилирован кривовато, что вызывает немало проблем. Как правило разработчики выпускают патчи, которые призваны решать возникающие проблемы с этими приложениями у пользователей. Но вот сам репозитарий для конкретной ветки OpenWRT пропатченые пакеты как правило не компилирует, и пользователям приходится делать выбор: переходить на более новую версию прошивки OpenWRT, где эта проблема уже устранена, либо применить патч, а то и вовсе собрать пакет под старую уже установленную и отлаженную систему любимого роутера.
Вообще обратиться к этой теме мне пришлось, когда я пытался расширить дисковую память на своем роутере на Chaos Calmer 15.05.1. Принциально не хотел собирать свою прошивку, так как собранная разработчиками меня полностью устраивала, за исключением отсутствием свободного места. Именно в процессе получения внешнего overlay мне и пришлось повысить версию пакета f2fs-tools до рабочего состояния. На его примере и попытаюсь раскрыть эту тему.
1. Получение исходных кодов, выбор пакета и подготовка инструментов
Будем компилировать пакет для ветки Chaos Calmer 15.05.1. Получаем исходные коды:
git clone -b v15.05.1 http://github.com/openwrt/chaos_calmer.git
cd chaos_calmer
Обновляем доступный список пакетов
./scripts/feeds update -a
Получаем необходимые правила для компиляции нужного нам пакета, в моем случае это f2fs-tools. После этой команды появится возможность выбрать наш пакет в конфигураторе
./scripts/feeds install f2fs-tools
Далее запускаем конфигуратор. Выбираем целовой профиль нашего роутера, у меня это TP-LINL-MR3020. Сохраняемся и выходим.
make menuconfig
ть
Дальше пробегаемся по зависимостям текущего профиля железа. Изменения в конфиг вносятся автоматически.
make defconfig
Далее запускаем опять конфигуратор, находим нужный для компиляции пакет, ставим напротив его галочку M, чтобы скомпилировать его как отдельный пакет для последующей установки.
make menuconfig
Далее устанавливаем нужные инструменты для компиляции пакета
make tools/install
make toolchain/install
2. Компиляция самого пакета
make package/f2fs-tools/compile
После чего в папке /bin/ar71xx/packages/packages/ вы найдете готовый к установке пакет и в большинстве случаев необходимые ему библиотеки.
3. Компиляция пакета более новой версии
Не редко бывает, когда попадаются какие-то нерабочие пакеты. Так и нужный мне пакет f2fs-tools версии 1.4.0 оказался нерабочим. Поэтому было принято решение собрать пакет из исходников более новой версии 1.4.1 где проблемы были устранены и зависимости от других пакетов системы и ядра linux были минимальны.
Сначала нужно скачать исходники новой версии пакета в формате архива .tar.gz и положить их в папку /dl. Я скачал исходники f2fs-tools-1.4.1.tar.gz. Далее переходим в папку feeds/packages/utils/f2fs-tools и открываем для редактирования файл Makefile. И меняем в нем версию нашего пакета:
После чего сохраняемся. Так как у нас уже была проведена компиляция пакета, для начала чистим результат сборки:
make clean
И запускаем сборку пакета по новой
make package/f2fs-tools/compile
Если все пройдет успешно то в папке /bin/ar71xx/packages/packages/ будет находиться уже новая версия нашего пакета. Естественно такой способ не прокатит, если зависимости новой версии пакета критичны. Сначала придется собрать пакеты зависимостей, а они в свою очередь наплодят новые. Так что замкнутый круг. Но данный хак позволил мне собрать пакет в в версии 1.4.1, а вот с переходом пакета на 1.5.0 уже нет.
4. Компиляция стокового пакета с использованием патча
Бывает, что для решения какой-то ошибки в пакете разработчик выпускает патч. Это как правило файл с расширением *.patch. Чтобы применить данный патч к вашему пакету - вам нужно сначала скопировать сам файл патча в папку feeds/папка вашего пакета/patches и сделать обычную компиляцию пакета.
Например, мне нужно было собрать пакет block-mount с патчем поддержки файловой системы f2fs. Так как исторически пакет был зависим с псевдопакетом fstools, патчить пришлось последний. Создаем папку для патчей если ее там еще нет:
mkdir ./package/system/fstools/patches/
Получаем сам патч от разработчиков и кладем его в папку patches
wget -O ./package/system/fstools/patches/0001-add_f2fs_as_supported_extroot.patch https://dev.openwrt.org/attachment/ticket/21858/0001-add_f2fs_as_supported_extroot.patch
Зачищаем ранее собранные части пакета
make package/system/fstools/clean
И компилируем его
make package/system/fstools/compile
После чего в папке /bin ищем свежесобранные пропатченные block-mount и fstools.
Комментарии
мне собрать вот этот пакетик
Я парюсь что то
cyber-place.ru/showpost.php?p=39236&postcount=372
------------
Applying ./patches/010-ntohl-ntohs-replacement.patch using plaintext:
patching file core/hashRegManager.cpp
Hunk #1 succeeded at 43 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 622 with fuzz 1 (offset -18 lines).
Hunk #3 FAILED at 657.
1 out of 3 hunks FAILED -- saving rejects to file core/hashRegManager.cpp.rej
Patch failed! Please fix ./patches/010-ntohl-ntohs-replacement.patch!
Makefile:52: recipe for target '/home/rafa/lede/openwrt/build_dir/target-mips_24kc_musl-1.1.16/ptokax-0.4.2.0/.prepared_f4266b2023b080ba06b61036dd7251df' failed
make[2]: *** [/home/rafa/lede/openwrt/build_dir/target-mips_24kc_musl-1.1.16/ptokax-0.4.2.0/.prepared_f4266b2023b080ba06b61036dd7251df] Error 1
make[2]: Leaving directory '/home/rafa/lede/openwrt/package/ptokax'
package/Makefile:105: recipe for target 'package/ptokax/compile' failed
make[1]: *** [package/ptokax/compile] Error 2
make[1]: Leaving directory '/home/rafa/lede/openwrt'
/home/rafa/lede/openwrt/include/toplevel.mk:198: recipe for target 'package/ptokax/compile' failed
make: *** [package/ptokax/compile] Error 2
--------
Если вас не затруднит, версии 0.4.2.0 под тп линк
Вот 0.5 github.com/dcbeelinekz/ptokax_lede/tree/master/ptokax
Сделать под github.com/dcbeelinekz/PtokaX-0.4.2.0-LEDE
Спасибо, что откликнулись, если даже не удастся собрать, все равно спасибо за потраченное время и за полезные статьи на сайте, они помогают людям находить что то интересное и новое для себя
Очень легкий сервер, вот сам makefile который я нашел в гугле: forum.openwrt.org/viewtopic.php?id=11126
Вот хотел бы под свежее версию сделать, закинул на гит
github.com/dcbeelinekz/DBHUB_LEDE_OPENWRT/blob/master/Makefile
гуглами так же нашел вот это searchcode.com/codesearch/view/40126898/
сам исходник вот github.com/dcbeelinekz/DBHUB_LEDE_OPENWRT/blob/master/dbhub-0.451.tgz
Сам DBHUB поход на OPENDCHUB
вот исходник второго: github.com/dcbeelinekz/OPENDCHUB_0.8.3_LEDE/blob/master/Makefile
Помогите пожалуйста, мне 15 лет, я тока учусь ))
Коллега, нужна ваша помощь.
Готов оплатить работу в случае успеха.
Для OpenWRT под MIPS Ralink/7621/ Mikrotik RBM33g.
Требуется откомпилировать CUPS-Filters и QT5 MariaDB Driver, SQLite driver.
Проблема в том, что для компиляции CUPS-Filters требуется также учесть множество зависимостей.
Есть openWRT на Mikrotik RBM33G.
Задача:
получаем (всегда) PDF со сканера, т.е. PDF с набором картинок.
Далее требуется печатать с масштабированием, дуплексом, брошюрированием.
Решение:
Установлен CUPS 2.2.10 (скомпилирован под OpenWRT прямо на Mikrotik)
Выполняем печать "сырого" документа командой
lp -o raw /tmp/A4.pdf
и все ok!
Но как только я пытаюсь применить хоть одно преобразование PDF документа, например:
lp -o natural-scaling=25 /etc/copysafe/A4.PDF
ставит задание в очередь, но ничего не происходит.
Появилось предположение что не хватает фильтров. Об этом же говорит LOG:
E [24/Jan/2019:06:25:02 +0300] Filter \"imagetopdf\" not found.
E [24/Jan/2019:06:25:02 +0300] Filter \"bannertopdf\" not found.
E [24/Jan/2019:06:25:02 +0300] Filter \"pdftops\" not found.
E [24/Jan/2019:06:25:02 +0300] Filter \"pdftoraster\" not found.
E [24/Jan/2019:06:25:02 +0300] Filter \"imagetoraster\" not found.
Вот и появилась задача скомпилировать фильтры для обработки PDF.