Tag Archives

23 Articles
Memasang Enterprise Single Sign-On – CAS  (Sebelumnya Jasig CAS)

Memasang Enterprise Single Sign-On – CAS (Sebelumnya Jasig CAS)

SSO merupakan sebuah konsep yang sebenarnya digunakan di portal korporasi. Namun, pada perkembangannya, justru organisasi pendidikan tinggi mengadopsinya juga untuk login yang terfederasi. Contoh pengguna SSO yang terfederasi untuk perguruan tinggi adalah eduroam.

Saya mau membuat sebuah solusi SSO menggunakan Jasig CAS. Ada, sih, versi lain seperti SUN CAS, Google Accounts, atau WSO2 Identity Provider. Tapi, saya memilih CAS karena sudah lama digunakan di UI dan saya malas mencari yang lain.

Berhubung tulisan ini panjang, langsung saja saya berikan asumsi berikut:

  • Debian Strecth masih kosong.
  • CAS berdiri sendiri (standalone) dengan Jetty.
  • Sertifikat SSL sudah ditandatangani oleh pihak ketiga.
  • Iman yang teguh.

Langsung saja persiapan sistem.

Persiapan Sistem

Sebelum memasang CAS, persiapkan sistem terlebih dahulu.

Memasang JDK 8

Saya percaya isi lisensi, lebih baik dilewati saja:

echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

Agar dapat memasang sertifikat dari Webupd8, pastikan untuk memasang dirmgr (khusus Stretch):

sudo apt install dirmngr

Tambahkan repo Pemasang Oracle Java.

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
sudo apt update

Pasang Oracle JDK8 dan paket unlimited JCE. Paket JCE berfungsi untuk mengaktifkan fungsi enkripsi yang lebih tinggi dari standar enkripsi yang disediakan oleh Oracle Java.

sudo apt install oracle-java8-installer oracle-java8-unlimited-jce-policy -y

Selesai untuk Java.

Menyiapkan Direktori yang Perlu

Sayangnya, sebelum CAS terpasang, ada yang harus dipersiapkan. Hal ini karena konfigurasi CAS masih terkode langsung dan tersebar di konfigurasi sehingga lebih baik untuk pemula mengikuti direktori konfigurasi standar.

Yang saya maksud adalah membuat direktori /etc/cas yang dimiliki oleh pengguna. Bisa saja dijalankan sebagai root langsung. Namun, lebih baik Anda berhenti membaca tulisan ini dan cari pekerjaan yang lebih cocok daripada sysadmin.

sudo mkdir /etc/cas /var/log/cas
sudo chown user:user /etc/cas /var/log/cas
sudo chmod 700 /etc/cas

Penambahan ekstra keamanan sehingga hanya bisa diakses oleh pengguna yang menjalankan CAS.

Memasang Sertifikat SSL

Untuk sertifikat yang ditandatangani sendiri, silakan baca panduan yang sudah disediakan pada Daftar Bacaan. Serius, deh. Pelit sekali Anda untuk bahkan  tidak mau menyediakan waktu untuk membuat sertifikat SSL Let’s Encrypt dengan certbot.

Hal yang perlu dilakukan adalah mengonversi PEM menjadi PKCS12 yang siap untuk diimpor ke dalam format keystore Java.

Ubah format PEM ke format PKCS12. Buat sembarang sandi karena keytool Java (JKS) tidak bisa mengimpor kunci tanpa sandi.

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name sesukaakulah -CAfile server.crt -caname geotrust

Terakhir, ubah dari PKCS12 ke JKS. Lihat, berkas dan kunci masing-masing saya buat dengan sandi yang berbeda. Jangan lupa disesuaikan pada berkas konfigurasi.

keytool -importkeystore  -deststorepass 2tZ065jsXz866Jxm -destkeypass wQShfDLHWmK4Zt6E -destkeystore thekeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias

Ubah perizinan berkas thekeystore dan pindahkan ke direktori /etc/cas.

chmod 0400 thekeystore
mv thekeystore /etc/cas

Selanjutnya memasang CAS.

Memasang Overlay CAS

CAS versi terbaru (5.1.x) memecah paket-paket modulnya dalam banyak modul. CAS menggunakan perkakas pembangun Java untuk membungkus dan memaket modul sesuai dengan kebutuh pengguna. Jenis pemaketan tersebut dinamakan overlays. Ada dua jenis yang didukung yakni Maven dan Gradle. Saya memilih Gradle karena Maven lebih gampang dipasang.

Mengunduh Overlay CAS

Unduh dan ekstraksi overlay untuk Gradle:

wget https://github.com/apereo/cas-gradle-overlay-template/archive/master.tar.gz
tar xvfz master.tar.gz && cd cas-gradle-overlay-template-master/

Mengonfigurasi Overlay CAS

Pada gradle.properties saya mengubah versi Spring Boot ke yang terbaru:

springboot.version=1.5.7.RELEASE

Pada etc/cas/config/application.yml tambahkan:

server:
  ssl:
    enabled: true
    keyStore: /etc/cas/thekeystore
    keyStorePassword: quoofah2AeL1Quu0
    keyPassword: Lah3ohmooreeng9e

Pada baris ke-5 etc/cas/config/log4j2.xml ubah direktori log ke standar FHS (/var/log):

            <Property name="baseDir">/var/log/cas</Property>

Pada cas/build.gradle ubah tomcat menjadi jetty:

    compile "org.apereo.cas:cas-server-webapp-jetty:${project.'cas.version'}@war"

Selanjutnya, jalankan perintah berikut untuk membangun paket yang dibutuhkan.

./gradlew build --parallel

Menjalankan CAS

Berkas yang dihasilkan dari hasil konfigurasi ada di cas/build/libs/cas.war. Berkas ini merupakan sebuah paket aplikasi Web Java yang bisa dijalankan oleh kontainer Servlet apa pun. Namun, untuk keperluan kali ini, jalankan perintah:

./gradlew bootRun

Kalau sukses akan muncul di port 8443. Gunakan login casuser dan sandi Mellon untuk masuk.

Berhubung hari sudah subuh, saya berhenti di sini. Nanti selanjutnya tutorial akan lanjut kepada konfigurasi CAS.

Bacaan Lebih Lanjut

Repositori Suri untuk PHP 7.1+

Repositori Suri untuk PHP 7.1+

Plessis mengumumkan bahwa dia sudah tidak mau lagi mengelola pemaketan PHP terbaru di Dotdeb. Dia kemudian menyarankan untuk menggunakan repositori dari Sury, seorang pengelola resmi pemaketan PHP dari Debian.

Karena Sury menggunakan HTTPS, jangan lupa pasang dulu transportasi HTTPS untuk APT:

sudo apt install apt-transport-https

Cara menambahkan:

wget -O- https://packages.sury.org/php/apt.gpg | sudo apt-key add -
echo "deb https://packages.sury.org/php/ jessie main" | sudo tee -a /etc/apt/sources.list.d/php-sury.list
sudo apt update

