summaryrefslogtreecommitdiff
path: root/src/extract-efi-boot-files.bash
blob: 827c59f481472527b507566ea6a51fd36d33b74a (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
#!/bin/bash
set -e
set -o pipefail

image=$1
[ -e "$image" ]
shift
base_dir=EFI/BOOT
source_files=("$@")

get_fsdev()
{
    read < <(kpartx -rav "$image")
    set -- $REPLY
    if [[ $* == 'add map '*' '* ]]
    then
        fsdev=/dev/mapper/$3
    else
        echo "Error: kpartx: $REPLY" >&2
        exit 1
    fi
}

cleanup()
{
    cd "$OLDPWD"
    umount -v /mnt
    dev=$(losetup -j "$image" -nO NAME)
    [ "$dev" ] || exit 0
    kpartx -d "$dev" || true
    losetup -d "$dev" || true
}

get_fsdev
mount -v -r "$fsdev" /mnt
trap cleanup EXIT
OLDPWD=$PWD
cd /mnt/"$base_dir"
cp --no-preserve=mode -t "$OLDPWD" -- "${source_files[@]}"