Merge "Create new pxeboot feed refresh script and service"
This commit is contained in:
commit
d24c008374
@ -1,2 +1,4 @@
|
||||
var/pxeboot
|
||||
usr/sbin
|
||||
etc/init.d/pxeboot_feed
|
||||
lib/systemd/system/pxeboot-feed.service
|
||||
|
@ -9,10 +9,12 @@ export platform_release="$(shell grep SW_VERSION /usr/include/build_info.h | cut
|
||||
|
||||
override_dh_auto_configure:
|
||||
sed -i "s/xxxSW_VERSIONxxx/${platform_release}/g" debian-pxe-* efi-debian-pxe-*
|
||||
sed -i "s/xxxSW_VERSIONxxx/${platform_release}/g" pxeboot_feed.sh
|
||||
dh_auto_configure
|
||||
|
||||
override_dh_install:
|
||||
install -v -d -m 755 $(ROOT)/usr/bin
|
||||
install -v -d -m 755 $(ROOT)/lib/systemd/system
|
||||
install -v -d -m 755 $(ROOT)/var/pxeboot/pxelinux.cfg.files
|
||||
install -v -d -m 755 $(ROOT)/var/pxeboot/rel-${platform_release}
|
||||
install -v -d -m 755 $(ROOT)/usr/share/licenses/pxe-network-installer-1.0.0
|
||||
@ -30,6 +32,8 @@ override_dh_install:
|
||||
install -p -D -m 644 efi-pxeboot.cfg.debian $(ROOT)/var/pxeboot/pxelinux.cfg.files/efi-pxeboot.cfg.debian
|
||||
install -p -D -m 755 pxeboot_setup.sh $(ROOT)/usr/sbin/pxeboot_setup.sh
|
||||
install -p -D -m 755 pxeboot-update.sh ${ROOT}/usr/sbin/pxeboot-update-${platform_release}.sh
|
||||
install -p -D -m 644 pxeboot-feed.service $(ROOT)/lib/systemd/system/pxeboot-feed.service
|
||||
install -p -D -m 755 pxeboot_feed.sh $(ROOT)/etc/init.d/pxeboot_feed
|
||||
|
||||
# Legacy BIOS System Node Install grub menus
|
||||
install -p -D -m 700 debian-pxe-controller-install $(ROOT)/var/pxeboot/pxelinux.cfg.files/pxe-controller-install-${platform_release}
|
||||
@ -58,3 +62,6 @@ override_dh_install:
|
||||
install -p -D -m 700 pxeboot/vesamenu.c32 $(ROOT)/var/pxeboot
|
||||
|
||||
dh_install
|
||||
|
||||
override_dh_installsystemd:
|
||||
dh_installsystemd -ppxe-network-installer pxeboot-feed.service
|
||||
|
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=StarlingX Pxeboot Feed Refresh
|
||||
After=config.service
|
||||
Before=pmon.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/etc/init.d/pxeboot_feed
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
219
installer/pxe-network-installer/pxe-network-installer/pxeboot_feed.sh
Executable file
219
installer/pxe-network-installer/pxe-network-installer/pxeboot_feed.sh
Executable file
@ -0,0 +1,219 @@
|
||||
#!/bin/bash
|
||||
#############################################################################
|
||||
# Copyright (c) 2022 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# This utility is used to create or update the following directories
|
||||
#
|
||||
# /var/www/pages/feed/rel-xx.xx/pxeboot
|
||||
# /var/pxeboot/rel-xx.xx
|
||||
#
|
||||
# ... with the kernel, initrd and other images and signature files from /boot
|
||||
#
|
||||
#############################################################################
|
||||
#
|
||||
# chkconfig: 2345 98 2
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: pxeboot_feed
|
||||
# Required-Start: $null
|
||||
# Required-Stop: $null
|
||||
# Default-Start: 3 5
|
||||
# Default-Stop: 0 1 2 6
|
||||
# Short-Description: StarlingX Installer Pxeboot Feed Refresh
|
||||
### END INIT INFO
|
||||
|
||||
# Script has options 'debug' argument
|
||||
debug=false
|
||||
[ -n "${1}" ] && [ "${1}" == "debug" ] && debug=true
|
||||
|
||||
LOG_TAG=${LOG_TAG:-$(basename "${0}")}
|
||||
|
||||
# return code
|
||||
RETVAL=1
|
||||
|
||||
#############################################################################
|
||||
# Name : ilog
|
||||
# Purpose : log info message
|
||||
# Parmaeter: message to log
|
||||
# Returns : none
|
||||
#############################################################################
|
||||
|
||||
function ilog {
|
||||
logger -t "${LOG_TAG}" "${@}"
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# Name : dlog
|
||||
# Purpose : log and echo debug messages
|
||||
# Parmaeter: message to log
|
||||
# Returns : none
|
||||
#############################################################################
|
||||
|
||||
function dlog {
|
||||
if [ "${debug}" == true ] ; then
|
||||
logger -t "${LOG_TAG}" "${@}"
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# Name : rsync_if_not_equal
|
||||
# Purpose : Speed up the refresh service.
|
||||
# Assumptions: Reads are faster thyan writes
|
||||
# Equal case is more likely
|
||||
# Parameters : $1 - src path/file
|
||||
# $2 - dst path/file
|
||||
# Returns : none
|
||||
#############################################################################
|
||||
|
||||
function rsync_if_not_equal {
|
||||
local src_file="${1}"
|
||||
local dst_file="${2}"
|
||||
local need_rsync=false
|
||||
|
||||
if [ -e "${src_file}" ] ; then
|
||||
if [ -e "${dst_file}" ] ; then
|
||||
src=( $(md5sum "${src_file}") )
|
||||
dst=( $(md5sum "${dst_file}") )
|
||||
if [ "${src[0]}" == "${dst[0]}" ] ; then
|
||||
dlog "bypass rsync ; ${src_file}" and "${dst_file} are equal"
|
||||
else
|
||||
need_rsync=true
|
||||
fi
|
||||
else
|
||||
need_rsync=true
|
||||
fi
|
||||
else
|
||||
ilog "Warning: '${src_file}' not found"
|
||||
fi
|
||||
|
||||
if [ "${need_rsync}" = true ] ; then
|
||||
ilog "syncing ${src_file} to ${dst_file}"
|
||||
rsync "${src_file}" "${dst_file}"
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
|
||||
# Override release with what is found in platform.conf
|
||||
rel=""
|
||||
if [ -e "/etc/platform/platform.conf" ] ; then
|
||||
rel=$(grep sw_version < /etc/platform/platform.conf | cut -d '=' -f 2)
|
||||
fi
|
||||
if [ -z "${rel}" ] ; then
|
||||
rel="xxxSW_VERSIONxxx"
|
||||
fi
|
||||
|
||||
# pxeboot objects path
|
||||
feed="/var/www/pages/feed/rel-${rel}"
|
||||
pxefeed="${feed}/pxeboot"
|
||||
pxeboot="/var/pxeboot"
|
||||
|
||||
# ensure the deepest directories are created
|
||||
if [ ! -d "${pxefeed}/EFI/BOOT" ] ; then
|
||||
mkdir -p "${pxefeed}/EFI/BOOT" > /dev/null 2>&1 || exit ${RETVAL}
|
||||
fi
|
||||
if [ ! -d "${pxeboot}rel-${rel}" ] ; then
|
||||
mkdir -p "${pxeboot}/rel-${rel}" > /dev/null 2>&1 || exit ${RETVAL}
|
||||
fi
|
||||
if [ ! -d "${pxeboot}/EFI/BOOT" ] ; then
|
||||
mkdir -p "${pxeboot}/EFI/BOOT" > /dev/null 2>&1 || exit ${RETVAL}
|
||||
fi
|
||||
|
||||
base_path="/boot/ostree"
|
||||
declare -a file_list=()
|
||||
|
||||
if [ ! -d "${base_path}" ] ; then
|
||||
ilog "Error: base path '${base_path}' does not exist"
|
||||
exit ${RETVAL}
|
||||
fi
|
||||
|
||||
file_list=( $(find "${base_path}" -name 'initramfs*') )
|
||||
file_list+=( $(find "${base_path}" -name 'vmlinuz*') )
|
||||
dlog "${file_list[*]}"
|
||||
for f in "${file_list[@]}" ; do
|
||||
path_file1=""
|
||||
filename=$(basename "${f}")
|
||||
dlog "File: ${filename} ... ${f}"
|
||||
if [ "${filename}" == "initramfs.sig" ] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/initrd.sig"
|
||||
path_file2="${pxefeed}/initrd.sig"
|
||||
elif [ "${filename}" == "initramfs" ] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/initrd"
|
||||
path_file2="${pxefeed}/initrd"
|
||||
elif [ "${filename}" == "vmlinuz.sig" ] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage.sig"
|
||||
path_file2="${pxefeed}/bzImage.sig"
|
||||
elif [ "${filename}" == "vmlinuz" ] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage"
|
||||
path_file2="${pxefeed}/bzImage"
|
||||
elif [[ "${filename}" == *"rt-amd64.sig"* ]] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage-rt.sig"
|
||||
path_file2="${pxefeed}/bzImage-rt.sig"
|
||||
elif [[ "${filename}" == *"rt-amd64"* ]] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage-rt"
|
||||
path_file2="${pxefeed}/bzImage-rt"
|
||||
elif [[ "${filename}" == *"amd64.sig"* ]] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage-std.sig"
|
||||
path_file2="${pxefeed}/bzImage-std.sig"
|
||||
elif [[ "${filename}" == *"amd64"* ]] ; then
|
||||
path_file1="${pxeboot}/rel-${rel}/bzImage-std"
|
||||
path_file2="${pxefeed}/bzImage-std"
|
||||
else
|
||||
ilog "ignoring unknown file: ${f}"
|
||||
continue
|
||||
fi
|
||||
|
||||
rsync_if_not_equal "${f}" "${path_file1}"
|
||||
rsync_if_not_equal "${f}" "${path_file2}"
|
||||
done
|
||||
|
||||
|
||||
# Other image files
|
||||
file1="LockDown.efi.sig"
|
||||
file2="LockDown.efi"
|
||||
file3="bootx64.efi"
|
||||
file4="grub.cfg.sig"
|
||||
file5="grubx64.efi"
|
||||
file6="mmx64.efi"
|
||||
|
||||
file_list=( $(find "${base_path}" \
|
||||
-name "${file1}" -o \
|
||||
-name "${file2}" -o \
|
||||
-name "${file3}" -o \
|
||||
-name "${file4}" -o \
|
||||
-name "${file5}" -o \
|
||||
-name "${file6}") )
|
||||
|
||||
dlog "${file_list[*]}"
|
||||
|
||||
for f in "${file_list[@]}" ; do
|
||||
filename=$(basename "${f}")
|
||||
dlog "File: ${filename} ... ${f}"
|
||||
|
||||
path_file="EFI/BOOT/${filename}"
|
||||
path_file1=""
|
||||
|
||||
if [[ "${filename}" == *"${file1}"* || \
|
||||
"${filename}" == *"${file2}"* || \
|
||||
"${filename}" == *"${file3}"* || \
|
||||
"${filename}" == *"${file4}"* || \
|
||||
"${filename}" == *"${file5}"* || \
|
||||
"${filename}" == *"${file6}"* ]] ; then
|
||||
path_file1="${pxeboot}/${path_file}"
|
||||
path_file2="${pxefeed}/${path_file}"
|
||||
else
|
||||
ilog "ignoring unknown file: ${f}"
|
||||
continue
|
||||
fi
|
||||
|
||||
rsync_if_not_equal "${f}" "${path_file1}"
|
||||
rsync_if_not_equal "${f}" "${path_file2}"
|
||||
done
|
||||
|
||||
# rsync efi.img file
|
||||
rsync_if_not_equal "${pxeboot}/efi.img" "${feed}/efi.img"
|
||||
|
||||
RETVAL=0
|
||||
exit ${RETVAL}
|
@ -13,7 +13,7 @@ override_dh_auto_configure:
|
||||
dh_auto_configure
|
||||
|
||||
override_dh_install:
|
||||
install -d -m 755 $(ROOT)/var/www/pages/feed/rel-${platform_release}
|
||||
install -p -D -m 700 kickstart.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}
|
||||
install -p -D -m 700 miniboot.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}
|
||||
install -d -m 755 $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
install -p -D -m 700 kickstart.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
install -p -D -m 700 miniboot.cfg $(ROOT)/var/www/pages/feed/rel-${platform_release}/kickstart
|
||||
dh_install
|
||||
|
@ -2768,7 +2768,6 @@ if [ "${controller}" = true ] ; then
|
||||
pull_options="${commits} --mirror"
|
||||
pxeboot="${IMAGE_ROOTFS}/var/pxeboot"
|
||||
feed="${IMAGE_ROOTFS}/var/www/pages/feed/rel-${sw_release}"
|
||||
subcloud_feed="${IMAGE_ROOTFS}/var/www/pages/iso/rel-${sw_release}"
|
||||
repo="${feed}/ostree_repo"
|
||||
mkdir -p "${repo}"
|
||||
mkdir -p "${feed}"
|
||||
@ -2839,26 +2838,11 @@ if [ "${controller}" = true ] ; then
|
||||
|
||||
|
||||
####################################################################
|
||||
# Setup the feed and pxeboot directories
|
||||
#
|
||||
# All the feed and pxeboot setup operation are off of /var which is
|
||||
# common to normal and rollback filesystems.
|
||||
# Therefore this only needs to be done once like the ostree repo
|
||||
# pull but for a different reason.
|
||||
#
|
||||
# Fetch and add efi.img to /var/pxeboot
|
||||
#####################################################################
|
||||
|
||||
mkdir -p "${pxeboot}/rel-${sw_release}"
|
||||
mkdir -p "${pxeboot}/EFI/BOOT"
|
||||
|
||||
mkdir -p "${feed}/pxeboot"
|
||||
mkdir -p "${feed}/kickstart"
|
||||
mkdir -p "${feed}/pxeboot/EFI/BOOT"
|
||||
|
||||
mkdir -p "${subcloud_feed}/pxeboot"
|
||||
mkdir -p "${subcloud_feed}/kickstart"
|
||||
mkdir -p "${subcloud_feed}/pxeboot/EFI/BOOT"
|
||||
|
||||
# Check for noverifyssl
|
||||
if grep -q noverifyssl /proc/cmdline; then
|
||||
NOVERIFYSSL_WGET_OPT="--no-check-certificate"
|
||||
@ -2868,52 +2852,12 @@ if [ "${controller}" = true ] ; then
|
||||
|
||||
# handle USB install
|
||||
if is_usb_install -eq 0 ; then
|
||||
|
||||
# populate /var/pxeboot
|
||||
ilog "Copy bzImage, initrd and respective secure boot .sig files"
|
||||
ilog "... from /instboot/pxeboot to ${pxeboot}/rel-${sw_release}"
|
||||
|
||||
cp -a /instboot/pxeboot/bzImage* ${pxeboot}/rel-${sw_release}
|
||||
cp -a /instboot/pxeboot/initrd* ${pxeboot}/rel-${sw_release}
|
||||
cp -a /instboot/efi.img ${pxeboot}
|
||||
cp -a /instboot/pxeboot/EFI ${pxeboot}
|
||||
for f in bootx64.efi bootx64-nosig.efi grub.cfg.sig grubx64.efi LockDown.efi LockDown.efi.sig mmx64.efi ; do
|
||||
cp -a /instboot/pxeboot/EFI/BOOT/${f} ${pxeboot}/EFI/BOOT
|
||||
done
|
||||
|
||||
# populate feeds
|
||||
ilog "Stage images and kickstarts from /instboot to feeds"
|
||||
for this_feed in ${feed} ${subcloud_feed} ; do
|
||||
cp -a /instboot/pxeboot/bzImage* ${this_feed}/pxeboot
|
||||
cp -a /instboot/pxeboot/initrd* ${this_feed}/pxeboot
|
||||
cp -a /instboot/efi.img ${this_feed}
|
||||
cp -a /instboot/pxeboot/EFI ${this_feed}/pxeboot
|
||||
cp -a /instboot/kickstart/kickstart.cfg ${this_feed}/kickstart
|
||||
cp -a /instboot/kickstart/miniboot.cfg ${this_feed}/kickstart
|
||||
done # feeds
|
||||
|
||||
# handle pxeboot install
|
||||
else
|
||||
pxeurl=$(echo $insturl | sed -e s/ostree_repo//)
|
||||
|
||||
# Fetch and stage the kernels, signature files and initrd
|
||||
ilog "Fetch bzImage and initrd files from ${pxeurl}/pxeboot"
|
||||
pushd ${pxeboot}/rel-${sw_release} > /dev/null
|
||||
for f in bzImage bzImage-rt bzImage-rt.sig bzImage.sig bzImage-std bzImage-std.sig initrd initrd.sig ; do
|
||||
ilog "... fetching ${f} to ${pxeboot}/rel-${sw_release}"
|
||||
|
||||
wget ${NOVERIFYSSL_WGET_OPT} ${pxeurl}/pxeboot/${f} -o /${LAT_DIR}/wget.tmp
|
||||
[ $? -ne 0 ] && report_failure_with_msg "Failed to find ${pxeurl}/pxeboot/${f}"
|
||||
cat /${LAT_DIR}/wget.tmp >> /${LAT_DIR}/wget_pxeboot_setup.log
|
||||
|
||||
# also copy to the feeds
|
||||
ilog "... copying ${f} to ${feed}/pxeboot"
|
||||
cp -a ${f} ${feed}/pxeboot
|
||||
ilog "... copying ${f} to ${subcloud_feed}/pxeboot"
|
||||
cp -a ${f} ${subcloud_feed}/pxeboot
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
# Fetch and stage the efi.img
|
||||
ilog "Fetch efi.img from ${pxeurl} to ${pxeboot}"
|
||||
pushd ${pxeboot} > /dev/null
|
||||
@ -2927,53 +2871,14 @@ if [ "${controller}" = true ] ; then
|
||||
# also copy to the feeds
|
||||
ilog "... copying ${f} to ${feed}"
|
||||
cp -a ${f} ${feed}
|
||||
ilog "... copying ${f} to ${subcloud_feed}"
|
||||
cp -a ${f} ${subcloud_feed}
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
# Fetch and stage the boot loaders
|
||||
pushd ${pxeboot}/EFI/BOOT > /dev/null
|
||||
ilog "Copy files from ${pxeurl}/pxeboot/EFI/BOOT to ${pxeboot}/EFI/BOOT"
|
||||
for f in bootx64.efi bootx64-nosig.efi grub.cfg.sig grubx64.efi LockDown.efi LockDown.efi.sig mmx64.efi; do
|
||||
ilog "... fetching ${f} to ${pxeboot}/EFI/BOOT"
|
||||
|
||||
wget ${NOVERIFYSSL_WGET_OPT} ${pxeurl}/pxeboot/EFI/BOOT/${f} -o /${LAT_DIR}/wget.tmp
|
||||
[ $? -ne 0 ] && report_failure_with_msg "Failed to get ${pxeurl}/pxeboot/EFI/BOOT/${f}"
|
||||
cat /${LAT_DIR}/wget.tmp >> /${LAT_DIR}/wget_pxeboot_setup.log
|
||||
|
||||
# also copy to the feeds
|
||||
ilog "... copying ${f} to ${feed}/pxeboot/EFI/BOOT"
|
||||
cp -a ${f} ${feed}/pxeboot/EFI/BOOT
|
||||
ilog "... copying ${f} to ${subcloud_feed}/pxeboot/EFI/BOOT"
|
||||
cp -a ${f} ${subcloud_feed}/pxeboot/EFI/BOOT
|
||||
done
|
||||
popd > /dev/null
|
||||
|
||||
# Fetch and stage the kickstarts
|
||||
ilog "Fetch kickstarts from ${pxeurl} to ${feed}/kickstart"
|
||||
pushd ${feed}/kickstart > /dev/null
|
||||
for f in kickstart.cfg miniboot.cfg ; do
|
||||
ilog "... fetching ${f} to ${feed}/kickstart"
|
||||
|
||||
wget ${NOVERIFYSSL_WGET_OPT} ${pxeurl}/kickstart/${f} -o /${LAT_DIR}/wget.tmp
|
||||
[ $? -ne 0 ] && report_failure_with_msg "Failed to get ${pxeurl}/kickstart/${f}"
|
||||
cat /${LAT_DIR}/wget.tmp >> /${LAT_DIR}/wget_pxeboot_setup.log
|
||||
|
||||
ilog "... copying ${f} to ${subcloud_feed}/kickstart"
|
||||
cp -a ${f} ${subcloud_feed}/kickstart
|
||||
done
|
||||
|
||||
[ -e /${LAT_DIR}/wget.tmp ] && rm -f /${LAT_DIR}/wget.tmp
|
||||
popd > /dev/null
|
||||
fi
|
||||
|
||||
# Temporary WorkAround: The current UEFI pxeboot loader does not call the
|
||||
# default provisioning grub menu in /var/pxeboot/pxelinux.cfg/grub.cfg.
|
||||
#
|
||||
# While the above issue is investigated, to support DX and system node
|
||||
# install for UEFI servers this code moves the lat grub.cfg aside and
|
||||
# creates a link to the default provisioning mac based grub menu.
|
||||
# Save and override the LAT grub menu by creating a link to the default
|
||||
# provisioning mac based grub menu.
|
||||
pushd ${pxeboot}/EFI/BOOT > /dev/null
|
||||
if [ ! -L grub.cfg ] ; then
|
||||
if [ -e grub.cfg ] ; then
|
||||
|
Loading…
x
Reference in New Issue
Block a user