Selesai. Secara baku, paket PHP yang dipilih adalah 7.1. Namun, Sury menyediakan juga untuk paket PHP 7.0.

Create A Database and Its Owner on PostgreSQL
PostgreSQL database

Create A Database and Its Owner on PostgreSQL

In MySQL, these are the chants:

sudo mysql --defaults-file=/etc/mysql/debian.cnf
create database mydb;
grant all privileges on mydb.* to myuser identified by 'p@s$W0rd';

On PostgreSQL, the chants are:

sudo -u postgres createuser -DAP myuser
sudo -u postgres createdb -O myuser mydb

Very simple actually and Debian by default listen at localhost. Users can connect to its database via port 5432.

Of course, these chants are useful for developing apps. In Production, you should supply a user that can only Read/Write/Update a database. In fact, several frameworks like Laravel could setup another user just to Read the database.

Membuat Sertifikat Let’s Encrypt Menggunakan certbot Di Debian Wheezy
By The people from the Tango! project, derived RRZEicons (The Tango! Desktop Project) [Public domain], via Wikimedia Commons, color modified by JP

Membuat Sertifikat Let’s Encrypt Menggunakan certbot Di Debian Wheezy

Maaf, ya, saya suka khilaf lupa menulis tulisan lanjutan. Ha… ha… ha….

Berikut ini adalah cara memasang sertifikat SSL yang ditandatangani oleh Let’s Encrypt dengan menggunakan certbot pada Debian Wheezy. Silakan lihat cara pasang di Wheezy untuk keterangan lebih lanjut.

Aktifkan Repo Debian Wheezy Backports

Anda bisa langsung mengaktifkan repo Debian Wheezy Backports:

echo "deb http://kambing.ui.ac.id/debian-backports/ jessie-backports main" | sudo tee /etc/apt/sources.list.d/debian-backports.list
sudo apt update

Atau nanti tunggu ditanyakan pada saat menjalankan certbot.

Pasang certbot

Unduh dengan pengunduh favorit Anda.

sudo wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
sudo chmod +x /usr/local/bin/certbot-auto

Sebelum Memasang Let’s Encrypt

Siapa tahu Anda malas tidak punya waktu untuk membaca artikel sebelumnya, perhatikanlah:

  1. Pastikan semua domain yang didaftarkan sudah terdaftar di DNS publik.
  2. Pastikan bahwa direktori yang memuat URL untuk sertifikasi dapat diakses.

Penulisan DNS di luar cakupan tulisan ini. Berikut contoh direktori .well-known

server {
        listen   80;
        listen  [::]:80 ipv6only=on;
        server_name  example.com www.example.com;
        server_name_in_redirect on;
        port_in_redirect on;
 
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
 
        # For ACME Let's Encrypt challenge
        location /.well-known {
                alias /var/www/html/.well-known; # have this as the webroot
        }
 
        location / {
                return 301 https://$server_name$request_uri;
        }
 
}

Mari memasang certbot.

Sertifikasi

Seperti biasa:

sudo certbot-auto certonly --webroot -w /var/www/html -d example.com -d www.example.com

Seandainya tadi Anda melewati bagian pemasangan repositori Debian Backports, maka Anda akan ditanyakan:

To use the Apache Certbot plugin, augeas needs to be installed from wheezy-backports.
Would you like to enable the wheezy-backports repository [Y/n]? y

Lalu beberapa pesan pemasangan paket Python virtualenv. Kemudian, ditanyakan alamat info:

Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):admin@example.com

Lalu, ditanyakan apakah menyetujui syarat dan ketentuan yang diberikan, jawab A untuk setuju.

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at

No Title

No Description

------------------------------------------------------------------------------- (A)gree/(C)ancel: A

Setelah itu, tunggu beberapa saat.

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your
   cert will expire on 2017-04-19. To obtain a new or tweaked version
   of this certificate in the future, simply run certbot-auto again.
   To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you lose your account credentials, you can recover through
   e-mails sent to admin@example.com.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Kalau sudah sampai sini, Anda sudah selesai mendapatkan sertifikasi dari Let’s Encrypt.

Konfigurasi NGINX

Kalau mau penjelasan, lihat artikel terdahulu.

Berikut blok SSL:

ssl  on;
 
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_prefer_server_ciphers on;
ssl_session_cache   shared:SSL:20m;
ssl_session_timeout 60m;
 
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
 
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8;
 
add_header Strict-Transport-Security "max-age=31536000" always;

Nah, untuk Debian Wheezy, ada tambahan yang harus dilakukan.

Penambahan Penjadwalan CRON

Pada paket Debian Jessie, jadwal CRON untuk certbot sudah dipasang pada /etc/cron.d/certbot. Mari tambahkan secara manual untuk Debian Wheezy.

Pertama-tama, coba jalankan apakah sukses.

sudo certbot-auto renew --dry-run

Kalau sudah berhasil, maka pasang pada CRON.

sudo crontab -e

Masukkan entri:

0 */12 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

Let’s Encrypt memandatkan untuk pengecekan sehari dua kali.

Terakhir

Selesai.

 

Bacaan Lebih Lanjut

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

Bagaimana Debian Membentuk Model FOSS

Bagaimana Debian Membentuk Model FOSS

FOSS bukanlah tentang perangkat lunak gratis saja. FOSS merupakan sebuah kultur untuk berbagi dan melakukan segala sesuatu secara gotong royong.

Bermula dari kekurangan distro SLS yang hanya dikerjakan satu orang, Ian Murdock (RIP) mengundang orang-orang untuk membuat sebuah sistem GNU/Linux baru dalam bentuk paket-paket.

Ide dasarnya adalah sebuah paket perangkat lunak mengerti bagaimana caranya mengintegrasi dirinya sendiri pada sistem; mengerti bagaimana menghapus dirinya sendiri; dan mampu memperbaharui dengan aman ke versi terbaru.

 

Bacaan Lebih Lanjut

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

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.

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

Owncloud: Solusi Perangkat Lunak Bebas

Owncloud: Solusi Perangkat Lunak Bebas

Untuk memenuhi kuota menulis, saya akan menulis mengenai pemasangan Owncloud. Ini bukan karena Snowden yang memberitahukan untuk menghindari menggunakan Facebook, Google, dan Twitter. Tetapi, karena saya memang sedang iseng tentang perangkat lunak ini. Coba ada yang meminta untuk mencoba sesuatu yang lain, saya pasti menulis tentang itu.

Berbeda dengan konfigurasi biasa, saya menggunakan NGINX sebagai peladen HTTP dan PHP-FPM sebagai penyedia PHP. Hal ini karena ada WAF yang bisa dikonfigurasi nantinya apa bila Anda mau membuat ini serius. Ada banyak tambahan yang bisa dibuat dari Owncloud.

Yak, tanpa banyak basa-basi, mari kita memasang. Saya asumsikan Anda telah memasang NGINX dan MySQL pada peladen Anda. Saya juga mengasumsikan Anda menggunakan Debian atau turunannya (BlankOn atau Ubuntu).

Menyiapkan Basisdata

