Initial commit. Probably not ready for general usage yet.
This commit is contained in:
parent
ea3bf7c94b
commit
0830815515
237
install-stormux.sh
Executable file
237
install-stormux.sh
Executable file
@ -0,0 +1,237 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright 2024, Stormux, <storm_dragon@stormux.org>
|
||||
#
|
||||
# This 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, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# This software 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 package; see the file COPYING. If not, write to the Free
|
||||
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
#
|
||||
|
||||
# keep track of mounted status for exit function
|
||||
mounted=1
|
||||
|
||||
set -e # Don't want to destroy stuff if this goes majorly wrong.
|
||||
trap cleanup EXIT # make sure the script cleans up after itself before closing.
|
||||
|
||||
|
||||
cleanup() {
|
||||
if [[ $mounted -eq 0 ]]; then
|
||||
umount -R /mnt
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
|
||||
help() {
|
||||
echo -e "Usage:\n"
|
||||
echo "With no arguments, build with default parameters."
|
||||
for i in "${!command[@]}" ; do
|
||||
echo "-${i/:/ <parameter>}: ${command[${i}]}"
|
||||
done | sort
|
||||
exit 0
|
||||
}
|
||||
|
||||
inputbox() {
|
||||
local boxType
|
||||
if [[ "$*" =~ password ]]; then
|
||||
boxType="--insecure --passwordbox"
|
||||
else
|
||||
boxType="--inputbox"
|
||||
fi
|
||||
dialog --title "Stormux X86_64 Installer" \
|
||||
--backtitle "Enter text and press enter. Press escape to cancel." \
|
||||
${boxType} "$*" -1 -1
|
||||
}
|
||||
|
||||
menulist() {
|
||||
# Args: Instructions, Tag, description.
|
||||
# returns: selected tag
|
||||
local instructions="${1}"
|
||||
shift
|
||||
dialog --title "$(gettext "Stormux X86_64 Installer")" \
|
||||
--backtitle "$(gettext "Use the up and down arrow keys to find the option you want, then press enter to select it.")" \
|
||||
--clear \
|
||||
--cancel-label "$(gettext "Exit")" \
|
||||
--ok-label "$(gettext "Continue")" \
|
||||
--no-tags \
|
||||
--menu "$(gettext "${instructions}")" 0 0 0 "$@" --stdout
|
||||
local code=$?
|
||||
[[ $code -eq 1 ]] && exit 0
|
||||
}
|
||||
|
||||
msgbox() {
|
||||
dialog --backtitle "Stormux X86_64 Installer" \
|
||||
--ok-label "Continue" \
|
||||
--msgbox "$*" -1 -1
|
||||
local code=$?
|
||||
[[ $code -eq 1 ]] && exit 0
|
||||
}
|
||||
|
||||
yesno() {
|
||||
# Returns: 0 yes, or 1 no
|
||||
# Args: Question to user.
|
||||
dialog --clear --title "Stormux X86_64 Installer" \
|
||||
--backtitle "$(gettext "Press 'Enter' for \"yes\" or 'Escape' for \"no\".")" --yesno "$*" -1 -1 --stdout
|
||||
return $?
|
||||
}
|
||||
|
||||
# Array of command line arguments
|
||||
declare -A command=(
|
||||
[h]="This help screen."
|
||||
)
|
||||
|
||||
# Convert the keys of the associative array to a format usable by getopts
|
||||
args="${!command[*]}"
|
||||
args="${args//[[:space:]]/}"
|
||||
while getopts "${args}" i ; do
|
||||
case "$i" in
|
||||
h) help ;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# make sure variables are set, or use defaults.
|
||||
|
||||
# Make sure this script is ran as root.
|
||||
if [ "$(whoami)" != "root" ] ; then
|
||||
echo "Error: This script must be run as root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
answer="$(yesno "Have you created your own disk layout and mounted it at /mnt?")"
|
||||
if [[ $answer -eq 1 ]]; then
|
||||
msgbox "Stormux can format a drive for you. Keep in mind that all data on the selected drive will be lost, including any other operating system that may be installed. To cancel, press control+c."
|
||||
fi
|
||||
|
||||
language=$(menulist "Select the System Language" \
|
||||
"en_US.UTF-8" "English United States" \
|
||||
"en_GB.UTF-8" "English Great Britain" \
|
||||
"en_GB.UTF-8" "English Great Britain" \
|
||||
"cs_CZ.UTF-8" "Czech Republic" \
|
||||
)
|
||||
|
||||
kernel=$(menulist "Select a kernel" \
|
||||
"Linux" "The latest kernel." \
|
||||
"linux-lts" "The long term support kernel" \
|
||||
"linux-zen" "Optimized for desktops" \
|
||||
)
|
||||
|
||||
userName="$(inputbox "Enter the user name for your new system. User names can contain letters (both upper and lowercase), numbers, and underscores (_).")"
|
||||
password1=""
|
||||
password2=" "
|
||||
while [[ "${password1}" != "${password2}" ]]; do
|
||||
password1="$(inputbox "Enter a password for $userName.")"
|
||||
password2="$(inputbox "Enter the password for $userName again.")"
|
||||
if [[ "${password1}" != "${password2}" ]]; then
|
||||
msgbox "Passwords do not match."
|
||||
fi
|
||||
done
|
||||
|
||||
hostname=$(inputbox "Enter the hostname of your computer, for example, stormux-desktop.")
|
||||
|
||||
# Install packages
|
||||
pacstrap /mnt \
|
||||
alsa-firmware \
|
||||
alsa-utils \
|
||||
base \
|
||||
base-devel \
|
||||
bash-completion \
|
||||
bluez \
|
||||
bluez-utils \
|
||||
brltty \
|
||||
cronie \
|
||||
espeak-ng \
|
||||
git \
|
||||
go \
|
||||
grub \
|
||||
${kernel} \
|
||||
${kernel}-headers \
|
||||
magic-wormhole \
|
||||
man \
|
||||
man-pages \
|
||||
networkmanager \
|
||||
pipewire \
|
||||
pipewire-alsa \
|
||||
pipewire-jack \
|
||||
pipewire-pulse \
|
||||
poppler \
|
||||
python-pyudev \
|
||||
python-daemonize \
|
||||
python-evdev \
|
||||
python-dbus \
|
||||
python-pyte \
|
||||
realtime-privileges \
|
||||
rhvoice-voice-bdl \
|
||||
rsync \
|
||||
screen \
|
||||
sox \
|
||||
w3m \
|
||||
wget \
|
||||
wireless-regdb \
|
||||
wireplumber \
|
||||
xdg-user-dirs \
|
||||
xdg-utils
|
||||
|
||||
# Chroot into the image
|
||||
arch-chroot /mnt << EOF
|
||||
# set the language
|
||||
sed -i "s/#$language/$language/" /etc/locale.gen
|
||||
echo "LANG=$language" > /etc/locale.conf
|
||||
locale-gen
|
||||
# Set the distribution name.
|
||||
echo 'Stormux \r (\l)' > /etc/issue
|
||||
echo >> /etc/issue
|
||||
# Create the user
|
||||
useradd -m -g users -G wheel,realtime,audio,video,network,brlapi -s /bin/bash $userName
|
||||
# Grant sudo privileges to the stormux user for package installation.
|
||||
echo "${userName} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/wheel
|
||||
# Set the password for the root user
|
||||
echo -e "root\nroot" | passwd "root"
|
||||
# Set the password for the user
|
||||
echo -e "${password1}\n${password1}" | passwd "${userName}"
|
||||
# Change to the user and install some packages
|
||||
sudo -iu ${userName}
|
||||
# Create desktop, downloads, music, and other directories.
|
||||
xdg-user-dirs-update
|
||||
# Build AUR packages
|
||||
git clone https://aur.archlinux.org/yay
|
||||
cd ~/yay
|
||||
makepkg -cris --noconfirm
|
||||
cd ~
|
||||
rm -rf yay/
|
||||
yay -S --noconfirm fenrir-git
|
||||
exit
|
||||
# Enable linger so that hopefully sound will start at login.
|
||||
mkdir -p /var/lib/systemd/linger
|
||||
touch /var/lib/systemd/linger/stormux
|
||||
systemctl --global enable pipewire.service pipewire-pulse.service
|
||||
/usr/share/fenrirscreenreader/tools/configure_pipewire.sh
|
||||
sudo -u stormux /usr/share/fenrirscreenreader/tools/configure_pipewire.sh
|
||||
# Configure sudo for group wheel, remove nopasswd for the user
|
||||
echo '%wheel ALL=(ALL) ALL' > /etc/sudoers.d/wheel
|
||||
# Set the hostname
|
||||
echo $hostname > /etc/hostname
|
||||
# Configure services
|
||||
systemctl disable systemd-networkd.service systemd-networkd.socket
|
||||
systemctl enable brltty.path cronie.service fenrirscreenreader.service NetworkManager.service
|
||||
# Cleanup packages
|
||||
pacman -Sc --noconfirm
|
||||
pacman -R --noconfirm go
|
||||
|
||||
EOF
|
||||
|
||||
# Exiting calls the cleanup function to unmount.
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user