Обновление ibashrc

У portage есть такая штука как /etc/portage/bashrc /etc/portage/patches и оно помогает применять любые заплатки помимо тех которые уже есть в portage.

А в bentoo есть такая штука как ibashrc и она совсем немного лучше чем даже EAPI=6 в gentoo. Чем именно? Да вот чем демонстрирую на конкретном примере - делаю из sys-kernel/bentoo-sources sys-kernel/hardened-sources следите за руками:

ls /etc/portage/autopatch/sys-kernel/bentoo-sources-4.8.17
1510_fs-enable-link-security-restrictions-by-default.patch
4420_grsecurity-3.1-4.8.17-201701090823.patch
4425_grsec_remove_EI_PAX.patch
4427_force_XATTR_PAX_tmpfs.patch
4430_grsec-remove-localversion-grsec.patch
4435_grsec-mute-warnings.patch
4440_grsec-remove-protected-paths.patch
4450_grsec-kconfig-default-gids.patch
4465_selinux-avc_audit-log-curr_ip.patch
4470_disable-compat_vdso.patch
4475_emutramp_default_on.patch
bentoo-sources-4.8.17.conf
change-default-console-loglevel.patch
die-floppy-die.patch
exfat-4.8.16.patch

“В EAPI=6 можно точно так-же” скажут те зануды из моих читателей которые не обращают внимание на детали. А теперь о деталях:

cat  /etc/portage/autopatch/sys-kernel/bentoo-sources-4.8.17/bentoo-sources-4.8.17.conf
push,1510_fs-enable-link-security-restrictions-by-default.patch
push,4420_grsecurity-3.1-4.8.17-201701090823.patch
push,4425_grsec_remove_EI_PAX.patch
push,4427_force_XATTR_PAX_tmpfs.patch
push,4430_grsec-remove-localversion-grsec.patch
push,4435_grsec-mute-warnings.patch
push,4440_grsec-remove-protected-paths.patch
push,4450_grsec-kconfig-default-gids.patch
push,4465_selinux-avc_audit-log-curr_ip.patch
push,4470_disable-compat_vdso.patch
push,4475_emutramp_default_on.patch
push,change-default-console-loglevel.patch
push,die-floppy-die.patch
push,exfat-4.8.16.patch

Файл bentoo-sources-4.8.17.conf - файл конфигурации для ipatch.
В отличие от gentoo с её epatch_user bentoo в ibashrc использует ipatch который умеет и может гораздо больше. ibashrc+ipatch так-же как и epatch_user из gentoo умеют применять заплатки в отсортированном по алфавиту порядке из определённой директории. Но это так скучно. Потому-что для начала ipatch это утилита на bash которая доступна не только из ebuild-а как epatch_user:

ipatch ?
* No such directory - 
* No such file or directory - 
ipatch v. @PACKAGE_VERSION@ "@PACKAGE_TAG@"

Usage: ipatch <operation> <work dir> <patch|dir|conf>

where <operation> is one of
push or +        apply patch
test or ~        test patch
pop or -         reversing patch
help or h or ?   print this help

where <work dir> is some directory. For current directory use dot.

where <patch|dir|conf> is one of
<dir>/<patch>    Any patch file *.{diff,patch,gz,bz,bz2,lrz,xz,zip,Z}
<dir>            For recursive apply or reversing all patches from directory. For current directory use dot.
<dir>/<conf>     Patch set config file *.conf

patch set config file format:
<operation>,<patch|dir>

Examples:
To apply all patches to current directory from /etc/portage/patches
ipatch push . /etc/portage/patches

To reversing patch /etc/portage/patches/reiser4-for-3.14.1.patch.gz in /usr/src/linux
ipatch pop /usr/src/linux /etc/portage/patches/reiser4-for-3.14.1.patch.gz

To apply all patches from /etc/portage/patches/local.conf config file in /usr/src/linux
ipatch push /usr/src/linux /etc/portage/patches/local.conf

ipatch is copyright Andrey Ovcharov <sudormrfhalt@gmail.com> and contributors.
Distributed under the terms of the GNU General Public License version 3. NO WARRANTY given.

Неглядя на сортировку файлов можно легко и непринужденно задать любой порядок применения патчей. И не только. epatch_user нужен для применения патчей а ipatch умеет не только применять заплатки но и откатывать и просто тестировать возможность применения одной или нескольких заплаток сразу. И всё это доступно не только из ebuild-ов в portage и не в одной единственной gentoo.

Comments