Pertama-tama, siapkan basisdata terlebih dahulu, masuk ke dalam terminal MySQL sebagai Administrator:

sudo mysql --defaults-file=/etc/mysql/debian.cnf

Buat basisdata dan berikan hak akses ke klien Owncloud:

CREATE DATABASE awansendiribd;
GRANT ALL PRIVILEGES ON awansendiribd.* TO 'megawan'@'localhost' IDENTIFIED BY 'week^u2heoQuuv]ah9sah]B~ahShie?t';
FLUSH PRIVILEGES;
QUIT;

Saya menggunakan pwgen untuk membuat sandi yang aman:

pwgen -y 32

Anda bisa buat sendiri sandi Anda, ganti nama basisdata, dan nama klien basisdata yang akan digunakan. Hal ini agar Owncloud Anda bisa aman. Belajarlah untuk aman.

Menyiapkan Rumah

Pada konfigurasi kali ini, saya menggunakan pengguna tersendiri untuk Owncloud. Bukan pengguna baku www-data, tetapi yang berbeda — Anda pun bisa berbeda dari tutorial ini. Caranya:

sudo adduser --home /srv/awani --disabled-password awani

Saya membedakan instalasi Owncloud dengan datanya. Mari buat kedua direktori tersebut.

sudo -u awani mkdir /srv/awani/{app,data}

Selanjutnya, unduh dan pasang Owncloud. Pada penulisan ini, yang terbaru adalah Owncloud 7.0.2. Silakan cek versi terbaru yang mungkin sudah ada saat Anda mencoba ini lagi di masa mendatang.

wget https://download.owncloud.org/community/owncloud-7.0.2.tar.bz2 -O- | \
sudo -u awani tar xvfj - -C /srv/awani/app --strip 1

Sesuaikan dengan direktori Anda sendiri.

Menyiapkan konfigurasi Peladen

Ada dua yang perlu disiapkan:

  1. Peladen PHP-FPM untuk konfigurasi PHP5.
  2. Peladen NGINX untuk HTTPS.

Sekarang konfigurasi PHP-FPM.

Konfigurasi PHP-FPM

Buat berkas konfigurasi /etc/php5/fpm/pool.d/owncloud yang berisi:

[owncloud]
;; I'm using Socket-based connection because it's safer.
;; Set only Owncloud user
user = awani
group = awani
listen = /tmp/php5-awan-awan.sock
listen.owner = awani
listen.group = awani
listen.mode = 0660

;; Set default server pools
pm = dynamic
pm.max_children = 20 
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5 

;; Set PHP5 logging
chdir = /
php_admin_value[error_log] = /var/log/fpm-php.awan-awan.log
php_admin_flag[log_errors] = on

;; Longer execution time and bigger upload size.
php_admin_value[max_execution_time] = 300 
php_admin_value[upload_tmp_dir] = /tmp
php_admin_value[upload_max_filesize] = 16G
php_admin_value[post_max_size] = 16G

Jumlah peladen itu tidak saya rubah. Silakan Anda sesuaikan dengan kebutuhan dan kemampuan mesin Anda. Berkas yang bisa diunggah pun sampai 16GB. Secara teori, sih, berkat Menkominfo yang mau turun, tidak mungkin ada berkas sebesar itu yang diunggah.

Setelah selesai, aktifkan Owncloud dan muat ulang PHP-FPM Anda.

sudo invoke-rc.d php5-fpm restart

Sekarang saatnya mengonfigurasi NGINX.

Konfigurasi NGINX

Asal Anda tahu, CA yang beredar di pasaran masih menggunakan enkripsi 1024-bit dan 2048-bit. Kalau pun ada yang 4096-bit, mereka menjual sertifikat dengan harga mahal. Itu sebabnya, saya menggunakan sertifikat yang ditandatangani sendiri.

Sedikit tambahan, Debian dan distro GNU/Linux terbaru lainnya menolak menyertakan CA yang masih 1024-bit. Makanya tempo hari kita gagal memasang Origin. Hal ini karena Origin masih menggunakan CA yang 1024-bit. Ya, itulah nasib keamanan sebatas ilusi.

Membuat Sertifikat Ditandatangani Sendiri (Self-signed Certificate)

Mari membuat sertifikat yang bisa ditandatangani sendiri:

sudo openssl req -newkey rsa:4096 -sha512 -x509 -days 3650 -nodes -out /etc/nginx/awan-awan.pem -keyout /etc/nginx/awan-awan.key

Selanjutnya membuat konfigurasi NGINX.

Membuat Konfigurasi NGINX

Buat berkas konfigurasi /etc/nginx/sites-available/owncloud dengan isi sebagai berikut:

## REDIRECT ALL HTTP TO HTTPS
server {
        listen 80;
        server_name awan.contoh.aja; # CHANGE THE HOSTNAME!
        return 301 https://$server_name$request_uri;  # enforce https
}

## HTTPS
server {
        listen 443 ssl;
        server_name awan.contoh.aja; # CHANGE THE HOSTNAME!

        keepalive_timeout   70;

        ## DISABLE SSLv3 only TLS!
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     awan-awan.pem;
        ssl_certificate_key awan-awan.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        # Path to the root of your installation
        root /srv/awani/app;

        client_max_body_size 16G; # set max upload size
        fastcgi_buffers 64 4K;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        ## REWRITE FOR BETTER CLEAN URL
        rewrite ^/f/(.*)$       /public.php?service=files&t=$1;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                deny all;
        }

        location / {
                # The following 2 rules are only needed with webfinger
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                try_files $uri $uri/ index.php;
        }

        #Path to default data directory
        location ~ ^/srv/awani/data/ {
            internal;
            root /;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                try_files $1 = 404;

                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_param HTTPS on;
                fastcgi_pass unix:/tmp/php5-awan-awan.sock;
        }

        # Optional: set long EXPIRES header on static assets
        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;
        }
}

Perhatikan kalau saya menghapus SSLv3 dari muka bumi. Setahu saya, hanya IE6 yang masih menggunakan SSLv3. Peramban modern sudah mendukung TLS. Bahkan, kalau mau lebih aman, silakan hapus selain TLSv1.2 agar aman dari gangguan SHARK.

Jalankan ulang NGINX.

 sudo ngxensite owncloud 
sudo invoke-rc.d nginx restart

Sekarang saatnya memulai pemasangan.

Menyiapkan Konfigurasi Owncloud

Setelah semua berjalan sebagai mana mestinya, saatnya membuka peramban dan mengarahkan ke alamat yang telah dibuat. Nanti ada wisaya yang berisi satu halaman konfigurasi pengguna awal (Administrator), letak data, dan konfigurasi basisdata. Saya malas membuat cuplikannya, lebih baik saya arahkan saja.

Bagian pertama adalah membuat Administrator Owncloud.

Create an admin account

  • superman
  • r4NdomP4$sW()Rd

Bagian berikutnya adalah direktori menaruh data.

Data folder

  • /srv/awani/data

Lalu konfigurasi MySQL.

Configure the database

  • megawan
  • week^u2heoQuuv]ah9sah]B~ahShie?t
  • awansendiribd
  • localhost

