Various fixes and additions.

This commit is contained in:
David Young
2026-05-13 14:20:41 -06:00
parent 26fa165c19
commit 4cd6109627
7 changed files with 368 additions and 0 deletions

View File

@@ -0,0 +1 @@
Installs the bare necessities to turn a newly minted Arch Linux server into something useful.

27
fix-networking.sh Normal file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
#
# Purpose : Configure Avahi mDNS and disable systemd-resolved
set -e
echo "Installing Avahi and nss-mdns..."
sudo pacman -S --noconfirm avahi nss-mdns
echo "Enabling Avahi daemon..."
sudo systemctl enable avahi-daemon.service
echo "Updating /etc/nsswitch.conf..."
sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns/' /etc/nsswitch.conf
# Verify the change was made
if grep -q "mdns_minimal" /etc/nsswitch.conf; then
echo "nsswitch.conf updated successfully."
else
echo "Error: nsswitch.conf was not updated. Please check the file manually."
exit 1
fi
echo "Copying Avahi SSH service file..."
sudo cp /usr/share/doc/avahi/ssh.service /etc/avahi/services/
echo "Avahi mDNS configuration complete."

159
install.sh Executable file
View File

@@ -0,0 +1,159 @@
#!/bin/bash
#
# Purpose : MiniServer installer
# Print the logo
print_logo() {
cat << "EOF"
███╗ ███╗██╗███╗ ██╗██╗
████╗ ████║██║████╗ ██║██║
██╔████╔██║██║██╔██╗ ██║██║
██║╚██╔╝██║██║██║╚██╗██║██║
██║ ╚═╝ ██║██║██║ ╚████║██║
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝
███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗
██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗
███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝
╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗
███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝
EOF
}
# --- Main ---
set -e
export PATH="$HOME/.local/bin:$PATH"
if ! grep -q 'LOCAL_BIN_PATH' "$HOME/.bashrc"; then
echo '' >> "$HOME/.bashrc"
echo '# Mini: add user local bin to PATH' >> "$HOME/.bashrc"
echo 'export PATH="$HOME/.local/bin:$PATH" # LOCAL_BIN_PATH' >> "$HOME/.bashrc"
fi
clear
print_logo
cd ~
sudo -v
# Grant passwordless sudo for the duration of the install, revoke on exit
echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/99-miniserver-install > /dev/null
sudo chmod 440 /etc/sudoers.d/99-miniserver-install
trap "sudo rm -f /etc/sudoers.d/99-miniserver-install" EXIT
if ! command -v git &> /dev/null; then
echo "Installing git..."
sudo pacman -S --noconfirm git
fi
if ! pacman -Qi base-devel &> /dev/null; then
echo "Installing base-devel..."
sudo pacman -S --noconfirm base-devel
else
echo "base-devel is already installed, skipping."
fi
echo "Getting the latest version of MiniServer..."
rm -rf ~/.local/share/MiniServer
git clone https://gitea.young.computer/david/MiniServer.git "$HOME/.local/share/MiniServer" > /dev/null
mkdir -p "$HOME/.local/bin"
cp "$HOME/.local/share/MiniServer/miniserverrefresh" "$HOME/.local/bin/miniserverrefresh"
cp "$HOME/.local/share/MiniServer/miniserverupdate" "$HOME/.local/bin/miniserverupdate"
cd ~/.local/share/MiniServer
echo "Updating system..."
sudo pacman -Syu --noconfirm
install_yay() {
rm -rf /tmp/yay
git clone https://aur.archlinux.org/yay.git /tmp/yay
cd /tmp/yay
makepkg -si --noconfirm
cd ~/.local/share/MiniServer
rm -rf /tmp/yay
}
if ! command -v yay &> /dev/null; then
echo "Installing yay AUR helper..."
install_yay
else
echo "yay is already installed, skipping."
fi
if ! yay --version &> /dev/null; then
echo "yay does not appear to be working, reinstalling..."
install_yay
fi
# Source utility functions
source utils.sh
# Source package list
if [ ! -f "packages.conf" ]; then
echo "Error: packages.conf not found!"
exit 1
fi
source packages.conf
echo "Installing servers..."
install_packages "${SERVERS[@]}"
echo "Installing utilities..."
install_packages "${UTILITIES[@]}"
if ! command -v pm2 &> /dev/null; then
npm install pm2 -g --prefix "$HOME/.local"
fi
cd ~/.local/share/MiniServer
# Install Cockpit
if ! pacman -Qi cockpit &> /dev/null; then
echo "Installing Cockpit..."
sudo pacman -S --noconfirm cockpit
sudo systemctl enable --now cockpit.socket
echo "Cockpit installed. Access it at http://localhost:9090"
else
echo "Cockpit is already installed, skipping."
fi
echo ""
read -rp "A reboot is required to complete setup. Reboot now? [y/N] " response </dev/tty
case "$response" in
[yY][eE][sS]|[yY])
echo "Rebooting..."
sudo reboot
;;
*)
echo "Reboot skipped. Please reboot when convenient."
;;
esac
# Check whether the running kernel matches the installed modules — if not, a
# newer kernel was installed during this run and a reboot is required
if ! ls /usr/lib/modules/$(uname -r) > /dev/null 2>&1; then
echo "A newer kernel has been installed, a reboot is recommended."
read -rp "Reboot now? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
echo "Rebooting..."
sudo reboot
;;
*)
echo "Reboot skipped. Please remember to reboot when convenient."
exit 0
;;
esac
else
echo "Kernel is up to date, no reboot needed. You may want to consider a reboot if other significant software was updated or installed."
fi

