Bahasa Afrika di Shell Linux

Pernah nemuin respon shell di Linux (kebetulan saya pakai Centos 7 di server) menggunakan bahasa selain bahasa Inggris seperti berikut ini?

root# kopet
bash: kopet: bevel nie gevind nie

Setelah saya check di translate.google.com ternyata ini bahasa Afrika.

Ternyata memang default bahasa di Centos 7 menggunakan bahasa Afrika seperti yang tertera di output berikut:

root# locale
LANG=af_ZA.UTF-8
LC_CTYPE="af_ZA.UTF-8"
LC_NUMERIC="af_ZA.UTF-8"
LC_TIME="af_ZA.UTF-8"
LC_COLLATE="af_ZA.UTF-8"
LC_MONETARY="af_ZA.UTF-8"
LC_MESSAGES="af_ZA.UTF-8"
LC_PAPER="af_ZA.UTF-8"
LC_NAME="af_ZA.UTF-8"
LC_ADDRESS="af_ZA.UTF-8"
LC_TELEPHONE="af_ZA.UTF-8"
LC_MEASUREMENT="af_ZA.UTF-8"
LC_IDENTIFICATION="af_ZA.UTF-8"
LC_ALL=

Penasaran setting ini ada di mana saya menjalankan perintah berikut:

root# fgrep -R "LANG=af_ZA.UTF-8" *
grub2.cfg:      linux16 /vmlinuz-3.10.0-957.27.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=af_ZA.UTF-8
grub2.cfg:      linux16 /vmlinuz-3.10.0-957.21.3.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=af_ZA.UTF-8
grub2.cfg:      linux16 /vmlinuz-3.10.0-957.12.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=af_ZA.UTF-8
grub2.cfg:      linux16 /vmlinuz-3.10.0-957.12.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=af_ZA.UTF-8
grub2.cfg:      linux16 /vmlinuz-3.10.0-957.10.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=af_ZA.UTF-8

Ternyata dari grub2.cfg, sehingga pas booting diset sebagai bahasa Afrika. Oleh karena itu saya coba override dari  /etc/environment dengan menambahkan baris:

export LANG=en_US.utf8

Lalu jalankan perintah:

root# source /etc/environment

Lalu test dengan perintah salah:

root# kopet
bash: kopet: command not found

Done.

[tips][self reminder] tmux untuk bantu sesi ssh yang sering putus

Minggu-minggu terakhir ini sedang menjalankan sebuah proses clone database nosql di datacenter yang saya sendiri tidak memiliki akses console vm nya. Walhasil satu-satunya cara mengakses hanya via ssh. Tapi sialnya ssh baik di rumah maupun di kantor sering banget putus setelah sekian jam tersambung. Eh temen kantor ngajarin menggunakan tmux. Ini catatan buat saya sendiri, sukur-sukur kalo ternyata kepake juga buat teman yang lain. Kalau dari cheatsheet nya sih daftar shortcut/perintah nya cukup banyak, tapi yang di bawah ini list sangat pendek shortcut yang paling saya butuhkan.

Membuat sesi baru di tmux:

# whereis tmux
tmux: /usr/bin/tmux /usr/share/man/man1/tmux.1.gz

# tmux new -s backupDB

[backupDB] 0:root@db003:/home/godril*                                                       "db003.localhost.localdomain" 20:33 27-Jun-19

perintah di atas mencari apakah tmux sudah ada. Jika belum bisa diinstall dengan package manager atau langsung dari sourcenya di https://github.com/tmux/tmux/wiki.

perintah ke-dua membuat sesi tmux baru dengan nama  backupDB dan secara otomatis langsung masuk ke terminal  backupDB tersebut (nama sesi akan muncul di kiri bawah). Di dalam terminal ini, saya menjalankan perintah untuk clone database. Lalu console saya tinggal dengan menjalankan perintah ctrl + B, D. 

Untuk melihat terminal yang aktif, bisa dilihat dengan perintah:

# tmux ls
backupDB: 1 windows (created Thu Jun 27 20:33:54 2019) [131x34]
mengalir: 1 windows (created Thu Jun 27 20:12:24 2019) [131x34]

tampak ada dua sesi tmux yang aktif. Untuk masuk ke sesi  backupDB dengan cara:

# tmux attach -t backupDB

Dan untuk menghapus sesi tmux:

# tmux kill-session -t backupDB

# tmux ls
mengalir: 1 windows (created Thu Jun 27 20:12:24 2019) [131x34]

tampak  backupDB sudah hilang dari list sesi tmux.

[tips] Failed package update di Debian Jessie

Nemu notifikasi failed seperti di bawah ketika update Debian Jessie.

W: Failed to fetch http://ftp.us.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Ternyata sejak tanggal 20 Maret 2019 untuk distro Wheezy dan Jessie dijadikan satu di server archive.debian.org. Sehingga perlu edit file /etc/apt/sources.list dan mengganti server (dalam contoh di atas server mengarah ke go to site ftp.us.debian.org) menjadi enter archive.debian.org.

