summaryrefslogtreecommitdiff
path: root/docs/example_hook
blob: de5392d0cabfbf3cc0781a8cf184aa70e839d5fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/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