2009/01/29

Membuat sistem sekunder sebagai rescue-system

Lebih dari setahun yang lalu saya buat artikel ini lalu saya kirimkan ke InfoLinux, tentu dengan harapan akan dimuat dan saya dapet honor, hehe. Tapi sampai saat ini tidak ada berita apakah artikel ini akan dimuat atau tidak.

Yah, berhubung saya punya media publikasi sendiri (tapi ga ada duitnya), disertai dengan niat baik berbagi pengalaman dan ilmu, dan kekosongan ide dalam menulis blog, maka saya post aja artikel ini di sini. Ada sedikit kalimat yg diubah (dikiiit banget) supaya tulisan ini tidak terlalu terkesan formal.

Tulisan ini murni dari kepala saya sendiri. Jadi kalau ada tulisan yg mirip, saya yakin itu karena kebetulan.


===


Membuat sistem sekunder sebagai rescue-system
Dudi Indrasetiadi

Memiliki server yang disimpan di datacenter milik sendiri --di dalam negeri-- atau setidaknya dekat dan mudah dijangkau, memang lebih nyaman jika kita melihat dari sisi kemudahan pengelolaan. Tidak ada masalah jika suatu saat harus melakukan instalasi ulang atau boot ke single-user mode untuk membetulkan beberapa parameter di file konfigurasi jika server gagal boot secara normal. Tapi kendala bandwidth di dalam negeri yang sangat mahal dan terbatas membuat banyak pengelola server lebih memilih menyimpan (menyewa) server di datacenter yang berada di luar negeri.

Keuntungan bandwidth yang relatif murah di luar negeri harus dibayar dengan kesulitan pengelolaan server karena kita tidak bisa melakukan kontak langsung secara fisik dengan server. Yang berarti kita hanya bisa melakukan perbaikan jika kemampuan networking server tersebut aktif. Jadi bagaimana kalau mau instal ulang?

Beberapa datacenter terkenal bersikap kurang ramah dengan membebankan biaya yang tidak murah jika kita meminta mereka untuk melakukan instalasi ulang OS. Bila pada awalnya kita mengutamakan kesederhanaan dengan hanya membuat satu partisi untuk keseluruhan sistem, kemungkinan besar akan ada biaya tambahan lagi untuk menyelamatkan data sebelum instalasi OS dilakukan.

Tulisan ini menceritakan pengalaman sehari2 saya dalam pembuatan rescue-system di server yang menggunakan Debian GNU/Linux 4.0 (etch). Rescue-system yang dimaksud di sini adalah sebuah sistem baru yang sangat minimal, yang terpisah dari sistem utama. Kita hanya butuh supaya sistem ini bekerja dan bisa dikendalikan dari jauh (SSH) untuk bisa melakukan maintenance lebih lanjut. Akan lebih baik jika sistem baru ini dibuat pada awal-awal pengaturan server, pada saat sumberdaya penyimpan data belum terlalu banyak terpakai.

Sebetulnya ada banyak cara lain untuk menginstal sebuah sistem yang berada di partisi yang tidak sama dengan sistem yang sebelumnya telah bekerja, tapi untuk satu tulisan satu cara aja, ya. Diharapkan dengan adanya rescue-system ini, biaya yang dikenakan oleh pihak datacenter untuk instalasi ulang sistem operasi bisa ditekan.

1 Siapkan partisi untuk rescue-system

Sebagian besar langkah yang dilakukan adalah memanfaatkan utilitas managemen paket program dari Debian yaitu apt-get. Oleh sebab itu, sebelum memulai semua proses yang dituliskan di bawah ini, pastikan anda telah mengeset konfigurasi source apt ke mirror yang bisa diandalkan, baik dari segi kecepatan maupun kekinian versi program yang disediakan. Biasanya yang diperlukan oleh sebagian besar sistem Debian adalah repositori untuk sebuah versi archive dan versi update dari archive tersebut. Contoh isi file /etc/apt/sources.list adalah seperti ini:

deb http://dtp.archive.or.id/debian etch main contrib non-free
deb http://dtp.archive.or.id/debian-security etch/updates main contrib non-free


Jangan lupa untuk mengupdate index file disesuaikan dengan index yang ada di file di atas dengan perintah “apt-get update”.

