Sunday, February 15, 2026
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:
echo "alias run='/home/rs/run.sh'" >> ~/.bashrc
2. Aktifkan Perubahan
Agar terminal tidak perlu di-restart, jalankan perintah ini untuk memuat ulang konfigurasinya:
source ~/.bashrcWednesday, 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
#!/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
Buka menu Dashboards (menu paling atas di sidebar).
Klik tombol Create dashboard di pojok kanan atas.
Beri nama, contoh:
Monitoring Center, lalu klik Apply.
3. Menambahkan Widget Tabel (Top Hosts)
Klik Add widget di tengah layar atau pojok kanan atas.
Pilih Type: Top hosts.
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 Kolom | Data / Item | Catatan |
| Host | Host name | Menampilkan nama server. |
| IP Address | Host interface | Menampilkan IP server secara otomatis. |
| CPU | Item value: CPU utilization | Menampilkan beban prosesor dalam %. |
| RAM | Item value: Memory utilization | Menampilkan penggunaan RAM dalam %. |
| Uptime | Item value: System uptime | Menampilkan 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.
#!/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.
#!/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.
#!/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.
#!/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.
#!/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"
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
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