GeistHaus
log in · sign up

Adiyat Mubarak

Part of wordpress.com

stories
WSL Port Forwarding Windows Host
Uncategorizedcontainerdockerexpose port wsl to windowspodmanwslwsl exposed port not accessible in windows
Ketika menjalankan container dengan exposed port dengan harapan bisa diakses melalui host, namun ternyata cara ini tidak bisa dilakukan ketika container kita berjalan di WSL. Contohnya seperti PostgreSQL saya yang dijalankan diatas Podman di WSL Windows. Port 5432 sudah di expose namun belum bisa diakses melalui Windows Host. Ternyata kita perlu melakukan konfigurasi tambahan untuk […]
Show full content

Ketika menjalankan container dengan exposed port dengan harapan bisa diakses melalui host, namun ternyata cara ini tidak bisa dilakukan ketika container kita berjalan di WSL.

Contohnya seperti PostgreSQL saya yang dijalankan diatas Podman di WSL Windows. Port 5432 sudah di expose namun belum bisa diakses melalui Windows Host.

CONTAINER ID  IMAGE                                   COMMAND     CREATED       STATUS         PORTS                   NAMES
b6263d5bef4a  docker.io/library/postgres:16.2-alpine  postgres    15 hours ago  Up 16 minutes  0.0.0.0:5432->5432/tcp  postgres

Ternyata kita perlu melakukan konfigurasi tambahan untuk melakukan port forwarding pada Windows Host.

# Jalankan perintah berikut di host machine, bukan di WSL.
$  sudo netsh interface portproxy add v4tov4 listenport=5432 listenaddress=0.0.0.0 connectport=5432 connectaddress=127.0.0.1

Untuk melakukan pengecekan bisa menggunakan perintah berikut:

$ netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         5432        127.0.0.1       5432

Langkah terkahir yang perlu dilakukan adalah mengetahui alamat IP dari WSL kita, untuk selanjutnya dipanggil pada client kita.

# Jalankan perintah di Windows Host.
$  wsl hostname -I
17x.xx.x.xx

# Atau bisa jalankan perintah didalam WSL.
$ hostname -I
17x.xx.x.xx

Selanjutnya, kita bisa mengakses menggunakan alamat IP dari perintah hostname diatas.

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2611
Extensions
Fix: Podman error netavark: nftables error: “nft” did not return successfully while applying ruleset in WSL
ServerUncategorizedpodmanpodman netavark issuepodman networkpodman network error nftableswsl
Reference: https://github.com/containers/podman/issues/25201
Show full content
$ sudo dnf install iptables-nft # or using apt
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/containers.conf

# add this
[network]
firewall_driver="iptables"

Reference: https://github.com/containers/podman/issues/25201

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2604
Extensions
Setup Grafana & Prometheus Monitoring – Part 3
Cloudgrafanagrafana dashboardprometheussetup grafana
Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain: Install Grafana Grafana adalah dashboard yang nantinya akan menampilkan semua metric pada service atau sistem dalam bentuk visual chart. Untuk langkah-langkah instalasi bisa mengikuti langkah berikut: 1. Install Grafana via apt. 2. Menjalankan daemon Grafana pada systemd. 3. Setelah selesai, selanjutnya Grafana siap digunakan secara […]
Show full content

Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain:

  1. Install Prometheus
  2. Install Node Exporter
  3. Install Grafana
Install Grafana

Grafana adalah dashboard yang nantinya akan menampilkan semua metric pada service atau sistem dalam bentuk visual chart.

Untuk langkah-langkah instalasi bisa mengikuti langkah berikut:

1. Install Grafana via apt.

$ sudo apt-get install -y apt-transport-https software-properties-common wget
$ sudo mkdir -p /etc/apt/keyrings/
$ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
$ sudo apt update
$ sudo apt install grafana

2. Menjalankan daemon Grafana pada systemd.

$ sudo systemctl enable --now grafana-server
$ sudo systemctl status grafana-server

● grafana-server.service - Grafana instance
     Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-03-25 17:58:48 WIB; 3s ago
       Docs: http://docs.grafana.org
   Main PID: 3254 (grafana)
      Tasks: 19 (limit: 18879)
     Memory: 68.5M ()
     CGroup: /system.slice/grafana-server.service
             └─3254 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafa>

