215 lines
6 KiB
Bash
215 lines
6 KiB
Bash
|
#!/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 $*
|