Compare commits
No commits in common. "096e5403928af16dbde951ea6df3194755dbb33b" and "ea3bf7c94ba4cae65ed19db57d088e190e4a2eb5" have entirely different histories.
096e540392
...
ea3bf7c94b
@ -1,242 +0,0 @@
|
|||||||
#!/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 \
|
|
||||||
efibootmgr-ng \
|
|
||||||
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
|
|
||||||
|
|
||||||
# Install grub
|
|
||||||
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
|
|
||||||
grub-mkconfig -o /boot/grub/grub.cfg
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Exiting calls the cleanup function to unmount.
|
|
||||||
exit 0
|
|
Loading…
x
Reference in New Issue
Block a user