summaryrefslogtreecommitdiff
path: root/initramfs/script
blob: e22ace9c0e75f7706e8abddc1c7afeac89c2c0db (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
#!/bin/sh

PREREQ=""

prereqs()
{
    echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

# Nothing to do if ROOTFSTYPE is set to something other than bcachefs
if [ -n "$ROOTFSTYPE" -a "$ROOTFSTYPE" != bcachefs ]; then
    exit 0
fi

# source for resolve_device() and panic() functions
. /scripts/functions

# Resolve the root device (e.g. if root is specified by UUID)
DEV=$(resolve_device "$ROOT")

# Check if the root device needs unlocking:
if bcachefs unlock -c $DEV >/dev/null 2>&1; then
    if [ "$DEV" == "$ROOT" ]; then
        echo "Please unlock $DEV:"
    else
        echo "Please unlock $DEV ($ROOT):"
    fi

    count=0
    tries=3
    while [ $tries -le 0 -o $count -lt $tries ]; do
        if bcachefs unlock "$DEV"; then
            echo "Bcachefs: $DEV successfully unlocked"
            break
        fi

        let count++
    done

    if [ $tries -gt 0 -a $count -ge $tries ]; then
        panic "Bcachefs: maximum number of tries exceeded for $DEV"
        exit 1
    fi
fi

exit 0