From f1a43e9c5451184e5590a285168463ad85bc68ff Mon Sep 17 00:00:00 2001 From: Suikan <26223147+suikan4github@users.noreply.github.com> Date: Thu, 1 Jul 2021 21:42:41 +0900 Subject: [PATCH] Refactored. All function body is indented. kaiten-yaki-* has main function. "sourced" style is not enforced. --- script/common/confirmation.sh | 134 +++++++-------- script/common/parainstall.sh | 65 ++++--- script/common/parainstall_msg.sh | 38 ++--- script/common/preinstall.sh | 160 +++++++++--------- script/ubuntu-kaiten-yaki.sh | 258 ++++++++++++++-------------- script/void-kaiten-yaki.sh | 280 ++++++++++++++++--------------- 6 files changed, 475 insertions(+), 460 deletions(-) diff --git a/script/common/confirmation.sh b/script/common/confirmation.sh index 67803cf..c2fd49c 100644 --- a/script/common/confirmation.sh +++ b/script/common/confirmation.sh @@ -5,91 +5,91 @@ function confirmation(){ -# Sanity check for volume group name -if echo ${VGNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume group name. - cat <&2 -***** ERROR : VGNAME is "${VGNAME}" ***** -THe "-" is not allowed in the volume name. -Check passphrase and config.txt + # Sanity check for volume group name + if echo ${VGNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume group name. + cat <<- HEREDOC 1>&2 + ***** ERROR : VGNAME is "${VGNAME}" ***** + THe "-" is not allowed in the volume name. + Check passphrase and config.txt -Installation terminated. -HEREDOC + Installation terminated. + HEREDOC return 1 -fi # "-" is found in the volume group name. + fi # "-" is found in the volume group name. -# Sanity check for root volume name -if echo ${LVROOTNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume name. - cat <&2 -***** ERROR : LVROOTNAME is "${LVROOTNAME}" ***** -THe "-" is not allowed in the volume name. -Check passphrase and config.txt + # Sanity check for root volume name + if echo ${LVROOTNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume name. + cat <<- HEREDOC 1>&2 + ***** ERROR : LVROOTNAME is "${LVROOTNAME}" ***** + THe "-" is not allowed in the volume name. + Check passphrase and config.txt -Installation terminated. -HEREDOC + Installation terminated. + HEREDOC return 1 -fi # "-" is found in the volume name. + fi # "-" is found in the volume name. -# Sanity check for swap volume name -if echo ${LVSWAPNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume name. - cat <&2 -***** ERROR : LVSWAPNAME is "${LVSWAPNAME}" ***** -THe "-" is not allowed in the volume name. -Check passphrase and config.txt + # Sanity check for swap volume name + if echo ${LVSWAPNAME} | grep "-" -i > /dev/null ; then # "-" is found in the volume name. + cat <<- HEREDOC 1>&2 + ***** ERROR : LVSWAPNAME is "${LVSWAPNAME}" ***** + THe "-" is not allowed in the volume name. + Check passphrase and config.txt -Installation terminated. -HEREDOC + Installation terminated. + HEREDOC return 1 -fi # "-" is found in the volume name. + fi # "-" is found in the volume name. -# For surre ask the config.sh is edited -cat <&2 - -Installation terminated. -HEREDOC - return 1 -fi # if YES - -# For sure ask ready to erase. -if [ ${ERASEALL} -eq 1 ] ; then - echo "Are you sure you want to erase entire ${DEV}? [Y/N]" + The destination logical volume label is "${LVROOTNAME}" + "${LVROOTNAME}" uses ${LVROOTSIZE} of the LVM volume group. + Are you ready to install? [Y/N] + HEREDOC read YESNO if [ ${YESNO} != "Y" -a ${YESNO} != "y" ] ; then - cat <&2 -Check config.sh. The variable ERASEALL is ${ERASEALL}. + cat <<- HEREDOC 1>&2 -Installation terminated. -HEREDOC + Installation terminated. + HEREDOC return 1 fi # if YES -fi # if erase all -# ----- Set Passphrase ----- -# Input passphrase -echo "Type passphrase for the disk encryption." -read -sr PASSPHRASE -export PASSPHRASE + # For sure ask ready to erase. + if [ ${ERASEALL} -eq 1 ] ; then + echo "Are you sure you want to erase entire ${DEV}? [Y/N]" + read YESNO + if [ ${YESNO} != "Y" -a ${YESNO} != "y" ] ; then + cat <<-HEREDOC 1>&2 + Check config.sh. The variable ERASEALL is ${ERASEALL}. -echo "Type passphrase again, to confirm." -read -sr PASSPHRASE_C + Installation terminated. + HEREDOC + return 1 + fi # if YES + fi # if erase all -# Validate whether both are indentical or not -if [ ${PASSPHRASE} != ${PASSPHRASE_C} ] ; then - cat <&2 -***** ERROR : Passphrase doesn't match ***** + # ----- Set Passphrase ----- + # Input passphrase + echo "Type passphrase for the disk encryption." + read -sr PASSPHRASE + export PASSPHRASE -Installation terminated. -HEREDOC - return 1 -fi # passphrase validation + echo "Type passphrase again, to confirm." + read -sr PASSPHRASE_C -# succesfull return -return 0 + # Validate whether both are indentical or not + if [ ${PASSPHRASE} != ${PASSPHRASE_C} ] ; then + cat <<-HEREDOC 1>&2 + ***** ERROR : Passphrase doesn't match ***** + + Installation terminated. + HEREDOC + return 1 + fi # passphrase validation + + # succesfull return + return 0 } diff --git a/script/common/parainstall.sh b/script/common/parainstall.sh index 6bf48d4..0dfdc79 100644 --- a/script/common/parainstall.sh +++ b/script/common/parainstall.sh @@ -5,44 +5,43 @@ function parainstall() { -# While the /etc/default/grub in the install target is NOT existing, keep sleeping. -# If installer terminated without file copy, this script also terminates. -while [ ! -e ${TARGETMOUNTPOINT}/etc/default/grub ] -do + # While the /etc/default/grub in the install target is NOT existing, keep sleeping. + # If installer terminated without file copy, this script also terminates. + while [ ! -e ${TARGETMOUNTPOINT}/etc/default/grub ] + do + sleep 1 # 1sec. + + # Check if installer still exist + if ! ps $installer_pid > /dev/null ; then # If not exists + cat <<-HEREDOC 1>&2 + The installer terminated unexpectedly. + + Installation process terminated. + HEREDOC + return 1 + fi + done # while + + # Perhaps, too neuvous. Wait 1 more sectond to avoid the rece condition. sleep 1 # 1sec. - # Check if installer still exist - if ! ps $installer_pid > /dev/null ; then # If not exists - cat <&2 -The installer terminated unexpectedly. - -Installation process terminated. -HEREDOC - return 1 - + # Make target GRUB aware to the crypt partition + # This must do it after start of the file copy by installer, but before the end of the file copy. + # If the environment is not GUI, keep quiet not to bother the TUI installer. + if [ ${PARAINSTMSG} -eq 1 ]; then + echo "...Add GRUB_ENABLE_CRYPTODISK entry to ${TARGETMOUNTPOINT}/etc/default/grub " fi -done # while - -# Perhaps, too neuvous. Wait 1 more sectond to avoid the rece condition. -sleep 1 # 1sec. - -# Make target GRUB aware to the crypt partition -# This must do it after start of the file copy by installer, but before the end of the file copy. -# If the environment is not GUI, keep quiet not to bother the TUI installer. -if [ ${PARAINSTMSG} -eq 1 ]; then - echo "...Add GRUB_ENABLE_CRYPTODISK entry to ${TARGETMOUNTPOINT}/etc/default/grub " -fi -echo "GRUB_ENABLE_CRYPTODISK=y" >> ${TARGETMOUNTPOINT}/etc/default/grub + echo "GRUB_ENABLE_CRYPTODISK=y" >> ${TARGETMOUNTPOINT}/etc/default/grub -# And then, wait for the end of installer process -# If the environment is not GUI, keep quiet not to bother the TUI installer. -if [ ${PARAINSTMSG} -eq 1 ]; then - echo "...Waiting for the end of GUI/TUI installer." -fi -wait $installer_pid + # And then, wait for the end of installer process + # If the environment is not GUI, keep quiet not to bother the TUI installer. + if [ ${PARAINSTMSG} -eq 1 ]; then + echo "...Waiting for the end of GUI/TUI installer." + fi + wait $installer_pid -# succesfull return -return 0 + # succesfull return + return 0 } # para install diff --git a/script/common/parainstall_msg.sh b/script/common/parainstall_msg.sh index 16f9c1d..3b84a88 100644 --- a/script/common/parainstall_msg.sh +++ b/script/common/parainstall_msg.sh @@ -2,29 +2,29 @@ function parainstall_msg() { -cat <&2 + ***** ERROR : Cannot open LUKS volume "${CRYPTPARTNAME}" on ${DEV}${CRYPTPARTITION}. ***** + Check passphrase and config.txt + + Installation terminated. + HEREDOC + return 1 + fi # if crypt volume is unable to open + + # ----- Configure the LVM in LUKS volume ----- + # Check volume group ${VGNAME} exist or not + if vgdisplay -s ${VGNAME} &> /dev/null ; then # if exist + echo "...Volume group ${VGNAME} already exist. Skipped to create. No problem." else - # Zap existing partition table - echo "...Erase partition table of ${DEV}." - dd if=/dev/zero of=${DEV} bs=512 count=1 - # Create MBR and allocate max storage for Linux partition - echo "...Create a Linux partition on ${DEV} with MBR." - sfdisk ${DEV} <&2 + ***** ERROR : Logical volume "${VGNAME}-${LVROOTNAME}" already exists. ***** + Check LVROOTNAME environment variable in config.txt. -# ----- Open the LUKS partition ----- -# Open the crypt partition. -echo "...Open a crypt partition ${DEV}${CRYPTPARTITION} as \"${CRYPTPARTNAME}\"" -printf %s "${PASSPHRASE}" | cryptsetup open -d - "${DEV}${CRYPTPARTITION}" ${CRYPTPARTNAME} + Installation terminated. + HEREDOC + return 1 + else + echo "...Create logical volume \"${LVROOTNAME}\" on \"${VGNAME}\"." + lvcreate -l ${LVROOTSIZE} -n ${LVROOTNAME} ${VGNAME} + fi # if the root volun already exist -# Check whether successful open. If mapped, it is successful. -if [ ! -e /dev/mapper/${CRYPTPARTNAME} ] ; then - cat <&2 -***** ERROR : Cannot open LUKS volume "${CRYPTPARTNAME}" on ${DEV}${CRYPTPARTITION}. ***** -Check passphrase and config.txt - -Installation terminated. -HEREDOC - return 1 -fi # if crypt volume is unable to open - -# ----- Configure the LVM in LUKS volume ----- -# Check volume group ${VGNAME} exist or not -if vgdisplay -s ${VGNAME} &> /dev/null ; then # if exist - echo "...Volume group ${VGNAME} already exist. Skipped to create. No problem." -else - echo "...Initialize a physical volume on \"${CRYPTPARTNAME}\"" - pvcreate /dev/mapper/${CRYPTPARTNAME} - echo "...And then create Volume group \"${VGNAME}\"." - vgcreate ${VGNAME} /dev/mapper/${CRYPTPARTNAME} -fi # if /dev/volume-groupt exist - -# Create a SWAP Logical Volume on VG, if it doesn't exist -if [ -e /dev/mapper/${VGNAME}-${LVSWAPNAME} ] ; then - echo "...Swap volume already exist. Skipped to create. No problem." -else - echo "...Create logical volume \"${LVSWAPNAME}\" on \"${VGNAME}\"." - lvcreate -L ${LVSWAPSIZE} -n ${LVSWAPNAME} ${VGNAME} -fi # if /dev/mapper/swap volume already exit. - -# Create a ROOT Logical Volume on VG. -if [ -e /dev/mapper/${VGNAME}-${LVROOTNAME} ] ; then - cat <&2 -***** ERROR : Logical volume "${VGNAME}-${LVROOTNAME}" already exists. ***** -Check LVROOTNAME environment variable in config.txt. - -Installation terminated. -HEREDOC - return 1 -else - echo "...Create logical volume \"${LVROOTNAME}\" on \"${VGNAME}\"." - lvcreate -l ${LVROOTSIZE} -n ${LVROOTNAME} ${VGNAME} -fi # if the root volun already exist - -# successful return -return 0 + # successful return + return 0 } diff --git a/script/ubuntu-kaiten-yaki.sh b/script/ubuntu-kaiten-yaki.sh index 54d4192..a34928e 100644 --- a/script/ubuntu-kaiten-yaki.sh +++ b/script/ubuntu-kaiten-yaki.sh @@ -1,162 +1,170 @@ #!/bin/bash -u -# Load configuration parameter -source config.sh +function main() { + # Load configuration parameter + source config.sh -# Load functions -source common/confirmation.sh -source common/preinstall.sh -source common/parainstall.sh -source common/parainstall_msg.sh + # Load functions + source common/confirmation.sh + source common/preinstall.sh + source common/parainstall.sh + source common/parainstall_msg.sh -# Varidate whether script is executed as sourced or not -(return 0 2>/dev/null) && sourced=1 || sourced=0 -if [ $sourced -eq 0 ] ; then - cat <&2 -***** ERROR : Must execute as "sourced" ***** -Execute as following : -source ubuntu-kaiten-yaki.sh + # Varidate whether script is executed as sourced or not + (return 0 2>/dev/null) && sourced=1 || sourced=0 + if [ $sourced -eq 0 ] ; then + cat <<- HEREDOC 1>&2 + ***** ERROR : Must execute as "sourced" ***** + Execute as following : + source ubuntu-kaiten-yaki.sh -Installation terminated. -HEREDOC - exit # use "exit" instead of "return", if not "sourced" execusion -fi # "sourced" validation + Installation terminated. + HEREDOC + exit # use "exit" instead of "return", if not "sourced" execusion + fi # "sourced" validation -# This is the mount point of the install target. -export TARGETMOUNTPOINT="/target" -# 1 : Show message during GUI/TUI installer, 0 : Do not show. -export PARAINSTMSG=1 + # This is the mount point of the install target. + export TARGETMOUNTPOINT="/target" + # 1 : Show message during GUI/TUI installer, 0 : Do not show. + export PARAINSTMSG=1 -# Distribution check -if ! uname -a | grep ubuntu -i > /dev/null ; then # "Ubuntu" is not found in the OS name. - echo "*******************************************************************************" - uname -a - cat <&2 + # Distribution check + if ! uname -a | grep ubuntu -i > /dev/null ; then # "Ubuntu" is not found in the OS name. + echo "*******************************************************************************" + uname -a + cat <<- HEREDOC + ******************************************************************************* + This system seems to be not Ubuntu, while this script is dediated to the Ubuntu. + Are you sure you want to run this script? [Y/N] + HEREDOC + read YESNO + if [ ${YESNO} != "Y" -a ${YESNO} != "y" ] ; then + cat <<- HEREDOC 1>&2 -Installation terminated. -HEREDOC - return - fi # if YES + Installation terminated. + HEREDOC + return 1 + fi # if YES -fi # "Ubuntu" is not found in the OS name. + fi # "Ubuntu" is not found in the OS name. -# ******************************************************************************* -# Confirmation before installation -# ******************************************************************************* + # ******************************************************************************* + # Confirmation before installation + # ******************************************************************************* -# Common part of the parameter confirmation -if ! confirmation ; then - return 1 -fi + # Common part of the parameter confirmation + if ! confirmation ; then + return 1 + fi -# ******************************************************************************* -# Pre-install stage -# ******************************************************************************* + # ******************************************************************************* + # Pre-install stage + # ******************************************************************************* -# Common part of the pre-install stage -if ! pre_install ; then - return 1 -fi + # Common part of the pre-install stage + if ! pre_install ; then + return 1 + fi -# ******************************************************************************* -# Para-install stage -# ******************************************************************************* + # ******************************************************************************* + # Para-install stage + # ******************************************************************************* -# Show common message to let the operator focus on the critical part -parainstall_msg + # Show common message to let the operator focus on the critical part + parainstall_msg -# Ubuntu dependent message -cat <> /etc/crypttab + # Add the LUKS volume information to /etc/crypttab to decrypt by kernel. + echo "...Add LUKS volume info to /etc/crypttab." + echo "${CRYPTPARTNAME} UUID=$(blkid -s UUID -o value ${DEV}${CRYPTPARTITION}) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab -# Putting key file into the ramfs initial image -echo "...Register key file to the ramfs" -echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook -echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf + # Putting key file into the ramfs initial image + echo "...Register key file to the ramfs" + echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook + echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf -# Finally, update the ramfs initial image with the key file. -echo "...Upadte initramfs." -update-initramfs -uk all + # Finally, update the ramfs initial image with the key file. + echo "...Upadte initramfs." + update-initramfs -uk all -# Leave chroot -HEREDOC + # Leave chroot + HEREDOC -# Unmount all -echo "...Unmount all." -umount -R ${TARGETMOUNTPOINT} + # Unmount all + echo "...Unmount all." + umount -R ${TARGETMOUNTPOINT} -# Finishing message -cat </dev/null) && sourced=1 || sourced=0 -if [ $sourced -eq 0 ] ; then - cat <&2 -***** ERROR : Must execute as "sourced" ***** -Execute as following : -source void-kaiten-yaki.sh + # Varidate whether script is executed as sourced or not + (return 0 2>/dev/null) && sourced=1 || sourced=0 + if [ $sourced -eq 0 ] ; then + cat <<- HEREDOC 1>&2 + ***** ERROR : Must execute as "sourced" ***** + Execute as following : + source void-kaiten-yaki.sh -Installation terminated. -HEREDOC - exit # use "exit" instead of "return", if not "sourced" execusion -fi # "sourced" validation + Installation terminated. + HEREDOC + exit # use "exit" instead of "return", if not "sourced" execusion + fi # "sourced" validation -# This is the mount point of the install target. -export TARGETMOUNTPOINT="/mnt/target" -# 1 : Show message during GUI/TUI installer, 0 : Do not show. -export PARAINSTMSG=0 + # This is the mount point of the install target. + export TARGETMOUNTPOINT="/mnt/target" + # 1 : Show message during GUI/TUI installer, 0 : Do not show. + export PARAINSTMSG=0 -# Distribution check -if ! uname -a | grep void -i > /dev/null ; then # "Void" is not found in the OS name. - echo "*********************************************************************************" - uname -a - cat <&2 + # Distribution check + if ! uname -a | grep void -i > /dev/null ; then # "Void" is not found in the OS name. + echo "*********************************************************************************" + uname -a + cat <<- HEREDOC + ********************************************************************************* + This system seems to be not Void Linux, while this script is dediated to the Void Linux. + Are you sure you want to run this script for installation? [Y/N] + HEREDOC + read YESNO + if [ ${YESNO} != "Y" -a ${YESNO} != "y" ] ; then + cat <<- HEREDOC 1>&2 -Installation terminated. -HEREDOC - return - fi # if YES + Installation terminated. + HEREDOC + return + fi # if YES -fi # "Void" is not found in the OS name. + fi # "Void" is not found in the OS name. -# ******************************************************************************* -# Confirmation before installation -# ******************************************************************************* + # ******************************************************************************* + # Confirmation before installation + # ******************************************************************************* -# Common part of the parameter confirmation -if ! confirmation ; then - return 1 -fi + # Common part of the parameter confirmation + if ! confirmation ; then + return 1 + fi -# ******************************************************************************* -# Pre-install stage -# ******************************************************************************* + # ******************************************************************************* + # Pre-install stage + # ******************************************************************************* -# Install essential packages. -xbps-install -y -Su xbps gptfdisk + # Install essential packages. + xbps-install -y -Su xbps gptfdisk -# Common part of the pre-install stage -if ! pre_install ; then - return 1 -fi + # Common part of the pre-install stage + if ! pre_install ; then + return 1 + fi -# ADD "rd.auto=1 cryptdevice=/dev/sda2:${LUKS_NAME} root=/dev/mapper/${VGNAME}-${ROOTNAME}" to GRUB. -# This is magical part. I have not understood why this is required. -# Anyway, without this modification, Void Linux doesn't boot. -# Refer https://wiki.voidlinux.org/Install_LVM_LUKS#Installation_using_void-installer -echo "...Modify /etc/default/grub." -sed -i "s#loglevel=4#loglevel=4 rd.auto=1 cryptdevice=/dev/sda2:${LUKS_NAME} root=/dev/mapper/${VGNAME}-${LVROOTNAME}#" /etc/default/grub + # ADD "rd.auto=1 cryptdevice=/dev/sda2:${LUKS_NAME} root=/dev/mapper/${VGNAME}-${ROOTNAME}" to GRUB. + # This is magical part. I have not understood why this is required. + # Anyway, without this modification, Void Linux doesn't boot. + # Refer https://wiki.voidlinux.org/Install_LVM_LUKS#Installation_using_void-installer + echo "...Modify /etc/default/grub." + sed -i "s#loglevel=4#loglevel=4 rd.auto=1 cryptdevice=/dev/sda2:${LUKS_NAME} root=/dev/mapper/${VGNAME}-${LVROOTNAME}#" /etc/default/grub -# ******************************************************************************* -# Para-install stage -# ******************************************************************************* + # ******************************************************************************* + # Para-install stage + # ******************************************************************************* -# Show common message to let the operator focus on the critical part -parainstall_msg -# Ubuntu dependent message -cat <> /etc/crypttab + # Add the LUKS volume information to /etc/crypttab to decrypt by kernel. + echo "...Add LUKS volume info to /etc/crypttab." + echo "${CRYPTPARTNAME} UUID=$(blkid -s UUID -o value ${DEV}${CRYPTPARTITION}) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab -# Putting key file into the ramfs initial image -echo "...Register key file to the ramfs" -echo 'install_items+=" /etc/luks/boot_os.keyfile /etc/crypttab " ' > /etc/dracut.conf.d/10-crypt.conf + # Putting key file into the ramfs initial image + echo "...Register key file to the ramfs" + echo 'install_items+=" /etc/luks/boot_os.keyfile /etc/crypttab " ' > /etc/dracut.conf.d/10-crypt.conf -# Finally, update the ramfs initial image with the key file. -echo "...Upadte initramfs." -xbps-reconfigure -fa -echo "...grub-mkconfig." -grub-mkconfig -o /boot/grub/grub.cfg -echo "...update-grub." -update-grub + # Finally, update the ramfs initial image with the key file. + echo "...Upadte initramfs." + xbps-reconfigure -fa + echo "...grub-mkconfig." + grub-mkconfig -o /boot/grub/grub.cfg + echo "...update-grub." + update-grub -# Leave chroot -HEREDOC + # Leave chroot + HEREDOC -# Unmount all -echo "...Unmount all." -umount -R ${TARGETMOUNTPOINT} + # Unmount all + echo "...Unmount all." + umount -R ${TARGETMOUNTPOINT} -# Finishing message -cat <