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.

Download secara terdistribusi

Apa tu? intinya kalau kita punya benwit gede, punya kompi banyak dan masing-masing punya ip publik, lalu ingin donlod dari tempat yg menerapkan membatasan per IP, mengapa kita tidak mendistribusikan proses donlod itu? =D

Kodingan bisa dilihat di proyek iseng di github saya. Ada 2 file di situ yg dipake.

File pertama, donlod dipake tuk mengambil URL yg ditujukan tuk sebuah mesin dan mendownloadnya. Kalau udah selesai, hasil donlodan dikirim ke sebuah mesin tertentu.

File kedua, donlod-start dipake tuk mendistribusikan URL (alias menjalakan file pertama) ke mesin-mesin pekerja yang ada.

Daftar URL disimpen di $HOME/list yang isinya punya format kaya begini.

nama-mesin-satu http://url.satu/file.nya
nama-mesin-dua http://url.dua/file.nya
...

yaya.. itu saja =D