Setelah itu semua selesai, lalu tekan tombol Finish Setup.

Tunggu sebentar dan hasilnya Anda siap untuk masuk.

Owncloud Login page

Owncloud Login page

Selamat mencoba dan bereksplorasi! Mohon bagi-bagi ilmu kalau ada yang baru.

Bacaan Lebih Lanjut

Terbitnya Opera 24 untuk GNU/Linux
Opera Developer

Terbitnya Opera 24 untuk GNU/Linux

Opera 24 for GNU/Linux

Opera 24.0.1537.0 for GNU/Linux

Setelah kurang lebih setahun, Opera tidak lagi merilis versi GNU/Linux. Setelah berpindah ke Chromium, mereka lebih berkonsentrasi di versi Windows dan MacOS. Kemarin, mereka membuat kejutan dengan menerbitkan versi pengembang (24.0.1537.0).

Yang menarik, mereka pun tak lupa bercanda-canda (self-trolling) di komentar. Memang, para pengguna GNU/Linux merasa yang paling ditinggalkan setelah hilang dari peredaran selama setahun. Saya sendiri termasuk yang memrotes namun pada akhirnya meninggalkan Opera dan menuju peramban lain. Padahal, Opera salah satu peramban tertua yang mendukung GNU/Linux. Bahkan, sempat masuk ke repositori utama Debian.

Walau pun dibilang Opera for Linux, tapi nampaknya Opera kali ini lebih ditujukan kepada Ubuntu. Kalau dilihat dari gambar, nampak tematik yang digunakan adalah tematik Ubuntu. Itu sebabnya, berkas yang diunduh pun paket Debian.

Pemasangan

Pemasangan saya tulis untuk yang Debian dan non-Debian.

Cara Debian

Untuk Debian, Ubuntu, dan variannya (termasuk BlankOn), cukup unduh dan pasang.

sudo dpkg -i opera-developer_24.0.1537.0_amd64.deb

Kadang, kalau terpasang standar tanpa diutak-atik, biasanya begitu diunduh sudah langsung ditanyakan untuk dipasang. Perintah ini cuma sekedar jaga-jaga saja kalau harus memasang manual melalui terminal.

Cara Non-Debian

Saya memberikan metodologi untuk memasang secara bersih pada sistem. Kebanyakan orang memasang dengan menggunakan standar FHS yakni pada direktori “/usr/local”. Saya asumsikan bahwa paket Debian Opera sudah diunduh pada direktori yang sama.

ar p opera-developer_24.0.1537.0_amd64.deb data.tar.xz \
   | sudo tar xvfJ - --xform='s,\(/usr/\),\1local/,' --exclude=usr/share/{lintian,menu} -C/

Itu semua satu baris perintah. Lalu, kemudian buat SETUID pada opera_sandbox agar bisa dijalankan oleh pengguna biasa.

sudo chmod 4755 /usr/local/lib/x86_64-linux-gnu/opera-developer/opera_sandbox

Selesai.

Terakhir

Saya menulis ini dari Opera Developer. Cukup stabil dan cepat. Saya suka sekali fitur preview. Fitur ini memperlihatkan isi sebuah tab saat titik tetikus melewati tab tersebut tanpa harus membuka tab itu. Lumayan membantu untuk orang yang suka bertab-tab ria.

Era Monolitik

Era Monolitik

Sejujurnya, saya sedih melihat perkembangan GNU/Linux saat ini. SABDL mengumumkan bahwa Ubuntu akan pindah dari Upstart ke SystemD. Hal ini mengingat keputusan Debian yang memutuskan untuk pindah dari SystemV ke SystemD.

Bug#727708: init system other points, and conclusionWe seem to be at the point of the process where at least those of us who did early investigation are stating conclusions. I think I have enough information to state mine, so will attempt to do so here.
via Debian

Tulisan Russ Allbery memberikan pemaparan jelas mengenai alasan pemilihan ini. Dari tiga kandidat pengganti SystemV (OpenRC, Upstart, Systemd), SystemD menang di atas segalanya. Integrasi yang ketat dengan kernel Linux adalah salah satu alasannya.

Gentoo Forums :: View topic – The Politics of systemdepisode #299) was giving some of his reasons why having Debian choose to go with systemd was a good thing for Linux. Personally, I felt that all of the reasons he gave were pretty weak and did not require systemd (they included mainly cgroups & socket activation).
via Gentoo

Sebagai pengguna Gentoo dan pengguna sistem GNU/Linux yang lama, saya juga merasakan sentimen yang sama dengan pengguna Gentoo yang lain. SystemD memaksakan kehendak untuk menggantikan semua hal. Dalam beberapa tahun ini, akan ada banyak sistem yang takkan jalan tanpa SystemD.

Ini lebih kecenderungan politik dan sungguh bertentangan dengan falsafah UNIX. UNIX memperkenalkan disain yang modular. Ada lapisan-lapisan yang bekerja dengan lapisannya sendiri. Satu aplikasi berjalan untuk menunaikan tugas spesifik saja dan ia mengerjakan tugas tersebut dengan sangat baik.

Untuk mengerti falsafah ini, kita mesti mengerti politik divide et impera yang dianut VOC dulu. Saya dulu mengerti tentang falsafah ini ketika belajar Pemrograman Fungsional dengan matematika Lambda-nya. Waktu itu saya belajar Haskell.

Inti dari falsafah ini sebagai berikut: sebuah masalah dipecah-pecah menjadi banyak permasalahan yang kecil. Masalah yang kecil tersebut kemudian dipecah kembali. Hal ini dilakukan hingga unit terkecil masalah tersebut sudah mencapai titik yang dapat diselesaikan langsung.

Itu sebabnya, di dalam UNIX (dan sistem-sistem yang menirunya), ada banyak aplikasi perkakas kecil yang bisa membaca pipa aplikasi dan meneruskan keluarannya ke pipa perintah selanjutnya. Jadi, setiap aplikasi kecil tersebut saling terisolasi.

Fungsionalitas yang terisolasi ini membuat uji unit lebih mudah. Faktor ketergantungan pihak eksternal pun minim. Untuk mencari tahu kesalahan ada di mana, isolasi ini membuat kita bisa mendeteksi di mana letak kesalahan yang menyebabkan proses terhenti.

Tentu, zaman sudah berganti. Mungkin banyak orang yang sudah tak paham lagi tentang isolasi masalah. Mereka pikir sebuah aplikasi pada suatu lapisan harus tahu lapisan di atasnya atau di bawahnya.

Contohnya, saya melihat banyak orang yang melakukan optimasi jaringan bahkan sampai berusaha menggabungkan lapisan 3 dan 4, misalnya. Ini demi pengaplikasian jaringan paket berbasis konten. Kompleksitas pun bertambah.

Disain yang seperti ini akan rawan galat. Galat ini tak dapat ditelusuri dengan mudah karena banyak faktor yang mempengaruhi. Akhirnya, galat ini yang mungkin mendekatkan kita kepada Tuhan YME.

