Category Archives

176 Articles
KDE5: GIT dan GIT_ASKPASS

KDE5: GIT dan GIT_ASKPASS

Pada KDE5, para pengguna GIT akan selalu disedihkan dengan pertanyaan seperti ini:

$ git pull
Username for 'https://git.repository.com': me
Password for 'https://me@git.repository.com': xxxxx

Mengapa hanya KDE5? Karena GIT menyediakan integrasi dengan GNOME Keyring. Ya, bisa saja memasang GNOME Keyring. Tapi, itu bukanlah KDE5 yang kita cintai! ;-(

Untungnya, ada integrasi dengan mekanisme SSHASKPASS.

Pertama-tama, pasang implementasi KDE5 untuk SSHASKPASS.

sudo apt-get install ksshaskpass

Buat ksshaskpass sebagai penyimpan sandi.

git config --global core.askpass /usr/bin/ksshaskpass

Selanjutnya, Anda harus membuat keputusan.

Memasukkan Login per Repositori GIT

Kalau Anda hanyalah pengguna dari sebuah repositori tunggal, Anda cukup menyimpan login di lokal saja. Ini dilakukan di setiap direktori GIT.

git config --local credential.https://git.repository.com.username "me"

Kemungkinan besar, Anda adalah seorang leecher seperti saya pengembang yang mengakses lebih dari satu repositori dalam sebuah situs GIT. Untuk itu, bisa dibuatkan repositorinya.

git config --global credential.https://git.repository.com.username "me"

Sampai sini, Anda sudah selesai.

Terakhir

Apa yang terjadi?

Bacaan Lebih Lanjut

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi
Wily Broke The Window

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi

Saya punya problema KMail2 yang saya pasang di KDE semenjak KDE SC 4 sering crash. Bahkan, saya terpaksa menghapus ulang seluruh konfigurasi KDE demi bisa memasang ulang KMail2. Memang, saya bisa saja memasang Thunderbird. Tapi, saya jatuh cinta dengan cara pakai di KMail2.

Setelah pemasangan KDE Neon, distro baru berdasarkan Kubuntu LTS 16.04, saya menemukan bahwa saya tidak bisa menggunakan KMail2! Usut punya usut, ternyata karena sistem saya menggunakan Oracle MySQL 5.7. Ada sintaks SQL yang tidak lagi cocok dengan versi teranyar itu. Saya pun harus memilih pindah ke MariaDB 10.x.

Saya temukan lebih lanjut, ternyata pustaka Akonadi yang dipakai oleh KMail2 menggunakan abstraksi Qt SQL. Lah, ‘kan, Qt SQL mendukung banyak basisdata! Saya pun memilih untuk dari pada pindah ke MariaDB, pindah ke PostgreSQL.

Sedikit Noktah dalam Pemasangan

Saya memasang PostgreSQL seperti yang saya telah tulis sebelumnya. Oh, iya, bakal ada pesan kesalahan pada saat pemasangan paket Debian PostgreSQL pada Kubuntu 16.04 dan turunannya kalau menggunakan cara tersebut. Hal ini karena versi BASH yang disediakan memiliki aturan yang lebih ketat untuk mode ketat.

Solusinya adalah mengganti setiap “$1” menjadi “${1:-}” pada berkas /usr/share/postgresql-common/supported-versions. Pada ViM, regex yang dipakai:

:%s/\$1/\$\{1\:-\}/g

Baru, ulangi kembali pemasangan PostgreSQL.

sudo apt-get -f install

Mungkin Anda akan lebih beruntung dari saya dengan memasang paket dari Kubuntu. Tapi, setahu saya, sih, tidak bisa.

Kalau Anda tidak menggunakan PostgreSQL pada sistem Anda, matikan saja instan PostgreSQL yang berjalan di sistem.

sudo systemctl stop postgresql && sudo systemctl disable postgresql

Lumayan menghemat beberapa mega memori dan proses CPU.

Konfigurasi Akonadi Sebelum Dipasang

Pertama-tama, mari buat direktori konfigurasi Akonadi:

mkdir -p ~/.config/akonadi/

Lalu, buat berkas konfigurasi untuk Akonadi menggunakan PostgreSQL:

cat >> ~/.config/akonadi/akonadiserverrc << EOF
[Debug]
Tracer=null

[%General]
Driver=QPSQL

[QPSQL]
Host=/tmp/akonadi-jp.RqiEZ0
InitDbPath=/usr/lib/postgresql/9.5/bin/initdb
Name=akonadi
Options=
ServerPath=/usr/lib/postgresql/9.5/bin/pg_ctl
StartServer=true
EOF

Ganti 9.5 dengan versi PostgreSQL yang Anda pakai.

Pemasangan KMail2

Selanjutnya, tinggal pasang saja:

sudo apt-get install akonadi-backend-postgresql kmail

Bila sudah sampai sini, seharusnya pemasangan lancar. Begitu menjalankan KMail2, Akonadi akan mengonfigurasi dirinya untuk menjalankan instan PostgreSQL khusus.

Terakhir

Saya sering memakai laptop sampai baterai kosong. Komputer saya kadang kena mati lampu. Sampai detik ini, keduanya masih stabil dan saya sampai detik ini belum pernah menghapus ulang KMail2.

Semoga beruntung, silakan bertanya.

Memasang Steam pada Ubuntu Xenial 16.04 dan Turunannya
Steam

Memasang Steam pada Ubuntu Xenial 16.04 dan Turunannya

Ubuntu akhirnya memasukkan Steam ke repositori Multiverse-nya. Hal ini yang menyebabkan paket Debian Steam dari situs Steam Valve tidak lagi kompatibel dengan Ubuntu teranyar ini. Paket Steam pada repositori Ubuntu disebut steam. Sedangkan versi Valve nama yang dipakai adalah steam-launcher.

Kalau Anda menggunakan turunan Ubuntu, bukan Ubuntu asli — saya sendiri KDE Neon 5.6 — Anda mungkin harus memasang software-properties-common agar ada perintah add-apt-repository yang akan dipakai untuk memasang repositori. Supaya kita ada di satu halaman yang sama, maka mari pasang perkakas itu.

sudo apt-get install software-properties-common ppa-purge

Sekarang kita bisa lanjut.

Pemasangan Mula-mula

Seperti biasa, aktifkan arsitektur 32-bita.

sudo dpkg --add-architecture i386
sudo apt-get update

Buang pustaka S3 Texture Compression baku. INGAT! Ini mungkin ilegal di negara lain, terutama negara dengan paten perangkat lunak, uhuk AS uhuk.

sudo apt-get remove --purge libtxc-dxtn-s2tc0

Unduh libtxc-dxtn0 dari repositori xorg-edger. INGAT! Bukan dari Debian Multimedia seperti pada Tambora.

wget https://launchpad.net/~xorg-edgers/+archive/ubuntu/ppa/+files/libtxc-dxtn0_1.0.1-0.3ubuntu0sarvatt+raring_amd64.deb
wget https://launchpad.net/~xorg-edgers/+archive/ubuntu/ppa/+files/libtxc-dxtn0_1.0.1-0.3ubuntu0sarvatt+raring_i386.deb
sudo gdebi libtxc-dxtn0_1.0.1-0.3ubuntu0sarvatt+raring_amd64.deb 
sudo gdebi libtxc-dxtn0_1.0.1-0.3ubuntu0sarvatt+raring_i386.deb

Anehnya, Steam akan menjadi cerewet kalau versi 64-bita tidak dipasang. Makanya, kedua paket dipasang bersamaan.

Selanjutnya, aktifkan repositori Multiverse.

sudo add-apt-repository multiverse
sudo apt-get update

Pasang Steam!

sudo apt-get install steam
steam # RUNNING THIS SHOULD BE ERROR!

Kalau Anda jalankan perintah steam, kemungkinan Steam akan gagal dijalankan. Hal ini karena Steam memaketkan pustaka C++ dan versi GCC-nya sendiri!

Matikan Steam yang gagal berjalan sempurna itu. Lalu, hapus semua pustaka C++ dan GCC bawaan Steam.

find .steam/ -name *stdc++* -exec rm -rf {} \;
find .steam/ -name *gcc* -exec rm -rf {} \;

Beberapa orang, termasuk tadinya saya, menyarankan untuk menghapus pustaka dinamis saja. Namun, setelah berjibaku, saya menemukan bahwa Steam menggunakan pustaka statik juga untuk pustaka C++ dan GCC.

Selesai.

Akhir Kata

Mengapa saya menyarankan untuk menggunakan Steam versi Ubuntu, bukan yang dari Valve? Sebenarnya, sih, bisa saja. Asalkan Anda mau menerima pesan kesalahan bahwa paket Steam usang. Saya, sih, tidak mau.

false alarm about outdated version

Steam warns us that our version is outdated

Bacaan Lebih Lanjut

Cara Membuat Proyek Gradle secara Manual yang Sebenarnya Bisa Dengan Mudah Dilakukan dengan “New Project” pada IntelliJ atau Eclipse

Cara Membuat Proyek Gradle secara Manual yang Sebenarnya Bisa Dengan Mudah Dilakukan dengan “New Project” pada IntelliJ atau Eclipse

Seperti judul blog ini, yang saya tuliskan ini adalah sesuatu yang sia-sia. Anda bisa langsung menggunakan aplikasi seperti IntelliJ atau Eclipse. Dengan penyunting itu, Anda tinggal membuat “New Project” dan semuanya sudah terkonfigurasi.

Tapi, mungkin Anda salah satu elitis yang lebih suka menggunakan terminal. Atau, Anda ingin tahu cara kerja Gradle sehingga Anda dapat setidaknya sedikit paham kalau ada masalah. Kalau saya, saya hanya sedang iseng sebelum menunggu waktunya tiba untuk menonton Warcraft di bioskop.

Proyek hanya Sejauh Direktori Kosong

Mari buat proyek baru. Caranya, buat direktori kosong dan dua buah berkas Gradle: build.gradle dan settings.gradle.

mkdir percuma && cd percuma
touch build.gradle settings.gradle

Mari namakan proyek kita ini “proyekPercuma”.

echo "rootProject.name = 'percuma'" >> settings.gradle

Secara umum, ini sudah siap. Tapi tunggu dulu, Kisanak! Kisanak tidak akan pernah lengkap ilmu bila tanpa jurus Monyet Membungkus Pisang!

Proyek hanya Sejauh Pembungkus

Java adalah sebuah pustaka yang sering kali berdiri sendiri. Hal ini karena sering kali distribusi menggunakan versi yang lawas. Bayangkan, Kisanak! Ini sudah 2016, namun Kubuntu Xenial (16.04) yang saya pakai masih menggunakan Gradle versi 2.10.

sudo apt-get install -y gradle && gradle -v

Hasilnya:

------------------------------------------------------------
Gradle 2.10
------------------------------------------------------------

Build time:   2016-01-26 15:17:49 UTC
Build number: none
Revision:     UNKNOWN

Groovy:       2.4.5
Ant:          Apache Ant(TM) version 1.9.6 compiled on July 8 2015
JVM:          1.8.0_91 (Oracle Corporation 25.91-b14)
OS:           Linux 4.4.0-22-generic amd64

Astaga! Padahal, versi terbaru sudah ada lama sebelum Xenial. Belum lagi, beberapa pustaka terbaru memanfaatkan Gradle versi terbaru.

Supaya kita menggunakan Gradle terbaru, mari buat skrip pembungkus Gradle. Saat penulisan Gradle terbaru versi 2.13.

gradle wrapper --gradle-version 2.13

Anda bisa lakukan ini untuk memperbaharui Gradle pada proyek yang lama ke versi yang terbaru. Sekarang lihat versinya:

$ ./gradlew -v

------------------------------------------------------------
Gradle 2.13
------------------------------------------------------------

Build time:   2016-04-25 04:10:10 UTC
Build number: none
Revision:     3b427b1481e46232107303c90be7b05079b05b1c

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_91 (Oracle Corporation 25.91-b14)
OS:           Linux 4.4.0-22-generic amd64

Selesai, deh.

Tunggu Dulu, Kisanak!

Mari buat sebuah proyek Java sederhana.

cat >> build.gradle << EOF
buildscript {
  repositories {
    jcenter()
  }
}

apply plugin: 'java'
apply plugin: 'application'
EOF

Lalu buat struktur direktori Java (kode sumber dan sumber daya):

mkdir -p src/main/java/ && mkdir -p src/main/resources

Sebagai pemrogram Java yang baik, seharusnya kita menaruh berkas Java pada paket-paket. Mari buat direktori paket Java.

mkdir -p src/main/java/aja/jp/percuma

Buat sebuah kelas sederhana.

cat > src/main/java/aja/jp/percuma/TestMain.java << EOF
package aja.jp.percuma;

class TestMain {
  public static void main (String ... args) {
    java.util.logging.Logger.getLogger(TestMain.class.getName()).info("Hello, world!");
  }
}
EOF

Tambahkan berkas Java ini sebagai kelas utama dalam proyek percuma.

echo "mainClassName = 'aja.jp.percuma.TestMain'" >> build.gradle

Sekarang tinggal dicoba jalankan:

./gradlew -q run

Saya sengaja tambahkan “-q” agar keluaran dari Gradle tidak keluar. Sehingga, hasilnya langsung keluaran dari aplikasi, yakni:

Jun 08, 2016 5:20:53 PM aja.jp.percuma.TestMain main
INFO: Hello, world!

Kalau tanpa “-q” dia akan berisik seperti ini:

:compileJava
:processResources UP-TO-DATE
:classes
:run
Jun 08, 2016 5:23:40 PM aja.jp.percuma.TestMain main
INFO: Hello, world!

BUILD SUCCESSFUL

Total time: 8.079 secs

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.13/userguide/gradle_daemon.html

Bersih-bersih

Kadang kalau proyek sudah besar dan kompleks, kita perlu membersihkan hasil kompilasi secara manual:

./gradlew clean

Mau buat distribusi supaya keren?

./gradlew installDist

Sehingga, kita jalankan dengan:

./build/install/percuma/bin/percuma

Ada .bat juga di situ untuk menjalankan di sistem terlarang.

Mau publikasikan hasil pekerjaan?

./gradlew distZip

Berkasnya ada di ./build/distributions/percuma.zip

Mau tahu perintah Gradle yang lain?

./gradlew tasks

Selebihnya terserah Anda. Gampang, ‘kan?

Bacaan Lebih Lanjut

Memasang Kubuntu 16.04 UEFI dengan Debootstrap
Wily Broke The Window

Memasang Kubuntu 16.04 UEFI dengan Debootstrap

Mengenai skema partisi yang Anda pilih, semuanya bebas. Yang penting, sisakan 100 s.d. 200MB diska untuk partisi UEFI dengan format FAT32 atau FAT16.

UEFI mandates on GPT partition.

UEFI mandates on GPT partition.

Karena Windoze dan beberapa vendor lama, UEFI masih memungkinkan untuk membuat format partisi BIOS (4 partisi utama maksimal). Namun, karena saya memasang ini di laptop saya sendiri, saya membeli kosong sehingga memformat seluruh diska dengan format partisi GPT. Saya membuat satu partisi di awal dengan besar 200MB dan format FAT16 untuk partisi UEFI.

My laptop partition as an example

My laptop partition as an example

Saya tidak menyatakan proses pemformatan karena sudah pernah dibahas di blog ini berulang kali. Lagi pula, saya memformat menggunakan Manajer Partisi KDE yang ada di CD Pemasang Kubuntu. Tak perlu menyusahkan diri dengan terminal.

Oh, iya, supaya tidak bingung, saya mengasumsikan ini semua dilakukan dari CD/USB Live Pemasang Kubuntu 16.04 Xenial.

Persiapan

Sebelum mulai, saya mengubah /etc/apt/sources.list CD/USB sehingga berisi:

deb http://kambing.ui.ac.id/ubuntu/ xenial main restricted universe multiverse
deb http://kambing.ui.ac.id/ubuntu/ xenial-security main restricted universe multiverse
deb http://kambing.ui.ac.id/ubuntu/ xenial-updates main restricted universe multiverse

Ini biar proses pemasangan menggunakan repo terdekat.

Lalu, seperti biasa saya pasang debootstrap:

sudo apt-get update 
sudo apt-get install debootstrap

Sampai sini saya mengasumsikan bahwa Anda telah memformat diska Anda dengan benar sebelum lanjut dengan Manajer Partisi KDE atau pun cara lainnya.

Pasang Sistem Dasar

Lakukan stanza yang biasa dilakukan:

mount /dev/sda2 /mnt
mkdir -p /mnt/boot/efi

debootstrap xenial /mnt http://kambing.ui.ac.id/ubuntu

# hostname
echo gantenghost > /mnt/etc/hostname
sed -i -Ee "s#(127.+)#\1 gantenghost#" /mnt/etc/hosts

# mounts
for f in dev dev/pts proc sys; do mount -v --bind {,/mnt}/$f; done

cp /etc/apt/sources.list /mnt/apt/sources.list

chroot /mnt /bin/bash

apt-get update

Baru setelah itu, pasang KDE:

apt-get install kubuntu-desktop yakuake vim ssh

Konfigurasi zona waktu dan lokalisasi:

dpkg-reconfigure tzdata
dpkg-reconfigure locales

Tambahkan pengguna:

adduser pengguna
usermod -aG adm,cdrom,sudo,audio,video,systemd-journal pengguna

Pasang kernel dan GRUB EFI:

apt-get install linux-image-generic linux-headers-generic grub-efi-amd64

Konfigurasikan dan pasang GRUB EFI. Ingat! Dua langkah ini perlu dilakukan agar sistem dapat dinyalakan ulang.

grub-install /dev/sda
update-grub

Sisanya terserah Anda karena langkah-langkah ini sudah membuat sistem Anda berjalan.

TAMAT.

WordPress JP: Installing LAMP Stack with ZFS

WordPress JP: Installing LAMP Stack with ZFS

A REVISION WAS LOST! PLEASE TAKE A LOOK AT THE BOTTOM PAGE FOR GRUB SETTING BEFORE REBOOT.

I’m in fast writing mode as this is probably won’t intended to be understood by most people. I’m writing in this blog as I moving forward installing. To keep writing  and translating from my tacit into Bahasa Indonesia is kind of laboring. Perhaps, if you want, I would reiterate what I do here with better Bahasa Indonesia. But, now, let’s live speed writing.

Preparations

I’ve got Ubuntu 14.04 Live USB on my arsenal. Boot it up and setup some trivial like IP, DNS and stuff. I modify APT sources.list to match my nearest server.

deb http://kambing.ui.ac.id/ubuntu/ trusty main restricted
deb http://kambing.ui.ac.id/ubuntu/ trusty-security main restricted
deb http://kambing.ui.ac.id/ubuntu/ trusty-updates main restricted

Do the update and install SSH and VIM.

sudo -i
apt-get update
apt-get install ssh vim
passwd ubuntu

I need SSH because I can’t stand on server room too long. I’m not going to go on religious war on ViM vs Emacs. Last, change ubuntu user password.

And now the show live from my comfy SSH terminal laptop.

Install Ubuntu ZFS for Ubuntu Live Session

Straight from the doc.

sudo -i
apt-add-repository --yes ppa:zfs-native/stable
apt-get update
apt-get install debootstrap spl-dkms zfs-dkms ubuntu-zfs
modprobe zfs

You may wondering why I’m not upgrading first. Upgrading a temporary system is wasting time, especially one with GUI installed. Okay, now we get to the formatting.

Create A ZFS Pool

I have 2 SATA and 1 SSD. The best for server should be two SSDs. But, hey, beggar can’t choose.

ZFS config: 2 Disks + 1 SSD.

ZFS config: 2 Disks + 1 SSD.

Using GParted, I turned SSD into GPT with 3 partitions:

  • The first 200MB for /boot partition. Some twisted soul refused to use separated partition for /boot, well, good for you! I go with the conservative.
  • 8GB used for ZIL (ZFS Intent Log) drive. ZFS usually use 8GB max for journaling.
  • The rest used for ZFS Cache (ZARC).

But, hey, where is the EFI partition?

I’ve just recently found out that when you give your whole disk to ZFS, it would format the disk into two partitions. One big partition (sX1) for the use of ZFS and one 8MB partition (sdX9) for EFI partition (FAT). Yeah, ZFS automatically turn the disk into GPT partitioning scheme. After adding the two disks into a ZFS pool, the partitions will be like this:

sda: sda1 sda9, sdb: sdb1 sdb9

I’m doing mirroring for sda and sdb. I wish I have one more SSD. I would mirror two partitions on separated SSDs for ZIL. If you are luckier than me, do it! It is for safety measure. But, don’t mirror the cache because it’s wasting space.

Here’s the reality:

zpool  create -f -o ashift=12 -o altroot=/mnt -m none rpool mirror sda sdb log sdc2 cache sdc3

If I may have a dream with two SSDs:

zpool create -f -o ashift=12 -o altroot=/mnt -m none rpool mirror sda sdb log mirror sdc2 sdd2 cache sdc3 sdd3

Disable access time, enable relative time and enable LZ4 compression on tanks.

zfs set atime=off rpool
zfs set relatime=on rpool
zfs set compression=lz4 rpool

If nothing is wrong, we would got:

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sda     ONLINE       0     0     0
        sdb     ONLINE       0     0     0
    logs
      sdc2      ONLINE       0     0     0
    cache
      sdc3      ONLINE       0     0     0

errors: No known data errors

Next, the partitioning. After this, I’m doing things from Crossroad’s tutorial with some tweaks.

Create Partition

As Debian configuration:

zfs create -o mountpoint=none rpool/ROOT
zfs create -o mountpoint=/ rpool/ROOT/debian-1
zpool set bootfs=rpool/ROOT/debian-1 rpool

What? Yes, I’m installing Debian not Ubuntu.

Last, export the pool we’ve created for later import. We do this so that the ZFS config would read from disk by ID instead of common UDEV naming. Believe me, you don’t want to use UDEV naming (sda, sdb, etc.) on ZFS.

zpool export rpool

Now, we can start installing Debian system.

Install Debian

Reimport ZFS pool and create a ZFS configuration cache file.

zpool import -d /dev/disk/by-id -R /mnt rpool
mkdir -p /mnt/etc/zfs
zpool set cachefile=/mnt/etc/zfs/zpool.cache rpool

REMEMBER: (Straight from the ZFS FAQ)

Run update-initramfs -c -k all after any /sbin/zpool command changes the /etc/zfs/zpool.cache file.

This is the reason of random failures from mounting ZFS root partition.

Install the system and mount all the basic system partitions.

debootstrap --arch=amd64 jessie /mnt http://kambing.ui.ac.id/debian/

And now, configure.

Configure Debian

Hostname.

echo gantenghost > /mnt/etc/hostname
sed -i -Ee "s#(127.+)#\1 gantenghost#" /mnt/etc/hosts

Create configuration for network interfaces. In the spirit of new configuration scheme, I put two files in /etc/network/interfaces.d/

# cat > /mnt/etc/network/interfaces.d/eth0 << .
auto eth0
iface eth0 inet dhcp
.

and

# cat > /mnt/etc/network/interfaces.d/lo << .
auto lo
iface lo inet loopback
.

Mount all the system filesystems.

for f in dev dev/pts proc sys; do mount -v --bind {,/mnt}/$f; done

Chroot there

chroot /mnt /bin/bash

In Debian Configuration

Locales.

apt-get install locales
sed -i -Ee 's/# (en_US.UTF+)/\1/' /etc/locale.gen
locale-gen

Timezone.

dpkg-reconfigure tzdata
apt-get install ntp
/etc/init.d/ntp stop

Remember when I said I’m going to put /boot on different partition? Now is the time.

echo "/dev/sdc1 /boot ext4 rw,relatime,stripe=4,data=ordered 0 0" >> /etc/fstab
mount /boot

Remember also what I said about using the ninth partition of the first disk? Now is the time.

apt-get install dosfstools
mkdir /boot/efi
mkfs.vfat /dev/sda9
echo "/dev/sda9 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0" >> /etc/fstab
ap

Install ZFS packages with Debian style. ZFS needs lsb-release package.

cd /tmp
wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
apt-get install lsb-release
dpkg -i zfsonlinux_6_all.deb
apt-get update && apt-get install linux-image-amd64 debian-zfs
apt-get install grub2-common grub-efi zfs-initramfs

Last, add a login.

apt-get install sudo vim ssh
adduser user
adduser user sudo

Setup GRUB For ZFS Boot

There is a bug in Debian’s GRUB that makes the system unbootable. First, let’s reconfigure GRUB Default command line:

sudo dpkg-reconfigure grub-efi-amd64

Change Linux default command line (second screen after Linux command line) from

quiet

to

root=ZFS=rpool/ROOT/debian-1 rpool=rpool bootfs=rpool/ROOT/debian-1 quiet

After this, update grub and we are done.

sudo update-grub

Booting to New System

After all preparations, unmount all the filesystems

umount /boot/efi/ /boot
exit
for f in dev/pts dev proc sys; do umount /mnt/$f; done
zfs umount -a
zfs export rpool

Reboot.

Final Thought

Well, you might find some faults here and there. If not, everything after this is straightforward.

Bacaan Lebih Lanjut

Memasang PostgreSQL Versi Terbaru

Masukkan repo PostgreSQL:

echo "deb http://kambing.ui.ac.id/postgresql/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list

Kalau Anda tidak memasang LSB, ganti lsb_release dengan wily, jessie, wheezy, dan sebagainya silakan lihat di sini.

Setelah selesai, impor kunci:

wget --quiet -O - http://kambing.ui.ac.id/postgresql/repos/apt/ACCC4CF8.asc | sudo apt-key add -

Setelah itu, lakukan hal yang biasa dilakukan:

sudo apt-get update
sudo apt-get install postgresql pgadmin3

Selesai.

Memasang Ubuntu Wily (15.04) Pada HP Probook 440 G2 (HP EFI)
Wily Broke The Window

Memasang Ubuntu Wily (15.04) Pada HP Probook 440 G2 (HP EFI)

Ini adalah perjalanan JP memasang Kubuntu Wily dasar pada sistem HP Probook 440 G2. Mesin ini memiliki implementasi UEFI yang salah sehingga memerlukan ketekunan dalam membuat pemasangan berjalan baik.

Informasi Sistem

Informasi sistem yang didapatkan dari dmidecode.

Manufacturer: Hewlett-Packard
Product Name: HP ProBook 440 G2
Version: A3009DD10303
Serial Number: CND5325G0B
UUID: 9A822FFF-61BB-11E5-A123-9023330000FF
Wake-up Type: Power Switch
SKU Number: L7Z17PT#AR6
Family: 103C_5336AN G=N L=BUS B=HP S=PRO

Saya menjalankan LiveCD Kubuntu Wily. Jangan lupa pasang dulu debootstrap sebelum lanjut. Lalu, supaya tidak pusing, langsung jalan sebagai root saja.

sudo apt-get update && sudo apt-get install debootstrap
sudo su -

Saya agak curang sedikit. Sebelum kedua langkah tersebut, saya mengubah /etc/apt/sources.list mengarahkan ke KAMBING.ui.ac.id. Hal ini mengingat peladen fisiknya ada di ruang sebelah.

Pembersihan

Sistem ini dijangkiti oleh WIndows 7 sebesar satu tera. Dengan konfigurasi sebagai berikut:

Original HP Partition

Original HP Partition

Jadi kira-kira seperti ini:

/dev/sda1 ntfs primary “SYSTEM”
/dev/sda2 ntfs primary “WINDOWS XXX”
/dev/sda3 ntfs primary “HP_RECOVERY”
/dev/sda4 fat32 primary “HP_TOOLS”

Berhubung laptop ini sudah dibeli dengan perangkat lunaknya, saya memutuskan untuk tidak menghapus Recovery. Saya hanya perlu menghapus Windows.

Saya bingung dan memutuskan untuk menggunakan LVM. Satu tera untuk sistem agak berlebihan menurut saya. Cara berikut bisa dilakukan dengan GParted atau KDE Partition Manager. Akan tetapi, saya mau terlihat seperti heker:

parted -s /dev/sda set 2 lvm on
pvcreate /dev/sda2
vgcreate HP /dev/sda2

Saya kasih label “HP”, tapi Anda boleh beda. Kemudian, saya putuskan untuk buat partisi dasar 20G dan partisi rumah 20G.

lvcreate -L 20G -n root HP
lvcreate -L 20G -n rumah HP

mkfs.ext4 -L "Pusat Kehidupan" /dev/HP/root
mkfs.ext4 -L "Rumah Kita" /dev/HP/rumah

Selanjutnya proses pemasangan.

Debootstrap

Pasang debootstrap seperti biasa:

mount /dev/HP/root /mnt
debootstrap wily /mnt http://kambing.ui.ac.id/ubuntu/
mount /dev/HP/rumah /mnt/home

Saya sengaja memisahkan direktori rumah ke partisi berbeda. Mungkin butuh di kemudian hari.

Pasang Sebelum CHROOT

Karena sistem yang hendak dipasang menggunakan UEFI, mari kita lihat apakah ada UEFI.

ls -al /sys/firmware/efi/efivars/

Seharusnya ada isinya. Kalau tidak, berarti belum menggunakan UEFI. Silakan gunakan prosedur pemasangan yang biasa saja.

Selanjutnya, mari pasang beberapa sistem berkas:

mount none /mnt/proc -t proc
mount none /mnt/sys -t sysfs
mount /dev /mnt/dev -o bind
mount none /mnt/dev/pts -t devpts
mount none /mnt/sys/firmware/efi/efivars/ -t efivarfs

Baris terakhir diperlukan agar dapat mendaftarkan GRUB ke sistem UEFI.

Si HP ini menggunakan partisi EFI dengan NTFS. Padahal, UEFI bersabda harus menggunakan partisi FAT16/FAT32. Untungnya, ada 4 partisi dan salah satunya memakai FAT32. Jadi, saya buat saja satu direktori efi ke partisi ke-4 itu.

mkdir -p /mnt/boot/efi
mount /dev/sda4 /mnt/boot/efi/
mkdir -p /mnt/boot/efi/efi

Sekarang kita masuk ke sistem.

chroot /mnt /bin/bash

Selanjutnya, mari memasang sistem.

Memasang Bootloader dan Kernel

Yang lain mudah, tetapi yang ini agak sulit. Berikut hasil kalau proses sebelumnya berhasil:

# mount
/dev/mapper/HP-root on / type ext4 (rw,relatime,data=ordered)
none on /proc type proc (rw,relatime)
none on /sys type sysfs (rw,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=4018096k,nr_inodes=1004524,mode=755)
none on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
none on /sys/firmware/efi/efivars type efivarfs (rw,relatime)
/dev/sda4 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Mari pasang LVM2

apt-get install lvm2

Lalu pasang GRUB dan kernel.

apt-get install linux-generic grub-efi-amd64

Sayangnya, karena implementasi HP yang unik dan menyalahi aturan UEFI, Kubuntu akan gagal mendaftarkan sistemnya dengan benar. Apalagi, secara sotoy [slang: sok tahu] skrip grub-install mengira bahwa UEFI ada di direktori pertama. Tetapi, Anda bisa juga beruntung mendapatkan skrip membaca dengan benar.

Saya tidak suka digantung. Mari lihat entri ubuntu dipasang pada UEFI:

# efibootmgr
BootCurrent: 
Timeout: 0 seconds
BootOrder: 0000
Boot0000* ubuntu

Selain saya tidak tahu entri “ubuntu” mengarah ke mana, saya juga tidak suka dengan label yang hanya “ubuntu”. Mari pasang secara benar.

Pertama-tama, hapus “ubuntu”. Perhatikan bahwa entri Ubuntu ada pada indeks 0000.

efibootmgr -b 0000 -B

Selanjutnya, mari pasang label yang baik dan benar.

efibootmgr  -c -d /dev/sda -p 4 -l "\efi\ubuntu\grubx64.efi" -L "OS Sesungguhnya"

Berikut penjelasan parameter:

  • -c, buat entri baru.
  • -d /dev/sda, EFI yang ada di perangkat /dev/sda (harddisk utama).
  • -p 4, aplikasi EFI ada di partisi keempat.
  • -L “OS Sesungguhnya”, label entri. Anda bisa mengubah yang lainnya.

Selanjutnya saat menyalakan laptop, entri “OS Sesungguhnya” sudah ada di dalam OS.

Dan Pemasangan pun Berlanjut Normal

Selanjutnya membosankan seperti bootstrap yang lainnya.

sudo apt-get install ssh vim sudo
sudo adduser pengguna
sudo adduser pengguna sudo
sudo apt-get install kubuntu-desktop yakuake

Terakhir, muat ulang dan masuk ke sistem.

Catatan

Saya tidak tahu kelakuan HP ini. Pertama-tama saya harus boot dengan USB Kubuntu Live terpasang. Kemudian, ketika sudah masuk ke sistem terpasang, USB dilepas. Saya lalu kembali menjalankan efibootmgr untuk menghapus entri yang sudah ada dan memasang kembali entri “OS Sesungguhnya”.

Do I have to write this on English?

Mengubah Format PEM (Apache/NGINX) ke Keystore JAVA

Mengubah Format PEM (Apache/NGINX) ke Keystore JAVA

Untuk organisasi/individu yang memegang domain dengan banyak sub-domain, biasanya dibeli sertifikat wildcard. Dengan sertifikat wilcard, tak perlu membeli sertifikat per sub-domain. Hanya saja, biasanya format yang diberikan adalah PEM untuk peladen HTTP semacam Apache2 atau NGINX.

Bagaimana dengan peladen berbasis Web macam Tomcat?

Saya asumsikan sudah ada tiga berkas ini:

server.key
Kunci privat peladen.
server.crt
Sertifikat peladen yang sudah ditandatangani oleh CA.
ca.cert
Sertifikat CA yang menandatangani sertifikat peladen.

Selanjutnya, ubah bentuk X.509 ke format PKCS12 dengan OpenSSL:

openssl pkcs12 -export -in server.crt -inkey server.key -out keystore.p12 -name red5 -certfile ca.cert

Anda akan ditanyakan sandi baru. Jangan lewati karena proses berikutnya butuh sandi tersebut! Isi sandi dengan sandi yang aman.

Selanjutnya, impor kunci PKCS12 tersebut ke sebuah keystore Java:

keytool -importkeystore -deststorepass ahs8kahLuvu3nahb -destkeypass ahs8kahLuvu3nahb -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass ahs8kahLuvu3nahb -alias red5

Saya menggunakan PWGen untuk membuat sandi acak. Mohon ganti ahs8kahLuvu3nahb dengan sandi yang Anda telah masukkan sebelumnya pada proses openssl.

Selesai. Anda kini sudah memiliki keystore.jks yang siap dipakai oleh aplikasi Java untuk membuat koneksi SSL/TLS.

Selamat mencoba.

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

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:

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.

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