214 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| #    linux-deployment-scripts
 | |
| #    Copyright (C) 2024  VM-Experiments
 | |
| #
 | |
| #    This program is free software: you can redistribute it and/or modify
 | |
| #    it under the terms of the GNU General Public License as published by
 | |
| #    the Free Software Foundation, either version 3 of the License, or
 | |
| #    (at your option) any later version.
 | |
| #
 | |
| #    This program is distributed in the hope that it will be useful,
 | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| #    GNU General Public License for more details.
 | |
| #
 | |
| #    You should have received a copy of the GNU General Public License
 | |
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | |
| 
 | |
| # hardcoded paths
 | |
| downloads="downloads/"
 | |
| output="output/"
 | |
| chroot="chroot/"
 | |
| resources="resources/"
 | |
| 
 | |
| # hardcoded package lists
 | |
| ubuntu_server_packages="nginx grub-pc linux-image-generic"
 | |
| ubuntu_client_packages="grub-pc linux-image-generic"
 | |
| ubuntu_client_gnome_packages="ubuntu-desktop"
 | |
| ubuntu_client_kde_packages="kubuntu-desktop"
 | |
| installer_packages="linux-image-generic grub-pc parted tar dosfstools util-linux e2fsprogs arch-install-scripts"
 | |
| 
 | |
| # hardcoded links
 | |
| noble_amd64="https://cdimage.ubuntu.com/ubuntu-base/noble/daily/current/noble-base-amd64.tar.gz"
 | |
| noble_amd64_name="noble-base-amd64.tar.gz"
 | |
| 
 | |
| jammy_amd64="https://cdimage.ubuntu.com/ubuntu-base/jammy/daily/current/jammy-base-amd64.tar.gz"
 | |
| jammy_amd64_name="jammy-base-amd64.tar.gz"
 | |
| 
 | |
| # hardcoded names
 | |
| ubuntu_noble_server_output="noble-server-amd64"
 | |
| ubuntu_noble_ubuntu_output="noble-ubuntu-amd64"
 | |
| ubuntu_noble_kubuntu_output="noble-kubuntu-amd64"
 | |
| 
 | |
| ubuntu_jammy_server_output="jammy-server-amd64"
 | |
| ubuntu_jammy_ubuntu_output="jammy-ubuntu-amd64"
 | |
| ubuntu_jammy_kubuntu_output="jammy-kubuntu-amd64"
 | |
| 
 | |
| # creates a menu
 | |
| menu() {
 | |
|     iter=1
 | |
|     echo "$1"
 | |
|     echo ""
 | |
|     shift
 | |
|     for arg in "$@"; do
 | |
|         echo "$iter) $arg"
 | |
|         iter=$((iter + 1))
 | |
|     done
 | |
| 
 | |
|     read option
 | |
| }
 | |
| 
 | |
| # chroot associated functions
 | |
| prepare_chroot() {
 | |
|     sudo mount --bind /dev "$chroot/dev"
 | |
|     sudo mount --bind /proc "$chroot/proc"
 | |
|     sudo mount --bind /sys "$chroot/sys"
 | |
|     sudo cp /etc/resolv.conf "$chroot/etc/"
 | |
| 
 | |
| }
 | |
| 
 | |
| do_chroot_command() {
 | |
|     sudo chroot "$chroot" /bin/bash -c "$*"
 | |
| }
 | |
| 
 | |
| do_chroot() {
 | |
|     prepare_chroot "$chroot"
 | |
|     sudo chroot "$chroot"
 | |
|     close_chroot "$chroot"
 | |
| }
 | |
| 
 | |
| close_chroot() {
 | |
|     sudo umount "$chroot/dev"
 | |
|     sudo umount "$chroot/proc"
 | |
|     sudo umount "$chroot/sys"
 | |
| }
 | |
| 
 | |
| # handle rootfs image from internet
 | |
| rootfs_downloader() {
 | |
|     cd "$downloads"
 | |
|     wget -nc "$1"
 | |
|     sudo tar -xzf "$2" -C "../$chroot"
 | |
|     cd ..
 | |
| }
 | |
| 
 | |
| rootfs_creator() {
 | |
|     cd $output
 | |
|     sudo tar -czf "$1" -C "../$chroot" .
 | |
|     cd ..
 | |
| }
 | |
| 
 | |
| # packaging rootfs
 | |
