]>
Commit | Line | Data |
---|---|---|
2fa6fd3a | 1 | #!/bin/bash |
d837ac39 HH |
2 | |
3 | export LANG=C | |
4 | ||
5 | COMMAND="$1" | |
6 | KERNEL_VERSION="$2" | |
8652d549 HH |
7 | BOOT_DIR_ABS="${3%/*}/0-rescue" |
8 | KERNEL_IMAGE="$4" | |
9 | ||
2fa6fd3a HH |
10 | |
11 | dropindirs_sort() | |
12 | { | |
13 | suffix=$1; shift | |
14 | args=("$@") | |
15 | files=$( | |
16 | while (( $# > 0 )); do | |
17 | for i in ${1}/*${suffix}; do | |
18 | [[ -f $i ]] && echo ${i##*/} | |
19 | done | |
20 | shift | |
21 | done | sort -Vu | |
22 | ) | |
23 | ||
24 | for f in $files; do | |
25 | for d in "${args[@]}"; do | |
26 | if [[ -f "$d/$f" ]]; then | |
27 | echo "$d/$f" | |
28 | continue 2 | |
29 | fi | |
30 | done | |
31 | done | |
32 | } | |
d837ac39 HH |
33 | |
34 | [[ -f /etc/os-release ]] && . /etc/os-release | |
478aa7da HH |
35 | |
36 | if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then | |
37 | systemd-machine-id-setup | |
38 | fi | |
39 | ||
d837ac39 | 40 | [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id |
478aa7da | 41 | |
d837ac39 | 42 | if [[ -f /etc/kernel/cmdline ]]; then |
a6018700 | 43 | read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline |
a7d3ad67 | 44 | elif [[ -f /usr/lib/kernel/cmdline ]]; then |
a6018700 | 45 | read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline |
d837ac39 | 46 | fi |
10e59202 | 47 | |
d837ac39 | 48 | if ! [[ "${BOOT_OPTIONS[@]}" ]]; then |
10e59202 HH |
49 | read -r -d '' -a line < /proc/cmdline |
50 | for i in "${line[@]}"; do | |
51 | [[ "${i#initrd=*}" != "$i" ]] && continue | |
52 | BOOT_OPTIONS+=("$i") | |
53 | done | |
d837ac39 | 54 | fi |
10e59202 HH |
55 | |
56 | if ! [[ ${BOOT_OPTIONS[*]} ]]; then | |
57 | echo "Could not determine the kernel command line parameters." >&2 | |
58 | echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2 | |
d837ac39 HH |
59 | exit 1 |
60 | fi | |
61 | ||
2fa6fd3a | 62 | BOOT_DIR="/${MACHINE_ID}/0-rescue" |
b29901c0 YW |
63 | BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR} |
64 | LOADER_ENTRY="$BOOT_ROOT/loader/entries/${MACHINE_ID}-0-rescue.conf" | |
d837ac39 HH |
65 | |
66 | ret=0 | |
67 | ||
68 | case "$COMMAND" in | |
69 | add) | |
b29901c0 | 70 | [[ -f "$LOADER_ENTRY" ]] && exit 0 |
d837ac39 | 71 | |
2fa6fd3a HH |
72 | # source our config dir |
73 | for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do | |
74 | [[ -e $f ]] && . "$f" | |
75 | done | |
76 | ||
77 | [[ $dracut_rescue_image != "yes" ]] && exit 0 | |
78 | ||
c0c6c74d HH |
79 | [[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS" |
80 | ||
8cd88205 | 81 | if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS"/linux; then |
2fa6fd3a HH |
82 | echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'!" >&2 |
83 | fi | |
84 | ||
95957248 | 85 | dracut --no-hostonly -a "rescue" "$BOOT_DIR_ABS"/initrd "$KERNEL_VERSION" |
d837ac39 HH |
86 | ((ret+=$?)) |
87 | ||
88 | { | |
89 | echo "title $PRETTY_NAME - Rescue Image" | |
90 | echo "version $KERNEL_VERSION" | |
91 | echo "machine-id $MACHINE_ID" | |
92 | echo "options ${BOOT_OPTIONS[@]} rd.auto=1" | |
93 | echo "linux $BOOT_DIR/linux" | |
2fa6fd3a | 94 | echo "initrd $BOOT_DIR/initrd" |
d837ac39 HH |
95 | } > $LOADER_ENTRY |
96 | ((ret+=$?)) | |
d837ac39 HH |
97 | ;; |
98 | ||
99 | remove) | |
2fa6fd3a | 100 | exit 0 |
d837ac39 HH |
101 | ;; |
102 | ||
103 | *) | |
104 | usage | |
105 | ret=1;; | |
106 | esac | |
107 | ||
108 | ((ret+=$?)) | |
109 | ||
110 | exit $ret |