Ulang kembali proses update dan upgrade. Kemungkinan akan ada masalah minor dengan notifikasi seperti:

W: Failed to fetch http://archive.debian.org/debian/dists/jessie-updates/main/source/Sources  404  Not Found [IP: 193.62.202.28 80]

W: Failed to fetch http://archive.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages  404  Not Found [IP: 193.62.202.28 80]

E: Some index files failed to download. They have been ignored, or old ones used instead.

tapi abaikan saja karena memang distro ini sudah seharusnya ditinggalkan dan mulai memasang versi Debian paling baru.

Menambah Shortcut Program di Desktop Ubuntu 18.04

Ini catatan buat diri sendiri sih.. selalu lupa gimana caranya menambah shortcut program di desktop Ubuntu setelah install program/app baru.

  • Masuk ke direktori  source url /usr/share/applications 
  • Drag & drop icon applications yang hendak ditambahkan.
  • Pertama kali muncul di desktop, icon program belum seperti bawaan aslinya:

cukup klik untuk menjalankan program lalu pilih  Trusn and Launch

setelah itu icon akan muncul:

Yealink T19 E2 dengan OPUS

Yay!! Hari ini dapet kiriman Yalink T19 E2 untuk dicoba dengan codec OPUS dan berjalan baik sejauh ini. Belum tau bagaimana nanti jika sudah dipasang di lapangan. Ada keperluan panggilan melalui jalur data satelit yang sudah tentu latensinya tinggi. G729 tidak dapat mengakomodir komunikasi dengan baik, hingga akhirnya dicoba dengan OPUS dan diterima cukup baik.

Beberapa waktu yang lalu sudah mencoba mengontak beberapa produsen IP phone, rata-rata codec OPUS hanya didukung di perangat hi-end, maklum, butuh prosesor agak kenceng. Entah bagaimana Yealink bisa membuat firmware codec OPUS di perangkat low end seperti kelas T19 ini. Love it!

[Tips] Problem Mengaktifkan Kamailio TLS Dengan LetsEncrypt

Jadi barusan nyoba mengaktifkan TLS di SIP server Kamailio saya dengan LetsEncrypt. Pada intinya instalasi sertifikat dengan certbot-auto cukup mudah. Kali ini tinggal menambahkan konfigurasi di  tls.cfg di dalam direktori konfigurasi Kamailio:

[server:default]
method = TLSv1
verify_certificate = no
require_certificate = no
certificate = /etc/letsencrypt/live/domain.tld/fullchain.pem
private_key = /etc/letsencrypt/live/domain.tld/privkey.pem

Lalu di file  kamailio.cfg SIP server (ip address 192.168.0.123) edit/tambahkan baris berikut:

enable_tls = yes
listen=192.168.0.123:5061

####### TLS Parameters #########
loadmodule "tls.so"
modparam("tls", "config", "/etc/kamailio/tls.cfg")
modparam("tls", "low_mem_threshold1", 0)

Ketika mencoba reload Kamailio, saya mendapati error seperti berikut:

kamailio[18322]: ERROR: tls [tls_domain.c:529]: load_cert(): TLSs<defaul>: Unable to load certificate file '/etc/letsencrypt/live/domain.tld/fullchain.pem'
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:0200100D:system library:fopen:Permission denied
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:20074002:BIO routines:FILE_CTRL:system lib
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib
kamailio[18322]: ERROR: <core> [core/sr_module.c:923]: init_mod_child(): Error while initializing module tls (/usr/lib64/kamailio/modules/tls.so)

f
Karena ada indikasi error yang disebabkan kepemilikan file cert, perlu diubah hak akses file dengan langkah berikut:

root# chmod go+x /etc/letsencrypt/archive
root# chmod go+x /etc/letsencrypt/live

catatan: gunakan sudo juga bukan login sebagai root.

Setelah itu dicoba kembali reload Kamailio dan masalah sudah tidak muncul lagi. Untuk check ,apakah port sudah listen ke TLS, jalankan:

root# ss -ln | egrep "5061"

Links:

Mencoba ‘firewalld’ Sebagai Pengganti ‘iptables’

Dari awal dulu kenal ipchains trus ganti jadi iptables. Belum sempet mainan sampe ngeh banget, eh sekarang sudah ada firewalld. Karena kebanyakan berkutat dengan distro Centos 7 yang defaultnya menggunakan firewalld, akhirnya mau ndak mau ya harus ngeh juga walaupun sedikit-sedikit. Sebelumnya saya pernah posting soal iptables untuk Asterisk di sini. Jadi saya coba ndak jauh-jauh mengingat perintah berikut ini untuk server-server VoIP saya. Yang biasanya saya lakukan sebagai berikut:

Mengaktifkan firewalld agar secara default up setelah reboot atau start.

# systemctl enable firewalld
# systemctl start firewalld

