diff options
| author | davidovski <david@davidovski.xyz> | 2023-01-15 21:24:17 +0000 | 
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2023-01-15 21:24:17 +0000 | 
| commit | c42abbd0f192a5d4a6a58fd901f45d2c06b018b5 (patch) | |
| tree | 97d66bc36097e64e71c4b34ec28af39776f04427 /iso | |
| parent | c74352c21a8ece4fc5c4e33afb13947b1ff82e44 (diff) | |
Add installer to isov1.7.6
Diffstat (limited to 'iso')
| -rwxr-xr-x | iso/install.sh | 139 | ||||
| -rwxr-xr-x | iso/mkiso.sh | 93 | ||||
| -rw-r--r-- | iso/root/.profile | 9 | ||||
| -rwxr-xr-x | iso/root/installer.sh | 313 | 
4 files changed, 554 insertions, 0 deletions
| diff --git a/iso/install.sh b/iso/install.sh new file mode 100755 index 0000000..89ee11b --- /dev/null +++ b/iso/install.sh @@ -0,0 +1,139 @@ +#!/bin/sh + +default_packages="base linux-libre xipkg dracut grub bash" +additional_packages="doas neofetch vim networkmanager" +default_key="davidovski https://xi.davidovski.xyz/keychain/xi.pub" + +XIPKG="/usr/bin/xi" +XIFLAGS="-ylu" +TMPDIR=/tmp +SYSROOT=$1 + +umask 0022 + +[ ! -e $XIPKG ] && { +    git clone https://xi.davidovski.xyz/git/xiutils.git $TMPDIR/xiutils +    make && make install + +    git clone https://xi.davidovski.xyz/git/xipkg.git $TMPDIR/xipkg +    make && make install +} + +echo "Please make sure that you have correctly formatted any partitions and mounted them as desired under $SYSROOT" + +[ $# -eq 0 ] && echo "Please specify where you would like to instal the system" && exit 1 + +[ -e $SYSROOT ] && { +    printf "Remove existing system at $SYSROOT? [Y/n] " +    read response +    [ "$response" != "n" ] && rm -rf $SYSROOT && echo "removed $SYSROOT" +} + +$XIPKG $XIFLAGS sync +mkdir -p $SYSROOT +$XIPKG $XIFLAGS -r $SYSROOT bootstrap  +mkdir -p $SYSROOT +$XIPKG $XIFLAGS -r $SYSROOT install $default_packages +$XIPKG $XIFLAGS -r $SYSROOT keyimport $default_key + +configuring_users () { +    echo "Setting root password: " +    xichroot $SYSROOT passwd  + +    echo +    echo "Creating user" +    read -p "Enter username: " username +    xichroot $SYSROOT useradd -s /bin/bash -m $username +    xichroot $SYSROOT passwd $username +} + +configuring_system () { +    read -p "Enter system hostname: " hostname + +    echo $hostname > $SYSROOT/etc/hostname + +    cat > $SYSROOT/etc/hosts << EOF +127.0.0.1   localhost +::1         localhost +127.0.1.1   $hostname.local $hostname +EOF +} + +configuring_nameservers () { +    echo "Configuring nameservers..." + +    cat > $SYSROOT/etc/resolv.conf << EOF +nameserver 80.80.80.80 +EOF +} + +generating_fstab () { +    echo "Generating fstab..." +    xichroot $SYSROOT genfstab -U / > $SYSROOT/etc/fstab +} + +building_initramfs () { +    echo "Building initramfs..." +    kernel_version=$(ls $SYSROOT/usr/lib/modules | tail -1) +    xichroot $SYSROOT mkdir /var/tmp +    xichroot $SYSROOT dracut --kver $kernel_version 2>$TMPDIR/dracut.log > $TMPDIR/dracut.log +} + +installing_bootloader () { +    read -p "Install Grub? [y]" r +    [ "$r" != "n" ] && { +        opts="--target=x86_64-efi" +     +        xichroot $SYSROOT lsblk +        read -p "Enter efi directory: " efi_part +        opts="$opts --efi-directory=$efi_part" + +        read -p "Removable system? [y]" r +        [ "$r" != "n" ] && { +            opts="$opts --removable" +        } + +        xichroot $SYSROOT grub-install $opts +        xichroot $SYSROOT grub-mkconfig -o /boot/grub/grub.cfg +    } +} + +fixing_permissions () { +    xichroot $SYSROOT chmod 755 / +    xichroot $SYSROOT chmod 755 /usr +    xichroot $SYSROOT chmod 755 /usr/bin +    xichroot $SYSROOT chmod 755 /usr/lib +} + +downloading_additional_packages () { +    echo "Syncing repos..." +    xichroot $SYSROOT xi sync +    echo "Downloading additional packages..." +    xi -r $SYSROOT $XIFLAGS install $additional_packages +} + +steps=" +configuring_nameservers +generating_fstab +building_initramfs +configuring_system +installing_bootloader +configuring_users +fixing_permissions +downloading_additional_packages +" + +len=$(echo "$steps" | wc -l) +i=0 + +echo "Press [return] to enter configuration" +read response + +for step in $steps; do +    i=$((i+1)) +    clear +    hbar -t -T "$(echo $step | sed "s/_/ /g")" $i $len +    $step +done + +echo "Installation finished!" diff --git a/iso/mkiso.sh b/iso/mkiso.sh new file mode 100755 index 0000000..925c52a --- /dev/null +++ b/iso/mkiso.sh @@ -0,0 +1,93 @@ +#!/bin/sh + +ISO_NAME="xilinux-$(date -u +%Y%m%d)" +ISO_LABEL="xilinux" +PUBLISHER="davidovski" +SYSLINUX_VER=6.04-pre1 + +XI_ARGS="" + +chroot=/tmp/chroot +isoroot=/tmp/iso +iso_pkgs="linux linux-firmware base dracut grub bash xipkg squashfs-tools lvm2 cryptsetup networkmanager stty xitui" + +create_basesystem () { +    xi $XI_ARGS sync +    xi $XI_ARGS -r "$chroot" bootstrap +    xi $XI_ARGS -r "$chroot" install "$iso_pkgs" + +    cat > $chroot/etc/resolv.conf << EOF +nameserver 80.80.80.80 +EOF + +    hostname=xilinux +    echo xilinux > $chroot/etc/hostname + +    cat > $chroot/etc/hosts << EOF +127.0.0.1   localhost +::1         localhost +127.0.1.1   $hostname.local $hostname +EOF + +    cp -r ./root $chroot/ + +    cat > $chroot/etc/conf.d/agetty << EOF +agetty_options="--autologin root --noclear" +EOF +     +} + +build_initramfs () { +    kernel_version=$(ls $chroot/usr/lib/modules | tail -1) +    mkdir -p "$chroot"/var/tmp +    xichroot "$chroot" dracut --nomdadmconf --nolvmconf --xz --add dmsquash-live --add bash --add convertfs --add pollcdrom --force --kver $kernel_version +} + +create_isoroot() { +    mkdir -p $isoroot/ +    cp $chroot/boot/vmlinuz-** $isoroot/vmlinuz +    cp $chroot/boot/initramfs-** $isoroot/initrd.img + +    mkdir -p $isoroot/isolinux +} + +install_syslinux () { +    curl https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/Testing/$(echo $SYSLINUX_VER | cut -d'-' -f1)/syslinux-$SYSLINUX_VER.tar.xz > syslinux-$SYSLINUX_VER.tar.xz + +    tar -C /tmp -xf syslinux-$SYSLINUX_VER.tar.xz +    #cp syslinux-$SYSLINUX_VER +    cp /tmp/syslinux-$SYSLINUX_VER/bios/core/isolinux.bin $isoroot/isolinux/isolinux.bin +    cp /tmp/syslinux-$SYSLINUX_VER/bios/com32/elflink/ldlinux/ldlinux.c32 $isoroot/isolinux/ldlinux.c32 +} + +build_iso () { +    cat > $isoroot/isolinux/isolinux.cfg << EOF +default 1 + +label 1 +    kernel /vmlinuz +    append initrd=/initrd.img splash console=tty0 console=ttyS0,9600 root=live:CDLABEL=xilinux rd.live.dir=/ rd.live.squashimg=filesystem.squashfs rd.live.debug=1 quiet + +EOF + +    mksquashfs $chroot $isoroot/filesystem.squashfs -noappend -no-progress -e "/proc/*" -e "/dev/*" -e "/sys/*" +    genisoimage -r -V "$ISO_LABEL" -cache-inodes -J -l \ +        -allow-limited-size -udf \ +        -b isolinux/isolinux.bin -c isolinux/boot.cat \ +        -no-emul-boot -boot-load-size 4 -boot-info-table \ +        -p "$PUBLISHER <xi@davidovski.xyz>" \ +        -A "$ISO_LABEL" -o "$ISO_NAME.iso" $isoroot +} + + +[ "$#" = 0 ] && { +    create_basesystem +    build_initramfs +    create_isoroot +    install_syslinux +    build_iso +} || { +    for task in $*; do +        $task +    done +} diff --git a/iso/root/.profile b/iso/root/.profile new file mode 100644 index 0000000..a15c12b --- /dev/null +++ b/iso/root/.profile @@ -0,0 +1,9 @@ +splash () { +    clear +    echo "Welcome to xilinux" +} + +[ "$(fgconsole 2>/dev/null)" = "1" ] && exec $HOME/installer.sh + +splash + diff --git a/iso/root/installer.sh b/iso/root/installer.sh new file mode 100755 index 0000000..ed20bf9 --- /dev/null +++ b/iso/root/installer.sh @@ -0,0 +1,313 @@ +#!/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 tzdata" +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!" +} + +welcome_splash () { +    t_dialogue "Welcome to the xilinux installer" "<Continue>" + +} + + +partition_disks () { +    # need to use eval to work with spaces in line names +    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 () { +    [ ! -d $sysroot/etc ] && mkdir $sysroot/etc +    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="welcome_splash +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 | 