SystemD pun nampaknya akan menggantikan banyak hal. Ia telah menggantikan UDEV dan beberapa skrip non-init. BlankOn 9 Suroboyo pun sudah terkena dampaknya. Sudah lama terindikasi memang bahwa mau tak mau dunia harus mengadopsi SystemD!

Saya hanya memprediksi, seperti halnya Linus yang menyesali keputusannya membuat kernel monolitik, suatu saat perancang sistem GNU/Linux akan menyesali keputusan saat ini. SystemD akan berkembang menjadi bloated seperti Windows.

Disainnya yang monolitik hendak menggantikan banyak fungsi membuat ia menjadi kompleks. Separasi yang tidak jelas menjadikan disain menjadi amburadul. Sistem yang kompleks sungguh rawan ketergantungan antar komponen-komponennya sendiri.

Bila saatnya itu tiba, maka akan sulit rasanya mematikan sebuah fitur yang tak perlu. Bisa jadi fitur tersebut menjadi sebuah ketergantungan siklik dengan fungsi yang lain. Ah, malam ini panjang dan menyedihkan. 🙁

Met Valentin bagi yang merayakan.

Memasang Evergreen ILS
Evergreen Logo

Memasang Evergreen ILS

Kali ini saya akan membahas Evergreen, sebuah alternatif ILS lainnya. Evergreen menyediakan klien berbasis Windoze dan GNU/Linux. Yang saya suka dari Evergreen adalah dia menggunakan PostgreSQL.

Pemasangan ILS ini agak kotor karena banyak melakukan kompilasi. Namun, bila menggunakan instruksi yang disediakan cukup mudah dilakukan. Kompleksitas dari Evergreen ini menyebabkan dia sangat cocok untuk sebuah sistem yang sangat besar.

Karena galat Apache pada BlankOn, saya pun kali ini menggunakan GNU/Linux Debian Wheezy.

Pasang OpenSRF

Ada beberapa langkah besar yang harus dilakukan untuk memasang OpenSRF:

  1. Mengompilasi OpenSRF.
  2. Menyiapkan antarmuka tambahan.
  3. Mengonfigurasi ejabberd dan menambahkan pengguna.
  4. Mengonfigurasi OpenSRF untuk terhubung ke ejabberd.
  5. Memulai OpenSRF.

Semua ini sesuai dengan panduan tertulis, Anda cukup mengikuti langkah-langkah berikut.

Mengompilasi OpenSRF

Yang pertama yang harus dilakukan adalah memasang pustaka OpenSRF. Untuk itu perlu memasang paket-paket yang dibutuhkan

$ sudo apt-get install build-essential

Unduh dan buka

$ wget http://evergreen-ils.org/downloads/opensrf-2.2.1.tar.gz
$ tar xvfz opensrf-2.2.1.tar.gz
$ cd opensrf-2.2.1

Untuk memulai membangun OpenSRF perlu memasang paket-paket ketergantungan. Caranya dengan menjalankan perintah:

$ sudo make -f src/extras/Makefile.install debian-wheezy

Ambil kopi, mandi pagi, dan sapa keluarga Anda sambil menunggu kompilasi ini selesai. Setelah selesai, konfigurasi, kompilasi, dan pasang:

$ ./configure --prefix=/opt/openils --disable-static
$ make
$ sudo make install

Berbeda dengan instruksi, saya menaruh di direktori /opt/openils dari pada /openils agar sesuai dengan standar FHS.

Tambahkan pengguna sistem yang akan menjalankan OpenSRF.

$ sudo useradd -m -s /bin/bash opensrf
$ echo "export PATH=\$PATH:/opt/openils/bin" | sudo tee -a /home/opensrf/.bashrc
$ sudo passwd opensrf

Buat seluruh OpenSRF menjadi milik pengguna opensrf.

$ sudo chown -R opensrf:opensrf /opt/openils/

Daftarkan direktori pustaka OpenSRF ke sistem operasi.

$ echo /opt/openils/lib | sudo tee -a /etc/ld.so.conf.d/opensrf.conf
$ sudo ldconfig

Selanjutnya adalah menambahkan 2 antarmuka jaringan.

Konfigurasi Antarmuka Jaringan Tambahan

OpenSRF membutuhkan ejabberd dengan dua IP yang berbeda. Yang pertama untuk komunikasi publik dan yang kedua untuk komunikasi pribadi. Untuk sistem sendiri, kita dapat menambahkan dua antarmuka loopback.

Caranya adalah dengan menambahkan baris-baris berikut di /etc/network/interfaces dengan menggunakan penyunting favorit Anda.

auto lo:10 lo:20
iface lo:10 inet static
        address 127.0.1.2
        netmask 255.0.0.0

iface lo:20 inet static
        address 127.0.1.3
        netmask 255.0.0.0

Lalu, nyalakan kedua antarmuka:

$ sudo ifup lo:20 lo:10

Masukkan alamat penamaan palsu ke /etc/hosts dengan menggunakan penyunting favorit Anda.

127.0.1.2       public.localhost        public
127.0.1.3       private.localhost       private

Selanjutnya adalah mengonfigurasi peladen ejabberd.

Konfigurasi ejabberd

Evergreen menggunakan protokol XMPP sebagai alat komunikasi. Peladen ejabberd digunakan sebagai penyedia protokol tersebut. Anda dapat juga membuat gTalk Anda sendiri berbasis aplikasi ini. Tapi, itu di luar cakupan tulisan ini.

Sebelum mengonfigurasi, matikan ejabberd terlebih dahulu:

$ sudo invoke-rc.d ejabberd stop

Buka konfigurasi /etc/ejabberd/ejabberd.cfg dan ubah/tambahkan baris-baris berikut:

  • Tambahkan domain publik dan pribadi yang telah didefinisikan tadi. Contohnya saya mengubah baris ke-61 dari:
    {hosts, ["localhost"]}.
    menjadi:
    {hosts, ["localhost", "private.localhost", "public.localhost"]}.
  • Mematikan mod_offline pada baris ke-584.
  • Menambah max_user_sessions dari 10 menjadi 10000 pada baris ke-460.
  • Mengubah seluruh max_stanza_size menjadi 2000000 pada baris ke-118 dan ke-136.
  • Mengubah seluruh maxrate menjadi 50000 pada baris ke-409 dan baris ke-414.

Setelah selesai mengubah semua itu, hidupkan kembali ejabberd:

$ sudo invoke-rc.d ejabberd start

Selanjutnya membuat pengguna ejabber.

Konfigurasi Pengguna Ejabberd

Seperti yang sudah kita buat sebelumnya, Evergreen menggunakan dua saluran (yang ditandai dengan dua host yang berbeda) dalam berkomunikasi. Pada contoh kali ini, kita membuat saluran “public.localhost” untuk komunikasi publik dan “private.localhost” untuk saluran pribadi.

Setiap saluran harus memiliki dua pengguna yang berfungsi sebagai:

