Saturday, July 20, 2019

Menjalankan Aplikasi Linux Secara Native di Android

Saya baru tahu kalo aplikasi native linux (ternyata) bisa langsung dijalankan di Android. Padahal, selama ini selalu kebingungan googling, misalnya "htop binary for android" ... atau aplikasi lainnya ditambah keyword for android.

Ternyata, caranya gampang. Tapi syaratnya, kita harus punya akses root ke si Android. Metode ini sangat cocok dipakai kalau kita ingin memaksimalkan fungsi STB Android. Selain untuk tontonan / entertainment, kita bisa jalankan fungsi-fungsi lain, termasuk sebagai web server, bot server, compiler, dan sebagainya.

Yang pertama harus diperhatikan tentu saja, arsitektur si Android. Kemungkinan besar, pilihannya 2 : arm 64 bit, dan arm 32 bit. Kalau arm 64 bit, kita gunakan resource dari OS linux (berbasis arm) yang 64bit, dan pilih OS linux berbasis arm 32bit kalau Android kita juga 32bit. Bisa dicari di website resmi debian/armbian. Pakai yang buat device apa saja terserah (asal sesuai 32bit/64bit-nya).

Berikutnya, kita harus bikin link, di system Android kita ke folder /usr dan /lib ... bisa saja kita ambilkan dari /system/ulib dan /system/uusr atau dari /cache/lib dan /cache/usr). Terserah saja, mana yang kira-kira lebih pas (space-nya cukup). Link ini penting, karena linux mencari library di dalam /lib atau /usr/lib ... dan aplikasi di /usr/bin ... Kita kumpulkan saja nanti semua native disitu, biar gampang manage-nya.

# mkdir /usr
# mkdir /lib
# mkdir /system/lusr
# mkdir /system/llib
# ln -s /system/lusr /usr
# ln -s /system/llib /lib
# mkdir /usr/bin
# mkdir /usr/lib


Salah satu folder utama linux, yang sayangnya juga dipakai oleh Android adalah /etc (di link ke /system/etc). Folder ini juga sangat banyak dipakai oleh linux. Beberapa aplikasi juga menggunakan /var ... cek apakah sudah dipakai oleh si Android. Kalau sudah, kita bikin saja link, misalnya /var/lib ke /data/var/lib atau /cache/var/lib ... dan beberapa /var/xxx lain sesuai kebutuhan.

# mkdir -p /data/arm64/var/lib
# mkdir -p /var/lib
# ln -s /data/arm64/var/lib /var/lib


OK ... langkah persiapan sudah cukup. Sekarang tahap yang agak rumit, yaitu mencari tau, library apa yang dipakai oleh si aplikasi native yang ingin kita copy. Kalau Anda bisa akses terminal linux / armbian aslinya, coba gunakan command : readelf -a nama_aplikasi | grep NEEDED. Nanti akan ada library apa saja yang dibutuhkan. Yang paling utama adalah library ld-linux ...

(Salah satu contoh kasus saya) Untuk armbian 64bit (aarch64 armv8), file ld-linux yang dibutuhkan adalah ld-linux-aarch64.so.1 ... sedangkan arm 32bit (armv7 dll), butuh ld-linux-armhf.so.3 atau ld-linux-arm.so.3 ... atau silakan periksa di folder /lib asli armbian-nya. File ld-linux-xxxxx ...

Copy file ld-linux tersebut ke Android, di folder /lib bikinan kita.
Setelah itu, copy file native / binary linux/armbian yang ingin kita coba jalankan di Android ke folder /usr/bin (biar ngumpul). Contohnya, kita akan copy htop. Tambah mode eksekusi untuk kedua file tersebut (chmod +x /lib/ld-linux-xxx dan /usr/bin/htop).

# cp /arm64/lib/ld-linux-aarch64.so.1 /lib
# cp /arm64/usr/bin/htop /usr/bin


Selanjutnya, jalankan file htop tadi. Jika beruntung, langsung bisa jalan ... tapi kemungkinan besar akan muncul error. Karena dia butuh banyak library. Cari library tsb di linux/armbian aslinya, lalu copy ke Android di folder /lib atau /usr/lib (tergantung lokasi aslinya di linux). Kalau aslinya dia ada di /lib copy juga ke /lib ... selain itu, copy saja ke /usr/lib.

Jalankan lagi htop, dan cek lagi error-nya. Begitu seterusnya, sampai semua file library yang dibutuhkan tercopy ke Android, dan htop bisa jalan dengan baik.

