[Решено] Сборка из исходников (этап создания пакета)

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Аватара пользователя
UnixNoob
Сообщения: 634
ОС: Slackware

[Решено] Сборка из исходников

Сообщение UnixNoob »

Добрый вечер. Решил я просто для пробы собрать плагин для KDE (во вложении).
Используя инструкцию отсюда, сделал следующее:

Код: Выделить всё

$cmake ~/Downloads/latte-dock-0.9/
$ make
$ mkdir /tmp/latte-dock
# make install DESTDIR=/tmp/latte-dock
# cd /tmp/latte-dock
# makepkg /tmp/latte-dock-0.9.txz
# cd; rm -r /tmp/latte-dock/
# upgradepkg --install-new /tmp/latte-dock-0.9.txz
На этапе makepkg мне написало про права доступа я честно говоря не очень понял что мне следует ответить и как правильно.

Код: Выделить всё

makepkg /tmp/latte-dock-0.9.txz
Slackware package maker, version 3.14159265.

Searching for symbolic links:

No symbolic links were found, so we won't make an installation script.
You can make your own later in ./install/doinst.sh and rebuild the
package if you like.

This next step is optional - you can set the directories in your package
to some sane permissions. If any of the directories in your package have
special permissions, then DO NOT reset them here!

Would you like to reset all directory permissions to 755 (drwxr-xr-x) and
directory ownerships to root.root ([y]es, [n]o)? 
У меня два вопроса:
1. Какой верный ответ (если он есть) и нужно ли запускать сборку от root или от пользователя? А то в теме,где я брал руководство было указано в случае cmake следующее:

Код: Выделить всё

make install INSTALL_ROOT=/tmp/pkg-нечто
2. Если есть вариант пакета в виде .rpm, будет ли проще использовать rpm2tgz/rpm2targz или предпочтительнее собирать с исходников?

P.S Зависимости я читал,но т.к Plazma установлена, думаю оно соберется.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось UnixNoob 06.11.2020 23:20, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18676
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Сборка из исходников

Сообщение Bizdelnick »

UnixNoob писал:
01.11.2020 17:48
Какой верный ответ (если он есть)
y
UnixNoob писал:
01.11.2020 17:48
нужно ли запускать сборку от root или от пользователя
От пользователя.
Добавлено (18:41):
UnixNoob писал:
01.11.2020 17:48
Если есть вариант пакета в виде .rpm, будет ли проще использовать rpm2tgz/rpm2targz или предпочтительнее собирать с исходников?
RPM собран в совершенно другом дистрибутиве и может иметь зависимости, которые в принципе невозможно удовлетворить в Slackware.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Сборка из исходников

Сообщение bormant »

UnixNoob писал:
01.11.2020 17:48
1. Какой верный ответ (если он есть) нужно ли запускать сборку от root или от пользователя
Если сборка не требует прав root, то запускать ее от root не много смысла.
В общем случае, требовать со стороны разработчика на фазе сборки прав root -- моветон, тем не менее, не могу поручиться, что подобных вариантов не существует или не будет существовать ;-)

Со стороны разработчика фаза установки во временный каталог может не требовать прав root (например, если разработчик не накладывает специальных ограничений на принадлежность и права отдельных файлов), а может требовать (например, если на фазе установки присутствуют действия по заданию специальных прав и специальных владельцев). Очевидно, что в первом случае есть смысл (а если про права помещаемого в DESTDIR просто забыли, то и обязательно) согласиться с предложением makepkg сменить владельца и права добавляемых в пакет файлов, а во втором -- это прямо противопоказано (например, может нарушить работу некоторого софта, например, требующего на файлах с критичной информацией прав 600).

