 b1b7d61769
			
		
	
	
		b1b7d61769
		
	
	
	
	
		
			
			- 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 ---"
 | |
| 
 |