setup: skip EFI variable setup when secure boot is active
[platform/upstream/gummiboot.git] / loader-postinst.sh
1 #!/bin/bash
2
3 # This script is called automatically by new-kernel-pkg as
4 # /etc/kernel/postinst.d/loader-postinst.sh (Fedora)
5
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU Lesser General Public License as published by
8 # the Free Software Foundation; either version 2.1 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # Lesser General Public License for more details.
15 #
16 # Copyright (C) 2012 Harald Hoyer <harald@redhat.com>
17 # Copyright (C) 2012 Kay Sievers <kay@vrfy.org>
18
19 if (( $# != 2 )); then
20         echo "Usage: $0 <KERNEL_VERSION> <KERNEL_IMAGE>" >&2
21         exit 1
22 fi
23
24 KERNEL_VERSION="$1"
25 KERNEL_IMAGE="$2"
26
27 if ! [[ -f $KERNEL_IMAGE ]]; then
28         echo "Can't find file $KERNEL_IMAGE!" >&2
29         exit 1
30 fi
31
32 if [[ -d /boot/loader/entries ]]; then
33         EFI_DIR="/boot"
34 elif [[ -d /boot/efi/loader/entries ]]; then
35         EFI_DIR="/boot/efi"
36 fi
37
38 if ! [[ $EFI_DIR ]] ; then
39         echo "Did not install new kernel and loader entry." >&2
40         echo "Please create the directory 'loader/entries/' in your EFI system partition." >&2
41         exit 0
42 fi
43
44 if [[ -f ${KERNEL_IMAGE/vmlinuz/initrd} ]]; then
45         INITRD_IMAGE=${KERNEL_IMAGE/vmlinuz/initrd}
46 elif [[ -f ${KERNEL_IMAGE/vmlinuz/initrd}.img ]]; then
47         INITRD_IMAGE=${KERNEL_IMAGE/vmlinuz/initrd}.img
48 elif [[ -f ${KERNEL_IMAGE/vmlinuz/initramfs}.img ]]; then
49         INITRD_IMAGE=${KERNEL_IMAGE/vmlinuz/initramfs}.img
50 fi
51
52 if [[ -f /etc/kernel/cmdline ]]; then
53         while read line; do
54                 BOOT_OPTIONS+="$line "
55         done < /etc/kernel/cmdline
56 fi
57 if ! [[ $BOOT_OPTIONS ]]; then
58         while read line; do
59                 BOOT_OPTIONS+="$line "
60         done < /proc/cmdline
61 fi
62 if ! [[ $BOOT_OPTIONS ]]; then
63         echo "Can't determine the kernel command line parameters." >&2
64         echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2
65         exit 1
66 fi
67
68 [[ -f /etc/os-release ]] && . /etc/os-release
69 if ! [[ $ID ]]; then
70         echo "Can't determine the name of your distribution. Please create /etc/os-release." >&2
71         echo "See http://www.freedesktop.org/software/systemd/man/os-release.html" >&2
72         exit 1
73 fi
74
75 [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
76 if ! [[ $MACHINE_ID ]]; then
77         echo "Can't determine your machine id. Please create /etc/machine-id!" >&2
78         echo "See http://www.freedesktop.org/software/systemd/man/machine-id.html" >&2
79         exit 1
80 fi
81
82 mkdir -p "${EFI_DIR}/${ID}/${MACHINE_ID}"
83
84 cp --preserve "$KERNEL_IMAGE" "${EFI_DIR}/${ID}/${MACHINE_ID}/"
85 [[ $INITRD_IMAGE ]] && cp --preserve "$INITRD_IMAGE" "${EFI_DIR}/${ID}/${MACHINE_ID}/"
86
87 {
88         echo "title      $PRETTY_NAME"
89         echo "version    $KERNEL_VERSION"
90         echo "machine-id $MACHINE_ID"
91         echo "options    $BOOT_OPTIONS"
92         echo "linux      /$ID/$MACHINE_ID/${KERNEL_IMAGE##*/}"
93         [[ $INITRD_IMAGE ]] && echo "initrd     /${ID}/${MACHINE_ID}/${INITRD_IMAGE##*/}"
94 } > "${EFI_DIR}/loader/entries/${ID}-${KERNEL_VERSION}-${MACHINE_ID}.conf"
95
96 # now cleanup the old entries and files, for which no /lib/modules/$KERNEL_VERSION exists
97 (
98         cd ${EFI_DIR}/loader/entries
99         for conf in ${ID}-*-${MACHINE_ID}.conf; do
100                 KERNEL_VERSION=${conf##$ID-}
101                 KERNEL_VERSION=${KERNEL_VERSION%%-$MACHINE_ID.conf}
102                 [[ $KERNEL_VERSION ]] || continue
103                 [[ -d /lib/modules/${KERNEL_VERSION}/kernel ]] && continue
104                 rm -f "$conf"
105                 rm -f "${EFI_DIR}/${ID}/${MACHINE_ID}/*${KERNEL_VERSION}*"
106         done
107 )
108
109 exit 0