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.

Tunnel koneksi

Sebagai pengembang BlankOn, maka salah satu server yang sering saya dikunjungi adalah yeyen alias irgsh alias dev.boi. Namun, mengakses server itu dari sini perlu ditemani oleh sebungkus indomie yang belum dimasak sehingga bisa masak sambil nungguin koneksi beres xD Ini apa koneksi Internet di Belanda kurang cepet tuk ngakses mesin tsb? Di Finlandia kabarnya juga seperti itu =P

Untungnya saya punya akses yang lumayan cepat ke sebuah mesin yang punya koneksi lumayan cepat ke mesin yeyen.. Dengan kata lain, ada mesin perantara yang punya koneksi lumayan ke saya dan yeyen. Hal ini berarti saya bisa menggunakan mesin tersebut untuk dijadikan tukang ojek seluruh data yang mau saya kirim/terima ke/dari mesin yeyen =D

Kalau mau mengakses layanan http dengan browser, saya biasanya membuka tunnel via ssh dengan menggunakan socks proxy. Sintaksnya kira2 seperti ini.

$ ssh -D12345 mesin.perantara

Port 12345 adalah port dari socks proxy yang akan digunakan. Browser tinggal diatur agar menggunakan socks proxy pada port tersebut supaya koneksi dilewatkan melalui mesin perantara.

Namun.. berhubung koneksi dari tempat saya itu sudah cukup cepat tuk mengakses situs2 lainnya, mengapa seluruh koneksi harus dilewatkan ke mesin perantara terlebih dahulu? Maka dari itu, akan lebih baik apabila kita bisa memilah-milih koneksi mana yang mau dilewatkan atau langsung.

Konfigurasi proxy di browser Firefox yang saya gunakan hanya bisa membuat pengecualian situs mana yang tidak dilewatkan melalui perantara. Yang saya inginkan adalah kondisi sebaliknya dimana saya ingin menentukan situs yang ingin dilewatkan melalui perantara. Untungnya, Firefox mendukung fasilitas konfigurasi proxy otomatis sehingga saya bisa mengatur lewat konfigurasi yang ini.

Caranya adalah dengan membuat berkas skrip konfigurasi proxy otomatis seperti yang berikut ini.

function FindProxyForURL(url, host) {
   if (shExpMatch(url, "*dev.blankonlinux.or.id/*") ||
       shExpMatch(url, "*irgsh.blankonlinux.or.id/*") ||
       shExpMatch(url, "*yeyen.blankonlinux.or.id/*") ||
       shExpMatch(url, "*cecunguk.blankonlinux.or.id/*") ||
       shExpMatch(url, "*.ubuntu-id.org/*")) {

      return "SOCKS 127.0.0.1:12345; DIRECT";
   }

   return "DIRECT";
}

Seperti yang tertulis di atas, koneksi ke beberapa situs akan dialihkan melalui SOCKS proxy di 127.0.0.1 port 12345. Jika proxy tersebut tidak tersedia (misalnya saya belum membuka koneksi tunnel tsb), maka koneksi langsung tanpa proxy (DIRECT) akan dibuat. Untuk koneksi menuju situs selain yang disebutkan di sana, koneksi langsung akan digunakan.

Simpan skrip di atas ke dalam sebuah berkas, misalnya proxy.pac. Lalu tunjuk berkas tersebut dari kolom pengaturan konfigurasi otomatis, misalnya file:///Users/iang/Sites/proxy.pac. URL tersebut akan menunjuk ke berkas yang ada di /Users/iang/Sites/proxy.pac. Silakan disesuaikan sendiri.

Urusan dengan koneksi http/https bisa dianggap sudah selesai. Namun, saya juga masih harus dapat mengakses mesin yeyen melalui koneksi ssh, misalnya untuk mengirim perubahan pada cabang Bazaar yang ada di mesin yeyen. Bagaimana supaya koneksi bisa dilewatkan melalui mesin perantara juga? tentu saja melalui tunneling =D

Caranya kira2 seperti ini.

$ ssh -L2222:yeyen.blankonlinux.or.id:22 mesin.perantara

Dengan menjalankan perintah tersebut, maka di mesin kita sendiri (lokal = L) akan dibuka port 2222 dimana koneksi menuju port tersebut akan diteruskan ke mesin yeyen.blankonlinux.or.id port 22 melalui si mesin.perantara.

Dengan ini, saya bisa menggunakan port tersebut saat mengirim perubahan pada cabang Bazaar. Misalnya seperti berikut.

$ bzr push bzr+ssh://[email protected]:2222/bzr/meuligoe/firefox/

Yayyaa.. begitulah kira2.. silakan dicoba2 sendiri =P