ld.so.preload에 관한 문의 입니다.
글쓴이: coco / 작성시간: 금, 2003/09/19 - 5:14오후
안녕하세요?
일좀 하다가 제가 실수한 것이 있어서 만회를 할려고 합니다.
도움을 부탁 드립니다.
다름이 아니라. 양방향 파이프 프로그램을 실행했는데, 예상치 않은 결과가 나와서 strace를 사용하여 system call을 trace 했더니, etc밑에 ld.so.preload 화일이 없기때문에 생기는 에러가 있어서 제가 그 화일을 만들어서 /usr/local/lib를 추가하였습니다. 그 폴더에는 공용라이브러리가 아닌 라이브러리를 제가 하나 복사했습니다. 그랬더니 시스템이 아무것도 못 하고 있습니다.
이 리눅스가 제 앞에 있는 것이 아니라서 single linux로 못 들어갑니다 그걸로 들어가면 해결할 수 있을까요?
아무런 명령어도 듣지 않는 군요.
해결방법좀 부탁 드립니다.
Forums:
/etc/ld.so.preload 를 작성할때 무언가 실수가 있는듯 하군
/etc/ld.so.preload 를 작성할때 무언가 실수가 있는듯 하군요.
프로그램 실행시 run time linker 를 필요로 하는 프로그램들은 실행할 수 없을것입니다. 거의 모든 프로그램이 그렇죠.
방법은 이미 떠 있는 프로세스를 통해서, /etc/ld.so.preload 를 지우는 것입니다. Bash 를 사용할 수 있다면,
echo "" > /etc/ld.so.preload
하시면 됩니다.
헉.
저랑 같은 실수를 하셨군요. 처음에 무진장 당황했던 기억이 나네요.
혹시나 다행히도 루트 셸이 어딘가에 이미 떠 있지 않다면 아마 아무 것도 하기 힘들 겁니다. su, ls, rm, 기타등등 대부분의 명령어가 모두 안 먹을 텐데다가 (전부 dynamic linking 쓰고 있을 겁니다) single 모드로 들어간다 해도 bash 셸 자체마저 제대로 안 떠서 소용 없었다고 기억하는데.
만일 이런 상황에 처하셨다면, 제가 해결했던 방법이 도움이 될까 싶어 적어둡니다.
우선, 부팅할 때에 커널에 init=/sbin/sash 파라미터를 줘서 부팅하세요. 제 경우는 GRUB 을 쓰고 있어서
kernel /boot/vmlinuz-2.4.20-20.8 ro root=LABEL=/ init=/sbin/sash
라고 해서 부팅했었습니다.
이 방식대로 하면 거의 커널 자체와 sash 만이 메모리에 올라갈 텐데, sash 는 dynamic linking 을 쓰지 않은 셸이기 때문에 말씀하신 상황에서도 잘 돕니다. 일부 응급복구에 필요한 명령어들은 내장하고 있기도 하고요.
다음은, 초기에는 하드가 read-only 로 마운트되어 있을 테니까 쓰기 가능 모드로 다시 마운트해야 합니다. 위에 말씀드렸듯이 sash 는 mount 명령 같은 응급복구에 절실히 필요한 명령은 내장하고 있기 때문에
-mount -m /dev/hda2 /
라고 하시면 (물론 사족입니다만, /dev/hda2 는 당연히 사용하시는 시스템에 맞게 바꿔줘야 합니다.) 하드를 쓰기 가능 모드로 다시 마운트해줍니다. (앞의 - 빼먹으시면 안됩니다. - 가 붙어 있는 건 sash 의 내장 명령이라는 얘기거든요.)
마지막으로, mushim 님 말씀대로 하시거나, 또는 제 경우처럼 ld.so.preload 파일을 아예 지워버리시면 됩니다. 지워버리실 경우라면, rm 조자도 아마 dynamic linking 때문에 동작 안 할 테니까
-rm /etc/ld.so.preload
하셔야 될 겁니다.
그냥 씨디 넣고 RESCUE로 부팅하세요.
레드햇이면 설치 씨디 넣고 rescue로 부팅하세요.
Debian이면 설치 씨디 넣고 부팅되면 Alt-F2 그 다음 부터는
mount 어쩌고...
다른 배포판은 써 보질 않아서 잘 모름...
그것도 귀찮으시면 syslinux 같은 것도 복구할 때는 괜찮습니다.
기럼....
댓글 달기