diff --git a/sys-boot/plymouth-openrc-plugin/files/plymouth-openrc-plugin-0.1.3-r2.patch b/sys-boot/plymouth-openrc-plugin/files/plymouth-openrc-plugin-0.1.3-r2.patch new file mode 100644 index 000000000..38dc9738d --- /dev/null +++ b/sys-boot/plymouth-openrc-plugin/files/plymouth-openrc-plugin-0.1.3-r2.patch @@ -0,0 +1,172 @@ +commit 18262b0ad15aeef537a55019e059483ae0dba426 +Author: Хирецкий Михаил +Date: Thu Dec 3 12:13:19 2020 +0300 + + Принудительный запуск plymouth через openrc на tty1 + +commit 564d675e30d49ef38c6cd593d380a32da635b35d +Author: Хирецкий Михаил +Date: Thu Dec 3 12:10:44 2020 +0300 + + Добавлено переключение на tty1 при остановке службы xdm + +commit aaa3f2214e88374475adde0af0a6916f114a0b4d +Author: Хирецкий Михаил +Date: Tue Feb 19 11:51:06 2019 +0300 + + Изменены условия запуск plymouthd + + Запускать plymouthd при загрузке если есть параметр splash или + splash=silent + Запускать plymouthd при выключении если есть параметр splash или + splash=shutdown + +commit ebd632e188b9d647e31989f27c80124a8899cc33 +Author: Хирецкий Михаил +Date: Wed Feb 13 16:43:33 2019 +0300 + + Добавлен перезапуск consolefont в конце загрузки системы + +commit a08cdcecbd5fefba0feb5aa96ad908b493e68659 +Author: Хирецкий Михаил +Date: Wed Feb 13 16:31:33 2019 +0300 + + Переключение на tty1 при запуске plymouth во время shutdown + +commit a2683bffa4c506fcf2ec440f7b482191ed37fd27 +Author: Хирецкий Михаил +Date: Wed Feb 13 16:29:33 2019 +0300 + + Отключено сообщение о запускаемой/останавливаемой службе + +diff --git a/plymouth.c b/plymouth.c +index e9c925b..f9b6609 100644 +--- a/plymouth.c ++++ b/plymouth.c +@@ -22,6 +22,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -82,10 +84,15 @@ int commandf(const char* cmd, ...) + return command(buffer); + } + ++void restart_console_font() ++{ ++ if(RC_SERVICE_STARTED == rc_service_state("consolefont")) ++ command("/etc/init.d/consolefont restart"); ++} + + bool ply_message(const char* hook, const char* name) + { +- return (commandf("/bin/plymouth message --text=\"%s %s\"", hook, name) == 0); ++ return true; + } + + +@@ -125,7 +132,7 @@ bool ply_start(int mode) + } + + #define PLYD "/sbin/plymouthd --attach-to-session --pid-file=" PID_FILE \ +- " --mode=" ++ " --tty=/dev/tty1 --mode=" + if(mode == PLY_MODE_BOOT) + rv = command(PLYD "boot"); + else if(mode == PLY_MODE_SHUTDOWN) +@@ -148,6 +155,30 @@ bool ply_update_status(int hook, const char* name) + return (commandf("/bin/plymouth update --status=%d-%s", hook, name) == 0); + } + ++bool kernel_command_has_argument(const char *argument) ++{ ++ char buf[4096]; ++ int fd; ++ fd = open("/proc/cmdline", O_RDONLY); ++ ++ if( fd < 0 ) { ++ return false; ++ } ++ if(read(fd, buf, 4095) < 0) { ++ close(fd); ++ return false; ++ } ++ close(fd); ++ char *found_arg = strstr(buf, argument); ++ if(found_arg == NULL) ++ return false; ++ ++ if(found_arg == buf || found_arg[-1] == ' ') { ++ char endch = *(found_arg+strlen(argument)); ++ return (isspace(endch) || endch == '\0') ? true : false; ++ } ++ return false; ++} + + bool ply_update_rootfs_rw() + { +@@ -210,11 +241,15 @@ int rc_plugin_hook(RC_HOOK hook, const char *name) + case RC_HOOK_RUNLEVEL_STOP_IN: + /* Start the Plymouth daemon and show splash when system is being shut + * down. */ +- if(strcmp(name, RC_LEVEL_SHUTDOWN) == 0) { ++ if(strcmp(name, RC_LEVEL_SHUTDOWN) == 0 && ++ (kernel_command_has_argument("splash") || ++ kernel_command_has_argument("splash=shutdown"))) ++ { + DBG("ply_start(PLY_MODE_SHUTDOWN)"); + if(!ply_start(PLY_MODE_SHUTDOWN) + || !ply_update_rootfs_rw()) + rv = 1; ++ command("/usr/bin/chvt 1"); + } + break; + +@@ -222,7 +257,10 @@ int rc_plugin_hook(RC_HOOK hook, const char *name) + /* Start the Plymouth daemon and show splash when entering the boot + * runlevel. Required /proc and /sys should already be mounted in + * sysinit runlevel. */ +- if(strcmp(name, bootlevel) == 0) { ++ if(strcmp(name, bootlevel) == 0 && ++ (kernel_command_has_argument("splash") || ++ kernel_command_has_argument("splash=silent"))) ++ { + DBG("ply_start(PLY_MODE_BOOT)"); + if(!ply_start(PLY_MODE_BOOT)) + rv = 1; +@@ -235,6 +273,7 @@ int rc_plugin_hook(RC_HOOK hook, const char *name) + DBG("ply_quit(PLY_MODE_BOOT)"); + if(!ply_quit(PLY_MODE_BOOT)) + rv = 1; ++ restart_console_font(); + } + break; + +@@ -251,8 +290,13 @@ int rc_plugin_hook(RC_HOOK hook, const char *name) + case RC_HOOK_SERVICE_STOP_NOW: + if(!ply_message("Stopping service", name)) + rv = 1; ++ if(strcmp(name, "xdm") == 0) ++ command("/usr/bin/chvt 1"); ++ break; ++ case RC_HOOK_SERVICE_STOP_DONE: ++ if(strcmp(name, "xdm") == 0) ++ command("/usr/bin/chvt 1"); + break; +- + case RC_HOOK_SERVICE_START_NOW: + if(!ply_message("Starting service", name)) + rv = 1; +@@ -267,7 +311,7 @@ int rc_plugin_hook(RC_HOOK hook, const char *name) + if(!ply_update_rootfs_rw()) + rv = 1; + } +- break; ++ break; + + default: + break; diff --git a/sys-boot/plymouth-openrc-plugin/plymouth-openrc-plugin-0.1.3-r2.ebuild b/sys-boot/plymouth-openrc-plugin/plymouth-openrc-plugin-0.1.3-r2.ebuild new file mode 100644 index 000000000..cedbc4832 --- /dev/null +++ b/sys-boot/plymouth-openrc-plugin/plymouth-openrc-plugin-0.1.3-r2.ebuild @@ -0,0 +1,32 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +DESCRIPTION="Plymouth plugin for OpenRC" +HOMEPAGE="https://github.com/Kangie/plymouth-openrc-plugin" +SRC_URI="https://github.com/Kangie/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="GPL-2+" +SLOT="0" +KEYWORDS="~alpha amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc x86" +IUSE="" + +DEPEND="sys-apps/openrc:=" +RDEPEND="${DEPEND} + sys-boot/plymouth + !sys-apps/systemd" + +PATCHES=( "${FILESDIR}/${P}-r2.patch" ) + +src_install() { + insinto /$(get_libdir)/rc/plugins + doins plymouth.so +} + +pkg_postinst() { + if [[ -z ${REPLACING_VERSIONS} ]]; then + ewarn "You need to disable 'rc_interactive' feature in /etc/rc.conf to make" + ewarn "Plymouth work properly with OpenRC init system." + fi +}