]>
git.proxmox.com Git - pve-kernel-meta.git/blob - bin/pve-efiboot-tool
5 .
/usr
/share
/pve-kernel-helper
/scripts
/functions
8 _get_partition_info
() {
10 warn
"E: '$1' does not exist!"
14 if [ ! -b "$bdev" ]; then
15 warn
"E: '$bdev' is not a block device!"
23 -o 'UUID,SIZE,FSTYPE,PARTTYPE,PKNAME,MOUNTPOINT' \
26 if [ -z "$bdev_info" ]; then
27 warn
"E: unable to get information about block device '$1'!"
31 count
=$
(echo "$bdev_info" |
grep -c '^')
32 if [ "$count" -ne '1' ]; then
34 warn
"E: block device '$1' has children!"
41 if [ -z "$PKNAME" ]; then
42 warn
"E: cannot determine parent device of '$1' - please provide a partition, not a full disk."
46 if [ -n "$SIZE" ] && [ "$SIZE" -lt 268435456 ]; then
47 warn
"E: '$1' is too small (<256M)."
51 if [ -n "$MOUNTPOINT" ]; then
52 warn
"E: '$1' is mounted on '$MOUNTPOINT' - exiting."
61 _get_partition_info
"$part"
63 if [ -n "$FSTYPE" ]; then
64 if [ -z "$force" ] ||
[ "$force" != '--force' ]; then
65 warn
"E: '$part' contains a filesystem ('$FSTYPE') - exiting (use --force to override)"
70 part_basename
=$
(basename "$part")
71 if [ -z "$part_basename" ]; then
72 warn
"E: unable to determine basename of '$part'"
76 part_num
=$
(cat /sys
/block
/"$PKNAME"/"$part_basename"/partition
)
77 if [ -z "$part_num" ]; then
78 warn
"E: unable to determine partition number of '$part'"
82 if [ -z "$PARTTYPE" ] ||
[ "$PARTTYPE" != "$ESPTYPE" ]; then
83 echo "Setting partition type of '$part' to '$ESPTYPE'.."
84 sgdisk
"-t$part_num:$ESPTYPE" "/dev/$PKNAME"
85 echo "Calling 'udevadm settle'.."
86 udevadm settle
--timeout=5
89 echo "Formatting '$part' as vfat.."
90 mkfs.vfat
-F 32 "$part"
98 _get_partition_info
"$part"
100 if [ -z "$PARTTYPE" ] ||
[ "$PARTTYPE" != "$ESPTYPE" ]; then
101 warn
"E: '$part' has wrong partition type (!= $ESPTYPE)."
105 if [ -z "$FSTYPE" ] ||
[ "$FSTYPE" != 'vfat' ]; then
106 warn
"E: '$part' has wrong filesystem (!= vfat)."
110 if [ -z "$UUID" ]; then
111 warn
"E: '$part' has no UUID set, required for mounting."
115 esp_mp
="/var/tmp/espmounts/$UUID"
118 echo "Mounting '$part' on '$esp_mp'."
119 mount
-t vfat
"$part" "$esp_mp"
121 echo "Installing systemd-boot.."
122 mkdir
-p "$esp_mp/$PMX_ESP_DIR"
123 bootctl
--path "$esp_mp" install
125 echo "Configuring systemd-boot.."
126 echo "timeout 3" > "$esp_mp/$PMX_LOADER_CONF.tmp"
127 echo "default proxmox-*" >> "$esp_mp/$PMX_LOADER_CONF.tmp"
128 mv "$esp_mp/$PMX_LOADER_CONF.tmp" "$esp_mp/$PMX_LOADER_CONF"
129 echo "Unmounting '$part'."
132 echo "Adding '$part' to list of synced ESPs.."
133 if [ -e "$ESP_LIST" ]; then
134 cp "$ESP_LIST" "$ESP_LIST.new"
136 echo "$UUID" >> "$ESP_LIST.new"
137 sort -uo "$ESP_LIST.new" "$ESP_LIST.new"
138 mv "$ESP_LIST.new" "$ESP_LIST"
140 echo "Refreshing kernels and initrds.."
145 hookscript
='/etc/kernel/postinst.d/zz-pve-efiboot'
146 echo "Running hook script '$hookscript'.."
151 warn
"USAGE: $0 <commands> [ARGS]"
153 warn
" $0 format <partition> [--force]"
154 warn
" $0 init <partition>"
160 echo "USAGE: $0 format <partition> [--force]"
162 echo " format <partition> as EFI system partition. Use --force to format even if <partition> is currently in use."
164 echo "USAGE: $0 init <partition>"
166 echo " initialize EFI system partition at <partition> for automatic synchronization of pve-kernels and their associated initrds."
168 echo "USAGE: $0 refresh"
170 echo " refresh all configured EFI system partitions."
183 warn
"E: <partition> is mandatory."
192 reexec_in_mountns
"$@"
195 warn
"E: <partition> is mandatory."
214 warn
"Invalid/unknown command '$1'."