Saran saya, aplikasi/binary pertama yang perlu kita copy ke Android adalah readelf dan strace. Karena mereka akan sangat bermanfaat untuk proses copy binary-binary yang lain, terutama strace.

Dengan metode ini, semua aplikasi yang jalan di linux, Insya Allah akan jalan di Android (kecuali yang memang gak jalan, karena butuh struktur folder yang sangat specific dan lebih rumit).

Ada beberapa aplikasi yang butuh akses socket/internet, atau akses ke DNS resolv ... mereka perlu penanganan tambahan, yaitu penambahan user/group ke file /etc/passwd /etc/group, dan DNS resolv di /etc/resolv.conf ...

Selanjutnya ... kalau ingin menjalankan aplikasi2 tersebut pada saat proses booting Android, tinggal kita cari shell script yang dijalankan oleh si Android pada saat booting, lalu kita tambahkan script kita sendiri disitu. Proses booting bisa macem-macem, tergantung device Android yang kita pakai. Cari di /etc/rc.d atau script /init si Android.

Selamat mencoba,
Semoga bermanfaat.

Thursday, July 18, 2019

Menjalankan Armbian (OS linux berbasis ARM) di Android

ARMBIAN bisa jalan di STB ANDROID, tanpa perlu menghapus android-nya.
Caranya?

Burn salah satu image armbian ke sdcard (download dari armbian.com ... pilih yang sesuai dengan arsitektur device Android Anda, misal B760H => armv7l 32bit, cocok dengan image-nya NANOPI, B860H/HG680P armv8 64bit, gunakan image aarch64, dsb) ==> STB 64bit bisa digunakan untuk menjalankan OS linux yang 32bit. Belum dicoba kalau sebaliknya, kayaknya sih gak bisa ...

Connect ke STB pada mode root (terserah mau pake adb, TTL, putty, terminal, dsb) :

# mount -o rw,remount /
# mkdir /armbian
# mount
--> lihat hasil mount-nya, cek yang /dev/block/vold/public: ...
--> di saya /dev/block/vold/public:179,129 ... tambah 1 (untuk partisi linux-nya)
# mount -t ext4 /dev/block/vold/public:179,130 /armbian
# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin:$PATH
# for f in dev dev/pts proc sys ; do mount -o bind /$f /armbian/$f ; done
# export TMPDIR=/tmp
# export HOME=/armbian

Pertama kali menjalankan armbian di Android, lakukan langkah-langkah ini:

# chroot /armbian /bin/bash -l
# rm /etc/resolv.conf
# echo "nameserver 8.8.8.8" > /etc/resolv.conf
# groupadd -g 3003 inet
# groupadd -g 3004 net_raw
# usermod -a -G inet,net_raw root
# usermod -g 3003 _apt
# exit

Jika sudah pernah, langsung saja lakukan ini (gak perlu lagi langkah no.3)

# chroot /armbian /bin/su - root 

Cara ini cocok buat kita yang tidak mau kehilangan Android untuk keperluan nonton TV, streaming, main game, dsb ... tetapi ingin memiliki perangkat console berbasis LINUX (misalnya untuk keperluan compile, running aplikasi di level command-line, dsb). 1 STB multi-fungsi.

Catatan :

  • karena booting STB dalam mode Android, maka beberapa module yang dibawa oleh image OS yang kita pasang, tidak akan diload. Kalau mau coba, ya load secara manual (insmod/modprobe). 
  • cara ini juga bisa dipakai untuk mencoba OS linux apa-pun (bukan hanya armbian).


Semoga bermanfaat.

Referensi : googling “chroot android”


Oprek-Oprek STB Jadul ZTE B700 B700V5

STB B700v5 saat ini kayaknya sudah menjadi barang "jadul". Silakan searching di tempat-tempat jualan online, harganya lumayan murah. Apalagi kalau Anda bisa ketemu penjual offline, harganya bisa hanya 10rb. Menarik untuk di-oprek.

Kalau dibongkar, dalemannya kira-kira seperti ini :



Bahan-bahan untuk oprek-oprek STB ini cukup simple, yaitu USB-to-TTL lengkap dengan kabel jumpernya. Untungnya koneksi serial B700 ini sudah dilengkapi dengan pin di motherboardnya, jadi kita gak perlu nyolder-nyolder lagi pasang pin. Ssst ... info rahasianya adalah : hanya chipset cp2102 yang bisa nyambung ke B700. Chip-chip lain, sudah saya coba, gak bisa. Mungkin Anda berhasil ... silakan dicoba.