Setup Developer di Ubuntu 24.04 Desktop: Solusi Praktis untuk Produktivitas Maksimal

Capek harus setup ulang tools setiap install Ubuntu baru? Skrip ini bisa jadi sahabat terbaikmu.

Sebagai seorang developer, kita semua tahu betapa menyebalkannya proses setup awal setiap kali menginstall ulang sistem. Harus install package satu per satu, tambah repository, konfigurasi ulang… dan ulang lagi. Nah, di sinilah ubuntu_dev_setup.sh hadir sebagai penyelamat.

Skrip ini dirancang untuk pengguna Ubuntu 24.04 Desktop dan ditulis dengan semangat membantu developer menyiapkan lingkungan kerja secara otomatis dan konsisten. Mulai dari basic tools seperti Git dan curl, hingga aplikasi grafis seperti VS Code atau Google Chrome—semuanya bisa disiapkan dalam satu kali jalan.

Apa yang Dilakukan Skrip Ini?

  • Pembaruan sistem otomatis
  • Instalasi paket penting: git, curl, build-essential, python3, dan lainnya
  • Instalasi aplikasi populer: seperti Google Chrome, Visual Studio Code, PostgreSQL, dan lainnya
  • Penambahan repository dan validasi eksistensinya agar tidak duplikat

Kenapa Skrip Ini Berguna?

  • Hemat waktu: Proses setup bisa makan waktu berjam-jam. Skrip ini menyelesaikannya dalam hitungan menit.
  • Konsisten: Tidak perlu lagi takut lupa install sesuatu. Semua sudah dirangkum.
  • Mudah digunakan: Jalankan satu baris perintah, duduk santai, dan biarkan skrip bekerja.

Cara Menggunakan

Unduh skripnya dan pastikan sudah di-make executable:

chmod +x ubuntu_dev_setup.sh

Jalankan dengan hak akses root:

sudo ./ubuntu_dev_setup.sh

Source Code

#!/bin/bash

# Ubuntu 24.04 Desktop Developer Setup Script
# This script installs essential development tools and applications
# By: Victor P Limbong

