LINUX.ORG.RU

Gentoo emerge - пропустить пакеты, для которых есть бинарные пакеты

 , , ,


0

1

Подскажите, а то так и не нашел. Допустим у меня в /etc/portage/sets есть набор test со списком программ. А в /usr/portage/packages, есть бинарники, но не для все программ из test, а только для части. emerge -k @test ставит все программы из test, причем если бинарник есть, то использует его, а если нет то компилит. Как сказать не ставить бинарники, а только докомпилить те программы из test, для которых нет бинарников?



Последнее исправление: hardentoo (всего исправлений: 1)

Ответ на: комментарий от Samsky

Эта опция мне известна, но она делает не то, о чем я спрашиваю выше.

hardentoo
() автор топика
Ответ на: комментарий от Deleted

Я думал об exclude, но к сожалению список пакетов, которые будут ставиться не известен, пока emerge не разрешит зависимости. А после того, как разрешил, там могут быть пакеты не из @test, вопрос именно в том, как сказать пропустить бинарники?

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

Можно попробовать получить список пакетов из packages и добавить его в exclude, но тогда и зависимости для пакетов из этого списка не будут собраны.

Можно на основе этого списка попытаться получить список зависимостей через emerge, но такое его создание будет долгим.

Распаковка происходит быстро, я б забил. Надо бы man emerge подробнее посмотреть.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Да, зависимости не будут собраны. Да распаковка происходит быстро, согласен. Проблема возникает, когда скажем в test много пакетов, и несколько пакетов, которые должны будут компилиться, так как для них нет бинарников, не собираются. На каждом таком пакете компиляция останавливается, пакет приходится закомментировать в @test, и начать все сначала (опять с бинарниками, которые не пропущены). Про --keep-going знаю, но вот эксперимент показал, что при опции -k, у меня --keep-going не отрабатывает. То есть emerge --keep-going работает, emerge -k --keep-going нет.

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

в test много пакетов, и несколько пакетов, которые должны будут компилиться, так как для них нет бинарников, не собираются. На каждом таком пакете компиляция останавливается

А почему небинарные пакеты не собираются и компиляция на них останавливается?

grem ★★★★★
()
Ответ на: комментарий от grem

Много из-за чего пакет может не компилится, смена компилятора, новая версия пакета и т.д. Такое вполне может происходить (и происходит, как пример, скажу, что на моей системе klibc прекрасно собирается gcc-5.4.0 (hardened-profile), но не собирается ни gcc-6.4.0, ни gcc-7.2.0). Я спрашиваю, может есть опция, похожая на emerge -k @test --exclude-exist-binaries?

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

Есть какая-то опция --usepkg-exclude и --rebuilt-binaries=n

Особенно подозрительная вторая. Я ими не пользовался.

Потом можно собрать зависимости бинарных пакетов без установки самих пакетов опцией -ko.

grem ★★★★★
()
Ответ на: комментарий от hardentoo

но не собирается ни gcc-6.4.0, ни gcc-7.2.0

может от сюда плясать нужно было

по факту велосипедить - так по полной - package.mask

deity ★★★★
()
Ответ на: комментарий от grem

тут вся проблема - кто будет разруливать зависимости? ну обновятся депенси у pkg и что? pkg не собирается с > gcc-0.091_alpha_pre

deity ★★★★
()
Ответ на: комментарий от deity

Пример про klibc ‐ всего лишь пример. Проблема не в том, что что-то не компилится или в разрешении зависимостей. Проблема в том, чтобы заставить portage не делать бесполезную работу. Бинарные пакеты, которые он ставит, собраны правильно (правильный компилятор, правильные зависимости, и они уже стоят в системе! и положены /usr/portage/packages уже после установки).

hardentoo
() автор топика
Ответ на: комментарий от deity

Опишу еще раз. Имеем sets с именем test, в котором 2 пакета, скажем p1 и p2, все зависимости у обоих пакетов стоят. Теперь если сделать emerge @test, то portage замечательно соберет из исходников оба пакета, установит в систему и создаст бинарники. Если теперь сделать emerge -k @test, то portage замечательно поставит эти самые пакеты из бинарников. Теперь удалим бинарник для пакета p1. Запускаем emerge -k @test, и portage радостно рапортует, что сейчас соберем p1 и сделаем бинарник (что верно), а вот к этому также поставим p2 из бинарников (что верно, так как p2 прописан в test). Вопрос в том, как не меняя test (не убирая оттуда запись про p2), сказать portage: бинарная установка p2 не нужна!? Про --exclude знаю, но это не подходит, так как в более сложном случае добавляются пакеты, которых нет в test (как зависимые).

hardentoo
() автор топика
Ответ на: комментарий от deity

У вас появилась возможность разобраться в вопросе более глубоко и возможно привнести в portage что-то новое. А вместо этого вы переходите на личности и грубите. Печально.

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

