mirror of
https://git.proxmox.com/git/pve-kernel-meta
synced 2025-11-03 07:05:23 +00:00
pve-kernel-helper: add new package
with (sh) pveesptool to format, initialize and refresh synced ESPs, as well as the hooks previously shipped via proxmox-ve. pveesptool based on a never-released version written in perl by Stoiko Ivanov. Co-Developed-By: Stoiko Ivanov <s.ivanov@proxmox.com> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
050577f6b6
commit
b3d47d2de2
17
Makefile
17
Makefile
@ -7,12 +7,17 @@ GITVERSION:=$(shell git rev-parse HEAD)
|
||||
|
||||
KERNEL_DEB=pve-kernel-${KERNEL_VER}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
|
||||
HEADERS_DEB=pve-headers-${KERNEL_VER}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
|
||||
HELPER_DEB=pve-kernel-helper_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
|
||||
|
||||
BUILD_DIR=build
|
||||
|
||||
DEBS=${KERNEL_DEB} ${HEADERS_DEB}
|
||||
DEBS=${KERNEL_DEB} ${HEADERS_DEB} ${HELPER_DEB}
|
||||
|
||||
all: deb
|
||||
SUBDIRS = efiboot bin
|
||||
|
||||
.PHONY: all
|
||||
all: ${SUBDIRS}
|
||||
set -e && for i in ${SUBDIRS}; do ${MAKE} -C $$i; done
|
||||
|
||||
.PHONY: deb
|
||||
deb: ${DEBS}
|
||||
@ -21,11 +26,15 @@ ${HEADERS_DEB}: ${KERNEL_DEB}
|
||||
${KERNEL_DEB}: debian
|
||||
rm -rf ${BUILD_DIR}
|
||||
mkdir -p ${BUILD_DIR}/debian
|
||||
cp -ar debian/* ${BUILD_DIR}/debian/
|
||||
rsync -a * ${BUILD_DIR}/
|
||||
cd ${BUILD_DIR}; debian/rules debian/control
|
||||
echo "git clone git://git.proxmox.com/git/pve-kernel-meta.git\\ngit checkout ${GITVERSION}" > ${BUILD_DIR}/debian/SOURCE
|
||||
cd ${BUILD_DIR}; dpkg-buildpackage -b -uc -us
|
||||
lintian ${KERNEL_DEB} ${HEADERS_DEB}
|
||||
lintian ${DEBS}
|
||||
|
||||
.PHONY: install
|
||||
install: ${SUBDIRS}
|
||||
set -e && for i in ${SUBDIRS}; do ${MAKE} -C $$i $@; done
|
||||
|
||||
.PHONY: upload
|
||||
upload: ${DEBS}
|
||||
|
||||
12
bin/Makefile
Normal file
12
bin/Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
SBINDIR=${DESTDIR}/usr/sbin
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
|
||||
install:
|
||||
install -d ${SBINDIR}
|
||||
install -m 0755 pveesptool ${SBINDIR}/
|
||||
|
||||
.PHONY: clean distclean
|
||||
distclean:
|
||||
clean:
|
||||
219
bin/pveesptool
Executable file
219
bin/pveesptool
Executable file
@ -0,0 +1,219 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
. /usr/share/pve-kernel-helper/scripts/functions
|
||||
|
||||
|
||||
_get_partition_info() {
|
||||
if [ ! -e "$1" ]; then
|
||||
warn "E: '$1' does not exist!"
|
||||
exit 1
|
||||
fi
|
||||
bdev=$(realpath "$1")
|
||||
if [ ! -b "$bdev" ]; then
|
||||
warn "E: '$bdev' is not a block device!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
bdev_info=$( \
|
||||
lsblk \
|
||||
--bytes \
|
||||
--pairs \
|
||||
-o 'UUID,SIZE,FSTYPE,PARTTYPE,PKNAME,MOUNTPOINT' \
|
||||
"$bdev" \
|
||||
)
|
||||
if [ -z "$bdev_info" ]; then
|
||||
warn "E: unable to get information about block device '$1'!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
count=$(echo "$bdev_info" | grep -c '^')
|
||||
if [ "$count" -ne '1' ]; then
|
||||
echo "$bdev_info"
|
||||
warn "E: block device '$1' has children!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$bdev_info"
|
||||
eval "$bdev_info"
|
||||
|
||||
if [ -z "$PKNAME" ]; then
|
||||
warn "E: cannot determine parent device of '$1' - please provide a partition, not a full disk."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$SIZE" ] && [ "$SIZE" -lt 268435456 ]; then
|
||||
warn "E: '$1' is too small (<256M)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$MOUNTPOINT" ]; then
|
||||
warn "E: '$1' is mounted on '$MOUNTPOINT' - exiting."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
format() {
|
||||
part="$1"
|
||||
force="$2"
|
||||
|
||||
_get_partition_info "$part"
|
||||
|
||||
if [ -n "$FSTYPE" ]; then
|
||||
if [ -z "$force" ] || [ "$force" != '--force' ]; then
|
||||
warn "E: '$part' contains a filesystem ('$FSTYPE') - exiting (use --force to override)"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
part_basename=$(basename "$part")
|
||||
if [ -z "$part_basename" ]; then
|
||||
warn "E: unable to determine basename of '$part'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
part_num=$(cat /sys/block/"$PKNAME"/"$part_basename"/partition)
|
||||
if [ -z "$part_num" ]; then
|
||||
warn "E: unable to determine partition number of '$part'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$PARTTYPE" ] || [ "$PARTTYPE" != "$ESPTYPE" ]; then
|
||||
echo "Setting partition type of '$part' to '$ESPTYPE'.."
|
||||
sgdisk "-t$part_num:$ESPTYPE" "/dev/$PKNAME"
|
||||
echo "Calling 'udevadm settle'.."
|
||||
udevadm settle --timeout=5
|
||||
fi
|
||||
|
||||
echo "Formatting '$part' as vfat.."
|
||||
mkfs.vfat -F 32 "$part"
|
||||
echo "Done."
|
||||
exit 0
|
||||
}
|
||||
|
||||
init() {
|
||||
part="$1"
|
||||
|
||||
_get_partition_info "$part"
|
||||
|
||||
if [ -z "$PARTTYPE" ] || [ "$PARTTYPE" != "$ESPTYPE" ]; then
|
||||
warn "E: '$part' has wrong partition type (!= $ESPTYPE)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$FSTYPE" ] || [ "$FSTYPE" != 'vfat' ]; then
|
||||
warn "E: '$part' has wrong filesystem (!= vfat)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$UUID" ]; then
|
||||
warn "E: '$part' has no UUID set, required for mounting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
esp_mp="/var/tmp/espmounts/$UUID"
|
||||
|
||||
mkdir -p "$esp_mp"
|
||||
echo "Mounting '$part' on '$esp_mp'."
|
||||
mount -t vfat "$part" "$esp_mp"
|
||||
|
||||
echo "Installing systemd-boot.."
|
||||
mkdir -p "$esp_mp/$PMX_ESP_DIR"
|
||||
bootctl --path "$esp_mp" install
|
||||
|
||||
echo "Configuring systemd-boot.."
|
||||
echo "timeout 3" > "$esp_mp/$PMX_LOADER_CONF.tmp"
|
||||
echo "default proxmox-*" >> "$esp_mp/$PMX_LOADER_CONF.tmp"
|
||||
mv "$esp_mp/$PMX_LOADER_CONF.tmp" "$esp_mp/$PMX_LOADER_CONF"
|
||||
echo "Unmounting '$part'."
|
||||
umount "$part"
|
||||
|
||||
echo "Adding '$part' to list of synced ESPs.."
|
||||
if [ -e "$ESP_LIST" ]; then
|
||||
cp "$ESP_LIST" "$ESP_LIST.new"
|
||||
fi
|
||||
echo "$UUID" >> "$ESP_LIST.new"
|
||||
sort -uo "$ESP_LIST.new" "$ESP_LIST.new"
|
||||
mv "$ESP_LIST.new" "$ESP_LIST"
|
||||
|
||||
echo "Refreshing kernels and initrds.."
|
||||
refresh
|
||||
}
|
||||
|
||||
refresh() {
|
||||
hookscript='/etc/kernel/postinst.d/zz-pve-efiboot'
|
||||
echo "Running hook script '$hookscript'.."
|
||||
exec $hookscript
|
||||
}
|
||||
|
||||
usage() {
|
||||
warn "USAGE: $0 <commands> [ARGS]"
|
||||
warn ""
|
||||
warn " $0 format <partition> [--force]"
|
||||
warn " $0 init <partition>"
|
||||
warn " $0 refresh"
|
||||
}
|
||||
|
||||
help() {
|
||||
echo "USAGE: $0 format <partition> [--force]"
|
||||
echo ""
|
||||
echo " format <partition> as EFI system partition. Use --force to format even if <partition> is currently in use."
|
||||
echo ""
|
||||
echo "USAGE: $0 init <partition>"
|
||||
echo ""
|
||||
echo " initialize EFI system partition at <partition> for automatic synchronization of pve-kernels and their associated initrds."
|
||||
echo ""
|
||||
echo "USAGE: $0 refresh"
|
||||
echo ""
|
||||
echo " refresh all configured EFI system partitions."
|
||||
echo ""
|
||||
}
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
'format')
|
||||
shift
|
||||
if [ -z "$1" ]; then
|
||||
warn "E: <partition> is mandatory."
|
||||
warn ""
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
format "$@"
|
||||
exit 0
|
||||
;;
|
||||
'init')
|
||||
shift
|
||||
if [ -z "$1" ]; then
|
||||
warn "E: <partition> is mandatory."
|
||||
warn ""
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
init "$@"
|
||||
exit 0
|
||||
;;
|
||||
'refresh')
|
||||
shift
|
||||
refresh
|
||||
exit 0
|
||||
;;
|
||||
'help')
|
||||
shift
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
warn "Invalid/unknown command '$1'."
|
||||
warn ""
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 1
|
||||
14
debian/control.in
vendored
14
debian/control.in
vendored
@ -25,3 +25,17 @@ Depends: pve-firmware,
|
||||
Description: Latest Proxmox VE Kernel Image
|
||||
This is a virtual package which will install the latest available
|
||||
proxmox kernel from the @KERNEL_VER@ series.
|
||||
|
||||
Package: pve-kernel-helper
|
||||
Architecture: all
|
||||
Section: admin
|
||||
Priority: optional
|
||||
Depends: dosfstools,
|
||||
gdisk,
|
||||
systemd,
|
||||
udev,
|
||||
${misc:Depends},
|
||||
Description: Function for various kernel maintenance tasks.
|
||||
.
|
||||
This package includes kernel-hooks for marking certain kernels as
|
||||
NeverAutoRemove and helpers for systemd-boot
|
||||
|
||||
3
debian/pve-kernel-helper.install
vendored
Normal file
3
debian/pve-kernel-helper.install
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
etc/kernel/postinst.d/*
|
||||
usr/sbin/pveesptool
|
||||
usr/share/pve-kernel-helper/scripts/functions
|
||||
15
debian/rules
vendored
15
debian/rules
vendored
@ -9,19 +9,8 @@ debian/control: $(wildcard debian/*.in)
|
||||
sed -e 's/@KERNEL_ABI@/${KERNEL_ABI}/g' -e 's/@KERNEL_VER@/${KERNEL_VER}/g' < debian/postinst.in > debian/pve-kernel-${KERNEL_VER}.postinst
|
||||
sed -e 's/@KERNEL_ABI@/${KERNEL_ABI}/g' -e 's/@KERNEL_VER@/${KERNEL_VER}/g' < debian/control.in > debian/control
|
||||
|
||||
|
||||
install:
|
||||
dh_installdocs -A debian/SOURCE debian/copyright
|
||||
dh_installchangelogs
|
||||
dh_strip_nondeterminism
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
|
||||
binary: install
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
%:
|
||||
dh $@
|
||||
|
||||
.PHONY: build clean
|
||||
build clean:
|
||||
|
||||
18
efiboot/Makefile
Normal file
18
efiboot/Makefile
Normal file
@ -0,0 +1,18 @@
|
||||
KERNEL_HOOKSCRIPTS = pve-auto-removal zz-pve-efiboot
|
||||
SHARE_FILES = functions
|
||||
|
||||
HOOKDIR = ${DESTDIR}/etc/kernel/postinst.d
|
||||
SHARE_SCRIPTDIR = ${DESTDIR}/usr/share/pve-kernel-helper/scripts
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
|
||||
install:
|
||||
install -d ${HOOKDIR}
|
||||
install -m 0755 ${KERNEL_HOOKSCRIPTS} ${HOOKDIR}
|
||||
install -d ${SHARE_SCRIPTDIR}
|
||||
install -m 0755 ${SHARE_FILES} ${SHARE_SCRIPTDIR}
|
||||
|
||||
.PHONY: clean distclean
|
||||
distclean:
|
||||
clean:
|
||||
Loading…
Reference in New Issue
Block a user