LINUX.ORG.RU

Ищу примеры ebuild'ов


0

0

Нужны советы от гуру по написанию ebuild'ов.

Есть набор питоньих скриптов которые хочется красиво ставить/апгрейдить/сносить при помощи portage (т.е. написать ebuild). Скрипты состоят из модулей и нескольких запускаемых демонов. С их установкой я думаю разберусь. Однако для работы им нужно несколько вещей:

1. Добавить юзера с заданным именем (и желательно фиксированным UID из диапазона системных, не конфликтуя с уже существующими)
2. Прописать несколько правил в /etc/sudoers
3. Создать определённую иерархию директорий в корне диска (/scratch и несколько вложенных)
4. Добавить несколько строчек в конфиг syslog'а и рестартануть его
5. Добавить правило udev и активировать его

При деинсталляции надо отменять все действия кроме (3) если директории не пустые.

Как все эти пункты реализовать по всем правилам? Корректно ли вообще из одного ebuild'а править конфиги принадлежащие другому?

По возможности приводите ссылки на ебилды где можно что-то такое или подобное подсмотреть, или полезные функции из eclass'ов.

В /usr/portage больше 20 тысяч ебилдов, я гарантирую. Так же есть отличные доки на gentoo.org.

tensai_cirno ★★★★★
()

> 1. Добавить юзера с заданным именем (и желательно фиксированным UID из диапазона системных, не конфликтуя с уже существующими)

Функция enewuser в eclass'е eutils. По поводу фиксированного UID - ничего не могу сказать. Но возможно они где-то как-то стандартизованы (например в LSB). Но лучше фиксированный UID всё-таки не делать.

> 3. Создать определённую иерархию директорий в корне диска (/scratch и несколько вложенных)


Просто создавай директории в корне образа, т.е. ${D}. Можно просто mkdir -p "${D}/scratch/some/other/dir", но лучше dodir "/scratch/some/other/dir" - эти две команды эквивалентны.

> 5. Добавить правило udev и активировать его


Добавь файлик в "${D}/etc/udev/rules.d/":

insinto "/etc/udev/rules.d"
doins "99-your.rules"

ЕМНИП udev их подцепляет автоматически. Если нужен рестарт - выведи с помощью elog сообщение пользователю. Обычно это делается в функции pkg_postinst().

> При деинсталляции надо отменять все действия кроме (3) если директории не пустые.


Emerge не удаляет директории, если в них есть неизвестные ему файлы. Т.е. файлы, которые создаст пользователь или программы во время работы, тронуты не будут.

> 2. Прописать несколько правил в /etc/sudoers

> 4. Добавить несколько строчек в конфиг syslog'а и рестартануть его

> Корректно ли вообще из одного ebuild'а править конфиги принадлежащие другому?


Думаю что нет.

> По возможности приводите ссылки на ебилды где можно что-то такое или подобное подсмотреть, или полезные функции из eclass'ов.


Как уже было сказано - ебилдов дофига в /usr/portage - от самых маленьких до больших и сложных. По поводу eclass'ов - смотри в /usr/portage/eclass, там в комментариях к функциям указаны аргументы и другая полезная информация.

Deleted
()

> Есть набор питоньих скриптов

Кстати говоря, есть eclass python. Я с ним дела не имел, но насколько я понимаю, он занимается рассовыванием модулей по нужным директориям нужных версий интерпретатора, автоматической компиляцией в байт-код и прочими полезными делами. Посмотри в эту сторону.

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

О, спасибо большое! По теме uid'ов я видел в багзилле попытку их стандартизации но она кажется заглохла.

Для правки существующих конфигов пока думаю sed'ом вставлять нужные строки обрамляя их комментариями особого формата по которым потом их можно будет также и удалить. Не могу только найти пример.

elog с напоминанием юзеру в моём случае не подходит, т.к. установка не интерактивна (пока shell-скрипт, но как будет время планирую перейти на metro или catalyst).

Как альтернативу правке конфигов рассматриваю возможность создания оверлеев для того же sudo и udev где они уже будут поправлены (и включить их в зависимости).

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

> Как альтернативу правке конфигов рассматриваю возможность создания оверлеев для того же sudo и udev где они уже будут поправлены (и включить их в зависимости).

Для udev не надо. Там изначально всё предусмотрено. Если сделать свой отдельный файл с правилами за номером 99 (99-myfile.rules), то правила из него "перекроют" стандартные.

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