Mengganti port ssh dari 22 ke 8022 (soalnya kalo ndak begitu, selalu diprobe dari mana-mana):

# firewall-cmd --permanent --zone=public --add-port=8022/tcp
# firewall-cmd --permanent --zone=public --remove-service=ssh

Lalu menambahkan port-port penting untuk produksi:

# firewall-cmd --permanent --zone=public --add-service={http,https}
# firewall-cmd --permanent --zone=public --add-port={5060,5061,7000,7001,8000,8443,11000}/tcp
# firewall-cmd --permanent --zone=public --add-port={5060,5061,7000,7001,8000,8443,11000}/udp
# firewall-cmd --permanent --zone=public --add-port=16384-32784/udp

Lalu menambahkan blok ip address yang diperbolehkan untuk mengakses service ke server:

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="1.2.3.4" accept'
# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="6.7.8.0/24" accept'

Optional, kita bisa menambahkan blocking ICMP. Pertama, kita bisa lihat list tipe ICMP:

# firewall-cmd --get-icmptypes
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option

dari list di atas misal kita akan melakukan block echo-reply:

# firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply

Jika dirasa sudah cukup, reload rule di atas dengan perintah:

# firewall-cmd --reload

Dari contoh di atas, sudah keliatan polanya kan? Jika masih belum juga, url berikut ini bisa membantu menjelaskan cara kerja firewalld dengan lebih jelas.

Selamat mencoba!

[Tips] “sngrep” Sebagai Pengganti “ngrep”

Kadang satu atau dua server yang sedang saya tangani tidak selalu bisa terambung ke monitoring Homer. Jadi untuk troubleshoot masih harus meminta bantuan ngrepHanya saja perintahnya cukup panjang dan agak susah merunut ketika trafik sedang ramai. Belakangan nemu tool yang sebenarnya berbasis ngrep, hanya memang dikhususkan untuk trafik SIP, namanya sngrep

Di Yum packaging Centos 7 saat ini belum ada, jadi harus menambahkan file /etc/yum.repos.d/irontec.repo dengan isi:

[irontec]
name=Irontec RPMs repository
baseurl=http://packages.irontec.com/centos/$releasever/$basearch/

tambahkan public key:

rpm --import http://packages.irontec.com/public.key

jalankan update dan install:

[root@aio ~]# yum check-update -y
[root@aio ~]# yum install sngrep -y

Untuk menjalankan cukup ketik: sngrep

Dari tabel di atas kita bisa menggerakkan highlight ke atas dan ke bawah untuk memilih barus transaksi yang hendak dilihat. Misal hendak melihat salah satu proses Register, turunkan highlight ke daftar Method Register lalu tekan enter:

Contoh dialog/transaksi REGISTER yang berhasil dan tidak berhasil seperti berikut:

Lebih enak liatnya kan?

Ada kalanya gambar garis transaksi dengan anak panah di atas muncul sebagai rentetan huruf q seperti: qqqqqqqqqqqqqqqqqqqqqqqqq>
hal ini bisa diatasi dengan menjalankan perintah:

[root@aio ~]# export NCURSES_NO_UTF8_ACS=1

Agar tidak mengulang perintah tiap kali kita login, tambahkan baris berikut di /root/.bash_profile atau di dalam /etc/environment :

export NCURSES_NO_UTF8_ACS=1

Setiap kali login ke username yang sama, maka perintah tersebut akan otomatis dieksekusi.
Selamat mencoba!

[TIPS] Problem Kamailio “contact uri is too long”

Suatu hari saya menemukan masalah Mobile Dialer tidak dapat register ke SIP server kecuali port SIP client diganti ke 5060. Saya pikir firewall SIP server memblokir akses SIP port ke client dari server. Tapi ternyata, saya mendapati error di SIP server sebagai berikut:

kamailio[7968]: WARNING: registrar [sip_msg.c:194]: check_contacts(): contact uri is too long: [sip:021xxxxxxxx@11.2.33.444:48573;app-id=123412341234;pn-type=firebase;pn-tok=fnszKs2QQoA:AbCdEfGHIJkLmNoPQRsTuVwXyZ_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;pn-silent=1;transport=udp]

Secara default panjang maksimal SIP contact URI kamailio diset 255. Kalo kondisi normal sebenarnya baik-baik saja. Tapi kebetulan saya mengaktifkan Google Firebase Cloud Messaging sehingga contact URI menjadi lebih panjang… daaaaann… karena port SIP saya setting random, ada kalanya port SIP client menjadi sepanjang 5 digit. Setelah dihitung, panjang contact URI akan pas 255 kalau port nya 4 digit seperti 5060. Kalo pas kebetulan dapet 48573 seperti di log, akan kelebihan satu digit. Akhirnya di config Kamailio saya tambahkan baris:

modparam("registrar", "contact_max_size", 500)

Lalu setelah reload, akhirnya mobile dialer bisa register dengan lancar