Вопрос в том, как не меняя test (не убирая оттуда запись про p2), сказать portage: бинарная установка p2 не нужна!? Про --exclude знаю, но это не подходит, так как в более сложном случае добавляются пакеты, которых нет в test (как зависимые).

Давай я тебе отвечу. Никак. Portage не реализаует то что ты описал. Потому что @сэт для portage == исключительно всё что в нём включено. И если ты сказал ставить из бинарников некий @сет а бинарника некой ерунды включенной в этот @сет не существует следовательно его нужно сперва собрать. Только так и никак иначе.

Делай свой велосипед который будет парсить твой сет и перед emerge -k сперва проверять наличие бинарника. Профит.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

А вот за этот ответ спасибо. Собственно, я так и думал, что функциональность sets ограничивается именно этим. Ладно, подумаю над велосипедом.

hardentoo
() автор топика
Ответ на: комментарий от deity

А что с зависимостями? Как раз для сборки всего кроме имеющего отношения к бинарникам, может быть сработают флаги --usepkg-exclude (пример) и --rebuilt-binaries=n. «Может», потому, что я не совсем понял из описания, что они делают. Скорее всего, если передать список всех бинарных пакетов из packages, а не только из set, то ничего страшного не случится. Но я не проверял как emerge ведёт себя, если в exclude передавать несуществующий в списке пакет.

А уже затем отдельно можно запустить сборку зависимостей только у бинарных пакетов, без установки самих бинарных пакетов флагом --onlydeps.

grem ★★★★★
()
Ответ на: комментарий от grem

А что с зависимостями?

поменяли ABI - пересобрал оп шустренько все системные пакеты с новым и получил новую функциональность.

я понимаю что портадж и на это способен, но это какой-то неправильный паттерн его использования. Для чего столько телодвижений, и это явно приведет к неведомой фигне через несколько мес. Может для ОПа это норма, но мне проще не разруливать депенси - один раз настроил, обновляйся по крону/вручную/скриптом. Дичь

deity ★★★★
()
Ответ на: комментарий от deity

Я планирую в новогодние праздники пересобрать мир. В этот раз это обязательно :( Пока думаю как продолжить пересобирать кусками, с выключением компа, если вдруг потребуется.

Скорее всего сохраню список того, что нужно пересобрать и буду через genlop в случае необходимости отслеживать то, что уже собрано начиная с определённой даты, а затем продолжать собирать разницу между двумя списками без внесения пакетов в @world.

grem ★★★★★
()
Ответ на: комментарий от grem

Насколько я понял, в данном случае --usepkg-exclude говорит не использовать бинарники, а компилить.

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

Прчитай свое желание через 1 мес после того как отпустит. Если тебя ничего смущать не будет,то у меня плохие новости для тебя будут. Добавь тег хочется странного и вещества кто-то может пропустить такое

deity ★★★★
()
Ответ на: комментарий от grem

Вопрос мой этого и касается. Вот скажем, такой метод возможен. Чистим /usr/portage/packages, запускаем emerge -e @world. Часть отработает и положит бинарники. Теперь выключаем комп (это относительно твоей сборки кусками). А в следующий раз запускаем уже emerge -ke @world. И вот тут-то опция типа --exclude-exist-binaries помогла бы, но придется действовать как описал init_6.

hardentoo
() автор топика
Ответ на: комментарий от hardentoo

Попробую создать сет из пары пакетов и протестировать некоторые флаги на нём. Самому пригодится.

Может обойдусь этим:

A related option is --rebuilt-binaries-timestamp. It causes emerge not to consider binary packages for a re-install if those binary packages have been built before the given time stamp.

В сочетании с флагом -k.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Странно, передаю для emerge в --exclude список из файла (сгенерённый genlop начиная с определённой даты), но он почему-то часть пакетов из списка исключений хочет пересобрать.

grem ★★★★★
()
Ответ на: комментарий от grem

Для --exclude список, как оказалось, нужно заключить в двойные кавычки :)

Для получения списка пересборки мира без учёта «недавно» собранных пакетов (после переключения на новый профиль), использую примерно такую команду после очистки /usr/packages и сборки gcc, binutils, glibc:

emerge -epqk @world --exclude "$(genlop -ln --date 01/02/2018 | tail +3 | sed s/-[0-9].*$//g | sed -e 's/^.*> //')"

А дальше можно добавить "--keep-going", "-b", и прочие по желанию, а также убрать "-p" и "-k", хотя последний я бы оставил.

grem ★★★★★
()
Ответ на: комментарий от grem

Забыл, только, что один из sed нужно подправить, а то для некоторых пакетов шрифтов он режет часть имени пакета, например, "-75dpi". И, естественно, не найдёт пакета с урезанным именем, будет ругаться и не станет собирать.

grem ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.