#!/bin/sh # # This is an example hook script. It will be run by 'mkinitramfs' # when it creates the image. It's job is to decide which files to # install, then install them into the staging area, where the # initramfs is being created. This happens when a new 'linux-image' # package is installed, or when the administrator runs 'mkinitramfs' # by hand to update an initramfs image. # # TODO: What about the case where you install something that should be # added to the initramfs, but the linux-image it relates to has # already been installed previously? Does this happen often # enough that it needs to be handled? How can it be handled? # # * Think about the 'usplash'. The initramfs will need to be # updated if a theme change or update is desired. Maybe it # should not be totally automatic, but offered on upgrade # predicated on a user response to a debconf question? That # issue needs to be explored and a solution specified. # # * Do not assume that any needed subdirectories have been created # yet, but don't bail out if they are already there. # # * All of the standard system tools are available, of course, since # this hook is running in the real system, not the initramfs. # # * TODO: ... ? Anything else to tell them in this bullet-list? # # # The environment contains at least: # # CONFDIR -- usually /etc/mkinitramfs, can be set on mkinitramfs # command line. # # DESTDIR -- The staging directory where we are building the image. # # TODO: Decide what environment variables are meaningful and defined # in this context, then document them as part of the interface. # # TODO: May need a version_compare function for comparison of VERSION? # # List the soft prerequisites here. This is a space separated list of # names, of scripts that are in the same directory as this one, that # must be run before this one can be. # PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac # You can do anything you need to from here on. # # Source the optional 'hook-functions' scriptlet, if you need the # functions defined within it. Read it to see what is available to # you. It contains functions for copying dynamically linked program # binaries, and kernel modules into the DESTDIR. # . /usr/share/initramfs-tools/hook-functions # If this hook script is a conffile (and thus stored in # /etc/mkinitramfs/hooks), it must take care to do the right thing # when the package containing it is removed but not purged. There of # course may be other reasons to have custom logic deciding what to # install. The version variable may be useful for this. # if [ -x /usr/bin/myprog ]; then copy_exec /usr/bin/myprog usr/bin fi # To accompany this, there should usually be a script for inside the # initramfs named something like: # # "/etc/mkinitramfs/local-premount/myprog" # # ... and it should do what is necessary to have 'myprog' get run # inside the early runtime environment. # Handle an error: # if [ -n "$an_error_occured" ]; then # # TODO: Do we need 'warn()', 'error()', and/or 'fatal()' for this? # echo "An error occured in $0: $an_error_occured" >&2 exit 1 # # TODO: Decide if different error codes are meaningful, what they # mean, and what the semantics of them are wrt 'mkinitramfs' # pass or fail. Consider naming the error values with # mnemonic symbols rather than magic numbers. They may or # may not be the same set of errors as the set for # in-initramfs scripts. # fi exit 0