router
Pengguna ini digunakan untuk menjadi broker untuk setiap layanan OpenSPF. Itu sebabnya, nama pengguna ini tidak dapat diganti dan harus bernama router. (hardcoded)
opensrf
Pengguna ini digunakan oleh setiap klien OpenSRF untuk terhubung ke OpenSRF. Nama pengguna dapat diganti dengan yang lain.

 Karena masing-masing saluran ada dua pengguna, maka dibuat empat pengguna:

$ sudo ejabberdctl register router private.localhost passwd123
$ sudo ejabberdctl register opensrf private.localhost passwd123
$ sudo ejabberdctl register router public.localhost passwd123
$ sudo ejabberdctl register opensrf public.localhost passwd123

Jangan lupa mengganti “passwd123” dengan sandi yang aman dan berbeda satu sama lain.

Konfigurasi OpenSRF

Terakhir untuk OpenSRF adalah dengan mengonfigurasi sistem. Masuk sebagai pengguna opensrf dan pergi ke direktori konfigurasi. Lalu, salin contoh konfigurasi menjadi konfigurasi kita.

$ sudo su - opensrf
$ cd /opt/openils/etc
$ cp opensrf_core.xml.example opensrf_core.xml
$ cp opensrf.xml.example opensrf.xml

Berhubung dalam artikel ini tidak diubah nama pengguna, tetap menggunakan opensrf, tidak ada yang perlu diubah. Namun, bila Anda mengubah nama pengguna, ganti nama pengguna opensrf menjadi nama pengguna yang Anda tentukan di opensrf_core.xml.

Buka opensrf_core.xml dengan penyunting favorit Anda untuk mengganti nama pengguna (bila bukan opensrf) dan sandi yang telah kita buat sebelum ini. Contohnya:

  • Mengganti nama pengguna pada baris ke-37 dan sandinya pada baris ke-38 untuk pengguna saluran public.localhost.
     
    private.localhost 
    opensrf
    passwd123
    5222
    
  • Mengganti nama pengguna pada baris ke-86 dan sandi pada baris ke-87 untuk pengguna saluran
    
    public.localhost
    opensrf
    passwd123
    5222
    
  • Mengganti sandi pada baris ke-111 untuk router saluran public.localhost.
    
      public.localhost
      5222
      /opt/openils/var/sock/unix_sock 
      router 
      passwd123
      router
      10
      5 
    
  • Mengganti sandi pada baris ke-133 untuk router saluran public.localhost.
    
      private.localhost
      5222
      router
      passwd123
      router
      10
      5
    

Selanjutnya, salin srfsh.xml.example ke direktori rumah opensrf. Konfigurasi ini diperlukan agar pengguna opensrf dapat menjalankan konsol OpenSRF, srfsh. Anda dapat menyalin srfsh ke pengguna Anda sendiri bila ingin menjalankan srfsh dari pengguna tersebut. Jangan lupa sesuaikan nama pengguna dan sandi yang diperlukan.

$ cp srfsh.xml.example ~/.srfsh.xml

Buka ~/.srfsh.xml dalam penyunting favorit Anda, ubah nama pengguna (jika diubah) dan sandi. Berikut contoh berkas saya:

< ?xml version="1.0">


  router
  private.localhost
  opensrf
  passwd123
  5222
  /opt/openils/var/log/srfsh.log
  4
  true

Setelah itu, kita bisa memulai OpenSRF.

Memulai OpenSRF

Setelah konfigurasi panjang yang telah kita lalui, saatnya memulai layanan OpenSRF. Untuk memulai OpenSRF, jalankan perintah berikut sebagai pengguna opensrf.

$ osrf_ctl.sh -l -a start_all

Setelah memulai, kita dapat menguji salah satu salurannya. Caranya, dengan masuk ke konsol OpenSRF (srfsh).

$ srfsh

Lalu jalankan operasi penambahan:

srfsh# request opensrf.math add 2,2

Received Data: 4

------------------------------------
Request Completed Successfully
Request Time in seconds: 0.004293
------------------------------------

Kalau benar, data yang didapatkan “4”.

Sebagai catatan, kalau Anda ada keperluan untuk mematikan OpenSRF, jalankan perintah:

$ osrf_ctl.sh -l -a stop_all

Kalau ini semua sudah dilakukan, keluar dari pengguna opensrf untuk kembali menjadi pengguna biasa. Ada hal-hal lain yang hendak dikerjakan.

Anda masih antusias? Karena ini baru memasang OpenSRF. Selanjutnya kita akan memasang basisdata PostgreSQL untuk Evergreen. Semangat!

Memasang Evergreen

Memasang Evergreen cukup dengan beberapa langkah:

  1. Memasang paket-paket yang dibutuhkan.
  2. Mengompilasi dan memasang Evergreen.
  3. Mengonfigurasi peladen Apache HTTPd.

Memasang Paket-paket yang Dibutuhkan

Unduh Evergreen, ekstraksi paket unduhan, dan masuk ke direktori kode sumber.

$ wget http://evergreen-ils.org/downloads/Evergreen-ILS-2.5.2.tar.gz
$ tar xvfz Evergreen-ILS-2.5.2.tar.gz
$ cd Evergreen-ILS-2.5.2/

Jalankan perintah yang sama seperti OpenSPF untuk memeriksa ketergantungan paket.

$ sudo make -f Open-ILS/src/extras/Makefile.install debian-wheezy

Sedikit catatan, skrip ini memasang paket-paket CPAN. Berikut beberapa pertanyaan yang saya jawab. Intinya, saya memilih KAMBING.ui.ac.id sebagai repositori CPAN berhubung fisiknya ada di ruang sebelah.

Would you like me to automatically choose some CPAN mirror
sites for you? (This means connecting to the Internet) [yes] no

Would you like to pick from the CPAN mirror list? [yes] yes

(1) Africa
(2) Asia
(3) Europe
(4) North America
(5) Oceania
(6) South America
Select your continent (or several nearby continents) [] 2

(1) China
(2) India
(3) Indonesia
(4) Iran
(5) Israel
(6) Japan
(7) Kazakhstan
(8) Pakistan
(9) Republic of Korea
(10) Singapore
(11) Taiwan
(12) Thailand
(13) Turkey
(14) Viet Nam
Select your country (or several nearby countries) [] 3

(1) http://cpan.cermin.lipi.go.id/
(2) http://cpan.mirrors.gudangteknologi.com/
(3) http://kambing.ui.ac.id/cpan/
(4) http://kartolo.sby.datautama.net.id/CPAN/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, hyphenated ranges allowed
 e.g. '1 4 5' or '7 1-4 8' [] 3

Enter another URL or ENTER to quit: []

Yang terakhir saya hanya menekan tombol ENTER. Saya sengaja memisahkan setiap keterangan dan pertanyaan dengan baris kosong. Semoga ini membantu Anda.

Mengompilasi Evergreen

Saatnya mengompilasi Evergreen dengan tiga langkah:

$ PATH=/opt/openils/bin:$PATH ./configure --prefix=/opt/openils --disable-static
$ make
$ sudo make install

