summaryrefslogtreecommitdiff
path: root/archinstall.sh
diff options
context:
space:
mode:
authorxengineering <mail2xengineering@protonmail.com>2019-09-07 11:35:57 +0200
committerxengineering <mail2xengineering@protonmail.com>2019-09-07 11:35:57 +0200
commit1516e382a3106f62487e1c9ea8d174a288cd4144 (patch)
treedaba469ed86a45a808545bc1855878542c63df57 /archinstall.sh
parent4fdc1f73ab4a6dd8227aa702d0c70021c1536b96 (diff)
downloadarchinstall-1516e382a3106f62487e1c9ea8d174a288cd4144.tar
archinstall-1516e382a3106f62487e1c9ea8d174a288cd4144.tar.zst
archinstall-1516e382a3106f62487e1c9ea8d174a288cd4144.zip
Added code.
Diffstat (limited to 'archinstall.sh')
-rw-r--r--archinstall.sh328
1 files changed, 328 insertions, 0 deletions
diff --git a/archinstall.sh b/archinstall.sh
new file mode 100644
index 0000000..32d5795
--- /dev/null
+++ b/archinstall.sh
@@ -0,0 +1,328 @@
+#!/bin/bash
+
+
+# archinstall - A minimal Installation Script for Arch Linux
+# Copyright (C) 2019 xengineering
+
+# 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/>.
+
+
+#################################################################
+# #
+# __ _ _ __ ___| |__ (_)_ __ ___| |_ __ _| | | ___| |__ #
+# / _` | '__/ __| '_ \| | '_ \/ __| __/ _` | | | / __| '_ \ #
+# | (_| | | | (__| | | | | | | \__ \ || (_| | | |_\__ \ | | | #
+# \__,_|_| \___|_| |_|_|_| |_|___/\__\__,_|_|_(_)___/_| |_| #
+# #
+#################################################################
+
+
+# Settings for the Script:
+
+DELAY=0.5
+
+
+# Greetings and settings
+
+cat << EOF
+
+#################################################################
+# #
+# Arch Linux Installation Script #
+# #
+# archinstall Copyright (C) 2019 xengineering #
+# This program comes with ABSOLUTELY NO WARRANTY. #
+# This is free software, and you are welcome to redistribute it #
+# under certain conditions. See #
+# <https://www.gnu.org/licenses/gpl-3.0.en.html> for details. #
+# #
+#################################################################
+
+EOF
+
+
+echo "Here is a list of available hard disks on your computer:"
+echo ""
+lsblk -o NAME,SIZE,TYPE | grep -v part
+echo ""
+echo "Please type in the 'NAME' of the hard disk on which you want to"
+echo "install Arch Linux:"
+read disk
+disk_path="/dev/$disk"
+echo ""
+
+
+echo "Please type in the hostname of your new machine:"
+read hostname
+echo ""
+
+
+locales[1]="German / Germany"
+cat << EOF
+Please select one of the available localizations:
+
+[1] ${locales[1]}
+EOF
+read locale_id
+echo ""
+
+
+cat << EOF
+#################################################################
+
+ Summary
+
+ Hard disk: - $disk
+ Hostname: - $hostname
+ Localization: - ${locales[$locale_id]}
+
+#################################################################
+
+EOF
+
+echo "All data on disk '$disk' will be finally lost!"
+echo "Are you SURE that you want to install Arch Linux to '$disk'?!"
+echo "Type 'Yes' for installation and 'No' for abort."
+read answer
+if [ $answer == "Yes" ]; then
+ echo ""
+ echo "Starting installation process - OK"
+ echo ""
+else
+ echo ""
+ echo "Abort of installation process!"
+ exit
+fi
+
+
+# Check if booted with UEFI
+
+if [ -d "/sys/firmware/efi/efivars" ]; then
+ echo "Booted with UEFI - OK"
+ echo ""
+ sleep $DELAY
+else
+ echo "Not booted with UEFI. Please enable it in your mainboard settings. - FAILED"
+ exit
+fi
+
+
+# Check internet connection
+
+TESTSERVER="8.8.8.8" # hostnames will not work properly
+
+if ping -w 1 -c 1 $TESTSERVER > /dev/null; then
+ echo "Internet connection is ready - OK"
+ echo ""
+ sleep $DELAY
+else
+ echo "Could not reach testserver '$TESTSERVER' - FAILED"
+ exit
+fi
+
+
+# Update the system clock
+
+timedatectl set-ntp true
+if [ $? -eq 0 ]; then
+ echo "Updated system clock - OK"
+ echo ""
+ sleep $DELAY
+else
+ echo "Could not update system clock - FAILED"
+ exit
+fi
+
+
+# Partitioning
+
+wipefs -a $disk_path > /dev/null # make sure that fdisk does not ask for
+ # removing signatures which breaks the script
+fdisk $disk_path > /dev/null 2> /dev/null << EOF
+g
+n
+1
+
++512M
+n
+2
+
+
+p
+w
+EOF
+boot_partition_path="${disk_path}1"
+root_partition_path="${disk_path}2"
+echo "Partitioning finished - OK"
+sleep $DELAY
+echo ""
+
+
+# Create Filesystems
+
+mkfs.fat -F32 $boot_partition_path > /dev/null 2> /dev/null
+mkfs.ext4 $root_partition_path > /dev/null 2> /dev/null
+fatlabel $boot_partition_path "BOOT" > /dev/null
+e2label $root_partition_path "ROOT" > /dev/null
+echo "Created filesystems - OK"
+sleep $DELAY
+echo ""
+
+
+# Mount Root Filesystem
+
+mount $root_partition_path /mnt
+echo "Mounted root partition - OK"
+sleep $DELAY
+echo ""
+
+
+# Install Base Packages
+
+echo "Going to install base packages ..."
+sleep $DELAY
+echo ""
+pacstrap /mnt base
+echo ""
+echo "Installed base packages - OK"
+sleep $DELAY
+echo ""
+
+
+# Generate /etc/fstab file
+
+genfstab -U /mnt >> /mnt/etc/fstab
+echo "Generated /etc/fstab - OK"
+sleep $DELAY
+echo ""
+
+
+# Deploy second Stage Script to new root
+
+echo "Going to deploy second stage script for chroot environment ..."
+sleep $DELAY
+echo ""
+
+cat > /mnt/root/secondstage.sh << EOL
+
+# Set timezone
+
+ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
+hwclock --systohc
+echo "Timezone set - OK"
+echo ""
+sleep 1
+
+
+# Localization - Greetings from Germany
+
+echo "de_DE.UTF-8 UTF-8" >> /etc/locale.gen
+echo "de_DE ISO-8859-1" >> /etc/locale.gen
+echo "de_DE@euro ISO-8859-15" >> /etc/locale.gen
+
+locale-gen
+
+touch /etc/locale.conf
+echo "LANG=de_DE.UTF-8" > /etc/locale.conf
+
+touch /etc/vconsole.conf
+echo "KEYMAP=de-latin1" > /etc/vconsole.conf
+
+echo "German localization done - OK"
+echo ""
+sleep 1
+
+
+# Network Configuration
+
+touch /etc/hostname
+echo $hostname > /etc/hostname
+
+touch /etc/hosts
+echo "" >> /etc/hosts
+echo "127.0.0.1 localhost" >> /etc/hosts
+echo "::1 localhost" >> /etc/hosts
+
+echo "Network configuration done - OK"
+echo ""
+sleep 1
+
+
+# Initramfs
+
+# implement if needed ...
+
+
+# Set default Password
+
+echo "root:root" | chpasswd
+echo "Default password for user root set - OK"
+echo ""
+sleep 1
+
+
+# Install Grub
+
+pacman --noconfirm -Syu grub efibootmgr
+mount $boot_partition_path /mnt
+grub-install --target=x86_64-efi --efi-directory=/mnt --bootloader-id=GRUB --removable
+grub-mkconfig -o /boot/grub/grub.cfg
+umount $boot_partition_path
+echo "Grub bootloader installed - OK"
+echo ""
+sleep 1
+
+echo "Leaving chroot environment - OK"
+echo ""
+sleep 1
+
+EOL
+
+chmod 744 /mnt/root/secondstage.sh
+
+echo "Second stage script deployed - OK"
+echo ""
+sleep 1
+
+
+# Chroot to new System and launch second Stage
+
+echo "Running second stage in chroot ..."
+sleep $DELAY
+echo ""
+echo "/root/secondstage.sh" | arch-chroot /mnt
+
+
+# Removing second Stage Script and umount the Root Partition
+
+rm /mnt/root/secondstage.sh
+umount $root_partition_path
+echo "Removed second stage script and unmounted root partition - OK"
+sleep $DELAY
+echo ""
+
+
+# Final Messages
+
+cat << EOF
+#################################################################
+# #
+# The default login is user root with password 'root'. #
+# You can now power off your machine with 'poweroff', #
+# remove the installation media and boot your new #
+# Arch Linux machine! #
+# #
+#################################################################
+
+EOF