Saturday

28 March, 2020

Pasang ulang Weibu F3C – Endless Mini PC (unreleased)

Saya mendapatkan komputer ini dari Baris, CEO Endless Solutions jaman saya masih jadi ambassador pada 2017. Sudah terpasang Endless OS dan berfungsi dengan baik. Beberapa hari ini saya memutuskan untuk mengganti OSnya dengan OS apapun yang memungkinkan.

Pengujian pertama dengan openSUSE Tumbleweed, pemasangan berjalan mulus, masuk desktop agak kacau dikarenakan layar HDMI dianggap sebagai layar extended. Jadi harus mengarahkan kursor yang tepat dan mengatur ulang layar beserta resolusinya. Setelah masuk desktop, wireless tidak bisa digunakan. ini sudah sesuai prediksi. Pasang firmware non-free juga tidak membuahkan hasil.

Pengujian berikutnya dengan Ubuntu 20.04 yang masih Beta. Hampir sama, perbedaannya hanya si Ubuntu sedikit lebih pintar mengenali layar dari pada openSUSE. Namun tetap perlu mengatur resolusi layarnya. Wireless juga sama-sama tidak bisa digunakan walaupun sudah memasang firmware non-free.

Berikutnya nyari firmware yang dipakai Endless OS, nemu di github https://github.com/endlessm/linux-firmware. Coba dipasang … jreng, tetep gagal. Karena masih penasaran, saya unduh iso Endless OS terkini, dan install lagi. Selanjutnya ambil /lib/firmware untuk dibandingkan, ternyata ada sedikit (bisa dibilang banyak sih) tambahan dari yang ada di github. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/ee4aec2c50e82a06861e2b166814d418e3d5046b. Setelah dipasang, reboot, tetep gak mau.

Baca-baca dmesg, terus guling-guling, nemu titik terang untuk ambil dari https://archive.raspberrypi.org/debian/pool/main/f/firmware-nonfree/firmware-brcm80211_20161130-3+rpt3_all.deb terus dibongkar. Dicomot yang brcmfmac43455. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/1c1f19900b2399ce123dd5e5d2978aa6ba21e397.

Dicoba di Ubuntu 20.04 sukses. Di openSUSE Tumbleweed pun demikian.

openSUSE Tumbleweed
openSUSE Tumbleweed

 

Ubuntu 20.04
Ubuntu 20.04

Macbook Jadul dengan openSUSE Tumbleweed

Jadi kapan hari menjenguk duo R, dan keinget kalau ada “harta” lama yang gak dipakai. Jadinya saya minta dan dicoba dihidupkan. Macbook2,1. Laptop jaman Pak Beye kata teman saya.

Macbook2,1
Macbook2,1

Ini komputer cukup nyusahin. Kalau pakai MacOS X mentok di Lion. Walhasil gak bisa ngapa-ngapain, wong banyak aplikasi ndak support. Boot usb linux juga ndak mau, gak kayak Macbook keluaran baru yang mau boot linux. Dulu masang ubuntu lewat media CD. Berhubung sudah gak punya CD, alhasil menggunakan segala cara agar bisa boot. Cara termudah adalah memasang ubuntu dari komputer lain, lalu pindah disknya ke macbook jadul tersebut.

Bagaimana dengan OS Linux lainnya? susah … gak bisa kepasang. Kesimpulan akhir, karena grub yang terpasang di ubuntu itu grub-pc i386 (walaupun pakai arch 64 bit). Jadi yang mulus terpasang pertama kali adalah ubuntu.

Selanjutnya usaha agar memasang openSUSE Tumbleweed. Berbagai cara sudah digunakan, ketemu kesimpulan cara yang mujarab sebagai berikut:

  1. Pasang opensuse (boot legacy, jangan uefi) pada disk (usb flashdisk) lain dengan komputer lain.
  2. Sediakan partisi kosong ext4 di macbook jadul tersebut.
  3. Salin isi usb flashdisk pada nomor 1 ke dalam partisi ext4 tadi. Salin dengan opsi -rapv biar kebawa semua atribut dan permission berkasnya.
  4. Uji dengan chroot, kalau mulus berarti sudah benar.
  5. Ubah fstab, sesuaikan dengan uuid yang baru, pindah motherboard/komputer akan membuat beda uuid.
  6. Edit grub di ubuntu, sesuaikan.

Ribet kan? tapi seru, buat nambah kesibukan selama masa diam di rumah.

Pergi ke FOSDEM 2020

