OpenWRT.su

Open.Wireless.Super and LEDE

Компиляция отдельного пакета для OpenWRT

Компиляция отдельного пакета для OpenWRT

Очень часто бывает так, что существующий в репозитарии 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

ть Компиляция отдельного пакета для OpenWRT

Дальше пробегаемся по зависимостям текущего профиля железа. Изменения в конфиг вносятся автоматически.

make defconfig

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

make menuconfig 

Компиляция отдельного пакета для OpenWRT

Далее устанавливаем нужные инструменты для компиляции пакета

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.

Комментарии  

dcbeelinekz
+5 # dcbeelinekz 16.02.2018 18:20
Дорогой друг, можешь помочь своими мюслями
мне собрать вот этот пакетик

Я парюсь что то
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
--------
Ответить | Ответить с цитатой | Цитировать
Wrtman
+5 # Wrtman 16.02.2018 21:36
Вы хотите собрать пакет ptokax для openwrt lede какой версии? Под какой роутер?
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
+4 # dcbeelinekz 21.02.2018 18:51
Извините, отлучался
Если вас не затруднит, версии 0.4.2.0 под тп линк
Ответить | Ответить с цитатой | Цитировать
Linux_Addict
+2 # Linux_Addict 24.02.2018 08:33
под Chaos Calmer у тебя не получается cобрать? Или под LEDE?
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
+1 # dcbeelinekz 24.02.2018 17:32
Цитирую Linux_Addict:
под Chaos Calmer у тебя не получается cобрать? Или под LEDE?
Сама версия друга, с патчами нового PtokaX 0.5....под более поздний 0.4.... не получается сделать
Вот 0.5 github.com/dcbeelinekz/ptokax_lede/tree/master/ptokax

Сделать под github.com/dcbeelinekz/PtokaX-0.4.2.0-LEDE
Ответить | Ответить с цитатой | Цитировать
Linux_Addict
+2 # Linux_Addict 24.02.2018 19:49
Ну ты и не сможешь применить новые патчи к старой версии этого пакета. Только если сам перепишешь все патчи под старую версию. И смысле это делать если как ты говоришь есть рабочая версия пакета 0.5 которая собирается под LEDE без ошибок
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
+1 # dcbeelinekz 25.02.2018 05:09
По этому, я и пишу тут вопрос с помощью. Версия 0.4 более пожилая и в ней еще нету тех функций -тяжелых, которые нагружают роутер как версия новее
Ответить | Ответить с цитатой | Цитировать
Wrtman
+5 # Wrtman 21.02.2018 18:55
Под какую модель? tp linkов тысячи и архитектуры разные
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
+4 # dcbeelinekz 22.02.2018 03:02
ar71xx
Спасибо, что откликнулись, если даже не удастся собрать, все равно спасибо за потраченное время и за полезные статьи на сайте, они помогают людям находить что то интересное и новое для себя
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
+2 # dcbeelinekz 24.02.2018 05:15
Wrtman, дорогой как там успехи и время еще не тратил на сборку пакета?
Ответить | Ответить с цитатой | Цитировать
dcbeelinekz
0 # dcbeelinekz 26.02.2018 11:12
Либо можете помочь в этом пакете, хаб от 08 года сам
Очень легкий сервер, вот сам 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 лет, я тока учусь ))
Ответить | Ответить с цитатой | Цитировать
Max Chubin
0 # Max Chubin 23.01.2019 11:22
Доброго дня!
Коллега, нужна ваша помощь.
Готов оплатить работу в случае успеха.
Для OpenWRT под MIPS Ralink/7621/ Mikrotik RBM33g.
Требуется откомпилировать CUPS-Filters и QT5 MariaDB Driver, SQLite driver.
Проблема в том, что для компиляции CUPS-Filters требуется также учесть множество зависимостей.
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 23.01.2019 13:30
Что из CUPS-Filters требуется? Foomatic rip точно из за кучи зависимостей устанешь компилить. если достаточно OpenPrinting cups-filters то готовый make файл есть на гитхабе
Ответить | Ответить с цитатой | Цитировать
Max Chubin
0 # Max Chubin 24.01.2019 10:35
Давай я опишу проблему вцелом.
Есть 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.
Ответить | Ответить с цитатой | Цитировать
Wrtman
+1 # Wrtman 24.01.2019 12:05
В кросс компиляторе Openwrt собери github.com/FranciscoBorges/openwrt-printing-packages, по идее тебе не хватает пакета OpenPrinting's cups-filters, который собственно и включает в себя imagetopdf, bannertopdf,pdftops и прочие. Make файлы там готовые.
Ответить | Ответить с цитатой | Цитировать
Wrtman
+1 # Wrtman 24.01.2019 12:06
И зависимости тоже там соблюдены
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Если вы хотите получать сообщения c ответами на ваши комментарии - то укажите свой настоящий e-mail. Если же вы тут проездом, чтобы оставить комментарий укажите в поле email no@openwrt.su