]> git.ipfire.org Git - thirdparty/dracut.git/blame - 51-dracut-rescue.install
iscsi: always popd, even if there is no iscsi device
[thirdparty/dracut.git] / 51-dracut-rescue.install
CommitLineData
2fa6fd3a 1#!/bin/bash
d837ac39
HH
2
3export LANG=C
4
5COMMAND="$1"
6KERNEL_VERSION="$2"
8652d549
HH
7BOOT_DIR_ABS="${3%/*}/0-rescue"
8KERNEL_IMAGE="$4"
9
2fa6fd3a
HH
10
11dropindirs_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 35
b71d162a
YW
36if [[ ${KERNEL_INSTALL_MACHINE_ID+x} ]]; then
37 MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
38elif [[ -f /etc/machine-id ]] ; then
39 read MACHINE_ID < /etc/machine-id
478aa7da
HH
40fi
41
b71d162a
YW
42if ! [[ $MACHINE_ID ]]; then
43 exit 0
44fi
478aa7da 45
d837ac39 46if [[ -f /etc/kernel/cmdline ]]; then
a6018700 47 read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
a7d3ad67 48elif [[ -f /usr/lib/kernel/cmdline ]]; then
a6018700 49 read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
d837ac39 50fi
10e59202 51
d837ac39 52if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
10e59202
HH
53 read -r -d '' -a line < /proc/cmdline
54 for i in "${line[@]}"; do
55 [[ "${i#initrd=*}" != "$i" ]] && continue
56 BOOT_OPTIONS+=("$i")
57 done
d837ac39 58fi
10e59202
HH
59
60if ! [[ ${BOOT_OPTIONS[*]} ]]; then
61 echo "Could not determine the kernel command line parameters." >&2
62 echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2
d837ac39
HH
63 exit 1
64fi
65
f8c24964 66if [[ -d "${BOOT_DIR_ABS%/*}" ]]; then
b39b8452
JMC
67 BOOT_DIR="/${MACHINE_ID}/0-rescue"
68 BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR}
69 LOADER_ENTRY="$BOOT_ROOT/loader/entries/${MACHINE_ID}-0-rescue.conf"
70 KERNEL="linux"
71 INITRD="initrd"
72else
73 BLS_DIR="/boot/loader/entries"
b39b8452
JMC
74 BOOT_DIR_ABS="/boot"
75 LOADER_ENTRY="$BLS_DIR/${MACHINE_ID}-0-rescue.conf"
76 KERNEL="vmlinuz-0-rescue-${MACHINE_ID}"
77 INITRD="initramfs-0-rescue-${MACHINE_ID}.img"
78fi
d837ac39
HH
79
80ret=0
81
82case "$COMMAND" in
83 add)
b39b8452
JMC
84 [[ -f "$LOADER_ENTRY" ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \
85 && [[ -f "$BOOT_DIR_ABS/$INITRD" ]] && exit 0
d837ac39 86
2fa6fd3a
HH
87 # source our config dir
88 for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
89 [[ -e $f ]] && . "$f"
90 done
91
92 [[ $dracut_rescue_image != "yes" ]] && exit 0
93
c0c6c74d
HH
94 [[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS"
95
b39b8452
JMC
96 if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then
97 echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/$KERNEL'!" >&2
2fa6fd3a
HH
98 fi
99
b39b8452 100 if [[ ! -f "$BOOT_DIR_ABS/$INITRD" ]]; then
48c283a2 101 dracut -f --no-hostonly -a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
b39b8452
JMC
102 ((ret+=$?))
103 fi
104
f8c24964 105 if [[ "${BOOT_DIR_ABS}" != "/boot" ]]; then
b39b8452
JMC
106 {
107 echo "title $PRETTY_NAME - Rescue Image"
108 echo "version $KERNEL_VERSION"
109 echo "machine-id $MACHINE_ID"
110 echo "options ${BOOT_OPTIONS[@]} rd.auto=1"
111 echo "linux $BOOT_DIR/linux"
112 echo "initrd $BOOT_DIR/initrd"
113 } > $LOADER_ENTRY
114 else
115 cp -aT "${KERNEL_IMAGE%/*}/bls.conf" $LOADER_ENTRY
116 sed -i 's/'$KERNEL_VERSION'/0-rescue-'${MACHINE_ID}'/' $LOADER_ENTRY
117 fi
d837ac39 118
d837ac39 119 ((ret+=$?))
d837ac39
HH
120 ;;
121
122 remove)
2fa6fd3a 123 exit 0
d837ac39
HH
124 ;;
125
126 *)
127 usage
128 ret=1;;
129esac
130
d837ac39 131exit $ret