Strict Standards: Declaration of Doku_Renderer_metadata::table_open() should be compatible with Doku_Renderer::table_open($maxcols = NULL, $numrows = NULL, $pos = NULL) in /home/tinycore/wiki.tinycorelinux.net/inc/parser/metadata.php on line 24

Strict Standards: Declaration of Doku_Renderer_metadata::table_close() should be compatible with Doku_Renderer::table_close($pos = NULL) in /home/tinycore/wiki.tinycorelinux.net/inc/parser/metadata.php on line 24

Warning: Cannot modify header information - headers already sent by (output started at /home/tinycore/wiki.tinycorelinux.net/inc/parser/metadata.php:24) in /home/tinycore/wiki.tinycorelinux.net/inc/actions.php on line 180
wiki:boot_splash - Tiny Core Linux Wiki

Welcome to the Tiny Core Linux Wiki at tinycorelinux.net!

Plymouth boot splash Background and Assumptions

Plymouth is a boot splash application from Freedesktop.org. It is the default splash mechanism for several more common Linux distributions. The common feature of these other distributions that TinyCore does not have is that all the distribution's programs and libraries are available once the file systems are mounted, and plymouth assumes that this is the case. Following this assumptions, it also comes with tools for changing the theme by rebuilding the base initrd of the distribution in which it is installed. Since these assumptions don't apply to TinyCore, we have to do a few things differently. It also means that a fair amount of the support code that comes with plymouth isn't needed in TinyCore, so that helps keep the size down.

The scant documentation that comes with plymouth warns that it is hard to work with, and that is true. Also, comments in the code are few and far between.

Plymouth has several ways that it can display graphics. One of these, using the frame buffer, is easiest for TinyCore as it is compilied into the kernel. These instructions will target this method, as it requires the least effort. For systems running in virtual machines or without kernel supported graphics, this should work fine. If you have Intel or Radeon graphics that is supported using DRM, additional steps are required. If you are using the frame buffer mode and kernel graphics modules load during the boot process, the graphics may become distorted. This is the case with Intel i915 graphics; others have not been tested.

The following steps are meant to be informative so as to explain and describe what is in the plymouth-initrd.gz file, and to be a basis for further work and experimentation. It should be possible to copy/paste the following code segments to build the plymouth-initrd.gz in a few minutes (not including required extension load time). Alternatively, if you have TinyCore version 4.7.2 or later you can download the 32-bit version of plymouth-initrd.gz and skip to the installation step at the end. 64-bit has not been tested.

Adding a Boot Splash

This article assumes the user is comfortable at the command line. Using these instructions, the user will:

  • create temporary files and directories
  • output the final files to a temp directory
  • compile applications from source

Required:

  1. compiletc
  2. gtk2-dev
  3. libtool-dev
  4. automake
  5. Xlibs
  6. ImageMagick

Abbreviated steps

  1. Compile plymouth
  2. Create and populate the plymouth initrd directory
  3. Create Theme
  4. Update extlinux.conf | syslinux.cfg | pxelinux.cfg

Compile Plymouth

Change to the root of your development directory, which should be persistent. Create a directory to use as the plymouth initrd source directory:

mkdir plymouth-initrd

Create the following script as compile-plymouth.sh and make it executable:

cat >compile-plymouth.sh <<EOF
#/bin/sh
#
./autogen.sh \
  --bindir=/bin \
  --sbindir=/sbin \
  --libexecdir=/usr/libexec \
  --sysconfdir=/etc \
  --sharedstatedir=/var \
  --localstatedir=/var \
  --libdir=/lib \
  --includedir=/usr/include \
  --datarootdir=/usr/share \
  --disable-pango \
  --enable-gtk \
  --enable-libdrm_intel \
  --enable-libdrm_radeon \
  --disable-libdrm_nouveau \
  --enable-libkms \
  --enable-drm \
  --enable-tracing \
  --enable-gdm-transition \
  --disable-upstart-monitoring \
  --disable-systemd-integration \
  --with-system-root-install \
  --without-rhgb-compat-link \
  --without-gdm-autostart-file \
  --with-logo=/usr/share/plymouth/themes/TinyCore/header-image.png \
  --with-background-color=0x7f7f7f \
  --with-background-start-color-stop=0x303030 \
  --with-background-end-color-stop=0xcfcfcf