make install DESTDIR=
make install INSTALL_ROOT=
целиком и полностью зависит от того, что в итоге содержит Makefile, неважно, рукописный или сгенерированный. Концепция DESTDIR для подготовки дерева файлов под последующее создание пакета была предложена GNU (https://www.gnu.org/prep/standards/html_node/DESTDIR.html). В cmake в целом тоже воспринята (а как же без NIH-синдрома?), но имечко может быть (или не быть) использовано другое: INSTALL_ROOT.

Что касается готовых .SlackBuild, в Slackware умолчанием является их 1) запуск от root 2) в полноценном окружении root (полученном по "su -", "su -l", "su -l root"). Есть возражения, что это не безопасно: на самом деле это вопрос доверия разработчику слакбилда и разработчику софта в части его сборки. Тем не менее, доверие доверием, но человеку свойственно ошибаться, поэтому есть инструкции со сборкой в fakeroot и в chroot со слоёной ФС (overlayfs), что позволяет не только не навредить сборочной системе, но и проконтролировать, что не было попыток что-либо изменить вне DESTDIR | INSTALL_ROOT. Соответствующие обсуждения неоднократно были на оф.форуме на LQ.
Добавлено (21:24):
UnixNoob писал:
01.11.2020 17:48
2. Если есть вариант пакета в виде .rpm, будет ли проще использовать rpm2tgz/rpm2targz или предпочтительнее собирать с исходников?
Это смотря что в пакете ;-) Если там бинарники с теми или иными зависимостями от материнской системы, то ответ про предпочтительность сборки на родной системе очевиден. Если там что-то независимое (текстовые файлы, текстовые сценарии и т.п.), то в зависимости от степени независимости ;-) А если там что-то, распространяемое только в бинарном виде, то выходов почти и нет, если не считать перепаковки с внесением по пути некоторых изменений по-живому или без таковых.
В качестве иллюстрации сказанному: на SBo есть слакбилды, которые перепаковывают бинарный выпуск (например, libreoffice) вместо сборки из исходников (например, LibreOffice).
Добавлено (21:29):
По поводу конкретно latte-dock: у Эрика (AlienBob) в ktown (в plasma-extra) он есть уже собранный как надо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18676
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Сборка из исходников

Сообщение Bizdelnick »

bormant писал(а):
01.11.2020 21:11
требовать со стороны разработчика на фазе сборки прав root -- моветон, тем не менее, не могу поручиться, что подобных вариантов не существует или не будет существовать
Вероятность такого стремится к нулю. Сталкивался с обратным — сборка от имени root может не пройти, хотя это тоже экзотика.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 634
ОС: Slackware

Re: Сборка из исходников

Сообщение UnixNoob »

bormant писал(а):
01.11.2020 21:11
Со стороны разработчика фаза установки во временный каталог может не требовать прав root (например, если разработчик не накладывает специальных ограничений на принадлежность и права отдельных файлов), а может требовать (например, если на фазе установки присутствуют действия по заданию специальных прав и специальных владельцев). Очевидно, что в первом случае есть смысл (а если про права помещаемого в DESTDIR просто забыли, то и обязательно) согласиться с предложением makepkg сменить владельца и права добавляемых в пакет файлов, а во втором -- это прямо противопоказано (например, может нарушить работу некоторого софта, например, требующего на файлах с критичной информацией прав 600).
А где это посмотреть?
bormant писал(а):
01.11.2020 21:11
make install DESTDIR=
make install INSTALL_ROOT=
целиком и полностью зависит от того, что в итоге содержит Makefile, неважно, рукописный или сгенерированный.
Он должен лежать в исходниках или, если он генерируется, то после команды make? Или если используется cmake, то надо смотреть его?
bormant писал(а):
01.11.2020 21:11
По поводу конкретно latte-dock: у Эрика (AlienBob) в ktown (в plasma-extra) он есть уже собранный как надо.
Хорошо, посмотрю, спасибо, но я искал на сайте где пакеты slackware ищут и не нашел. Воспользуюсь поиском в slackpkg.