3. Setelah selesai, selanjutnya Grafana siap digunakan secara default di port 3000.

Untuk login pertama kali bisa menggunakan default credential “admin:admin” dan selanjutnya akan diarahkan untuk reset default password.

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2590
Extensions
Setup Grafana & Prometheus Monitoring – Part 2
Cloudmonitoringmonitoring node-exporternode-exporterprometheusprometheus job node-exporterprometheus node-exporter
Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain: Install Node Exporter Node exporter adalah plugin tambahan dari Prometheus, yang bertugas menampilkan metric dari host sistem operasi. Nantinya metric sistem operasi ini akan di ambil oleh Prometheus untuk ditampilkan pada Dashboard. Untuk instalasinya bisa mengikuti langkah-langkah berikut: 1. Install binary node exporter 2. Buat […]
Show full content

Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain:

  1. Install Prometheus
  2. Install Node Exporter
  3. Install Grafana
Install Node Exporter

Node exporter adalah plugin tambahan dari Prometheus, yang bertugas menampilkan metric dari host sistem operasi. Nantinya metric sistem operasi ini akan di ambil oleh Prometheus untuk ditampilkan pada Dashboard.

Untuk instalasinya bisa mengikuti langkah-langkah berikut:

1. Install binary node exporter

$ tar xzvf node_exporter-1.9.0.linux-amd64.tar.gz
$ cd node_exporter-1.9.0.linux-amd64/
$ sudo mv node_exporter /usr/local/bin/

2. Buat konfigurasi node_exporter daemon di systemd.

$  sudo vim /etc/systemd/system/node-exporter.service

[Unit]
Description=Prometheus exporter for machine metrics

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

3. Mengaktifkan daemon systemd node_exporter.

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now node-exporter
$ sudo systemctl status node-exporter

