diff --git a/usr/lib/archboot/release.sh b/usr/lib/archboot/release.sh index 51680fbdf..aeb4ea4f2 100644 --- a/usr/lib/archboot/release.sh +++ b/usr/lib/archboot/release.sh @@ -7,6 +7,7 @@ _INITRAMFS="boot/initramfs_${_ARCH}.img" _INITRAMFS_L0="boot/initramfs_${_ARCH}-0.img" _INITRAMFS_L1="boot/initramfs_${_ARCH}-1.img" _INITRAMFS_LATEST="boot/initramfs_${_ARCH}-latest.img" +_INITRAMFS_LOCAL="boot/initramfs_${_ARCH}-local.img" _INITRAMFS_LOCAL0="boot/initramfs_${_ARCH}-local-0.img" _INITRAMFS_LOCAL1="boot/initramfs_${_ARCH}-local-1.img" _KERNEL="boot/vmlinuz_${_ARCH}" @@ -30,6 +31,8 @@ _usage () { _create_iso() { mkdir -p "${1}" cd "${1}" || exit 1 + _BIND_LOOP="" + [[ "${_ARCH}" == "riscv64" ]] && _BIND_LOOP="--bind /dev/loop0" # create container archboot-"${_ARCH}"-create-container.sh "${_W_DIR}" -cc --install-source="${2}" || exit 1 # generate tarball in container, umount tmp it's a tmpfs and weird things could happen then @@ -40,18 +43,18 @@ _create_iso() { echo "Generate local ISO ..." _create_archboot_db "${_W_DIR}"/var/cache/pacman/pkg # generate local iso in container - systemd-nspawn -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;rm -rf /tmp/*; archboot-${_ARCH}-iso.sh -g -p=${_PRESET_LOCAL} \ + systemd-nspawn ${_BIND_LOOP} -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;rm -rf /tmp/*; archboot-${_ARCH}-iso.sh -g -p=${_PRESET_LOCAL} \ -i=${_ISONAME}-local-${_ARCH}" || exit 1 rm -rf "${_W_DIR}"/var/cache/pacman/pkg/* echo "Generate latest ISO ..." # generate latest iso in container - systemd-nspawn -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;rm -rf /tmp/*;archboot-${_ARCH}-iso.sh -g -p=${_PRESET_LATEST} \ + systemd-nspawn ${_BIND_LOOP} -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;rm -rf /tmp/*;archboot-${_ARCH}-iso.sh -g -p=${_PRESET_LATEST} \ -i=${_ISONAME}-latest-${_ARCH}" || exit 1 echo "Install lvm2 to container ${_W_DIR} ..." systemd-nspawn -D "${_W_DIR}" /bin/bash -c "pacman -Sy lvm2 --noconfirm" >/dev/null 2>&1 echo "Generate normal ISO ..." # generate iso in container - systemd-nspawn -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;archboot-${_ARCH}-iso.sh -g \ + systemd-nspawn ${_BIND_LOOP} -q -D "${_W_DIR}" /bin/bash -c "umount /tmp;archboot-${_ARCH}-iso.sh -g \ -i=${_ISONAME}-${_ARCH}" || exit 1 # create Release.txt with included main archlinux packages echo "Generate Release.txt ..." @@ -61,12 +64,13 @@ _create_iso() { echo "Architecture: ${_ARCH}";\ echo "RAM requirement to boot: 1300 MB or greater";\ echo "Archboot:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi "${_ARCHBOOT}" | grep Version | cut -d ":" -f2 | sed -e "s/\r//g")";\ - echo "Grub:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi grub | grep Version | cut -d ":" -f3 | sed -e "s/\r//g")";\ + [[ "${_ARCH}" == "riscv64" ]] || "Grub:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi grub | grep Version | cut -d ":" -f3 | sed -e "s/\r//g")";\ echo "Kernel:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi linux | grep Version | cut -d ":" -f2 | sed -e "s/\r//g")";\ echo "Pacman:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi pacman | grep Version | cut -d ":" -f2 | sed -e "s/\r//g")";\ echo "Systemd:$(systemd-nspawn -q -D "${_W_DIR}" pacman -Qi systemd | grep Version | cut -d ":" -f2 | sed -e "s/\r//g")") >>Release.txt # move iso out of container - mv "${_W_DIR}"/*.iso ./ + [[ "$(echo ./*.iso)" == "./*.iso" ]] || mv "${_W_DIR}"/*.iso ./ + [[ "$(echo ./*.img)" == "./*.img" ]] || mv "${_W_DIR}"/*.iso ./ # remove container echo "Remove container ${_W_DIR} ..." rm -r "${_W_DIR}" @@ -76,7 +80,25 @@ _create_boot() { # create boot directory with ramdisks echo "Create boot directory ..." if [[ "${_ARCH}" == "riscv64" ]]; then - + mkdir -p boot/ + _MP="$(mktemp -d archboot-mount.XXX)" + for i in *.img; do + if echo "${i}" | grep -v local | grep -vq latest; then + mount -o loop,offset=1048576 "${i}" "${_MP}" + cp "${_MP}/${_KERNEL}" "${_KERNEL_ARCHBOOT}" + cp "${_MP}/${_INITRAMFS}" "${_INITRAMFS}" + umount "${_MP}" + elif echo "${i}" | grep -q latest; then + mount -o loop,offset=1048576 "${i}" "${_MP}" + cp "${_MP}/${_INITRAMFS}" "${_INITRAMFS_LATEST}" + umount "${_MP}" + elif echo "${i}" | grep -q local; then + mount -o loop,offset=1048576 "${i}" "${_MP}" + cp "${_MP}/${_INITRAMFS}" "${_INITRAMFS_LOCAL}" + umount "${_MP}" + fi + done + rm -r "${_MP}" else mkdir -p boot/licenses/amd-ucode [[ "${_ARCH}" == "aarch64" ]] || mkdir -p boot/licenses/intel-ucode