В целом этот вопрос меня все-равно волновал, что делать с отсутствующим софтом и как его портировать в slackware.
Правда где-то еще теперь systemd всплывает скорее всего,при сборке, и с такой задачей я думаю не справлюсь, на данном этапе :laugh:
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18676
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Сборка из исходников

Сообщение Bizdelnick »

UnixNoob писал:
01.11.2020 22:36
А где это посмотреть?
Да нечего его смотреть. Используйте DESTDIR, если не сработает — тогда смотреть и начинайте. Главное — не от root команду запускать, а то нежданчик может случиться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Сборка из исходников

Сообщение Hephaestus »

bormant писал(а):
01.11.2020 21:11
Со стороны разработчика фаза установки во временный каталог может не требовать прав root
Насколько я понимаю, в данном случае права рута запрашивает makepkg, а это уже после установки во временный каталог.
И запрашиваются права рута для того, чтобы выставить владельца всем файлам в пакете (что вполне логично).
Таким образом, напрашивается вывод, что:
данный вопрос makepkg в общем случае будет задавать всегда - это раз,
запуск makepkg нужно осуществлять от рута (иначе права не выставить) - это два.

А разработчик тут как бы вообще ни при чем.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Сборка из исходников

Сообщение Hephaestus »

bormant писал(а):
01.11.2020 21:11
Что касается готовых .SlackBuild, в Slackware умолчанием является их 1) запуск от root 2) в полноценном окружении root (полученном по "su -", "su -l", "su -l root"). Есть возражения, что это не безопасно: на самом деле это вопрос доверия разработчику слакбилда и разработчику софта в части его сборки. Тем не менее, доверие доверием, но человеку свойственно ошибаться, поэтому есть инструкции со сборкой в fakeroot и в chroot со слоёной ФС (overlayfs), что позволяет не только не навредить сборочной системе, но и проконтролировать, что не было попыток что-либо изменить вне DESTDIR | INSTALL_ROOT. Соответствующие обсуждения неоднократно были на оф.форуме на LQ.
Со стороны выглядит так, как будто кто-то предлагает более безопасную схему, но её отвергают.
Если текущая схема действительно может представлять опасность, её давно бы уже поменяли.
Я в слаквари лет пять, за это время всё можно было спокойно сделать, никуда не торопясь.
Раз не меняют, вероятно, есть к тому основания?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Сборка из исходников

Сообщение bormant »

Hephaestus писал:
02.11.2020 07:49
Насколько я понимаю, в данном случае права рута запрашивает makepkg
makepkg -- это не от разработчика, это уже от Slackware. Забегая вперед -- да, makepkg от root. Чтобы руками не отвечать на вопрос про права, у makepkg есть ключик -c y | n, сооветственно менять или не менять владельца.

Фаза установки со стороны разработчика -- это make install.
И вот там-то вполне может быть, например, chown -R $(CONFIGURED_USER) $(DESTDIR)/.../.../ и еще много чего разного интересного ;-) А может и не быть.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Сборка из исходников

Сообщение Hephaestus »

bormant писал(а):
02.11.2020 09:39
makepkg -- это не от разработчика, это уже от Slackware.
В том-то и дело. ТС получил от makepkg непонятный запрос и спросил, что с этим делать.
При чем тут фаза сборки и добросовестность разработчика?
Кстати, я сам совершенно не против того, чтобы сборка была с fakeroot или ещё что-нибудь в этом роде.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Сборка из исходников

Сообщение bormant »

Hephaestus писал:
02.11.2020 09:38
кто-то предлагает более безопасную схему, но её отвергают.
И да, и нет.
-- У нас для вас есть безопасный способ доставки динамита по железной дороге!
-- Но мы не доставляем по железной дороге.