EOF
chmod a+x compile-plymouth.sh

The installation will not be persistent, so you will need to copy the following files into a new initrd source directory. Create plymouth-initrd-files.lst in the current directory from the following list:

cat >plymouth-initrd-files.lst <<EOF
/etc
/etc/init.d
/etc/init.d/rcS
/etc/plymouth
/bin
/bin/plymouth
/lib
/lib/libply.so.2.1.0
/lib/libply.so.2
/lib/libply.so
/lib/libply-splash-core.so.2.1.0
/lib/libply-splash-core.so.2
/lib/libply-splash-core.so
/lib/libply-boot-client.so.2.1.0
/lib/libply-boot-client.so.2
/lib/libply-boot-client.so
/lib/libply-splash-graphics.so.2
/lib/libply-splash-graphics.so.2.1.0
/lib/libply-splash-graphics.so
/lib/plymouth
/lib/plymouth/fade-throbber.so
/lib/plymouth/details.so
/lib/plymouth/script.so
/lib/plymouth/throbgress.so
/lib/plymouth/text.so
/lib/plymouth/two-step.so
/lib/plymouth/space-flares.so
/lib/plymouth/renderers
/lib/plymouth/renderers/x11.so
/lib/plymouth/renderers/drm.so
/lib/plymouth/renderers/frame-buffer.so
/var
/var/run
/var/run/plymouth
/var/lib
/var/lib/plymouth
/var/spool
/var/spool/plymouth
/sbin
/sbin/plymouthd
/usr
/usr/lib
EOF

Unpack the plymouth source code and cd into the new directory (plymouth-0.8.8). Execute the above script from within the source code directory. From this point on, most of the commands will require su capability, so it will be easier if we go ahead and do it now. The rest of this wiki will assume that this is the case. If not, you will need to insert a sudo in most of the command steps:

tar xfz plymouth-0.8.8.tar.gz
sudo sh
export PLYROOT=$(pwd)
cd plymouth-0.8.8
../compile-plymouth.sh

If there are no errors, make and install plymouth:

make install

Create and Populate the plymouth initrd directory

Cd into the plymouth-initrd directory and copy the new files into it:

cd $PLYROOT/plymouth-initrd
cat ../plymouth-initrd-files.lst | cpio -o -H newc | cpio -i -H newc -d

Strip the executables to cut the size down further:

find . | xargs file | grep "executable" | grep ELF | grep "not stripped" | cut -f 1 -d : | xargs strip --strip-unneeded
find . | xargs file | grep "shared object" | grep ELF | grep "not stripped" | cut -f 1 -d : | xargs strip --strip-debug

The following step depends on your current version of TinyCore. For versions 4.7.2 and later:

cd $PLYROOT/plymouth-initrd/etc/init.d
vi rcS

Add the following two lines to rcS between the mount commands and the tc-config script:

/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/var/log/plymouth/plymouthd.pid >/dev/null 2>&1
/bin/plymouth --show-splash >/dev/null 2>&1

For versions prior to 4.7.2:

cd $PLYROOT/plymouth-initrd/etc/init.d
cp /etc/init.d/tc-config .
vi tc-config

Remove or comment out the first echo command from tc-config (before the mount commands), and add the same two lines from above between the mount commands and the big case statement near the beginning of the script.

Beginning with TinyCore 4.7.2, rcS is split from tc-config to accomodate boot splash code. Because the mount commands in rcS will not change between TinyCore versions, we can make our changes to this file and not worry about having to migrate changes to tc-config as TinyCore continues to improve.

To support graphics, plymouth assumes that libpng12 will be available, so we will have to add it to the initrd. Normally this is supplied by Xlibs, but it won't be available at boot so we'll have to copy it into the initrd. Cd to the base plymouth initrd source directory, the execute the following:

cd $PLYROOT/plymouth-initrd/usr/lib
cp /tmp/tcloop/Xlibs/usr/lib/libpng12.so.0.46.0 .
ln -s libpng12.so.0.46.0 libpng12.so.0
ln -s libpng12.so.0.46.0 libpng12.so

Create Theme

To create a default theme we will use the TinyCore desktop logo, and create a set of spinner graphics for the startup progress. From the base plymouth initrd source directory:

mkdir -p $PLYROOT/plymouth-initrd/usr/share/plymouth/themes/TinyCore
cd $PLYROOT/plymouth-initrd/usr/share/plymouth/themes/TinyCore
cp /tmp/tcloop/Xlibs/usr/local/share/pixmaps/logo.png header-image.png
# adjust the following values to change the size and thickness of the spinner graphics
OD=51
ID=49
CD=24
CW=3
for a in $(seq -w 1 36)
  do convert -size ${OD}x${OD} gradient:none-white -rotate 90 +distort polar $(($OD/2)) +repage -transverse -rotate $((${a#0}*10)) \
  \( -size ${ID}x${ID} xc:none -fill none -stroke white -strokewidth $(($CW*2)) -draw "circle $CD,$CD $CD,$CW" \) \
  -gravity center -compose src_out -composite +repage -crop ${OD}x${OD}+0+0 animation-00$a.png
done
# create links so the throbber graphics will be the same as the animation graphics
for a in $(seq -w 1 36)
  do ln -s animation-00$a.png throbber-00$a.png
done
# create empty png files for the other required pieces that we won't use
for a in box bullet entry lock
  do convert -size 1x1 xc:none $a.png
done
# create a theme configuration file
cat >TinyCore.plymouth <<EOF
[Plymouth Theme]
Name=TinyCore
Description=TinyCore Theme
ModuleName=two-step

[two-step]
ImageDir=/usr/share/plymouth/themes/TinyCore
HorizontalAlignment=.5
VerticalAlignment=.5
Transition=none
TransitionDuration=0.0
BackgroundStartColor=0x3b3738
BackgroundEndColor=0x3b3738
EOF

Finally, we need to tell plymouth about the default theme. Return to the base plymouth initrd source directory:

cd $PLYROOT/plymouth-initrd/etc/plymouth
cat >plymouthd.conf <<EOF
# plymouth theme
[Daemon]
Theme=TinyCore
EOF

Create the plymouth initrd

To create the plymouth initrd archive, from the base of the plymouth initrd source directory:

cd $PLYROOT/plymouth-initrd
find | cpio -o -H newc | gzip -c >../plymouth-initrd.gz

Install the plymouth initrd

Copy the new plymouth-initrd.gz file to the same directory as core.gz on your system. Edit the boot configuration file for your system, adding plymouth-initrd.gz after core.gz in the APPEND (or INITRD), separated by a comma and no spaces. Also add the keywords splash and logo.nologo in the APPEND line. If not already done, set the vga parameter to one of the VESA (non-text) modes. The VGA being set to a VESA mode is especially needed for systems which do not have Kernel Mode Setting (KMS) drivers available and are still using legacy Framebuffer (fb) drivers instead, with vga=0x318 (which translates to 1024x768x32bit) being a commonly used parameter for systems without KMS drivers. (To find out if KMS is loaded, check your Xorg log for 'modesetting' and to find out the VESA modes available in your system use 'vga=askme' in your boot configuration.)

After bootup, the plymouthd daemon will continue to run in the background. If desired, it can be forced to exit with the following command:

sudo /bin/plymouth --quit

An easy place to do this automatically is to add this line to .xsession after the background is set.

Test the plymouth initrd

Reboot and enjoy!

If the splash does not work as expected, add plymouth.debug=file:/var/log/plymouthd-debug.log to the APPEND line in the boot configuration file. This may provide some help as to where the problem lies. If the graphics “break” part way through the boot process, reread the first section on this page.

Print/export