1.1 Buat partisi
Karena kita akan menginstal sistem baru di partisi yang beda (terpisah) dari sistem utama, maka kita perlu sebuah partisi independen untuk diisi oleh sistem ini. Disarankan partisi untuk sistem ini berada pada harddrive yang berbeda dengan host-system. Misal host-system ada di drive pertama (sda), maka disarankan untuk menyimpan partisi rescue-system di drive ke-dua (sdb).

Siapkanlah sebuah partisi dengan ukuran sekitar 1-2GB untuk keperluan rescue-system ini. Utilitas fdisk, cfdisk, atau pemartisi yang lain akan sangat membantu. Misalnya dengan cfdisk:

# cfdisk /dev/sdb

Dan ikuti menu-menu yang ada di dalam program tersebut.

1.2 Format partisi
Selanjutnya, setelah partisi disiapkan, kita akan memformat partisi tersebut dengan filesystem yang didukung oleh linux. Disarankan untuk menggunakan filesystem yang sama dengan yang digunakan oleh host-system. Misal partisi yang telah disiapkan adalah sdb1, dan filesystem yang akan digunakan adalah ext3, maka perintah ini bisa digunakan:

# mkfs.ext3 /dev/sdb1

Jika proses format sudah selesai, mount-lah partisi tersebut ke direktori yang tidak digunakan. Buat saja direktori yang tidak biasa digunakan oleh sistem linux. Perintah berikut akan membantu:

# mkdir /reskyu
# mount /dev/sdb1 /reskyu


Selanjutnya kita akan mulai menginstall rescue-system.

2 Install base-system dengan debootstrap

Alat yang digunakan dalam proses ini bernama debootstrap. Debootstrap biasa digunakan untuk menginstal sistem Debian (atau turunannya, misal Ubuntu) di dalam sebuah sistem tanpa menggunakan CD instalasi. Bisa juga untuk membuat sebuah sistem lain yang nantinya bisa digunakan dengan chroot. Pada langkah-langkah yang ditunjukkan di bawah, akan terlihat bahwa kita menggunakan debootstrap untuk instalasi dan chroot untuk mengedit konfigurasi.

Pastikan paket debootstrap sudah ter-install di host-system. Perintah berikut akan menginstall paket yang dibutuhkan jika memang belum terinstall:

# apt-get -V install debootstrap

Jika sudah terinstal, maka proses bootsrap bisa segera dimulai. Petunjuk debootstrap lebih lengkap bisa dilihat di manual page debootstrap(8). Secara garis besar, perintah dan argumennya adalah seperti ini:

debootsrap $DISTRIBUSI $DIR_TARGET $URL_MIRROR

Jadi dalam kasus ini, perintah instalasi adalah sebagai berikut:

# debootstrap etch /reskyu http://archive.or.id/debian

Mirror yang digunakan bisa diganti dengan alamat mirror yang paling bisa anda andalkan. Tambahkan opsi --verbose jika ingin melihat log proses lebih lengkap. Ikuti terus prosesnya sampai muncul pesan bahwa proses instalasi telah selesai.

---cut---
I: Configuring tasksel-data...
I: Configuring sysklogd...
I: Configuring tasksel...
I: Base system installed successfully.


3 Konfigurasi rescue-system

Sistem baru ini, meskipun dalam banyak hal tidak berbeda dengan host-system, memiliki beberapa spesifikasi yang sangat beda dan harus diubah di file konfigurasi supaya sistem bisa di-boot dengan normal. Begitu pula dengan dengan beberapa paket yang wajib diinstall.

3.1 Konfigurasi wajib
Langkah selanjutnya adalah mengeset konfigurasi untuk sistem baru ini. Karena sistem yang baru diinstal ini diharapkan berjalan di mesin yang sama dengan host-system, dan fungsinya adalah untuk menggantikan host-system secara sementara, maka beberapa file konfigurasi sebaiknya disalin secara utuh.

3.1.1 /etc/network/interfaces
Perintah ini akan menyalin file konfigurasi networking dan resolver ke sistem yang baru diinstal:

# cp -av /etc/network/interfaces /reskyu/etc/network/
# cp -av /etc/resolv.conf /reskyu/etc/


Atau bisa juga dengan membuat file /etc/network/interfaces yang baru di dalam sistem baru. Bisa dengan meniru template berikut ini (boleh copy-paste), ubahlah nilai IP dengan yang sebenarnya. Perhatikan bahwa contoh di bawah ini bisa saja berbeda dengan konfigurasi host-system milik anda.