Seperti OpenSRF, saya memasang Evergreen di /opt/openils agar sesuai dengan FHS. Sebenarnya variabel STAFF_CLIENT_STAMP_ID tidak perlu dituliskan. Di dokumentasi disebutkan saat make install harus:

$ sudo make STAFF_CLIENT_STAMP_ID=rel_2_5_2 install

Tapi, toh, sebenarnya ia akan dipasang di tempat yang sama seperti versi yang ada. Ada atau pun tidak ada variabel itu, pasti akan ditaruh juga di tempat yang sama.

Selanjutnya membuat sebuah tautan simbolik sebagai peladen.

$ sudo ln -sf /opt/openils/var/web/xul/rel_2_5_2/server /opt/openils/var/web/xul/server

Pasang konfigurasi opensrf.xml dan opensrf_core.xml versi Evergreen.

$ sudo su opensrf -c "cp -b /opt/openils/conf/opensrf_core.xml.example /opt/openils/conf/opensrf_core.xml"
$ sudo su opensrf -c "cp -b /opt/openils/conf/opensrf.xml.example /opt/openils/conf/opensrf.xml"

Jangan lupa sunting kembali opensrf_core.xml dengan mengganti nama-nama pengguna dan sandi sesuai yang telah kita konfigurasi sebelumnya di OpenSRF.

Selanjutnya betulkan kembali kepemilikan /opt/openils menjadi milik opensrf.

$ sudo chown -R opensrf:opensrf /opt/openils

Memasang Konfigurasi Basisdata

Jalankan skrip konfigurasi basisdata

$ sudo make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-wheezy

Skrip akan memasang libdbd-postgres ke /usr/local/lib/dbd. Tambahkan pustaka tersebut ke dalam pustaka sistem.

$ echo "/usr/local/lib/dbd" | sudo tee -a /etc/ld.so.conf.d/eg.conf
$ sudo ldconfig

Buat pengguna evergreen dan isi sandinya dengan sandi yang aman.

$ sudo su postgres -c "createuser -s -P evergreen"

Selanjutnya jalankan skrip untuk mempopulasi basisdata.

$ perl Open-ILS/src/support-scripts/eg_db_config --update-config \
     --service all --create-database --create-schema --create-offline \
     --user evergreen --password passwd123 --hostname localhost --port 5432 \
     --database egdb --admin-user egadmin --admin-pass passwd123

Kalau Anda mau mencoba Evergreen dengan data contoh, tambahkan –load-all-sample sebagai parameter sehingga menjadi:

$ perl Open-ILS/src/support-scripts/eg_db_config --update-config \
     --service all --create-database --create-schema --create-offline \
     --user evergreen --password passwd123 --hostname localhost --port 5432 \
     --database egdb --admin-user egadmin --admin-pass passwd123 --load-all-sample

Pengguna evergreen sesuai dengan nama pengguna yang diciptakan oleh postgres. Sandinya mohon diganti.

Untuk inang peladen PostgreSQL memakai localhost dan port baku 5432. Basis data saya pilih egdb, bisa diganti namanya.

Untuk nama admin saya gunakan egadmin agar mudah diingat. Mohon sandinya diganti.

Pokoknya untuk setiap sandi selalu saya isi passwd123, karena ini cuma tutorial sesederhana mungkin. Namun, Anda tidak boleh melakukannya untuk mesin produksi.

Memasang Konfigurasi Apache2

Pasang konfigurasi Evergreen untuk peladen Apache2.

$ sudo cp Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/
$ sudo cp  Open-ILS/examples/apache/eg_{startup,vhost.conf} /etc/apache2/

Kalau Anda menggunakan Apache2 versi 2.4, salin konfigurasi yang ada di Open-ILS/examples/apache_24 ke direktori masing-masing.

Pasang SSL untuk Apache2

Untuk memasang SSL, buat sertifikat dengan melakukan perintah berikut:

$ sudo mkdir /etc/apache2/ssl
$ cd /etc/apache2/ssl
$ sudo openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
Generating a 2048 bit RSA private key
......................................................................+++
...+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Jawa Barat
Locality Name (eg, city) []:Depok
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universitas Indonesia
Organizational Unit Name (eg, section) []:PPSI
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:jp@localhost

Ganti organisasi dengan organisasi Anda. Ganti FQDN dengan alamat peladen yang benar. Dan seterusnya.

Evergreen meminta agar Apache2 dijalankan oleh pengguna opensrf, bukan www-data.

$ sudo sed -i.bak s/www-data/opensrf/g /etc/apache2/envvars
$ sudo chown -R opensrf:opensrf /var/lock/apache2

Aktifkan Evergreen dan matikan situs bawaan.

$ sudo a2dissite default
$ sudo a2ensite eg.conf

Selanjutnya menjalankan Evergreen.

Memperbaharui Konfigurasi

Jalankan perintah berikut setiap kali mengubah hierarki config.cgi.

$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin autogen.sh -u"

Menjalankan Evergreen

Jalankan ulang layanan-layanan yang diperlukan.

$ sudo invoke-rc.d ejabberd restart
$ sudo invoke-rc.d memcached restart

Jalankan ulang Evergreen.

$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin osrf_ctl.sh -l -a stop_all"
$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin osrf_ctl.sh -l -a start_all"

Jalankan ulang Apache2:

$ sudo invoke-rc.d apache2 restart

Terakhir, buka peramban dan pergi ke situs ini. Maka, akan didapati:

OPAC on Evergreen

OPAC on Evergreen

 

Bacaan Lebih Lanjut

Kompilasi Kernel BlankOn

Kompilasi Kernel BlankOn

cat > blankon-sources.list << .
deb-src http://kambing.ui.ac.id/blankon rote main extras
deb-src http://kambing.ui.ac.id/blankon rote-security main extras
deb-src http://kambing.ui.ac.id/blankon rote-updates main extras
.

sudo mv blankon-sources.list /etc/apt/sources.list.d/
sudo apt-get update

sudo apt-get install kernel-package fakeroot
apt-get source linux-3.2
cd linux-3.2.23

cp /boot/config-3.2.0-3-amd64 .config
make menuconfig

 Processor type and features  --->
    Processor family (Generic-x86-64) --->
        (X) Core 2/newer Xeon

Pilih-pilih yang lain! Kalau sudah puas pilih Exit beberapa kali dan Save.

make-kpkg clean
fakeroot make-kpkg --initrd --revision=24022013.jp1 kernel_image kernel_headers

Bermain bersama keluarga, menyapa Ayah/Ibu/Adik/Kakak, makan/bobok siang dulu. Lakukan itu sampai kompilasi habis.

