Membuat Software Portable di GNU/Linux Menggunakan AppImage
AppImage merupakan salah satu solusi tertua untuk menjawab persoalan bagaimana mengemas perangkat lunak agar bisa langsung dijalankan pada banyak distro GNU/Linux. Jika Anda belum mengenal AppImage, bayangkan saja ia seperti portable software untuk dunia GNU/Linux. Kita tidak perlu memusingkan distro, dependencies atau package manager, cukup unduh software yang dikemas menjadi AppImage, jadikan executable dan kemudian jalankan. That’s simple.
Meski telah lama beredar, dan bahkan menuai pujian dari tokoh sekaliber Linus Torvalds, popularitas AppImage tidak kunjung menanjak dan malah cenderung tenggelam tertelan riuhnya berita aplikasi sejenis; snaps dan flatpak. Karenanya, dalam artikel kali ini saya akan mencoba mengangkat topik AppImage dengan bahasan bagaimana cara membuat berkas AppImage untuk Genymotion. Sengaja saya pilih Genymotion sebagai contoh AppImage karena kebetulan kemarin baru saja menulis artikel bagaimana cara memasang Genymotion. Jadi, pastinya masih segar dalam ingatan.
Dokumentasi selengkapnya mengenai AppImage bisa dibaca di sini. Sementara jika Anda malas untuk membuat sendiri dan ingin langsung mencoba berkas AppImage yang sudah jadi, unduh koleksi berkas biner AppImage di repo bintray ini.
Membuat AppImage secara manual
Walau cara manual ini mungkin akan terasa memusingkan dan merepotkan, namun saya sangat menyarankan Anda untuk mencobanya agar sedikit-banyak bisa lebih memahami seluk-beluk AppImage.
Unduh berkas Genymotion. Untuk uraian yang terperinci, silakan baca artikel Menjalankan Aplikasi Android di Linux Menggunakan Genymotion.
Unduh
appimagetool, sebuah perkakas untuk membuat berkas AppImage, dari repo AppImageKit. Sesuaikan dengan arsitektur sistem operasi yang Anda gunakan. Dicontohkan mengunduh versi 64 bit.wget -c https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86\_64.AppImage --trust-server-names -O appimagetool-x86\_64.AppImageUntuk arsitektur lain, silakan lihat di laman https://github.com/AppImage/AppImageKit/releases. Jika telah terunduh, jadikan berkas
appimagetool-x86_64.AppImageini executable.sudo chmod +x appimagetool-x86\_64.AppImageBuat sebuah folder
AppDir, misal nama folder-nya adalahGenymotion.AppDir.mkdir Genymotion.AppDirMasuk ke dalam folder AppDir yang baru dibuat tadi.
cd Genymotion.AppDirUraikan berkas biner Genymotion hasil unduhan. Misal nama berkasnya adalah
genymotion-2.11.0-linux_x64.bin, yang terletak di$HOME/Downloads.yes | bash $HOME/Downloads/genymotion-2.11.0-linux\_x64.bin -d opt/genymotionBuat berkas desktop launcher.
nano genymotion.desktopDan kemudian isikan kode berikut:
[Desktop Entry] Type=Application Version=1.0 Name=Genymotion Comment=Virtual environment for Android. Exec=/opt/genymobile/genymotion/genymotion Icon=genymotion Terminal=false Categories=Development;Unduh berkas
AppRundari repo AppImageKit.wget -c https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86\_64 --trust-server-names -O AppRunJadikan berkas desktop launcher dan AppRun ini executable.
sudo chmod +x genymotion.desktop AppRunSalin ikon Genymotion.
cp opt/genymobile/genymotion/icons/icon.png genymotion.pngBuat symbolic link dari biner Genymotion ke
/usr/bin.ln -s ../../opt/genymobile/genymotion/genymotion usr/bin/genymotionSaatnya menjadikan folder
Genymotion.AppDirini sebuah berkas AppImage. Berpindahlah ke direktori tempatappimagetool-x86_64.AppImageberada.cd ..Kemudian jalankan perintah berikut untuk membangun AppImage.
./appimagetool-x86_64.AppImage Genymotion.AppDirJika proses build berjalan lancar tanpa kendala, berkas AppImage yang dihasilkan akan bisa ditemukan pada direktori yang sama dengan perkakas
appimagetool-x86_64.AppImageberada. Pada contoh kali ini, berkas yang berhasil dibangun bernamaGenymotion-x86_64.AppImage.
Selamat! Anda telah berhasil menjadikan Genymotion portable. Emm, tidak benar-benar portable sih, karena ia memerlukan VirtualBox terpasang pada sistem. Untuk menjalankannya, cukup jadikan ia executable dan kemudian klik ganda seperti umumnya menjalankan aplikasi GUI.
Membuat AppImage dengan bantuan skrip
Jadi, Anda telah mencoba membuat berkas AppImage secara manual dan lumayan memahami cara kerja AppImage. Namun cara manual dirasa lumayan bertele-tele dan membuang waktu jika melakukannya berulang-kali.
Jangan khawatir, menurut wiki AppImage, ada banyak cara untuk membangun AppImage. Salah satunya, yang ternyata belum ada di wiki tersebut, adalah dengan menggunakan skrip pkg2appimage dari repo AppImages.
pkg2appimage akan membangun berkas AppImage berdasarkan “resep” yang ditulis dalam berkas yaml.
Kita bisa mendapatkan banyak berkas resep dari dalam folder recipes repo AppImages tadi. Namun sayangnya, dalam repo tersebut tidak ada resep untuk Genymotion. Jadi, ya terpaksa kita harus menulis resepnya sendiri.
Sayangnya saya belum menemukan dokumentasi yang memadai mengenai skema penulisan berkas resep AppImage, jadi satu-satunya cara yang bisa dilakukan untuk belajar membuat berkas resep yang baru adalah dengan mengamati resep-resep yang ada di repo AppImages tadi. Untungnya, aturan penulisan berkas resep AppImage cukup sederhana dan bisa dengan relatif mudah dipahami.
Langkah membuat AppImage Genymotion secara manual yang diterangkan pada paragraf terdahulu bisa kita buatkan resepnya seperti berikut:
app: Genymotion
ingredients:
script:
- GENYVER='2.11.0'
- wget -c "https://dl.genymotion.com/releases/genymotion-$GENYVER/genymotion-$GENYVER-linux\_x64.bin"
- echo $GENYVER > VERSION
script:
- GENYDIR='opt/genymobile'
- install -d $GENYDIR
- cp ../genymotion-*.bin .
- yes | bash genymotion-*.bin -d $GENYDIR
- cp opt/genymobile/genymotion/icons/icon.png genymotion.png
- ln -s ../../opt/genymobile/genymotion/genymotion usr/bin/genymotion
- cat > genymotion.desktop <<EOF
- [Desktop Entry]
- Type=Application
- Version=1.0
- Name=Genymotion
- Comment=Virtual environment for Android.
- Exec=/opt/genymobile/genymotion/genymotion
- Icon=genymotion
- Terminal=false
- Categories=Development;
- EOF
Seperti bisa dilihat, susunan berkas resep tampak cukup sederhana dan relatif mudah dimengerti tanpa perlu banyak penjelasan.
- Baris app adalah untuk menyatakan nama berkas AppImage.
- Baris ingredients adalah tempat untuk mendaftar “bahan-bahan” atau source yang akan digunakan pada proses build.
- Baris script paling bawah adalah daftar perintah yang akan dijalankan
pkg2appimagedalam proses build. Aturan penulisan di bagian script ini sama saja halnya dengan penulisan skripbash, yang membedakan hanyalah tiap baris mesti diawali tanda sambung (hyphen) diikuti spasi.
Untuk membuat AppImage berdasarkan resep, jalankan perintah dengan format pkg2appimage [RESEP]. Misalnya jika resep di atas kita simpan menjadi berkas Genymotion.yml, maka perintah untuk membangun AppImage-nya menjadi seperti berikut:
pkg2appimage Genymotion.yml
Tiada lagi yang perlu dilakukan selain menunggu hingga proses build selesai. Jika proses build berhasil, berkas biner AppImage yang dihasilkan akan bisa ditemukan di folder out pada direktori dimana kita menjalankan skrip.
Akhir kata, jika Anda senang mencoba-coba program namun segan untuk mengotori sistem, ingin memasang program yang tidak ada dalam lumbung paket distro yang dipakai, atau ingin program yang Anda buat bisa dicicipi banyak calon user tanpa perlu membuat beragam jenis paket yang berbeda antar distro, maka AppImage bisa menjadi solusi. Lain halnya dengan Snap atau Flatpak yang dukungannya terbatas pada distro tertentu, AppImage bisa berjalan di hampir semua distro. Ia juga tidak memiliki dependensi khusus, jadi yang diperlukan untuk menjalankan AppImage hanyalah mengunduh program yang dikemas dengan AppImage dan kemudian menjadikannya executable.