Category Archives

356 Articles
Solusi Kode Bebas/Terbuka untuk Radeon R7 370

Solusi Kode Bebas/Terbuka untuk Radeon R7 370

Minggu ini saya menambahkan sebuah VGA baru, HIS Radeon R7 370 IceQ H2 2GB, ke komputer saya. Secara umum spesifikasi saya menjadi AMD FX 8350 8 inti, 32 GB memori, dan R7 370.

Sebenarnya saya ingin membeli R7 270x. Namun, harga toko di Mangga Dua masih disebut sebagai R9 270x. Berarti barang tersebut belum diperbaharui di Indonesia. Memang, strategi AMD aneh sekali. Barang R9 masa lalu diterbitkan ulang menjadi seri R7. Itu sebabnya, VGA saya masih terdeteksi sebagai R9 270.

Para ahli tempat saya mengadu menyarankan saya membeli VGA nVidia. Memang diakui, implementasi OpenGL nVidia terbaik. Apalagi, ATi lebih mengarah kepada optimasi DirectX.

Lalu mengapa?

Karena AMD telah melepaskan implementasi registernya untuk diakses oleh pengembang kode bebas/terbuka sehingga bisa dibuat penggerak versi terbuka. Saat ini, implementasi terbaik untuk VGA berbasis kode bebas/terbuka dimenangkan oleh AMD. Intel tidak kalahnya untuk keterbukaan. Hanya saja, kartu grafisnya belum sepadan.

Pemasangan Kernel

Kernel yang digunakan adalah kernel 4.2 yang baru saja diterbitkan. Unduh kernel ini:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200-generic_4.2.0-040200.201508301530_amd64.deb \
 http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200_4.2.0-040200.201508301530_all.deb \
 http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-image-4.2.0-040200-generic_4.2.0-040200.201508301530_amd64.deb

Saya mendapati pesan kesalahan ini:

[    2.242982] radeon 0000:01:00.0: Direct firmware load for radeon/TAHITI_vce.bin failed with error -2
[    2.242985] radeon 0000:01:00.0: radeon_vce: Can't load firmware "radeon/TAHITI_vce.bin"

Nampaknya karena implementasi kode terbuka/bebas untuk VCE baru diterbitkan pada Mei 2015 lalu. Saya perlu mengunduh versi terbaru firmware dari versi setelah Vivid.

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-firmware_1.147_all.deb

Setelah ini, pasang semuanya.

sudo dpkg -i *.deb
sudo update-grub

Selanjutnya pemasangan MESA dan DRM paket Gallium Nine. Oh, iya, sekalian bonus Wine yang mendukung Gallium Nine.

Pemasangan MESA dan DRM versi iXit

Dahulu saya juga pernah melakukan ini di Gentoo. Cukup rumit karena mengunduh dari GIT. Namun, nampaknya Ubuntu membuat semuanya mudah. Cukup tambahkan tiga repositori PPA ini.

sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo add-apt-repository ppa:oibaf/gallium-nine
sudo add-apt-repository ppa:commendsarnex/winedri3

oibaf telah berbaik hati memaketkan MESA/DRM dan Gallium Nine. Gallium Nine adalah sebuah implementasi Gallium yang menerjemahkan perintah DirectX 9 langsung tanpa perlu diganti menjadi perintah OpenGL. Sehingga, setiap perintah DirectX 9 langsung dieksekusi ke perangkat keras. Gallium sendiri sebuah teknologi yang memanfaatkan LLVM untuk mengeksekusi serangkaian perintah ke VGA.

Sekarang, perbaharui perangkat lunak Anda.

sudo apt-get update
sudo apt-get upgrade

Ubuntu normalnya memasang libtxc-dxtn-s2tc0, sebuah implementasi S3TC yang bebas paten. Puji Tuhan, Indonesia tidak memiliki hukum paten perangkat lunak yang bodoh. Mari gunakan paket implementasi S3TC (teknik kompresi tekstur) yang sesuai implementasi OpenGL. Hidup anti paten perangkat lunak!

sudo apt-get install libtxc-dxtn0

Tambahkan DRI3 pada berkas konfigurasi X.Org /etc/X11/xorg.conf

Section "Device"
   Identifier "radeon"
   Driver "radeon"
   Option "DRI3"
EndSection

Penggunaan DRI3 masih perlu diaktifkan secara manual.

Oh, iya, sekalian saja pasang Wine yang sudah bisa mendukung Gallium Nine.

sudo apt-get install wine1.7

Jika berhasil sampai baris ini, silakan menyalakan ulang komputer Anda untuk menikmati versi yang lebih bagus.

Hasil Radeon

Hasil pandangan mata saya, RADEON jauh lebih stabil dan cepat dibandingkan dengan FGLRX, penggerak tertutup dari AMD.

Saya bermain DoTA 2 dengan konfigurasi:

-novid -console -high -dev -threads 4 +mat_autoload_glshaders 0

Semua opsi grafis menyala kecuali VSync. Oh, iya, pada FGLRX, saya mematikan ambiance occlusion agar nyaman dimainkan.

Saya juga menerapkan Unigene Heaven versi Demo untuk membandingkan. Hasil menggunakan DirectX Wine lebih cepat dibandingkan dengan OpenGL. Aneh sekali, memang.

 

Bacaan Lebih Lanjut

Galat WP Cron Pada WordPress 4.3

Galat WP Cron Pada WordPress 4.3

Ada kesalahan pemrograman pada WordPress 4.3 sehingga mengakibatkan WP Cron menginjeksi tugas dengan rangkaian yang panjang. Galat ini ada di Galat #33423. Tambalan tersedia pada Tambalan #33646.

Masalah ini membuat beberapa situs yang saya kelola berbasis WordPress jatuh. Hal ini karena WordPress secara otomatis memperbaharui dirinya ke WordPress 4.3.

Saya memodifikasi Tambalan #33646 untuk menambal WordPress 4.3 menjadi berkas WP4.3-WPCronError.patch untuk lebih gampangnya. Berikut cara membetulkan WordPress 4.3:

  1. Unduh berkas WP4.3-WPCronError.patch. Supaya mudah, saya asumsikan berkas ada di /tmp.
  2. Masuk ke direktori WordPress (misalnya /var/www)
    cd /var/www
  3. Setelah itu, tambal WordPress 4.3 Anda. Sekali lagi, saya asumsikan berkas tambalan ada di /tmp. Kalau Anda beda, sesuaikanlah.
    patch -Np1 -i /tmp/WP4.3-WPCronError.patch_.txt
  4. Selesai.

Semoga bermanfaat.

KMAIL Reset Setting

KMAIL Reset Setting

KMail/FAQs Hints and Tips – KDE UserBase Wiki

Solution: Right-clicking on the header of the Folder List now brings up several more configuration options. One section is headed Display Tooltips, and the choices are Always, When Text Obscured, Never. When Text Obscured is handy for folders that have long names, so that only part of the name is displayed.

HHVM dengan SupervisorD
supervisord spawned two hhvm with one as a backup

HHVM dengan SupervisorD

Sebelum ini saya telah membahas bagaimana menggunakan HHVM dengan Monit. Saat ini saya berusaha mengaplikasikan HHVM dengan Supervisord. Supervisord adalah sebuah aplikasi yang bertugas untuk mengatur proses-proses. Dia mirip dengan uWSGI, unicorn, gunicorn, systemd, dan lain sebagainya.

Eh, systemd? Bukankah systemd sebuah aplikasi init?

Iya, betul! Mereka semua memiliki fungsi yang kurang lebih sama. Namun, supervisord memiliki konfigurasi agnostik dibandingkan systemd. Maklum saja, systemd digunakan untuk sistem juga. Sekarang orang masih merasa ngeri kalau berhubungan dengan sistem. Ya, begitu, deh….

Skenario

Skenario yang digunakan sebagai contoh adalah sebagai berikut:

  • Supervisord akan dipakai untuk meluncurkan 2 proses HHVM.
  • HHVM yang pertama akan dipakai sebagai koneksi utama dengan NGINX.
  • HHVM yang kedua digunakan sebagai cadangan.

Untuk skenario pemasangan virtual host yang dipakai secara beramai-ramai, Anda dapat menyesuaikan dengan kebutuhan.

Pasang HHVM dan Supervisord

Cara memasang repositori Debian 7 dan Debian 8. Untuk Ubuntu dan distro-distro sejenis lainnya silakan cari sendiri. Saya pernah membahas di artikel terdahulu.

Mari pasang secara Debian:

sudo apt-get install hhvm supervisor

Selanjutnya konfigurasi.

Konfigurasi

Untuk konfigurasi HHVM yang sama/generik, saya akan menuliskannya dalam sebuah berkas konfigurasi HHVM. Untuk dua proses HHVM, konfigurasi supervisord akan berisi parameter yang berbeda dalam menjalankan HHVM.

HHVM

Buat sebuah berkas /etc/hhvm/hhvm_generik.ini — saya kurang kreatif memberi nama, silakan ganti dengan nama lain.

; php options

; php options


; hhvm specific
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.mysql.typed_results = false

hhvm.jit = 1
hhvm.eval.jit_warmup_requests = 1

hhvm.keep_perf_pid_map = 0
hhvm.perf_pid_map = 0
hhvm.perf_data_map = 0

hhvm.server.apc.enable_apc = true

Selanjutnya, konfigurasi berbeda untuk tiap proses HHVM.

supervisord

Konfigurasi untuk proses HHVM utama, /etc/supervisor/conf.d/hhvm.conf

[program:hhvm]
command=/usr/bin/hhvm -c /etc/hhvm/php.ini -c /etc/hhvm/server_wp.ini -m server
     -vPidFile=/var/run/hhvm/pid
     -vServer.FileSocket=/var/run/hhvm/hhvm.sock
     -vRepo.Central.Path=/var/run/hhvm/hhvm.hhbc
directory=/var/www/html
numprocs=1
autostart=true            ; start at supervisord start (default: true)
autorestart=unexpected    ; auto restart if HHVM dies
startretries=3
user=www-data  ; setuid to this UNIX account to run the program

Selanjutnya, saya akan buat konfigurasi untuk proses HHVM cadangan. Saya akan menandai beberapa baris yang berbeda.

