Break down monolithic script into focused components: - 00-system-prep.sh: system updates and Flathub - 01-package-install.sh: system packages and Flatpaks - 02-dev-tools-setup.sh: Neovim, fonts, shell tools - 03-fedora-dotnet-setup.sh: .NET development environment - 04-config-symlinks.sh: dotfile symlinking Fixes: - Use rpm -q for accurate package checks - Dynamic Fedora version detection - Replace neofetch with fastfetch - Correct dotfile names (aliases.zsh, commit-conventions.txt)
249 lines
10 KiB
Bash
Executable file
249 lines
10 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# 03-fedora-dotnet-setup.sh
|
|
# Sets up .NET Development Environment specifically for Fedora.
|
|
# Assumes it's being run on Fedora and dnf is available.
|
|
|
|
echo "--- Starting Fedora .NET Development Environment Setup ---"
|
|
|
|
# Detect current Fedora version
|
|
CURRENT_FEDORA_VERSION=$(rpm -E %fedora)
|
|
echo "Detected Fedora version: $CURRENT_FEDORA_VERSION"
|
|
|
|
echo ""
|
|
echo "############################################################"
|
|
echo "# Fedora Specific: .NET Development Environment Setup #"
|
|
echo "# #"
|
|
echo "# Using Fedora version: $CURRENT_FEDORA_VERSION #"
|
|
echo "# If this is a future/unsupported version, some packages #"
|
|
echo "# or repositories might not be available yet. #"
|
|
echo "############################################################"
|
|
echo ""
|
|
|
|
FEDORA_DOTNET_PACKAGES=(
|
|
"code" # Visual Studio Code from Fedora repositories
|
|
"postgresql-server"
|
|
"postgresql-contrib"
|
|
"moby-engine" # Docker Engine on Fedora
|
|
"docker-compose" # Note: might be 'podman-compose' on newer Fedora
|
|
)
|
|
|
|
echo "Installing Fedora-specific packages for .NET development..."
|
|
for pkg_name in "${FEDORA_DOTNET_PACKAGES[@]}"; do
|
|
if ! rpm -q "$pkg_name" &>/dev/null; then
|
|
echo "Installing $pkg_name..."
|
|
if sudo dnf install -y "$pkg_name"; then
|
|
echo "$pkg_name has been installed."
|
|
else
|
|
echo "WARNING: Failed to install $pkg_name. It may not be available in the repositories."
|
|
# Special handling for docker-compose
|
|
if [ "$pkg_name" == "docker-compose" ]; then
|
|
echo "Trying alternative: podman-compose..."
|
|
if sudo dnf install -y podman-compose; then
|
|
echo "podman-compose installed as alternative to docker-compose."
|
|
else
|
|
echo "Neither docker-compose nor podman-compose could be installed."
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
echo "$pkg_name is already installed."
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "I. Core .NET Development Environment"
|
|
echo "--------------------------------------------------"
|
|
echo "Registering Microsoft Package Repository..."
|
|
|
|
MS_REPO_URL_BASE="https://packages.microsoft.com/config/fedora"
|
|
FEDORA_VERSION_FOR_MS_REPO="$CURRENT_FEDORA_VERSION"
|
|
MS_REPO_RPM_URL="${MS_REPO_URL_BASE}/${FEDORA_VERSION_FOR_MS_REPO}/packages-microsoft-prod.rpm"
|
|
MS_GPG_KEY_URL="https://packages.microsoft.com/keys/microsoft.asc"
|
|
TEMP_MS_RPM_DIR=$(mktemp -d)
|
|
TEMP_MS_RPM_PATH="${TEMP_MS_RPM_DIR}/packages-microsoft-prod-temp.rpm"
|
|
|
|
if ! sudo dnf repolist enabled | grep -q "packages-microsoft-com-prod"; then
|
|
echo "Importing Microsoft GPG key: $MS_GPG_KEY_URL"
|
|
if sudo rpm --import "$MS_GPG_KEY_URL"; then
|
|
echo "Microsoft GPG key imported successfully."
|
|
else
|
|
echo "WARNING: Failed to import Microsoft GPG key."
|
|
fi
|
|
|
|
echo "Downloading Microsoft package repository for Fedora $FEDORA_VERSION_FOR_MS_REPO: $MS_REPO_RPM_URL"
|
|
if wget --quiet "$MS_REPO_RPM_URL" -O "$TEMP_MS_RPM_PATH"; then
|
|
echo "Installing downloaded repository configuration..."
|
|
if sudo dnf install -y "$TEMP_MS_RPM_PATH"; then
|
|
echo "Microsoft repository RPM installed."
|
|
else
|
|
echo "ERROR: Failed to install Microsoft repository RPM."
|
|
fi
|
|
else
|
|
echo "ERROR: Failed to download Microsoft repository RPM from $MS_REPO_RPM_URL."
|
|
echo "This might be because Microsoft doesn't yet support Fedora $FEDORA_VERSION_FOR_MS_REPO."
|
|
echo "You can try using a previous Fedora version number or install .NET manually."
|
|
|
|
# Fallback: try with previous Fedora version
|
|
FALLBACK_VERSION=$((CURRENT_FEDORA_VERSION - 1))
|
|
echo "Trying fallback with Fedora $FALLBACK_VERSION..."
|
|
FALLBACK_URL="${MS_REPO_URL_BASE}/${FALLBACK_VERSION}/packages-microsoft-prod.rpm"
|
|
if wget --quiet "$FALLBACK_URL" -O "$TEMP_MS_RPM_PATH"; then
|
|
echo "Fallback download successful. Installing..."
|
|
sudo dnf install -y "$TEMP_MS_RPM_PATH"
|
|
else
|
|
echo "Fallback also failed. Skipping Microsoft repository setup."
|
|
fi
|
|
fi
|
|
sudo rm -rf "$TEMP_MS_RPM_DIR" # Clean up
|
|
else
|
|
echo "Microsoft package repository already configured."
|
|
fi
|
|
|
|
echo "Installing .NET SDK..."
|
|
# Try different .NET SDK package names
|
|
DOTNET_SDK_PACKAGES=("dotnet-sdk-8.0" "dotnet-sdk-9.0" "dotnet")
|
|
DOTNET_INSTALLED=false
|
|
|
|
for sdk_package in "${DOTNET_SDK_PACKAGES[@]}"; do
|
|
if rpm -q "$sdk_package" &>/dev/null; then
|
|
echo ".NET SDK ($sdk_package) already installed."
|
|
DOTNET_INSTALLED=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$DOTNET_INSTALLED" = false ]; then
|
|
for sdk_package in "${DOTNET_SDK_PACKAGES[@]}"; do
|
|
echo "Attempting to install $sdk_package..."
|
|
if sudo dnf install -y "$sdk_package"; then
|
|
echo ".NET SDK ($sdk_package) installed successfully."
|
|
DOTNET_INSTALLED=true
|
|
break
|
|
else
|
|
echo "Failed to install $sdk_package, trying next option..."
|
|
fi
|
|
done
|
|
|
|
if [ "$DOTNET_INSTALLED" = false ]; then
|
|
echo "ERROR: Failed to install any .NET SDK package."
|
|
echo "You may need to install .NET manually from https://dotnet.microsoft.com/"
|
|
fi
|
|
fi
|
|
|
|
echo "To verify .NET Installation, run these commands manually:"
|
|
echo " dotnet --version"
|
|
echo " dotnet --list-sdks"
|
|
echo " dotnet --list-runtimes"
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "II. Code Editor/IDE (Visual Studio Code)"
|
|
echo "--------------------------------------------------"
|
|
echo "Visual Studio Code (package 'code') should have been installed."
|
|
echo "Open VS Code and install these essential extensions from the Extensions view (Ctrl+Shift+X):"
|
|
echo " - C# Dev Kit (Publisher: Microsoft)"
|
|
echo " - (Optional but Recommended) NuGet Package Manager GUI"
|
|
echo " - (Optional but Recommended) GitLens"
|
|
echo " - (Optional but Recommended) Prettier - Code formatter"
|
|
echo " - (Optional) Any Blazor-specific snippet or tooling extensions"
|
|
echo "Restart VS Code if prompted after extension installations."
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "III. Version Control (Git)"
|
|
echo "--------------------------------------------------"
|
|
echo "Git (package 'git') should have been installed by 01-package-install.sh."
|
|
echo "Configure Git with your details by running these commands:"
|
|
echo " git config --global user.name \"Your Name\""
|
|
echo " git config --global user.email \"youremail@example.com\""
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "IV. Web Browser for Frontend Testing"
|
|
echo "--------------------------------------------------"
|
|
echo "Ensure you have a modern web browser (e.g., Firefox, usually pre-installed on Fedora)."
|
|
echo "If needed, you can install Chromium with: sudo dnf install -y chromium"
|
|
echo "Familiarize yourself with its Developer Tools (Inspector, Console, Network)."
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "V. Database (Optional - PostgreSQL Example)"
|
|
echo "--------------------------------------------------"
|
|
echo "PostgreSQL server and contrib packages should have been installed."
|
|
if command -v postgresql-setup &>/dev/null; then
|
|
echo "Initializing PostgreSQL Database Cluster (if not already done)..."
|
|
# Fixed the postgresql-setup command
|
|
if sudo postgresql-setup --initdb; then
|
|
echo "PostgreSQL database cluster initialized."
|
|
else
|
|
echo "PostgreSQL initialization failed or was already done."
|
|
fi
|
|
else
|
|
echo "WARNING: postgresql-setup command not found. Manual initialization might be needed."
|
|
fi
|
|
|
|
echo "Enabling and Starting PostgreSQL Service..."
|
|
if sudo systemctl enable --now postgresql; then
|
|
echo "PostgreSQL service enabled and started."
|
|
else
|
|
echo "WARNING: Failed to enable/start PostgreSQL service."
|
|
fi
|
|
|
|
echo "To create a PostgreSQL User and Database, run the following commands:"
|
|
echo " 1. Access psql: sudo -u postgres psql"
|
|
echo " 2. Inside psql, execute (replace placeholders):"
|
|
echo " CREATE USER myappuser WITH PASSWORD 'yoursecurepassword';"
|
|
echo " CREATE DATABASE myappdb OWNER myappuser;"
|
|
echo " 3. Exit psql: \\q"
|
|
echo "(Optional) Install a PostgreSQL GUI Tool like pgAdmin 4:"
|
|
echo " sudo dnf install -y pgadmin4"
|
|
echo "Or DBeaver (download from their website or check Fedora repos/Flathub)."
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "VI. Containerization (Optional but Recommended - Docker)"
|
|
echo "--------------------------------------------------"
|
|
echo "Docker Engine (moby-engine) and Docker Compose should have been installed."
|
|
echo "Enabling and Starting Docker Service..."
|
|
if sudo systemctl enable --now docker; then
|
|
echo "Docker service enabled and started."
|
|
else
|
|
echo "WARNING: Failed to enable/start Docker service."
|
|
fi
|
|
|
|
echo "Adding current user ($USER) to the Docker group..."
|
|
if sudo usermod -aG docker "$USER"; then
|
|
echo "User added to docker group successfully."
|
|
else
|
|
echo "WARNING: Failed to add user to docker group."
|
|
fi
|
|
|
|
echo "IMPORTANT: You MUST log out and log back in for this group change to take effect."
|
|
echo "After logging back in, verify Docker Installation by running:"
|
|
echo " docker --version"
|
|
echo " docker-compose --version (or podman-compose --version)"
|
|
echo " docker run hello-world"
|
|
echo ""
|
|
|
|
echo "--------------------------------------------------"
|
|
echo "VII. Final Checks for .NET Setup"
|
|
echo "--------------------------------------------------"
|
|
echo "Consider rebooting your system to ensure all services and paths are correctly initialized: sudo reboot"
|
|
echo "After setup (and potential relogin for Docker), create a Test .NET Project:"
|
|
echo " mkdir -p ~/dotnet_test_projects && cd ~/dotnet_test_projects"
|
|
echo " dotnet new webapi -o TestApi"
|
|
echo " cd TestApi"
|
|
echo " dotnet run # (and check in browser at http://localhost:5000 or https://localhost:5001)"
|
|
echo " cd .."
|
|
echo " dotnet new blazorserver -o TestBlazorApp # or blazorwasm"
|
|
echo " cd TestBlazorApp"
|
|
echo " dotnet run # (and check in browser)"
|
|
echo ""
|
|
echo "############################################################"
|
|
echo "# End of Fedora Specific .NET Setup #"
|
|
echo "############################################################"
|
|
|
|
echo "--- Fedora .NET Development Environment Setup Finished ---"
|
|
|