Membuat Delta Berkas Biner Menggunakan xdelta3

Setelah hampir setahun vakum, akhirnya Vitaly Valtman merilis proyeknya yang selalu ditunggu-tunggu para pembuat bot Telegram; telegram-cli. Well, proyek kali ini sebenarnya bukan lanjutan dari telegram-cli, melainkan sebuah proyek baru bertajuk telegram-bot.

Sekilas, telegram-bot tiada beda dengan telegram-cli. Namun jika dirunut lebih mendalam ia memiliki cukup perbedaan yang membuatnya layak menyandang nama baru, misalnya kita tidak bisa mengirim pesan secara langsung menggunakan telegram-bot melainkan mesti melalui perantara script lua atau socket.

Seperti umumnya proyek baru, there are bugs. Bugs everywhere. Dan untuk mempermudah debugging demi menyingkirkan bug, telegram-bot dikompilasi dengan disertai debug symbol. Menyertakan debug symbol memang akan memudahkan debugging namun dengan konsekuensi berkas biner hasil kompilasi menjadi berukuran besar. Dalam kasus telegram-bot, ukurannya sekitar 95MB! Dan tiap malam telegram-bot selalu rilis build baru untuk perbaikan bug jadi kita mesti mengunduh 95MB tiap hari. Perfect.

I love telegram-cli. Ia gegas, ringkas, dan mudah dipakai. Jadi tentu saja saya tidak ingin tertinggal untuk mencicipi telegram-bot. Namun kemudian ternyata terbentur ukurannya yang jumbo. Apa daya?

Pikir punya pikir, akhirnya teringat dengan teknik delta pada berkas biner. Delta pada berkas biner sendiri bukan sesuatu yang aneh bagi saya, karena sehari-hari menggunakan debdelta untuk memutakhirkan instalasi Debian Sid. Bisa dikata, karena debdelta-lah saya setia di Debian Sid.
debdelta bekerja dengan cara membuat berkas selisih (delta) dari paket lama dan paket baru. Jadi misalkan paket anu-0.1.deb yang berukuran 2MB mendapatkan pembaharuan paket anu-0.2.deb yang berukuran 3MB, kita tidak akan mengunduh paket anu-0.2.deb yang sebesar 3MB, melainkan hanya mengunduh paket debdelta sebesar 1MB yang merupakan selisih anu-0.1.deb dan anu-0.2.deb.

Di sini saya akan meniru cara kerja server debdelta, yakni membuat selisih dari berkas telegram-bot yang lama dengan berkas telegram-bot build teranyar. Patut diingat, cara ini hanya masuk akal jika dilakukan pada server dan bukan di lokal. Dan untungnya, meski tidak memiliki VPS saya masih memiliki akun gratis di c9.io.

Dan beginilah caranya:

  1. Login ke server, atau bagi saya, login ke c9.io
  2. Pasang paket xdelta3
    sudo apt install xdelta3
    
  3. Unduh berkas biner yang lama dan yang baru. Dalam kasus saya, biner lama adalah telegram-bot-170824-linux, dan berkas biner baru adalah telegram-bot-170827-nightly-linux.
    wget https://valtman.name/files/telegram-bot-170824-linux
    wget https://valtman.name/files/telegram-bot-170827-nightly-linux
    
  4. Buat berkas delta dari berkas biner lama dan berkas biner baru
    xdelta3 -e -s telegram-bot-170824-linux telegram-bot-170827-nightly-linux tdbot.delta
    
    Perintah ini akan menghasilkan berkas tdbot.delta yang merupakan selisih dari berkas telegram-bot-170824-linux dan telegram-bot-170827-nightly-linux.
    Ukuran tdbot.delta yang kemarin saya hasilkan sekitar 14MB.
  5. Unduh berkas tdbot.delta ke komputer lokal.

Sekarang saatnya untuk menambal (patching) berkas telegram-bot lama (telegram-bot-170824-linux) di komputer lokal kita agar tidak perlu mengunduh telegram-bot-170827-nightly-linux.

  1. Pastikan dalam komputer lokal juga sudah terpasang paket xdelta3
    sudo aptitude install xdelta3
    
  2. Gunakan tdbot.delta yang di langkah awal telah kita unduh untuk menambal berkas lama
    xdelta3 -d -s telegram-bot-170824-linux tdbot.delta telegram-bot-170827-nightly-linux
    
    Perintah ini akan menghasilkan berkas telegram-bot-170827-nightly-linux yang sama persis dengan yang ada di https://valtman.name/files/telegram-bot-170827-nightly-linux.
  3. profit!

Jadi dengan menggunakan delta sebesar 14MB, saya bisa mendapatkan fungsionalitas dari berkas https://valtman.name/files/telegram-bot-170827-nightly-linux tanpa harus mengunduh 95MB. Penghematan kuota internet sebesar 85%. Awesome.

Menyadari mudah dan bergunanya teknik ini, saya pun menyarankan agar Vitaly juga membuat berkas delta untuk setiap build telegram-bot, namun ternyata dia lebih memilih merilis biner yang stripped down tanpa debug symbol...
Well, tiada mengapa, justru lebih bagus demikian.