[program:hhvm2]
command=/usr/bin/hhvm -c /etc/hhvm/php.ini -c /etc/hhvm/server_wp.ini -m server
     -vPidFile=/var/run/hhvm/pid2
     -vServer.FileSocket=/var/run/hhvm/hhvm2.sock
     -vRepo.Central.Path=/var/run/hhvm/hhvm.hhbc
directory=/var/www/html
numprocs=1
autostart=true            ; start at supervisord start (default: true)
autorestart=unexpected    ; auto restart if HHVM dies
startretries=3
user=www-data  ; setuid to this UNIX account to run the program

Supaya jelas, perubahan yang saya buat untuk proses HHVM kedua:

  • Baris pertama, ubah nama grup proses menjadi hhvm2. Istilah grup proses karena bisa jadi dalam hhvm2 ada beberapa proses.
  • Baris ketiga, ubah nama proses menjadi /var/run/hhvm/pid2
  • Baris keempat, ubah nama socket menjadi /var/run/hhvm/hhvm2.sock]

Saya masih menggunakan konvensi direktori yang lama, /var/run. Untuk konvensi saat ini, sebaiknya ditulis ke direktori /run. Anda sebaiknya membiasakan diri saja dengan direktori itu.

Untuk skenario yang lain, repositori kode HHVM pada baris ke-5 dapat ditaruh pada berkas yang berbeda. Kebetulan saya menggunakan pengguna yang sama, jadi saya menggunakan satu repositori saja.

Pak, itu aman, ‘kah?

Repositori HHVM itu sendiri adalah sebuah berkas SQLite3. Menurut FAQ SQLite, SQLite3 menggunakan penguncian sistemberkas saat menulis. Sehingga, hanya satu saja proses yang bisa menulis. Sayangnya, untuk sistemberkas NFS dan FAT mekanisme itu tidak terjamin. Ingatlah untuk tidak menaruh berkas repositori di NFS.

Repositori HHVM berukuran sangat besar. Hal ini dapat membebankan untuk skenario inang dengan banyak situs. Untuk menghemat, Anda dapat saja membuat repositori HHVM dengan perizinan grup dapat menulis (0660). Lalu, setiap pengguna yang menjalankan HHVM dimasukkan ke grup itu. Ah, tapi ini di luar skenario dan saya takkan membahas untuk saat ini.

nginx

Ubah upstream NGINX untuk menambahkan satu HHVM sebagai cadangan. Sebagai contoh, saya menaruh upstream dalam sebuah berkas /etc/nginx/conf.d/upstream.conf

# Upstream to abstract backend connection(s) for PHP.
upstream php {
  server unix:/var/run/hhvm/hhvm.sock;
  server unix:/var/run/hhvm/hhvm2.sock backup;
}

Kira-kira begitulah untuk setiap konfigurasi. Selanjutnya, mari menjalankan setiap proses.

Jalankan Semua

Selanjutnya, jalankan proses.

supervisord

Pertama-tama, tambahkan aturan-aturan HHVM yang baru dibuat.

sudo supervisorctl reread
sudo supervisorctl add hhvm
sudo supervisorctl add hhvm2

Baris pertama meminta supervisord untuk membaca ulang konfigurasi. Dua baris selanjutnya menjalankan HHVM.

Oh, iya, kalau misalnya ada perubahan di berkas konfigurasi, jalankan:

sudo supervisorctl update hhvm

Ganti hhvm dengan nama grup proses yang lain.

nginx

Jalankan NGINX seperti biasa.

sudo invoke-rc.d nginx restart

Selesai.

Bacaan Lebih Lanjut

Kompilasi PHP 5.2 pada Debian Jessie

Kompilasi PHP 5.2 pada Debian Jessie

Seperti halnya mantan terindah, aplikasi penting sering kali tidak dapat dilupakan begitu saja. Ia menyeruak masuk kembali dan selalu saja menempati ruang pikiran. Di saat keyakinan melangkah untuk maju, kembali hati jatuh ke relung yang sama.

Inilah kisah dari seorang yang gagal move on dari PHP 5.2 untuk semua saudara/i yang juga gagal move on. CMUNGUDH!

Dari pada menambah ketidakjelasan di hati, berikut asumsi saya agar kita tidak salah paham:

  1. Unduh semua pada satu direktori. Ingat! Satu direktori, jangan terpisahkan.
  2. Semua dilakukan sebagai pengguna biasa, bukan yang berkuasa.
  3. Silakan cari paket-paket pengembang yang diperlukan, saya lupa soalnya. Itu ada di masa lalu. Saya berasumsi Anda sudah memasang paket-paket yang dibutuhkan. Nanti sambil konfigurasi bisa tahu, kok, paket apa saja.

Pasang Paket Yang Dibutuhkan

Lupa saya, tee hee…

Unduh PHP dan Semua Tambalannya

Pada satu direktori, mari unduh berkas-berkas yang dibutuhkan.

export PHP_VERSION=5.2.17

# PHP 5.2
wget "http://museum.php.net/php5/php-$PHP_VERSION.tar.bz2"

# PATCHES
wget https://github.com/TommyLau/docker-lnmpa/raw/master/php/5.2/php-5.2.17-libxml2.patch
wget https://github.com/TommyLau/docker-lnmpa/raw/master/php/5.2/php-5.2.17-openssl.patch

# PHP-FPM
wget "http://php-fpm.org/downloads/php-$PHP_VERSION-fpm-0.5.14.diff.gz" -O php-fpm.diff.gz

ABI dan API XML2 dan OpenSSL berubah pada Debian Jessie, sehingga perlu disesuaikan.

Tambal PHP 5.2

Ekstraksi PHP 5.2 dan masuk ke direktori hasil ekstraksi:

tar xvfj php-5.2.17.tar.bz2
cd php-5.2.17

Di direktori PHP, tambal dengan urutan sebagai berikut:

# Patches for Debian Jessie
patch -Np1 -i ../php-5.2.17-libxml2.patch
patch -Np1 -i ../php-5.2.17-openssl.patch

# Patch for PHP-FPM
zcat ../php-fpm.diff.gz | patch -Np1

Saya malas bikin berkas tambalan. Lakukan saja ini untuk memperbaiki skrip konfigurasi dalam mencari pustaka Freetype:

sed -i 's/freetype2\/freetype/freetype/' configure

Konfigurasi PHP 5.2 untuk Siap Dikompilasi

Pada proses ini, mungkin ada paket pengembangan yang lupa terpasang. Silakan ditelusuri saja.

CFLAGS="-O3 -pipe -march=native -mtune=native -fomit-frame-pointer" './configure'  '--prefix=/opt/php52' '--with-config-file-path=/opt/php52/etc' '--disable-debug' '--with-zlib' '--with-pcre-dir' '--with-gd' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--with-zlib-dir=/usr' '--with-freetype-dir=/usr' '--enable-gd-native-ttf' '--with-ldap' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' '--enable-sysvshm' '--enable-zip' '--with-mcrypt' '--with-xmlrpc' '--enable-mbstring=shared' '--with-openssl=shared' '--with-mysql=shared' '--with-gettext=shared' '--with-zend-vm=GOTO' '--enable-bcmath' '--with-snmp=/usr' '--with-xsl' '--enable-fastcgi' '--enable-fpm' '--with-mysqli' '--with-libdir=lib/x86_64-linux-gnu'

Yang terpenting ada dua:

CFLAGS=”-O3 -pipe -march=native -mtune=native -fomit-frame-pointer”
ini optimasi kompilasi. Lakukan baris ini bila kompilasi dilakukan pada mesin yang sama atau lingkungan yang sama dengan mesin tujuan.
‘–with-libdir=lib/x86_64-linux-gnu’
Debian Jessie menaruh pustaka 64-bit tidak lagi di /usr/lib64, tetapi di /usr/lib/x86_64-linux-gnu.

Anda dapat juga mengganti direktori pemasangan sesuai selera Anda. Misalnya, Anda penggemar FHS sehingga menggunakan /usr/local atau di tempat lain.

‘–prefix=/opt/php52’
Tempat pemasangan PHP 5.2, Anda dapat mengganti ini sesuai selera.
‘–with-config-file-path=/opt/php52/etc’
Konfigurasi berkas. Anda dapat menaruhnya di /etc/php52, misalnya, agar konsisten dengan Debian.

Sebelum kompilasi, ubah pustaka XML2 dan SSL yang hendak ditautkan ke PHP pada Makefile

sed -i 's/-lxml2 -lxml2 -lxml2/-lcrypto -lssl/' Makefile

Selanjutnya, PHP siap untuk dikompilasi.

Kompilasi dan Pasang PHP

Kompilasi dan PHP 5.2

make -j"$(nproc)"
sudo make install

Sampai sini saya pikir untuk konfigurasi PHP FPM dan pemasangan berkas init tidak perlu saya tulis, ‘kan?

Silakan tulis di komentar kalau memang perlu saya buatkan tutorial memasang skrip SystemD dan Sysvinit.

Ucapan Terima Kasih

Terima kasih kepada

WordPress, NGINX, HHVM, dan Monit

WordPress, NGINX, HHVM, dan Monit

Bagi yang sudah pernah berurusan dengan situs yang berat, Anda pasti juga jengah dengan kelakuan PHP-FPM. Ada beberapa solusi yang saat ini tersedia:

Beberapa waktu yang lalu saya sudah membahas tentang uWSGI. Sekarang, saya mau mencoba teknologi HHVM. Doakan saja supaya saya tidak malas dan juga mau mencoba HippyVM dan PHP7-FPM sehingga saya bisa menuliskan untuk Anda.

Pasang HHVM

Cara pasang HHVM di berbagai sistem operasi ada di sini. Saya asumsikan hendak dipasang di sistem operasi Debian Jessie.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
echo deb http://dl.hhvm.com/debian jessie main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm

Perintah-perintah ini pada intinya memasang kunci paket repo HHVM dan menambahkan repo tersebut ke daftar repositori sistem. Kemudian, perbaharui daftar paket yang tersedia dan pasang HHVM.

Selanjutnya, ubah konfigurasi HHVM di /etc/hhvm/server.ini menjadi

; php options

pid = /var/run/hhvm/pid

; hhvm specific 
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false

; Generate JIT codes sooner!
hhvm.eval.jit_warmup_requests = 1

; Disable Perf debugging
hhvm.keep_perf_pid_map = 0
hhvm.perf_pid_map = 0
hhvm.perf_data_map = 0

