2021-09-15 07:35:02 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
# created by Tobias Powalowski <tpowa@archlinux.org>
|
|
|
|
|
2022-01-13 17:21:39 +01:00
|
|
|
_D_SCRIPTS=""
|
|
|
|
_L_COMPLETE=""
|
|
|
|
_L_INSTALL_COMPLETE=""
|
|
|
|
_G_RELEASE=""
|
2022-01-18 22:41:45 +01:00
|
|
|
_RUNNING_ARCH="$(uname -m)"
|
|
|
|
_CONFIG="/etc/archboot/${_RUNNING_ARCH}.conf"
|
2022-01-13 17:21:39 +01:00
|
|
|
_W_DIR="/archboot"
|
|
|
|
_INSTALLER_SOURCE="https://gitlab.archlinux.org/tpowa/archboot/-/raw/master/usr/bin"
|
2021-09-22 09:02:56 +02:00
|
|
|
|
|
|
|
usage () {
|
2021-09-22 18:59:33 +02:00
|
|
|
echo "Update installer, launch latest environment or create latest image files:"
|
2021-10-07 07:22:05 +02:00
|
|
|
echo "-------------------------------------------------------------------------"
|
2021-09-22 09:02:56 +02:00
|
|
|
echo "PARAMETERS:"
|
2021-09-25 13:45:22 +02:00
|
|
|
echo " -u Update scripts: setup, quickinst, tz, km and helpers."
|
2021-09-22 18:59:33 +02:00
|
|
|
echo ""
|
2021-09-25 13:45:22 +02:00
|
|
|
echo "On fast internet connection (100Mbit) (approx. 5 minutes):"
|
|
|
|
echo " -latest Launch latest archboot environment (using kexec)."
|
2021-12-12 14:22:27 +01:00
|
|
|
echo " This operation needs at least 3 GB RAM."
|
2021-09-25 13:45:22 +02:00
|
|
|
echo ""
|
|
|
|
echo " -latest-install Launch latest archboot environment with downloaded"
|
|
|
|
echo " package cache (using kexec)."
|
2021-12-12 14:22:27 +01:00
|
|
|
echo " This operation needs at least 4 GB RAM."
|
2021-09-22 18:59:33 +02:00
|
|
|
echo ""
|
2021-10-08 16:38:42 +02:00
|
|
|
echo " -latest-image Generate latest image files in /archboot-release directory"
|
2022-01-12 09:57:23 +01:00
|
|
|
echo " This operation needs at least 3.6 GB RAM."
|
2021-09-22 18:59:33 +02:00
|
|
|
echo ""
|
2021-10-08 16:38:42 +02:00
|
|
|
echo " -h This message."
|
2021-09-22 09:02:56 +02:00
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
[[ -z "${1}" ]] && usage
|
|
|
|
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case ${1} in
|
2022-01-13 17:21:39 +01:00
|
|
|
-u|--u) _D_SCRIPTS="1" ;;
|
|
|
|
-latest|--latest) _L_COMPLETE="1" ;;
|
|
|
|
-latest-install|--latest-install) _L_INSTALL_COMPLETE="1";;
|
|
|
|
-latest-image|--latest-image) _G_RELEASE="1" ;;
|
2021-09-22 09:02:56 +02:00
|
|
|
-h|--h|?) usage ;;
|
|
|
|
*) usage ;;
|
|
|
|
esac
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
|
2021-10-08 15:02:21 +02:00
|
|
|
if [[ ! "$(cat /etc/hostname)" == "archboot" ]]; then
|
|
|
|
echo "This script should only be run in booted archboot environment. Aborting..."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-09-15 07:35:02 +02:00
|
|
|
# Download latest setup and quickinst script from git repository
|
2022-01-13 17:21:39 +01:00
|
|
|
if [[ "${_D_SCRIPTS}" == "1" ]]; then
|
2021-10-06 17:49:16 +02:00
|
|
|
echo "Downloading latest km, tz, quickinst, setup and helpers..."
|
2022-01-13 17:21:39 +01:00
|
|
|
[[ -e /usr/bin/quickinst ]] && wget -q "$_INSTALLER_SOURCE/archboot-quickinst.sh?inline=false" -O /usr/bin/quickinst >/dev/null 2>&1
|
|
|
|
[[ -e /usr/bin/setup ]] && wget -q "$_INSTALLER_SOURCE/archboot-setup.sh?inline=false" -O /usr/bin/setup >/dev/null 2>&1
|
|
|
|
[[ -e /usr/bin/km ]] && wget -q "$_INSTALLER_SOURCE/archboot-km.sh?inline=false" -O /usr/bin/km >/dev/null 2>&1
|
|
|
|
[[ -e /usr/bin/tz ]] && wget -q "$_INSTALLER_SOURCE/archboot-tz.sh?inline=false" -O /usr/bin/tz >/dev/null 2>&1
|
2022-01-21 11:54:13 +01:00
|
|
|
[[ -e /usr/bin/archboot-${_RUNNING_ARCH}-create-container.sh ]] && wget -q "$_INSTALLER_SOURCE/archboot-${_RUNNING_ARCH}-create-container.sh?inline=false" -O "/usr/bin/archboot-${_RUNNING_ARCH}-create-container.sh" >/dev/null 2>&1
|
|
|
|
[[ -e /usr/bin/archboot-${_RUNNING_ARCH}-release.sh ]] && wget -q "$_INSTALLER_SOURCE/archboot-${_RUNNING_ARCH}-release.sh?inline=false" -O "/usr/bin/archboot-${_RUNNING_ARCH}-release.sh" >/dev/null 2>&1
|
2022-01-28 08:24:31 +01:00
|
|
|
[[ -e /usr/bin/archboot-binary-check.sh ]] && wget -q "$_INSTALLER_SOURCE/archboot-binary-check.sh?inline=false" -O /usr/bin/archboot-binary-check.sh >/dev/null 2>&1
|
2022-01-13 17:21:39 +01:00
|
|
|
[[ -e /usr/bin/update-installer.sh ]] && wget -q "$_INSTALLER_SOURCE/archboot-update-installer.sh?inline=false" -O /usr/bin/update-installer.sh >/dev/null 2>&1
|
2022-01-28 08:24:31 +01:00
|
|
|
|
2021-10-07 07:48:14 +02:00
|
|
|
echo "Finished: Downloading scripts done."
|
2021-10-08 10:04:39 +02:00
|
|
|
exit 0
|
2021-09-22 09:02:56 +02:00
|
|
|
fi
|
|
|
|
|
2021-10-08 10:04:39 +02:00
|
|
|
echo "Information: Logging is done on /dev/tty7 ..."
|
|
|
|
|
2021-09-22 09:02:56 +02:00
|
|
|
# Generate new environment and launch it with kexec
|
2022-01-13 17:21:39 +01:00
|
|
|
if [[ "${_L_COMPLETE}" == "1" || "${_L_INSTALL_COMPLETE}" == "1" ]]; then
|
2021-10-06 17:14:26 +02:00
|
|
|
# remove everything not necessary
|
2021-10-07 07:22:05 +02:00
|
|
|
echo "Step 1/6: Removing not necessary files from /usr ..."
|
2021-10-06 17:14:26 +02:00
|
|
|
rm -r /lib/{firmware,modules} >/dev/tty7 2>&1
|
2022-02-02 22:06:37 +01:00
|
|
|
_SHARE_DIRS="efitools file grub hwdata kbd licenses makepkg nmap openvpn pacman refind tc usb_modeswitch vim zoneinfo zsh"
|
|
|
|
for i in "${_SHARE_DIRS}"; do
|
|
|
|
[[ -d "/usr/share/${i}" ]] && rm -r "/usr/share/${i}"
|
|
|
|
done
|
|
|
|
echo "Step 2/6: Generating archboot container in ${_W_DIR} ..."
|
|
|
|
echo " This will need some time ..."
|
2021-09-26 08:52:27 +02:00
|
|
|
# create container without package cache
|
2022-02-02 22:06:37 +01:00
|
|
|
[[ "${_L_COMPLETE}" == "1" ]] && "archboot-${_RUNNING_ARCH}-create-container.sh" "${_W_DIR}" -cc -cp >/dev/tty7 2>&1 || exit 1
|
2021-09-26 08:52:27 +02:00
|
|
|
# create container with package cache
|
2022-02-02 22:06:37 +01:00
|
|
|
[[ "${_L_INSTALL_COMPLETE}" == "1" ]] && "archboot-${_RUNNING_ARCH}-create-container.sh" "${_W_DIR}" -cc >/dev/tty7 2>&1 || exit 1
|
2021-09-25 20:10:26 +02:00
|
|
|
# generate initrd in container, remove archboot packages from cache, not needed in normal install, umount tmp before generating initrd
|
2022-01-21 11:54:13 +01:00
|
|
|
echo "Step 3/6: Generating initramfs in ${_W_DIR} ..."
|
2021-10-07 07:22:05 +02:00
|
|
|
echo " This will need some time ..."
|
2021-11-30 18:37:03 +01:00
|
|
|
# add fix for mkinitcpio 31, remove when 32 is released
|
2022-01-13 17:21:39 +01:00
|
|
|
cp "${_W_DIR}"/usr/lib/initcpio/functions "${_W_DIR}"/usr/lib/initcpio/functions.old
|
|
|
|
cp "${_W_DIR}"/usr/share/archboot/patches/31-initcpio.functions.fixed "${_W_DIR}"/usr/lib/initcpio/functions
|
2022-02-02 22:06:37 +01:00
|
|
|
systemd-nspawn -D "${_W_DIR}" /bin/bash -c "rm /var/cache/pacman/pkg/archboot-*; umount /tmp;mkinitcpio -c ${_CONFIG} -g /initrd.img" >/dev/tty7 2>&1 || exit 1
|
2022-01-13 17:21:39 +01:00
|
|
|
mv "${_W_DIR}"/usr/lib/initcpio/functions.old "${_W_DIR}"/usr/lib/initcpio/functions
|
2022-01-21 11:54:13 +01:00
|
|
|
echo "Step 4/6: Moving initramfs files from ${_W_DIR} to / ..."
|
2022-01-13 17:21:39 +01:00
|
|
|
mv "${_W_DIR}"/initrd.img / || exit 1
|
2022-01-18 22:41:45 +01:00
|
|
|
if [[ "${_RUNNING_ARCH}" == "x86_64" ]]; then
|
2022-01-13 17:21:39 +01:00
|
|
|
mv "${_W_DIR}"/boot/vmlinuz-linux / || exit 1
|
2022-02-02 22:06:37 +01:00
|
|
|
### not supported
|
|
|
|
#mv "${_W_DIR}"/boot/intel-ucode.img / || exit 1
|
2022-01-08 09:39:59 +01:00
|
|
|
fi
|
2022-01-18 22:41:45 +01:00
|
|
|
if [[ "${_RUNNING_ARCH}" == "aarch64" ]]; then
|
2022-01-13 17:21:39 +01:00
|
|
|
mv "${_W_DIR}"/boot/Image / || exit 1
|
2022-01-08 09:39:59 +01:00
|
|
|
fi
|
2022-02-02 22:06:37 +01:00
|
|
|
### not supported
|
|
|
|
#mv "${_W_DIR}"/boot/amd-ucode.img / || exit 1
|
2022-01-13 17:21:39 +01:00
|
|
|
# remove "${_W_DIR}"
|
|
|
|
echo "Step 5/6: Remove ${_W_DIR} ..."
|
|
|
|
rm -r "${_W_DIR}" || exit 1
|
2021-10-07 07:22:05 +02:00
|
|
|
echo "Step 6/6: Loading files to kexec now, reboot in a few seconds ..."
|
2021-09-22 15:19:21 +02:00
|
|
|
# load kernel and initrds into running kernel
|
2022-01-18 22:41:45 +01:00
|
|
|
if [[ "${_RUNNING_ARCH}" == "x86_64" ]]; then
|
2022-02-02 22:06:37 +01:00
|
|
|
kexec -l /vmlinuz-linux --initrd=/initrd.img --reuse-cmdline
|
2022-01-08 09:39:59 +01:00
|
|
|
fi
|
2022-01-18 22:41:45 +01:00
|
|
|
if [[ "${_RUNNING_ARCH}" == "aarch64" ]]; then
|
2022-02-02 22:06:37 +01:00
|
|
|
kexec -l /Image --initrd=/initrd.img --reuse-cmdline
|
2022-01-08 09:39:59 +01:00
|
|
|
fi
|
2021-10-07 07:22:05 +02:00
|
|
|
echo "Finished: Rebooting ..."
|
2021-09-22 15:19:21 +02:00
|
|
|
# restart environment
|
2021-09-22 09:02:56 +02:00
|
|
|
systemctl kexec
|
|
|
|
fi
|
2021-09-15 07:35:02 +02:00
|
|
|
|
2021-09-22 09:02:56 +02:00
|
|
|
# Generate new images
|
2022-01-13 17:21:39 +01:00
|
|
|
if [[ "${_G_RELEASE}" == "1" ]]; then
|
2022-01-21 11:54:13 +01:00
|
|
|
echo "Step 1/1: Generating new iso files now in ${_W_DIR} ..."
|
2021-10-07 07:22:05 +02:00
|
|
|
echo " This will need some time ..."
|
2022-01-21 11:54:13 +01:00
|
|
|
"archboot-${_RUNNING_ARCH}-release.sh" "${_W_DIR}" >/dev/tty7 2>&1 || exit 1
|
|
|
|
echo "Finished: New isofiles are located in ${_W_DIR}"
|
2021-09-22 09:02:56 +02:00
|
|
|
fi
|