sudo dpkg -i ../*.deb
Debootstrap Blankon 8.0

Debootstrap Blankon 8.0

BlankOn Glow On The Dark

Saya mengunduh dan memasang berkas paket debian debootstrap dari repositori BlankOn di Kambing (versi 1.0.42 saat penulisan). Sayangnya, paket deboostrap tersebut tidak mengandung BlankOn. Tidak terima dengan keadaan itu, saya pun mencari berkas konfigurasi Rote. Saya sudah menghapus satu partisi penting dengan iman teguh bahwa  Rote sudah tersedia. Harus!

Dari daftar perubahan, nampak bahwa skrip Rote merupakan sebuah symlink dari Ombilin. Yak, saya pun berbinar-binar. Berikut cara pasang Rote ala saya.

Lengkapi Skrip Debootstrap Rote

Pertama, pasang deboostrap:

$ sudo apt-get install debootstrap

Kedua, unduh skrip Ombilin dan buat symlink Rote ke berkas Ombilin tersebut.

$ wget http://dev.blankonlinux.or.id/export/rote%2Cdebootstrap%2C29/rote/debootstrap/scripts/ombilin
$ sudo mv ombilin /usr/share/debootstrap/scripts
$ sudo ln -s /usr/share/debootstrap/scripts/ombilin /usr/share/debootstrap/scripts/rote

Ya, begitu, deh. Dengan ini, kita sudah siap memasang Rote dengan skrip baru. Asumsi saya, sebuah partisi kosong telah dikaitkan ke “/mnt”.

Debootstrap Seperti Biasa (Tidak Juga, Sih)

Saat penulisan, menggunakan repositori Kambing terjadi kegagalan dengan pesan sebagai berikut:

E: Couldn't download packages: libdb5.1

Malas juga mensinkron ulang Kambing. Apalagi ini sudah malam, Kambing biasanya lagi sinkron dengan banyak repositori. Ya, sudah, saya menggunakan repositori utama BlankOn:

$ sudo debootstrap rote /mnt http://arsip.blankonlinux.or.id/blankon/

Setelah selesai, seperti biasa kaitkan beberapa direktori khusus:

$ sudo mount -o bind /dev /mnt/dev
$ sudo mount -t proc none /mnt/proc
$ sudo mount -t sysfs none /mnt/sys
$ sudo mount -t devpts none /mnt/dev/pts

Yak, selanjutnya tinggal pasang-pasang.

Pasang-pasang

Eh, iya, lupa… masuk dulu:

$ sudo chroot /mnt /bin/bash

Pada saat penulisan ini, paket “blankon-desktop” tidak dapat terpasang karena membutuhkan paket-paket di luar repositori “main”. Ini wajar, karena berbeda dengan Ubuntu, Debian memutuskan untuk tidak memasukkan paket-paket firmware perangkat keras yang tidak bebas ke repositori utama. Mungkin karena Rote baru saja transisi dari Ubuntu ke Debian, maka berkas-berkas demikian tidak disunting terlebih dahulu.

Hey, sebuah desktop yang keren bukan berarti sudah sempurna. Mungkin di rilis berikutnya akan lebih sempurna. Sekarang saja sudah keren, apa lagi nanti? 🙂

Ya, sudah, saya tambahkan saja beberapa repositori sekaligus. Saya menggunakan Kambing baru kalau tak ada mencari ke Arsip Blankon. Itu sebabnya, Kambing di urutan pertama. Ini isi “sources.list” saya:

deb http://kambing.ui.ac.id/blankon rote main restricted extras extras-restricted
deb http://arsip.blankonlinux.or.id/blankon rote main restricted extras extras-restricted

deb http://kambing.ui.ac.id/blankon rote-security main restricted extras extras-restricted
deb http://arsip.blankonlinux.or.id/blankon rote-security main restricted extras extras-restricted

deb http://kambing.ui.ac.id/blankon rote-updates main restricted extras extras-restricted
deb http://arsip.blankonlinux.or.id/blankon rote-updates main restricted extras extras-restricted

Yak, perbaharui daftar paket:

# apt-get update

Pasang BlankOn:

# apt-get install blankon-desktop

Yak, pada tahap ini saatnya menyapa anak, kekasih, atau orang tua Anda. Sudahkah Anda bersosialisasi hari ini?

Pasang Paket-paket Penting

Kernel

Ada “linux-image-generic” atau “linux-image-686”. Kalau yang pertama bakal memasang kernel versi 3.0 dan terakhir memasang 3.2. Saya lebih suka kernel terbaru, apalagi ada regresi pengaturan daya di kernel-kernel terdahulu.

# apt-get install linux-image-686

Ada 24,8 MB paket yang hendak diunduh. Santai lagi….

Perkakas Sistemberkas

Yak, saya menggunakan LVM2 dan ReiserFS. Jadi, saya perlu menambahkan keduanya:

# sudo apt-get install reiserfsprogs lvm2

Saya tidak yakin apa perlu memasang “ntfs-3g” untuk membaca partisi NTFS. Nanti saja. Saya memiliki skema partisi LVM, jadi agak ribet. Mungkin Anda memiliki satu partisi khusus yang berdedikasi sehingga proses ini tidak perlu dilakukan.

Persiapan Untuk Menyalakan Ulang Komputer

Keluar dari CHROOT

Keluar dari “chroot” dan lepas semua kaitan.

# exit
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ sudo umount /mnt

Saya tetap memilih GNU/Linux Ubuntu 12.04 saya sebagai sistem operasi utama. Jadi, saya perlu mengonfigurasi ulang GRUB2 saya:

$ sudo dpkg-reconfigure grup-pc

Yak, tinggal “next”-“next” saja.  Nanti pengonfigurasi akan menemukan partisi BlankOn dan entri GRUB-nya.

Dunia Tak Seindah Itu Tapi Bersyukurlah

Yak, ternyata ada konfigurasi-konfigurasi tambahan yang harus digunakan. Beberapa paket sepertinya harus dipasang. Yang pasti, shortcut tidak berfungsi di Manokwari. Namun, saya terkagum-kagum betapa cepatnya BlankOn dari posisi mati ke DM. Wow!

Kudos buat pengembang. Saya masih ingin eksplorasi lagi, tapi mata sudah berat. Ini sudah jam setengah tiga pagi. Caw!

Skrinsut BlankOn

Skrinsut BlankOn minimalis belum diperlakukan. 🙂

Memasang mod_pagespeed Pada Ubuntu/Debian

Memasang mod_pagespeed Pada Ubuntu/Debian

Modul mod_pagespeed adalah sebuah modul Apache yang digunakan untuk mengoptimisasi sebuah situs. Beberapa teknik optimasi misalnya mengecilkan berkas-berkas dan membuat mereka statik. Modul ini dikembangkan oleh Google.

Cara pakai:

  1. Pergi ke laman pengunduhan dan unduh berkas.debyang sesuai dengan arsitektur server.
  2. Pasang:
    sudo dpkg -i mod-pagespeed-beta_current_amd64.deb
  3. Muat ulang Apache2.
    sudo invoke-rc.d apache2 restart
  4. Selesai.

Optimasi

Kalau memori lebih besar, lebih baik taruh pagespeed ke memori. Caranya ada di dokumentasi.

Sedikit saran, kalau menggunakan solusi lain, lebih baik mod_pagespeed dimatikan atau solusi lain juga dimatikan. Sering kali solusi yang sama ditawarkan oleh solusi lain (misalnya penggunaan plugin tembolok WordPress yang juga mengompresi berkas). Jadi, pastikan solusi yang lain tidak saling bentrok.