Предлагаемые способы полезны, если собирать пакеты на "боевой машине", они обеспечивают 1) безопасность самой машины, 2) контроль за ошибками разработчика ПО по размещению файлов на фазе установки.
Вот только если мы говорим про сопровождающего слакбилд, шансы, что это происходит на боевой машине близки к нулю. По крайней мере, сам собираю что-либо в специальном чистом (или не совсем) окружении. В идеале, все проблемы должны быть выявлены и устранены на этом этапе.
Если говорим про пользователя слакбилда, то речь о степени доверия сопровождающему. Но поскольку человекам свойственно ошибаться, вот тут-то и есть то самое место, где сборка в overlayfs вполне применима.

Вот только применять ее в этом случае нужно не Патрику, не Эрику, не Робби или Вилли, а нам с вами ;-) И почему же вы до сих пор не? Ведь варианты с chroot/fakeroot/overlayfs явно напрашиваются сами...

PS. И еще одна неочевидная причина: типовой .SlackBuild содержит в себе обычно "make; make install; makepkg" и запускается целиком.
Последний раз редактировалось bormant 02.11.2020 10:48, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Сборка из исходников

Сообщение bormant »

Hephaestus писал:
02.11.2020 09:59
ТС получил от makepkg непонятный запрос и спросил, что с этим делать.
При чем тут фаза сборки и добросовестность разработчика?
ТС получил запрос от makepkg, но спросил про сборку:
нужно ли запускать сборку от root или от пользователя?
Поскольку мне точно известно, что спрашивает это начинающий пользователь Slackware, а из вопроса не следует, что конкретно он имеет в виду под сборкой (сборка собственно софта (например, make), подготовка дерева будущего пакета (например, make install), собственно построение пакета (makepkg) или это все вместе), то посчитал необходимым хоть как-то внести ясность, где чья шерсть ;-)

Иногда вместо заданного вопроса "как" лучше ответить на незаданный вопрос "почему так" ;-) (имхо)
Hephaestus писал:
02.11.2020 09:38
Если текущая схема действительно может представлять опасность, её давно бы уже поменяли.
Может. Равно как молоток или нож. И не меняют ровно по той же причине -- сам по себе инструмент намного сильно проще, чем построение условий для его безопасного применения. Поэтому и применяют исходя из ситуации, от "как есть" до "в стерильной комнате".

Hephaestus писал:
02.11.2020 09:59
При чем тут фаза сборки и добросовестность разработчика?
Один маленький типовой пример.
Дано: Разработчик ПО в одном или нескольких местах на фазе установки упустил $(DESTDIR).
Следствие: По make install DESTDIR=... эти файлы нацелены не во временный каталог назначения, а в систему.
Результат $ make; make install DESTDIR=... # makepkg ...; upgradepkg --install-new ...
-- при запуске make install от root:
* на машине сборщика получится комплектное ПО: файлы, не попавшие в пакет, попадут в систему напрямую, минуя пакетный менеджер;
* на машине, где установлен пакет -- некомплектное ПО;
-- при запуске от пользователя: в критичные части системы ничего не попадет (не хватит прав), установка из пакета даст некомплектное ПО.

При этом еще на фазе сборки целевые пути вполне могут быть сразу $(DESTDIR)/... ;-)
Добавлено (10:58):
UnixNoob писал:
01.11.2020 22:36
Он должен лежать в исходниках или, если он генерируется, то после команды make?
Если почитать "man make", то станет понятно, что make обрабатывает заданные ему правила, по умолчанию в файле Makefile. Поэтому, если на вызове make правил не будет, make выскажет все, что о нас думает по этому поводу.

Смотреть удобнее начинать с файлов README, INSTALL, там часто бывают инструкции, ориентированные на чтение человеком ;-)
Но если документация молчит, то да, код -- лучшая документация.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Сборка из исходников

Сообщение Hephaestus »