Ada beberapa perbedaan dengan konfigurasi biasa. Berikut yang penting:

  • Saya memilih untuk menggunakan socket dari pada port TCP karena lebih aman dalam menentukan hak akses.
  • Saya menyuruh HHVM untuk segera mengaktifkan optimasi dari sejak awal. Hal ini mengakibatkan peladen agak lama di awal.
  • Saya mematikan fungsi profiling. Fungsi ini berguna kalau Anda mau men-debug kode PHP Anda yang dieksekusi oleh HHVM. Kemungkinan besar, Anda terlalu malas seperti saya. Fungsi ini hanya akan memenuhi /tmp dengan berkas peta performa.

Pasang NGINX

Pertama-tama, pasang NGINX:

sudo apt-get install nginx

Set upstream NGINX ke HHVM di berkas /etc/nginx/conf.d/upstream.conf

# Upstream to abstract backend connection(s) for PHP.
upstream php-hhvm {
  server unix:/var/run/hhvm/hhvm.sock;
}

Lalu, buat sebuah blok konfigurasi /etc/nginx/php-hhvm

location ~ \.(hh|php)$ {
    try_files $uri =404;

    fastcgi_keep_conn on;
    fastcgi_pass   php-hhvm;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Ini saya ambil dan modifikasi sedikit dari hhvm.conf yang biasanya terpasang saat kita memasang HHVM.

Nah, setiap Virtual Host yang mau menggunakan, tinggal mengikutkan berkas php-hhvm di dalam berkas konfigurasinya. Misalnya, kita buat sebuah berkas /etc/nginx/sites-available/default

server {
    # Anything not directed at specific host will hit "Welcome to nginx"
    listen 80 default_server;
    server_name _;
    
    root /var/www/html;
    index index.php index.html index.htm;

    location / {
            try_files $uri $uri/ /index.php?$args ;
    }

        include php-hhvm;

}

Jangan lupa, ini cuma contoh! Untuk mesin produksi, tolong ubah berkas direktori dan tambahkan beberapa aturan untuk menghindari injeksi.

Selanjutnya, pasang seperti biasa ala Debian:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
sudo invoke-rc.d nginx reload

Beres.

Eits! Nanti dulu, Kisanak! Supaya situs tetap berjalan, mari pasang Monit untuk memonitor keberadaan HHVM. Menurut pengalaman saya, awal-awal HHVM rentan terhadap aplikasi yang harus dinyalakan ulang.

Pasang Monit

Pasang Monit.

sudo apt-get install monit

Buat konfigurasi Monit untuk HHVM di /etc/monit/conf.d/hhvm yang isinya:

check process hhvm with pidfile /var/run/hhvm/pid
  group hhvm
  start program = "/usr/sbin/service hhvm start" with timeout 60 seconds
  stop program = "/usr/sbin/service hhvm stop"
  if failed unixsocket /var/run/hhvm/hhvm.sock then restart
  if mem > 400.0 MB for 1 cycles then restart
  if 5 restarts with 5 cycles then timeout

Untuk dapat memonitor Monit, langkah opsional yang dapat diambil adalah dengan mengubah 3 baris berikut pada /etc/monit/monitrc

set httpd port 2812 and
   use address localhost  # only accept connection from localhost
   allow localhost        # allow localhost to connect to the server and

Kalau pada konfigurasi Jessie, baris-baris itu mulai dari baris ke-130.

Setelah selesai, muat ulang Monit:

invoke-rc.d restart monit

Kalau mau lihat Monit, silakan ketik:

sudo monit status

Tentunya, langkah opsional dikerjakan. Bila tidak, maka Monit tak dapat dilihat.

Selesai!

Paket ca-certificates-java Pada Ubuntu Rusak

Paket ca-certificates-java Pada Ubuntu Rusak

Saat saya hendak membangun Gradle, saya selalu mendapat pesan kesalahan seperti ini:

Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Hal ini terjadi saat saya hendak mengunduh sebuah berkas dari HTTPS. Semua versi Java yang terpasang, baik OpenJDK maupun Oracle 7, 8 tidak dapat menggunakan. Usut punya usut, ternyata ada masalah pada pemasangan paket ca-certificates-java pada Ubuntu Vivid yang saya gunakan. Saya lihat besar berkasnya:

$ ls -al /etc/ssl/certs/java/cacerts 
-rw-r--r-- 1 root root 32 Apr 29 07:21 /etc/ssl/certs/java/cacerts

Cuma 32 byte!

Solusi adalah dengan membuat ulang berkas tersebut.

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

Selesai.

Sumber:

NGINX, uWSGI, PHP pada Debian Jessie

NGINX, uWSGI, PHP pada Debian Jessie

Solusi PHP-FPM sudah tak mencukupi lagi untuk saya. Sering kali saya mendapati sistem-sistem dengan pengunjung banyak tidak bereaksi. Padahal, semua layanan menyala.

Dari kasak-kusuk di Internet yang saya dapati bahwa ternyata PHP-FPM harus sering-sering dijalankan ulang. Bahkan, ada yang memasang CRON untuk menjalankan ulang PHP-FPM setiap 15 menit sekali. Saya pun terenyuh.

Untungnya, ada sebuah solusi, yakni uWSGI. Awalnya, ia hanya untuk menjalankan layanan web berbasis Python. Namun, sekarang ia berkembang untuk menjalankan hampir apa saja. Enaknya dia, setiap proses dijalankan sebagai pengguna biasa (non-root).

Cara Pasang

Cara pasang seperti biasa:

sudo apt-get install nginx uwsgi uwsgi-plugin-php

Seperti biasa.

Konfigurasi

NGINX

Cara konfigurasi sama seperti PHP-FPM, tetapi sedikit berbeda. Berikut sekilas contoh konfigurasi salah satu virtual host (/etc/nginx/sites-available/xxx)

server {
  ...

  location / {
    index   index.php;
    try_files $uri $uri/ /index.php?$args;
  }

  ...

  location ~ .php$ {
     include uwsgi_params;
     uwsgi_modifier1 14; 
     uwsgi_pass unix:/tmp/uwsgi_webphp.sock;
  }
}

Perhatikan bahwa tidak ada yang berubah dari baris lain. Hanya blok pengolah PHP yang diubah dari FastCGI untuk PHP-FPM menjadi UWSGI. Aplikasi nginx memiliki antarmuka alami dengan uWSGI.

Seperti biasa, aktifkan virtual host dengan:

sudo ln -s /etc/nginx/sites-{available,enabled}/xxx
sudo service nginx restart

Selanjutnya uWSGI.

uWSGI

Pada Debian Jessie, virtual host uWSGI terletak pada /etc/uwsgi/apps-available/xxx.ini

Perhatikan kalau uWSGI mengharapkan ekstensi .ini pada setiap berkas konfigurasi virtual host yang valid.

Mari buat berkas /etc/uwsgi/apps-available/webphp.ini (Iya, saya kurang kreatif, silakan ganti nama berkas dengan apa saja)

[uwsgi]
socket=/tmp/uwsgi_webphp.sock
pidfile2=/tmp/uwsgi_webphp.pid
daemonize=/var/log/uwsgi/webphp.log
plugins=php

chdir=/var/www
cheaper=4
close-on-exec=1
harakiri=360
max-requests=128
processes=8
master=1
uid=www-data
gid=www-data
chmod=666
log-5xx=1
vacuum=1
post-buffering=8192

Perhatikanlah yang berbeda ada pada baris 3! Gunakan pidfile2, jangan pidfile saja! Opsi pidfile2 yang membuat adalah pengguna tersebut, bukan root. Bila menggunakan pidfile, layanan uwsgi akan gagal dikendalikan oleh Debian.

Aktifkan konfigurasi ala Debian:

sudo ln -s /etc/uwsgi/apps-{available,enabled}/webphp.ini
sudo service uwsgi restart

Selesai.

Akses Ke Layanan Awan OneDrive

Akses Ke Layanan Awan OneDrive

Mereka menginvasi tempat kerja dan tempat belajar. Mereka pikir bisa memaksa kita untuk meninggalkan FOSS atau GNU/Linux? Mereka salah! Kita tetap bisa bebas walaupun terpaksa menggunakan layanan tertutup. GNU/Linux tetap bisa dipakai!

Ada 2 cara untuk bertahan menggunakan GNU/Linux:

  1. Gunakan API yang disediakan oleh OneDrive dengan aplikasi onedrive-d.
  2. Gunakan WebDav dengan davfs2.

Saya akan membahas kedua cara tersebut. Kali ini saya akan membahas yang pertama saja.

Cara 1: Menggunakan onedrive-d

Aplikasi onedrive-d menggunakan pustaka inotify yang dimiliki kernel Linux untuk mengawasi sebuah direktori. Ketika ada berkas yang berubah pada direktori tersebut, ia akan menjalankan proses sinkronisasi dengan menggunakan API OneDrive.

OneDrive menggunakan OAuth2 sebagai proses autorisasi. Untuk dapat mengakses API OneDrive, aplikasi onedrive-d sebelumnya harus diberi izin terlebih dahulu. Itu sebabnya, dibutuhkan peramban untuk mengakses laman autentikasi Microsoft. Jadi, walau pun proses pemasangan berjalan menggunakan terminal, tetap saja proses ini dijalankan pada lingkungan grafis.

Memasang onedrive-d

Sebelum memulai, pasang manajer paket untuk Python3. Pada Ubuntu ini biasanya belum terpasang:

sudo apt-get install python3-pip

Unduh dengan menggunakan GIT aplikasi onedrive-d

git clone https://github.com/xybu/onedrive-d.git

Setelah mengunduh kode sumber onedrive-d, lakukan pemasangan seperti yang dijelaskan di halaman GitHub onedrive-d.

cd onedrive-d
./install.sh

Skrip pemasangan akan memasang paket-paket yang diperlukan. Sampai ini pemasangan sudah selesai.

Kenapa? Kegampangan? 😛

Persiapan Mengonfigurasi onedrive-d

Sejujurnya, Anda cukup ikuti cara yang ada di halaman GitHub onedrive-d. Tetapi, saya mau memasang dengan asumpsi aplikasi ini akan digunakan pada lingkungan banyak pengguna. Apalagi, cara pemasangan yang terlalu gampang sepertinya membuat bobot tutorial ini serasa kurang geek.

Buat satu pengguna yang akan jadi pengguna onedrive-d.

sudo adduser --system --group --no-create-home --disabled-login onedrive

Buat direktori konfigurasi per pengguna

mkdir ~/.onedrive

Buat berkas log dan jadikan itu milik onedrive.

sudo touch /var/log/onedrive_d.log
sudo chmod 0660 /var/log/onedrive_d.log
sudo chown onedrive:onedrive /var/log/onedrive_d.log

Untuk setiap pengguna yang hendak menggunakan onedrive-d,  tambahkan ke grup onedrive. Misalnya:

adduser user onedrive

Selanjutnya adalah konfigurasi OneDrive.

Mengonfigurasi onedrive-d

Pada saat penulisan, perkakas GUI onedrive-d tidak dapat dijalankan di Ubuntu. Maka, kita perlu menjalankan konfigurasi di terminal. Seperti yang saya bilang sebelum ini, sebaiknya terminal dijalankan pada lingkungan grafis agar mudah menjalankan peramban.

Jalankan wisaya konfigurasi:

onedrive-pref --ui=cli
Loading configuration ... OK
[2015-05-22 19:29:26,545] DEBUG: thread_mgr: started.
Setting up onedrive-d...

Selanjutnya proses pada wisaya konfigurasi ini akan saya jabarkan satu persatu.

Otorisasi OAuth2

Langkah pertama, wisaya akan meminta Anda untuk menyalin sebuah URL dan menjalankannya pada peramban.

(STEP 1/4) Do you want to authorize sign in with your OneDrive account? [Y/n] 

You will need to visit the OneDrive sign-in page in a browser, 
log in and authorize onedrive-d, and then copy and paste the 
callback URL, which should start with 
"https://login.live.com/oauth20_desktop.srf".

The callback URL is the URL where the sign-in page finally goes blank.

Please visit the sign-in URL in your browser:

Sign in to your Microsoft account

No Description

Please paste the callback URL:

Buka peramban Anda dan salin URL panjang tersebut untuk login ke OneDrive.

This slideshow requires JavaScript.

Masuk ke OneDrive. Beri izin akses kepada aplikasi onedrive-d. Pada saat selesai otorisasi, peramban Anda akan dibawa ke sebuah laman kosong. URL itu berisi tiket otorisasi yang diperlukan aplikasi onedrive-d untuk masuk ke OneDrive. Salin seluruh URL untuk digunakan pada konfigurasi.

Melanjutkan proses tadi, masukkan URL yang dibutuhkan:

Please paste the callback URL:

No Title

No Description

[2015-05-22 19:32:38,675] DEBUG: MainThread: config saved. onedrive-d has been successfully authorized.

Tentu saja, saya menyensor kode saya. Itu isinya alfanumerik.

Menentukan Direktori yang Akan Ditautkan OneDrive

Selanjutnya, wisaya akan menanyakan direktori yang akan ditautkan.

(STEP 2/4) Do you want to specify path to local OneDrive repository? [Y/n] 
Please enter the abs path to sync with your OneDrive (default: /home/user/OneDrive): /home/user/Dokumen/OneDrive
The path "/home/user/Dokumen/OneDrive" does not exist. Try creating it.
[2015-05-22 19:33:07,139] DEBUG: MainThread: config saved.
Path successfully set.

Menentukan Beberapa Hal

Selanjutnya, Anda dapat menentukan beberapa hal:

  1. Berapa lama yang ditoleransikan untuk menunggu jaringan yang gagal.
  2. Berapa ukuran minimal berkas yang dikirimkan dalam bentuk potongan-potongan. Lebih kecil dari nilai ini, berkas akan dikirim utuh.
(STEP 3/4) Do you want to change the numeric settings? [Y/n] 
How many seconds to wait for before retrying a network failure (current: 10)?

Files larger than what size (in MiB) will be uploaded blocks by blocks? (current: 4.0)?

When a file is uploaded blocks by blocks, what is the block size (in KiB)? (current: 512.0)?
[2015-05-22 19:33:32,067] DEBUG: MainThread: config saved.

Proses ini bisa diabaikan sebenarnya.

Menentukan Daftar Berkas yang Tidak Disinkronisasi

Selanjutnya, Anda akan diminta untuk menetapkan aturan untuk berkas-berkas yang tidak masuk konfigurasi. Pada proses ini, bila Anda setuju, wisaya akan membuka berkas ~/.onedrive/ignore_v2.ini dalam penyunting terminal.

(STEP 4/4) Do you want to edit the ignore list file? [Y/n] 
Calling your default editor...
You have exited from the text editor.

All steps are finished.
[2015-05-22 19:33:55,722] DEBUG: Dummy-2: config saved.

Selesai wisaya.

Terakhir

Setelah proses wisaya, untuk menjalankan layanan onedrive-d, jalankan perintah:

onedrive-d start

Bila mau menghentikan layanan onedrive-d:

onedrive-d stop

Untuk lihat apakah layanan berjalan:

onedrive-d status

Selesai.

Waduh, saya pikir singkat, ternyata ada banyak juga. Ya, sudah. Kalau begitu cara kedua akan saya bahas di tulisan mendatang.

Akses Ke Layanan Awan Box

Akses Ke Layanan Awan Box

Layanan box.com tidak memiliki klien untuk GNU/Linux. Akan tetapi, dia menyediakan Webdav untuk koneksi. Dengan memanfaatkan davfs2, direktori box.com dapat diperlakukan selayaknya direktori biasa. Saya menulis tutorial ini dengan menggunakan Ubuntu Vivid.

Pemasangan davfs2

Pertama-tama, pasang davfs2

sudo apt-get install davfs2

Anda akan ditanyakan untuk memasang bit SUID pada mount.dav agar bisa dijalankan oleh pengguna biasa. Bilamana Anda sudah terlanjur memasang atau dialog tersebut tidak muncul, silakan jalankan berikut:

sudo dpkg-reconfigure davfs2

Entah melalui pemasangan pertama kali atau rekonfigurasi, Anda akan ditanyakan konfigurasi SUID

davfs2 configuration in Debian asking for SUID permission.

davfs2 configuration in Debian asking for SUID permission.

Pilih saja <Ya> supaya bisa dijalankan oleh pengguna biasa. Selanjutnya mengonfigurasi BOX.

Konfigurasi BOX di fstab

Konfigurasi BOX untuk ditautkan pada direktori tertentu. Misalnya, saya mengaitkan direktori box.com saya pada subdirektori Dokumen. Anda tidak harus melakukan ini di terminal, bisa menggunakan penyunting kesayangan Anda. Tetapi, supaya terlihat keren, caranya begini:

echo "https://dav.box.com/dav/ /home/user/Dokumen/Box  davfs  _netdev,rw,user 0 0" | sudo tee -a /etc/fstab

Ingat, ya, sebenarnya baris perintah itu menambahkan baris berikut pada /etc/fstab

https://dav.box.com/dav/ /home/user/Dokumen/Box  davfs  _netdev,rw,user 0 0

Selanjutnya, tambahkan login Anda supaya tak perlu memasukkan sandi lagi.

Konfigurasi Login Otomatis

Supaya login dilakukan secara otomatis, perlu dibuatkan sebuah berkas rahasia yang berisi pengguna dan sandi box.com.

Buat direktori untuk konfigurasi davfs2

mkdir ~/.davfs2

Buat berkas yang salah satu baris berisi kresedensial box.com Anda dan tambahkan kresedensial Anda. Cara kerennya berikut:

echo "https://dav.box.com/dav user@email.com s4nD1ku" >> ~/.davfs2/secrets

Ingat! Baris yang hendak ditambahkan pada berkas ~/.davfs2/secrets

https://dav.box.com/dav user@email.com s4nD1ku

Ganti “user@email.com” dengan login Anda dan “s4nD1ku” dengan sandi Anda di box.com.

Tautkan box.com

Tunggu dulu, Kisanak! Sebelum kisanak dapat menautkan box.com, kisanak harus menambahkan pengguna ke grup davfs2 supaya dapat menautkan direktori itu.

Tambahkan pengguna user ke grup davfs2

sudo adduser user davfs2

Kisanak dapat saja keluar dari sistem lalu masuk lagi. Tetapi, kalau saya cukup perbaharui saja daftar grup saya supaya tidak perlu keluar. Caranya:

newgrp davfs2

Nah, setelah itu, kisanak dapat menautkan direktori box.com yang telah kisanak konfigurasi.

mount ~/Dokumen/Box

Selesai.

KMail Gagal Dijalankan

KMail Gagal Dijalankan

TL;DR

Pada suatu waktu sehabis memperbaharui sistem, KMail saya tidak lagi dapat dijalankan. Alasan kegagalan karena layanan Akonadi tidak berjalan. Hal ini disebabkan oleh karena pembaharuan MySQL ke versi 5.6. Untuk mengatasi itu, paket MySQL diganti dengan MariaDB.

Versi Lengkap

Saya sempat gagal menjalankan KMail. Alasan yang diberikan adalah karena layanan Akonadi tidak berjalan. Dari jurnal Akonadi, saya dapati pesan kesalahan berikut:

stderr: "2015-05-21 07:25:45 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-05-21 07:25:45 0 [Note] /usr/sbin/mysqld (mysqld 5.6.24-0ubuntu2) starting as process 13829 ...

Ternyata, Akonadi tidak kompatibel dengan MySQL 5.6. Menurut sumber yang saya temukan dari wawancara dengan Mbah Gugel, saya harus mengganti MySQL dengan MariaDB. Ya, sudah:

sudo apt-get install mariadb-common mariadb-client-core-10.0 mariadb-server-core-10.0

Lalu, saya jalankan ulang KMail dan berhasil. Oh, iya, saya menggunakan Ubuntu Vivid.

DHCPd Lebih Cepat pada Android

Koneksi OnePlus One (OPO) saya suka mati hidup. Apalagi semenjak pindah ke paket Unlimited seharga 149 ribu. Kayaknya, bulan depan mau pindah ke paket yang lebih murah saja.

Dibalik derita nahas pindah paket yang mahal yang berujung kepada koneksi acak-kadut, ada hikmah yang tersirat. Saya menemukan trit tentang DHCP accelerator. Sang penulis mengimplementasi protokol klien DHCP yang lebih efisien.

Artikel asli tentang protokol DHCP ini menyebutkan bahwa protokol yang diimplementasi sebenarnya adalah RFC 4436. Dengan menggunakan catatan koneksi ARP yang telah dilakukan sebelumnya, klien DHCP menentukan peladen DHCP yang optimal.

Versi terbaru binari yang digunakan saat penulisan adalah versi 4. Saya menggunakan ZIP yang dibuat oleh seseorang. Dengan ZIP ini, saya memasang secara mudah dengan menggunakan TWM Recovery.

Oh, iya, binari yang disediakan bukan cuma untuk OPO, tetapi dapat juga digunakan oleh perangkat Android lainnya. Penulisnya sendiri sudah mengirimkan tambalannya kepada AOSP, CM, dan proyek DHCPd.

Hasil dari tambalan ini mengesankan saya. Kendati koneksi masih byar-pet, setidaknya transisi koneksi berlangsung cepat dan lebih stabil. Selamat mencoba.

High Quality Ripping in GNU/Linux

High Quality Ripping in GNU/Linux

ONE OK ROCK and Perfume CD

ONE OK ROCK and Perfume CD

I just remembered this noon that I still have CDs that were not opened yet. Two of them was ONE OK ROCK “35xxxv” and Perfume “LEVEL3”. Those CDs had been in my backpack for a long time. Oh, well, time to rip.

There are many ways to rip CD and you can search my blog to have it. Right now I’m using Morituri. Morituri is a command line tool to rip CD using AccurateRip™ technology and CDParanoia. Two of the best tools for accurately ripping CD.

Preparations

We got two process here: getting pycdio and morituri itself. If you think you won’t need the Paranoia, then you can just jump to getting Morituri.

Getting pycdio

Morituri needs pycdio for interfacing with CDParanoia. It isn’t packaged yet in Ubuntu. We have to install it manually. This package is optional, but I want CD Paranoia!

Let’s install the alternative Python Package Installer (pip):

sudo apt-get install python-pip

Install pycdio dependencies:

sudo apt-get install python-dev libcdio-dev libiso9660-dev swig pkg-config

Alright! Let’s install pycdio:

sudo pip install pycdio

Next let’s get down with Morituri.

Getting Morituri

Install Morituri:

sudo apt-get install morituri

Now, we are ready to get the tracks.

Ripping

There are three parts of ripping the CD using Morituri. First, deciding the CD offset based on your CD drive. Second, optionally get the right MusicBrainz tags. Lastly, rip it with fire!

Getting The Right Offset

The purpose of AccurateRip™ is for determining read offset of your CD drive. You could browse their database if you confident that your CD drive is well-known.

If you have an exotic CD drive, you are not so sure, or you just getting really paranoid, you could check your hardware yourself. Get a relatively well-known CD to test and start analyzing:

rip offset find

This takes a while. It takes two turns to check the drive. I was getting bored and only manage to wait for the first pass before I canceled the execution. Besides, my CD drive is well-known. From dmesg, I got this:

$ dmesg | grep DVD
[    2.400198] ata5.00: ATAPI: HL-DT-ST DVDRAM GH40F, MG01, max UDMA/100
[    2.510952] scsi 4:0:0:0: CD-ROM            HL-DT-ST DVDRAM GH40F     MG01 PQ: 0 ANSI: 5

I confirm from the database and from my offset searching, my CD drive has an offset of 667.

Getting The Right Song Title

You can retag it if you want. But, to get the right title, I suggest to browse MusicBrainz database to find out the right title. If your CD is popular enough, it would have many names.

For example, my Perfume CD, LEVEL3, had 17 names. I picked the CD version. I got its ID by getting the serial number in its URL. It was 92d793f1-316a-4d66-ab1e-b9660d2682f7.

Getting It All Together

Alright, all is well. Our preparation is complete. Let’s rip:

rip cd rip --offset 667 -R 92d793f1-316a-4d66-ab1e-b9660d2682f7 --track-template="%A/%d/%t - %a - %n" --disc-template="%A/%d/%A - %d"

I love to get the layout”Album Artist/Album Name/TrackNumber – Artist – Title”. You may have different format. Well, each to one’s own. Here’s the list taken from the man page:

Tracks are named according to the track template, filling in the variables and adding the file extension.  Variables exclusive to the track template are:

  • %t: track number
  • %a: track artist
  • %n: track title
  • %s: track sort name

Disc files (.cue, .log, .m3u) are named according to the disc template, filling in the variables and adding the file extension.  Variables for both disc and track template are:

  • %A: album artist
  • %S: album sort name
  • %d: disc title
  • %y: release year
  • %r: release type, lowercase
  • %R: Release type, normal case
  • %x: audio extension, lowercase
  • %X: audio extension, uppercase

If you got any error, try to remove the offset parameter. It seems there are many variables to disc perfect. Sometimes hidden track(s) made the offset change. May be, that’s probably just my hunch.

Oh, well, all is good. On to the next original CD.

One Plus One

One Plus One

Saya kehilangan LG G2 saya sehingga saya tak lagi bisa mengoprek perangkat tersebut. Saya memutuskan untuk mencoba perangkat legendaris, One Plus One (OPO). Perangkat ini murah, tetapi spesifikasi seperti G3 dan Note 4. Hanya saja, dia seperti GMail masa Beta, Anda takkan bisa memesan langsung tanpa undangan.

Setelah mengemis meminta bantuan undangan di media sosial, rekan saya memberitahukan tentang program Lazada. Akhirnya, saya mendaftarkan diri di forum One Plus dan langsung mendapatkan 1 undangan yang hanya berlaku 48 jam. Kejam nian! Ah, bulan ini saya terpaksa mengencangkan ikat pinggang.

Saya baca banyak tulisan, terutama program 4 Maret 2015 Lazada yang membuka pemesanan One Plus One selama sejam. Mereka bilang perangkat ini bisa sampai sangat lama. Hitungannya minimal 2 minggu. Untungnya saya, dalam tiga hari perangkat ini telah ada di tangan saya. Terima kasih, Tuhan.

Kesan Pertama

Nanti saya coba unggah hasil video membuka bungkusan. Saya terkesan dengan pemaketan One Plus One. Isi dari paket yang datang, antara lain:

  • Telepon OPO
  • Pengisi daya 2100 mA, kabelnya bisa dicopot untuk penhubung USB.
  • Satu tempat tambahan untuk Nano SIM (kartu SIM nano).
  • Satu pin pembuka tempat USIM (kartu SIM mikro).

Tempat USIM menyatu dengan perangkat, sehingga sekilas tidak terlihat. Sungguh luar biasa disain OPO. Saya pikir sulit, tetapi ternyata hanya mencolokkan pin pembuka maka tempat USIM terpental keluar.

Kulit OPO seperti bahan teflon, kasar dan lengket. Di satu sisi, lapisan ini membuat OPO tidak gampang terlepas dari tangan. Tapi, saya pikir bakal itu juga yang membuat OPO gampang kotor. Ternyata, setelah tak sengaja membuat kotor, kotoran dapat mudah dibersihkan.

Yang saya tak duga, OPO menghasilkan foto yang cukup tajam. Wow, sayangnya saya tidak suka selfie.

Silakan klik sendiri untuk gambar aslinya.

Pindah ROM

Seperti motto dari OPO, saya tidak suka ROM pabrikan. Terutama, saya tidak suka ROM pabrikan OPO. Berikut alasan saya:

  • ROM dibuat dari CyanogenMOD 11s, masih KitKat.
  • WhatsApp mengenali OPO sebagai ROM Kustom.
  • Semenjak saya mengaktifkan ART, tampilan saya sering tidak mau menyala. Sepertinya ada galat pada sensor proksimitas. Lagipula, sepertinya OPO CM11s tidak kompatibel sehingga kembali ke Dalvik.

Kalau saya baca, kemungkinan bulan depan akan muncul versi resmi ROM OPO yang Lollipop. OPO menyebutnya Oxygen OS. Kalau lihat dari komposisi timnya, sepertinya Oxygen OS akan dibuat dari Paranoid Android. Kita lihat saja nanti, tetapi sebelum itu, saya mau pasang yang lain.

Buat Salinan Data Anda!

Proses membuka kunci bakal menghapus data di Internal Storage. Simpan data Anda terlebih dahulu! Serius!

Bahan-bahan

Sebelum memulai, silakan unduh bahan-bahan berikut.

Saya sengaja memberi 2 jenis tautan. Halaman yang berisi daftar ROM dan ROM versi langsung. Saya menyarankan agar memilih halaman daftar ROM dan memilih versi baru. Biasanya lebih stabil.

Selain TWRP, semua ZIP unduh ke OPO. TWRP membutuhkan cara khusus untuk masuk.

Buka Kunci OPO

Sebelum lanjut, pastikan bahwa perkakas fastboot maupun ADB dapat mengakses perangkat Anda.

ROM CM Recovery tidak dapat dipakai untuk memasang ROM berbeda. Saya harus memasang TWRP untuk itu. Saya mendapatkan cara memasangnya dari sebuah trit di Forum OPO.

Masuk ke dalam Fastboot

  1. Matikan OPO. Jangan hubungkan kabel USB.
  2. Tekan tombol Volume Naik + Daya untuk masuk ke modus Fastboot.
  3. Setelah masuk ke Fastboot, hubungkan OPO ke komputer dengan kabel USB.

PERHATIAN! PROSEDUR SETELAH INI AKAN MENGHAPUS SEMUA (FACTORY RESET). PASTIKAN ANDA SUDAH MENYELAMATKAN DATA ANDA! KEHILANGAN DATA SALAH SENDIRI.

Buka kuncian OPO:

fastboot oem unlock

Masuk ulang ke OPO:

fastboot reboot

Karena proses ini melakukan factory reset, pastikan kembali bahwa perkakas fastboot maupun ADB dapat mengakses perangkat Anda. Aktifkan kembali USB Debugging.

Non-aktifkan proteksi CM Recovery. Caranya:

  1. Masuk ke Setelan => Opsi pengembang
  2. Hapus tanda centang/non-aktifkan Update Cyanogen recovery

Selanjutnya, pasang TWRP

Memasang TWRP

Masuk kembali ke Fastboot dan pasang TWRP di mode tersebut:

fastboot flash recovery openrecovery-twrp-2.8.5.1-bacon.img

Selanjutnya, masuk ke TWRP:

fastboot reboot recovery

Di dalam TWRP inilah nantinya kita memasang sistem kita.

Pasang ROM

Pertama-tama, hapus tembolok, sistem, dan data. Seperti biasa:

Wipe => Advanced Wipe => Pilih Dalvik Cache, System, Data, Cache => Swipe to Wipe

Dua partisi, Internal Storage dan USB-OTG tidak dipilih.

Selanjutnya, kembali ke menu utama. Pilih Install. Pasang ROM dengan urutan:

  1. cm-12-20150312-ROBBIEL811-SM4.8-bacon.zip
  2. Slim_mini_gapps.BETA.5.0.x.build.0.x-20150313.zip
  3. bacon_firmware_update_2015_01_29.zip
  4. UPDATE-SuperSU-v2.46.zip

Setelah itu, nyalakan ulang OPO untuk masuk ke sistem yang baru.

Selesai.

CM12 build by Robbiel811

CM12 build by Robbiel811

Referensi

Aktifkan Koneksi ADB dari Komputer ke Perangkat Android

Saya rasa ada di suatu entri di blog ini. Tapi, saya membuat tulisan ini agar lebih jelas.

Aturan UDEV Android

Agar Android dapat dikenali, pasang aturan UDEV untuk Android. Baik systemd maupun sysvinit dapat menikmati ini.

Unduh berkas aturan dan taruh ke direktori aturan UDEV.

sudo wget https://raw.githubusercontent.com/M0Rf30/android-udev-rules/master/51-android.rules -O /etc/udev/rules.d/51-android.rules

Muat ulang UDEV.

sudo /etc/init.d/udev restart

Selanjutnya aktifkan modus USB Debugging.

USB Debugging

Aktifkan USB DEBUG pada menu Pengembang. Caranya:

  1. Masuk ke Setelan => Tentang ponsel
  2. Tap beberapa kali pada Nomor bentukan
  3. OPO akan memberitahukan Anda kalau Anda sudah masuk ke menu pengembang.
  4. Keluar dari menu Tentang ponsel dan masuk ke menu Opsi pengembang
  5. Aktifkan Android Debugging
  6. Hubungkan komputer ke OPO dengan kabel USB. Lalu izinkan debugging USB.
    ADB enable access from PC

    ADB enable access from PC

Selesai.

Contoh Kalau Berhasil

Kalau berhasil, Anda bisa lakukan ini pada mode Recovery atau Normal:

$ adb devices
List of devices attached 
4aea6b78        device

Saat telepon Anda dapat masuk ke dalam mode Fastboot, maka yang terdeteksi adalah sebagai berikut:

$ fastboot devices
4aea6b78        fastboot

Selesai.

ACL Slightly Differ from Apache HTTPd 2.2 to 2.4

Upgrading server from Apache HTTPd (Apache2) 2.2 to 2.4 has its bumps here and there. One of them is ACL. If you encounter denied access and on error log encounter this:

AH01630: client denied by server configuration

It probably means you had this in your config:

Order allow,deny
Allow from all

Those two lines must be changed into

Require all granted

Done.

Reference

Cara Pasang Raspberry Pi 2

Cara Pasang Raspberry Pi 2

Sesuai janji dengan seseorang, inilah tulisan tentang memasang di Raspberry Pi 2. Maaf penulisan tidak rapi.

Persiapan

Saat ini saya lagi menjadi fakir MicroSD. MicroSD saya yang kencang ada di rumah. Saat ini saya hanya menggunakan MicroSD pinjaman dari kelas sebelah. Makanya, untuk menyiasati itu, saya menyediakan satu direktori terpisah di komputer.

Konsepnya, saya pasang segala sesuatu pada direktori tersebut. Setelah semuanya selesai, baru isinya dipindahkan ke MicroSD. Mudah bukan?

Siapkan direktori sementara untuk ditulisi. Saya buat /tmp/ROOTFS, tapi Anda bisa beda. Malah lebih baik. Saya, ‘kan, kebetulan memori 32GB dan /tmp dipasangi tmpfs

Buat konvensi:

export ROOTFS=/tmp/ROOT
export REALROOTFS=/mnt/realroot
export REALBOOTFS=/mnt/realboot

Keterangan:

  • Variabel $ROOTFS merupakan direktori sementara yang akan kita pakai untuk memasang-masang sistem sebelum disalin ke MicroSD.
  • Variabel $REALROOTFS merupakan direktori tempat kita nantinya akan mengaitkan partisi utama MicroSD.
  • Variabel $REALBOOTFS merupakan direktori tempat kita nantinya akan mengaitkan partisi boot MicroSD.

Buat direktorinya kalau belum ada.

sudo mkdir $ROOTFS $REALROOTFS $REALBOOTFS

Firmware

Unduh firmware untuk Raspberry Pi.

wget https://github.com/raspberrypi/firmware/archive/master.zip && unzip master.zip

Atau, salin repositori GIT-nya supaya bisa diperbaharui nanti.

Cara kedua.

git clone https://github.com/raspberrypi/firmware.git firmware

Biar tidak bingung, mari buat konvensi direktori firmware ada di sini:

export FIRMWARE_DIR=/home/user/Unduhan/firmware-master

Atau:

export FIRMWARE_DIR=/home/user/Unduhan/firmware

Selanjutnya memasang perkakas pada sistem.

Persiapan Sistem dengan QEMU

Pasang QEMU.

sudo apt-get install qemu binfmt-support qemu-user-static

Lakukan Debootstrap dengan QEMU.

sudo qemu-debootstrap --no-check-gpg --arch=armhf sid $ROOTFS http://kambing.ui.ac.id/debian/

Setelah selesai memasang sistem, lakukan:

sudo qemu-debootstrap --no-check-gpg --arch=armhf sid $ROOTFS http://kambing.ui.ac.id/debian/

Salin modul kernel ke dalam sistem

sudo cp -r $FIRMWARE_LIB/modules $ROOTFS/lib/

 

Masuk ke sistem:

sudo chroot $ROOTFS

Persiapan Sistem Di Dalam QEMU

Siapkan FSTAB

# cat > /etc/fstab << EOF > /dev/mmcblk0p1          /boot           vfat            defaults        0 2
> /dev/mmcblk0p2          none            swap            sw              0 0
> /dev/mmcblk0p3          /               xfs             defaults,noatime,nodiratime        0 1
> EOF

Siapkan bahasa.

apt-get install locales

Aktifkan Bahasa Indonesia

dpkg-reconfigure locales

Siapkan Zona Waktu

dpkg-reconfigure tzdata

Sampai sini, sih, seharusnya sistem siap dipasangi apa pun. Biar cantik, pasang ini:

apt-get install vim

Yang terakhir tergantung agama dan kepercayaan masing-masing. Saya tidak sedang memaksa Anda pindah agama.

Pengguna

Pasang sudo untuk pengguna admin.

apt-get install sudo

Buat satu pengguna.

# adduser jp
Adding user `jp' ...
Adding new group `jp' (1000) ...
Adding new user `jp' (1000) with group `jp' ...
Creating home directory `/home/jp' ...
Copying files from `/etc/skel' ...
Masukkan sandi Unix yang baru :
Ketik ulang sandi Unix:
passwd: kata sandi diperbaharui dengan sukses
Mengubah informasi pengguna dari jp
Masukkan nilai baru atau tekan ENTER untuk nilai bawaan
        Nama Lengkap []: Jan Peter Alexander Rajagukguk
        Nomor Ruangan []: 1145
        Telepon Kantor []: 
        Telepon Rumah []: 
        Lain-lain []: 
Is the information correct? [Y/n] Y

Buat dia sebagai admin.

adduser jp sudo

Pasang perkakas sistemberkas yang Anda gunakan. Saya menggunakan XFS, jadi saya pasang:

apt-get install xfsprogs dosfstools ntfs-3g

Saya hanya memilih XFS, FAT32/16, dan NTFS. Untuk perkakas EXT2/3/4 nampaknya sudah otomatis terpasang. Selanjutnya memasang sistem dasar.

Siapkan Peladen SSH

Pasang Dropbear, peladen SSH yang lebih ringan dari OpenSSH.

apt-get install dropbear openssh-client

Aktifkan dia supaya jalan di awal.

sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropbear

Sampai sini sistem dasar sudah selesai. Silakan keluar dari CHROOT dengan CTRL+D atau ketik “quit” atau “exit”. Setelah puas memasang segala sesuatu, saatnya sistem ditaruh ke dalam mount.

Menaruh Aplikasi Ke MicroSD

Saya diberi pinjaman sebuah MicroSD sebesar 4GB. Saya partisi dengan:

  • BOOT: 128MB
  • SWAP: 384MB
  • ROOT: Sisanya.

Saya tidak tahu sisanya itu ada berapa. Tapi silakan lihat gambar. Saya menggunakan pemartisi KDE.

Raspberry Pi 2 Partitions

My Raspberry Pi 2 partition scheme

Partisi BOOT memang harus FAT32 atau FAT16. Ya, saya pilih FAT16 saja. Yang menarik, saya memberikan partisi utama dengan sistemberkas XFS. GUNAKAN SAJA EXT3/4!

Persiapan Partisi BOOT

Anda bisa lakukan ini di penjelajah berbasis GUI favorit Anda (Nautilus/Dolphin/dsb.) atau gunakan cara yang lebih sulit.

Saya asumsikan partisi MicroSD ada di partisi /dev/sde1 ini tergantung sistem Anda. Berikut caranya:

sudo mount /dev/sde1 $REALBOOTFS

Salin dari unduhan kita ke direktori itu

sudo cp -r $FIRMWARE_DIR/boot/* $REALBOOTFS

Tambahkan baris parameter pada berkas cmdline.txt, biasanya belum ada.

 echo "root=/dev/mmcblk0p3 rw rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop" | sudo tee $REALBOOTFS/cmdline.txt

Selesai, jangan lupa sinkronisasikan perubahan ke dalam MicroSD.

sync

Persiapan Partisi Utama

Sekali lagi, Anda tidak perlu menyusahkan diri. Tapi, kalau mau pakai cara ini, ya, sudah.

sudo mount /dev/sde3 $REALROOTFS

Salin semua kerjaan kita ke sana.

sudo cp -a $ROOTFS/* $REALROOTFS/

Dan jangan lupa,

sync

Setelah ini selesai, lepas kaitan dan masukkan ke dalam RaspberryPi.

sudo umount $REALROOTFS $REALBOOTFS

Selesai.

Referensi

Akses WiFi Ala Debian Wheezy

Tulisan ini varian dari tulisan saya sebelumnya. Sesuai keinginan saya kalau saya sedang tidak bermain DoTA 2, saya mau mengoprek versi distro lain. Siapa tahu ada yang kesulitan.

Menyiapkan Penggerak

Saya menggunakan perangkat adapter WIFI USB LinkSys WUSB54GC.

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 13b1:0020 Linksys WUSB54GC v1 802.11g Adapter [Ralink RT73]
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet

Menurut WIKI Debian, saya harus menambahkan cabang non-free. Maafkan saya, Mbah Stallman. Saya harus mengubah /etc/apt/sources.list menjadi:

deb http://kambing.ui.ac.id/debian/ wheezy main contrib non-free
deb-src http://kambing.ui.ac.id/debian/ wheezy main contrib non-free

deb http://kambing.ui.ac.id/debian-security/ wheezy/updates main contrib non-free
deb-src http://kambing.ui.ac.id/debian-security/ wheezy/updates main contrib non-free

Ya, intinya, saya menambahkan kata non-free di belakang setiap baris penyedia repositori. Adapter WIFI saya membutuhkan binari firmware yang tidak tersedia kode sumbernya. Ya, nasib…

sudo apt-get update

Pasang binari firmware yang dibutuhkan:

sudo apt-get install firmware-ralink

Selanjutnya memasang perkakas yang dibutuhkan.

Jaringan

Yang pertama kita akan memasang dahulu firewall, baru perkakas yang lain. Ingat! Firewall harus dijalankan pertama kali sebelum sebuah antarmuka jaringan berjalan.

Memasang iptables

Cara pasangnya biasa, tapi saya menambahkan satu paket lagi. Paket iptables-persistent membuat aturan IPTables yang ada tersimpan permanen. Sehingga, aturan tersebut akan dimuat kembali saat Debian dijalankan ulang.

sudo apt-get install iptables iptables-persistent

Kalau ditanyakan apakah mau menyimpan aturan IPv4 dan IPv6, jawab saja “YES”.

Aktifkan penerusan IPv4.

sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf

Baris pertama adalah cara yang dianjurkan untuk langsung mengaktifkan sebuah parameter di kernel. Baris kedua untuk menyimpan konfigurasi itu secara permanen.

Selanjutnya, aktifkan IP Masquerade pada eth0 untuk membuat NAT.

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Selanjutnya mengonfigurasi antarmuka jaringan

Antarmuka Jaringan

Sejujurnya, karena kita baru memasang firmware, kemungkinan kita harus menyalakan ulang Debian kita. Sebelum itu, siapkan konfigurasi jaringan untuk antarmuka nirkabel kita.

allow-hotplug wlan0
iface wlan0 inet static
        address 10.10.0.1
        netmask 255.255.255.0

Setelah beberapa baris ini ditambahkan, selanjutnya memasang perkakas-perkakas yang diperlukan

Perkakas

Seperti artikel sebelumnya, kita akan memasang isc-dhcp-server dan hostapd.

Memasang isc-dhcp-server

Pasang isc-dhcp-server.

sudo apt-get install isc-dhcp-server

Buat aturannya seperti pada artikel sebelum ini.

ddns-update-style none;
log-facility local7;
subnet 10.10.0.0 netmask 255.255.255.0 {
    range 10.10.0.2 10.10.0.32;
    option domain-name-servers 8.8.8.8;
    option routers 10.10.0.1;
}

Selanjutnya memasang aplikasi pengautentikasi jaringan WIFI.

Memasang hostapd

Pasang hostapd.

sudo apt-get install hostapd

Buat konfigurasi /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=AP Lo Nyambung2
hw_mode=g
ieee80211d=1
country_code=ID  ### 802.11d harus ada kode negara
channel=3     ### Channel 3
wmm_enabled=1 ### QoS
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=s4nD1Al4yFtW
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Perhatikan bahwa baris ieee80211h = 1 tidak ada. Aplikasi hostapd pada Debian belum mendukung itu sepertinya.

Terakhir

Muat ulang sistem operasi Debian. Seharusnya kalau tidak ada halangan mau pun rintangan, semua akan terkonfigurasi secara otomatis. Gambar ada di artike sebelumnya.

Bacaan Lebih Lanjut

Steam Gagal Pada Ubuntu Vivid

Saat tulisan ini ditulis, Steam tidak dapat berjalan pada Ubuntu Vivid dengan menggunakan penggerak MESA. Penyebabnya:

$ env LIBGL_DEBUG=verbose steam
Running Steam on ubuntu 15.04 64-bit
STEAM_RUNTIME is enabled automatically
Installing breakpad exception handler for appid(steam)/version(1424305157)
libGL: screen 0 does not appear to be DRI3 capable
libGL: pci id for fd 7: 1002:68b8, driver r600
libGL: OpenDriver: trying /usr/lib/i386-linux-gnu/dri/tls/r600_dri.so
libGL: OpenDriver: trying /usr/lib/i386-linux-gnu/dri/r600_dri.so
libGL: dlopen /usr/lib/i386-linux-gnu/dri/r600_dri.so failed (/home/user/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib/i386-linux-gnu/dri/r600_dri.so))

Itu artinya versi pustaka C yang dipakai sistem lebih tinggi dari versi yang terpaket dalam Steam. Solusinya adalah dengan menghapus pustaka C. Oh, iya, sekalian juga menghapus pustaka GCC.

rm ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6*
rm ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1

Beres!

Membuat WIFI Sendiri dengan hostapd, dhcpd, dan nftables

Membuat WIFI Sendiri dengan hostapd, dhcpd, dan nftables

Access point configuration

Access point configuration

Saya hendak membuat sebuah jaringan nirkabel. Jaringan nirkabel itu terhubung ke sebuah komputer yang berfungsi sebagai router. Setiap akses dari perangkat-perangkat dalam jaringan tersebut dienkapsulasi dalam NAT dan dikirim ke Internet/jaringan lainnya.

Komputer yang saya gunakan adalah GNU/Linux Gentoo dengan spesifikasi sebagai berikut:

  • Kernel Linux 3.19-pf1
  • Systemd 219

Saya pun tertarik menggunakan nftables karena dia yang akan menggantikan iptables di masa mendatang. Perkakas nftables pertama kali ada di Linux 3.13. Jadi, ya, lumayan relatif baru.

Aktifkan IP Forwarding

Setiap kali mau memakai NAT, jangan lupa mengaktifkan IP Forwarding di kernel. Lihat dulu kalau dia aktif:

$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

Kalau nilainya 0, berarti belum aktif. Aktifkan:

sudo sysctl -w net.ipv4.ip_forward=1

Supaya permanen, tambahkan ke konfigurasi. Ingat! Sistem ini menggunakan systemd. Jadi, berkasnya ada di /etc/sysctl.d

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf

Ini kalau tadi sebelumnya IPv4 belum menyala. Kalau sudah, lewati saja. Tapi, biasanya distro-distro bakunya mematikan fitur ini.

nftables

Ada beberapa langkah yang dilakukan untuk memasang nftables:

  1. Memasang kernel yang sudah mendukung nftables.
  2. Memasang perkakas nftables.
  3. Memasang unit systemd.

Modul Kernel

Saya tidak tahu Anda menggunakan kernel versi apa. Tapi, seandainya kernel tersebut di atas 3.13, kemungkinan ada. Kalau saya kebetulan mengompilasi sendiri kernel saya. Jadinya, saya aktifkan nftables pada bagian:

-> Networking support
  -> Networking options
    -> Network packet filtering framework (Netfilter)
      -> Core Netfilter Configuration

Lalu saya centang saja semua yang berbau nf_tables di konfigurasi seperti terlihat pada gambar.

I just opt-in every "nf_tables" in Core Netfilter Configuration

I just opt-in every “nf_tables” in Core Netfilter Configuration

Setelah saya kompilasi dan pasang kernel saya. Lalu saya masuk ke sistem dengan menggunakan kernel tersebut. Selanjutnya saya memasang perkakas nftables untuk bisa memanipulasi tabel nftables.

Perkakas

Saya memasang nftables dengan cara berikut:

sudo emerge -av net-firewall/nftables

Atau gunakan pemaket dari distro kesayangan Anda masing-masing. Untuk Debian dan turunannya, ada bacaan menarik mengenai cara cepat membuat perkakas ini.

Jika sudah, ada beberapa contoh penggunaan nftables yang menarik, misalnya:

  • Melihat seluruh isi tabel:
    nft list ruleset
  • Menghapus seluruh tabel:
    nft flush ruleset
  • Menyimpan seluruh tabel ke berkas konfigurasi:
    nft list ruleset > /var/lib/nftables/rules-save
  • Memuat konfigurasi dari berkas konfigurasi:
    nft -f /var/lib/nftables/rules-save

Saya mengikuti tata letak berkas di Gentoo. Dia menaruh aturan iptables, nftables, ebtables, dan lain-lain di direktori /var/lib. Kalau Debian menaruhnya di /etc. Anda terserah mau taruh di mana, yang penting konsisten.

Inisialisasi Aturan nftables

Awal-awalnya nftables masih kosong. Saya menggunakan aturan yang telah disediakan gentoo untuk IPv4 NAT. Gentoo saat ini menaruh berbagai aturan siap pakai di /etc/nftables.

Mengapa saat ini? Karena biasanya aturan siap pakai ditaruh di /usr/share. Mungkin saja bilamana nftables sudah stabil, aturan-aturan ini dipindahkan ke sana. Ya, sudah, pakai saja:

sudo nft -f /etc/nftables/ipv4-nat

Supaya Anda tidak penasaran, isi berkas itu sebenarnya cuma aturan biasa:

#!/sbin/nft -f

table nat {
    chain prerouting    { type nat hook prerouting priority -150; }
    chain postrouting   { type nat hook postrouting priority -150; }
}

Mirip-miriplah dengan tutorial nftables NAT yang resmi.

Lalu tambahkan aturan yang mentranslasi semua paket jaringan dari wlan0 ke eth0.

sudo nft add rule nat postrouting ip saddr 10.10.0.0/24 meta oif eth0 snat 192.168.0.5

Ganti 192.168.0.5 dengan IP kartu ethernet Anda. Lihat gambar awal mengenai skema jaringan yang hendak dibangun.

Padanan di iptables

Aturan ini padanannya di iptables seperti ini:

sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j SNAT --to 192.168.0.5

Lalu mengapa tidak menggunakan iptables saja biar sederhana? Judul artikel ini belajar nftables. Lagipula, sebenarnya lebih sederhana nftables, hanya saja ia belum terintegrasi dengan distro-distro yang ada saat ini. Dia masih baru, bahkan kernel yang mendukung belum masuk.

Sebelum ini saya biasanya menggunakan perintah berikut untuk iptables:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Nanti saya coba di Wheezy, deh. Kalau tidak malas, tapinya. Untuk saat ini jangan lupa untuk mematikan NAT di iptables supaya tidak kacau!

sudo rmmod iptable_nat

Menyimpan Aturan nftables

Kalau sudah selesai, seharusnya aturan nftables akan sebagai berikut:

$ sudo nft list ruleset
table ip nat {
    chain prerouting {
         type nat hook prerouting priority -150;
    }

    chain postrouting {
         type nat hook postrouting priority -150;
         ip saddr 10.10.0.0/24 oif eth0 snat 192.168.0.5
    }
}

Nah, kalau di Gentoo, dia sudah menyediakan skrip initnya. Sayangnya cuma untuk OpenRC. Kita bisa memanfaatkan skrip itu untuk menyimpan aturan NAT:

sudo /etc/init.d/nftables save

Atau cara manualnya:

sudo mkdir -p /var/lib/nftables
sudo nft list ruleset | sudo tee /var/lib/nftables/rules-save

Selanjutnya membuat aturan systemd supaya dijalankan otomatis.

Aturan systemd untuk nftables

Belum ada aturan untuk nftables. Ada seseorang yang berbaik hati untuk membuat skrip untuk systemd. Tetapi, saya memilih untuk membuat sendiri.

Skrip orang itu membuat nftables sebagai layanan. Tetapi, saya pikir seharusnya perilaku nftables sama seperti skrip ALSA dan iptables. Ia hanya perlu dijalankan sekali saja. Itu sebabnya, sama seperti kedua subsistem, saya memecah nftables menjadi tiga berkas aturan.

Aturan /usr/lib/systemd/system/nftables.service

[Unit]
Description=Store and restore nftables firewall rules
Documentation=man:nftables(8)

[Install]
Also=nftables-store.service
Also=nftables-restore.service

Aturan /usr/lib/systemd/system/nftables-restore.service

[Unit]
Description=Restore nftables firewall rules
# if both are queued for some reason, don't store before restoring 🙂
Before=nftables-store.service
# sounds reasonable to have firewall up before any of the services go up
Before=network.target
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/sbin/nft -f /var/lib/nftables/rules-save

[Install]
WantedBy=basic.target

Aturan /usr/lib/systemd/system/nftables-store.service

[Unit]
Description=Store nftables firewall rules
Before=shutdown.target
DefaultDependencies=No

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/sbin/nft list ruleset > /var/lib/nftables/rules-save"

[Install]
WantedBy=shutdown.target

Selanjutnya, pasang ketiga layanan tersebut:

sudo systemctl enable nftables

Selesai untuk nftables, selanjutnya mengonfigurasi antarmuka jaringan.

Mengonfigurasi Antarmuka Jaringan

Sudah menjadi aturan umum kalau firewall berjalan sebelum antarmuka jaringan diaktifkan. Dengan memulai firewall terlebih dahulu, tidak ada jeda yang bisa dipakai untuk masuk. Tidak ada waktu antara menjalankan antarmuka jaringan dengan menyalakan firewall. Itu sebabnya, nftables dipasang pertama kali sebelum antarmuka jaringan.

Kalau Anda pengguna destop, kemungkinan sudah ada NetworkManager. Untuk konfigurasi minimal, NetworkManager biasanya tidak dipasang. Antarmuka jaringan harus dipasang dengan cara lain.

Saya gagal menggunakan metode systemd-networkd. Kalau saya menggunakan infrastruktur itu, firewall (nftables/iptables) tidak ada yang berjalan! Mungkin saya ada yang kurang. Entahlah, yang pasti saya mengonfigurasi statik dengan cara lain saja.

Antarmuka eth0

Gentoo menggunakan pendekatan yang sama dengan Arch Linux. Mereka menggunakan systemd untuk menjalankan skrip Gentoo. Dengan demikian, konfigurasi Gentoo yang lama bisa dibaca. Ini konfigurasi lama saya di  /etc/conf.d/net

dns_servers=( "8.8.8.8" )

config_eth0="192.168.0.5 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"

Cara mengaktifkan layanan adalah dengan membuat tautan simbolik dari net@.service ke net@eth0.service.

sudo ln -s /usr/lib/systemd/system/net@{,eth0}.service

Kalau Anda tidak percaya diri dengan menggunakan enumerasi BASH, bentuk lain dari perintah itu adalah

sudo ln -s /usr/lib/systemd/system/net@.service /usr/lib/systemd/system/net@eth0.service

Setelah itu, pasang layanan ini ke systemd agar dijalankan pada waktu komputer baru menyala.

sudo systemctl enable net@eth0

Kalau Debian, seperti biasa ada di /etc/network/interfaces. Jadi, mungkin systemd tidak terlalu dibutuhkan.

Antarmuka wlan0

Saya menggunakan Linksys WUSB54GC. Kemampuan yang dimiliki:

    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point

Dia bisa menjadi Access Point (AP)!

Implementasi yang kita pilih merupakan implementasi statik. Kita bisa dengan aman berasumsi bahwa IP yang dipakai tidak akan berubah.

Saya tadinya ingin membuat seperti antarmuka Ethernet. Tapi, konfigurasi gagal karena RFKill selalu memblokir wlan0 dengan soft block. Saya pun memutuskan untuk membuat sebuah layanan kecil untuk menjalankan wlan0 di /usr/lib/systemd/system/ap-static.service

[Unit]
Description=Static WLAN0 as an Access Point
Documentation=man:rfkill(8) man:ip(8)
After=network.target
After=time-sync.target

[Service]
Type=oneshot
RemainAfterExit=yes 
ExecStart=/usr/sbin/rfkill unblock all
ExecStart=/bin/ip addr add 10.10.0.1/24 dev wlan0
ExecStart=/bin/ip link set wlan0 up

[Install]
WantedBy=multi-user.target

Seperti biasa, pasang layanan ini:

sudo systemctl enable ap-static

Untuk antarmuka nirkabel sudah selesai. Saatnya memasang layanan yang akan mengonfigurasi klien WIFI.

Layanan Konfigurator WIFI

Ada dua layanan utama yang dipakai untuk tutorial kali ini. Keduanya masing-masing bisa diganti dengan yang lain. Namun, saat ini saya menggunakan dua layanan ini karena keduanya dapat dikembangkan untuk kebutuhan kompleks.

hostapd
Hostapd adalah aplikasi penyedia Access Point. Dia menyediakan autentikator, mengatur antarmuka WIFI, dan sejenisnya. Selain memiliki autentikator internal, hostapd dapat terhubung ke Radius dan mendukung ACS.
DHCPd
DHCPd adalah penyedia layanan DHCP. Layanan ini yang mengatur kepemilikan IP dan sejenisnya kepada klien. Sebenarnya masih ada udhcpd yang lebih sederhana. Yah, namanya juga belajar.

Mari konfigurasi keduanya.

Layanan hostapd

Setiap distro umum memiliki paket hostapd. Saya sendiri di Gentoo mengunakan hostapd versi:

$ sudo hostapd -v
hostapd v2.3
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2014, Jouni Malinen <j@w1.fi> and contributors

Pertama-tama, konfigurasikan AP yang hendak kita buat. Berikut contohnya pada /etc/hostapd/hostapd.conf

# WiFi Hotspot
interface=wlan0
driver=nl80211
# Access Point
ssid=AP Lo Nyambung2
hw_mode=g
ieee80211d=1
country_code=ID  ### 802.11d/h harus ada kode negara
# WiFi Channel:
ieee80211h=1  
channel=3     ### Channel 3
wmm_enabled=1 ### QoS
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=s4nD1Al4yFtW
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Saya menyalin skrip layanan systemd hostapd yang disediakan oleh Gentoo menjadi /usr/lib/systemd/system/hostapd-wlan0.service. Alasan saya supaya kalau ada pembaharuan sistem, skrip ini tidak berubah. Lagipula, saya mengubah agar layanan berjalan setelah ap-static.service sudah berjalan. Isinya:

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=network.target
After=ap-static.service

[Service]
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf

[Install]
WantedBy=multi-user.target

Setelah itu, pasang layanan ini.

sudo systemctl enable hostapd-wlan0

Selesai.

Layanan dhcpd

Seperti saya bilang, sebenarnya DHCPd agak mubazir. Tapi, berhubung sistem ringan, saya pasang saja. Oh, iya, kalau di Debian, nama paketnya isc-dhcp-server.

Gentoo:

sudo emerge -av net-misc/dhcp

Debian dan turunannya:

sudo apt-get install isc-dhcp-server

Setelah terpasang, buat berkas konfigurasi /etc/dhcp/dhcpd.conf

ddns-update-style none;
log-facility local7;
subnet 10.10.0.0 netmask 255.255.255.0 {
    range 10.10.0.2 10.10.0.32;
    option domain-name-servers 8.8.8.8;
    option routers 10.10.0.1;
}

Jangkauan IP tidak saya buat jauh karena pun jumlah maksimal klien yang terhubung ke AP tidak begitu banyak. Lain cerita kalau misalnya DHCPd kita pakai juga untuk yang lain.

Seperti biasa, saya menyalin berkas systemd DHCPd dan menamainya menjadi /usr/lib/systemd/system/dhcpd4-wlan0.service

[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
After=ap-static.service

[Service]
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcp -group dhcp --no-pid

[Install]
WantedBy=multi-user.target

Terakhir, pasang layanan DHCPd:

sudo systemctl enable dhcpd4-wlan0

Selesai.

Terakhir

Matikan dan kemudian hidupkan kembali komputer yang dipakai sebagai AP. Kalau benar, maka otomatis layanan ini akan berjalan.

Example on working AP.

Example on working AP from my phone.

Tamat.