# awal file /etc/network/interfaces
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 167.205.4.23
netmask 255.255.0.0
network 167.205.0.0
broadcast 167.205.0.255
gateway 167.205.22.123
dns-nameservers 167.205.0.101
dns-search localdomain
# akhir file /etc/network/interfaces


3.1.2 Sesuaikan konfigurasi apt
Salinlah konfigurasi apt dari host-system ke sistem baru. Ini adalah cara yang paling mudah.

# cp -av /etc/apt /reskyu/etc

3.2 Konfigurasi di dalam chroot
Untuk file konfigurasi lain bisa dilakukan setelah masuk ke dalam sistem baru. Yang pertama harus dilakukan adalah chroot ke dalam direktori yang telah diinstall sistem linux.

# chroot /reskyu

Lanjutkan dengan mounting /proc

% mount -tproc proc /proc

3.2.1 /etc/fstab
Pastikan direktori root untuk sistem ini dinyatakan dengan benar di file /etc/fstab. Dan beberapa entri lain bisa meniru host-system. Contohnya isi /etc/fstab adalah seperti ini:

#awal file /etc/fstab
proc /proc proc defaults 0 0
/dev/sdb1 / ext3 errors=remount-ro 0 1
/dev/hdb /media/cdrom0 auto user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
#akhir file /etc/fstab


Nama device di atas kemungkinan besar berbeda dengan nama device di PC lain, sesuaikan dengan keadaan di PC anda sendiri. Entri lain bisa ditambahkan sesuai dengan kebutuhan.

3.2.2 Update repositori apt
Setelah itu, lakukan perintah berikut untuk meng-update cache repositori.

% apt-get update

3.2.3 Instal kernel linux
Sistem baru ini juga membutuhkan kernel lengkap dengan modul yang semuanya harus ada di dalam struktur file sistem ini. Instalasi kernel bisa dilakukan dengan apt-get. Jangan lupa utnuk menggunakan versi kernel terbaru dan yang sesuai dengan arsitektur mesin server.

% apt-get -V install linux-image-2.6.18-4-k7

Mungkin akan ada banyak dialog yang menanyakan apakah kita yakin akan melakukan proses instalasi, pilih saja jawaban yang menunjukkan bahwa proses instalasi harus dilakukan. Selain itu juga mungkin akan ditemukan beberapa pesan warning mengenai locales. Silahkan merujuk ke bagian konfigurasi optional.

3.2.4 Instal server SSH
Sistem ini akan kita kendalikan dari jauh sehingga perlu ada servis yang mengizinkan kita log in ke dalam server. Instalasi ssh bisa dilakukan dengan perintah:

% apt-get -V install openssh-server

Pastikan supaya kita bisa log in sebagai root. Gantilah password root dengan perintah:

% passwd

Pastikan untuk memberi password yang mudah diingat tapi tidak mudah ditebak. Jika ingin lebih aman, lebih baik menggunakan otentikasi menggunakan ssh key.

3.3 Konfigurasi optional
Konfigurasi berikut akan berguna menghilangkan warning dan beberapa kemampuan lain. Namun tidak terlalu penting sehingga bisa dilewat. Ini juga dilakukan di dalam environement chroot.

3.3.1 Konfigurasi locales
Instalasi dan konfigurasi locales bisa dilakukan dengan perintah berikut:

% apt-get -V install locales
% dpkg-reconfigure locales


Pada kotak dialog, berhubung ini adalah sistem minimal, berikan saja jawaban bahwa yg ingin di-generate hanya locales en_US.*.

3.3.2 Instal GRUB
GRUB sebetulnya tidak dibutuhkan, karena yang akan digunakan adalah GRUB milik host-system. Tapi jika diperlukan, GRUB boleh diinstall untuk backup.

% apt-get -V install grub

3.3.3 Ganti nama host
Editlah file /etc/hostname dan /etc/hosts. Sesuaikan IP dan nama host dengan yang diinginkan.

% echo "rescue-system" > /etc/hostname
% echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
% echo "167.205.4.23 rescue-system.masterwebnet.com rescue-system" >> /etc/hosts


3.4 Konfigurasi bootloader keseluruhan
Instalasi dan konfigurasi rescue-system sudah selesai. Yang terakhir yang harus dilakukan adalah mengedit konfigurasi bootloader (GRUB) di host-system, berhubung bootloader inilah yang digunakan pada saat booting.

Keluarlah dari chroot:

% umount /proc
% exit

