archboot/usr/bin/archboot-update-installer.sh

81 lines
3.3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# created by Tobias Powalowski <tpowa@archlinux.org>
2021-09-22 09:02:56 +02:00
_BASENAME="$(basename "${0}")"
D_SCRIPTS=""
L_COMPLETE=""
G_RELEASE=""
CONFIG="/etc/archboot/x86_64.conf"
2021-09-22 09:02:56 +02:00
usage () {
echo "${_BASENAME}: usage"
2021-09-22 18:59:33 +02:00
echo "Update installer, launch latest environment or create latest image files:"
echo "---------------------------------------------------------------------------"
2021-09-22 09:02:56 +02:00
echo ""
echo "PARAMETERS:"
2021-09-22 18:59:33 +02:00
echo " -u Update scripts: setup, quickinst, tz km and helpers."
echo ""
echo " -latest Launch latest archboot environment (using kexec)."
echo " This operation needs at least 4500 MB RAM."
echo " On fast internet connection (100Mbit) (approx. 5 minutes)"
echo ""
echo " -latest-image Generate latest image files in /archboot-release directory"
echo " This operation needs at least 5500 MB RAM."
echo " On fast internet connection (100Mbit) (approx. 5 minutes)"
echo ""
echo " -h This message."
2021-09-22 09:02:56 +02:00
exit 0
}
[[ -z "${1}" ]] && usage
while [ $# -gt 0 ]; do
case ${1} in
-u|--u) D_SCRIPTS="1" ;;
2021-09-22 18:59:33 +02:00
-latest|--latest) L_COMPLETE="1" ;;
-latest-image|--latest-image) G_RELEASE="1" ;;
2021-09-22 09:02:56 +02:00
-h|--h|?) usage ;;
*) usage ;;
esac
shift
done
# Download latest setup and quickinst script from git repository
2021-09-22 09:02:56 +02:00
if [[ "${D_SCRIPTS}" == "1" ]]; then
2021-09-22 19:48:24 +02:00
echo 'Downloading latest km, tz, quickinst,setup and helpers...'
2021-09-22 09:02:56 +02:00
INSTALLER_SOURCE="https://gitlab.archlinux.org/tpowa/archboot/-/raw/master/usr/bin"
[[ -e /usr/bin/quickinst ]] && wget -q "$INSTALLER_SOURCE/archboot-quickinst.sh?inline=false" -O /usr/bin/quickinst
[[ -e /usr/bin/setup ]] && wget -q "$INSTALLER_SOURCE/archboot-setup.sh?inline=false" -O /usr/bin/setup
[[ -e /usr/bin/km ]] && wget -q "$INSTALLER_SOURCE/archboot-km.sh?inline=false" -O /usr/bin/km
[[ -e /usr/bin/tz ]] && wget -q "$INSTALLER_SOURCE/archboot-tz.sh?inline=false" -O /usr/bin/tz
2021-09-22 18:59:33 +02:00
[[ -e /usr/bin/archboot-create-container.sh ]] && wget -q "$INSTALLER_SOURCE/archboot-create-container.sh?inline=false" -O /usr/bin/archboot-create-container.sh
[[ -e /usr/bin/archboot-x86_64-release.sh ]] && wget -q "$INSTALLER_SOURCE/archboot-x86_64-release.sh?inline=false" -O /usr/bin/archboot-x86_64-release.sh
[[ -e /usr/bin/update-installer.sh ]] && wget -q "$INSTALLER_SOURCE/archboot-update-installer.sh?inline=false" -O /usr/bin/update-installer.sh
2021-09-22 09:02:56 +02:00
fi
# Generate new environment and launch it with kexec
if [[ "${L_COMPLETE}" == "1" ]]; then
# create container
archboot-create-container.sh archboot || exit 1
# clean cache to safe memory
pacman -Scc --noconfirm
systemd-nspawn -D archboot pacman -Scc --noconfirm
# generate initrd in container
2021-09-22 18:59:33 +02:00
systemd-nspawn -D archboot /bin/bash -c "umount /tmp;mkinitcpio -c ${CONFIG} -g /tmp/initrd.img; mv /tmp/initrd.img /" || exit 1
mv archboot/initrd.img /
mv archboot/boot/vmlinuz-linux /
mv archboot/boot/intel-ucode.img /
mv archboot/boot/amd-ucode.img /
# cleanup archboot
rm -r archboot
# load kernel and initrds into running kernel
kexec -l /vmlinuz-linux --initrd=/intel-ucode.img --initrd=/amd-ucode.img --initrd=/initrd.img --reuse-cmdline
# restart environment
2021-09-22 09:02:56 +02:00
systemctl kexec
fi
2021-09-22 09:02:56 +02:00
# Generate new images
if [[ "${G_RELEASE}" == "1" ]]; then
archboot-x86_64-release.sh archboot
fi