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