LOG_FILE=/root/postinstall-luks-first-boot.log
[ -n "@NO_SAVE@" ] && LOG_FILE=/dev/null

exec < /dev/tty3 > /dev/tty3
chvt 3
echo "#########################"
echo "# %post luks-first-boot #"
echo "#########################"
(
  KEYFILE=/root/.10mt-keyfile-first-boot
  DRACUT_FILE=/etc/dracut.conf.d/nbde-first-boot.conf
  CLEANUP=/usr/bin/10mt-first-boot-cleanup
  UNIT=/etc/systemd/system/10mt-first-boot-cleanup.service
  UNIT_NAME="$(basename "${UNIT}")"

  # Now prepare first-boot cleanup.
  cat <<EOF >"${CLEANUP}"
#!/bin/sh
set -x

# Remove keyfile and dracut configuration.
[ -e "${KEYFILE}" ] && rm -f "${KEYFILE}"
[ -e "${DRACUT_FILE}" ] && rm -f  "${DRACUT_FILE}"

# Regenerate initramfs.
dracut -f --regenerate-all

# Restore configuration.
[ -e /etc/default/grub.10mt ] && mv -f /etc/default/grub.10mt /etc/default/grub
[ -e /etc/fstab.10mt ] && mv -f /etc/fstab.10mt /etc/fstab
[ -e /etc/crypttab.10mt ] && mv -f /etc/crypttab.10mt /etc/crypttab

if [ -e /sys/firmware/efi ]; then
  grub2-mkconfig -o /etc/grub2-efi.cfg
else
  grub2-mkconfig -o /etc/grub2.cfg
fi

systemctl disable ${UNIT_NAME}
EOF
  chmod 755 "${CLEANUP}"

  cat <<EOF >"${UNIT}"
[Unit]
Description=10mt First-Boot Cleanup
After=multi-user.target

[Service]
ExecStart="${CLEANUP}"

[Install]
WantedBy=default.target
EOF

    printf '%s' '@LUKS_PW@' > "${KEYFILE}"
    chmod 0 "${KEYFILE}"

    printf 'install_items+=" %s "\n' "${KEYFILE}" > "${DRACUT_FILE}"
    printf 'hostonly_cmdline="yes"\n' >> "${DRACUT_FILE}"

    # Backup configuration for further restore.
    cp -f /etc/default/grub /etc/default/grub.10mt
    cp -f /etc/fstab /etc/fstab.10mt
    cp -f /etc/crypttab /etc/crypttab.10mt

    sed -ie "s@none@${KEYFILE}@" /etc/crypttab ||:
    sed -ie 's@device-timeout=0@device-timeout=180,x-initrd.mount@' /etc/fstab ||:

    dracut -f --regenerate-all

    sed -i -e "s/rd.luks.uuid=[^ ]*//g" -e "s/rd.lvm.lv=[^ ]*//g" -e "s/  */ /g" /etc/default/grub
    if [ -e /sys/firmware/efi ]; then
      grub2-mkconfig -o /etc/grub2-efi.cfg
    else
      grub2-mkconfig -o /etc/grub2.cfg
    fi

    systemctl daemon-reload ||:
    systemctl enable "${UNIT_NAME}"

    echo "## fstab"
    cat /etc/fstab
    echo
    echo "## crypttab"
    cat /etc/crypttab
    echo
    echo "## ${DRACUT_FILE}"
    cat "${DRACUT_FILE}"
    echo
    echo '## lsinitrd | grep "${KEYFILE/\//}"'
    lsinitrd | grep "${KEYFILE/\//}"

) 2>&1 | tee "${LOG_FILE}"
chvt 1

# vim:set ts=2 sw=2 et:

