Libc hilang
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...
|