Realtek USB WiFi dongle on Pine64 with Debian

I have had a Pine64 since a while ago and just a few days ago I finally tried to turn it on! xD I plan to use it as a main home router since it has a gigabit ethernet.. well scrap that, I think I found a better device for that. Anyway, I still want to use it but now as another kind of (wireless) router that will route and bridge all my tiny bitty wireless devices based on ESP8266. I intentionally wanted to have them separated from the main home network.

So, also a while ago, I bought a USB wireless dongle because I didn’t buy the WiFi module from Pine64 guys. Apparently the dongle uses a Realtek chipset, RTL8188CUS. I plugged the device into my Pine64 and then.. nothing xD nothing showed up on the ifconfig -a device list. Ah, I used the Debian Base (Debian Base (3.10.102 BSP 2) to be precise) distribution for the Pine64 btw.

Google around, and I found a page on Debian Wiki that says I would need to have rtl8192cu module loaded. Sure enough, it’s not there. The search continued, this time with a more specific keyword. I then ended up on a GitHub page and looks like some is having a similar problem as mine. After trying here and there I finally made the device showed up! I haven’t configured it thogh.. but anyway.. here’s what I did.

  1. Apparently I had to upgrade the kernel of the Debian installed on the Pine64. It used to use Linux 3.10.65-7-pine64-longsleep. After the upgrade, it changed to 3.10.104-1-pine64-longsleep. What I had to do was just running the following command.

    $ sudo pine64_update_kernel.sh

    The script should come already with the distribution. It will download, verify, and install a new kernel. After it finished, you will be asked to restart the device.

  2. I tried to replug the USB dongle and nothing still showed up. I check the log using journalctl and found the following message.

    Nov 19 04:20:28 localhost.localdomain kernel: usb 2-1: new high-speed USB device number 3 using sunxi-ehci
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Chip version 0x10
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: MAC address: 01:23:455:67:89:0a
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Board Type 0
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: rx_max_size 15360, rx_urb_num 8, in_ep 1
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: Firmware rtlwifi/rtl8192cufw_TMSC.bin not available

    Looked like the kernel finally recognized the device but it could not continue to activate it because it did not have and could not load the suitable firmware.

    After I checked the GitHub page again, one comment there says I need to install a package named linux-firmware. So that’s what I did next.

    $ sudo apt-get install linux-firmware
  3. I then tried the dongle again.. now it seemed to be a success! If I typed ipconfig -a, I could see a new device albeit with a weird naming: wlx01234567890a.

So.. the setup can now continue. Hope this helps.

Log of Debian/Ubuntu packages

I have a plan to do a little research about packages in Debian and/or Ubuntu repositories. For this, I think I need a preferably complete log of packages that coming in and out of the repositories.

A friend of mine pointed me the following two mailing list archives where Debian and Ubuntu seem to be logging the packages.

If somebody knows the other sources, or if the above sources are unsuitable for the purpose I am looking for, please let me know 🙂

Ubuntu versi netinst

Debian punya satu tipe CD bernama netinst dapat digunakan untuk melakukan instalasi Debian secara minimalis. CD tersebut hanya berisi installer dan paket-paket dasar yang dibutuhkan untuk membangun sistem yang minimalis. Selain itu, ada juga versi business card yang hanya berisi installer sehingga akses ke repositori mutlak dibutuhkan untuk menginstal sistem, walau hanya melakukan instalasi minimalis.

Kedua jenis CD ini sangat berguna untuk melakukan instalasi sistem yang “bersih” dimana sistem hanya berisi paket-paket yang memang (pada umumnya) mutlak diperlukan saja. Dengan demikian, sistem dapat “dibangun” secara incremental dengan memasang paket-paket lainnya yang memang dibutuhkan. Sebagai contoh, jika ingin membangun sebuah web server, yang sebenarnya dibutuhkan kan hanya sistem dasar dan web server saja. Aplikasi lain yang tidak berhubungan sebenarnya (atau bahkan sebaiknya) tidak perlu dipasang.