Ini nulisnya telat banget, juga males nulis banyak karena udah telat. Intinya sih pingin pamer kalau berhasil pergi ke FOSDEM 2020 di Belgia. Dan seru-seruan bersama teman-teman TDF/LibreOffice.

TDF Board & MC
TDF Board & MC

 

Biar kayak orang-orang
Biar kayak orang-orang

 

Konser Brexit
Konser Brexit

 

Bawaan balik ke kampung
Bawaan balik ke kampung

Foto lainnya masih banyak sih, tapi ndak minat ditaruh di sini. 🙂
Perjalanan ini ditanggung sepenuhnya oleh The Document Foundation (kecuali pembelian oleh-oleh).

Sesi Berbagi: FLOSS & Creative Commons Dalam Pendidikan & Pekerjaan

Halo semua!!!
 
Kali ini Komunitas openSUSE Indonesia dan Gimpscape ID ingin mengadakan sebuah sharing session nih.
 
Temanya : FOSS dalam dunia pendidikan dan Lisensi Creative Commons dalam dunia professional
 
Kamu pake FOSS di kampus/sekolah tapi gak pede?
 
Kalo pake FOSS ada manfaatnya gak si ?
 
Kamu sering nyomot gambar di Google tanpa tau lisensi?
 
Pengen kerja jadi desainer tapi masih gk paham dengan lisensi?
 
Fix kalo pertanyaan ini pernah kamu tanya ke temen atau diri sendiri. Acara ini buat kamu banget!
Ada beberapa hadiah buat peserta yang beruntung juga loh !
 
Catet acaranya tanggal berapa dan tempatnya yaa!!
 