bormant писал(а):
02.11.2020 10:03
И почему же вы до сих пор не? Ведь варианты с chroot/fakeroot/overlayfs явно напрашиваются сами...
Лично я до сих пор не, потому что я не очень это умею, а точнее - не придумал, как именно это лучше сделать.
Что такое overlayfs, я, например, вообще не в курсе.
У меня много самосборов и я собираю их "как есть". На каждый чих "стерильного окружения" не напасешься.
Да, у меня есть контейнер, в котором я тестирую то, что пишу сам, потому что тестировать на "боевой машине" - это надо каждый раз собирать пакет и ставить. В контейнере в этом смысле проще.
Но вот собирать слакбилды в контейнере - это ж надо каждый раз чистый контейнер... а в слаквари с непривилегированными контейнерами вообще непросто... как-то я к этому не готов.

Если fakeroot будет достаточно для предотвращения нежелательных последствий, могу над этим подумать.
Я, например, внес некоторые изменения в sbopkg, которые могут оказаться полезными. Только вот опубликовать всё никак не соберусь.
Ну и с fakeroot можно поколдовать. А более громоздкую схему... не хочется, честно говоря.
bormant писал(а):
02.11.2020 10:03
И еще одна неочевидная причина: типовой .SlackBuild содержит в себе обычно "make; make install; makepkg" и запускается целиком.
Гм... Я вообще-то идею понял так, что какой-нибудь fakeroot надо внутрь .SlackBuild и засунуть, чтобы всякие там make install запускались под его контролем. Тогда проблема "запуска целиком" снимается. Надо попробовать.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18676
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Сборка из исходников

Сообщение Bizdelnick »

Hephaestus писал:
02.11.2020 12:27
Ну и с fakeroot можно поколдовать.
А что, для этого требуется какое-то колдовство кроме запуска fakeroot makepkg?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 634
ОС: Slackware

Re: Сборка из исходников

Сообщение UnixNoob »

bormant писал(а):
02.11.2020 09:39
makepkg -- это не от разработчика, это уже от Slackware. Забегая вперед -- да, makepkg от root.
Hephaestus писал:
02.11.2020 09:59
В том-то и дело. ТС получил от makepkg непонятный запрос и спросил, что с этим делать.
Спасибо за уточнение. Меня интересовали требования ко всем командам,необходимым для сборки с исходников,т.к выяснилось что есть нюансы.
Получается я сборку,если не требуется запускать от root,выполняю от пользователя,а makepkg или от root или с использованием ключа -c.
bormant писал(а):
02.11.2020 10:12
Следствие: По make install DESTDIR=... эти файлы нацелены не во временный каталог назначения, а в систему.
А нет ли аналога ключа -warn (для installpkg) под make?
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Сборка из исходников

Сообщение Hephaestus »

Bizdelnick писал:
02.11.2020 12:37
А что, для этого требуется какое-то колдовство кроме запуска fakeroot makepkg?
Пока неясно. В .SlackBuild есть некоторые действия, выполняемые от рута (помимо makepkg),
и для них тоже потребуется fakeroot. И вообще неизвестно, как fakeroot впишется в существующий .SlackBuild.
Это ведь пока .SlackBuild запускается от рута, там всё ровно да гладко. А от пользователя - вообще черт его знает, как сработает.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Сборка из исходников

Сообщение bormant »

Для сборки под overlayfs с текущим окружением есть такой немудреный сценарий:
https://gitlab.com/oshd/sbuild

А также помудреней, практически buildbox:
https://idlemoor.github.io/slackrepo/
Добавлено (15:27):
UnixNoob писал:
02.11.2020 12:52
makepkg или от root или с использованием ключа -c
makepkg от root.
Если указать makepkg -c y ..., то makepkg поменяет всем каталогам будущего пакета владельца на roor.root, права на 755 (drwxr-xr-x).
Если указать makepkg -c n ..., то права/владелец останутся нетронуты.
Если ключик не указать, makepkg спросит:

Код: Выделить всё

This next step is optional - you can set the directories in your package
to some sane permissions. If any of the directories in your package have
special permissions, then DO NOT reset them here!

Would you like to reset all directory permissions to 755 (drwxr-xr-x) and
directory ownerships to root.root ([y]es, [n]o)? 
Спасибо сказали: