Thursday, February 5, 2026

run sh di path linux

 

1. Tambahkan Alias secara Otomatis

Jalankan perintah ini untuk langsung memasukkan alias ke dalam konfigurasi bash Anda:

Bash
echo "alias run='/home/rs/run.sh'" >> ~/.bashrc

2. Aktifkan Perubahan

Agar terminal tidak perlu di-restart, jalankan perintah ini untuk memuat ulang konfigurasinya:

Bash
source ~/.bashrc

Wednesday, February 4, 2026

install qemu linux

 sudo apt update

sudo apt install qemu-guest-agent -y

sudo systemctl start qemu-guest-agent

Sunday, February 1, 2026

installasi zabix ( monitoring web server )

#!/bin/bash


# --- KONFIGURASI ---

ZBX_VER="alpine-7.0-latest"

MYSQL_PASS="zabbix_pwd"

NET_NAME="zabbix-net"

DB_VOL="zabbix-db-storage"


echo "🔍 Memulai pengecekan sistem..."


# 1. Cek Network & Volume

podman network exists $NET_NAME || podman network create $NET_NAME

podman volume exists $DB_VOL || podman volume create $DB_VOL


cleanup() {

    if [ "$(podman ps -aq -f name=^$1$)" ]; then

        echo "🔄 Membersihkan kontainer lama: $1..."

        podman rm -f $1 > /dev/null 2>&1

    fi

}


# 2. Jalankan Database (MySQL)

cleanup "zabbix-db"

echo "🗄️ Menjalankan MySQL 8.0..."

podman run -d --name zabbix-db \

  --net $NET_NAME \

  -e MYSQL_DATABASE="zabbix" \

  -e MYSQL_USER="zabbix" \

  -e MYSQL_PASSWORD="$MYSQL_PASS" \

  -e MYSQL_ROOT_PASSWORD="$MYSQL_PASS" \

  --restart always \

  -v $DB_VOL:/var/lib/mysql:Z \

  docker.io/mysql:8.0


# --- SMART CHECK: Tunggu MySQL Benar-benar Ready ---

echo -n "⏳ Menunggu Database siap (Handshake)..."

RETRIES=30

while [ $RETRIES -gt 0 ]; do

    # Cek apakah MySQL sudah bisa menerima koneksi

    if podman exec zabbix-db mysqladmin ping -h localhost -u zabbix -p"$MYSQL_PASS" --silent; then

        echo -e "\n✅ Database siap! Melanjutkan instalasi..."

        break

    fi

    echo -n "."

    sleep 2

    RETRIES=$((RETRIES-1))

done


if [ $RETRIES -eq 0 ]; then

    echo -e "\n❌ Timeout: Database gagal siap dalam 60 detik."

    echo "💡 Tips: Cek log dengan 'podman logs zabbix-db'"

    exit 1

fi


# 3. Jalankan Java Gateway

cleanup "zabbix-java-gateway"

podman run -d --name zabbix-java-gateway --net $NET_NAME --restart always docker.io/zabbix/zabbix-java-gateway:$ZBX_VER


# 4. Jalankan Zabbix Server Core

cleanup "zabbix-server"

echo "🧠 Menjalankan Zabbix Server..."

podman run -d --name zabbix-server \

  --net $NET_NAME \

  -p 10051:10051 \

  -e DB_SERVER_HOST="zabbix-db" \

  -e MYSQL_DATABASE="zabbix" \

  -e MYSQL_USER="zabbix" \

  -e MYSQL_PASSWORD="$MYSQL_PASS" \

  -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \

  --restart always \

  docker.io/zabbix/zabbix-server-mysql:$ZBX_VER


# --- SMART CHECK: Tunggu Zabbix Server siap ---

echo -n "⏳ Menunggu Zabbix Server listen di port 10051..."

RETRIES=20

while [ $RETRIES -gt 0 ]; do

    if podman exec zabbix-server nc -zv localhost 10051 > /dev/null 2>&1; then

        echo -e "\n✅ Server Core aktif!"

        break

    fi

    echo -n "."

    sleep 2

    RETRIES=$((RETRIES-1))

done


# 5. Jalankan Web Dashboard

cleanup "zabbix-web"

echo "🖥️ Menjalankan Web Dashboard..."

podman run -d --name zabbix-web \

  --net $NET_NAME \

  -p 8080:8080 \

  -e ZBX_SERVER_HOST="zabbix-server" \

  -e DB_SERVER_HOST="zabbix-db" \

  -e MYSQL_DATABASE="zabbix" \

  -e MYSQL_USER="zabbix" \

  -e MYSQL_PASSWORD="$MYSQL_PASS" \

  -e PHP_TZ="Asia/Jakarta" \

  --restart always \

  docker.io/zabbix/zabbix-web-nginx-mysql:$ZBX_VER


echo "------------------------------------------------"

echo "🚀 Zabbix Berhasil Dideploy dengan Smart Check!"

echo "🌐 URL: http://$(hostname -I | awk '{print $1}'):8080"

echo "------------------------------------------------"


Script: startzabbixagent-smart.sh

Bash
#!/bin/bash

# --- KONFIGURASI ---
CONTAINER_NAME="zabbix-agent"
ZABBIX_SERVER="192.168.10.65" # IP Server Pusat Anda
HOSTNAME_KITA=$(hostname)     # Mengambil hostname otomatis agar unik di dashboard
IMAGE="docker.io/zabbix/zabbix-agent2:alpine-7.0-latest"

echo "🔍 Memulai pengecekan Agent untuk host: $HOSTNAME_KITA..."

# 1. Cek apakah Podman terinstal
if ! command -v podman &> /dev/null; then
    echo "❌ Error: Podman tidak ditemukan. Silakan instal podman terlebih dahulu."
    exit 1
fi

# 2. Fungsi Cleanup: Hapus kontainer lama jika ada agar tidak bentrok
if [ "$(podman ps -aq -f name=$CONTAINER_NAME)" ]; then
    echo "🔄 Menghapus kontainer lama $CONTAINER_NAME..."
    podman rm -f $CONTAINER_NAME > /dev/null
fi

# 3. Jalankan Zabbix Agent 2 dengan fitur Smart & Portable
echo "🚀 Menjalankan Zabbix Agent 2 (Versi Alpine)..."

podman run -d --name $CONTAINER_NAME \
  --net=host \
  --privileged \
  --restart always \
  -e ZBX_SERVER_HOST="$ZABBIX_SERVER" \
  -e ZBX_HOSTNAME="$HOSTNAME_KITA" \
  -e ZBX_SERVER_ACTIVE="$ZABBIX_SERVER" \
  -v /:/host:ro,Z \
  -v /proc:/host/proc:ro,Z \
  -v /sys:/host/sys:ro,Z \
  $IMAGE

# 4. Verifikasi Akhir
if [ $? -eq 0 ]; then
    echo "------------------------------------------------"
    echo "✅ Agent Berhasil Dijalankan secara Portable!"
    echo "📊 Hostname di Zabbix: $HOSTNAME_KITA"
    echo "🔗 Terhubung ke Server: $ZABBIX_SERVER"
    echo "📝 Gunakan 'podman logs -f $CONTAINER_NAME' untuk cek log."
    echo "------------------------------------------------"
else
    echo "❌ Gagal menjalankan Agent."
fi


Berikut adalah panduan ringkas untuk membuat dashboard tabel pemantau (All-in-One) agar Anda bisa melihat status CPU, RAM, dan Uptime dari semua server sekaligus dalam satu layar tanpa perlu klik satu per satu.

1. Persiapan Host

Pastikan semua server (Windows/Linux) sudah terdaftar di menu Data Collection > Hosts dan indikator ZBX sudah berwarna Hijau.

2. Membuat Dashboard Baru

  1. Buka menu Dashboards (menu paling atas di sidebar).

  2. Klik tombol Create dashboard di pojok kanan atas.

  3. Beri nama, contoh: Monitoring Center, lalu klik Apply.

3. Menambahkan Widget Tabel (Top Hosts)

  1. Klik Add widget di tengah layar atau pojok kanan atas.

  2. Pilih Type: Top hosts.

  3. Pada bagian Hosts, pilih grup server Anda atau masukkan nama host satu per satu (seperti rs, server-windows, dsb).

4. Konfigurasi Kolom (Inti Tabel)

Klik tombol Add pada bagian Columns untuk setiap data yang ingin ditampilkan:

Nama KolomData / ItemCatatan
HostHost nameMenampilkan nama server.
IP AddressHost interfaceMenampilkan IP server secara otomatis.
CPUItem value: CPU utilizationMenampilkan beban prosesor dalam %.
RAMItem value: Memory utilizationMenampilkan penggunaan RAM dalam %.
UptimeItem value: System uptimeMenampilkan durasi server menyala.

5. Simpan dan Selesai





Friday, January 30, 2026

export import mysql di podman ubuntu server

 

1. Skrip Export (export_volume.sh)

Gunakan ini di server asal untuk membungkus folder data.

Bash
#!/bin/bash
CONTAINER_NAME="psmysql"
DB_DATA_DIR="$HOME/mysql"
BACKUP_DIR="$HOME/volume_backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# Buat folder backup jika belum ada
[[ ! -d "$BACKUP_DIR" ]] && mkdir -p "$BACKUP_DIR"

echo "📦 Archiving volume dari $DB_DATA_DIR..."
podman unshare tar -czf "$BACKUP_DIR/psmysql_$TIMESTAMP.tar.gz" -C "$DB_DATA_DIR" .

echo "✅ Selesai: $BACKUP_DIR/psmysql_$TIMESTAMP.tar.gz"

2. Skrip Import (import_volume.sh)

Gunakan ini di server tujuan untuk mengekstrak data.

Bash
#!/bin/bash
DB_DATA_DIR="$HOME/mysql"
BACKUP_DIR="$HOME/volume_backup"

# Cari file terbaru
LATEST_BACKUP=$(ls -t $BACKUP_DIR/*.tar.gz 2>/dev/null | head -1)

if [[ -z "$LATEST_BACKUP" ]]; then
    echo "❌ File backup tidak ditemukan di $BACKUP_DIR"; exit 1
fi

echo "📦 Import file: $(basename $LATEST_BACKUP)"
read -p "Lanjutkan? (y/n): " CONFIRM
[[ $CONFIRM != "y" ]] && exit 0

# Eksekusi
rm -rf "$DB_DATA_DIR" && mkdir -p "$DB_DATA_DIR"
podman unshare tar -xzvf "$LATEST_BACKUP" -C "$DB_DATA_DIR"
podman unshare chown -R 1001:1001 "$DB_DATA_DIR"

echo "✅ Import selesai. Silakan jalankan startmysql.sh"

Thursday, January 29, 2026

aplikasi wajib untuk gui di terminal

 btop seperti task manager 

ranger  file explorer 

pydf monitor disk 

podman mysql 8 percona di ubuntu server

 

🚀 Panduan Portabel Percona 8.0 (Podman)

1. Script: startmysql.sh (Tanpa InnoDB Config)

Gunakan $USER agar script otomatis mengenali siapa pun yang menjalankan script ini.

Bash
#!/bin/bash
# Nama File: startmysql.sh

CONTAINER_NAME="psmysql"
# Menggunakan $HOME agar otomatis menyesuaikan nama user server
DB_DATA_DIR="$HOME/mysql"
IMAGE_NAME="docker.io/percona/percona-server:8.0.44"

echo "--- Menjalankan Percona Server ---"

# Inisialisasi folder
mkdir -p "$DB_DATA_DIR"
# Paksa UID 1001 (default Percona) tanpa perlu tahu nama user host
podman unshare chown -R 1001:1001 "$DB_DATA_DIR"

podman rm -f $CONTAINER_NAME >/dev/null 2>&1 || true

podman run -d \
    --name $CONTAINER_NAME \
    --restart unless-stopped \
    -p 3306:3306 \
    -v "$DB_DATA_DIR":/var/lib/mysql:Z \
    -e TZ=Asia/Jakarta \
    -e MYSQL_ROOT_PASSWORD="SecretRootPassword" \
    -e MYSQL_ROOT_HOST="%" \
    $IMAGE_NAME \
    --max_connections=151 \
    --default-authentication-plugin=mysql_native_password \
    --sql-mode="" \
    --innodb_strict_mode=OFF \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_general_ci \
    --default-time-zone="+07:00"

echo "✅ Database berhasil dijalankan di $DB_DATA_DIR"

2. Script: startbackup.sh (Universal)

Menggunakan variabel $HOME dan $USER agar tidak gagal saat pindah server.

Bash
#!/bin/bash
# Nama File: startbackup.sh

CONTAINER_NAME="psmysql"
DATA_DIR="$HOME/mysql"
BACKUP_BASE_DIR="$HOME/backups"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
TARGET_DIR="/backups/backup_$TIMESTAMP"

mkdir -p "$BACKUP_BASE_DIR"
# Memberikan izin ke container tanpa hardcode nama user
podman unshare chown -R 1001:1001 "$BACKUP_BASE_DIR"

echo "--- Memulai Backup Fisik ---"
podman run --rm \
    --network container:$CONTAINER_NAME \
    -v "$DATA_DIR":/var/lib/mysql:ro,Z \
    -v "$BACKUP_BASE_DIR":/backups:z \
    docker.io/percona/percona-xtrabackup:8.0 \
    xtrabackup --backup \
        --host=127.0.0.1 \
        --user=root \
        --password="SecretRootPassword" \
        --target-dir="$TARGET_DIR"

# Kembalikan akses ke user yang sedang login saat ini
sudo chown -R $USER:$USER "$BACKUP_BASE_DIR"
echo "✅ Backup selesai: $BACKUP_BASE_DIR/backup_$TIMESTAMP"

3. Script: startrestore.sh (Solusi Error 13)

Ini adalah versi yang memperbaiki error pada gambar Anda dengan menggunakan sudo chown -R $USER:$USER agar tidak peduli siapa nama user-nya.

Bash
#!/bin/bash
# Nama File: startrestore.sh
set -e

CONTAINER_NAME="psmysql"
DATA_DIR="$HOME/mysql"
BACKUP_BASE_DIR="$HOME/backups"
IMAGE_XTRABACKUP="docker.io/percona/percona-xtrabackup:8.0"

echo "--- Proses Restore Database ---"

# Pilih folder backup
cd "$BACKUP_BASE_DIR"
PS3="Pilih nomor folder backup: "
select SELECTED in *; do
    if [ -n "$SELECTED" ]; then
        FULL_PATH="$BACKUP_BASE_DIR/$SELECTED"
        break
    fi
done

# SOLUSI ERROR 13: Ambil alih kepemilikan folder secara universal
sudo chown -R $USER:$USER "$FULL_PATH"
sudo chmod -R 777 "$FULL_PATH"

echo "1. Prepare Data (Applying Logs)..."
# Gunakan user 0:0 agar xtrabackup bisa mkdir #innodb_redo di dalam container
podman run --rm --user 0:0 -v "$FULL_PATH:/backup:rw,z" $IMAGE_XTRABACKUP \
    xtrabackup --prepare --target-dir=/backup

echo "2. Cleanup & Copy-back..."
podman rm -f $CONTAINER_NAME >/dev/null 2>&1 || true
sudo rm -rf "$DATA_DIR"
mkdir -p "$DATA_DIR"

podman run --rm --user 0:0 \
    -v "$FULL_PATH:/backup:ro,z" \
    -v "$DATA_DIR":/var/lib/mysql:rw,z \
    $IMAGE_XTRABACKUP \
    xtrabackup --copy-back --target-dir=/backup --datadir=/var/lib/mysql

# Final Touch: Set izin ke UID 1001 agar Percona bisa start
podman unshare chown -R 1001:1001 "$DATA_DIR"

echo "✅ Restore selesai. Sekarang jalankan ./startmysql.sh"

Tuesday, January 27, 2026

exec di ubuntu server


# buat file nano /home/rs/start-mysql.sh
#!/bin/bash cd /home/rs/podman/db_percona || exit 1 /usr/bin/podman compose up -d
# jadikan executable chmod +x /home/rs/start-mysql.sh
# jalankan /home/rs/start-mysql.sh

Sunday, January 25, 2026

docker mysql percona 8.0

nama file : docker-compose.yml 


version: "3.9"


services:
  mysql:
    image: percona/percona-server:8.0.44
    container_name: psmysql
    command:
      - --max_connections=151
      - --default-authentication-plugin=mysql_native_password
      - --sql-mode=
      - --innodb_strict_mode=OFF
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --default-time-zone=+07:00
    restart: unless-stopped
    environment:
      TZ: Asia/Jakarta
      MYSQL_ROOT_PASSWORD: SecretRootPassword
      MYSQL_ROOT_HOST: "%"
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Backup & Restore Docker Image Percona (Image Only)

 

Backup & Restore Docker Image Percona (Image Only)

Backup Image

Ukuran file .tar lebih kecil dari size image di Docker → NORMAL.

docker save percona/percona-server:8.0.44 -o percona_8.0.44.tar

Hasil:

  • File ±300–600 MB (compressed)

  • Image di Docker ±2 GB (uncompressed)


Hapus Image

docker rmi percona/percona-server:8.0.44

Restore Image

docker load -i percona_8.0.44.tar

Verifikasi

docker images

Image percona/percona-server:8.0.44 muncul kembali → restore sukses

Saturday, January 24, 2026

docker awal

 

Docker Praktis (Versi Ringkas)

Di mana buka PowerShell?

Buka PowerShell di folder yang ada docker-compose.yml

Contoh:

C:\docker\app └─ docker-compose.yml

Cara cepat:

  • Buka folder → klik kanan → Open in Terminal

  • Atau:

cd C:\docker\app

Perintah Utama Docker

Jalankan aplikasi

docker compose up -d

Hentikan aplikasi

docker compose down

Command Wajib Dihafal

docker ps docker compose up -d docker compose down docker logs <nama_container> docker rm -f <nama_container>

Catatan Penting

  • Jangan jalankan Docker dari folder sembarang

  • Satu aplikasi = satu folder

  • Semua perubahan lewat docker-compose.yml

Reuse Datastore PBS Lama di iSCSI

 

Rekap: Reuse Datastore PBS Lama di iSCSI (Tanpa Hilang Data)

Kasus
PBS baru, iSCSI lama berisi datastore PBS sebelumnya, data tidak boleh hilang.


1. Login iSCSI

apt install open-iscsi -y iscsiadm -m discovery -t sendtargets -p 193.168.10.19 iscsiadm -m node --login

Pastikan disk muncul (/dev/sdb).


2. Mount iSCSI (cek isi)

mount /dev/sdb /mnt/pbs ls -la /mnt/pbs

Jika terlihat struktur seperti:

.chunks .lock .gc-status vm

itu datastore PBS lama (VALID).


3. Daftarkan datastore EXISTING (UI & CLI akan gagal)

UI/CLI menolak karena path tidak kosong (by design).

Solusi resmi: edit config langsung

nano /etc/proxmox-backup/datastore.cfg

Isi:

datastore: nas-backup-19 path /mnt/pbs

Restart service:

systemctl restart proxmox-backup systemctl restart proxmox-backup-proxy

Datastore lama langsung muncul di UI.


4. Buat mount iSCSI permanen

Ambil UUID:

blkid /dev/sdb

Edit /etc/fstab:

UUID=xxxx /mnt/pbs xfs _netdev,noatime 0 2

Reload:

systemctl daemon-reload

Aktifkan auto-login iSCSI:

iscsiadm -m node -p 193.168.10.19 --op update -n node.startup -v automatic

5. Tes final (reboot)

reboot mount | grep /mnt/pbs

Jika masih ter-mount → PERMANEN & AMAN.

Tuesday, January 20, 2026

check datetime mysql

 SELECT @@global.time_zone, @@session.time_zone, NOW(), CURRENT_TIMESTAMP();


Sunday, January 18, 2026

setting wazuh agent tanpa wazuh manager di windowserver22

<localfile>

    <location>eventchannel</location>

  </localfile>

  <localfile>

    <location>syscheck.log</location>

  </localfile>



 <ossec_config>

  <client>

    <server>

      <address>127.0.0.1</address>

    </server>

  </client>

</ossec_config>



Saturday, January 17, 2026

bat file disable update windows server2022

 @echo off

echo === KILL UPDATE PROCESSES ===

taskkill /F /IM "MoUsoCoreWorker.exe" /T >nul 2>&1

taskkill /F /IM "usoclient.exe" /T >nul 2>&1

taskkill /F /IM "wuauclt.exe" /T >nul 2>&1


echo === STOP SERVICES ===

net stop wuauserv /y >nul 2>&1

net stop bits /y >nul 2>&1

net stop UsoSvc /y >nul 2>&1

net stop DoSvc /y >nul 2>&1


echo === DISABLE SERVICE MAIN ===

sc config wuauserv start= disabled >nul 2>&1

sc config bits start= disabled >nul 2>&1

sc config UsoSvc start= disabled >nul 2>&1


echo === APPLY REGISTRY POLICIES ===

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations /t REG_DWORD /d 1 /f

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 1 /f

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions /t REG_DWORD /d 1 /f


echo === DISABLE TASK SCHEDULER UPDATE ===

schtasks /Change /TN "\Microsoft\Windows\WindowsUpdate\Scheduled Start" /Disable >nul 2>&1

schtasks /Change /TN "\Microsoft\Windows\WindowsUpdate\Maintenance Install" /Disable >nul 2>&1

schtasks /Change /TN "\Microsoft\Windows\UpdateOrchestrator\Schedule Scan" /Disable >nul 2>&1

schtasks /Change /TN "\Microsoft\Windows\UpdateOrchestrator\Schedule Retry Scan" /Disable >nul 2>&1

schtasks /Change /TN "\Microsoft\Windows\UpdateOrchestrator\USO_UxBroker" /Disable >nul 2>&1


echo === RENAME SOFTWARE DISTRIBUTION ===

ren C:\Windows\SoftwareDistribution SoftwareDistribution.old >nul 2>&1


echo === DONE ===

pause