● node-exporter.service - Prometheus exporter for machine metrics
     Loaded: loaded (/etc/systemd/system/node-exporter.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-03-25 16:20:57 WIB; 18s ago
   Main PID: 1136 (node_exporter)
      Tasks: 5 (limit: 18879)
     Memory: 5.1M ()
     CGroup: /system.slice/node-exporter.service
             └─1136 /usr/local/bin/node_exporter

4. Menambahkan node_exporter ke Prometheus Job.

$ sudo vim /etc/prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "node-exporter"                                                                                                                                                                   
    static_configs:                                                                                                                                                                               
      - targets: ["localhost:9100"] 

6. Langkah terakhir, restart daemon prometheus dan job node exporter akan muncul di prometheus dashboard.

$ sudo systemctl restart prometheus

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2573
Extensions
Setup Grafana & Prometheus Monitoring – Part 1
Cloudgrafanamonitoring grafana and prometheusprometheusprometheus node exportersetuo prometheus monitoringsetup grafana monitoring
Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain: Install Prometheus Prometheus akan bertugas sebagai time-series database yang akan mengkoleksi data-data metrics dari OS atau sistem, dan langkah-langkah instalasinya bisa mengikuti langkah berikut: 1. Install Binary Prometheus. 2. Siapkan directory konfigurasi Prometheus. 3. Buat user & group prometheus dan assign user ke directory […]
Show full content

Akan 3 bagian yang harus di-install dan di konfigurasi, antara lain:

  1. Install Prometheus
  2. Install Node Exporter
  3. Install Grafana
Install Prometheus

Prometheus akan bertugas sebagai time-series database yang akan mengkoleksi data-data metrics dari OS atau sistem, dan langkah-langkah instalasinya bisa mengikuti langkah berikut:

1. Install Binary Prometheus.

$ wget https://github.com/prometheus/prometheus/releases/download/v3.2.1/prometheus-3.2.1.linux-amd64.tar.gz
$ tar xzvf prometheus-3.2.1.linux-amd64.tar.gz # sesuaikan versi
$ cd prometheus-3.2.1.linux-amd64              # sesuaikan versi
$ sudo mv prometheus promtool /usr/local/bin/

2. Siapkan directory konfigurasi Prometheus.

$ sudo mkdir /etc/prometheus     # untuk simpan konfigurasi prometheus
$ sudo mkdir /var/lib/prometheus # untuk simpan data time-series prometheus

3. Buat user & group prometheus dan assign user ke directory /var/lib/.

$ sudo groupadd --system prometheus
$ sudo useradd --system -s /sbin/nologin -g prometheus prometheus
$ sudo chown -R prometheus:prometheus /var/lib/prometheus/

4. Pindahkan default konfigurasi prometheus.yml ke /etc/prometheus/, kemudian ubah konfigurasi menjadi seperti berikut.

$ sudo mv prometheus.yml /etc/prometheus/
$ sudo vim /etc/prometheus/prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

5. Konfigurasi systemd agar Prometheus berjalan di background dan startup.

$ sudo vim /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/

[Install]
WantedBy=multi-user.target

6. Langkah terkahir untuk instalasi Prometheus adalah mengaktifkan daemon systemd Prometheus dengan langkah berikut

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now prometheus

7. Untuk memastikan berhasil, bisa melakukan pengecekan dengan command berikut atau membuka pada web browser yang akan muncul seperti gambar dibawah.

$ sudo systemctl status prometheus

● prometheus.service - Prometheus
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-03-25 11:47:07 WIB; 1h 40min ago
       Docs: https://prometheus.io/docs/introduction/overview/
   Main PID: 758 (prometheus)
      Tasks: 18 (limit: 18879)
     Memory: 54.5M ()
     CGroup: /system.slice/prometheus.service
             └─758 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2543
Extensions
Podman Minikube
Cloudkuberneteskubernetes with podman minikubeminikubeminikube with podmanpodman
Pastikan Podman dan Minikube sudah terinstall sesuai petunjuk berikut: Kemudian ikuti langkah berikut untuk menjalankan Minikube menggunakan Podman: Referensi: https://minikube.sigs.k8s.io/docs/drivers/podman/
Show full content

Pastikan Podman dan Minikube sudah terinstall sesuai petunjuk berikut:

Kemudian ikuti langkah berikut untuk menjalankan Minikube menggunakan Podman:

$ minikube config set driver podman
$ minikube config set rootless true 
$ minikube config set container-runtime containerd
$ minikube start

Referensi: https://minikube.sigs.k8s.io/docs/drivers/podman/

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2492
Extensions
Lenovo Laptop Conservative Mode
Uncategorizedbatterybattery health charging extensionbattery health charging gnome extensionconservative modegnome extensionlaptoplenovolenovo batterylenovo conservative modelenovo yoga slim 7i pro
3 Tahun menggunakan Lenovo Yoga Slim 7i Pro sebagai daily driver pekerjaan, ternyata sudah waktunya ganti baterai laptop dikarenakan kapasitas penuh baterai hanya 0%, artinya untuk menggunakan laptop perlu dalam keadaan “charging” dan laptop akan mati total ketika charger baterai dilepas. Setelah penggantian baterai dan baca berbagai sumber cara perawatan baterai laptop agar awet, khusus […]
Show full content

3 Tahun menggunakan Lenovo Yoga Slim 7i Pro sebagai daily driver pekerjaan, ternyata sudah waktunya ganti baterai laptop dikarenakan kapasitas penuh baterai hanya 0%, artinya untuk menggunakan laptop perlu dalam keadaan “charging” dan laptop akan mati total ketika charger baterai dilepas.

Setelah penggantian baterai dan baca berbagai sumber cara perawatan baterai laptop agar awet, khusus Lenovo ada Conservative Mode dimana mode ini akan menerapkan charging limit di rentang 20%-80%, sehingga baterai tidak pernah terisi penuh ke kapasitas maksimal 100% dan akan memulai charging ketika baterai pada kondisi 20%.

Metode ini bisa membantu memperpanjang umur baterai, karena dapat menghindari overcharging dan stress pada baterai ketika laptop dalam keadaan charging sepanjang hari.

Untuk Conservative Mode ini sudah ada software bawaan untuk OS Windows, tapi karena sekarang menggunakan Fedora, untuk menggunakan Conservative Mode bisa menggunakan alternatif gnome extension “Battery Health Charging”.

Cara instalasi:

$ sudo dnf install polkit
$ echo '1' | pkexec tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode

Langkah terakhir bisa menggunakan link berikut untuk pemasangan extension https://extensions.gnome.org/extension/5724/battery-health-charging/

Setelah pemasangan extension berhasil, untuk mengaktifkan bisa melalui tray icon diatas dengan tampilan seperti berikut.

Untuk informasi lengkap terkait compatibility juga bisa dilihat di official website https://maniacx.github.io/Battery-Health-Charging/device-compatibility.

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2517
Extensions
Setup Cmder in Windows Terminal
windowscmdercmder windows terminalterminalwindows terminal
Install scoop https://scoop.sh/ Install Cmder Buka “Windows Terminal” dan “Settings” Pilih “Add a new profile” dan duplicate profile Bagian “Command Line” ubah menjadi Bagian “Icon” ubah menjadi Save
Show full content
  1. Install scoop https://scoop.sh/
  2. Install Cmder
    $ scoop install cmder
    
  3. Buka “Windows Terminal” dan “Settings”
  4. Pilih “Add a new profile” dan duplicate profile
  5. Bagian “Command Line” ubah menjadi
    cmd.exec /k "C:\user-directory-masing-masing\scoop\apps\cmder\versi-cmder\vendor\init.bat"
    
  6. Bagian “Icon” ubah menjadi
    C:\user-directory-masing-masing\scoop\apps\cmder\versi-cmder\icons\cmder.ico
  7. Save
Screenshot 2024-10-31 070029
adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2419
Extensions
Fix: Github Action denied: installation not allowed to Create organization package
Uncategorizeddockerghcrghcr permission deniedgithubgithub actionsgithub registrypermission denied
Bagi kawan-kawan yang sedang menggunakan github action untuk build docker image ke Github Registry / ghcr.io mengalami error. Issue diatas bisa diatasi dengan menambahkan permission di job github action. reference: https://stackoverflow.com/a/76610067/1936697
Show full content

Bagi kawan-kawan yang sedang menggunakan github action untuk build docker image ke Github Registry / ghcr.io mengalami error.

 denied: installation not allowed to Create organization package 

Issue diatas bisa diatasi dengan menambahkan permission di job github action.

jobs:
  publish-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

reference: https://stackoverflow.com/a/76610067/1936697

adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2480
Extensions
Mock Pointer Parameter GoMock
GoTestinggomockmocktest
Untuk kebutuhan testing dan mock data, saya biasanya menggunakan https://github.com/golang/mock. Ketika menulis test, mayoritas akan melakukan test sebuah function yang akan saya test return value nya, seperti berikut. Sedikit berbeda, kali ini saya ingin melakukan mock sebuah function, dimana hasil sebuah function akan disimpan ke parameter response seperti contoh function berikut. dan berikut cara melakukan […]
Show full content

Untuk kebutuhan testing dan mock data, saya biasanya menggunakan https://github.com/golang/mock.

Ketika menulis test, mayoritas akan melakukan test sebuah function yang akan saya test return value nya, seperti berikut.

ctrl := gomock.NewController(t)
defer ctrl.Finish()

var mockedFunc = mocks.NewMockIService(ctrl)

// test mock function.
mockedFunc.
    EXPECT().
    MyFunction(context.TODO(), 100).
    Return(errors.New("error"))

Sedikit berbeda, kali ini saya ingin melakukan mock sebuah function, dimana hasil sebuah function akan disimpan ke parameter response seperti contoh function berikut.

type IHTTPClient interface {
    Call(method, path string, body io.Reader, response any) error
}

dan berikut cara melakukan mock testing hasil dari pointer parameter.

ctrl := gomock.NewController(t)
defer ctrl.Finish()

var mockedFunc = mocks.NewMockIService(ctrl)

// test mock function.
mockedFunc.
    EXPECT().
    Call("GET", "/api/tasks", gomock.Any(), gomock.Any()).
    SetArg(3, []string{"tes", "result"}). // set parameter ke-4 (3 karena dimulai dari 0)
    Return(nil)
adiyatmubarak
http://adiyatmubarak.wordpress.com/?p=2448
Extensions