summaryrefslogtreecommitdiff
path: root/nonsystemd/eudev/initcpio_install
blob: f2c214b96ad4c150c1c986a37fb3ec582bca0a6d (plain)
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
#!/bin/bash

# This is in 'udev' and 'systemd' hook... Let's hope we have
# it in mkinitcpio soon.
# https://github.com/archlinux/mkinitcpio/pull/54
add_udev_rule() {
    # Add an udev rules file to the initcpio image. Dependencies on binaries
    # will be discovered and added.
    #   $1: path to rules file (or name of rules file)

    local rules="$1" rule= key= value= binary=

    if [[ ${rules:0:1} != '/' ]]; then
        rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$1")
    fi
    if [[ -z $rules ]]; then
        # complain about not found rules
        return 1
    fi

    add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}"

    while IFS=, read -ra rule; do
        # skip empty lines, comments
        [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue

        for pair in "${rule[@]}"; do
            IFS=' =' read -r key value <<< "$pair"
            case $key in
                RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD})
                    # strip quotes
                    binary=${value//[\"\']/}
                    # just take the first word as the binary name
                    binary=${binary%% *}
                    [[ ${binary:0:1} == '$' ]] && continue
                    if [[ ${binary:0:1} != '/' ]]; then
                        binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary")
                    fi
                    add_binary "$binary"
                    ;;
            esac
        done
    done <"$rules"
}

build() {
    add_file "/etc/udev/udev.conf"
    add_binary /usr/bin/udevd
    add_binary /usr/bin/udevadm

    for rule in 50-udev-default.rules 60-persistent-storage.rules 64-btrfs.rules 80-drivers.rules; do
        add_file "/usr/lib/udev/rules.d/$rule"
    done

    for tool in ata_id scsi_id; do
        add_file "/usr/lib/udev/$tool"
    done

    add_runscript
}

help() {
    cat <<HELPEOF
This hook will use udev to create your root device node and detect the needed
modules for your root device. It is also required for firmware loading in
initramfs. It is recommended to use this hook.
HELPEOF
}

# vim: set ft=sh ts=4 sw=4 et: