summaryrefslogtreecommitdiff
path: root/iso
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2023-01-15 21:24:17 +0000
committerdavidovski <david@davidovski.xyz>2023-01-15 21:24:17 +0000
commitc42abbd0f192a5d4a6a58fd901f45d2c06b018b5 (patch)
tree97d66bc36097e64e71c4b34ec28af39776f04427 /iso
parentc74352c21a8ece4fc5c4e33afb13947b1ff82e44 (diff)
Add installer to isov1.7.6
Diffstat (limited to 'iso')
-rwxr-xr-xiso/install.sh139
-rwxr-xr-xiso/mkiso.sh93
-rw-r--r--iso/root/.profile9
-rwxr-xr-xiso/root/installer.sh313
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