GRUB yang terinstal pada MBR server adalah GRUB dari host-system karena itu file konfigurasi yang diedit di bagian ini adalah file yang ada di host-system. Editlah file /boot/grub/menu.lst menjadi seperti berikut (perhatikan baris setelah kalimat "### END DEBIAN AUTOMAGIC KERNELS LIST"):

---cut---
initrd /boot/initrd.img-2.6.18-4-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

title Rescue
root (hd1,0)
kernel /boot/vmlinuz-2.6.18-4-k7 root=/dev/sdb1 ro
initrd /boot/initrd.img-2.6.18-4-k7


Pastikan device untuk root serta kernel command line sesuai dengan kondisi sistem baru anda. Contoh di atas, “root (hd1,0)”, artinya sistem baru ada di HD ke-dua partisi pertama.

4 Selesai

Jika semua telah selesai, dan yakin tidak ada konfigurasi yang terlewat, umount-lah partisi /reskyu. Atau lebih baik lagi, setelah di-unmount, hapus saja direktori /reskyu karena sudah tidak diperlukan.

Dengan ini selesailah sudah proses instalasi dan konfigurasi rescue-system. Jika suatu saat kita perlu memboot server dengan sistem rescue ini, kita tinggal mengirim tiket ke datacenter dan menyampaikan bahwa yang ingin kita boot adalah entri "Rescue". Setelah itu, proses maintenance bisa dilakukan sendiri tanpa campur tangan datacenter.

5 Rujukan

[1] Manual debootstrap

2009/01/21

Split dump mysql besar per-tabel dengan csplit

Pasti pernah dong ditugasi untuk impor file sql hasil dump ke database mysql baru. Sering lah, hay. Ya sering kalau buat yg berkecimpung di dunia itu. Kalau hidup di dunia lain, bisa pernah bisa engga.

Nah, kemaren suatu ketika ada file sql yang ukurannya 2GB. Kecil, lah, dibanding ukuran HD zaman sekarang. Tapi kebayang aja, untuk impor data sql segede itu pasti butuh memori dan CPU yang juga gede2an. Dengan naif, saya langsung aja impor itu file dengan perintah yang biasa,

mysql -u bigdb -p bigdb < bigdump.sql

alhasil, 5 jam berlalu tanpa ada kepastian apakah prosesnya akan selesai atau tidak. Dan terlalu males untuk melihat ukuran database yang telah tercipta setelah 5 jam itu.

Dengan hati yang ditabahkan, terpaksa kombinasi interupsi (ctrl-c) ditekan. Dan tabel terakhir dari proses impor tadi menggantung dengan status crashed.

Dulu pernah ngalamin hal mirip. Tapi waktu itu mysql langsung error ketika mengeksekusi baris tertentu (nomor baris diberitahu) dari file sql. Error disinyalir karena memori habis. Jadi dengan mudah saya split aja itu file dengan maksimum sekian baris per-file. Lancar.

Kali ini, selain ukurannya 4 kali lebih besar, saya juga tidak tahu harus splitting di mana. Errornya juga karena terpaksa diinterupsi, bukan karena memori yang habis. Google memberi informasi tentang bigdump.php untuk mengimpor database yang ukurannya amit2. Tapi teman mengonfirmasi bahwa hasil impor tidak lengkap.

Akhirnya, dipaksalah untuk melaksanakan ide untuk splitting file tersebut per-tabel. Kan di file dump database itu ada informasi (sintaks) untuk membuat tabel serta mengisikan data ke dalam tabel tersebut. Mudah diketahui, dalam file dump mysql tiap tabel diawali dengan tiga baris ini:

---
-- Table structure for table `contoh`
---


Nah sekarang, tinggal mencari cara untuk split file hasil dump mysql setiap kali baris itu ada (saya pilih baris ke-2 untuk penanda). Halah, harus ngoprek perl, nih. Secara si Aa bukan programmer. Yah, pablebuat, gugling dulu.

Dasar nasib lagi baik, nemuin halaman Spliting files with a regular expression. Di situ dia bilang bahwa skrip yang dibuat adalah untuk pengganti csplit. Iseng, saya cari di cache apt saya,

$ apt-cache search csplit
coreutils - The GNU core utilities


Weksssssss...!!! Ada di coreutils? Hihihi, malu sendiri, ternyata alat yang diperlukan sudah ada sejak dulu tanpa diketahui keberadaanya. Coreutils adalah salahsatu paket dari GNU yang wajib ada di distro linux.

Dan akhirnya, setelah sedikit baca2 manual untuk program ini, dibuatlah perintah untuk splitting file dump sql tersebut menjadi beberapa file dengan satu tabel per-file. Begini perintahnya:

