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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# SlugOS specific stuff for the init scripts.
#
# This is, in effect, an extended patch to fix various
# problems in the initscripts on SlugOS. The problems
# mostly come down to the order the scripts are executed
# in.
include initscripts_${PV}.bb
MAINTAINER = "John Bowler <jbowler@acm.org>"
RCONFLICTS = "initscripts"
# All other standard definitions inherited from initscripts
# Except the PR which is hacked here. The format used is
# a suffix
PR := "${PR}.11"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
PACKAGES = "${PN}"
SRC_URI += "file://alignment.sh"
SRC_URI += "file://domainname.sh"
SRC_URI += "file://devices.patch;patch=1"
# Without this it is not possible to patch checkroot.sh
S = "${WORKDIR}"
do_install_append() {
# the image build command now installs this for slugos
rm ${D}${sysconfdir}/device_table
# slugos specific scripts
install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/domainname.sh ${D}${sysconfdir}/init.d
# Remove the do install links (this detects a change to the
# initscripts .bb file - it will cause a build failure here.)
# This is a copy of the ln -sf lines from the initscripts
# do_install.
rm ${D}${sysconfdir}/rc2.d/S99rmnologin
rm ${D}${sysconfdir}/rc3.d/S99rmnologin
rm ${D}${sysconfdir}/rc4.d/S99rmnologin
rm ${D}${sysconfdir}/rc5.d/S99rmnologin
rm ${D}${sysconfdir}/rc6.d/S20sendsigs
# rm ${D}${sysconfdir}/rc6.d/S30urandom
rm ${D}${sysconfdir}/rc6.d/S31umountnfs.sh
rm ${D}${sysconfdir}/rc6.d/S40umountfs
rm ${D}${sysconfdir}/rcS.d/S30ramdisk
rm ${D}${sysconfdir}/rc6.d/S90reboot
rm ${D}${sysconfdir}/rc0.d/S20sendsigs
# rm ${D}${sysconfdir}/rc0.d/S30urandom
rm ${D}${sysconfdir}/rc0.d/S31umountnfs.sh
rm ${D}${sysconfdir}/rc0.d/S40umountfs
rm ${D}${sysconfdir}/rc0.d/S90halt
rm ${D}${sysconfdir}/rcS.d/S02banner
rm ${D}${sysconfdir}/rcS.d/S10checkroot.sh
# rm ${D}${sysconfdir}/rcS.d/S30checkfs.sh
rm ${D}${sysconfdir}/rcS.d/S35mountall.sh
rm ${D}${sysconfdir}/rcS.d/S39hostname.sh
rm ${D}${sysconfdir}/rcS.d/S45mountnfs.sh
rm ${D}${sysconfdir}/rcS.d/S55bootmisc.sh
# rm ${D}${sysconfdir}/rcS.d/S55urandom
rm ${D}${sysconfdir}/rcS.d/S99finish
rm ${D}${sysconfdir}/rcS.d/S05devices
# udev will run at S04 if installed
rm ${D}${sysconfdir}/rcS.d/S03sysfs
rm ${D}${sysconfdir}/rcS.d/S38devpts.sh
rm -f ${D}${sysconfdir}/rcS.d/S06alignment
rm ${D}${sysconfdir}/rcS.d/S37populate-volatile.sh
rm ${D}${sysconfdir}/rc0.d/S25save-rtc.sh
rm ${D}${sysconfdir}/rc6.d/S25save-rtc.sh
# Check the result
find ${D}${sysconfdir}/rc?.d ! -type d -print | {
status=0
while read d
do
oenote "initscripts-slugos: unexpected link $d"
status=1
done
test $status -eq 0 ||
oefatal "initscripts-slugos: new links break do_install"
}
# Set the run-level links
#
# Startup (S) links - UNCHANGED
#
# Keep these in order of startup - S, then 1, 2-5, 0,6
# according to the level in which the script starts (or stops) first.
update-rc.d -r ${D} banner start 2 S .
update-rc.d -r ${D} sysfs.sh start 3 S .
# udev runs at S 04 .
update-rc.d -r ${D} devices start 5 S .
update-rc.d -r ${D} alignment.sh start 7 S .
# busybox hwclock.sh (slugos-init) starts here (08)
# slugos-init umountinitrd runs here (09)
update-rc.d -r ${D} checkroot.sh start 10 S .
# slugos buffer syslog starts here (11)
# sysconfsetup runs at S 12
# modutils.sh runs at S 20
# checkfs.sh is currently disabled from S 30 (and won't work on SlugOS)
# ramdisk is not used on SlugOS, would run at S 30
update-rc.d -r ${D} mountall.sh start 35 S .
# base-files populate-volatile.sh runs at S37
update-rc.d -r ${D} devpts.sh start 38 S .
# slugos file syslog starts here (39)
update-rc.d -r ${D} populate-volatile.sh start 37 S .
# set hostname and domainname before the network script works (by
# entering them at level 40), networking may reset them.
update-rc.d -r ${D} domainname.sh start 40 S .
update-rc.d -r ${D} hostname.sh start 40 S .
# network runs at S 40
# slugos network syslog starts here (44)
update-rc.d -r ${D} mountnfs.sh start 45 S .
update-rc.d -r ${D} bootmisc.sh start 55 S .
# urandom is currently disabled from S 55 (and won't work with tmpfs /var)
# ipkg-cl configure runs at S 98
update-rc.d -r ${D} finish start 99 S .
#
# User (2-5) links - UNCHANGED
# rmnologin is the only thing added to user levels
update-rc.d -r ${D} rmnologin start 99 2 3 4 5 .
#
# Shutdown (0,6) links - !!!CHANGED!!!
#
# The problem here is that netbase installs K40networking but portmap
# installs S32portmap. One of these has to change! The safe change
# is to make the networking stop at S40, so all network related shutdown
# must be in a K script or <S40.
#
# S20sendsigs is a disaster. It needs to happen before the umounts
# but after the portmapper (which it would otherwise kill).
#
# urandom would stop at (S)30
# This is the special, correct, slugos umountnfs.sh (it looks in
# the /proc/mounts information, not /etc/fstab)
update-rc.d -r ${D} umountnfs.sh start 31 0 6 .
update-rc.d -r ${D} save-rtc.sh start 25 0 6 .
# portmap stops at 32
# slugos network syslog stops here (39)
# networking stops at 40 (nothing else does, believe me.)
# busybox hwclock.sh (slugos-init) stops here (45)
# slugos file syslog stops here (47)
# slugos buffer syslog stops here (49)
# udev stops here (55)
# Remove any errant processes
update-rc.d -r ${D} sendsigs start 60 0 6 .
# This is the special, correct, slugos umountfs, it will umount
# any network file systems which failed to umount before.
update-rc.d -r ${D} umountfs start 70 0 6 .
update-rc.d -r ${D} halt start 90 0 .
update-rc.d -r ${D} reboot start 90 6 .
}
|