| rootfs_package() {
 | |
|     infile="$1.tar.gz"
 | |
|     outfile="$1.iso"
 | |
| 
 | |
|     close_chroot
 | |
|     sudo rm -rf "$chroot"
 | |
|     sudo mkdir "$chroot"
 | |
| 
 | |
|     rootfs_downloader "$noble_amd64" "$noble_amd64_name"
 | |
|     sudo cp "$infile" "$chroot/rootfs.tar.gz"
 | |
| 
 | |
|     prepare_chroot
 | |
|     do_chroot_command "apt update"
 | |
|     do_chroot_command "DEBIAN_FRONTEND=noninteractive apt install -y $installer_packages"
 | |
|     do_chroot_command "mkdir -p /etc/systemd/system/getty@tty1.service.d/"
 | |
|     do_chroot_command "touch /etc/systemd/system/getty@tty1.service.d/override.conf"
 | |
|     do_chroot_command "echo -e '[Service]\nExecStart=\nExecStart=/sbin/agetty --noclear --autologin root %I \$TERM' | tee /etc/systemd/system/getty@tty1.service.d/override.conf"
 | |
|     do_chroot_command "systemctl daemon-reload"
 | |
|     do_chroot_command "systemctl enable getty@tty1.service"
 | |
|     close_chroot
 | |
| 
 | |
|     sudo cp "$resources/grub.cfg" "$chroot/boot/grub/grub.cfg"
 | |
|     sudo cp "$resources/install.sh" "$chroot/root"
 | |
|     echo "./install.sh" | sudo tee -a "$chroot/root/.profile"
 | |
|     echo "./install.sh" | sudo tee -a "$chroot/root/.bashrc"
 | |
|     sudo grub2-mkrescue -o "$outfile" "$chroot"
 | |
| }
 | |
| 
 | |
| # distro specific
 | |
| ubuntu_rootfs_prepare() {
 | |
|     rootfs_downloader "$1" "$2"
 | |
|     prepare_chroot
 | |
|     do_chroot_command "apt update -y"
 | |
|     do_chroot_command "apt full-upgrade -y"
 | |
|     do_chroot_command "DEBIAN_FRONTEND=noninteractive apt install -y $3"
 | |
|     close_chroot
 | |
|     rootfs_creator "$4.tar.gz"
 | |
|     rootfs_package "$output$4"
 | |
| }
 | |
| 
 | |
| main() {
 | |
|     mkdir -p "$downloads" "$output"
 | |
|     close_chroot
 | |
|     sudo rm -rf "$chroot"
 | |
|     sudo mkdir "$chroot"
 | |
|     clear
 | |
|     menu "Welcome to the Ubuntu installer creation script. Choose an option." "Ubuntu 24.04" "Ubuntu 22.04"
 | |
| 
 | |
|     case $option in
 | |
|     1)
 | |
|         menu "Choose an option." "Server" "Client"
 | |
| 
 | |
|         case $option in
 | |
|         1)
 | |
|             ubuntu_rootfs_prepare "$noble_amd64" "$noble_amd64_name" "$ubuntu_server_packages" "$ubuntu_noble_server_output"
 | |
|             ;;
 | |
|         2)
 | |
|             menu "Choose an option." "Ubuntu" "Kubuntu"
 | |
| 
 | |
|             case $option in
 | |
|             1)
 | |
|                 ubuntu_rootfs_prepare "$noble_amd64" "$noble_amd64_name" "$ubuntu_client_packages $ubuntu_client_gnome_packages" "$ubuntu_noble_ubuntu_output"
 | |
|                 ;;
 | |
|             2)
 | |
|                 ubuntu_rootfs_prepare "$noble_amd64" "$noble_amd64_name" "$ubuntu_client_packages $ubuntu_client_kde_packages" "$ubuntu_noble_kubuntu_output"
 | |
|                 ;;
 | |
| 
 | |
|             *) ;;
 | |
| 
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|         *) ;;
 | |
| 
 | |
|         esac
 | |
| 
 | |
|         ;;
 | |
| 
 | |
|     2)
 | |
|         menu "Choose an option." "Server" "Client"
 | |
| 
 | |
|         case $option in
 | |
|         1)
 | |
|             ubuntu_rootfs_prepare "$jammy_amd64" "$jammy_amd64_name" "$ubuntu_server_packages" "$ubuntu_jammy_server_output"
 | |
|             ;;
 | |
|         2)
 | |
|             menu "Choose an option." "Ubuntu" "Kubuntu"
 | |
| 
 | |
|             case $option in
 | |
|             1)
 | |
|                 ubuntu_rootfs_prepare "$jammy_amd64" "$jammy_amd64_name" "$ubuntu_client_packages $ubuntu_client_gnome_packages" "$ubuntu_jammy_ubuntu_output"
 | |
|                 ;;
 | |
|             2)
 | |
|                 ubuntu_rootfs_prepare "$jammy_amd64" "$jammy_amd64_name" "$ubuntu_client_packages $ubuntu_client_kde_packages" "$ubuntu_jammy_kubuntu_output"
 | |
|                 ;;
 | |
| 
 | |
|             *) ;;
 | |
| 
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|         *) ;;
 | |
| 
 | |
|         esac
 | |
| 
 | |
|         ;;
 | |
| 
 | |
|     *) ;;
 | |
| 
 | |
|     esac
 | |
| }
 | |
| 
 | |
| main $*
 |