csplit -f tabelsql. -n 3 bigdump.sql /^\-\-\ Table/ {*}

Output akan berupa tabelsql.000 dan seterusnya. Untuk opsi serta pattern yang saya pakai bisa dilihat penjelasannya di manual csplit.

Setelah displit, ya tinggal impor satu-per-satu. Yang bisa pake loop, silahkan pake, sederhana kok.

Distro2 linux emang dibuat untuk menjadi sesuatu yang sakti.

2009/01/16

Gaza won't go down

Ikut2an aja ah. Lumayan, gak ada aksi solidaritas lain yang bisa saya lakukan. Jadi setidaknya saya ikut mendukung artis yang menyuarakan perdamaian ngasih semangat buat para korban di Gaza (belegug nya urang teh). Lagu bisa diunduh dari rujukan utama.

Rujukan asli: http://www.michaelheart.com/Song_for_Gaza.html
Dan ribuan blog/situs lain yang telah menyebarkan lagu/puisi ini sejak beberapa hari lalu.

WE WILL NOT GO DOWN (Song for Gaza)
(Composed by Michael Heart)
Copyright 2009

A blinding flash of white light
Lit up the sky over Gaza tonight
People running for cover
Not knowing whether they’re dead or alive

They came with their tanks and their planes
With ravaging fiery flames
And nothing remains
Just a voice rising up in the smoky haze

We will not go down
In the night, without a fight
You can burn up our mosques and our homes and our schools
But our spirit will never die
We will not go down
In Gaza tonight

Women and children alike
Murdered and massacred night after night
While the so-called leaders of countries afar
Debated on who’s wrong or right

But their powerless words were in vain
And the bombs fell down like acid rain
But through the tears and the blood and the pain
You can still hear that voice through the smoky haze

We will not go down
In the night, without a fight
You can burn up our mosques and our homes and our schools
But our spirit will never die
We will not go down
In Gaza tonight

=====

Siap2 aja bikin salinan lagu atau bahkan halaman situs kang Michael. Mungkin (saya harap tidak), pihak2 yang tidak suka pada hal ini akan mengambil tindakan tidak terpuji.

2009/01/13

Setelah Irak, Turki-kah?

Baca berita tentang Hacker Pro-Palestina Gempur Situs NATO dan Militer AS, kok saya jadi punya pikiran kayak gini ya: mungkinkah target negara boneka AS berikutnya adalah Turki?

Andai Irak belum jadi negara boneka AS, saya yakin rudal SCUD sudah ditembakkan ke arah Israel sejak hari pertama pembantaian Gaza oleh Israel dua minggu yang lalu. Sayang, pembela Timur Tengah itu sudah lumpuh.

Tapi ditengah2 ketidakberdayaan "seluruh dunia" atas kelakuan Israel, hacker2 Turki mulai melakukan aksinya. Serangannya juga jelas ditujukan ke poros "penguasa dunia" saat ini: AS-Israel. Target serangan adalah situs2 besar yang mestinya cukup membuat malu pihak penguasa.

Makanya saya jadi mikir, mungkinkah target negara boneka AS berikutnya adalah Turki?

2009/01/08

Ten things I don't even know about someone inside me

Pengen nulis blog, tapi ga ada ide. Jadi kita coba menjawab tag dari ninja2 teman baikku Dewi Mey dan Neng Sari Puspita.

Yah inilah, 10 hal yang aku-sendiri-tak-tahu-kebenarannya tentang seseorang di dalam diriku(maklum berkepribadian majemuk):
  1. Idiot
  2. Culun/norak
  3. Angkuh
  4. Mediocre
  5. Sensitif/tidak sensitif bergantian secara plin-plan
  6. Penidur yang akut
  7. Chauvinist sejati
  8. Pendendam
  9. Mata keranjang
    ...
  10. Kassseeepppphhhh (ganteng, cute, handsome, pokoknya keren)


Maaf tidak disertai penjelasan. Saya kuatir kalau terlalu diekspos. Kalau ada yang ingin tahu, kemarilah, kenali diriku dari dekat. Datanglah ke pelukanku (khusus cewek cantik, lajang, dan usianya ga jauh beda)


Ah, tidak perlu ngetag orang lain. Toh tulisan ini tidak banyak yg baca. Ini juga dijawab karena yang ngetag cewek2 cakep, kalau engga mah kagak usah.