DILo Solo (https://goo.gl/maps/yvcygz4FZrhfhNGq8)
 
Waktunya nih :
 
14 Maret 2020
09.00 WIB— 12.00 WIB
 
Ingat bahwa acara ini tidak dipungut biaya loh! Kamu tinggal dateng aja bawa jiwa dan raga 😀
 
Misal butuh informasi tambahan bisa hubungi nomer dibawah ya
 
WA : +62 896-8141-4639 (Arif)
Telegram : @Arifd775

Hibernate ke Swap file

Bagi yang terbiasa memasang Linux tanpa partisi Swap seperti saya, tetapi ingin memanfaatkan fitur Hibernate/Hibernasi, Anda bisa membuat Swap dalam bentuk file. Saya terbiasa tidak membuat partisi Swap karena biasanya menggunakan Zram untuk kebutuhan Swap. Dengan Zram, komputer tetap responsif tanpa ada lag meskipun Swap terpakai, tapi kekurangannya yang saya rasakan adalah kita tidak bisa memanfaatkan fitur hibernate.

Buat apa fitur Hibernate untuk pengguna SSD, karena boot dari komputer mati biasanya justru lebih cepat daripada resume dari Hibernate? Karena saya kadang-kadang perlu mematikan komputer tanpa harus menyimpan pekerjaan terlebih dahulu. Dan jika menggunakan Sleep, jika laptop ditinggalkan lama karena pekerjaan lain atau karena lupa bisa membuat baterai kehabisan daya sehingga perkerjaan yang tersimpan hilang begitu saja.

Tapi dengan Hibernate, kita bisa memanfaatkan fitur Sleep Then Hibernate yang jika komputer/laptop dibiarkan Sleep dalam waktu tertentu, dia akan berpindah ke Hibernate. Bagi pengguna Plasma 5 fitur ini bisa diaktifkan di System Settings > Power Management > Energy Saving atau bisa langsung menggunakan Systemd.

Membuat Swap file bisa dilakukan dengan proses berikut:

Pertama buat file dengan fallocate. Untuk membuat Swap sebesar 4 GiB, gunakan 4096M atau 4G (sesuaikan dengan kebutuhan):

su -c "fallocate -l 4096M /swapfile"

Jika Anda menggunakan BtrFS dengan snapshot, sebaiknya buat swapfile di partisi lain, jadi ubah /swapfile dengan /path/ke/partisi/lain/swapfile. Dan yang perlu diperhatikan juga, untuk membuat Swapfile di BtrFS, Anda harus menggunakan Kernel 5 ke atas.

Lalu ubah hak akses supaya aman dari modifikasi pengguna lain:

su -c "chown -v 600 /swapfile"

Buat jadi Swap:

su -c "mkswap /swapfile"

Aktifkan Swap:

su -c "swapon /swapfile"

Masukkan ke /etc/fstab supaya Swap aktif saat komputer dinyalakan:

su -c "echo '/swapfile none swap defaults 0 0' >> /etc/fstab"

Supaya komputer bisa Resume dari Hibernate, kita perlu menambahkan kernel parameter resume dan resume_offset ke Grub. Parameter resume diisi dengan partisi di mana letak swapfile berada. Misal jika ada di /dev/sda2, isi dengan resume=/dev/sda2. Sedangkan resume_offset bisa diketahui dengan perintah filefrag, kecuali jika Anda membuat swapfile tersebut di BtrFS.

su -c "filefrag -v /swapfile"

Dari hasil perintah tersebut akan muncul hasil seperti ini:

Filesystem type is: ef53
File size of /swapfile is 4294967296 (1048576 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:   17782784..  17782784:      1:            
   1:        1..    2047:   17782785..  17784831:   2047:             unwritten
   2:     2048..   32767:   18071552..  18102271:  30720:   17784832: unwritten
   3:    32768..   63487:   18102272..  18132991:  30720:             unwritten
   4:    .......   .....:   ..........  ........:  .....:             .........

Parameter resume_offset diisi dengan angka pertama dari physical_offset. Jadi dengan hasil perintah di atas, diisi dengan resume_offset=17782784 (sesuaikan dengan hasil Anda).

Untuk mencari resume_offset di BtrFS bisa menggunakan btrfs_map_physical. Download file tersebut, compile, lalu jalankan.

Masukkan kedua parameter tersebut ke file /etc/default/grub pada opsi GRUB_CMDLINE_LINUX_DEFAULT. Jika kita memasang openSUSE dengan partisi Swap, parameter resume ini akan berada di antara splash=silent dan quiet. Kita juga bisa memasukkan kedua parameter di atas di tempat yang sama dengan perintah:

su -c "sed -i 's/silent/silent resume=\/dev\/sda2 resume_offset=17782784/g' /etc/default/grub"

Lalu update grub dengan perintah:

su -c "grub2-mkconfig -o /boot/grub2/grub.cfg"

Kekurangan dari Swap dalam bentuk file atau partisi adalah saat Swap terpakai komputer akan terasa berat/ngelag. Untuk mengantisipasi ini saya tetap membuat Swap dengan Zram dengan prioritas lebih tinggi. Caranya buat sebuah file di /usr/local/sbin/ dengan nama swap-zram, isi dengan:

#!/bin/bash

num_cpus=$(grep -c processor /proc/cpuinfo)
[ "$num_cpus" != 0 ] || num_cpus=1
decr_num_cpus=$((num_cpus - 1))

if [ "$1" -ne 0 ]; then
    mod_parm=$(modinfo zram |grep parm |tr -s " " |cut -f2 -d ":")
    modprobe zram $mod_parm=$num_cpus

    for i in $(seq 0 $decr_num_cpus); do
    echo $((($1 * 1024 * 1024) / num_cpus)) > /sys/block/zram$i/disksize
    done

    for i in $(seq 0 $decr_num_cpus); do
    mkswap /dev/zram$i
    done

    for i in $(seq 0 $decr_num_cpus); do
    swapon -p 100 /dev/zram$i
    done
else
    for i in $(seq 0 $decr_num_cpus); do
    if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then
    swapoff /dev/zram$i
    fi
    done

    rmmod zram
fi

Buat file tersebut supaya bisa dieksekusi:

su -c "chmod +x /usr/local/sbin/swap-zram"

Lalu buat sebuah folder di /usr/local/lib/ dengan nama systemd. Di dalamnya buat lagi folder dengan nama system. Perintahnya adalah:

su -c "mkdir -p /usr/local/lib/systemd/system"

Di dalam folder system, buat sebuah file dengan nama swap-zram.service. Isi dengan:

[Unit]
Description=Service enabling compressing RAM with zRam
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/swap-zram 4096
ExecStop=/usr/local/sbin/swap-zram 0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Angka 4096 jika kita ingin membuat Swap dari Zram sebesar 4 GiB. Sehingga total Swap dengan Swapfile yang tadi dibuat menjadi 8 GiB. Silakan sesuaikan dengan kebutuhan.
Aktifkan dan jalankan service tersebut dengan:

su -c "systemctl enable swap-zram.service"

Dan

su -c "systemctl start swap-zram.service"

Kemeriahan #MozTalk – Open Source Day (openSUSE and Mozilla Firefox Edition)

 

19 Januari 2020, cuaca cukup cerah di bilangan Kuningan Barat, Jakarta. #MozTalk – Open Source Day (openSUSE and Mozilla Firefox Edition) dibuka oleh perwakilan dari Komunitas Mozilla Indonesia, lalu dilanjutkan oleh pembicara pertama dari Komunitas openSUSE Indonesia, yang diwakili oleh mas Kukuh Syafaat yang memperkenalkan kembali openSUSE. Perkenalan kembali dengan openSUSE dimulai dari openSUSE Project, teknologi yang ada di openSUSE, bagaimana cara berkontribusi di proyek FOSS, dan juga tentang Komunitas openSUSE Indonesia.

Pembicara kedua ada mas Herpiko Dwi Aguno dengan “Ngoprek Mozilla Firefox“. Mas Piko menjelaskan bagaimana berkontribusi langsung ke peramban Mozilla Firefox dari mulai mengirimkan kutu ke bugzilla, membangun Mozilla Firefox di lokal, membenahi kutu, dan bagaimana mengirimkan tambalan tersebut hingga akhirnya masuk dalam rilis.

Tidak ketinggalan, openSUSE-ID juga bagi-bagi hadiah untuk beberapa hadirin yang bertanya. Terima kasih kepada Komunitas Mozilla Indonesia yang sudah menyediakan tempat yang kece. Sampai jumpa di acara keren selanjutnya

Pengumuman Pemenang #KuisLiburan2019

Komunitas openSUSE Indonesia (openSUSE-ID) mengucapkan terima kasih atas antusiasme peserta pada #KuisLiburan2019 kali ini. Dari 127 jawaban yang masuk, kami harus mengkurasi jawaban yang salah maupun kurang tepat. Tersaring 42 jawaban yang tepat dan kami harus mengundi lagi untuk menentukan siapa peserta yang beruntung. Peserta yang beruntung adalah sebagai berikut.

Peserta yang beruntung untuk mendapatkan new SSD 120 GB adalah Sabilil Maromi.

sementara untuk peserta berikut mendapatkan bingkisan menarik dari openSUSE ID

  • Arif Setyo Nugroho
  • abi permana
  • Heru Juwardi
  • Aji Revaldi
  • Surya Handika Putratama
  • Yaumul Majid
  • Muhammad Rofi
  • Wuri Nugrahadi
  • Arif Dermawan
  • A Mu’ammar Afinas
  • Rizal Amrr
  • abdi weef
  • Kristian Valent
  • Rokib Munawir
  • Satrio Adi Prawiro
  • iqbalfr@nevtik.org
  • gatoti
  • lazuardi senja
  • Muhamad Andhika Prasetya

Diharapkan kepada seluruh pemenang untuk mengirimkan informasi alamat dan nomor handphone di tautan berikut ini selambatnya tanggal 14 Januari 2020, jika sampai waktu tersebut tidak mengisi form pemenang maka hadiah dinyatakan hangus.

Bingkisan menarik akan dikirimkan oleh tim openSUSE-ID secara gratis! Jangan lupa bagi para pemenang untuk memposting bingkisan tersebut ke media sosial dengan tagar #KuisLiburan2019 #openSUSE dan mention ke @openSUSE dan @openSUSEID (di Twitter).

Selamat dan sampai jumpa lagi di Kuis berikutnya!

Salam,

High Availability PostgreSQL Cluster dengan Pgpool-II (Bagian ke-3)

TL;DR: Karena cukup panjang tulisan akan dibagi dalam 3 tulisan

  • Bagian 1 : membahas instalasi dan konfigurasi master postgresql
  • Bagian 2 : membahas instalasi dan konfigurasi slave postgresql
  • Bagian 3 : membahas instalasi dan konfigurasi pgpool-II

Tulisan ini adalah Bagian ke-3.

4. Instalasi pgpool

Pgpool-II sudah terdapat di OBS repositori. Versinya sedikit terlambat dari versi rilis di web Pgpool. Saat tulisan ini dibuat versi Pgpool di website Pgpool adalah 4.1. Sementara paket di OBS repositori masih versi 4.0.6.

Tambah repositori, install pgpool dan postgresql. Sebenarnya postgresql di mesin pgpool kita butuhkan hanya clientnya saja, untuk mengakses database (psql) dan backup (pg_dump) misalnya. Tapi untuk memudahkan kita install juga postgresql-server walaupun tidak perlu dijalankan

zypper ar -e -f https://download.opensuse.org/repositories/server:/database:/postgresql/openSUSE_Leap_15.1/ postgresql
zypper in --no-recommends pgpool-II postgresql12-pgpool-II postgresql12 postgresql12-server postgresql12-contrib

Selanjutnya edit file /etc/hosts, misalnya pgsql1 untuk master, pgsql2 untuk slave1, pgsql3 untuk slave2.

127.0.0.1       localhost
10.100.1.5      pgpool
10.100.1.6      pgsql1
10.100.1.7      pgsql2
10.100.1.8      pgsql3

Perhatikan bahwa kita menginstal pula paket postgresql12-pgpool-II, paket ini berisi library dan extension pgpool untuk PostgreSQL, ditandai dengan .sql dan .control. File-filenya tersimpan di direktori /usr/lib/postgresql12/lib64/, /usr/lib/postgresql12/lib64/bitcode/ dan /usr/share/postgresql12/extension/.

Langkah berikutnya kita memasang extension pgpool tersebut pada database postgresql. Kita pasang extension pgpool tersebut pada template1. Lakukan 1 kali saja di master karena nanti akan otomatis tereplikasi di slave.

sudo -i -u postgres
psql template1
CREATE EXTENSION pgpool_recovery;
CREATE EXTENSION pgpool_adm;

Periksa bahwa extension telah terpasang pada template1

\dx

Pada master akan seperti

Pada slave

Pada saatnya nanti kita gunakan template1 sebagai template database yang akan kita buat sehingga otomatis database yang terbentuk akan memiliki extension pgpool. Misalnya gunakan pgadmin, buatlah sebuah database baru dengan dengan menggunakan template1 di master, maka database akan dibuat dengan extension pgpool_adm dan pgpool_recovery. Database dengan kondisi yang sama otomatis akan terbentuk di slave. Kalau berhasil artinya sulapan kita bekerja 🙂

Langkah berikutnya adalah mengkonfigurasi file /etc/pgpool-II/pcp.conf. File ini berisi user dan password pgpool untuk admnistrasi management pgpool. Password dihash md5 dan formatnya adalah

 username:[md5 encrypted password]

Buat password dalam format md5 dengan

$ pg_md5 your_password
    1060b7b46a3bd36b3a0d66e0127d0517

Atau jika anda tidak ingin memperlihatkan password anda dengan cara:

 $ pg_md5 -p
    password: your_password

Isi file pcp.conf dengan menggunakan hasil md5 tersebut misal

admin:97bf34d31a8710e6b1649fd33357f783

Walaupun tidak wajib kita bisa mengisikan username dan password yang sama dengan user PostgreSQL agar mempermudah dalam mengakses dan mengingatnya.

Jangan lupa lengkapi file /etc/pgpool-II/pool_hba.conf dengan ip address dari masing-masing server PostgreSQL (sesuaikan dengan ip mesin master dan slave), misalnya

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust
host    all         all         10.100.1.6/32         md5
host    all         all         10.100.1.7/32         md5
host    all         all         10.100.1.8/32         md5

Selanjutnya kita harus mengkonfigurasi file /etc/pgpool-II/pgpool.conf. Sesuai dengan dokumentasi pgpool maka running mode yang dianjurkan secara default adalah streaming replication mode. Dalam mode ini PostgreSQL bertanggung jawab terhadap sinkronisasi database. Load balancing dimungkinkan untuk dijalankan dalam mode ini. Contoh konfigurasinya diberikan ketika kita menginstall pgpool yaitu pada file /etc/pgpool-II/pgpool.conf.sample-stream. Di  bawah ini adalah contoh dari /etc/pgpool-II/pgpool.conf

# - pgpool Connection Settings -
listen_addresses = '*'
port = 5432
socket_dir = '/var/run/pgpool'

# - pgpool Communication Manager Connection Settings -
pcp_listen_addresses = '*'
pcp_port = 9898
pcp_socket_dir = '/var/run/pgpool'
listen_backlog_multiplier = 2
serialize_accept = off

# - Backend Connection Settings -
backend_hostname0 = 'gis_pgsql1' # sesuaikan dengan HOSTNAME master postgresql
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = 'gis_pgsql2' # sesuaikan dengan HOSTNAME slave postgresql
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

backend_hostname2 = 'gis_pgsql3' # sesuaikan dengan HOSTNAME slave postgresql
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = '/data'
backend_flag2 = 'ALLOW_TO_FAILOVER'

# - Authentication -
enable_pool_hba = on
pool_passwd = 'pool_passwd'
authentication_timeout = 60
allow_clear_text_frontend_auth = off

# - SSL Connections -
ssl = off
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
ssl_prefer_server_ciphers = off

#------------------------------------------------------------------------------
# POOLS
#------------------------------------------------------------------------------

# - Concurrent session and pool size -
num_init_children = 80
max_pool = 4

# - Life time -
child_life_time = 300
child_max_connections = 0
connection_life_time = 0
client_idle_limit = 0

#------------------------------------------------------------------------------
# LOGS
#------------------------------------------------------------------------------

# - Where to log -
log_destination = 'syslog'

# - What to log -
log_line_prefix = '%t: pid %p: '
log_connections = on
log_hostname = off
log_statement = on
log_per_node_statement = on
log_client_messages = on
log_standby_delay = 'if_over_threshold'

# - Syslog specific -
syslog_facility = 'LOCAL0'
syslog_ident = 'pgpool'

# - Debug -
log_error_verbosity = default

#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------

pid_file_name = '/var/run/pgpool/pgpool.pid'
logdir = '/var/run/pgpool'

#------------------------------------------------------------------------------
# CONNECTION POOLING
#------------------------------------------------------------------------------

connection_cache = on
reset_query_list = 'ABORT; DISCARD ALL'

#------------------------------------------------------------------------------
# REPLICATION MODE
#------------------------------------------------------------------------------

replication_mode = off
replicate_select = off
insert_lock = off
lobj_lock_table = ''

# - Degenerate handling -
replication_stop_on_mismatch = off
failover_if_affected_tuples_mismatch = off

#------------------------------------------------------------------------------
# LOAD BALANCING MODE
#------------------------------------------------------------------------------

load_balance_mode = on
ignore_leading_white_space = on
white_function_list = ''
black_function_list = 'currval,lastval,nextval,setval'
black_query_pattern_list = ''

database_redirect_preference_list = ''
app_name_redirect_preference_list = ''
allow_sql_comments = off
disable_load_balance_on_write = 'transaction'

#------------------------------------------------------------------------------
# MASTER/SLAVE MODE
#------------------------------------------------------------------------------

master_slave_mode = on
master_slave_sub_mode = 'stream'

# - Streaming -
sr_check_period = 10
sr_check_user = 'postgres'
sr_check_password = 'password'
sr_check_database = 'postgres'
delay_threshold = 10000000

# - Special commands -
follow_master_command = ''

#------------------------------------------------------------------------------
# HEALTH CHECK GLOBAL PARAMETERS
#------------------------------------------------------------------------------
health_check_period = 5
health_check_timeout = 20
health_check_user = 'postgres'
health_check_password = 'password'
health_check_database = ''
health_check_max_retries = 0
health_check_retry_delay = 1
connect_timeout = 10000

#------------------------------------------------------------------------------
# FAILOVER AND FAILBACK
#------------------------------------------------------------------------------
failover_command = ''
failback_command = ''
failover_on_backend_error = on
detach_false_primary = off
search_primary_node_timeout = 300

#------------------------------------------------------------------------------
# ONLINE RECOVERY
#------------------------------------------------------------------------------

recovery_user = 'postgres'
recovery_password = 'password'
recovery_1st_stage_command = ''
recovery_2nd_stage_command = ''
recovery_timeout = 90
client_idle_limit_in_recovery = 0

#------------------------------------------------------------------------------
# WATCHDOG
#------------------------------------------------------------------------------

# - Enabling -
#use_watchdog = on
use_watchdog = off

# -Connection to up stream servers -
trusted_servers = ''
ping_path = '/bin'

# - Watchdog communication Settings -
wd_hostname = ''
wd_port = 9000
wd_priority = 1

wd_hostname = ''
wd_port = 9000
wd_priority = 2

wd_hostname = ''
wd_port = 9000
wd_priority = 3

wd_authkey = ''
wd_ipc_socket_dir = '/tmp'

# - Virtual IP control Setting -
delegate_IP = ''
if_cmd_path = '/sbin'
if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
arping_path = '/usr/sbin'
arping_cmd = 'arping -U $_IP_$ -w 1'

# - Behaivor on escalation Setting -
clear_memqcache_on_escalation = on
wd_escalation_command = ''
wd_de_escalation_command = ''

# - Watchdog consensus settings for failover -
failover_when_quorum_exists = on
failover_require_consensus = on
allow_multiple_failover_requests_from_node = off

# - Lifecheck Setting -

# -- common --
wd_monitoring_interfaces_list = ''
wd_lifecheck_method = 'heartbeat'
wd_interval = 10

# -- heartbeat mode --
wd_heartbeat_port = 9694
wd_heartbeat_keepalive = 2
wd_heartbeat_deadtime = 30
heartbeat_destination0 = 'host_ip1'
heartbeat_destination_port0 = 9694
heartbeat_device0 = ''

other_pgpool_hostname0 = 'host_ip1'
other_pgpool_port0 = 5432
other_wd_port0 = 9000

# -- query mode --
wd_life_point = 3
wd_lifecheck_query = 'SELECT 1'
wd_lifecheck_dbname = 'template1'
wd_lifecheck_user = 'nobody'
wd_lifecheck_password = ''

#------------------------------------------------------------------------------
# OTHERS
#------------------------------------------------------------------------------
relcache_expire = 0
relcache_size = 256
check_temp_table = on
check_unlogged_table = on

#------------------------------------------------------------------------------
# IN MEMORY QUERY MEMORY CACHE
#------------------------------------------------------------------------------
memory_cache_enabled = off
memqcache_method = 'shmem'
memqcache_memcached_host = 'localhost'
memqcache_memcached_port = 11211
memqcache_total_size = 67108864
memqcache_max_num_cache = 1000000
memqcache_expire = 0
memqcache_auto_cache_invalidation = on
memqcache_maxcache = 409600
memqcache_cache_block_size = 1048576
memqcache_oiddir = '/var/log/pgpool/oiddir'
white_memqcache_table_list = ''
black_memqcache_table_list = ''

Perhatikan pada bagian Backend Connection Setting pada file konfigurasi di atas kita set weight=1. Ini artinya kita berusaha agar perbandingan beban dari masing-masing backend adalah sama.

Selanjutnya ada 1 file lagi yang harus kita lengkapi yaitu /etc/pgpool-II/pool_passwd. Isilah file ini dengan username dan password yang sama dengan user postgresql. Entry dari file ini pool_passwd ini harus dibuat dengan menjalankan

pg_md5 -f /etc/pgpool-II/pgpool.conf -m -u postgres postgrespassword

Terakhir jalankan service pgpool

sudo systemctl start pgpool-II.service
sudo systemctl enable pgpool-II.service

Kita bisa mencoba bagaimana pgpool bekerja dengan mentest membuat database dan menghapusnya melalui pgadmin. Kita koneksikan pgadmin kita ke server pgpool (masukkan ip address dan port mesin pgpool, username dan password pgpool), buat database maka database akan terbentuk di master dan slave. Hapus database melalui pgpool maka database akan terhapus di master dan slave.

Koneksi ke database dari aplikasi kita tinggal diarahkan ke mesin pgpool (tidak lagi ke mesin postgresql). Dengan cara demikian, proses WRITE akan dilakukan oleh pgpool ke mesin master, sedangkan proses READ akan dibagi ke mesin master dan slave. Untuk membuktikannya anda dapat menjalankan htop di setiap mesin postgresql dan lihat distribusi bebannya. Bisa juga dengan membandingkan log dari pgpool untuk melihat proses INSERT, UPDATE, SELECT dilakukan ke mesin mana saja. Misalnya dengan menjalankan

sudo journalctl -u pgpool-II | grep "node id: 0" | grep INSERT
sudo journalctl -u pgpool-II | grep "node id: 1" | grep INSERT
sudo journalctl -u pgpool-II | grep "node id: 2" | grep INSERT
sudo journalctl -u pgpool-II | grep "node id: 0" | grep SELECT
sudo journalctl -u pgpool-II | grep "node id: 1" | grep SELECT
sudo journalctl -u pgpool-II | grep "node id: 2" | grep SELECT

Masih ada yang belum ditulis dalam artikel ini yaitu bagaimana membuat mesin pgpool menjadi HA juga. Mudah-mudahan kedepannya dapat saya tuliskan.

Selamat mencoba, have fun

medwinz

#MozTalk – Open Source Day (openSUSE and Mozilla Firefox Edition)

Apakah kamu salah satu pengguna software open source yang ingin berkontribusi kembali ke proyeknya?

Pada kesempatan MozTalk kali ini kami akan membahas tentang cara berkontribusi ke proyek open source seperti openSUSE dan Mozilla Firefox. Akan ada 2 pembicara pada acara ini:

  • Kukuh Syafaat
    “Berkenalan (lagi) dengan openSUSE”
    Ngobrol mengenai teknologi, komunitas dan kontribusi di openSUSE
  • Herpiko Dwi Aguno
    “Ngoprek Mozilla Firefox”
    Siklus kontribusi kode di Mozilla Firefox dari ujung ke ujung

MozTalk adalah salah satu program Mozilla Indonesia berupa sesi diskusi bertemakan teknologi dan perkembangannya. Untuk mengikuti acara ini, peserta diharapkan untuk memiliki ketertarikan untuk berkontribusi ke proyek open source

Simpan tanggal berikut untuk ikut acara ini ya:

Hari / Tanggal: Minggu / 19 Januari 2020
Pukul : 14.00 – 17.00
Tempat: Mozilla Community Space Jakarta, Gedung TIFA – ANNEX Suite Jl. Kuningan Barat I no.26 Jakarta Selatan (Google Map: https://goo.gl/maps/mjZZGmxdQzC2 )

Perlu kami beritahukan, acara ini gratis dan tidak berbayar, dan kami tidak akan menyediakan makan siang, namun tersedia berbagai minuman dan snack/kue yang dapat dikonsumsi secara gratis oleh peserta secara/free flow/

Pendaftaran: bit.ly/OSDayJakarta

Sampai berjumpa!

Mencoba Podman dan Buildah di openSUSE Tumbleweed

Podman

Apa itu Podman? Podman adalah mesin kontainer tanpa daemon untuk mengembangkan, mengelola, dan menjalankan container OCI di GNU/Linux. Kontainer dapat dijalankan sebagai root atau dalam mode tanpa root.Sederhananya: `alias docker=podman`.

Podman dapat mengelola seluruh ekosistem container yang mencakup pod, container, container image, dan volume menggunakan pustaka libpod. Podman dapat menjalankan semua perintah dan fungsi yang membantu memelihara dan memodifikasi container image OCI, seperti menarik dan memberi tag. Ini memungkinkan untuk membuat, menjalankan, dan memelihara container yang dibuat dari image dalam lingkungan produksi.

Memasang Podman

sudo zypper in slirp4netns podman

Menjalankan Podman Tanpa Akses Root

sudo bash -c 'echo 10000 > /proc/sys/user/max_user_namespaces'
sudo bash -c "echo $(whoami):100000:65536 > /etc/subuid"
sudo bash -c "echo $(whoami):100000:65536 > /etc/subgid"

Ujicoba Podman

podman pull nginx:stable
podman run --name nginx nginx:stable
podman rm nginx

Podman Cheat Sheet


podman login docker.io
podman search tuanpembual
podman run docker.io/tuanpembual/hello
podman run --rm --name hello -p 8080:80/tcp docker.io/tuanpembual/hello
podman rm hello

Sampe batas ini, ya memang benar kita bisa dengan entengnya membuat

alias docker=podman

di file .zshrc.

Buildah

Buildah – a tool that facilitates building OCI container images.

Buildah adalah tool buat bikin container images, dengan beberapa fitur yang menawan, diantaranya:

  • Tidak ada Daemon. Jadi kalo mau build image ya tinggal build aja.
  • Buat image dari nol(scratch) atau dari image yang sudah jadi.
  • Merupakan Build tools external, sehingga memiliki karakter;Ukuran image lebih kecil,Membuat lebih aman dengan tidak memasukkan software untuk membuat container (like gcc, make, and dnf), Membutuhkan resource yang lebih kecil untuk mengirim images.

Memasang Buildah

sudo zypper in buildah

Membuat image dengan Buildah dari Dockerfile


# ls
Dockerfile myecho
# cat Dockerfile
FROM registry.access.redhat.com/ubi8/ubi
ADD myecho /usr/local/bin
ENTRYPOINT "/usr/local/bin/myecho"
# cat myecho
echo "This container works!"
# chmod 755 myecho
# ./myecho
This container works!

Build Step


# buildah bud -t tuanpembual/myecho .
STEP 1: FROM registry.redhat.io/ubi8/ubi
STEP 2: ADD myecho /usr/local/bin
STEP 3: ENTRYPOINT "/usr/local/bin/myecho"

Docker Format dan Push Image


buildah bud --format=docker -t docker.io/tuanpembual/myecho .
buildah push docker.io/tuanpembual/myecho

Melihat List images


buildah images
podman images

Menjalankan Container dan Memeriksa Container


podman run --rm tuanpembual/myecho
buildah inspect tuanpembual/myecho | less

Dah itu saja dulu. Ngoprek selanjutnya bagaimana menggunakan dua perkakas ini ke Gitlab-CI.

Estu~