Create time: 8 Mei 2007
Last edit: –
Sistem: Debian 4.0
Sedang dialami saat ini ? Saat mengubah sebuah server remote dari Kanotix ke Debian stable dengan “apt-get dist-upgrade”, libc hilang (ter-remove lalu proses stop karena semua perintah menjadi gagal).
Kita perlu mentransfer libc dulu secara manual ke /lib…
Tapi bagaimana cara mentransfer file? Scp gagal, tidak bisa mentransfer file ke server. Tidak bisa melakukan dpkg, apt-get, wget, lynx, ftp dll dari server untuk mengambil file dari tempat lain. Bahkan perintah-perintah dasar seperti cp, ls, rm, mv, mkdir, semuanya gagal!
Untungnya, ada busybox sehingga perintah-perintah dasar dapat memakai versi busybox ini.
Lalu… ada satu session SSH yang masih hidup! Teorinya, kita dapat melakukan transfer file dengan kopi paste ?
Kita dapat membuat menjalankan deretan perintah ini di server:
> /si/file echo "\0\234\023\0\0\0\377\222..." >> /si/file echo "\021\057\377\370\0\0\111..." >> /si/file ...
Deretan byte ini adalah isi dari /si/file. Bisa kita generate dari komputer kita sendiri sbb:
$ perl -le' open F, "/si/file"; print ">/si/file"; while(1){ read F,$buf,100; last if length($buf)==0; print "echo -ne \"", (map {ord($_)==0 ? "\\0" : sprintf("\\%03o",ord($_)) } split("",$buf)),"\">>/si/file"; }' >/tmp/script.sh
Lalu script.sh ini kita “paste”-kan dari komputer kita ke session SSH server remote. Asumsi menggunakan program terminal Konsole:
#!/usr/bin/perl sub esc { local $_=shift; s/'/'"'"'/g; "'$_'" } open F, "/tmp/script.sh"; $|++; while (<F>) { chomp; system "dcop konsole-9732 session-6 sendSession ".esc($_); system "sleep 0.02"; print "line $i ...\n" if $i++ % 10 == 0; }
konsole-9732 diganti dengan session Konsole (bisa dicari dengan perintah “dcop”). session-6 diganti dengan session SSH remote server yang sebenarnya (bisa dicek dengan perintah “dcop konsole-9732”).
Bersabarlah sejenak. File yang agak besar (ratusan KB) bisa beberapa menit ditransfernya. Serasa zaman BBS ?
Setelah itu, di session SSH remote server, tinggal “busybox chmod +x /si/file” (jika ini program atau librari). Demikianlah proses upload menggunakan Konsole ?
File apa yang sebaiknya ditransfer pertama kali menggunakan cara Konsole ini? Saran saya, wget-static. Build-lah wget-static dulu di komputer sendiri dengan cara:
- ambil source wget mis dengan “apt-get source wget” atau ekstrak tarball wget.
- jalankan perintah “LDFLAGS=–static ./configure && make”. Hasil kompilasi nanti ada di src/wget.
Setelah kita memiliki wget, mengambil file dari remote server menjadi lebih mudah…
Saran berikutnya untuk dikirim ke server: strace-static. Buildlah dan transfer ke server, kali ini bisa menggunakan wget-static yang telah dikirim sebelumnya ke server dengan “susah payah” :-).
Dengan strace, lebih mudah mencari librari apa yang masih missing. Dan mengkopikannya ke server.
Setelah libc tertransfer, saran saya buatlah dpkg dan apt-get bekerja lagi. Lalu lanjutkan dengan Debian Way dari situ.