set -e  # Exit on any error

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Function to print colored output
print_status() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Function to check if command exists
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Function to add repository if not exists
add_repository() {
    if ! grep -q "$1" /etc/apt/sources.list /etc/apt/sources.list.d/* 2>/dev/null; then
        echo "$1" | sudo tee -a /etc/apt/sources.list.d/additional.list
        return 0
    else
        return 1
    fi
}

print_status "Starting Ubuntu 24.04 Developer Setup..."

# Enable additional repositories
print_status "Enabling additional repositories (universe and multiverse)..."
sudo add-apt-repository universe -y
sudo add-apt-repository multiverse -y
sudo apt update

# Update system
print_status "Updating system packages..."
sudo apt update && sudo apt upgrade -y

# Install basic dependencies
print_status "Installing basic dependencies..."
sudo apt install -y \
    curl \
    wget \
    build-essential \
    ca-certificates \
    apt-transport-https \
    software-properties-common \
    gnupg \
    lsb-release \
    unzip \
    tar \
    gzip \
    gcc \
    g++ \
    checkinstall

# Install UFW Firewall
print_status "Installing and configuring UFW firewall..."
sudo apt install -y ufw
sudo ufw --force enable
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Install unattended-upgrades for automatic security updates
print_status "Installing unattended-upgrades..."
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# Install Git
print_status "Installing Git..."
sudo apt install -y git

# Install Python
print_status "Installing Python..."
sudo apt install -y python3 python3-pip python3-venv python3-dev

# Install Node.js (using NodeSource repository for latest)
print_status "Installing Node.js..."
curl -fsSL https://deb.nodesource.com/setup_23.x | sudo -E bash -
sudo apt install -y nodejs

# Install Java (OpenJDK 21 - latest LTS)
print_status "Installing OpenJDK 21..."
sudo apt install -y openjdk-21-jdk openjdk-21-jre default-jdk

# Install Qt6 C++ Development Tools
print_status "Installing Qt6 C++ Development Tools..."
sudo apt install -y \
    qt6-base-dev \
    qt6-base-dev-tools \
    qt6-declarative-dev \
    qt6-declarative-dev-tools \
    qt6-tools-dev \
    qt6-tools-dev-tools \
    qt6-multimedia-dev \
    qt6-connectivity-dev \
    qt6-sensors-dev \
    qt6-positioning-dev \
    qt6-webengine-dev \
    qt6-charts-dev \
    qt6-serialport-dev \
    qt6-svg-dev \
    qt6-image-formats-plugins \
    qt6-wayland-dev \
    qt6-l10n-tools \
    libqt6opengl6-dev \
    libqt6sql6-sqlite \
    libqt6sql6-mysql \
    libqt6sql6-psql \
    qml6-module-qtquick \
    qml6-module-qtquick-controls \
    qml6-module-qtquick-layouts \
    qml6-module-qtquick-window \
    qml6-module-qtquick-dialogs \
    qtcreator \
    qtcreator-dev \
    qtcreator-doc \
    cmake \
    ninja-build \
    pkg-config \
    libgl1-mesa-dev \
    libglu1-mesa-dev \
    libxkbcommon-dev \
    libxcb-xinerama0-dev \
    libxcb-cursor-dev \
    libxcb-util1-dev \
    libxrandr-dev \
    libxss-dev \
    libxcomposite-dev \
    libxdamage-dev \
    libfontconfig1-dev \
    libxext-dev \
    libxfixes-dev \
    libxi-dev \
    libxrender-dev \
    libxcb1-dev \
    libxcb-glx0-dev \
    libxcb-keysyms1-dev \
    libxcb-image0-dev \
    libxcb-shm0-dev \
    libxcb-icccm4-dev \
    libxcb-sync-dev \
    libxcb-xfixes0-dev \
    libxcb-shape0-dev \
    libxcb-randr0-dev \
    libxcb-render-util0-dev \
    libxcb-xkb-dev \
    libxkbcommon-x11-dev

print_status "Qt6 C++ development environment installed successfully!"
print_status "Qt Creator IDE and all essential Qt6 modules are now available."

# Install Go (Golang)
print_status "Installing Go (Golang)..."
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz -P /tmp
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf /tmp/go1.23.4.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
print_status "Go installed successfully!"

# Install Google Chrome
print_status "Installing Google Chrome..."
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install -y google-chrome-stable

# Install Visual Studio Code
print_status "Installing Visual Studio Code..."
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install -y code

# Install .NET 9.0
print_status "Installing .NET 9.0..."
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-9.0

# Install SQL Server 2022
print_status "Installing SQL Server 2022..."
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list)"
sudo apt update
sudo apt install -y mssql-server
print_warning "Remember to run 'sudo /opt/mssql/bin/mssql-conf setup' to configure SQL Server"

# Install SQL Server Command-Line Tools
print_status "Installing SQL Server Command-Line Tools..."
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
sudo apt update
sudo apt install -y mssql-tools18 unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
export PATH="$PATH:/opt/mssql-tools18/bin"
print_status "SQL Server tools (sqlcmd, bcp) installed successfully!"

# Install PostgreSQL
print_status "Installing PostgreSQL..."
sudo apt install -y postgresql postgresql-contrib postgresql-client

# Install Flatpak
print_status "Installing Flatpak..."
sudo apt install -y flatpak gnome-software-plugin-flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Install Snap packages
print_status "Installing Snap packages..."
sudo snap install keepassxc
sudo snap install libreoffice
sudo snap install vlc
sudo snap install obsidian --classic
sudo snap install flutter --classic

# Install Rust
print_status "Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source ~/.cargo/env

# Install Homebrew
print_status "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

# Install Omakub (Ubuntu setup tool)
print_status "Installing Omakub..."
wget -qO- https://omakub.org/install | bash || print_warning "Omakub installation failed or not available"

# Install other apt packages
print_status "Installing additional tools..."
sudo apt install -y \
    nmap \
    flameshot \
    terminator

# Install JetBrains Toolbox
print_status "Installing JetBrains Toolbox..."
JB_TMP_DIR="/tmp"
JB_INSTALL_DIR="$HOME/.local/share/JetBrains/Toolbox"
JB_SYMLINK_DIR="$HOME/.local/bin"
sudo apt-get install -y libfuse2 libxi6 libxrender1 libxtst6 mesa-utils libfontconfig libgtk-3-bin
JB_ARCHIVE_URL=$(curl -s 'https://data.services.jetbrains.com/products/releases?code=TBA&latest=true&type=release' | grep -Po '"linux":.*?[^\\]",' | awk -F ':' '{print $3,":"$4}'| sed 's/[", ]//g')
JB_ARCHIVE_FILENAME=$(basename "$JB_ARCHIVE_URL")
rm "$JB_TMP_DIR/$JB_ARCHIVE_FILENAME" 2>/dev/null || true
wget -q --show-progress -cO "$JB_TMP_DIR/$JB_ARCHIVE_FILENAME" "$JB_ARCHIVE_URL"
mkdir -p "$JB_INSTALL_DIR"
rm "$JB_INSTALL_DIR/jetbrains-toolbox" 2>/dev/null || true
tar -xzf "$JB_TMP_DIR/$JB_ARCHIVE_FILENAME" -C "$JB_INSTALL_DIR" --strip-components=1
rm "$JB_TMP_DIR/$JB_ARCHIVE_FILENAME"
chmod +x "$JB_INSTALL_DIR/bin/jetbrains-toolbox"
mkdir -p $JB_SYMLINK_DIR
rm "$JB_SYMLINK_DIR/jetbrains-toolbox" 2>/dev/null || true
ln -s "$JB_INSTALL_DIR/bin/jetbrains-toolbox" "$JB_SYMLINK_DIR/jetbrains-toolbox"
print_warning "JetBrains Toolbox installed. Run 'jetbrains-toolbox' to launch it."

# Install GitKraken
print_status "Installing GitKraken..."
wget -O /tmp/gitkraken.deb "https://release.gitkraken.com/linux/gitkraken-amd64.deb"
sudo dpkg -i /tmp/gitkraken.deb || sudo apt install -f -y

# Install ProtonVPN
print_status "Installing ProtonVPN..."
wget -O /tmp/protonvpn.deb "https://repo.protonvpn.com/debian/dists/stable/main/binary-all/protonvpn-stable-release_1.0.8_all.deb"
sudo dpkg -i /tmp/protonvpn.deb
sudo apt update
sudo apt install -y proton-vpn-gnome-desktop

# Clean up
print_status "Cleaning up temporary files..."
rm -f /tmp/*.deb /tmp/*.tar.gz /tmp/*.zip /tmp/*.AppImage /tmp/go*.tar.gz packages-microsoft-prod.deb

# Configure Git (optional)
print_status "Git configuration (optional)..."
read -p "Do you want to configure Git now? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    read -p "Enter your Git username: " git_username
    read -p "Enter your Git email: " git_email
    git config --global user.name "$git_username"
    git config --global user.email "$git_email"
    print_status "Git configured successfully!"
fi

# Final system update
print_status "Performing final system update..."
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
sudo apt autoclean

print_status "Installation completed successfully!"
print_warning "Please note the following:"
echo "1. Run 'sudo /opt/mssql/bin/mssql-conf setup' to configure SQL Server"
echo "2. Restart your terminal or run 'source ~/.bashrc' to use Homebrew, SQL Server tools, and Go"
echo "3. Some applications may require a system restart to work properly"
echo "4. JetBrains Toolbox can be launched with 'jetbrains-toolbox'"
echo "5. Configure PostgreSQL with 'sudo -u postgres psql'"
echo "6. Install Android Studio from JetBrains Toolbox"
echo "7. Flutter may need additional setup - run 'flutter doctor' to check"
echo "8. SQL Server tools (sqlcmd, bcp) are available after restarting terminal"
echo "9. Qt Creator IDE is available and ready for Qt6 C++ development"
echo "10. Qt6 tools: qmake6, cmake, and all Qt6 modules are installed"
echo "11. Change default shell to Zsh with: chsh -s \$(which zsh)"
echo "12. Go is installed - check with 'go version' after restarting terminal"
echo "13. Unattended-upgrades is configured for automatic security updates"
echo "14. System info tools: neofetch, fastfetch, and htop are available"

print_status "Setup script completed!"