Наложение патчей без редактирования ebuild'ов
Давно хотел сделать заметку об этом лайфхаке, и все забывал. Уже довольно давно в portage есть волшебная функция epatch_user, которая применяет патчи (файлы с расширением patch) из /etc/portage/patches/%category%/%package% , где %package% может быть полным названием (с ревизией или без), либо только именем, опционально с указанием слота (i.e. %package% = %name%[-%version%[-%revision%]][:%slot%]). Проблема в том, что далеко не все ебилды это поддерживают (т.е. не в каждом ебилде на стадии prepare эта функция вызывается). Но можно это исправить, не правя ни одного ебилда.
Portage позволяет производить пользовательские действия в контексте ebuild, загружая файл /etc/portage/bashrc перед каждой стадией сборки. Поэтому в /etc/portage/bashrc мы можем добавить:
case "${EBUILD_PHASE}" in
prepare) cd "${S}" && epatch_user ;;
esac
Таким образом, на стадии prepare в любом ебилде будет вызываться epatch_user. Документация говорит, что отрабатывает только первый вызов, все последующие игнорируются. Поэтому если в ебилде уже есть вызов epatch_user, ничего страшного не произойдет.
Именно пользуясь этим механизмом я накладываю патчи на ядро из предыдущего поста.
Источники: Gentoo Handbook man eutils.eclass (из app-portage/eclass-manpages)