LINUX.ORG.RU

Portage формат package.mask в профиле оверлея

 ,


0

1

Согласно man portage файлы /etc/portage/package.mask и /usr/portage/profiles/package.mask имеют одинаковый формат:

emerge =sys-apps/portage-2.3.18; man portage

Format:
- comment lines begin with # (no inline comments)
- one DEPEND atom per line

А про DEPEND atom написано что он поддерживает Repository Constraints дальше я делаю вывод что и /usr/local/portage/profiles/package.mask скорее всего будет иметь такой-же формат. Беру прям из man-а:

 ➜ cat /usr/local/portage/profiles/package.mask
# match sed from the 'gentoo' repository
sys-apps/sed::gentoo

 ➜ emerge sys-apps/sed -pv
--- Invalid atom in /usr/local/portage/profiles/package.mask: sys-apps/sed::gentoo

(Cut)

И вот казалось бы схерали Invalid atom? Значит это так не работает. Отчего? Непонятно ибо пример из мана. А дальше совсем лютая магия:

 ➜ mv /usr/local/portage/profiles/package.mask /etc/portage/package.mask

 ➜ emerge sys-apps/sed -pv
                                                                                                                                     
These are the packages that would be merged, in reverse order:

Calculating dependencies  ... done!
[ebuild   R   #] sys-apps/sed-4.4::gentoo  USE="acl nls (-selinux) -static" 0 KiB
                                                                                                                                     
Total: 1 package (1 reinstall), Size of downloads: 0 KiB

The following mask changes are necessary to proceed:
 (see "package.unmask" in the portage(5) man page for more details)
# required by sys-apps/sed (argument)
# /etc/portage/package.mask:
# Don't let people install these accidentally
# match sed from the 'gentoo' repository
=sys-apps/sed-4.4

NOTE: The --autounmask-keep-masks option will prevent emerge
      from creating package.unmask or ** keyword changes.

Внимание вопрос это просто лыжи не едут потрачено или я неосилятор чего-то недопонял?

cast Pinkbyte как человека ближе всех к теме.

★★★★★

я неосилятор чего-то недопонял

This.

Честно говоря, я не знаю, при каких обстоятельствах package.mask файл находится в каталоге /etc/portage/profile/ (Google даёт результаты только на момент 2005 года). Записи, перечисленные вами, это жесткие пакеты, которые закомментированы.

Без версии в package.mask пробовали? Проверьте записи в файлах на отсутствие кавычек.

Попробуйте выполнить emerge --sync

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

я неосилятор чего-то недопонял

This.

В общем либо прочитай ещё раз внимательно вопрос и желательно глазами а потом хорошо подумай либо приведи ка мне ссылочки с чего бы это формат package.mask в разных местах парсится портежом по разному. А до тех пор кури маны.

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

package.mask в разных местах парсится портежом по разному

Я и не говорил такого. Его обычно там не используют.

кури маны

Эх, я давно уже не использую Gentoo. В своё время достаточно манов прочитал, патчей наложил, багрепортов отправил.

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

Его обычно там не используют.

Обычно в gentoo не существует образцового, эталонного и идеального юзера в вакууме со стандартизированным и описанным поведением а есть PMS и portage в котором, иногда в самых неожиданных местах, встречается package.mask или даже package.mask/.

И обычно в gentoo логика «всё что напрямую не запрещено следовательно оно разрешено» работает.

init_6 ★★★★★
() автор топика

Если я всё правильно понял - by design. Смысл - да, следует выяснить у Pinkbyte, но я подозреваю, что для того, чтобы профиль в рапозитории мог маскировать только пакеты своего репозитория.

Навскидку вроде здесь: https://imgur.com/a/aQ4Ji

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

Можно подойти с другого конца, зачем тебе маскировать sed? Есть у тебя есть пакет в оверлее, несовместимый с sed-4.4, то у тебя этот пакет должен зависеть от <sys-apps/sed-4.4 или как-то так

Gary ★★★★★
()

фигня в том, что

/usr/local/portage/profiles/package.mask

работает только для твоего локального оверлея, а

/etc/portage/package.mask

глобально

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

чтобы профиль в рапозитории мог маскировать только пакеты своего репозитория

Kroz по поведению portage я подумал тоже самое. Значит, как минимум, man врёт.

init_6 ★★★★★
() автор топика

Выдержка из PMS о том как работает package.mask в репозиториях(не в /etc/portage!):

 package.mask
    Contains a list, one entry per line, of package dependency specifications (using the directory’s EAPI)

Идём, читаем дальше 8.2.6 Package dependency specifications и видим что там НЕТ упоминая о том, что разрешено задание оверлеев.

man portage описывает формат /etc/portage/package.mask

Маскировать пакеты можно и через /etc/portage/profile/package.mask - у него такой же формат как и у /usr/portage/profile/package.mask и у package.mask из твоего оверлея

TL;DR - /etc/portage/package.mask и package.mask в профиле - это РАЗНЫЕ файлы у них РАЗНЫЙ формат.

То, чего хочешь ты, обсуждалось как-то в мэйллисте - возможность ограничения области маскирования оверлеем из списка зависимых(конкретную ссылку сейчас найти не могу, извини).

Например чтобы в package.mask оверлея foo(у которого задан masters = gentoo) можно было маскировать пакеты только из ::gentoo и из самого оверлея, не затрагивая другой оверлей bar. До чего там дошло обсуждение - не помню, но реализации нет до сих пор, насколько мне известно. Пилится ли она в рамках внедрения EAPI 7 - не знаю, нужно спрашивать у Portage team.

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

Можно подойти с другого конца, зачем тебе маскировать sed? Есть у тебя есть пакет в оверлее, несовместимый с sed-4.4, то у тебя этот пакет должен зависеть от <sys-apps/sed-4.4 или как-то так

Gary давай посмотрим вот с какой стороны - предположим у меня свой собственный sys-apps/sed::local с блекджеком и женщинами с пониженной социальной ответственностью. А задача замаскировать навсегда sys-apps/sed::gentoo.

Достаточно маскировать через /etc/portage/package.mask скажете вы и будете правы.

Усложняем.

В случае если человек осилил /usr/local/portage/profile и наваял и использует не системный а свой собственный простенький профиль у которого parent-ом является системный gentoo-шный профиль {приоритет конфигов}/{стек профилей} в системе будет таким:

/etc/portage <-- самый высокий уровень. «А»
/usr/local/portage/profile <-- родитель у локального - gentoo. «Б»
/usr/portage/profile <-- gentoo родитель всего вышестоящего. «В»

Любым профилем можно переопределять всё что находится ниже. Т.е. «А» устанавливает все правила и имеет максимальный приоритет, «Б» переопределяет только «В» а «В» родитель всех выше него. Коротко говоря если если проводить аналогии то «А» кратковременная память и место для экспериментов.

Однакое если в процессе работы уже накоплен некий опыт есть желание систематизировать и перенести главное из «А» в «Б» и при этом не трогая «В».

Надеюсь понятна идея. Ну да ладно вон уже и Pinkbyte ответил пока я эту простыню писал...

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

Pinkbyte так в том то и дело что в PMS пространное описание допускающее разночтения а в man-е выходит просто вызывающе неверная информация.

То, чего хочешь ты, обсуждалось как-то в мэйллисте - возможность ограничения области маскирования оверлеем из списка зависимых(конкретную ссылку сейчас найти не могу, извини).

Упреждая возможные ответы - пишу тебе из горящего танка голубиной почтой. Хорошо хоть до ЛОРа добрался...

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

смысл маскировать пакеты из основного дерева, если оверлеи имеют приоритет выше основного дерева, только тогда, когда не успеваешь следить за апстримом.

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

смысл маскировать пакеты из основного дерева, если оверлеи имеют приоритет выше основного дерева, только тогда, когда не успеваешь следить за апстримом.

В том то и дело что по факту того как оно работает - настройки локального оверлея работают только для локального оверлея и из локального оверлея нельзя замаскировать записью нечто/из::gentoo хотя при этом из /etc/portage можно.

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

так в том то и дело что в PMS пространное описание

В PMS описан формат package.mask для профилей(в секции Profile, внезапно!). В portage описан формат файла, лежащего в /etc/portage. Я согласен что выбранное одинаковое имя(package.mask) при наличии разных форматов вызывает по-первачу недоумение. Но что PMS, что man написаны корректно с точки зрения файлов, которые они описывают.

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

настройки локального оверлея работают только для локального оверлея

о чём я выше и писал.

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

По PMS для package.mask профиля (см. 5.2.8 package.mask, 8.2.6 Package dependency specifications) сказано про {operator}category/package:slot:subslot тогда как /etc/portage/package.mask поддерживает {operator}category/package:slot:subslot:overlay.

Следовательно в man portage явный баг.

Вот и верь после этого людям man-ам.

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

тогда как /etc/portage/package.mask поддерживает {operator}category/package:slot:subslot:overlay.

Еще раз, по буквам - profile package.mask и /etc/portage/package.mask - это ДВА РАЗНЫХ вида package.mask файлов.

profile package.mask в /etc/portage хранится в /etc/portage/profile/package.mask. И его формат - такой как описано в PMS.

/etc/portage/package.mask - это НЕ profile package.mask, описанный в PMS.

man portage НЕ ОПИСЫВАЕТ profile package.mask. Совсем. Вообще. Он описывает формат файла /etc/portage/package.mask. В котором МОЖНО указывать оверлей(и о чём сказано в man portage). И который(в очередной раз повторяю, а то из прошлого моего поста ты этого не понял) НЕ является profile package.mask(в котором НЕЛЬЗЯ указывать оверлей)

Поэтому никакого бага в man portage НЕТ. man portage описывает один формат файла, PMS описывает другой. Файлы находятся в разных местах. Единственная смущающая проблема - то, что несмотря на то что это два разных видов файлов(лежащих в разных местах), они делают похожую задачу(маскируют пакеты) и имеют ОДИНАКОВОЕ имя

Возможно я буду не прав(лень поднимать архивы), но мне кажется, что сначала запилили профили(в /usr/portage), потому /etc/portage/package.mask(чтобы пользователь мог маскировать пакеты), а потом - /etc/portage/profile(локальный профиль пользователя, в котором, ВНЕЗАПНО, в том числе можно маскировать пакеты). И исторически получилось что мы по факту в /etc/portage имеет ДВА места где можно маскировать пакеты - в /etc/portage/package.mask(который имеет больше фич и рекомендуется к использованию в том числе и по историческим причинам) и в /etc/portage/profile/package.mask(о котором мало вообще где пишут, но тем не менее он есть и работает, как и любой другой файл, который можно поместить в профиль).

А так как фичи в них добавлялись независимо, получилось что формат этих файлов - разный, несмотря на то, что они имеют одинаковое имя. И описаны эти форматы в разных местах - один в PMS(profile package.mask), другой - в man portage(/etc/portage/package.mask)

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

man portage описывает много забавных мест: /etc/portage/make.profile/, /etc/make.profile/, /etc/portage/profile/, /etc/portage/, /usr/portage/profiles/ и во многих из них может быть package.mask и нигде в мане нет ни слова о том что это вообще совсем разные файлы с разными форматами. Потому что в мане ссылка на один и тот-же формат который допускает {operator}category/package:slot:subslot:overlay.

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

В любом случае спасибо за подробное обьяснение. Помечаю как решенную.

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

Я согласен c тем что описание неочевидное. Хотя бы тем фактом что описываемые файлы имеют ОДИНАКОВОЕ имя при РАЗНОМ формате. И уточнение profile package.mask помогает этому не сильно(потому что оно НЕ ВЕЗДЕ упоминается, да и это упоминание не всегда помогает - когда разные вещи рядом называют одним именем, легче не становится).

Еще сумбура добавляет тот факт, что PMS не описывает формат /etc/portage/package.mask - так как PMS описывает «сферический пакетный менеджер в вакууме», а /etc/portage/package.mask - конфиг эталонной реализации. Зато в man portage, как ты уже сказал - упоминается профиль, являющийся часть PMS.

Если у тебя есть конкретные идеи как улучшить понимаемость мана(потому что у меня их нет, хоть я и понимаю, что man далек от идеального) - welcome to gentoo-dev maillist.

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