-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathinit.tpl
More file actions
88 lines (73 loc) · 1.93 KB
/
init.tpl
File metadata and controls
88 lines (73 loc) · 1.93 KB
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
#!/bin/busybox sh
ZPOOL="/sbin/zpool"
ZFS="/sbin/zfs"
BUSYBOX="/bin/busybox"
CAT="$BUSYBOX cat"
CUT="$BUSYBOX cut"
GREP="$BUSYBOX grep"
TR="$BUSYBOX tr"
ECHO="$BUSYBOX echo"
MOUNT="$BUSYBOX mount"
UMOUNT="$BUSYBOX umount"
SH="$BUSYBOX sh"
SWITCH_ROOT="$BUSYBOX switch_root"
MKDIR="$BUSYBOX mkdir"
# mount pseudo FS
$MOUNT -t proc none /proc
$MOUNT -t sysfs none /sys
$MOUNT -t devtmpfs none /dev
$MKDIR /dev/pts
$MOUNT -t devpts /dev/pts /dev/pts
# crashdump
$GREP "kdump" /proc/cmdline >/dev/null
if [[ $? -eq 0 ]]
then
$BUSYBOX --install -s && $SH
$UMOUNT /sys
$UMOUNT /proc
$UMOUNT /dev
exit
fi
# plymouth
$GREP "splash" /proc/cmdline >/dev/null
if [[ $? -eq 0 && -x /usr/sbin/plymouthd && -x /usr/bin/plymouth ]]
then
PLYMOUTH=1
$MKDIR -p /run/plymouth
/usr/sbin/plymouthd --attach-to-session --pid-file /run/plymouth/pid --mode=boot
/usr/bin/plymouth show-splash
fi
# zfs
ROOT=`$CAT /proc/cmdline | $TR " " "\n" | $GREP "root=zfs" | $CUT -d"=" -f3`
RPOOL=`$CAT /proc/cmdline | $TR " " "\n" | $GREP "rpool=" | $CUT -d"=" -f2`
[[ -z $RPOOL ]] && RPOOL=`$ECHO $ROOT | $CUT -d"/" -f1`
[[ -z $RPOOL ]] && RPOOL="rpool"
[[ -z $PLYMOUTH ]] && $ECHO "Importing: $RPOOL"
if [[ -f /etc/$RPOOL.cache ]]
then
$ZPOOL import -c /etc/$RPOOL.cache -N $RPOOL
else
$ZPOOL import -N $RPOOL
fi
$ZFS get -Hr -o value encryption $RPOOL | $GREP -v off >/dev/null
if [[ $? -eq 0 ]]
then
if [[ -z $PLYMOUTH ]]
then
$ZFS load-key -a
else
/usr/bin/plymouth ask-for-password --command="$ZFS load-key -a" --prompt="Enter $RPOOL password:"
fi
fi
[[ -z $ROOT ]] && ROOT=`$ZPOOL get -H bootfs $RPOOL | $TR -s "\t" ":" | $CUT -d: -f3`
[[ -z $PLYMOUTH ]] && $ECHO "Mounting: $ROOT"
/sbin/mount.zfs $ROOT /newroot
# rescue shell if mount fail
[[ $? -ne 0 ]] && $BUSYBOX --install -s && $SH
# plymouth newroot
[[ -z $PLYMOUTH ]] || /usr/bin/plymouth --newroot=/newroot
# unmount pseudo FS
$UMOUNT /sys
$UMOUNT /proc
# root switch
exec $SWITCH_ROOT /newroot /sbin/init