Hari ini saya perlu memasang Ubuntu di dalam VirtualBox. Instalasi yang saya inginkan adalah instalasi yang super minimal seperti halnya yang dapat dihasilkan dengan menggunakan Debian versi netinst. Namun sayangnya Ubuntu tidak punya versi netinst sehingga saya harus menggunakan Ubuntu edisi server yang masih bisa digunakan untuk instalasi minimalis dengan tidak memasang paket-paket lainnya yang ditawarkan pada saat instalasi. Sayangnya lagi, saya sedang di kampus dengan koneksi wireless dan males nunggu 10-30 menit untuk mengunduh Ubuntu Server yang sekarang besarnya sudah sekitar 600MB.

Namun ternyata.. setelah Googling sedikit.. Ubuntu punya versi netinst! lebih tepatnya business card! Berkas ISO versi ini sangat kecil, hanya sekitar 20MB. CD ini hanya berisi installer dan paket-paket dasar yang perlu diinstal akan langsung diambil dari repositori.

Ada di manakah ISO CD Ubuntu versi super minimal ini? Memang sepertinya tidak ada keterangan resmi di website Ubuntu. Namun ada satu buah halaman wiki yang menerangkan hal ini. Silakan cek https://help.ubuntu.com/community/Installation/MinimalCD.

Halaman indeks menuju tempat mengunduh CD minimalis ini bisa dilihat di http://cdimage.ubuntu.com/netboot/. Pilih versi dan arsitektur yang diinginkan dan unduh berkas mini.iso. Ingat, Anda membutuhkan akses ke repositori untuk memasang Ubuntu versi minimalis dengan ISO CD ini.

Ah.. ternyata proses instalasi yang saya lakukan sambil menulis tulisan ini sudah hampir selesai.. sampai jumpa lagi! =D

Gerobak

Apa ini? singkatnya: apt-web yang lebih personal. Coba buka http://gerobak.dahsy.at/

Ada yang mau bantuin ngetes? Ada yang mau nyumbang sebuah VPS atau server beneran? Ada yang mau bantuin bikin?

Kok butuh VPS/server sendiri? Karena sepertinya Gerobak butuh sumber daya komputasi yang tidak kecil. Bisa bikin tetangga bahkan pemilik kontrakan ngomel2 kalau dipasang bareng-bareng dengan yang lain.

Kode sumber: http://github.com/fajran/gerobak. Lisensi: GNU AGPL 3

Konfigurasi Apache2 di Debian

Sebelum salah sangka, tulisan saya ini tidak menjelaskan cara mengatur Apache2. Namun membahas gaya atau pendekatan cara melakukan konfigurasi Apache 2 di Debian dan keluarganya. Silakan baca dokumentasi Apache 2 atau tutorial yang lain kalau Anda sedang mencari tahu bagaimana cara membuat/mengatur konfigurasi untuk Apache 2.

Oya, semua yang saya tulis ini hanya berasal dari pengamatan saya. Mohon koreksi jika ada yang salah.

***

Debian (dan turunannya) punya cara unik untuk mengatur virtual host di apache2. Konfigurasi apache2 yang normalnya ada pada berkas bernama httpd.conf diubah dan dipecah2 sedemikian sehingga menjadi fleksibel dan mudah diotomasi dengan skrip.

