Tag Archives

2 Articles
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

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