- Update README to reflect new modular setup architecture - Document all installed packages, scripts, and post-install tasks - Add clear instructions for supported distributions and customization - Move Visual Studio Code installation to main package script - Add JetBrains Rider to package installation - Remove redundant VS Code install from Fedora .NET script - Consolidate IDE installations in single location for better organization
		
			
				
	
	
		
			248 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			248 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=(
 | 
						|
    "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 ---"
 | 
						|
 |