#!/bin/bash # ============================================================================= # # ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ # ██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗ # ███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝ # ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗ # ███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║ # ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ # # Server Setup Script — by suryacagur # https://server.suryacagur.online # https://github.com/suryacagur/FreshServer # # ============================================================================= # ───────────────────────────────────────────────────────────────────────────── # COLORS # ───────────────────────────────────────────────────────────────────────────── RED='\e[31m' GREEN='\e[32m' YELLOW='\e[33m' BLUE='\e[34m' MAGENTA='\e[35m' CYAN='\e[36m' WHITE='\e[97m' DARK_GRAY='\e[90m' BOLD='\e[1m' RESET='\e[0m' # ───────────────────────────────────────────────────────────────────────────── # LABELS # ───────────────────────────────────────────────────────────────────────────── TAG_INFO="${CYAN}[INFO]${RESET}" TAG_OK="${GREEN}[ OK ]${RESET}" TAG_SUKSES="${BOLD}${GREEN}[SUKSES]${RESET}" TAG_WARNING="${YELLOW}[ WARN ]${RESET}" TAG_ERROR="${BOLD}${RED}[ERROR]${RESET}" TAG_STEP="${BOLD}${BLUE}[STEP]${RESET}" TAG_INPUT="${BOLD}${WHITE}[INPUT]${RESET}" TAG_PROSES="${DARK_GRAY}[PROSES]${RESET}" TAG_NOTICE="${BOLD}${MAGENTA}[NOTICE]${RESET}" TAG_SKIP="${CYAN}[ SKIP ]${RESET}" # ───────────────────────────────────────────────────────────────────────────── # STATE TRACKING # ───────────────────────────────────────────────────────────────────────────── CURRENT_USER="$(whoami)" HOME_DIR="$(eval echo ~"$CURRENT_USER")" CURRENT_DIR="$(pwd)" START_TIME="$(date '+%Y-%m-%d %H:%M:%S')" NVM_VERSION="—" NPM_VERSION="—" PNPM_VERSION="—" BREW_VERSION="—" GCC_VERSION="—" TREE_VERSION="—" SSH_STATUS="—" BRAVE_VERSION="—" NPM_PNPM_SKIPPED=false BREW_SKIPPED=false SSH_SKIPPED=false # APT Command Tracking APT_UPDATE_INITIAL_STATUS="❌" APT_UPGRADE_INITIAL_STATUS="❌" APT_INSTALL_STATUS="❌" APT_UPDATE_FINAL_STATUS="❌" APT_UPGRADE_FINAL_STATUS="❌" # Package List for Verification PACKAGES_TO_INSTALL=( "curl" "wget" "git" "build-essential" "ca-certificates" "unzip" "usb-creator-gtk" "openssh-server" ) # ───────────────────────────────────────────────────────────────────────────── # HELPER FUNCTIONS # ───────────────────────────────────────────────────────────────────────────── info() { echo -e " ${TAG_INFO} $*"; } ok() { echo -e " ${TAG_OK} $*"; } sukses() { echo -e " ${TAG_SUKSES} $*"; } warning() { echo -e " ${TAG_WARNING} $*"; } err() { echo -e " ${TAG_ERROR} $*"; } proses() { echo -e " ${TAG_PROSES} ${DARK_GRAY}$*${RESET}"; } notice() { echo -e " ${TAG_NOTICE} ${BOLD}$*${RESET}"; } skip() { echo -e " ${TAG_SKIP} $*"; } step() { local title="$*" echo "" echo -e " ${TAG_STEP} ${BOLD}${WHITE}${title}${RESET}" echo -e " ${DARK_GRAY}$(printf '─%.0s' $(seq 1 60))${RESET}" } # Kotak bold kuning — digunakan untuk highlight interaksi user yang diperlukan bold_notice() { local msg="$*" local width=72 local msglen=${#msg} local pad=$(( width - msglen - 2 )) [ $pad -lt 0 ] && pad=0 local spaces spaces="$(printf ' %.0s' $(seq 1 $pad))" echo "" echo -e " ${BOLD}${YELLOW}┌$(printf '─%.0s' $(seq 1 $width))┐${RESET}" echo -e " ${BOLD}${YELLOW}│ ${WHITE}${msg}${spaces}${YELLOW} │${RESET}" echo -e " ${BOLD}${YELLOW}└$(printf '─%.0s' $(seq 1 $width))┘${RESET}" echo "" } abort() { echo "" err "$*" echo "" exit 1 } # ───────────────────────────────────────────────────────────────────────────── # ASCII HEADER # ───────────────────────────────────────────────────────────────────────────── print_header() { clear echo "" echo -e "${BOLD}${CYAN}" echo "███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ " echo "██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗" echo "███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝" echo "╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗" echo "███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║" echo "╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝" echo -e "${RESET}" echo -e " ${BOLD}${WHITE}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${WHITE} Server Setup Script · by suryacagur ${RESET}" echo -e " ${BOLD}${WHITE} https://github.com/suryacagur/FreshServer ${RESET}" echo -e " ${BOLD}${WHITE}══════════════════════════════════════════════════════${RESET}" echo "" } # ============================================================================= # STEP 1 — KESIAPAN PENGGUNA # ============================================================================= check_readiness() { step "PERSIAPAN — Kesiapan Pengguna" echo "" info "Script ini akan melakukan instalasi server environment secara lengkap." info "Beberapa tahap memerlukan kehadiran aktif Anda di depan komputer untuk:" echo "" echo -e " ${YELLOW}→${RESET} Mengisi password ${BOLD}sudo${RESET} saat diminta" echo -e " ${YELLOW}→${RESET} Konfirmasi interaktif ${BOLD}y/Y${RESET} pada pnpm" echo -e " ${YELLOW}→${RESET} Menekan ${BOLD}RETURN/ENTER${RESET} saat instalasi Homebrew" echo "" echo -e " ${BOLD}${YELLOW}Menjalan script ini harus standby depan komputer untuk mengisi${RESET}" echo -e " ${BOLD}${YELLOW}password sudo dan interaktif yes pada beberapa package,${RESET}" echo -ne " ${TAG_INPUT} ${BOLD}apakah Anda siap? [y/N]: ${RESET}" local ready_answer read -r ready_answer /dev/null; then BRAVE_VERSION="$(brave --version 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo 'installed')" ok "Brave Browser sudah terinstall — versi: ${BOLD}${BRAVE_VERSION}${RESET}" return 0 fi warning "Brave Browser tidak ditemukan. Memulai proses instalasi..." # ── 9a: INSTALL BRAVE BROWSER ─────────────────────────────────────────── step "INSTALASI — Brave Browser via curl" proses "Menjalankan: curl -fsS https://dl.brave.com/install.sh | sh" printf "${DARK_GRAY}" curl -fsS https://dl.brave.com/install.sh | sh local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall Brave Browser. Periksa koneksi internet dan coba lagi." fi ok "Brave Browser installer selesai dijalankan." if command -v brave &>/dev/null; then BRAVE_VERSION="$(brave --version 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo 'installed')" ok "Brave Browser berhasil diinstall — versi: ${BOLD}${BRAVE_VERSION}${RESET}" else warning "Brave Browser belum terdeteksi. Coba restart terminal setelah script selesai." BRAVE_VERSION="(perlu restart terminal)" fi } # ============================================================================= # STEP 10 — CEK DAN INSTALASI npm & pnpm via NVM # ============================================================================= check_install_npm_pnpm() { step "PEMERIKSAAN — npm dan pnpm" local npm_exists=false local pnpm_exists=false if command -v npm &>/dev/null; then npm_exists=true NPM_VERSION="$(npm --version 2>/dev/null || echo 'unknown')" ok "npm sudah terinstall — versi: ${BOLD}${NPM_VERSION}${RESET}" else warning "npm tidak ditemukan di sistem." fi if command -v pnpm &>/dev/null; then pnpm_exists=true PNPM_VERSION="$(pnpm --version 2>/dev/null || echo 'unknown')" ok "pnpm sudah terinstall — versi: ${BOLD}${PNPM_VERSION}${RESET}" else warning "pnpm tidak ditemukan di sistem." fi if [ "${npm_exists}" = true ] && [ "${pnpm_exists}" = true ]; then NPM_PNPM_SKIPPED=true # Coba ambil NVM version jika tersedia if [ -s "$HOME/.nvm/nvm.sh" ]; then export NVM_DIR="$HOME/.nvm" # shellcheck source=/dev/null \. "$NVM_DIR/nvm.sh" 2>/dev/null || true NVM_VERSION="$(nvm --version 2>/dev/null || echo 'N/A')" else NVM_VERSION="N/A (tidak terdeteksi)" fi skip "npm dan pnpm sudah tersedia. Melewati instalasi NVM." return 0 fi # ── 10a: INSTALL NVM ──────────────────────────────────────────────────── step "INSTALASI — NVM (Node Version Manager) v0.40.4" proses "Mendownload dan menjalankan installer NVM v0.40.4..." printf "${DARK_GRAY}" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall NVM. Periksa koneksi internet dan coba lagi." fi ok "NVM installer selesai dijalankan." # ── 10b: LOAD NVM ─────────────────────────────────────────────────────── proses "Memuat NVM ke sesi shell saat ini..." export NVM_DIR="$HOME/.nvm" # shellcheck source=/dev/null [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # shellcheck source=/dev/null [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # ── 10c: SOURCE NVM ───────────────────────────────────────────────────── proses "Menjalankan: . \$HOME/.nvm/nvm.sh" # shellcheck source=/dev/null \. "$HOME/.nvm/nvm.sh" || abort "Gagal menjalankan source NVM." if ! command -v nvm &>/dev/null; then abort "NVM tidak dapat dimuat ke sesi shell. Coba restart terminal dan jalankan ulang script." fi NVM_VERSION="$(nvm --version 2>/dev/null || echo 'unknown')" ok "NVM berhasil dimuat — versi: ${BOLD}${NVM_VERSION}${RESET}" # ── 10d: INSTALL NODE 24 ──────────────────────────────────────────────── step "INSTALASI — Node.js 24 via NVM" proses "Menjalankan: nvm install 24" printf "${DARK_GRAY}" nvm install 24 local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall Node.js 24 via NVM." fi NPM_VERSION="$(npm --version 2>/dev/null || echo 'unknown')" ok "Node.js 24 berhasil diinstall — npm versi: ${BOLD}${NPM_VERSION}${RESET}" # ── 10e: COREPACK ENABLE PNPM ─────────────────────────────────────────── step "INSTALASI — pnpm via Corepack" proses "Menjalankan: corepack enable pnpm" printf "${DARK_GRAY}" corepack enable pnpm local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menjalankan corepack enable pnpm." fi ok "Corepack pnpm berhasil diaktifkan." # ── 10f: PNPM -V (INTERAKTIF) ─────────────────────────────────────────── bold_notice "⚡ INTERAKTIF — pnpm mungkin meminta konfirmasi instalasi." bold_notice " Ketik y/Y lalu tekan ENTER jika ada konfirmasi muncul:" printf "${DARK_GRAY}" pnpm -v /dev/null; then PNPM_VERSION="$(pnpm --version 2>/dev/null || echo 'unknown')" ok "pnpm berhasil terinstall — versi: ${BOLD}${PNPM_VERSION}${RESET}" else warning "pnpm belum terdeteksi. Coba restart terminal setelah script selesai." PNPM_VERSION="(perlu restart terminal)" fi } # ============================================================================= # STEP 11 — CEK DAN INSTALASI HOMEBREW # ============================================================================= check_install_homebrew() { step "PEMERIKSAAN — Homebrew" if command -v brew &>/dev/null; then BREW_VERSION="$(brew --version 2>/dev/null | head -1 || echo 'unknown')" BREW_SKIPPED=true ok "Homebrew sudah terinstall — ${BOLD}${BREW_VERSION}${RESET}" skip "Melewati instalasi Homebrew. Lanjut ke brew install gcc..." return 0 fi warning "Homebrew tidak ditemukan. Memulai proses instalasi..." info "Catatan: Homebrew tidak bisa diinstall sebagai root (sudah diverifikasi di awal)." # ── 11a: INSTALL HOMEBREW ─────────────────────────────────────────────── bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta:" bold_notice "⚡ RETURN/ENTER — Tekan ENTER untuk konfirmasi instalasi Homebrew:" printf "${DARK_GRAY}" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall Homebrew. Periksa koneksi internet dan coba lagi." fi ok "Homebrew berhasil diinstall." # ── 11b: TAMBAH KE .bashrc ───────────────────────────────────────────── proses "Menambahkan konfigurasi Homebrew ke /home/${CURRENT_USER}/.bashrc..." echo >> "/home/${CURRENT_USER}/.bashrc" \ || abort "Gagal menulis ke /home/${CURRENT_USER}/.bashrc" echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> "/home/${CURRENT_USER}/.bashrc" \ || abort "Gagal menambahkan brew shellenv ke /home/${CURRENT_USER}/.bashrc" ok "Konfigurasi Homebrew ditambahkan ke .bashrc" # ── 11c: EVAL SHELLENV ───────────────────────────────────────────────── proses "Menjalankan: eval \"\$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)\"" eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)" \ || abort "Gagal menjalankan brew shellenv eval." ok "Homebrew shellenv dimuat ke sesi saat ini." if ! command -v brew &>/dev/null; then abort "Homebrew tidak dapat dideteksi setelah instalasi. Coba restart terminal." fi BREW_VERSION="$(brew --version 2>/dev/null | head -1 || echo 'unknown')" ok "Homebrew versi: ${BOLD}${BREW_VERSION}${RESET}" } # ============================================================================= # STEP 12 — BREW INSTALL GCC # ============================================================================= install_gcc() { step "INSTALASI — gcc via Homebrew" proses "Menjalankan: brew install gcc" printf "${DARK_GRAY}" brew install gcc local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall gcc via Homebrew." fi GCC_VERSION="$(gcc --version 2>/dev/null | head -1 || echo 'unknown')" ok "gcc berhasil diinstall — ${BOLD}${GCC_VERSION}${RESET}" } # ============================================================================= # STEP 13 — BREW INSTALL TREE # ============================================================================= install_tree() { step "INSTALASI — tree via Homebrew" proses "Menjalankan: brew install tree" printf "${DARK_GRAY}" brew install tree local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then abort "Gagal menginstall tree via Homebrew." fi TREE_VERSION="$(tree --version 2>/dev/null | head -1 || echo 'unknown')" ok "tree berhasil diinstall — ${BOLD}${TREE_VERSION}${RESET}" } # ============================================================================= # STEP 14 — APT UPDATE (FINAL) # ============================================================================= run_apt_update_final() { step "PROSES — Memperbarui Daftar Package Final (apt update)" proses "Menjalankan: sudo apt update" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" printf "${DARK_GRAY}" sudo apt update local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then APT_UPDATE_FINAL_STATUS="❌" abort "Gagal menjalankan sudo apt update (final)." fi APT_UPDATE_FINAL_STATUS="✅" echo "" ok "apt update final selesai." } # ============================================================================= # STEP 15 — APT UPGRADE (FINAL) # ============================================================================= run_apt_upgrade_final() { step "PROSES — Memperbarui Package Final (apt upgrade)" proses "Menjalankan: sudo apt upgrade -y" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" printf "${DARK_GRAY}" sudo apt upgrade -y local exit_code=$? printf "${RESET}" if [ $exit_code -ne 0 ]; then APT_UPGRADE_FINAL_STATUS="❌" abort "Gagal menjalankan sudo apt upgrade -y (final)." fi APT_UPGRADE_FINAL_STATUS="✅" echo "" ok "apt upgrade final selesai." } # ============================================================================= # STEP 16 — RINGKASAN INSTALASI # ============================================================================= print_summary() { local end_time end_time="$(date '+%Y-%m-%d %H:%M:%S')" echo "" echo -e " ${BOLD}${GREEN}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${GREEN} INSTALASI SELESAI — RINGKASAN ${RESET}" echo -e " ${BOLD}${GREEN}══════════════════════════════════════════════════════${RESET}" echo "" # ① Package Sistem echo -e " ${BOLD}${CYAN}① Package Sistem yang Diinstall (apt):${RESET}" for pkg in "${PACKAGES_TO_INSTALL[@]}"; do echo -e " ${GREEN}✔${RESET} ${pkg}" done echo "" # ② NVM / npm / pnpm echo -e " ${BOLD}${CYAN}② Node.js Environment:${RESET}" if [ "${NPM_PNPM_SKIPPED}" = true ]; then echo -e " ${CYAN}ℹ${RESET} NVM — versi ${BOLD}${NVM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" echo -e " ${GREEN}✔${RESET} npm — versi ${BOLD}${NPM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" echo -e " ${GREEN}✔${RESET} pnpm — versi ${BOLD}${PNPM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" else echo -e " ${GREEN}✔${RESET} NVM — versi ${BOLD}${NVM_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} npm — versi ${BOLD}${NPM_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} pnpm — versi ${BOLD}${PNPM_VERSION}${RESET}" fi echo "" # ③ Homebrew echo -e " ${BOLD}${CYAN}③ Homebrew:${RESET}" if [ "${BREW_SKIPPED}" = true ]; then echo -e " ${GREEN}✔${RESET} ${BOLD}${BREW_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" else echo -e " ${GREEN}✔${RESET} ${BOLD}${BREW_VERSION}${RESET}" fi echo "" # ④ Homebrew Packages echo -e " ${BOLD}${CYAN}④ Package Homebrew yang Diinstall:${RESET}" echo -e " ${GREEN}✔${RESET} gcc — ${BOLD}${GCC_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} tree — ${BOLD}${TREE_VERSION}${RESET}" echo "" # ⑤ SSH Service echo -e " ${BOLD}${CYAN}⑤ SSH Service:${RESET}" local ssh_status ssh_status="$(systemctl is-active ssh 2>/dev/null || echo 'unknown')" if [ "${ssh_status}" = "active" ]; then echo -e " ${GREEN}✔${RESET} SSH Service — ${BOLD}${ssh_status}${RESET}" else echo -e " ${RED}✗${RESET} SSH Service — ${BOLD}${ssh_status}${RESET}" echo -e " ${YELLOW}⚠${RESET} SSH tidak berjalan. Cara menjalankan:" echo -e " ${DARK_GRAY}1. sudo systemctl start ssh${RESET}" echo -e " ${DARK_GRAY}2. sudo systemctl enable ssh${RESET}" fi echo "" # ⑥ Brave Browser echo -e " ${BOLD}${CYAN}⑥ Brave Browser:${RESET}" if [ -n "${BRAVE_VERSION}" ] && [ "${BRAVE_VERSION}" != "—" ]; then echo -e " ${GREEN}✔${RESET} Brave — ${BOLD}${BRAVE_VERSION}${RESET}" else echo -e " ${CYAN}ℹ${RESET} Brave — tidak terinstall" fi echo "" # ⑦ Waktu Eksekusi echo -e " ${BOLD}${CYAN}⑦ Waktu Eksekusi:${RESET}" echo -e " ${DARK_GRAY}Mulai : ${START_TIME}${RESET}" echo -e " ${DARK_GRAY}Selesai : ${end_time}${RESET}" echo "" sukses "Server environment berhasil dikonfigurasi!" info "Disarankan ${BOLD}restart terminal${RESET} agar semua perubahan PATH aktif penuh." echo "" } # ============================================================================= # STEP 17 — OPSI LOG # ============================================================================= ask_log() { step "OPSIONAL — Buat Log Instalasi" echo "" echo -ne " ${TAG_INPUT} ${BOLD}Apakah Anda ingin membuat log untuk semua proses ini? [y/N]: ${RESET}" local log_answer read -r log_answer "${log_file}" << LOGEOF # Log Instalasi Server > **Script** : Server Setup Script by suryacagur > **URL** : https://server.suryacagur.online > **Repository** : https://github.com/suryacagur/FreshServer > **User** : \`${CURRENT_USER}\` > **Home** : \`${HOME_DIR}\` > **Mulai** : \`${START_TIME}\` > **Selesai** : \`${end_time}\` --- ## ① Package Sistem (apt install) | Package | Status | |---|---| $(for pkg in "${PACKAGES_TO_INSTALL[@]}"; do if dpkg -l | grep -q "^ii.*$pkg"; then echo "| $pkg | ✅ Terinstall |" else echo "| $pkg | ❌ Tidak terinstall |" fi done) --- ## ② Node.js Environment | Tool | Versi | Keterangan | |---|---|---| | NVM | \`${NVM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | npm | \`${NPM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | pnpm | \`${PNPM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | --- ## ③ Homebrew | Package | Versi | Keterangan | |---|---|---| | Homebrew | \`${BREW_VERSION}\` | $([ "${BREW_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | gcc | \`${GCC_VERSION}\` | $(command -v gcc &>/dev/null && echo "Terinstall via Homebrew" || echo "Tidak terinstall") | | tree | \`${TREE_VERSION}\` | $(command -v tree &>/dev/null && echo "Terinstall via Homebrew" || echo "Tidak terinstall") | --- ## ④ Proses apt yang Dijalankan | Perintah | Status | |---|---| | \`sudo apt update\` (awal) | $([ "${APT_UPDATE_INITIAL_STATUS}" = "✅" ] && echo "✅ Berhasil" || echo "❌ Gagal") | | \`sudo apt upgrade -y\` (awal) | $([ "${APT_UPGRADE_INITIAL_STATUS}" = "✅" ] && echo "✅ Berhasil" || echo "❌ Gagal") | | \`sudo apt install -y [packages]\` | $([ "${APT_INSTALL_STATUS}" = "✅" ] && echo "✅ Berhasil" || echo "❌ Gagal") | | \`sudo apt update\` (akhir) | $([ "${APT_UPDATE_FINAL_STATUS}" = "✅" ] && echo "✅ Berhasil" || echo "❌ Gagal") | | \`sudo apt upgrade -y\` (akhir) | $([ "${APT_UPGRADE_FINAL_STATUS}" = "✅" ] && echo "✅ Berhasil" || echo "❌ Gagal") | --- ## ⑤ SSH Service | Layanan | Status | Catatan | |---|---|---| | SSH | $(systemctl is-active ssh 2>/dev/null \|\| echo "unknown") | Diaktifkan dan dijalankan | --- ## ⑥ Brave Browser | Package | Status | Catatan | |---|---|---| | Brave | $(command -v brave &>/dev/null && echo "✅ Terinstall" || echo "❌ Tidak terinstall") | $(command -v brave &>/dev/null && echo "Browser Chromium by Brave Software" || echo "Dapat diinstall dengan curl dl.brave.com") | --- *Log ini dibuat secara otomatis oleh server.sh — suryacagur* *https://github.com/suryacagur/FreshServer* LOGEOF local log_exit=$? if [ $log_exit -eq 0 ]; then sukses "Log berhasil disimpan di: ${BOLD}${log_file}${RESET}" else warning "Gagal membuat file log. Periksa izin direktori: ${CURRENT_DIR}" fi ;; n|N|"") info "Log tidak dibuat." ;; *) warning "Input tidak valid. Log tidak dibuat." ;; esac # Penutup echo "" echo -e " ${BOLD}${CYAN}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${WHITE} Terima kasih telah menggunakan Server Setup Script. ${RESET}" echo -e " ${BOLD}${WHITE} Semoga server Anda berjalan dengan lancar dan ${RESET}" echo -e " ${BOLD}${WHITE} optimal sesuai kebutuhan Anda. ${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${WHITE} Salam, — suryacagur ${RESET}" echo -e " ${BOLD}${WHITE} https://github.com/suryacagur/FreshServer ${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${CYAN}══════════════════════════════════════════════════════${RESET}" echo "" } # ============================================================================= # MAIN # ============================================================================= main() { print_header check_readiness check_not_root check_architecture check_os run_apt_update_initial run_apt_upgrade_initial install_packages start_enable_ssh install_brave_browser check_install_npm_pnpm check_install_homebrew install_gcc install_tree run_apt_update_final run_apt_upgrade_final print_summary ask_log } main