]> git.ipfire.org Git - thirdparty/dracut.git/blame - modules.d/90mdraid/module-setup.sh
Factor out all the "type -V" commands
[thirdparty/dracut.git] / modules.d / 90mdraid / module-setup.sh
CommitLineData
95d2dabc
HH
1#!/bin/bash
2# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3# ex: ts=8 sw=4 sts=4 et filetype=sh
4
8bcfd683 5# called by dracut
95d2dabc 6check() {
29b10e65 7 local _rootdev
95d2dabc 8 # No mdadm? No mdraid support.
30e6e809 9 require_binaries mdadm || return 1
95d2dabc 10
1b7fd0fa 11 [[ $hostonly ]] || [[ $mount_needs ]] && {
281327f7
HH
12 for dev in "${!host_fs_types[@]}"; do
13 [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue
14
15 DEVPATH=$(get_devpath_block "$dev")
16
17 for holder in "$DEVPATH"/holders/*; do
18 [[ -e "$holder" ]] || continue
19 [[ -e "$holder/md" ]] && return 0
20 break
21 done
22
d351541e
HH
23 done
24 return 255
95d2dabc
HH
25 }
26
27 return 0
28}
29
8bcfd683 30# called by dracut
95d2dabc
HH
31depends() {
32 echo rootfs-block
33 return 0
34}
35
8bcfd683 36# called by dracut
95d2dabc
HH
37installkernel() {
38 instmods =drivers/md
39}
40
8bcfd683 41# called by dracut
1743473b
HH
42cmdline() {
43 local _activated dev line UUID
44 declare -A _activated
45
46 for dev in "${!host_fs_types[@]}"; do
47 [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue
48
49 UUID=$(
50 /sbin/mdadm --examine --export $dev \
51 | while read line; do
52 [[ ${line#MD_UUID=} = $line ]] && continue
53 printf "%s" "${line#MD_UUID=} "
54 done
55 )
56
57 if ! [[ ${_activated[${UUID}]} ]]; then
58 printf "%s" " rd.md.uuid=${UUID}"
59 _activated["${UUID}"]=1
60 fi
61
62 done
63}
64
8bcfd683 65# called by dracut
95d2dabc 66install() {
ecc13ef1 67 local rule rule_path
af119460
HH
68 inst_multiple cat
69 inst_multiple -o mdmon
24a38bc1
HH
70 inst $(command -v partx) /sbin/partx
71 inst $(command -v mdadm) /sbin/mdadm
95d2dabc 72
1743473b 73 cmdline >> "${initdir}/etc/cmdline.d/90mdraid.conf"
575733aa 74 echo >> "${initdir}/etc/cmdline.d/90mdraid.conf"
d351541e 75
ecc13ef1 76 # <mdadm-3.3 udev rule
c46cda82 77 inst_rules 64-md-raid.rules
ecc13ef1
AT
78 # >=mdadm-3.3 udev rules
79 inst_rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules
c46cda82
HH
80 # remove incremental assembly from stock rules, so they don't shadow
81 # 65-md-inc*.rules and its fine-grained controls, or cause other problems
82 # when we explicitly don't want certain components to be incrementally
83 # assembled
ecc13ef1
AT
84 for rule in 64-md-raid.rules 64-md-raid-assembly.rules; do
85 rule_path="${initdir}${udevdir}/rules.d/${rule}"
86 [ -f "${rule_path}" ] && sed -i -r \
87 -e '/RUN\+?="[[:alpha:]/]*mdadm[[:blank:]]+(--incremental|-I)[[:blank:]]+(\$env\{DEVNAME\}|\$tempnode|\$devnode)/d' \
88 "${rule_path}"
89 done
95d2dabc
HH
90
91 inst_rules "$moddir/65-md-incremental-imsm.rules"
92
c46cda82
HH
93 inst_rules "$moddir/59-persistent-storage-md.rules"
94 prepare_udev_rules 59-persistent-storage-md.rules
95
cf589142 96 # guard against pre-3.0 mdadm versions, that can't handle containers
aa09b74a 97 if ! mdadm -Q -e imsm /dev/null >/dev/null 2>&1; then
95d2dabc
HH
98 inst_hook pre-trigger 30 "$moddir/md-noimsm.sh"
99 fi
aa09b74a 100 if ! mdadm -Q -e ddf /dev/null >/dev/null 2>&1; then
cf589142
MS
101 inst_hook pre-trigger 30 "$moddir/md-noddf.sh"
102 fi
95d2dabc 103
3b403b32 104 if [[ $hostonly ]] || [[ $mdadmconf = "yes" ]]; then
95d2dabc
HH
105 if [ -f /etc/mdadm.conf ]; then
106 inst /etc/mdadm.conf
107 else
108 [ -f /etc/mdadm/mdadm.conf ] && inst /etc/mdadm/mdadm.conf /etc/mdadm.conf
109 fi
5bcf262d
AT
110 if [ -d /etc/mdadm.conf.d ]; then
111 local f
112 inst_dir /etc/mdadm.conf.d
113 for f in /etc/mdadm.conf.d/*.conf; do
114 [ -f "$f" ] || continue
115 inst "$f"
116 done
117 fi
95d2dabc
HH
118 fi
119
95d2dabc 120 inst_hook pre-udev 30 "$moddir/mdmon-pre-udev.sh"
95d2dabc 121 inst_hook pre-trigger 30 "$moddir/parse-md.sh"
a1abd64a 122 inst_hook pre-mount 10 "$moddir/mdraid-waitclean.sh"
e4297a66 123 inst_hook cleanup 99 "$moddir/mdraid-needshutdown.sh"
657d68cf 124 inst_hook shutdown 30 "$moddir/md-shutdown.sh"
53fe81e7
HH
125 inst_script "$moddir/mdraid-cleanup.sh" /sbin/mdraid-cleanup
126 inst_script "$moddir/mdraid_start.sh" /sbin/mdraid_start
6c6d8057
HH
127 if dracut_module_included "systemd"; then
128 if [ -e $systemdsystemunitdir/mdmon@.service ]; then
129 inst_simple $systemdsystemunitdir/mdmon@.service
130 fi
ffc4f173
HH
131 fi
132 inst_hook pre-shutdown 30 "$moddir/mdmon-pre-shutdown.sh"
95d2dabc 133}