Konfigurasi utama apache2 di Debian bukanlah ada pada berkas httpd.conf, melainkan pada berkas apache2.conf yang terletak di bawah direktori /etc/apache2. Dari konfigurasi utama ini, berkas2 konfigurasi lainnya diikutsertakan (include) sehingga menjadi satu konfigurasi utuh. Berkas2 lainnya itu antara lain adalah

  • /etc/apache2/mods-enabled/*.load dan /etc/apache2/mods-enabled/*.conf yang isinya adalah konfigurasi untuk mengaktifkan modul dan konfigurasi untuk modul tersebut.
  • /etc/apache2/httpd.conf yang ditujukan tuk konfigurasi tambahan yang dibuat oleh sang admin.
  • /etc/apache2/ports.conf yang berisi daftar port yang ingin dibuka. Isinya tentu saja hanya baris2 konfigurasi dg keyword Listen
  • /etc/apache2/conf.d/[^.#]* yang isinya juga konfigurasi lain2 yg dipecah2 ke dalam beberapa berkas
  • /etc/apache2/sites-enabled/[^.#]* yang isinya adalah konfigurasi virtual host

Kalau ngeliat direktori /etc/apache2, maka di dalamnya akan terdapat pasangan direktori sites-available dan sites-enabled dan juga mods-available dan mods-enabled. Apa artinya “available” dan bedanya dengan “enabled” yang disebut dari konfigurasi utama apache2.conf?

Singkatnya begini. Yang berada di dalam direktori “available” adalah konfigurasi siap pasang sedangkan konfigurasi yang benar2 dipasang dan aktif berada di dalam direktori “enabled”.

Kalau ngeliat isi direktori “enabled”, maka Anda akan menjumpai symbolic link ke berkas-berkas yang ada pada direktori “available”. Ya, konfigurasi sebenarnya memang diletakkan di bawah direktori “available”. Dari sekian konfigurasi yang ada di bawah direktori tersebut, konfigurasi yang benar-benar dipakai akan “ditunjuk” atau “dipilih” dengan cara membuat symbolic linknya dari direktori “enabled”.

Sebagai contoh jika Anda ingin membuat konfigurasi sebuah virtual host. Maka buatlah sebuah berkas di dalam direktori sites-available yang berisi konfigurasi virtual host yang Anda inignkan. Jika sudah dan Anda ingin mengaktifkannya, buatlah symbolic link ke berkas tersebut dari dalam direktori sites-enabled.

Untuk lebih mempermudah pengaturan, Debian telah menyiapkan dua buah skrip untuk membantu urusan mengaktifkan dan menonaktifkan virtual host, yaitu skrip bernama a2ensite dan a2dissite (yang sepertinya berasal dari kalimat “apache 2 enable site” dan “apache 2 disable site”). Cara menggunakannya adalah seperti berikut ini.

$ sudo a2ensite nama-berkas-virtual-host

Begitu pula tuk urusan modul. Konfigurasi siap pakai berada di dalam mods-available dan yang dipakai ada dalam mods-enabled. Skrip pembantunya juga ada, yaitu a2enmod dan a2dismod.

Salah satu keuntungan dengan melakukan pemecahan berkas konfigurasi menjadi berkas-berkas yang lebih kecil adalah mempermudah otomasi. Sebagai contoh jika kita ingin menonaktifkan modul php5, maka kita cukup mengetikkan sudo a2dismod php5 dan reload apache2nya. Tidak perlu susah-susah mengedit berkas konfigurasi, mencari baris konfigurasi yang berhubungan dengannya, lalu melakukan penghapusan atau penambahan tanda komentar.

Selain itu, terkait juga dengan instalasi dan penghapusan paket yang berisi modul tuk Apache2, skrip instalasi tidak perlu susah-susah melakukan parsing konfigurasi yang ada untuk memasang atau menghapus konfigurasi yang terkait dengan modul tersebut. Karena pada dasarnya yang perlu dilakukan hanyalah menambah dan menghapus berkas pada direktori mods-available.

***

Gaya penanganan berkas konfigurasi yang dipecah-pecah seperti ini memang dapat membuat bingung “pendatang baru”. Namun, menurut saya, kalau sudah paham apa maksudnya, maka gaya seperti ini dapat membuat hidup lebih mudah =D

Mengunduh seluruh berkas dalam repositori Ubuntu

.. atau Debian .. atau BlankOn. Sama saja 🙂

Untuk menyalin sebuah repositori Debian (maupun turunannya) secara komplit, kita dapat menggunakan aplikasi rsync atau debmirror. Namun bagaimana jika kedua aplikasi tersebut tidak ada? Atau andai akses melalui rsync tidak diperkenankan?

Jawabannya adalah download saja dengan download manager kesukaan Anda!

Tentu saja download manager yang mampu membaca sebuah daftar berkas dalam bentuk URL dan mengunduh seluruh berkas yang terdaftar di sana. Saya biasa menggunakan wget, bagi Anda yang tukang download, pasti Anda tahu harus menggunakan apa 🙂

Namun, bagaimana cara mendapatkan daftar berkas tersebut? Mari kita pelajari caranya.

Dalam repositori Debian dan turunannya, terdapat sebuah berkas yang berperan sebagai daftar isi yang menyimpan seluruh informasi berkas/paket yang ada. Berkas ini bernama Packages dan Anda dapat menemui berkas ini dalam repositori pada direktori berikut.

http://server.repo/ubuntu/dists/[versi]/[komponen]/binary-[arsitektur]/Packages

Contohnya adalah

http://kambing.ui.edu/ubuntu/dists/intrepid/main/binary-i386/Packages

Ganti Packages menjadi Packages.gz kalau ingin mengunduh versi yang terkompresi dengan gzip.

Untuk mencari tahu versi, komponen, maupun arsitektur yang tersedia, buka saja direktori induknya. Nanti akan terlihat versi, komponen, dan arsitektur yang ada pada repositori tersebut. Misalnya untuk mencari tahu komponen yang ada pada Ubuntu Intrepid, Anda dapat membuka http://kambing.ui.edu/ubuntu/dists/intrepid dan melihat isinya. Ada empat buah subdirektori di saya, yaitu main, multiverse, restricted, dan universe.

Setelah mendapatkan berkas Packages, mari kita bongkar isinya untuk mendapatkan daftar berkas.

Berkas Packages adalah sebuah daftar isi paket yang ada dalam sebuah repositori. Setiap paket yang ada akan dituliskan deskripsinya di sana. Mulai dari nama paket, versi, ukuran berkas, lokasi berkas, sampai penjelasan (deskripsi) paket tertulis di sana. Kali ini, informasi yang kita butuhkan adalah lokasi berkas yang ditandai dengan Filename:

Setiap baris yang diawali dengan kata Filename: adalah informasi yang kita perlukan. Silakan gunakan fasilitas dalam teks editor yang Anda gunakan sehingga Anda dapat menghapus semua informasi/baris lain kecuali baris yang diawali dengan Filename:.

Jika sudah, Anda akan mendapatkan ratusan baris seperti contoh di bawah ini.

Filename: pool/main/a/abiword/abiword_2.6.4-4ubuntu4_i386.deb
Filename: pool/main/a/abiword/abiword-common_2.6.4-4ubuntu4_all.deb
...

Yang kita butuhkan adalah nama dan direktori berkas paket. Oleh karena itu, hapuslah kata Filename: pada awal baris dan sisakan nama berkas yang diawali oleh pool/.

Setelah itu, tambahkan alamat dasar repositori di depan nama direktori/berkas yang ada. Dua baris pada contoh di atas akan menjadi seperti berikut.

http://kambing.ui.edu/ubuntu/pool/main/a/abiword/abiword_2.6.4-4ubuntu4_i386.deb
http://kambing.ui.edu/ubuntu/pool/main/a/abiword/abiword-common_2.6.4-4ubuntu4_all.deb

Silakan gunakan repositori kesayangan Anda.

Selanjutnya? siapkan waktu luang dan pita Internet yang lapang untuk mengundung seluruh berkas pada repositori!

Oh iya, jangan lupa untuk mengunduh berkas dari seluruh komponen yang ada sehingga Anda dapat mendapatkan repositori yang lengkap. Untuk Ubuntu, Anda harus mengunduh berkas pada komponen main, universe, multiverse, dan restricted.

Oh iya lagi, cara yang ditulis ini hanya ditujukan jika Anda ingin mengunduh atau setidaknya mendapatkan seluruh nama berkas dalam sebuah repositori. Tidak ditujukan untuk membuat repositori lokal.

Jika Anda ingin membuat repositori lokal, aplikasi download manager yang Anda gunakan harus mampu merekonstruksi ulang direktori-direktori yang ada. Sehingga setiap berkas akan diletakkan pada direktorinya masing-masing sesuai dengan kondisi yang ada pada repositori. Selain itu, unduh juga berkas Packages dan letakkan pada direktori sesuai dengan yang ada pada repositori.

Jika aplikasi download manager Anda dapat melakukannya, maka selamat Anda telah membuat repositori lokal secara manual tanpa bantuan aplikasi khusus!

PS: Saya pernah membuat skrip kecil yang melakukan seluruh hal di atas secara otomatis. Silakan cek di arsip GitHub saya.