From eeb65fc0ae6496e81e629cc83a18937d146b7cb0 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Wed, 16 Sep 2026 16:20:19 -0400 Subject: [PATCH] [bin] snapclient and zsh fedora scripts --- bin/.local/bin/install_snapclient | 90 +++++++++++++++++++++++++++++++ bin/.local/bin/install_zsh | 70 ++++++++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100755 bin/.local/bin/install_snapclient create mode 100755 bin/.local/bin/install_zsh diff --git a/bin/.local/bin/install_snapclient b/bin/.local/bin/install_snapclient new file mode 100755 index 0000000..9814ac8 --- /dev/null +++ b/bin/.local/bin/install_snapclient @@ -0,0 +1,90 @@ +#!/usr/bin/env bash + +# Exit immediately if a command exits with a non-zero status +set -e + +echo "=== 1. Installing Fedora 44 Build Dependencies ===" +sudo dnf install -y \ + git \ + gcc-c++ \ + cmake \ + make \ + alsa-lib-devel \ + libvorbis-devel \ + libogg-devel \ + flac-devel \ + expat-devel \ + opus-devel \ + soxr-devel \ + avahi-devel \ + boost-devel + +echo "=== 2. Cloning Snapcast Repository ===" +# Clone into a temporary directory +cd /tmp +if [ -d "snapcast" ]; then + rm -rf snapcast +fi + +# Clone main repo first, then sync submodules internally to prevent git syntax errors +git clone https://github.com/snapcast/snapcast +cd snapcast +git submodule update --init --recursive + +echo "=== 3. Compiling Snapclient ===" +mkdir build && cd build +# BUILD_SERVER=OFF builds only the client application +cmake .. -DBUILD_SERVER=OFF +make -j$(nproc) + +echo "=== 4. Installing Binary ===" +sudo make install +sudo cp /usr/local/bin/snapclient /usr/bin/snapclient + +echo "=== 5. Setting Up Configuration File ===" +sudo mkdir -p /etc/default +if [ ! -f /etc/default/snapclient ]; then + sudo tee /etc/default/snapclient > /dev/null << 'EOF' +# Start snapclient automatically? +START_SNAPCLIENT=true + +# Additional options to pass to snapclient +# Change to your actual server IP or hostname +SNAPCLIENT_OPTS="--host " +EOF + echo "Created template /etc/default/snapclient" +else + echo "/etc/default/snapclient already exists. Skipping creation." +fi + +echo "=== 6. Installing Systemd Service ===" +sudo tee /etc/systemd/system/snapclient.service > /dev/null << 'EOF' +[Unit] +Description=Snapcast client +Documentation=man:snapclient(1) +After=network.target sound.target + +[Service] +EnvironmentFile=-/etc/default/snapclient +ExecStart=/usr/bin/snapclient $SNAPCLIENT_OPTS +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target +EOF + +# Reload systemd to pick up the new service +sudo systemctl daemon-reload + +echo "==========================================================" +echo " Setup Complete!" +echo "==========================================================" +echo "Next steps:" +echo "1. Edit /etc/default/snapclient to set your server's IP address:" +echo " sudo nano /etc/default/snapclient" +echo "" +echo "2. Start and enable the service:" +echo " sudo systemctl enable --now snapclient" +echo "==========================================================" + diff --git a/bin/.local/bin/install_zsh b/bin/.local/bin/install_zsh new file mode 100755 index 0000000..555be30 --- /dev/null +++ b/bin/.local/bin/install_zsh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +# Exit immediately if a command exits with a non-zero status +set -euo pipefail + +# Visual colors for output +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0;3m' # No Color +INFO='\033[0;34m[INFO]\033[0m' + +echo -e "${INFO} Starting OpenZFS installation for Fedora 44..." + +# 1. Ensure the script is run as root +if [ "$EUID" -ne 0 ]; then + echo -e "${RED}Error: Please run this script as root or with sudo.${NC}" + exit 1 +fi + +# 2. Check if Secure Boot is enabled +if mokutil --sb-state 2>/dev/null | grep -q "SecureBoot enabled"; then + echo -e "${RED}Warning: Secure Boot is ENABLED.${NC}" + echo "Out-of-tree kernel modules like ZFS will fail to load unless you manually sign them." + echo "It is highly recommended to disable Secure Boot in your BIOS before proceeding." + read -p "Do you want to continue anyway? (y/N): " choice + if [[ ! "$choice" =~ ^[Yy]$ ]]; then + echo "Installation aborted." + exit 1 + fi +fi + +# 3. Clean up conflicting legacy packages +echo -e "${INFO} Removing legacy zfs-fuse if present..." +if rpm -q zfs-fuse &>/dev/null; then + rpm -e --nodeps zfs-fuse +fi + +# 4. Resolve the distribution release name and install the official OpenZFS repository +echo -e "${INFO} Fetching system release token..." +DIST_TAG=$(rpm --eval "%{dist}") # Generates '.fc44' + +echo -e "${INFO} Adding OpenZFS repository for ${DIST_TAG}..." +REPO_URL="https://zfsonlinux.org/fedora/zfs-release-3-1${DIST_TAG}.noarch.rpm" +dnf install -y "$REPO_URL" + +# 5. Install required kernel development files matching the active kernel +echo -e "${INFO} Installing matching kernel-devel and headers..." +CURRENT_KERNEL=$(uname -r | awk -F'-' '{print $1}') +dnf install -y kernel-devel-"${CURRENT_KERNEL}" + +# 6. Install the main OpenZFS packages +echo -e "${INFO} Installing OpenZFS package (this compiles the DKMS module, please wait)..." +dnf install -y zfs + +# 7. Configure automatic module loading at boot +echo -e "${INFO} Configuring system to load ZFS module at boot..." +mkdir -p /etc/modules-load.d +echo "zfs" > /etc/modules-load.d/zfs.conf + +# 8. Attempt to load the module immediately +echo -e "${INFO} Loading ZFS kernel module..." +if modprobe zfs; then + echo -e "${GREEN}Success! OpenZFS has been installed and loaded successfully.${NC}" + echo -e "Installed version: $(zfs version)" +else + echo -e "${RED}Error: Failed to load the ZFS kernel module.${NC}" + echo "If you recently updated your kernel, you may need to reboot your system first." + exit 1 +fi +