52
miniserverrefresh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash
# Print the logo
print_logo() {
cat << "EOF"
███╗ ███╗██╗███╗ ██╗██╗
████╗ ████║██║████╗ ██║██║
██╔████╔██║██║██╔██╗ ██║██║
██║╚██╔╝██║██║██║╚██╗██║██║
██║ ╚═╝ ██║██║██║ ╚████║██║
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝
███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗
██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗
███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝
╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗
███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝
EOF
}
# Clear screen and show logo
clear
print_logo
echo "Let's get the lastest changes to MiniServer..."
wget -qO- https://gitea.young.computer/david/MiniServer/raw/branch/main/install.sh | bash
# Check whether the running kernel matches the installed modules — if not, a
# newer kernel was installed during this run and a reboot is required
if ! ls /usr/lib/modules/$(uname -r) > /dev/null 2>&1; then
echo "A newer kernel has been installed, a reboot is recommended."
read -rp "Reboot now? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
echo "Rebooting..."
sudo reboot
;;
*)
echo "Reboot skipped. Please remember to reboot when convenient."
exit 0
;;
esac
else
echo "Kernel is up to date, no reboot needed. You may want to consider a reboot if other significant software was updated or installed."
fi

78
miniserverupdate Executable file
View File

@@ -0,0 +1,78 @@
#!/bin/bash
# Print the logo
print_logo() {
cat << "EOF"
███╗ ███╗██╗███╗ ██╗██╗
████╗ ████║██║████╗ ██║██║
██╔████╔██║██║██╔██╗ ██║██║
██║╚██╔╝██║██║██║╚██╗██║██║
██║ ╚═╝ ██║██║██║ ╚████║██║
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝
███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗
██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗
███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝
╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗
███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝
EOF
}
# Clear screen and show logo
clear
print_logo
echo "Updating Arch..."
sudo pacman -Syu
echo "Updating AUR..."
if ! yay -Sua 2>/dev/null; then
echo "yay -Sua returned an error. Let's rebuild YAY."
sudo pacman -R yay
cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
rm -rf yay
cd
yay -Sua --noconfirm
else
yay -Sua --noconfirm
fi
# Updating the repo and installing...
echo "Updating MiniServer..."
REPO_DIR="$HOME/.local/share/MiniServer"
echo "Pulling latest MiniServer repo..."
git -C "$REPO_DIR" pull
echo "Running install.sh..."
bash "$REPO_DIR/install.sh"
# Check whether the running kernel matches the installed modules — if not, a
# newer kernel was installed during this run and a reboot is required
if ! ls /usr/lib/modules/$(uname -r) > /dev/null 2>&1; then
echo "A newer kernel has been installed, a reboot is recommended."
read -rp "Reboot now? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
echo "Rebooting..."
sudo reboot
;;
*)
echo "Reboot skipped. Please remember to reboot when convenient."
exit 0
;;
esac
else
echo "Kernel is up to date, no reboot needed. You may want to consider a reboot if other significant software was updated or installed."
fi

23
packages.conf Normal file
View File

@@ -0,0 +1,23 @@
# Servers
SERVERS=(
# nothing at this time
)
# Utilities
UTILITIES=(
cmake
cockpit
cockpit-storaged
curl
docker
docker-compose
firewalld
nano
networkmanager
nodejs
npm
vi
wget
unzip
)

28
utils.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/bin/bash
# Function to check if a package is installed
is_installed() {
pacman -Qi "$1" &> /dev/null
}
# Function to check if a package is installed
is_group_installed() {
pacman -Qg "$1" &> /dev/null
}
# Function to install packages if not already installed
install_packages() {
local packages=("$@")
local to_install=()
for pkg in "${packages[@]}"; do
if ! is_installed "$pkg" && ! is_group_installed "$pkg"; then
to_install+=("$pkg")
fi
done
if [ ${#to_install[@]} -ne 0 ]; then
echo "Installing: ${to_install[*]}"
yay -S --noconfirm "${to_install[@]}"
fi
}