File: module-setup.sh

package info (click to toggle)
dracut 110-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,356 kB
  • sloc: sh: 24,895; ansic: 5,236; makefile: 346; perl: 186; python: 48; javascript: 19
file content (158 lines) | stat: -rwxr-xr-x 4,580 bytes parent folder | download
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/bin/bash

# called by dracut
check() {
    # No point trying to support lvm if the binaries are missing
    require_binaries lvm grep || return 1

    [[ $hostonly ]] || [[ $mount_needs ]] && {
        for fs in "${host_fs_types[@]}"; do
            [[ $fs == LVM*_member ]] && return 0
        done
        return 255
    }

    return 0
}

# called by dracut
depends() {
    # We depend on dm_mod being loaded
    echo dm initqueue
    return 0
}

# called by dracut
cmdline() {
    local _activated
    declare -A _activated

    for dev in "${!host_fs_types[@]}"; do
        [[ -e /sys/block/${dev#/dev/}/dm/name ]] || continue
        [[ -e /sys/block/${dev#/dev/}/dm/uuid ]] || continue
        uuid=$(< "/sys/block/${dev#/dev/}/dm/uuid")
        [[ ${uuid#LVM-} == "$uuid" ]] && continue
        dev=$(< "/sys/block/${dev#/dev/}/dm/name")
        eval "$(dmsetup splitname --nameprefixes --noheadings --rows "$dev" 2> /dev/null)"
        [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
        if ! [[ ${_activated[DM_VG_NAME / DM_LV_NAME]} ]]; then
            printf " rd.lvm.lv=%s " "${DM_VG_NAME}/${DM_LV_NAME} "
            _activated["${DM_VG_NAME}/${DM_LV_NAME}"]=1
        fi
    done
}

installkernel() {
    hostonly='' dracut_instmods -o -P ".*/(bcache/|md-cluster).*" "=drivers/md"
}

# called by dracut
install() {
    inst_multiple lvm grep

    # lvm links for recovery inside the initramfs
    inst_multiple -o \
        lvchange \
        lvconvert \
        lvcreate \
        lvdisplay \
        lvextend \
        lvmconfig \
        lvmdiskscan \
        lvmsadc \
        lvmsar \
        lvreduce \
        lvremove \
        lvrename \
        lvresize \
        lvs \
        lvscan \
        pvchange \
        pvck \
        pvcreate \
        pvdisplay \
        pvmove \
        pvremove \
        pvresize \
        pvs \
        pvscan \
        vgcfgbackup \
        vgcfgrestore \
        vgchange \
        vgck \
        vgconvert \
        vgcreate \
        vgdisplay \
        vgexport \
        vgextend \
        vgimport \
        vgimportclone \
        vgmerge \
        vgmknodes \
        vgreduce \
        vgremove \
        vgrename \
        vgs \
        vgscan \
        vgsplit

    if [[ $hostonly_cmdline == "yes" ]]; then
        local _lvmconf
        _lvmconf=$(cmdline)
        [[ $_lvmconf ]] && printf "%s\n" "$_lvmconf" >> "${initdir}/etc/cmdline.d/20-lvm.conf"
    fi

    inst_rules "$moddir/64-lvm.rules"

    if [[ $hostonly ]] || [[ $lvmconf == "yes" ]]; then
        if [[ -f "${dracutsysrootdir-}/etc/lvm/lvm.conf" ]]; then
            inst_simple -H /etc/lvm/lvm.conf
        fi

        export LVM_SUPPRESS_FD_WARNINGS=1
        # Also install any files needed for LVM system id support.
        if [[ -f "${dracutsysrootdir-}/etc/lvm/lvmlocal.conf" ]]; then
            inst_simple -H /etc/lvm/lvmlocal.conf
        fi
        eval "$(lvm dumpconfig global/system_id_source &> /dev/null)"
        if [ "$system_id_source" == "file" ]; then
            eval "$(lvm dumpconfig global/system_id_file)"
            if [ -f "$system_id_file" ]; then
                inst_simple -H "$system_id_file"
            fi
        fi
        unset LVM_SUPPRESS_FD_WARNINGS
    fi

    inst_rules 11-dm-lvm.rules

    # debian udev rules
    inst_rules 56-lvm.rules 60-persistent-storage-lvm.rules

    inst_script "$moddir/lvm_scan.sh" /sbin/lvm_scan
    inst_hook cmdline 30 "$moddir/parse-lvm.sh"

    if [[ $hostonly ]] && find_binary lvs &> /dev/null; then
        for dev in "${!host_fs_types[@]}"; do
            [[ -e /sys/block/${dev#/dev/}/dm/name ]] || continue
            dev=$(< "/sys/block/${dev#/dev/}/dm/name")
            eval "$(dmsetup splitname --nameprefixes --noheadings --rows "$dev" 2> /dev/null)"
            # shellcheck disable=SC2015
            [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || continue
            case "$(lvs --noheadings -o segtype "${DM_VG_NAME}" 2> /dev/null)" in
                *thin* | *cache* | *era*)
                    inst_multiple -o thin_dump thin_restore thin_check thin_repair \
                        cache_dump cache_restore cache_check cache_repair \
                        era_check era_dump era_invalidate era_restore
                    break
                    ;;
            esac
        done
    fi

    if ! [[ $hostonly ]]; then
        inst_multiple -o thin_dump thin_restore thin_check thin_repair \
            cache_dump cache_restore cache_check cache_repair \
            era_check era_dump era_invalidate era_restore
    fi
}