diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd097b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/plymouth-1e36e303e08ba425fecbcff4dde22c8ee936638c.tar.bz2 diff --git a/0001-Revert-throbgress-Remove-the-throbgress-plugin.patch b/0001-Revert-throbgress-Remove-the-throbgress-plugin.patch new file mode 100644 index 0000000..cfe6bc3 --- /dev/null +++ b/0001-Revert-throbgress-Remove-the-throbgress-plugin.patch @@ -0,0 +1,1112 @@ +From ae48268a110722927cc9deb2f667f6327634436c Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 15 Jun 2020 10:22:20 -0400 +Subject: [PATCH 1/2] Revert "throbgress: Remove the throbgress plugin" + +This reverts commit a76638856d600496f8f69b308fbcf7d623430851. +--- + configure.ac | 1 + + src/plugins/splash/Makefile.am | 2 +- + src/plugins/splash/throbgress/Makefile.am | 28 + + src/plugins/splash/throbgress/plugin.c | 980 ++++++++++++++++++++++ + 4 files changed, 1010 insertions(+), 1 deletion(-) + create mode 100644 src/plugins/splash/throbgress/Makefile.am + create mode 100644 src/plugins/splash/throbgress/plugin.c + +diff --git a/configure.ac b/configure.ac +index d34245a..970e19f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -280,60 +280,61 @@ plymouththemedir=$datadir/plymouth/themes + AS_AC_EXPAND(PLYMOUTH_THEME_PATH, $plymouththemedir) + + plymouthruntimethemedir=$plymouthruntimedir/themes + AS_AC_EXPAND(PLYMOUTH_RUNTIME_THEME_PATH, $plymouthruntimethemedir) + + plymouthplugindir=$libdir/plymouth/ + AS_AC_EXPAND(PLYMOUTH_PLUGIN_PATH, $plymouthplugindir) + + plymouthpolicydir=$datadir/plymouth/ + AS_AC_EXPAND(PLYMOUTH_POLICY_DIR, $plymouthpolicydir) + + plymouthconfdir=$sysconfdir/plymouth/ + AS_AC_EXPAND(PLYMOUTH_CONF_DIR, $plymouthconfdir) + + AS_AC_EXPAND(PLYMOUTH_LIBDIR, $libdir) + AS_AC_EXPAND(PLYMOUTH_LIBEXECDIR, $libexecdir) + AS_AC_EXPAND(PLYMOUTH_DATADIR, $datadir) + + AC_CONFIG_FILES([Makefile po/Makefile.in + src/libply/Makefile + src/libply-splash-core/Makefile + src/libply-splash-graphics/Makefile + src/ply-splash-core.pc + src/ply-splash-graphics.pc + src/plugins/Makefile + src/plugins/renderers/Makefile + src/plugins/renderers/frame-buffer/Makefile + src/plugins/renderers/drm/Makefile + src/plugins/renderers/x11/Makefile + src/plugins/splash/Makefile ++ src/plugins/splash/throbgress/Makefile + src/plugins/splash/fade-throbber/Makefile + src/plugins/splash/tribar/Makefile + src/plugins/splash/text/Makefile + src/plugins/splash/details/Makefile + src/plugins/splash/space-flares/Makefile + src/plugins/splash/two-step/Makefile + src/plugins/splash/script/Makefile + src/plugins/controls/Makefile + src/plugins/controls/label/Makefile + src/Makefile + src/client/ply-boot-client.pc + src/client/Makefile + src/upstart-bridge/Makefile + themes/Makefile + themes/spinfinity/Makefile + themes/fade-in/Makefile + themes/tribar/Makefile + themes/text/Makefile + themes/details/Makefile + themes/solar/Makefile + themes/glow/Makefile + themes/spinner/Makefile + themes/script/Makefile + themes/bgrt/Makefile + images/Makefile + scripts/plymouth-generate-initrd + scripts/plymouth-populate-initrd + scripts/plymouth-set-default-theme + scripts/Makefile + systemd-units/plymouth-halt.service +diff --git a/src/plugins/splash/Makefile.am b/src/plugins/splash/Makefile.am +index d167530..a19197b 100644 +--- a/src/plugins/splash/Makefile.am ++++ b/src/plugins/splash/Makefile.am +@@ -1,2 +1,2 @@ +-SUBDIRS = fade-throbber text details space-flares two-step script tribar ++SUBDIRS = throbgress fade-throbber text details space-flares two-step script tribar + MAINTAINERCLEANFILES = Makefile.in +diff --git a/src/plugins/splash/throbgress/Makefile.am b/src/plugins/splash/throbgress/Makefile.am +new file mode 100644 +index 0000000..2ac1b0c +--- /dev/null ++++ b/src/plugins/splash/throbgress/Makefile.am +@@ -0,0 +1,28 @@ ++AM_CPPFLAGS = -I$(top_srcdir) \ ++ -I$(srcdir)/../../../libply \ ++ -I$(srcdir)/../../../libply-splash-core \ ++ -I$(srcdir)/../../../libply-splash-graphics \ ++ -I$(srcdir)/../../.. \ ++ -I$(srcdir)/../.. \ ++ -I$(srcdir)/.. \ ++ -I$(srcdir) ++ ++plugindir = $(libdir)/plymouth ++plugin_LTLIBRARIES = throbgress.la ++ ++throbgress_la_CFLAGS = $(PLYMOUTH_CFLAGS) \ ++ -DPLYMOUTH_IMAGE_DIR=\"$(datadir)/plymouth/\" \ ++ -DPLYMOUTH_TIME_DIR=\"$(localstatedir)/lib/plymouth/\"\ ++ -DPLYMOUTH_LOGO_FILE=\"$(logofile)\" \ ++ -DPLYMOUTH_BACKGROUND_COLOR=$(background_color) \ ++ -DPLYMOUTH_BACKGROUND_END_COLOR=$(background_end_color) \ ++ -DPLYMOUTH_BACKGROUND_START_COLOR=$(background_start_color) ++ ++throbgress_la_LDFLAGS = -module -avoid-version -export-dynamic ++throbgress_la_LIBADD = $(PLYMOUTH_LIBS) \ ++ ../../../libply/libply.la \ ++ ../../../libply-splash-core/libply-splash-core.la \ ++ ../../../libply-splash-graphics/libply-splash-graphics.la ++throbgress_la_SOURCES = $(srcdir)/plugin.c ++ ++MAINTAINERCLEANFILES = Makefile.in +diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c +new file mode 100644 +index 0000000..86be064 +--- /dev/null ++++ b/src/plugins/splash/throbgress/plugin.c +@@ -0,0 +1,980 @@ ++/* throbgress.c - boot splash plugin ++ * ++ * Copyright (C) 2007, 2008 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2, or (at your option) ++ * any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ++ * 02111-1307, USA. ++ * ++ * Written by: Ray Strode ++ * Will Woods ++ */ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "ply-boot-splash-plugin.h" ++#include "ply-buffer.h" ++#include "ply-entry.h" ++#include "ply-event-loop.h" ++#include "ply-key-file.h" ++#include "ply-label.h" ++#include "ply-list.h" ++#include "ply-progress-bar.h" ++#include "ply-logger.h" ++#include "ply-image.h" ++#include "ply-trigger.h" ++#include "ply-pixel-buffer.h" ++#include "ply-pixel-display.h" ++#include "ply-utils.h" ++ ++#include "ply-throbber.h" ++ ++#ifndef FRAMES_PER_SECOND ++#define FRAMES_PER_SECOND 30 ++#endif ++ ++#ifndef BAR_HEIGHT ++#define BAR_HEIGHT 16 ++#endif ++ ++typedef enum ++{ ++ PLY_BOOT_SPLASH_DISPLAY_NORMAL, ++ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY, ++ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY ++} ply_boot_splash_display_type_t; ++ ++typedef struct ++{ ++ ply_boot_splash_plugin_t *plugin; ++ ply_pixel_display_t *display; ++ ply_entry_t *entry; ++ ply_throbber_t *throbber; ++ ply_progress_bar_t *progress_bar; ++ ply_label_t *label; ++ ply_label_t *message_label; ++ ply_rectangle_t box_area, lock_area, logo_area, bar_area; ++} view_t; ++ ++struct _ply_boot_splash_plugin ++{ ++ ply_event_loop_t *loop; ++ ply_boot_splash_mode_t mode; ++ ply_image_t *logo_image; ++ ply_image_t *lock_image; ++ ply_image_t *box_image; ++ ply_list_t *views; ++ ++ char *image_dir; ++ ply_boot_splash_display_type_t state; ++ ++ uint32_t background_start_color; ++ uint32_t background_end_color; ++ ++ ply_trigger_t *idle_trigger; ++ ++ uint32_t root_is_mounted : 1; ++ uint32_t is_visible : 1; ++ uint32_t is_animating : 1; ++ uint32_t is_idle : 1; ++}; ++ ++ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); ++static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin); ++ ++static void become_idle (ply_boot_splash_plugin_t *plugin, ++ ply_trigger_t *idle_trigger); ++ ++static view_t * ++view_new (ply_boot_splash_plugin_t *plugin, ++ ply_pixel_display_t *display) ++{ ++ view_t *view; ++ ++ view = calloc (1, sizeof(view_t)); ++ view->plugin = plugin; ++ view->display = display; ++ ++ view->entry = ply_entry_new (plugin->image_dir); ++ view->throbber = ply_throbber_new (plugin->image_dir, ++ "throbber-"); ++ view->progress_bar = ply_progress_bar_new (); ++ view->label = ply_label_new (); ++ view->message_label = ply_label_new (); ++ ++ return view; ++} ++ ++static void ++view_free (view_t *view) ++{ ++ ply_entry_free (view->entry); ++ ply_throbber_free (view->throbber); ++ ply_progress_bar_free (view->progress_bar); ++ ply_label_free (view->label); ++ ply_label_free (view->message_label); ++ ++ free (view); ++} ++ ++static void ++free_views (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ node = ply_list_get_first_node (plugin->views); ++ ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_free (view); ++ ply_list_remove_node (plugin->views, node); ++ ++ node = next_node; ++ } ++ ++ ply_list_free (plugin->views); ++ plugin->views = NULL; ++} ++ ++static bool ++view_load (view_t *view) ++{ ++ ply_trace ("loading entry"); ++ if (!ply_entry_load (view->entry)) ++ return false; ++ ++ ply_trace ("loading throbber"); ++ if (!ply_throbber_load (view->throbber)) ++ return false; ++ ++ return true; ++} ++ ++static bool ++load_views (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ bool view_loaded; ++ ++ view_loaded = false; ++ node = ply_list_get_first_node (plugin->views); ++ ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ if (view_load (view)) ++ view_loaded = true; ++ ++ node = next_node; ++ } ++ ++ return view_loaded; ++} ++ ++static void ++view_redraw (view_t *view) ++{ ++ unsigned long screen_width, screen_height; ++ ++ screen_width = ply_pixel_display_get_width (view->display); ++ screen_height = ply_pixel_display_get_height (view->display); ++ ++ ply_pixel_display_draw_area (view->display, 0, 0, ++ screen_width, screen_height); ++} ++ ++static void ++redraw_views (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_redraw (view); ++ ++ node = next_node; ++ } ++} ++ ++static void ++pause_views (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("pausing views"); ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ ply_pixel_display_pause_updates (view->display); ++ ++ node = next_node; ++ } ++} ++ ++static void ++unpause_views (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("unpausing views"); ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ ply_pixel_display_unpause_updates (view->display); ++ ++ node = next_node; ++ } ++} ++ ++static void ++view_start_animation (view_t *view) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ ++ unsigned long screen_width, screen_height; ++ long width, height; ++ ++ assert (view != NULL); ++ ++ plugin = view->plugin; ++ ++ assert (plugin != NULL); ++ assert (plugin->loop != NULL); ++ ++ screen_width = ply_pixel_display_get_width (view->display); ++ screen_height = ply_pixel_display_get_height (view->display); ++ ++ ply_pixel_display_draw_area (view->display, 0, 0, ++ screen_width, screen_height); ++ ++ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || ++ plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) ++ return; ++ ++ plugin->is_idle = false; ++ ++ width = ply_throbber_get_width (view->throbber); ++ height = ply_throbber_get_height (view->throbber); ++ ply_throbber_start (view->throbber, ++ plugin->loop, ++ view->display, ++ screen_width / 2.0 - width / 2.0, ++ view->logo_area.y + view->logo_area.height + height / 2); ++ ply_progress_bar_show (view->progress_bar, ++ view->display, ++ 0, ++ screen_height - BAR_HEIGHT, ++ screen_width, ++ BAR_HEIGHT); ++ view_redraw (view); ++} ++ ++static void ++view_show_prompt (view_t *view, ++ const char *prompt) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ int x, y; ++ int entry_width, entry_height; ++ ++ assert (view != NULL); ++ ++ plugin = view->plugin; ++ ++ if (ply_entry_is_hidden (view->entry)) { ++ unsigned long screen_width, screen_height; ++ ++ screen_width = ply_pixel_display_get_width (view->display); ++ screen_height = ply_pixel_display_get_height (view->display); ++ ++ view->box_area.width = ply_image_get_width (plugin->box_image); ++ view->box_area.height = ply_image_get_height (plugin->box_image); ++ view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0; ++ view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0; ++ ++ view->lock_area.width = ply_image_get_width (plugin->lock_image); ++ view->lock_area.height = ply_image_get_height (plugin->lock_image); ++ ++ entry_width = ply_entry_get_width (view->entry); ++ entry_height = ply_entry_get_height (view->entry); ++ ++ x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width; ++ y = screen_height / 2.0 - entry_height / 2.0; ++ ++ view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0; ++ view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0; ++ ++ ply_entry_show (view->entry, plugin->loop, view->display, x, y); ++ } ++ ++ if (prompt != NULL) { ++ ply_label_set_text (view->label, prompt); ++ ++ x = view->box_area.x + view->lock_area.width / 2; ++ y = view->box_area.y + view->box_area.height; ++ ++ ply_label_show (view->label, view->display, x, y); ++ } ++} ++ ++static void ++view_hide_prompt (view_t *view) ++{ ++ assert (view != NULL); ++ ++ ply_entry_hide (view->entry); ++ ply_label_hide (view->label); ++} ++ ++static ply_boot_splash_plugin_t * ++create_plugin (ply_key_file_t *key_file) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ char *image_dir, *image_path; ++ char *color; ++ ++ srand ((int) ply_get_timestamp ()); ++ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t)); ++ ++ plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE); ++ image_dir = ply_key_file_get_value (key_file, "throbgress", "ImageDir"); ++ ++ asprintf (&image_path, "%s/lock.png", image_dir); ++ plugin->lock_image = ply_image_new (image_path); ++ free (image_path); ++ ++ asprintf (&image_path, "%s/box.png", image_dir); ++ plugin->box_image = ply_image_new (image_path); ++ free (image_path); ++ ++ plugin->image_dir = image_dir; ++ plugin->views = ply_list_new (); ++ ++ color = ply_key_file_get_value (key_file, "throbgress", "BackgroundStartColor"); ++ ++ if (color != NULL) ++ plugin->background_start_color = strtol (color, NULL, 0); ++ else ++ plugin->background_start_color = PLYMOUTH_BACKGROUND_START_COLOR; ++ ++ free (color); ++ ++ color = ply_key_file_get_value (key_file, "throbgress", "BackgroundEndColor"); ++ ++ if (color != NULL) ++ plugin->background_end_color = strtol (color, NULL, 0); ++ else ++ plugin->background_end_color = PLYMOUTH_BACKGROUND_END_COLOR; ++ ++ free (color); ++ ++ return plugin; ++} ++ ++static void ++destroy_plugin (ply_boot_splash_plugin_t *plugin) ++{ ++ if (plugin == NULL) ++ return; ++ ++ ply_trace ("destroying plugin"); ++ ++ if (plugin->loop != NULL) { ++ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) ++ detach_from_event_loop, ++ plugin); ++ detach_from_event_loop (plugin); ++ } ++ ++ ply_image_free (plugin->logo_image); ++ ply_image_free (plugin->box_image); ++ ply_image_free (plugin->lock_image); ++ ++ free_views (plugin); ++ ++ free (plugin); ++} ++ ++static void ++draw_background (view_t *view, ++ ply_pixel_buffer_t *pixel_buffer, ++ int x, ++ int y, ++ int width, ++ int height) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ ply_rectangle_t area; ++ ++ plugin = view->plugin; ++ ++ area.x = x; ++ area.y = y; ++ area.width = width; ++ area.height = height; ++ ++ if (plugin->background_start_color != plugin->background_end_color) ++ ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area, ++ plugin->background_start_color, ++ plugin->background_end_color); ++ else ++ ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area, ++ plugin->background_start_color); ++} ++ ++static void ++draw_logo (view_t *view, ++ ply_pixel_buffer_t *pixel_buffer) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ uint32_t *logo_data; ++ unsigned long screen_width, screen_height; ++ long width, height; ++ ++ plugin = view->plugin; ++ ++ screen_width = ply_pixel_display_get_width (view->display); ++ screen_height = ply_pixel_display_get_height (view->display); ++ ++ width = ply_image_get_width (plugin->logo_image); ++ height = ply_image_get_height (plugin->logo_image); ++ logo_data = ply_image_get_data (plugin->logo_image); ++ view->logo_area.x = (screen_width / 2) - (width / 2); ++ view->logo_area.y = (screen_height / 2) - (height / 2); ++ view->logo_area.width = width; ++ view->logo_area.height = height; ++ ++ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, ++ &view->logo_area, ++ logo_data); ++} ++ ++static void ++start_animation (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ if (plugin->is_animating) ++ return; ++ ++ ply_trace ("starting animation"); ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_start_animation (view); ++ ++ node = next_node; ++ } ++ ++ plugin->is_animating = true; ++ ++ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || ++ plugin->mode == PLY_BOOT_SPLASH_MODE_REBOOT) ++ plugin->is_idle = true; ++} ++ ++static void ++stop_animation (ply_boot_splash_plugin_t *plugin, ++ ply_trigger_t *trigger) ++{ ++ ply_list_node_t *node; ++ ++ assert (plugin != NULL); ++ assert (plugin->loop != NULL); ++ ++ if (!plugin->is_animating) ++ return; ++ ++ ply_trace ("stopping animation%s", ++ trigger != NULL ? " with trigger" : ""); ++ ++ plugin->is_animating = false; ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ ply_progress_bar_hide (view->progress_bar); ++ if (trigger != NULL) ++ ply_trigger_ignore_next_pull (trigger); ++ ply_throbber_stop (view->throbber, trigger); ++ ++ node = next_node; ++ } ++ ++ if (trigger != NULL) ++ ply_trigger_pull (trigger, NULL); ++} ++ ++static void ++detach_from_event_loop (ply_boot_splash_plugin_t *plugin) ++{ ++ plugin->loop = NULL; ++} ++ ++static void ++on_draw (view_t *view, ++ ply_pixel_buffer_t *pixel_buffer, ++ int x, ++ int y, ++ int width, ++ int height) ++{ ++ ply_boot_splash_plugin_t *plugin; ++ ++ plugin = view->plugin; ++ ++ draw_background (view, pixel_buffer, x, y, width, height); ++ ++ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY || ++ plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) { ++ uint32_t *box_data, *lock_data; ++ ++ box_data = ply_image_get_data (plugin->box_image); ++ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, ++ &view->box_area, ++ box_data); ++ ply_entry_draw_area (view->entry, pixel_buffer, x, y, width, height); ++ ply_label_draw_area (view->label, pixel_buffer, x, y, width, height); ++ lock_data = ply_image_get_data (plugin->lock_image); ++ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, ++ &view->lock_area, ++ lock_data); ++ } else { ++ draw_logo (view, pixel_buffer); ++ ply_throbber_draw_area (view->throbber, ++ pixel_buffer, x, y, width, height); ++ ply_progress_bar_draw_area (view->progress_bar, ++ pixel_buffer, x, y, width, height); ++ } ++ ply_label_draw_area (view->message_label, ++ pixel_buffer, ++ x, y, width, height); ++} ++ ++static void ++add_pixel_display (ply_boot_splash_plugin_t *plugin, ++ ply_pixel_display_t *display) ++{ ++ view_t *view; ++ ++ ply_trace ("adding pixel display to plugin"); ++ view = view_new (plugin, display); ++ ++ ply_pixel_display_set_draw_handler (view->display, ++ (ply_pixel_display_draw_handler_t) ++ on_draw, view); ++ ++ if (plugin->is_visible) { ++ if (view_load (view)) ++ ply_list_append_data (plugin->views, view); ++ else ++ view_free (view); ++ } else { ++ ply_list_append_data (plugin->views, view); ++ } ++} ++ ++static void ++remove_pixel_display (ply_boot_splash_plugin_t *plugin, ++ ply_pixel_display_t *display) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("removing pixel display from plugin"); ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ view_t *view; ++ ply_list_node_t *next_node; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ if (view->display == display) { ++ ply_pixel_display_set_draw_handler (view->display, NULL, NULL); ++ view_free (view); ++ ply_list_remove_node (plugin->views, node); ++ return; ++ } ++ ++ node = next_node; ++ } ++} ++ ++static bool ++show_splash_screen (ply_boot_splash_plugin_t *plugin, ++ ply_event_loop_t *loop, ++ ply_buffer_t *boot_buffer, ++ ply_boot_splash_mode_t mode) ++{ ++ assert (plugin != NULL); ++ assert (plugin->logo_image != NULL); ++ ++ plugin->loop = loop; ++ plugin->mode = mode; ++ ++ ply_trace ("loading logo image"); ++ if (!ply_image_load (plugin->logo_image)) ++ return false; ++ ++ ply_trace ("loading lock image"); ++ if (!ply_image_load (plugin->lock_image)) ++ return false; ++ ++ ply_trace ("loading box image"); ++ if (!ply_image_load (plugin->box_image)) ++ return false; ++ ++ if (!load_views (plugin)) { ++ ply_trace ("couldn't load views"); ++ return false; ++ } ++ ++ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t) ++ detach_from_event_loop, ++ plugin); ++ ++ ply_trace ("starting boot animation"); ++ start_animation (plugin); ++ ++ plugin->is_visible = true; ++ ++ return true; ++} ++ ++static void ++update_status (ply_boot_splash_plugin_t *plugin, ++ const char *status) ++{ ++ assert (plugin != NULL); ++} ++ ++static void ++on_boot_progress (ply_boot_splash_plugin_t *plugin, ++ double duration, ++ double percent_done) ++{ ++ ply_list_node_t *node; ++ double total_duration; ++ ++ if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES || ++ plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE || ++ plugin->mode == PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE) ++ return; ++ ++ total_duration = duration / percent_done; ++ ++ /* Fun made-up smoothing function to make the growth asymptotic: ++ * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */ ++ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done); ++ ++ node = ply_list_get_first_node (plugin->views); ++ ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ ply_progress_bar_set_percent_done (view->progress_bar, percent_done); ++ ++ node = next_node; ++ } ++} ++ ++static void ++hide_splash_screen (ply_boot_splash_plugin_t *plugin, ++ ply_event_loop_t *loop) ++{ ++ assert (plugin != NULL); ++ ++ ply_trace ("hiding splash"); ++ if (plugin->loop != NULL) { ++ stop_animation (plugin, NULL); ++ ++ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) ++ detach_from_event_loop, ++ plugin); ++ detach_from_event_loop (plugin); ++ } ++ ++ plugin->is_visible = false; ++} ++ ++static void ++show_password_prompt (ply_boot_splash_plugin_t *plugin, ++ const char *text, ++ int number_of_bullets) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("showing password prompt"); ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_show_prompt (view, text); ++ ply_entry_set_bullet_count (view->entry, number_of_bullets); ++ ++ node = next_node; ++ } ++} ++ ++static void ++show_prompt (ply_boot_splash_plugin_t *plugin, ++ const char *prompt, ++ const char *entry_text) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("showing prompt"); ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_show_prompt (view, prompt); ++ ply_entry_set_text (view->entry, entry_text); ++ ++ node = next_node; ++ } ++} ++ ++static void ++on_root_mounted (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_trace ("root filesystem mounted"); ++ plugin->root_is_mounted = true; ++} ++ ++static void ++become_idle (ply_boot_splash_plugin_t *plugin, ++ ply_trigger_t *idle_trigger) ++{ ++ ply_trace ("deactivation requested"); ++ if (plugin->is_idle) { ++ ply_trace ("plugin is already idle"); ++ ply_trigger_pull (idle_trigger, NULL); ++ return; ++ } ++ ++ stop_animation (plugin, idle_trigger); ++ plugin->is_idle = true; ++} ++ ++static void ++hide_prompt (ply_boot_splash_plugin_t *plugin) ++{ ++ ply_list_node_t *node; ++ ++ ply_trace ("hiding prompt"); ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ++ view_hide_prompt (view); ++ ++ node = next_node; ++ } ++} ++ ++ ++static void ++show_message (ply_boot_splash_plugin_t *plugin, ++ const char *message) ++{ ++ ply_trace ("Showing message '%s'", message); ++ ply_list_node_t *node; ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ply_label_set_text (view->message_label, message); ++ ply_label_show (view->message_label, view->display, 10, 10); ++ ++ ply_pixel_display_draw_area (view->display, 10, 10, ++ ply_label_get_width (view->message_label), ++ ply_label_get_height (view->message_label)); ++ node = next_node; ++ } ++} ++ ++static void ++display_normal (ply_boot_splash_plugin_t *plugin) ++{ ++ pause_views (plugin); ++ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL) ++ hide_prompt (plugin); ++ ++ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL; ++ start_animation (plugin); ++ redraw_views (plugin); ++ unpause_views (plugin); ++} ++ ++static void ++display_password (ply_boot_splash_plugin_t *plugin, ++ const char *prompt, ++ int bullets) ++{ ++ pause_views (plugin); ++ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL) ++ stop_animation (plugin, NULL); ++ ++ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY; ++ show_password_prompt (plugin, prompt, bullets); ++ redraw_views (plugin); ++ unpause_views (plugin); ++} ++ ++static void ++display_question (ply_boot_splash_plugin_t *plugin, ++ const char *prompt, ++ const char *entry_text) ++{ ++ pause_views (plugin); ++ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL) ++ stop_animation (plugin, NULL); ++ ++ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY; ++ show_prompt (plugin, prompt, entry_text); ++ redraw_views (plugin); ++ unpause_views (plugin); ++} ++ ++static void ++display_message (ply_boot_splash_plugin_t *plugin, ++ const char *message) ++{ ++ show_message (plugin, message); ++} ++ ++static void ++system_update (ply_boot_splash_plugin_t *plugin, ++ int progress) ++{ ++ ply_list_node_t *node; ++ ++ if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES && ++ plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE && ++ plugin->mode != PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE) ++ return; ++ ++ node = ply_list_get_first_node (plugin->views); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ view_t *view; ++ ++ view = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (plugin->views, node); ++ ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); ++ node = next_node; ++ } ++} ++ ++ply_boot_splash_plugin_interface_t * ++ply_boot_splash_plugin_get_interface (void) ++{ ++ static ply_boot_splash_plugin_interface_t plugin_interface = ++ { ++ .create_plugin = create_plugin, ++ .destroy_plugin = destroy_plugin, ++ .add_pixel_display = add_pixel_display, ++ .remove_pixel_display = remove_pixel_display, ++ .show_splash_screen = show_splash_screen, ++ .update_status = update_status, ++ .on_boot_progress = on_boot_progress, ++ .hide_splash_screen = hide_splash_screen, ++ .on_root_mounted = on_root_mounted, ++ .become_idle = become_idle, ++ .display_normal = display_normal, ++ .display_password = display_password, ++ .display_question = display_question, ++ .display_message = display_message, ++ .system_update = system_update, ++ }; ++ ++ return &plugin_interface; ++} ++ ++/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ +-- +2.21.0 + diff --git a/0001-src-die-during-shutdown-with-everything-else.patch b/0001-src-die-during-shutdown-with-everything-else.patch new file mode 100644 index 0000000..da8f264 --- /dev/null +++ b/0001-src-die-during-shutdown-with-everything-else.patch @@ -0,0 +1,871 @@ +From f55051678452647e035853ee94a89cb54ea2aa4a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 17 Jul 2020 16:06:44 -0400 +Subject: [PATCH] src: die during shutdown with everything else + +plymouthd currently avoids getting killed at shutdown. This causes +filesystems to fail to remount read-only in some cases. + +This commit changes things up so that plymouthd dies with everyone else, +but spawns a process to hold open the drm device that can keep the splash +up until the very end. + +In order to keep this process alive until the very end, it gets run +from within the initramfs (if available). This requires adding service +files to jump back into the initramfs at shutdown +--- + configure.ac | 1 + + scripts/plymouth-populate-initrd.in | 2 + + src/Makefile.am | 7 +++ + src/main.c | 11 +++- + src/plugins/renderers/drm/Makefile.am | 3 +- + src/plugins/renderers/drm/plugin.c | 62 +++++++++++++++++++ + src/plymouthd-drm-escrow.c | 18 ++++++ + systemd-units/Makefile.am | 28 ++++++--- + systemd-units/plymouth-halt.service.in | 1 + + systemd-units/plymouth-poweroff.service.in | 1 + + systemd-units/plymouth-reboot.service.in | 1 + + .../plymouth-switch-root-initramfs.service.in | 12 ++++ + 12 files changed, 134 insertions(+), 13 deletions(-) + create mode 100644 src/plymouthd-drm-escrow.c + create mode 100644 systemd-units/plymouth-switch-root-initramfs.service.in + +diff --git a/configure.ac b/configure.ac +index 970e19f..1dc8cdb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -319,36 +319,37 @@ AC_CONFIG_FILES([Makefile po/Makefile.in + src/plugins/controls/label/Makefile + src/Makefile + src/client/ply-boot-client.pc + src/client/Makefile + src/upstart-bridge/Makefile + themes/Makefile + themes/spinfinity/Makefile + themes/fade-in/Makefile + themes/tribar/Makefile + themes/text/Makefile + themes/details/Makefile + themes/solar/Makefile + themes/glow/Makefile + themes/spinner/Makefile + themes/script/Makefile + themes/bgrt/Makefile + images/Makefile + scripts/plymouth-generate-initrd + scripts/plymouth-populate-initrd + scripts/plymouth-set-default-theme + scripts/Makefile + systemd-units/plymouth-halt.service + systemd-units/plymouth-kexec.service + systemd-units/plymouth-poweroff.service + systemd-units/plymouth-quit.service + systemd-units/plymouth-quit-wait.service + systemd-units/plymouth-read-write.service + systemd-units/plymouth-reboot.service + systemd-units/plymouth-start.service + systemd-units/plymouth-switch-root.service ++ systemd-units/plymouth-switch-root-initramfs.service + systemd-units/systemd-ask-password-plymouth.path + systemd-units/systemd-ask-password-plymouth.service + systemd-units/Makefile + docs/Makefile + ]) + AC_OUTPUT +diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in +index 60fd063..535a896 100755 +--- a/scripts/plymouth-populate-initrd.in ++++ b/scripts/plymouth-populate-initrd.in +@@ -1,54 +1,55 @@ + #!/bin/bash + # + # inst bits ruthlessly and viciously stolen from dracut + + [ -z "$DESTDIR" ] || exit 0 + + # For running on a (cross-compiled) sysroot, the following + # settings are needed: + # PLYMOUTH_SYSROOT - the sysroot directory + # PLYMOUTH_LDD - an optional ldd command that works on foreign binaries + # PLYMOUTH_LDD_PATH - optional PATH ldd is run with + + [ -z "$PLYMOUTH_LDD" ] && PLYMOUTH_LDD="ldd" + [ -z "$PLYMOUTH_LDD_PATH" ] && PLYMOUTH_LDD_PATH="$PATH" + [ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@" + [ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@" + [ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)" + [ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@PLYMOUTH_LOGO_FILE@" + [ -n "$PLYMOUTH_THEME_NAME" ] && THEME_OVERRIDE=1 + [ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme) + [ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@" + [ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@" + [ -z "$PLYMOUTH_DAEMON_PATH" ] && PLYMOUTH_DAEMON_PATH="@PLYMOUTH_DAEMON_DIR@/plymouthd" + [ -z "$PLYMOUTH_CLIENT_PATH" ] && PLYMOUTH_CLIENT_PATH="@PLYMOUTH_CLIENT_DIR@/plymouth" ++[ -z "$PLYMOUTH_DRM_ESCROW_PATH" ] && PLYMOUTH_DRM_ESCROW_PATH="@PLYMOUTH_LIBEXECDIR@/plymouth/plymouth-drm-escrow" + [ -z "$SYSTEMD_UNIT_DIR" ] && SYSTEMD_UNIT_DIR="@SYSTEMD_UNIT_DIR@" + [ -z "$SUPPORTED_LANGUAGES" ] && SUPPORTED_LANGUAGES="pt fr de it ru es en zh ja ko zh as bn gu hi kn ml mr or pa ta te" + + # Generic substring function. If $2 is in $1, return 0. + strstr() { [ "${1#*$2*}" != "$1" ]; } + + ddebug() { + [ "$verbose" = "true" ] && echo "$@" + } + + # normalize_path + # Prints the normalized path, where it removes any duplicated + # and trailing slashes. + # Example: + # $ normalize_path ///test/test// + # /test/test + normalize_path() { + shopt -q -s extglob + set -- "${1//+(\/)//}" + shopt -q -u extglob + echo "${1%/}" + } + + # convert_abs_rel + # Prints the relative path, when creating a symlink to from . + # Example: + # $ convert_abs_rel /usr/bin/test /bin/test-2 + # ../../bin/test-2 + # $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test + convert_abs_rel() { +@@ -390,60 +391,61 @@ verbose=false + INITRDDIR="" + while [ $# -gt 0 ]; do + case $1 in + --verbose|-v) + verbose=true + ;; + --targetdir|-t) + shift + INITRDDIR="$1" + ;; + --help|-h) + usage normal + ;; + *) + usage error + break + ;; + esac + shift + done + + [ -z "$INITRDDIR" ] && usage error + + ddebug "Running with PLYMOUTH_SYSROOT=$PLYMOUTH_SYSROOT" + ddebug "Running with PLYMOUTH_LDD=$PLYMOUTH_LDD" + ddebug "Running with PLYMOUTH_LDD_PATH=$PLYMOUTH_LDD_PATH" + + mkdir -p ${INITRDDIR}${PLYMOUTH_DATADIR}/plymouth/themes + inst ${PLYMOUTH_DAEMON_PATH} $INITRDDIR + inst ${PLYMOUTH_CLIENT_PATH} $INITRDDIR ++inst ${PLYMOUTH_DRM_ESCROW_PATH} $INITRDDIR + inst ${PLYMOUTH_DATADIR}/plymouth/themes/text/text.plymouth $INITRDDIR + inst ${PLYMOUTH_PLUGIN_PATH}/text.so $INITRDDIR + inst ${PLYMOUTH_DATADIR}/plymouth/themes/details/details.plymouth $INITRDDIR + inst ${PLYMOUTH_PLUGIN_PATH}/details.so $INITRDDIR + inst ${PLYMOUTH_LOGO_FILE} $INITRDDIR + inst @RELEASE_FILE@ $INITRDDIR + inst ${PLYMOUTH_POLICYDIR}/plymouthd.defaults $INITRDDIR + inst ${PLYMOUTH_CONFDIR}/plymouthd.conf $INITRDDIR + + if [ -z "$PLYMOUTH_THEME_NAME" ]; then + echo "No default plymouth plugin is set" >&2 + exit 1 + fi + + if [ $THEME_OVERRIDE ]; then + conf=$INITRDDIR/${PLYMOUTH_CONFDIR}/plymouthd.conf + echo "modifying plymouthd.conf: Theme=$PLYMOUTH_THEME_NAME" >&2 + # make sure the section and key exist so we can modify them + grep -q "^ *\[Daemon\]" $conf || echo "[Daemon]" >> $conf + grep -q "^ *Theme *=" $conf || echo "Theme=fade-in" >> $conf + sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf + fi + + PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//') + PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}" + PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//') + + if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then + echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2 + exit 1 +diff --git a/src/Makefile.am b/src/Makefile.am +index 95ed019..78f3f78 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -1,52 +1,59 @@ + SUBDIRS = libply libply-splash-core libply-splash-graphics . plugins client + if ENABLE_UPSTART_MONITORING + SUBDIRS += upstart-bridge + endif + AM_CPPFLAGS = -I$(top_srcdir) \ + -I$(srcdir)/libply \ + -I$(srcdir)/libply-splash-core \ + -I$(srcdir) \ ++ -DPLYMOUTH_DRM_ESCROW_DIRECTORY=\"$(libexecdir)/plymouth\" \ + -DPLYMOUTH_LOG_DIRECTORY=\"$(localstatedir)/log\" \ + -DPLYMOUTH_SPOOL_DIRECTORY=\"$(localstatedir)/spool/plymouth\" \ + -DPLYMOUTH_TIME_DIRECTORY=\"$(localstatedir)/lib/plymouth/\" \ + -DPLYMOUTH_LOGO_FILE=\"$(logofile)\" + + plymouthdbindir = $(plymouthdaemondir) + plymouthdbin_PROGRAMS = plymouthd + + plymouthd_CFLAGS = $(PLYMOUTH_CFLAGS) \ + -rdynamic \ + -DPLYMOUTH_PLUGIN_PATH=\"$(PLYMOUTH_PLUGIN_PATH)\" \ + -DPLYMOUTH_THEME_PATH=\"$(PLYMOUTH_THEME_PATH)/\" \ + -DPLYMOUTH_POLICY_DIR=\"$(PLYMOUTH_POLICY_DIR)/\" \ + -DPLYMOUTH_RUNTIME_DIR=\"$(PLYMOUTH_RUNTIME_DIR)\" \ + -DPLYMOUTH_CONF_DIR=\"$(PLYMOUTH_CONF_DIR)/\" \ + -DPLYMOUTH_RUNTIME_THEME_PATH=\"$(PLYMOUTH_RUNTIME_THEME_PATH)/\" + plymouthd_LDADD = $(PLYMOUTH_LIBS) libply/libply.la libply-splash-core/libply-splash-core.la + plymouthd_SOURCES = \ + ply-boot-protocol.h \ + ply-boot-server.h \ + ply-boot-server.c \ + plugins/splash/details/plugin.c \ + main.c + ++escrowdir = $(libexecdir)/plymouth ++escrow_PROGRAMS = plymouthd-drm-escrow ++ ++plymouthd_drm_escrow_LDFLAGS = -all-static ++plymouthd_drm_escrow_SOURCES = plymouthd-drm-escrow.c ++ + plymouthdrundir = $(localstatedir)/run/plymouth + plymouthdspooldir = $(localstatedir)/spool/plymouth + plymouthdtimedir = $(localstatedir)/lib/plymouth + + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = ply-splash-core.pc ply-splash-graphics.pc + + plymouthd_defaultsdir = $(PLYMOUTH_POLICY_DIR) + dist_plymouthd_defaults_DATA = plymouthd.defaults + + plymouthd_confdir = $(PLYMOUTH_CONF_DIR) + dist_plymouthd_conf_DATA = plymouthd.conf + + install-data-hook: + -mkdir -p $(DESTDIR)$(plymouthdrundir) + -mkdir -p $(DESTDIR)$(plymouthdspooldir) + -mkdir -p $(DESTDIR)$(plymouthdtimedir) + + EXTRA_DIST = ply-splash-core.pc.in ply-splash-graphics.pc.in + MAINTAINERCLEANFILES = Makefile.in +diff --git a/src/main.c b/src/main.c +index 8848ad0..8372f2f 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -2181,65 +2181,70 @@ main (int argc, + + if (daemon_handle == NULL) { + ply_error ("plymouthd: cannot daemonize: %m"); + return EX_UNAVAILABLE; + } + } + + if (debug) + debug_buffer = ply_buffer_new (); + + signal (SIGABRT, on_crash); + signal (SIGSEGV, on_crash); + + /* before do anything we need to make sure we have a working + * environment. + */ + if (!initialize_environment (&state)) { + if (errno == 0) { + if (daemon_handle != NULL) + ply_detach_daemon (daemon_handle, 0); + return 0; + } + + ply_error ("plymouthd: could not setup basic operating environment: %m"); + if (daemon_handle != NULL) + ply_detach_daemon (daemon_handle, EX_OSERR); + return EX_OSERR; + } + + /* Make the first byte in argv be '@' so that we can survive systemd's killing +- * spree when going from initrd to /, and so we stay alive all the way until +- * the power is killed at shutdown. ++ * spree when going from initrd to / + * http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons ++ * ++ * If the system is shutting down, we let systemd slay us because otherwise we ++ * may prevent the root fs from getting remounted read-only. + */ +- argv[0][0] = '@'; ++ if (state.mode != PLY_BOOT_SPLASH_MODE_SHUTDOWN && ++ state.mode != PLY_BOOT_SPLASH_MODE_REBOOT) { ++ argv[0][0] = '@'; ++ } + + state.boot_server = start_boot_server (&state); + + if (state.boot_server == NULL) { + ply_trace ("plymouthd is already running"); + + if (daemon_handle != NULL) + ply_detach_daemon (daemon_handle, EX_OK); + return EX_OK; + } + + state.boot_buffer = ply_buffer_new (); + + if (attach_to_session) { + state.should_be_attached = attach_to_session; + if (!attach_to_running_session (&state)) { + ply_trace ("could not redirect console session: %m"); + if (!no_daemon) + ply_detach_daemon (daemon_handle, EX_UNAVAILABLE); + return EX_UNAVAILABLE; + } + } + + state.progress = ply_progress_new (); + state.splash_delay = NAN; + state.device_timeout = NAN; + + ply_progress_load_cache (state.progress, + get_cache_file_for_mode (state.mode)); + +diff --git a/src/plugins/renderers/drm/Makefile.am b/src/plugins/renderers/drm/Makefile.am +index 271b17f..22a819b 100644 +--- a/src/plugins/renderers/drm/Makefile.am ++++ b/src/plugins/renderers/drm/Makefile.am +@@ -1,23 +1,24 @@ + if ENABLE_DRM_RENDERER + AM_CPPFLAGS = -I$(top_srcdir) \ + -I$(srcdir)/../../../libply \ + -I$(srcdir)/../../../libply-splash-core \ + -I$(srcdir)/../../.. \ + -I$(srcdir)/../.. \ + -I$(srcdir)/.. \ +- -I$(srcdir) ++ -I$(srcdir) \ ++ -DPLYMOUTH_DRM_ESCROW_DIRECTORY=\"$(libexecdir)/plymouth\" + + plugindir = $(libdir)/plymouth/renderers + plugin_LTLIBRARIES = drm.la + + drm_la_CFLAGS = $(PLYMOUTH_CFLAGS) $(DRM_CFLAGS) + + drm_la_LDFLAGS = -module -avoid-version -export-dynamic + drm_la_LIBADD = $(PLYMOUTH_LIBS) $(DRM_LIBS) \ + ../../../libply/libply.la \ + ../../../libply-splash-core/libply-splash-core.la + drm_la_SOURCES = $(srcdir)/plugin.c + + endif + + MAINTAINERCLEANFILES = Makefile.in +diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c +index 4dbf8da..38bae36 100644 +--- a/src/plugins/renderers/drm/plugin.c ++++ b/src/plugins/renderers/drm/plugin.c +@@ -131,73 +131,79 @@ typedef struct + bool connected; + bool uses_hw_rotation; + } ply_output_t; + + struct _ply_renderer_backend + { + ply_event_loop_t *loop; + ply_terminal_t *terminal; + + int device_fd; + char *device_name; + drmModeRes *resources; + + ply_renderer_input_source_t input_source; + ply_list_t *heads; + ply_hashtable_t *heads_by_controller_id; + + ply_hashtable_t *output_buffers; + + ply_output_t *outputs; + int outputs_len; + int connected_count; + + int32_t dither_red; + int32_t dither_green; + int32_t dither_blue; + + uint32_t is_active : 1; + uint32_t requires_explicit_flushing : 1; + uint32_t use_preferred_mode : 1; ++ uint32_t watching_for_termination : 1; + + int panel_width; + int panel_height; + ply_pixel_buffer_rotation_t panel_rotation; + int panel_scale; + }; + + ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void); + static bool open_input_source (ply_renderer_backend_t *backend, + ply_renderer_input_source_t *input_source); + static void flush_head (ply_renderer_backend_t *backend, + ply_renderer_head_t *head); + ++static void close_device (ply_renderer_backend_t *backend); ++ ++static void watch_for_termination (ply_renderer_backend_t *backend); ++static void stop_watching_for_termination (ply_renderer_backend_t *backend); ++ + /* A small helper to determine if we should try to keep the current mode + * or pick the best mode ourselves, we keep the current mode only if the + * user specified a specific mode using video= on the commandline. + */ + static bool + should_use_preferred_mode (void) + { + bool use_preferred_mode = true; + + if (ply_kernel_command_line_get_string_after_prefix ("video=")) + use_preferred_mode = false; + + ply_trace ("should_use_preferred_mode: %d", use_preferred_mode); + + return use_preferred_mode; + } + + static bool + ply_renderer_buffer_map (ply_renderer_backend_t *backend, + ply_renderer_buffer_t *buffer) + { + struct drm_mode_map_dumb map_dumb_buffer_request; + void *map_address; + + if (buffer->map_address != MAP_FAILED) { + buffer->map_count++; + return true; + } + + memset (&map_dumb_buffer_request, 0, sizeof(struct drm_mode_map_dumb)); +@@ -918,158 +924,214 @@ static void + destroy_backend (ply_renderer_backend_t *backend) + { + ply_trace ("destroying renderer backend for device %s", backend->device_name); + free_heads (backend); + + free (backend->device_name); + ply_hashtable_free (backend->output_buffers); + ply_hashtable_free (backend->heads_by_controller_id); + + free (backend->outputs); + free (backend); + } + + static void + activate (ply_renderer_backend_t *backend) + { + ply_renderer_head_t *head; + ply_list_node_t *node; + + ply_trace ("taking master and scanning out"); + backend->is_active = true; + + drmSetMaster (backend->device_fd); + node = ply_list_get_first_node (backend->heads); + while (node != NULL) { + head = (ply_renderer_head_t *) ply_list_node_get_data (node); + /* Flush out any pending drawing to the buffer */ + flush_head (backend, head); + node = ply_list_get_next_node (backend->heads, node); + } ++ ++ watch_for_termination (backend); + } + + static void + deactivate (ply_renderer_backend_t *backend) + { + ply_trace ("dropping master"); + drmDropMaster (backend->device_fd); + backend->is_active = false; ++ ++ stop_watching_for_termination (backend); + } + + static void + on_active_vt_changed (ply_renderer_backend_t *backend) + { + if (ply_terminal_is_active (backend->terminal)) { + ply_trace ("activating on vt change"); + activate (backend); + } else { + ply_trace ("deactivating on vt change"); + deactivate (backend); + } + } + + static bool + load_driver (ply_renderer_backend_t *backend) + { + int device_fd; + + ply_trace ("Opening '%s'", backend->device_name); + device_fd = open (backend->device_name, O_RDWR); + + if (device_fd < 0) { + ply_trace ("open failed: %m"); + return false; + } + + backend->device_fd = device_fd; + + drmDropMaster (device_fd); + + return true; + } + + static void + unload_backend (ply_renderer_backend_t *backend) + { + if (backend == NULL) + return; + + ply_trace ("unloading backend"); + + if (backend->device_fd >= 0) { + drmClose (backend->device_fd); + backend->device_fd = -1; + } + + destroy_backend (backend); + backend = NULL; + + } + ++static void ++on_term_signal (ply_renderer_backend_t *backend) ++{ ++ pid_t pid; ++ ++ ply_trace ("got SIGTERM, launching drm escrow to protect splash, and dying"); ++ ++ pid = fork(); ++ ++ if (pid == 0) { ++ const char *argv[] = { PLYMOUTH_DRM_ESCROW_DIRECTORY "/plymouthd-drm-escrow", NULL }; ++ ++ dup (backend->device_fd); ++ execve (argv[0], (char * const *) argv, NULL); ++ ++ ply_trace ("could not launch drm escrow process: %m"); ++ ++ _exit (1); ++ } ++ ++ ++ close_device (backend); ++ ++ exit (0); ++} ++ ++static void ++watch_for_termination (ply_renderer_backend_t *backend) ++{ ++ if (backend->watching_for_termination) ++ return; ++ ++ ply_trace ("watching for termination signal"); ++ ply_event_loop_watch_signal (backend->loop, SIGTERM, (ply_event_handler_t) on_term_signal, backend); ++ backend->watching_for_termination = true; ++} ++ ++static void ++stop_watching_for_termination (ply_renderer_backend_t *backend) ++{ ++ if (!backend->watching_for_termination) ++ return; ++ ++ ply_trace ("stopping watching for termination signal"); ++ ply_event_loop_stop_watching_signal (backend->loop, SIGTERM); ++ backend->watching_for_termination = false; ++} ++ + static bool + open_device (ply_renderer_backend_t *backend) + { + assert (backend != NULL); + assert (backend->device_name != NULL); + + if (!load_driver (backend)) + return false; + + if (backend->terminal == NULL) + return true; + + if (!ply_terminal_open (backend->terminal)) { + ply_trace ("could not open terminal: %m"); + return false; + } + + if (!ply_terminal_is_vt (backend->terminal)) { + ply_trace ("terminal is not a VT"); + ply_terminal_close (backend->terminal); + return false; + } + + ply_terminal_watch_for_active_vt_change (backend->terminal, + (ply_terminal_active_vt_changed_handler_t) + on_active_vt_changed, + backend); + ++ watch_for_termination (backend); ++ + return true; + } + + static void + close_device (ply_renderer_backend_t *backend) + { + ply_trace ("closing device"); + + free_heads (backend); + ++ stop_watching_for_termination (backend); ++ + if (backend->terminal != NULL) { + ply_terminal_stop_watching_for_active_vt_change (backend->terminal, + (ply_terminal_active_vt_changed_handler_t) + on_active_vt_changed, + backend); + } + + unload_backend (backend); + } + + static void + output_get_controller_info (ply_renderer_backend_t *backend, + drmModeConnector *connector, + ply_output_t *output) + { + int i; + drmModeEncoder *encoder; + + assert (backend != NULL); + + output->possible_controllers = 0xffffffff; + + for (i = 0; i < connector->count_encoders; i++) { + encoder = drmModeGetEncoder (backend->device_fd, + connector->encoders[i]); + + if (encoder == NULL) + continue; + + if (encoder->encoder_id == connector->encoder_id && encoder->crtc_id) { +diff --git a/src/plymouthd-drm-escrow.c b/src/plymouthd-drm-escrow.c +new file mode 100644 +index 0000000..9097db9 +--- /dev/null ++++ b/src/plymouthd-drm-escrow.c +@@ -0,0 +1,18 @@ ++#include ++#include ++ ++int ++main(int argc, char **argv) ++{ ++ signal (SIGTERM, SIG_IGN); ++ ++ /* Make the first byte in argv be '@' so that we can survive systemd's killing ++ * spree until the power is killed at shutdown. ++ * http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons ++ */ ++ argv[0][0] = '@'; ++ ++ while (pause()); ++ ++ return 0; ++} +diff --git a/systemd-units/Makefile.am b/systemd-units/Makefile.am +index b1d843b..bfede17 100644 +--- a/systemd-units/Makefile.am ++++ b/systemd-units/Makefile.am +@@ -1,78 +1,88 @@ + systemd_unit_templates = \ + plymouth-switch-root.service.in \ ++ plymouth-switch-root-initramfs.service.in \ + plymouth-start.service.in \ + plymouth-read-write.service.in \ + plymouth-quit.service.in \ + plymouth-quit-wait.service.in \ + plymouth-reboot.service.in \ + plymouth-kexec.service.in \ + plymouth-poweroff.service.in \ + plymouth-halt.service.in \ + systemd-ask-password-plymouth.path.in \ + systemd-ask-password-plymouth.service.in + + if ENABLE_SYSTEMD_INTEGRATION + systemdunitdir=$(SYSTEMD_UNIT_DIR) + systemdunit_DATA = $(systemd_unit_templates:.in=) + + install-data-hook: + $(MKDIR_P) -m 0755 \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants\ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants && \ + rm -f plymouth-start.service plymouth-switch-root.service && \ + $(LN_S) ../plymouth-start.service && \ + $(LN_S) ../plymouth-switch-root.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants && \ + rm -f plymouth-start.service plymouth-read-write.service && \ + $(LN_S) ../plymouth-start.service && \ + $(LN_S) ../plymouth-read-write.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants && \ + rm -f plymouth-quit.service plymouth-quit-wait.service && \ + $(LN_S) ../plymouth-quit.service && \ + $(LN_S) ../plymouth-quit-wait.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants && \ +- rm -f plymouth-reboot.service && \ +- $(LN_S) ../plymouth-reboot.service) ++ rm -f plymouth-reboot.service \ ++ plymouth-switch-root-initramfs.service && \ ++ $(LN_S) ../plymouth-reboot.service && \ ++ $(LN_S) ../plymouth-switch-root-initramfs.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants && \ + rm -f plymouth-kexec.service && \ + $(LN_S) ../plymouth-kexec.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants && \ +- rm -f plymouth-poweroff.service && \ +- $(LN_S) ../plymouth-poweroff.service) ++ rm -f plymouth-poweroff.service \ ++ plymouth-switch-root-initramfs.service && \ ++ $(LN_S) ../plymouth-poweroff.service && \ ++ $(LN_S) ../plymouth-switch-root-initramfs.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants && \ +- rm -f plymouth-halt.service && \ +- $(LN_S) ../plymouth-halt.service) ++ rm -f plymouth-halt.service \ ++ plymouth-switch-root-initramfs.service && \ ++ $(LN_S) ../plymouth-halt.service && \ ++ $(LN_S) ../plymouth-switch-root-initramfs.service) + + uninstall-hook: + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants && \ + rm -f plymouth-start.service plymouth-switch-root.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants && \ + rm -f plymouth-start.service plymouth-read-write.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants && \ + rm -f plymouth-quit.service plymouth-quit-wait.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants && \ +- rm -f plymouth-reboot.service) ++ rm -f plymouth-reboot.service \ ++ plymouth-switch-root-initramfs.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants && \ + rm -f plymouth-kexec.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants && \ +- rm -f plymouth-poweroff.service) ++ rm -f plymouth-poweroff.service \ ++ plymouth-switch-root-initramfs.service) + (cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants && \ +- rm -f plymouth-halt.service) ++ rm -f plymouth-halt.service \ ++ plymouth-switch-root-initramfs.service) + rmdir --ignore-fail-on-non-empty \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants \ + $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants + + endif + + EXTRA_DIST = $(systemd_unit_templates) $(systemdunit_DATA) + DISTCLEANFILES=$(systemdunit_DATA) +diff --git a/systemd-units/plymouth-halt.service.in b/systemd-units/plymouth-halt.service.in +index cb87c1f..00f7eed 100644 +--- a/systemd-units/plymouth-halt.service.in ++++ b/systemd-units/plymouth-halt.service.in +@@ -1,13 +1,14 @@ + [Unit] + Description=Show Plymouth Halt Screen + After=getty@tty1.service display-manager.service plymouth-start.service + Before=systemd-halt.service + DefaultDependencies=no + ConditionKernelCommandLine=!plymouth.enable=0 + ConditionVirtualization=!container + + [Service] + ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=shutdown --attach-to-session + ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash ++KillMode=none + Type=forking + RemainAfterExit=yes +diff --git a/systemd-units/plymouth-poweroff.service.in b/systemd-units/plymouth-poweroff.service.in +index cf05e47..a1f78eb 100644 +--- a/systemd-units/plymouth-poweroff.service.in ++++ b/systemd-units/plymouth-poweroff.service.in +@@ -1,13 +1,14 @@ + [Unit] + Description=Show Plymouth Power Off Screen + After=getty@tty1.service display-manager.service plymouth-start.service + Before=systemd-poweroff.service + DefaultDependencies=no + ConditionKernelCommandLine=!plymouth.enable=0 + ConditionVirtualization=!container + + [Service] + ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=shutdown --attach-to-session + ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash ++KillMode=none + Type=forking + RemainAfterExit=yes +diff --git a/systemd-units/plymouth-reboot.service.in b/systemd-units/plymouth-reboot.service.in +index 3624550..8fff576 100644 +--- a/systemd-units/plymouth-reboot.service.in ++++ b/systemd-units/plymouth-reboot.service.in +@@ -1,13 +1,14 @@ + [Unit] + Description=Show Plymouth Reboot Screen + After=getty@tty1.service display-manager.service plymouth-start.service + Before=systemd-reboot.service + DefaultDependencies=no + ConditionKernelCommandLine=!plymouth.enable=0 + ConditionVirtualization=!container + + [Service] + ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=reboot --attach-to-session + ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash ++KillMode=none + Type=forking + RemainAfterExit=yes +diff --git a/systemd-units/plymouth-switch-root-initramfs.service.in b/systemd-units/plymouth-switch-root-initramfs.service.in +new file mode 100644 +index 0000000..cb20459 +--- /dev/null ++++ b/systemd-units/plymouth-switch-root-initramfs.service.in +@@ -0,0 +1,12 @@ ++[Unit] ++Description=Tell Plymouth To Jump To initramfs ++DefaultDependencies=no ++After=plymouth-halt.service plymouth-reboot.service plymouth-poweroff.service dracut-shutdown.service ++ConditionPathExists=/run/initramfs/bin/sh ++ ++[Service] ++Type=oneshot ++RemainAfterExit=yes ++ExecStart=-@PLYMOUTH_CLIENT_DIR@/plymouth update-root-fs --new-root-dir=/run/initramfs ++Type=oneshot ++RemainAfterExit=yes +-- +2.26.0 + diff --git a/0002-throbgress-update-for-api-change.patch b/0002-throbgress-update-for-api-change.patch new file mode 100644 index 0000000..da67de1 --- /dev/null +++ b/0002-throbgress-update-for-api-change.patch @@ -0,0 +1,142 @@ +From b9faf90fe5939fedfd710e1e8385f4d5c12e1df7 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 15 Jun 2020 10:35:45 -0400 +Subject: [PATCH 2/2] throbgress: update for api change + +--- + src/plugins/splash/throbgress/plugin.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c +index 86be064..68cca70 100644 +--- a/src/plugins/splash/throbgress/plugin.c ++++ b/src/plugins/splash/throbgress/plugin.c +@@ -715,61 +715,61 @@ update_status (ply_boot_splash_plugin_t *plugin, + } + + static void + on_boot_progress (ply_boot_splash_plugin_t *plugin, + double duration, + double percent_done) + { + ply_list_node_t *node; + double total_duration; + + if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES || + plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE || + plugin->mode == PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE) + return; + + total_duration = duration / percent_done; + + /* Fun made-up smoothing function to make the growth asymptotic: + * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */ + percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done); + + node = ply_list_get_first_node (plugin->views); + + while (node != NULL) { + ply_list_node_t *next_node; + view_t *view; + + view = ply_list_node_get_data (node); + next_node = ply_list_get_next_node (plugin->views, node); + +- ply_progress_bar_set_percent_done (view->progress_bar, percent_done); ++ ply_progress_bar_set_fraction_done (view->progress_bar, percent_done); + + node = next_node; + } + } + + static void + hide_splash_screen (ply_boot_splash_plugin_t *plugin, + ply_event_loop_t *loop) + { + assert (plugin != NULL); + + ply_trace ("hiding splash"); + if (plugin->loop != NULL) { + stop_animation (plugin, NULL); + + ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) + detach_from_event_loop, + plugin); + detach_from_event_loop (plugin); + } + + plugin->is_visible = false; + } + + static void + show_password_prompt (ply_boot_splash_plugin_t *plugin, + const char *text, + int number_of_bullets) + { + ply_list_node_t *node; +@@ -920,61 +920,61 @@ display_question (ply_boot_splash_plugin_t *plugin, + show_prompt (plugin, prompt, entry_text); + redraw_views (plugin); + unpause_views (plugin); + } + + static void + display_message (ply_boot_splash_plugin_t *plugin, + const char *message) + { + show_message (plugin, message); + } + + static void + system_update (ply_boot_splash_plugin_t *plugin, + int progress) + { + ply_list_node_t *node; + + if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES && + plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE && + plugin->mode != PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE) + return; + + node = ply_list_get_first_node (plugin->views); + while (node != NULL) { + ply_list_node_t *next_node; + view_t *view; + + view = ply_list_node_get_data (node); + next_node = ply_list_get_next_node (plugin->views, node); +- ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f); ++ ply_progress_bar_set_fraction_done (view->progress_bar, (double) progress / 100.f); + node = next_node; + } + } + + ply_boot_splash_plugin_interface_t * + ply_boot_splash_plugin_get_interface (void) + { + static ply_boot_splash_plugin_interface_t plugin_interface = + { + .create_plugin = create_plugin, + .destroy_plugin = destroy_plugin, + .add_pixel_display = add_pixel_display, + .remove_pixel_display = remove_pixel_display, + .show_splash_screen = show_splash_screen, + .update_status = update_status, + .on_boot_progress = on_boot_progress, + .hide_splash_screen = hide_splash_screen, + .on_root_mounted = on_root_mounted, + .become_idle = become_idle, + .display_normal = display_normal, + .display_password = display_password, + .display_question = display_question, + .display_message = display_message, + .system_update = system_update, + }; + + return &plugin_interface; + } + + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ +-- +2.21.0 + diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/boot-duration b/boot-duration new file mode 100644 index 0000000..7fe728c --- /dev/null +++ b/boot-duration @@ -0,0 +1,39 @@ +0.222:RCkernelparam +0.223:RChostname +0.238:RCmountfs +0.275:RCswap +0.330:microcode_ctl +0.357:cpuspeed +0.365:ip6tables +0.380:iptables +0.385:isdn +0.504:auditd +0.508:restorecond +0.523:rsyslog +0.530:irqbalance +0.533:rpcbind +0.549:nfslock +0.561:mdmonitor +0.563:rpcidmapd +0.578:rpcgssd +0.579:messagebus +0.580:fuse +0.594:netfs +0.600:acpid +0.611:haldaemon +0.660:pcscd +0.691:udev-post +0.703:portreserve +0.712:setroubleshoot +0.749:bluetooth +0.738:sshd +0.763:ntpd +0.807:sendmail +0.876:crond +0.902:kerneloops +0.907:smolt +0.915:atd +0.927:avahi-daemon +0.941:cups +0.983:anacron +0.992:local diff --git a/bootlog b/bootlog new file mode 100644 index 0000000..9be1a64 --- /dev/null +++ b/bootlog @@ -0,0 +1,8 @@ +/var/log/boot.log +{ + missingok + daily + copytruncate + rotate 7 + notifempty +} diff --git a/charge.plymouth b/charge.plymouth new file mode 100644 index 0000000..f53413f --- /dev/null +++ b/charge.plymouth @@ -0,0 +1,13 @@ +[Plymouth Theme] +Name=Charge +Description=A theme that features a stylized 8 and spinner +ModuleName=two-step + +[two-step] +ImageDir=/usr/share/plymouth/themes/charge +HorizontalAlignment=.5 +VerticalAlignment=.75 +Transition=none +TransitionDuration=0.0 +BackgroundStartColor=0x202020 +BackgroundEndColor=0x202020 diff --git a/plymouth-update-initrd b/plymouth-update-initrd new file mode 100755 index 0000000..4ed5709 --- /dev/null +++ b/plymouth-update-initrd @@ -0,0 +1,2 @@ +#!/bin/bash +dracut -f diff --git a/plymouth.spec b/plymouth.spec new file mode 100644 index 0000000..c54d309 --- /dev/null +++ b/plymouth.spec @@ -0,0 +1,1294 @@ +%global plymouthdaemon_execdir %{_sbindir} +%global plymouthclient_execdir %{_bindir} +%global plymouth_libdir %{_libdir} +%global plymouth_initrd_file /boot/initrd-plymouth.img + +%global commit 1e36e303e08ba425fecbcff4dde22c8ee936638c +%global commitdate 20200615 +%global shortcommit %(c=%{commit}; echo ${c:0:7}) + +Summary: Graphical Boot Animation and Logger +Name: plymouth +Version: 0.9.4 +Release: 11.%{commitdate}git%{shortcommit}%{?dist} +License: GPLv2+ +URL: http://www.freedesktop.org/wiki/Software/Plymouth +Group: System Environment/Base + +Source0: https://gitlab.freedesktop.org/plymouth/plymouth/-/archive/%{commit}/%{name}-%{commit}.tar.bz2 +Source1: boot-duration +Source2: charge.plymouth +Source3: plymouth-update-initrd +Source4: bootlog + +Patch10001: 0001-Revert-throbgress-Remove-the-throbgress-plugin.patch +Patch10002: 0002-throbgress-update-for-api-change.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1702764 +Patch20001: ship-label-plugin-in-initrd.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1626342 +Patch30001: 0001-src-die-during-shutdown-with-everything-else.patch + +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libudev) +BuildRequires: kernel-headers +BuildRequires: libpng-devel +BuildRequires: libxslt, docbook-style-xsl +BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pango-devel >= 1.21.0 +BuildRequires: cairo-devel +BuildRequires: gcc libtool git +BuildRequires: gettext-devel +BuildRequires: intltool + +Requires(post): plymouth-scripts +Suggests: logrotate + +%description +Plymouth provides an attractive graphical boot animation in +place of the text messages that normally get shown. Text +messages are instead redirected to a log file for viewing +after boot. + +%package system-theme +Summary: Plymouth default theme +Group: System Environment/Base +Requires: plymouth(system-theme) = %{version}-%{release} + +%description system-theme +This metapackage tracks the current distribution default theme. + +%package core-libs +Summary: Plymouth core libraries +Group: Development/Libraries + +%description core-libs +This package contains the libply and libply-splash-core libraries +used by Plymouth. + +%package graphics-libs +Summary: Plymouth graphics libraries +Group: Development/Libraries +Requires: %{name}-core-libs = %{version}-%{release} +Requires: system-logos + +%description graphics-libs +This package contains the libply-splash-graphics library +used by graphical Plymouth splashes. + +%package devel +Summary: Libraries and headers for writing Plymouth splash plugins +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig + +%description devel +This package contains the libply and libplybootsplash libraries +and headers needed to develop 3rd party splash plugins for Plymouth. + +%package scripts +Summary: Plymouth related scripts +Group: Applications/System +Requires: findutils, coreutils, gzip, cpio, dracut, plymouth + +%description scripts +This package contains scripts that help integrate Plymouth with +the system. + +%package plugin-label +Summary: Plymouth label plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} + +%description plugin-label +This package contains the label control plugin for +Plymouth. It provides the ability to render text on +graphical boot splashes using pango and cairo. + +%package plugin-fade-throbber +Summary: Plymouth "Fade-Throbber" plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} + +%description plugin-fade-throbber +This package contains the "Fade-In" boot splash plugin for +Plymouth. It features a centered image that fades in and out +while other images pulsate around during system boot up. + +%package theme-fade-in +Summary: Plymouth "Fade-In" theme +Group: System Environment/Base +Requires: %{name}-plugin-fade-throbber = %{version}-%{release} +Requires(post): plymouth-scripts + +%description theme-fade-in +This package contains the "Fade-In" boot splash theme for +Plymouth. It features a centered logo that fades in and out +while stars twinkle around the logo during system boot up. + +%package plugin-throbgress +Summary: Plymouth "Throbgress" plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} +Requires: plymouth-plugin-label + +%description plugin-throbgress +This package contains the "throbgress" boot splash plugin for +Plymouth. It features a centered logo and animated spinner that +spins repeatedly while a progress bar advances at the bottom of +the screen. + +%package theme-spinfinity +Summary: Plymouth "Spinfinity" theme +Group: System Environment/Base +Requires: %{name}-plugin-throbgress = %{version}-%{release} +Requires(post): plymouth-scripts + +%description theme-spinfinity +This package contains the "Spinfinity" boot splash theme for +Plymouth. It features a centered logo and animated spinner that +spins in the shape of an infinity sign. + +%package plugin-space-flares +Summary: Plymouth "space-flares" plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} +Requires: plymouth-plugin-label + +%description plugin-space-flares +This package contains the "space-flares" boot splash plugin for +Plymouth. It features a corner image with animated flares. + +%package theme-solar +Summary: Plymouth "Solar" theme +Group: System Environment/Base +Requires: %{name}-plugin-space-flares = %{version}-%{release} +Requires(post): plymouth-scripts + +%description theme-solar +This package contains the "Solar" boot splash theme for +Plymouth. It features a blue flamed sun with animated solar flares. + +%package plugin-two-step +Summary: Plymouth "two-step" plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} +Requires: plymouth-plugin-label + +%description plugin-two-step +This package contains the "two-step" boot splash plugin for +Plymouth. It features a two phased boot process that starts with +a progressing animation synced to boot time and finishes with a +short, fast one-shot animation. + +%package theme-charge +Summary: Plymouth "Charge" plugin +Group: System Environment/Base +Requires: %{name}-plugin-two-step = %{version}-%{release} +Requires(post): plymouth-scripts +Provides: plymouth(system-theme) = %{version}-%{release} +# This is our new default theme, so pull it in from the old default theme +Recommends: %{name}-theme-spinner + +%description theme-charge +This package contains the "charge" boot splash theme for +Plymouth. It was the default theme for Red Hat Enterprise Linux. + +%package plugin-script +Summary: Plymouth "script" plugin +Group: System Environment/Base +Requires: %{name} = %{version}-%{release} +Requires: %{name}-graphics-libs = %{version}-%{release} + +%description plugin-script +This package contains the "script" boot splash plugin for +Plymouth. It features an extensible, scriptable boot splash +language that simplifies the process of designing custom +boot splash themes. + +%package theme-script +Summary: Plymouth "Script" plugin +Group: System Environment/Base +Requires: %{name}-plugin-script = %{version}-%{release} +Requires(post): %{_sbindir}/plymouth-set-default-theme + +%description theme-script +This package contains the "script" boot splash theme for +Plymouth. It it is a simple example theme the uses the "script" +plugin. + +%package theme-spinner +Summary: Plymouth "Spinner" theme +Group: System Environment/Base +Requires: %{name}-plugin-two-step = %{version}-%{release} +Requires(post): plymouth-scripts + +%description theme-spinner +This package contains the "spinner" boot splash theme for +Plymouth. It features a small spinner on a dark background. + +%prep +%autosetup -S git -p1 -n %{name}-%{commit} +autoreconf --force --install --symlink -Wno-portability + +# Change the default theme +sed -i -e 's/spinner/bgrt/g' src/plymouthd.defaults + +%build +%configure --enable-tracing --disable-tests \ + --with-logo=%{_datadir}/pixmaps/system-logo-white.png \ + --with-background-start-color-stop=0x0073B3 \ + --with-background-end-color-stop=0x00457E \ + --with-background-color=0x3391cd \ + --with-runtimedir=/run \ + --disable-gdm-transition \ + --enable-systemd-integration \ + --without-system-root-install \ + --without-rhgb-compat-link +%make_build + +%install +%make_install +%find_lang %{name} +find $RPM_BUILD_ROOT -name '*.la' -delete + +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/plymouth + +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/plymouth +cp $RPM_SOURCE_DIR/boot-duration $RPM_BUILD_ROOT%{_datadir}/plymouth/default-boot-duration +cp -f $RPM_SOURCE_DIR/plymouth-update-initrd $RPM_BUILD_ROOT%{_libexecdir}/plymouth + +# Add charge, our old default +mkdir -p $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge +cp %{SOURCE2} $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge +cp $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/glow/{box,bullet,entry,lock}.png $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge + +# Drop glow, it's not very Fedora-y +rm -rf $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/glow + +# add in the watermark to spinner and bgrt +(cd $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/spinner; ln -sf ../../../pixmaps/fedora-gdm-logo.png watermark.png) + +install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d +install -p -m 644 $RPM_SOURCE_DIR/bootlog $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/bootlog + +%postun +if [ $1 -eq 0 ]; then + rm -f %{_libdir}/plymouth/default.so + rm -f /boot/initrd-plymouth.img +fi + +%post core-libs -p /sbin/ldconfig +%postun core-libs -p /sbin/ldconfig + +%post graphics-libs -p /sbin/ldconfig +%postun graphics-libs -p /sbin/ldconfig + +%postun theme-spinfinity +export LIB=%{_lib} +if [ $1 -eq 0 ]; then + if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "spinfinity" ]; then + %{_sbindir}/plymouth-set-default-theme text + fi +fi + +%postun theme-fade-in +export LIB=%{_lib} +if [ $1 -eq 0 ]; then + if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "fade-in" ]; then + %{_sbindir}/plymouth-set-default-theme --reset + fi +fi + +%triggerin -n %{name}-theme-spinner -- %{name}-theme-charge > 0.9.4-5 +export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/ +# On upgrades replace charge with the new bgrt default +if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "charge" ]; then + %{_sbindir}/plymouth-set-default-theme bgrt +fi + +%postun theme-spinner +export LIB=%{_lib} +if [ $1 -eq 0 ]; then + if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "spinner" ]; then + %{_sbindir}/plymouth-set-default-theme --reset + fi +fi + +%postun theme-solar +export LIB=%{_lib} +if [ $1 -eq 0 ]; then + if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "solar" ]; then + %{_sbindir}/plymouth-set-default-theme --reset + fi +fi + +%postun theme-charge +export LIB=%{_lib} +if [ $1 -eq 0 ]; then + if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "charge" ]; then + %{_sbindir}/plymouth-set-default-theme --reset + fi +fi + +%files -f %{name}.lang +%license COPYING +%doc AUTHORS README +%dir %{_datadir}/plymouth +%dir %{_datadir}/plymouth/themes +%dir %{_datadir}/plymouth/themes/details +%dir %{_datadir}/plymouth/themes/text +%dir %{_libexecdir}/plymouth +%dir %{_localstatedir}/lib/plymouth +%dir %{_libdir}/plymouth/renderers +%dir %{_sysconfdir}/plymouth +%config(noreplace) %{_sysconfdir}/plymouth/plymouthd.conf +%config(noreplace) %{_sysconfdir}/logrotate.d/bootlog +%{plymouthdaemon_execdir}/plymouthd +%{plymouthclient_execdir}/plymouth +%{_bindir}/plymouth +%{_libdir}/plymouth/details.so +%{_libdir}/plymouth/text.so +%{_libdir}/plymouth/tribar.so +%{_datadir}/plymouth/default-boot-duration +%{_datadir}/plymouth/themes/details/details.plymouth +%{_datadir}/plymouth/themes/text/text.plymouth +%{_datadir}/plymouth/themes/tribar/tribar.plymouth +%{_datadir}/plymouth/plymouthd.defaults +%{_localstatedir}/spool/plymouth +%{_mandir}/man?/* +%ghost %{_localstatedir}/lib/plymouth/boot-duration +%{_prefix}/lib/systemd/system/* +%{_prefix}/lib/systemd/system/ + +%files devel +%{plymouth_libdir}/libply.so +%{plymouth_libdir}/libply-splash-core.so +%{_libdir}/libply-boot-client.so +%{_libdir}/libply-splash-graphics.so +%{_libdir}/pkgconfig/ply-splash-core.pc +%{_libdir}/pkgconfig/ply-splash-graphics.pc +%{_libdir}/pkgconfig/ply-boot-client.pc +%{_libdir}/plymouth/renderers/x11* +%{_includedir}/plymouth-1 + +%files core-libs +%{plymouth_libdir}/libply.so.* +%{plymouth_libdir}/libply-splash-core.so.* +%{_libdir}/libply-boot-client.so.* +%dir %{_libdir}/plymouth + +%files graphics-libs +%{_libdir}/plymouth/renderers/drm* +%{_libdir}/plymouth/renderers/frame-buffer* +%{_libdir}/libply-splash-graphics.so.* +%{_libexecdir}/plymouth/plymouthd-drm-escrow + +%files scripts +%{_sbindir}/plymouth-set-default-theme +%{_libexecdir}/plymouth/plymouth-update-initrd +%{_libexecdir}/plymouth/plymouth-generate-initrd +%{_libexecdir}/plymouth/plymouth-populate-initrd + +%files plugin-label +%{_libdir}/plymouth/label.so + +%files plugin-fade-throbber +%{_libdir}/plymouth/fade-throbber.so + +%files theme-fade-in +%dir %{_datadir}/plymouth/themes/fade-in +%{_datadir}/plymouth/themes/fade-in/bullet.png +%{_datadir}/plymouth/themes/fade-in/entry.png +%{_datadir}/plymouth/themes/fade-in/lock.png +%{_datadir}/plymouth/themes/fade-in/star.png +%{_datadir}/plymouth/themes/fade-in/fade-in.plymouth + +%files theme-spinner +# bgrt is a variant of spinner with different settings in its .plymouth file +%{_datadir}/plymouth/themes/bgrt +%{_datadir}/plymouth/themes/spinner + +%files plugin-throbgress +%{_libdir}/plymouth/throbgress.so + +%files theme-spinfinity +%dir %{_datadir}/plymouth/themes/spinfinity +%{_datadir}/plymouth/themes/spinfinity/* + +%files plugin-space-flares +%{_libdir}/plymouth/space-flares.so + +%files theme-solar +%dir %{_datadir}/plymouth/themes/solar +%{_datadir}/plymouth/themes/solar/*.png +%{_datadir}/plymouth/themes/solar/solar.plymouth + +%files plugin-two-step +%{_libdir}/plymouth/two-step.so + +%files theme-charge +%dir %{_datadir}/plymouth/themes/charge +%{_datadir}/plymouth/themes/charge/*.png +%{_datadir}/plymouth/themes/charge/charge.plymouth + +%files plugin-script +%{_libdir}/plymouth/script.so + +%files theme-script +%dir %{_datadir}/plymouth/themes/script +%{_datadir}/plymouth/themes/script/*.png +%{_datadir}/plymouth/themes/script/script.script +%{_datadir}/plymouth/themes/script/script.plymouth + +%files system-theme + +%changelog +* Tue Feb 22 2022 Ray Strode - 0.9.4-11.git1688935 +- Fix typo in --with-runtimedir argument to actually stop using + /var/run and instead use /run instead + Resolves: #2056473 + +* Wed Aug 18 2021 Ray Strode - 0.9.4-10.git1688935 +- Stop using /var/run, just use /run instead + Resolves: #1977446 + +* Thu Jan 28 2021 Ray Strode - 0.9.4-9.git1688935 +- Fix watermark + Resolves: #1914930 + +* Thu Jan 07 2021 Ray Strode - 0.9.4-8.git1688935 +- Add Recommends to pull in plymouth-theme-spinner + Resolves: #1907422 + +* Mon Aug 24 2020 Ray Strode - 0.9.4-5.git1688935 +- Fix typo in poweroff path + Resolves: #1871817 + Related: #1626342 + +* Mon Jul 20 2020 Ray Strode - 0.9.4-4.git1688935 +- Fix one last bit of flicker in the shutdown path + Related: #1626342 + +* Fri Jul 17 2020 Ray Strode - 0.9.4-3.git1688935 +- Die at shutdown with everything else + Resolves: #1626342 + +* Mon Jun 15 2020 Ray Strode - 0.9.4-1.git1688935 +- Rebase to git snapshot + Resolves: #1688935 + +* Tue Dec 10 2019 Ray Strode - 0.9.3-16 +- ship fonts in initrd + Resolves: #1702764 +- fix unapplied patch + +* Fri Sep 06 2019 Ray Strode - 0.9.3-15 +- Fix udev activation race + Resolves: #1661880 + +* Fri Feb 08 2019 Ray Strode - 0.9.3-12 +- Make /var/log/boot.log more modular + Resolves: #1658026 + +* Mon Oct 15 2018 Ray Strode - 0.9.3-11 +- Update description of charge theme (found by rpmdiff + when building previous fix) + Related: #1607020 + +* Mon Oct 15 2018 Ray Strode - 0.9.3-10 +- Coverity leak fixes + Resolves: #1607020 + +* Thu Aug 30 2018 Ray Strode - 0.9.3-9 +- Fix placement of spinner to patch rhel 8 design + Resolves: #1623525 + +* Wed Aug 15 2018 Ray Strode - 0.9.3-8 +- drop initscripts requirement + Resolves: #1610282 + +* Thu Jul 12 2018 Ray Strode - 0.9.3-7 +- Add backports to avoid loading renderers on non-rhgb boot + and to handle 'rhgb' when no renderers available +- Move framebuffer plugin to graphics subpackage + Related: #1600634 + +* Sun Apr 15 2018 Hans de Goede - 0.9.3-6 +- Add patches from upstream git for devices with non upright mounted LCD panels + https://bugs.freedesktop.org/show_bug.cgi?id=104714 + +* Thu Mar 29 2018 Colin Walters - 0.9.3-5 +- Drop default boot duration: https://src.fedoraproject.org/rpms/plymouth/pull-request/1 + +* Fri Feb 09 2018 Igor Gnatenko - 0.9.3-4 +- Escape macros in %%changelog + +* Fri Feb 09 2018 Fedora Release Engineering - 0.9.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Nov 28 2017 Ray Strode - 0.9.3-2 +- Bump ShowDelay back up to 5 + Related: #1518037 + +* Tue Nov 28 2017 Björn Esser - 0.9.3-1 +- Update to 0.9.3 release +- Reduce ShowDelay to 0 (rhbz#1518037) +- Change %%define to %%global + +* Thu Aug 03 2017 Fedora Release Engineering - 0.9.3-0.9.20160620git0e65b86c +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 0.9.3-0.8.20160620git0e65b86c +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.9.3-0.7.20160620git0e65b86c +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Jun 20 2016 Ray Strode - 0.9.3-0.6.git +- Fix color palette issue +- Fix splash at shutdown (if shutdown takes longer than 5 secs) +- Make sure text based splashes update terminal size when fbcon loads + +* Thu Jun 16 2016 Ray Strode - 0.9.3-0.5.git +- really (?) fix password prompt on text plugin + Resolves: #1344141 + +* Tue Jun 14 2016 Ray Strode - 0.9.3-0.4.git +- fix password prompt on text plugin + Resolves: #1344141 + +* Wed Jun 08 2016 Ray Strode - 0.9.3-0.3.git +- new release versioning scheme to be more guideliney + +* Tue Jun 07 2016 Ray Strode - 0.9.3-0.1. +- Update to latest git snapshot +- Fixes use after free + Related: #1342673 + +* Tue May 24 2016 Ray Strode - 0.9.3-0.1.20160524 +- Update to latest git snapshot +- Drop plymouth-generate-initrd scriptlets + +* Thu Feb 04 2016 Fedora Release Engineering - 0.8.9-17.2013.08.14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Sun Nov 15 2015 Ray Strode 0.8.9-16.2013.08.14 +- Fix plymouth-update-initrd script + +* Mon Oct 26 2015 Ray Strode 0.8.9-15.2013.08.15 +- Fix updates with script and spinner themes + Resolves: #1267949 + +* Mon Aug 24 2015 Kalev Lember 0.8.9-13.2013.08.14 +- Fix a typo in Requires + +* Mon Aug 24 2015 Peter Robinson 0.8.9-12.2013.08.14 +- Fix Requires for various libs subpackages + +* Sun Aug 23 2015 Peter Robinson 0.8.9-11.2013.08.14 +- Use %%license +- Cleanup spec +- Move drm render driver to graphics-libs sub package + +* Thu Jun 18 2015 Fedora Release Engineering - 0.8.9-10.2013.08.14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 20 2015 Will Woods 0.8.9-9.2013.08.14 +- Fix theme override using PLYMOUTH_THEME_NAME (#1223344) + +* Sat Feb 21 2015 Till Maas - 0.8.9-8.2013.08.14 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Sun Aug 17 2014 Fedora Release Engineering - 0.8.9-7.2013.08.14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 0.8.9-6.2013.08.14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sat May 31 2014 Peter Robinson 0.8.9-4.2013.08.15 +- Move system-logos dep to graphics-libs (no use on text/serial console minimal installs) + +* Thu Feb 20 2014 Ray Strode 0.8.9-4.2013.08.14 +- Fix splash after change in /sys/class/tty/console/active + +* Thu Oct 31 2013 Ray Strode 0.8.9-3.2013.08.14 +- Don't timeout plymouth quit waiting + Related: #967521 + +* Wed Oct 16 2013 Ray Strode 0.8.9-2.2013.08.14 +- Drop rhgb-client compat link + +* Sun Oct 06 2013 Kalev Lember - 0.8.9-1.2013.08.14 +- Make sure the release number compares higher than the previous builds + +* Wed Aug 14 2013 Ray Strode 0.8.9-0.1.2013.08.14.0 +- Update to snapshot to fix system units + +* Sun Aug 04 2013 Fedora Release Engineering - 0.8.9-0.2014.03.26.0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Mar 26 2013 Ray Strode 0.8.9-0.2013.03.26.0 +- Update to snapshot to fix systemd vconsole issue + +* Thu Feb 21 2013 Peter Robinson 0.8.8-6 +- Merge newer F18 release into rawhide + +* Thu Dec 13 2012 Ray Strode 0.8.8-5 +- Ensure fedup gets right splash screen + Related: #879295 + +* Thu Nov 15 2012 Ray Strode 0.8.8-4 +- Drop set-default-plugin compat script +- Just use upstream update-initrd + +* Fri Nov 02 2012 Ray Strode 0.8.8-3 +- More boot blocking fixes + Related: #870695 + +* Thu Nov 01 2012 Ray Strode 0.8.8-2 +- Fix crash when deactivating multiple times + Related: #870695 + +* Fri Oct 26 2012 Ray Strode 0.8.8-1 +- Latest upstream release +- includes systemd fixes and system update fixes + +* Tue Aug 21 2012 Ray Strode 0.8.7-1 +- Latest upstream release +- includes systemd fixes + +* Tue Aug 21 2012 Dave Airlie 0.8.6.2-1.2012.07.23 +- fix plymouth race at bootup breaking efi/vesa handoff. +- fix version number - its against fedora package policy to have 0.year + +* Mon Jul 23 2012 Ray Strode 0.8.6.2-0.2012.07.23 +- One more crack at #830482 (will probably need additional fixes tomorrow) + +* Mon Jul 23 2012 Tom Callaway - 0.8.6.1-3 +- fix bz704658 (thanks to Ian Pilcher for the patch), resolves issue where spinfinity theme + never goes idle and thus, never exits to gdm + +* Sat Jul 21 2012 Fedora Release Engineering - 0.8.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 10 2012 Ray Strode 0.8.6.1-1 +- Update to 0.8.6.1 since I mucked up 0.8.6 + Resolves: #830482 + +* Mon Jul 09 2012 Ray Strode 0.8.6-1 +- Update to 0.8.6 +- Fixes encrypted fs bug + Resolves: #830482 +- Adds support for offline package updates + +* Mon Jun 25 2012 Adam Jackson 0.8.5.1-3 +- Rebuild without libkms + +* Wed Jun 06 2012 Ray Strode 0.8.5.1-2 +- Add %%{_prefix} to systemd service path + +* Wed Jun 06 2012 Ray Strode 0.8.5.1-1 +- Update to latest release +- Ship systemd service files +- Conflict with old systemd + +* Tue Apr 24 2012 Richard Hughes 0.8.4-0.20120319.3 +- Disable the nouveau driver as I've broken it with the new libdrm ABI + +* Tue Mar 20 2012 Daniel Drake 0.8.4-0.20120319.1 +- Don't try to build against libdrm_intel on non-intel architectures + +* Mon Mar 19 2012 Ray Strode 0.8.4-0.20120319.1 +- Update to latest snapshot + +* Mon Mar 12 2012 Ray Strode 0.8.4-0.20110810.6 +- Don't require libdrm_intel on non intel arches + +* Mon Feb 20 2012 Adam Williamson 0.8.4-0.20110810.5 +- make plymouth-scripts require plymouth (RH #794894) + +* Wed Jan 25 2012 Harald Hoyer 0.8.4-0.20110810.4 +- install everything in /usr + https://fedoraproject.org/wiki/Features/UsrMove + +* Sat Jan 14 2012 Fedora Release Engineering - 0.8.4-0.20110810.3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Dec 15 2011 Ray Strode 0.8.4-0.20110809.3 +- Change spec based on suggestion from Nicolas Chauvet + to fix scriptlet error during livecd creation + Resolves: #666419 + +* Tue Nov 08 2011 Adam Jackson 0.8.4-0.20110822.3 +- Rebuild for libpng 1.5 + +* Fri Sep 02 2011 Ray Strode 0.8.4-0.20110822.2 +- Make plymouth background dark gray at the request of Mo / design + team. + +* Mon Aug 22 2011 Ray Strode 0.8.4-0.20110822.1 +- Update to latest git snapshot +- Reintroduce accidentally dropped spinner theme and systemd integration + +* Tue Aug 09 2011 Ray Strode 0.8.4-0.20110809.1 +- Rebuild + +* Fri Mar 04 2011 Ray Strode 0.8.4-0.1.20110304.1 +- retry reopening tty if we get EIO + Hopefully Resolves: #681167 + +* Fri Feb 18 2011 Ray Strode 0.8.4-0.20110419.1 +- unlock tty when reopening in case it spontaenously goes bonkers + and we need to fix it up + Resolves: #655538 + +* Wed Feb 09 2011 Christopher Aillon 0.8.4-0.20110209.2 +- Fix up obsoletes typo + +* Wed Feb 09 2011 Ray Strode 0.8.4-0.20110209.1 +- Update to latest snapshot + +* Wed Feb 09 2011 Fedora Release Engineering - 0.8.4-0.20101120.4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Feb 04 2011 Ray Strode 0.8.4-0.20101119.4 +- Drop log viewer + +* Sat Jan 29 2011 Ville Skyttä - 0.8.4-0.20101119.3 +- Dir ownership fixes (#645044). + +* Fri Nov 19 2010 Ray Strode 0.8.4-0.20101119.2 +- Fix serial console issue eparis was seeing + +* Fri Nov 19 2010 Ray Strode 0.8.4-0.20101119.1 +- Update to recent snapshot + +* Tue Nov 02 2010 Ray Strode 0.8.4-0.20101002.1 +- Update to recent snapshot + +* Wed Sep 01 2010 Ray Strode 0.8.4-0.20100823.4 +- Add more Requirse + +* Thu Aug 26 2010 Ray Strode 0.8.4-0.20100823.3 +- Add more Requires + +* Thu Aug 26 2010 Ray Strode 0.8.4-0.20100823.2 +- Fix plymouth-update-initrd + It's regressed to the pre-dracut version. This commit fixes that. + +* Mon Aug 23 2010 Ray Strode 0.8.4-0.20100823.1 +- Update to newer pre-release snapshot of 0.8.4 +- Generate separate initrd in /boot + +* Sat Aug 21 2010 Ray Strode 0.8.4-0.20100821.1 +- Update to newer pre-release snapshot of 0.8.4 +- Fix bizarre-o animation during boot up. + +* Fri Jul 23 2010 Ray Strode 0.8.4-0.20100723.1 +- Update to pre-release snapshot of 0.8.4 + +* Thu Jan 14 2010 Ray Strode 0.8.0-0.20100114.2 +- Don't link plymouthd against libpng either + +* Thu Jan 14 2010 Ray Strode 0.8.0-0.20100114.1 +- Make it possible to do a basic plymouth installations without + libpng + +* Thu Jan 07 2010 Ray Strode 0.8.0-0.2009129.2 +- Drop nash dep + +* Tue Dec 22 2009 Dave Airlie 0.8.0-0.2009129.1 +- rebuild for API bump in libdrm + +* Wed Dec 09 2009 Ray Strode 0.8.0-0.2009129 +- Update to latest snapshot + +* Tue Sep 29 2009 Ray Strode 0.8.0-0.2009.10.05 +- Add new x11-renderer plugin from Charlie Brej for debugging + +* Tue Sep 29 2009 Ray Strode 0.8.0-0.2009.29.09 +- Fix escape and ask-for-password + +* Mon Sep 28 2009 Ray Strode 0.8.0-0.2009.28.09 +- Add prerelease of 0.8.0 for multihead support + +* Fri Sep 11 2009 Ray Strode 0.7.1-7 +- Go back to blue charge background (bug 522460) + +* Fri Sep 11 2009 Ray Strode 0.7.1-6 +- Remove duplicate Provides: plymouth(system-theme) + +* Thu Sep 10 2009 Ray Strode 0.7.1-5 +- Fix set_verbose error reported by yaneti. + +* Wed Sep 9 2009 Ray Strode 0.7.1-4 +- Look for inst() in dracut as well as mkinitrd bash source file +- Drop plymouth initrd for now. + +* Fri Aug 28 2009 Ray Strode 0.7.1-3 +- Create plymouth supplementary initrd in post (bug 515589) + +* Tue Aug 25 2009 Ray Strode 0.7.1-2 +- Get plugin path from plymouth instead of trying + to guess. Should fix bug 502667 + +* Tue Aug 25 2009 Ray Strode 0.7.1-1 +- Update to 0.7.1 + +* Mon Aug 24 2009 Adam Jackson 0.7.0-2 +- Set charge bgcolor to black. (#519052) + +* Tue Aug 11 2009 Ray Strode 0.7.0-1 +- Update to 0.7.0 + +* Sun Jul 26 2009 Fedora Release Engineering - 0.7.0-0.2010.05.15.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri May 15 2009 Ray Strode 0.7.0-0.2009.05.15.1 +- Fix spinfinity theme to point to the right image directory + (bug 500994) + +* Thu May 14 2009 Ray Strode 0.7.0-0.2009.05.14.1 +- Update to new snapshot that renames plugins to fix upgrades + somewhat (bug 499940) + +* Fri May 08 2009 Ray Strode 0.7.0-0.2009.05.08.1 +- Add some fixes for shutdown + +* Fri May 08 2009 Ray Strode 0.7.0-0.2009.05.06.4 +- Don't slow down progress updating at the end of boot + +* Thu May 07 2009 Ray Strode 0.7.0-0.2009.05.06.3 +- Change colors to transition better to gdm + +* Wed May 06 2009 Ray Strode 0.7.0-0.2009.05.06.2 +- Make "charge" theme require two-step plugin instead of solar (oops) + +* Wed May 06 2009 Ray Strode 0.7.0-0.2009.05.06.1 +- Update to "plugin-rework" branch from git + +* Wed Apr 08 2009 Jesse Keating - 0.7.0-0.2009.03.10.3 +- Drop the version on system-logos requires for now, causing hell with + other -logos providers not having the same version. + +* Wed Mar 18 2009 Ray Strode 0.7.0-0.2009.03.10.2 +- Destroy terminal on detach (may help with bug 490965) + +* Tue Mar 10 2009 Ray Strode 0.7.0-0.2009.03.10.1 +- Address one more issue with password handling. It wasn't working + well for secondary devices when using the "details" plugin. + +* Mon Mar 9 2009 Ray Strode 0.7.0-0.2009.03.09.1 +- Attempt to address some problems with password handling in the + 0.7.0 snapshots + +* Fri Mar 6 2009 Ray Strode 0.7.0-0.2009.03.06.2 +- Fix set default script + +* Fri Mar 6 2009 Ray Strode 0.7.0-0.2009.03.06.1 +- more scriptlet changes to move from solar to spinfinity + +* Fri Mar 6 2009 Ray Strode 0.7.0-0.2009.03.06 +- Updated to development snapshot +- Guess progress better on second boot of persistent live images +- Drop upstream patches +- swap "solar" and "spinfinity" scriptlet behavior + +* Tue Feb 24 2009 Ray Strode 0.6.0-3 +- Add fix-heap-corruptor patch from master. Problem + spotted by Mr. McCann. + +* Wed Dec 17 2008 Ray Strode 0.6.0-2 +- Add patch from drop-nash branch for jeremy + +* Wed Dec 3 2008 Ray Strode 0.6.0-1 +- Update to 0.6.0 + +* Sat Nov 22 2008 Matthias Clasen 0.6.0-0.2008.11.17.3.1 +- Strip %%name from %%summary + +* Mon Nov 17 2008 Ray Strode 0.6.0-0.2008.11.17.3 +- don't give error about missing default.so +- rework packaging of boot-duration to prevent .rpmnew droppings + (bug 469752) + +* Mon Nov 17 2008 Ray Strode 0.6.0-0.2008.11.17.2 +- Don't tell gdm to transition unless booting into runlevel 3 + (bug 471785) + +* Mon Nov 17 2008 Ray Strode 0.6.0-0.2008.11.17.1 +- Crawl progress bar if boot is way off course (Charlie, bug 471089) + +* Fri Nov 14 2008 Ray Strode 0.6.0-0.2008.11.14.2 +- Don't loop forever when tty returns NUL byte (bug 471498) + +* Fri Nov 14 2008 Ray Strode 0.6.0-0.2008.11.14.1 +- Generate solar background dynamically to reduce ondisk size, and + look better at various resolutions (Charlie, bug 471227) + +* Thu Nov 13 2008 Ray Strode 0.6.0-0.2008.11.12.4 +- Move Obsoletes: plymouth-text-and-details-only to base package + so people who had it installed don't end up solar on upgrade + +* Wed Nov 12 2008 Ray Strode 0.6.0-0.2008.11.12.3 +- Redo packaging to work better with minimal installs + (bug 471314) + +* Wed Nov 12 2008 Ray Strode 0.6.0-0.2008.11.12.2 +- Fix plymouth-set-default-plugin to allow external $LIB + +* Wed Nov 12 2008 Ray Strode 0.6.0-0.2008.11.12.1 +- Fix star image (Charlie, bug 471113) + +* Tue Nov 11 2008 Ray Strode 0.6.0-0.2008.11.11.2 +- Improve solar flares (Charlie) +- redirect tty again on --show-splash +- ignore subsequent --hide-splash calls after the first one +- turn off kernel printks during boot up + +* Tue Nov 11 2008 Ray Strode 0.6.0-0.2008.11.11.1 +- Disconnect from tty when init=/bin/bash (bug 471007) + +* Mon Nov 10 2008 Ray Strode 0.6.0-0.2008.11.10.5 +- Force the right arch when calling plymouth-set-default-plugin + (bug 470732) + +* Mon Nov 10 2008 Ray Strode 0.6.0-0.2008.11.10.4 +- Drop comet (bug 468705) +- make boot-duration config(noreplace) + +* Mon Nov 10 2008 Ray Strode 0.6.0-0.2008.11.10.3 +- Don't abort if no splash when root is mounted +- Actually move patches upstream + +* Mon Nov 10 2008 Ray Strode 0.6.0-0.2008.11.10.1 +- Fix feedback loop with plymouth:debug +- Move patches upstream +- Improve comet animation + +* Sun Nov 9 2008 Ray Strode 0.6.0-0.2008.11.06.4 +- Fix up more-debug patch to not assert with plymouth:nolog + (bug 470569) + +* Fri Nov 7 2008 Ray Strode 0.6.0-0.2008.11.06.3 +- add some more debug spew to help debug a problem jlaska is having + +* Thu Nov 6 2008 Ray Strode 0.6.0-0.2008.11.06.2 +- show details plugin on --hide-splash so people can see why the splash + got hidden. + +* Thu Nov 6 2008 Ray Strode 0.6.0-0.2008.11.06.1 +- Don't exit on plymouth --show-splash after sulogin +- Properly retake console after that --show-splash + +* Wed Nov 5 2008 Ray Strode 0.6.0-0.2008.11.05.1 +- reset colors on quit --retain-splash +- fix off by one in damage calculation for label + +* Tue Nov 4 2008 Ray Strode 0.6.0-0.2008.10.30.5 +- Add a sample boot-duration for livecds and first time boots + (bug 469752) + +* Mon Nov 3 2008 Jeremy Katz - 0.6.0-0.2008.10.30.4 +- Allow pre-setting the default plugin when calling plymouth-populate-initrd + +* Fri Oct 31 2008 Ray Strode 0.6.0-0.2008.10.30.3 +- Add pango minimum version to buildrequires + +* Thu Oct 30 2008 Ray Strode 0.6.0-0.2008.10.30.2 +- Update prompt text colors to be legible on new artwork + +* Thu Oct 30 2008 Ray Strode 0.6.0-0.2008.10.30.1 +- Drop upstreamed patches +- Patch from Charlie to update artwork +- Patch from Charlie to make password screen match animation better + (bug 468899) + +* Thu Oct 30 2008 Ray Strode 0.6.0-0.2008.10.27.8 +- Fix escape at password prompt (bug 467533) + +* Tue Oct 28 2008 Ray Strode 0.6.0-0.2008.10.27.7 +- Don't require /bin/plymouth before it's installed (bug 468925) + +* Tue Oct 28 2008 Ray Strode 0.6.0-0.2008.10.27.6 +- Force raw mode for keyboard input with solar and fade-in + (bug 468880) +- make sure windows get closed on exit + +* Mon Oct 27 2008 Ray Strode 0.6.0-0.2008.10.27.5 +- Make "Solar" lock icon the same as the "Spinfinity" one. + +* Mon Oct 27 2008 Ray Strode 0.6.0-0.2008.10.27.4 +- Make plymouth-libs own /usr/lib/plymouth (bug 458071) + +* Mon Oct 27 2008 Ray Strode 0.6.0-0.2008.10.27.3 +- Default to "Solar" instead of "Spinfinity" + +* Mon Oct 27 2008 Ray Strode 0.6.0-0.2008.10.27.2 +- Don't set plymouth default plugin to text in %%post + +* Mon Oct 27 2008 Ray Strode 0.6.0-0.2008.10.27.1 +- Add Charlie patch to dither in lower color modes (bug 468276) + +* Sun Oct 26 2008 Jeremy Katz - 0.6.0-0.2008.10.24.2 +- More requires changing to avoid loops (#467356) + +* Fri Oct 24 2008 Ray Strode 0.6.0-0.2008.10.24.1 +- Add updated progress bar for solar plugin from Charlie +- Log plymouth:debug output to boot log +- Ignore sigpipe signals in daemon + +* Thu Oct 23 2008 Ray Strode 0.6.0-0.2008.10.23.2 +- Bump so name of libply to hopefully force plymouth to get installed + before kernel (or at least make plymouth-libs and plymouth get installed + on the same side of kernel in the transaction). + +* Thu Oct 23 2008 Ray Strode 0.6.0-0.2008.10.23.1 +- Add patch from Charlie to align progress bar to milestones during boot up +- force tty to be sane on exit (bug 467207) + +* Thu Oct 23 2008 Ray Strode 0.6.0-0.2008.10.21.3 +- add empty files section for text-and-details-only so the subpackage + shows up. + +* Wed Oct 22 2008 Ray Strode 0.6.0-0.2008.10.21.2 +- add text-and-details-only subpackage so davej can uninstall + spinfinity, pango, cairo etc from his router. + +* Tue Oct 21 2008 Ray Strode 0.6.0-0.2008.10.21.1 +- Minor event loop changes +- drop upstream patches +- Charlie Brej fix for progress bar resetting when escape gets pressed + +* Tue Oct 21 2008 Ray Strode 0.6.0-0.2008.10.17.4 +- Don't make plymouth-libs require plymouth (more fun with 467356) + +* Mon Oct 20 2008 Ray Strode 0.6.0-0.2008.10.17.3 +- Add initscripts requires (bug 461322) + +* Mon Oct 20 2008 Ray Strode 0.6.0-0.2008.10.17.2 +- Put tty1 back in "cooked" mode when going into runlevel 3 + (bug 467207) + +* Fri Oct 17 2008 Ray Strode 0.6.0-0.2008.10.17.1 +- Clear screen in details plugin when it's done +- Make plymouth-update-initrd a small wrapper around mkinitrd instead + of the broken monstrosity it was before. + +* Fri Oct 17 2008 Ray Strode 0.6.0-0.2008.10.15.3 +- Move plymouth-set-default-plugin, plymouth-update-initrd, and + plymouth-populate-initrd to plymouth-scripts subpackage + (the last fix didn't actually help with bug 467356) + +* Fri Oct 17 2008 Ray Strode 0.6.0-0.2008.10.15.2 +- Move plymouth-set-default-plugin to -libs (might help with bug 467356) +- Fix up requires, provides and postun scripts + +* Wed Oct 15 2008 Ray Strode 0.6.0-0.2008.10.15.1 +- Don't free windows on --hide-splash (fix from Jeremy) + +* Tue Oct 14 2008 Ray Strode 0.6.0-0.2008.10.14.1 +- Solar fixes from Charlie Brej +- Better cpu usage from Charlie + +* Fri Oct 10 2008 Ray Strode 0.6.0-0.2008.10.08.2 +- Add Requires(post): nash (bug 466500) + +* Wed Oct 08 2008 Ray Strode 0.6.0-0.2008.10.08.1 +- Rework how "console=" args done again, to hopefully fix + bug 460565 + +* Mon Oct 06 2008 Ray Strode 0.6.0-0.2008.10.06.1 +- Add "Solar" plugin from Charles Brej +- Move things around so computers with separate /usr boot + (hopefully this won't break things, but it probably will) +- Make GDM show up on vt1 for all plugins + +* Tue Sep 30 2008 Jeremy Katz 0.6.0-0.2008.09.25.2 +- Remove mkinitrd requires to break the dep loop and ensure things + get installed in the right order + +* Thu Sep 25 2008 Ray Strode 0.6.0-0.2008.09.25.1 +- Add new snapshot to fold in Will Woods progress bar, and + move ajax's splash upstream, putting the old text splash + in a "pulser" subpackage + +* Tue Sep 23 2008 Ray Strode 0.6.0-0.2008.09.23.1 +- Last snapshot was broken + +* Mon Sep 22 2008 Ray Strode 0.6.0-0.2008.09.22.1 +- Update to latest snapshot to get better transition support + +* Fri Sep 19 2008 Ray Strode 0.6.0-0.2008.09.15.2 +- Turn on gdm trigger for transition + +* Mon Sep 15 2008 Ray Strode 0.6.0-0.2008.09.15.1 +- add quit command with --retain-splash option to client + +* Wed Sep 10 2008 Ray Strode 0.6.0-0.2008.09.10.1 +- Fix text rendering for certain machines + +* Mon Sep 8 2008 Ray Strode 0.6.0-0.2008.09.05.4 +- More serial console fixes (bug 460565 again) + +* Fri Sep 5 2008 Bill Nottingham 0.6.0-0.2008.09.05.3 +- make the text plugin use the system release info rather than a hardcoded 'Fedora 10' + +* Fri Sep 5 2008 Ray Strode 0.6.0-0.2008.09.05.2 +- Try to support multiple serial consoles better + (bug 460565) + +* Fri Sep 5 2008 Ray Strode 0.6.0-0.2008.09.05.1 +- Fix some confusion with password handling in details plugin + +* Wed Aug 27 2008 Ray Strode 0.6.0-0.2008.08.27.1 +- Fix another crasher for users with encrypted disks (this time in + the text plugin, not the client) + +* Wed Aug 27 2008 Ray Strode 0.6.0-0.2008.08.27 +- Update to latest snapshot +- Add the ability to show text prompts in graphical plugin +- Fix crasher for users with encrypted disks + +* Fri Aug 22 2008 Ray Strode 0.6.0-0.2008.08.22 +- Update to latest snapshot + +* Wed Aug 13 2008 Ray Strode 0.5.0-20.2008.08.13 +- Update previous patch to remove some assertions + +* Wed Aug 13 2008 Ray Strode 0.5.0-19.2008.08.13 +- add a patch that may help serial console users + +* Wed Aug 13 2008 Ray Strode 0.5.0-18.2008.08.13 +- add spool directory to file list + +* Wed Aug 13 2008 Ray Strode 0.5.0-17.2008.08.13 +- Make plymouth-gdm-hooks require plymouth-utils + +* Wed Aug 13 2008 Ray Strode 0.5.0-16.2008.08.13 +- Add a boot failure viewer to login screen (written by Matthias) + +* Tue Aug 12 2008 Adam Jackson 0.5.0-15.2008.08.08 +- plymouth-0.5.0-textbar-hotness.patch: Change the text plugin to a slightly + more traditional progress bar, to maintain the illusion of progress better + than the eternally oscillating cylon. Note: still incomplete. + +* Fri Aug 8 2008 Ray Strode - 0.5.0-14.2008.08.08 +- Don't require a modifiable text color map (may fix serial consoles) + +* Thu Aug 7 2008 Ray Strode - 0.5.0-13.2008.08.07 +- Update to new snapshot which when combined with a new mkinitrd should + make unlocking encrypted root partitions work again + +* Wed Aug 6 2008 Ray Strode - 0.5.0-12.2008.08.06 +- Update to new snapshot which fixes some assertion failures in the + client code + +* Wed Aug 6 2008 Ray Strode - 0.5.0-11.2008.08.01 +- Add Requires(post): plymouth to plugins so they get plymouth-set-default-plugin (bug 458071) + +* Tue Aug 5 2008 Ray Strode - 0.5.0-10.2008.08.01 +- Add plymouth dirs to file list (bug 457871) + +* Fri Aug 1 2008 Ray Strode - 0.5.0-9.2008.08.01 +- new plymout-populate-initrd features don't work with the set -e at the + top of it. + +* Thu Jul 31 2008 Ray Strode - 0.5.0-8.2008.08.01 +- Update to another snapshot to actually get new + plymouth-populate-initrd features + +* Thu Jul 31 2008 Ray Strode - 0.5.0-8.2008.07.31 +- Update to snapshot to get new plymouth-populate-initrd features +- Make removing rhgb use details plugin instead of exiting + +* Thu Jul 31 2008 Peter Jones - 0.5.0-7 +- Make it a mkinitrd requires instead of a nash requires (that will + still pull in nash, but we need mkinitrd for newer plymouth-populate-initrd) + +* Wed Jul 30 2008 Ray Strode - 0.5.0-6 +- Add nash requires + +* Wed Jul 9 2008 Ray Strode - 0.5.0-5 +- Use a new heuristic for finding libdir, since the old + one falls over on ia64 + +* Wed Jul 9 2008 Ray Strode - 0.5.0-4 +- add ctrl-r to rotate text color palette back to stock values + +* Tue Jul 8 2008 Ray Strode - 0.5.0-3 +- Fix populate script on ppc (bug 454353) + +* Tue Jul 1 2008 Ray Strode - 0.5.0-2 +- Pull in spinfinity by default. This whole "figure out + which plugin to use" set of scripts and scriptlets + needs work. We need to separate distro default from + user choice. + +* Tue Jul 1 2008 Ray Strode - 0.5.0-1 +- Add new client "ask-for-password" command which feeds + the user input to a program instead of standard output, + and loops when the program returns non-zero exit status. + +* Thu Jun 26 2008 Ray Strode - 0.4.5-1 +- Update to version 0.4.5 +- Make text plugin blue and less 80s + +* Wed Jun 25 2008 Ray Strode - 0.4.0-4 +- Make "Password: " show up correctly in text plugin + +* Wed Jun 25 2008 Ray Strode - 0.4.0-3 +- Require elfutils (bug 452797) + +* Sun Jun 22 2008 Ray Strode - 0.4.0-2 +- Make plymouth-set-default-plugin --reset choose the latest + installed plugin, not the earliest + +* Sun Jun 22 2008 Ray Strode - 0.4.0-1 +- Update to version 0.4.0 +- Only run if rhgb is on kernel command line +- Make text plugin more animated + +* Mon Jun 16 2008 Ray Strode - 0.3.2-2 +- dont go back to text mode on exit + +* Mon Jun 16 2008 Ray Strode - 0.3.2-1 +- Update to version 0.3.2 +- show gradient in spinfinity plugin +- Drop fade out in spinfinity plugin +- fix throbber placement +- rename graphical.so to default.so + +* Thu Jun 12 2008 Ray Strode - 0.3.1-3 +- scriplet should be preun, not postun + +* Thu Jun 12 2008 Ray Strode - 0.3.1-2 +- Fix postun scriptlet + +* Thu Jun 12 2008 Ray Strode - 0.3.1-1 +- Update to version 0.3.1 +- Don't ship generated initrd scripts in tarball + +* Thu Jun 12 2008 Ray Strode - 0.3.0-1 +- Update to version 0.3.0 +- Better plugin handling +- Better integration with mkinitrd (pending mkinitrd changes) +- random bug fixes + +* Mon Jun 9 2008 Ray Strode - 0.2.0-1 +- Update to version 0.2.0 +- Integrate more tightly with nash (pending nash changes) +- ship libs for out of tree splash plugins +- gradient support +- random bug fixes + +* Fri May 30 2008 Ray Strode - 0.1.0-1 +- Initial import, version 0.1.0 diff --git a/ship-label-plugin-in-initrd.patch b/ship-label-plugin-in-initrd.patch new file mode 100644 index 0000000..55581ed --- /dev/null +++ b/ship-label-plugin-in-initrd.patch @@ -0,0 +1,154 @@ +From f72cdd6969c483d7811e5684fa3143deff55a0c7 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 17 Jun 2019 13:54:42 -0400 +Subject: [PATCH] populate-initrd: ship label plugin + +This gives us font rendering at early boot. +--- + scripts/plymouth-populate-initrd.in | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in +index 616ecc4..60fd063 100755 +--- a/scripts/plymouth-populate-initrd.in ++++ b/scripts/plymouth-populate-initrd.in +@@ -1,55 +1,56 @@ + #!/bin/bash + # + # inst bits ruthlessly and viciously stolen from dracut + + [ -z "$DESTDIR" ] || exit 0 + + # For running on a (cross-compiled) sysroot, the following + # settings are needed: + # PLYMOUTH_SYSROOT - the sysroot directory + # PLYMOUTH_LDD - an optional ldd command that works on foreign binaries + # PLYMOUTH_LDD_PATH - optional PATH ldd is run with + + [ -z "$PLYMOUTH_LDD" ] && PLYMOUTH_LDD="ldd" + [ -z "$PLYMOUTH_LDD_PATH" ] && PLYMOUTH_LDD_PATH="$PATH" + [ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@" + [ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@" + [ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)" + [ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@PLYMOUTH_LOGO_FILE@" + [ -n "$PLYMOUTH_THEME_NAME" ] && THEME_OVERRIDE=1 + [ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme) + [ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@" + [ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@" + [ -z "$PLYMOUTH_DAEMON_PATH" ] && PLYMOUTH_DAEMON_PATH="@PLYMOUTH_DAEMON_DIR@/plymouthd" + [ -z "$PLYMOUTH_CLIENT_PATH" ] && PLYMOUTH_CLIENT_PATH="@PLYMOUTH_CLIENT_DIR@/plymouth" + [ -z "$SYSTEMD_UNIT_DIR" ] && SYSTEMD_UNIT_DIR="@SYSTEMD_UNIT_DIR@" ++[ -z "$SUPPORTED_LANGUAGES" ] && SUPPORTED_LANGUAGES="pt fr de it ru es en zh ja ko zh as bn gu hi kn ml mr or pa ta te" + + # Generic substring function. If $2 is in $1, return 0. + strstr() { [ "${1#*$2*}" != "$1" ]; } + + ddebug() { + [ "$verbose" = "true" ] && echo "$@" + } + + # normalize_path + # Prints the normalized path, where it removes any duplicated + # and trailing slashes. + # Example: + # $ normalize_path ///test/test// + # /test/test + normalize_path() { + shopt -q -s extglob + set -- "${1//+(\/)//}" + shopt -q -u extglob + echo "${1%/}" + } + + # convert_abs_rel + # Prints the relative path, when creating a symlink to from . + # Example: + # $ convert_abs_rel /usr/bin/test /bin/test-2 + # ../../bin/test-2 + # $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test + convert_abs_rel() { + local __current __absolute __abssize __cursize __newpath + local -i __i __level +@@ -434,59 +435,77 @@ if [ $THEME_OVERRIDE ]; then + conf=$INITRDDIR/${PLYMOUTH_CONFDIR}/plymouthd.conf + echo "modifying plymouthd.conf: Theme=$PLYMOUTH_THEME_NAME" >&2 + # make sure the section and key exist so we can modify them + grep -q "^ *\[Daemon\]" $conf || echo "[Daemon]" >> $conf + grep -q "^ *Theme *=" $conf || echo "Theme=fade-in" >> $conf + sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf + fi + + PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//') + PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}" + PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//') + + if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then + echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2 + exit 1 + fi + + inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR + + [ -f "${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR + inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR + + if [ -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}" ]; then + inst_recur "${PLYMOUTH_THEME_DIR}" + fi + + if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_IMAGE_DIR}" ]; then + inst_recur "${PLYMOUTH_IMAGE_DIR}" + fi + +-if [ -L ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then +- cp -a ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes ++fonts="" ++needs_graphics="$(find ${INITRDDIR} -name 'libply-splash-graphics.so*' -print -quit | grep -q libply-splash-graphics.so && echo -n 1)" ++ ++if [ -n "$needs_graphics" ]; then ++ for lang in $SUPPORTED_LANGUAGES; do ++ font=$(fc-match "":lang="$lang" file | awk -F= '{ print $2}') ++ echo $fonts | grep -q "$font" && continue ++ fonts="$fonts $font" ++ done ++ ++ if [ -n "$fonts" ]; then ++ inst ${PLYMOUTH_PLUGIN_PATH}/label.so $INITRDDIR ++ for font in $fonts; do ++ inst $font $INITRDDIR ++ done ++ fi ++fi ++ ++if [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then ++ cp -a ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes + fi + + if [ -n "$SYSTEMD_UNIT_DIR" -a -d "${PLYMOUTH_SYSROOT}$SYSTEMD_UNIT_DIR" ]; then + inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.path $INITRDDIR + inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.service $INITRDDIR + + inst $SYSTEMD_UNIT_DIR/plymouth-switch-root.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-start.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-quit.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-quit-wait.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-reboot.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-kexec.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-poweroff.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/plymouth-halt.service $INITRDDIR + + inst $SYSTEMD_UNIT_DIR/initrd-switch-root.target.wants/plymouth-switch-root.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/initrd-switch-root.target.wants/plymouth-start.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/sysinit.target.wants/plymouth-start.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/multi-user.target.wants/plymouth-quit.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/multi-user.target.wants/plymouth-quit-wait.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/reboot.target.wants/plymouth-reboot.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/kexec.target.wants/plymouth-kexec.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/poweroff.target.wants/plymouth-poweroff.service $INITRDDIR + inst $SYSTEMD_UNIT_DIR/halt.target.wants/plymouth-halt.service $INITRDDIR + fi + + # vim:ts=8:sw=4:sts=4:et +-- +2.21.0 + diff --git a/sources b/sources new file mode 100644 index 0000000..083f6b4 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (plymouth-1e36e303e08ba425fecbcff4dde22c8ee936638c.tar.bz2) = 6e070be1377303038f3b0224661b2381d0b850cce6dcb187b092fd0e69b9b5706d373db63fe960755b66afdaa3c8961f1ab3ac33ff018ab3debceda940dc885d