diff options
| author | davidovski <david@davidovski.xyz> | 2022-05-15 21:55:54 +0100 | 
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2022-05-15 21:55:54 +0100 | 
| commit | 038a56d555833d2db3af772b890a8fc8c283120e (patch) | |
| tree | acf67de79326127d58dd5be681525de39f1836dd /scripts | |
| parent | a15d9c48b3677da48cba37d211fad9f4881f5bb8 (diff) | |
added installer tui
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/installer.sh | 305 | 
1 files changed, 305 insertions, 0 deletions
| diff --git a/scripts/installer.sh b/scripts/installer.sh new file mode 100755 index 0000000..247a565 --- /dev/null +++ b/scripts/installer.sh @@ -0,0 +1,305 @@ +#!/bin/sh + +. /usr/lib/xitui.sh +. /usr/lib/glyphs.sh +. /usr/lib/colors.sh + +logfile="installer.log" +default_packages="base linux xipkg dracut grub mksh sudo neofetch vim" +additional_services="networkmanager xorg iwd" + +list_disks () { +    lsblk -r | while read -r line; do +        set - $line +        [ "$6" = "disk" ] && { +            printf '"/dev/%s (%s)" ' $1 $4 +        } +    done +} + +list_partitions () { +    ls $1* +    echo "none" +} + +partition_disk () { +    t_msg "Partitioning $1..." +    export EFI_PART=$11 +    export SYS_PART=$12 +    export SWAP_PART=none +    echo " +    unit: sectors +    sector-size: 512 + +    type=ef, start=2048, size=210000 +    type=83 +    " | sfdisk $1 >$logfile && +    t_msg "Partitioned $1!" +} + +partition_disks () { +    eval "t_radio 'Select install disk' $(list_disks)" +    local selected=$(echo $T_RESULT | cut -d' ' -f1) + +    t_yesno "${BLUE}Auto-partition $selected disk?\n${RED}(Warning: existing data will be overwritten)" &&  { +        partition_disk $selected || return 1 +    } || { +        cfdisk $selected && { +            t_radio 'Select primary system partition' $(list_partitions $selected) +            export SYS_PART=$T_RESULT + +            t_radio 'Select efi system partition' $(list_partitions $selected) +            export EFI_PART=$T_RESULT + +            t_radio 'Select swap partition' $(list_partitions $selected) +            export SWAP_PART=$T_RESULT +        } +    } +} + +format_disks () { +    t_msg "Formatting partitions... +${TABCHAR}System Partition +${TABCHAR}EFI Partition +" + + +    [ -b "$SYS_PART" ] && mkfs.ext4 $SYS_PART > $logfile +    t_msg "Formatting partitions... +${GREEN}${TABCHAR}System partition ${CHECKMARK} (ext4) +${TABCHAR}EFI Partition +" + +    [ -b "$EFI_PART" ] && mkfs.fat -F 32 $EFI_PART > $logfile +    t_msg "Formatting partitions... +${GREEN}${TABCHAR}System partition ${CHECKMARK} (ext4) +${GREEN}${TABCHAR}EFI Partition ${CHECKMARK} (fat32) +" + +    [ -b "$SWAP_PART" ] && mkswap $SWAP_PART > $logfile +    return 0 +} + +mount_disks () { +    t_msg "Mounting disks..." +    export sysroot=/xilinux.mnt +    export efi_mntpoint=/xilinux.mnt/boot/efi + +    [ ! -f "$sysroot" ] && mkdir -p $sysroot + +    [ -b "$SYS_PART" ] && { +        mount $SYS_PART $sysroot +    } ||  { +        t_prompt "${RED}No system partition is available!" +        return 1 +    } + +    [ -b "$EFI_PART" ] && { +        mkdir -p $efi_mntpoint +        mount $EFI_PART $efi_mntpoint +    } + +    [ -b "$SWAP_PART" ] && swapon $SWAP_PART +    return 0 +} + +bootstrap_system () { +    t_msg "Creating directories..." +    xi -vy -r $sysroot bootstrap >> $logfile +} + +install_base () { +    t_msg "Installing packages..." +    xi -vy -r $sysroot sync >> $logfile +    xi -vy -r $sysroot install $default_packages >> $logfile +} + +copy_resolvconf () { +    cp /etc/resolv.conf $sysroot/etc/resolv.conf +} + +sync_system () { +    t_msg "Syncing system..." +    xichroot $sysroot xi sync >> $logfile +} + +generate_fstab () { +    t_msg "Generating fstab..." +    xichroot $sysroot genfstab -U / > $sysroot/etc/fstab +} + +build_initramfs () { +    t_msg "Build initramfs" + +    kernel_version=$(ls $SYSROOT/usr/lib/modules | tail -1) + +    mkdir -p $sysroot/var/tmp +    xichroot $sysroot dracut --kver $kernel_version 2>&1 >> $logfile +} + +install_grub () { +    t_yesno "Install grub?" && { +        target="x86_64-efi" +        opts="--target=$target --efi-directory=$efi_mntpoint" + +        t_yesno "Install as removable system?" && opts="$opts --removable" + +        t_msg "Installing grub for target $target..." +        xichrooot $sysroot grub-install $opts >> $logfile + +        t_msg "Creating grub configuration..." +        xichrooot $sysroot grub-mkconfig -o /boot/grub/grub.cfg +    } || return 0 +} + +enter_password () { +    export password="" +    t_input_hidden "Enter Password:" +    passwd=$T_RESULT +    t_input_hidden "Confirm Password:" +    local cpasswd=$T_RESULT + +    [ "$passwd" = "$cpasswd" ] || { +        t_prompt "Passwords do not match!" +        enter_password +    } + +} + +configure_users () { +    t_input_cmd "xichroot $sysroot passwd" "Enter root password" + +    t_input "Enter username:" +    local username=$T_RESULT +    enter_password + +    t_msg "Creating user..." +    xichroot $sysroot useradd -s /bin/mksh -m $username +    printf "$passwd\n$passwd\n" | xichroot $sysroot passwd $username + +    t_yesno "Allow this user to use sudo?" && { +        echo "$username ALL=(ALL:ALL) ALL" >> $sysroot/etc/sudoers +    } + +    t_yesno "Set a password for the root user?" && { +        enter_password +        printf "$passwd\n$passwd\n" | xichroot $sysroot passwd +    } + +    return 0 +} + +fix_permissions () { +    xichroot $sysroot chmod 755 / +    xichroot $sysroot chmod 755 /usr +    xichroot $sysroot chmod 755 /usr/bin +    xichroot $sysroot chmod 755 /usr/lib +} + +set_timezone () { +    zoneinfo="$sysroot/usr/share/zoneinfo" +    cp  $zoneinfo/$1 $sysroot/etc/localtime +    echo "$1" > /etc/timezone + +    t_cls_ptrn +    t_prompt "Successfully set timezone!" +} + +select_timezone () { +    t_clean_ptrn +    zoneinfo="$sysroot/usr/share/zoneinfo" +    selection=$1 +    t_paged_radio "Select your timezone: $selection" $(ls "$zoneinfo/$selection") "more..." +    [] +    selection="$selection/$T_RESULT" + +    [ -f "$zoneinfo/$selection" ] && { + +        t_yesno "Use $selection as your system timezone? " && { +            set_timezone $selection +        } || { +            select_timezone +        } +        return 0 +    } + +    [ -d "$zoneinfo/$selection" ] && { +        select_timezone $selection +    } || { +        t_prompt "The timezone you entered does not exist!" +        select_timezone +    } +} + +install_additional () { +    t_check "Install and configure additional services: " $additional_services +    local services=$T_RESULT + +    for service in $services; do +        service_$service +    done +} + +service_networkmanager () { +    t_msg "Installing NetworkManager..." +    { +        xi -ly -r $sysroot install networkmanager  +        xichroot $sysroot rc-update add networkmanager +    } >> $logfile +} + +service_iwd () { +    t_msg "Installing iwd..." +    { +        xi -ly -r $sysroot install iwd  +        xichroot $sysroot rc-update add iwd +    } >> $logfile +} + +service_xorg () { +    t_msg "Installing xorg..." +    xi -r $sysroot install base-xorg base-fonts >> $logfile +    t_check "Select video drivers:" $(xi search xd86-video- | cut -f2 -d/) +    [ "${#T_RESULT}" != "0" ] && xi -r $sysroot install $T_RESULT +    t_prompt "Installed basic xorg functionality +TODO: preconfigured window managers, for now you need to configure them yourself" +} + + +umount_disks () { +    umount -R $sysroot +    [ -b "$SWAP_PART" ] && swapoff $SWAP_PART +    return 0 +} + +t_init +t_no_cur +checkroot  + +steps="partition_disks +format_disks +mount_disks +bootstrap_system +install_base +copy_resolvconf +sync_system +generate_fstab +build_initramfs +configure_users +fix_permissions +select_timezone +install_additional +umount_disks +" + +for step in $steps; do +    t_cls_ptrn +    $step 2>> $logfile || { +        t_prompt "${RED}An error occured!" +        t_clean +        exit 1 +    } +done +t_prompt "Completed install!" + +t_clean | 
