(업데이트: 현재 tar는 시스템에 알려진 변경 사항 없이 세그폴트 없이 작동합니다. 하지만 "rm" 명령은 이제 세그폴트가 발생합니다. 아아! 어쩌면 ESXi로 인해 발생한 것일 수도 있고 하드웨어 때문일 수도 있습니다.)
VMWare ESXi에서 실행되는 Centos 5.3 시스템이 있습니다. 꽤 오랫동안 별 문제 없이 잘 돌아가고 있습니다. 그러나 최근에는 tar 명령과 rpm 명령을 실행할 때 분할 오류가 발생한다는 사실을 발견했습니다.
그래서 나는 strace를 사용해 보았고(누군가가 온라인에서 이것을 제안한 것을 발견했습니다) 아래는 strace를 사용할 때 얻은 것입니다. 시스템을 복구하는 방법과 앞으로 이런 일이 발생하지 않도록 방지할 수 있는 방법을 알고 싶습니다.
미리 감사드립니다!
출력:
[root@wagon init.d]# strace -f rpm execve("/bin/rpm", ["rpm"], [/* 20 변수 */]) = 0 brk(0) = 0x9e98000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (해당 파일이나 디렉터리가 없음) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=51424, ...}) = 0 mmap2(NULL, 51424, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f79000 닫기(3) = 0 open("/usr/lib/librpm-4.4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\ 257\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=378528, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f78000 mmap2(NULL, 588416, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xd43000 mmap2(0xd9d000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x59) = 0xd9d000 mmap2(0xda1000, 203392, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xda1000 닫기(3) = 0 open("/usr/lib/librpmdb-4.4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\307\ 1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1134540, ...}) = 0 mmap2(NULL, 1139296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x627000 mmap2(0x739000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x111) = 0x739000 mmap2(0x73d000, 608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x73d000 닫기(3) = 0 open("/lib/libselinux.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0005\ 0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=91892, ...}) = 0 mmap2(NULL, 97112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xc25000 mmap2(0xc3b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15) = 0xc3b000 닫기(3) = 0 open("/usr/lib/librpmio-4.4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\276 \0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=396276, ...}) = 0 mmap2(NULL, 540192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb64000 mmap2(0xbc3000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5e) = 0xbc3000 mmap2(0xbc6000, 138784, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xbc6000 닫기(3) = 0 open("/usr/lib/libpopt.so.0", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\ 20\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=29008, ...}) = 0 mmap2(NULL, 31856, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7c5000 mmap2(0x7cc000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0x7cc000 닫기(3) = 0 open("/usr/lib/libsqlite3.so.0", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340= \327\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=385180, ...}) = 0 mmap2(0xd6a000, 387072, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x110000 mmap2(0x16d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5c) = 0x16d000 닫기(3) = 0 open("/usr/lib/libelf.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\35\ 0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=87508, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f77000 mmap2(NULL, 90296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x9cf000 mmap2(0x9e4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14) = 0x9e4000 닫기(3) = 0 오픈("/lib/libm.so.6", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0204\ 0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=206380, ...}) = 0 mmap2(NULL, 155760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x16f000 mmap2(0x194000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x24) = 0x194000 닫기(3) = 0 open("/usr/lib/libz.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\ 245\303\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=75028, ...}) = 0 mmap2(0xc39000, 76400, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x196000 mmap2(0x1a8000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11) = 0x1a8000 닫기(3) = 0 open("/usr/lib/libnss3.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0mr\ 0054\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1306252, ...}) = 0 mmap2(0x5714000, 1310584, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x5714000 mmap2(0x584e000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x139) = 0x584e000 닫기(3) = 0 open("/usr/lib/libplds4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\312\ 205\0054\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=11460, ...}) = 0 mmap2(0x585c000, 8672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x585c000 mmap2(0x585e000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2) = 0x585e000 닫기(3) = 0 open("/usr/lib/libplc4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360m\ 205\0054\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=15556, ...}) = 0 mmap2(0x5856000, 12744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x5856000 mmap2(0x5859000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0x5859000 닫기(3) = 0 open("/usr/lib/libnspr4.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\227\ 206\0054\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=228028, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f76000 mmap2(0x5861000, 232928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x5861000 mmap2(0x5897000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x36) = 0x5897000 mmap2(0x5898000, 7648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x5898000 닫기(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\n\ 0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=14644, ...}) = 0 mmap2(NULL, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2a7000 mmap2(0x2a9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x2a9000 닫기(3) = 0 open("/lib/librt.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\ 30\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=42048, ...}) = 0 mmap2(NULL, 33324, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7d0000 mmap2(0x7d7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0x7d7000 닫기(3) = 0 open("/lib/libpthread.so.0", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000H\0\ 0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=123596, ...}) = 0 mmap2(NULL, 90592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x1a9000 mmap2(0x1bc000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12) = 0x1bc000 mmap2(0x1be000, 4576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x1be000 닫기(3) = 0 open("/usr/lib/libbz2.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\ 17\364\0034\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=71852, ...}) = 0 mmap2(0x3f40000, 69128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3f40000 mmap2(0x3f50000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x10) = 0x3f50000 닫기(3) = 0 오픈("/lib/libc.so.6", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320_\ 1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1603392, ...}) = 0 mmap2(NULL, 1324452, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2ab000 mmap2(0x3e9000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13e) = 0x3e9000 mmap2(0x3ec000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3ec000 닫기(3) = 0 open("/lib/libsepol.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340\ 256\306\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=242880, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f75000 mmap2(0xc68000, 286624, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xc68000 mmap2(0xca3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3a) = 0xca3000 mmap2(0xca4000, 40864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xca4000 닫기(3) = 0 open("/lib/libgcc_s.so.1", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\26 \0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=44992, ...}) = 0 mmap2(NULL, 48036, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x435000 mmap2(0x440000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa) = 0x440000 닫기(3) = 0 open("/usr/lib/libnssutil3.so", O_RDONLY) = 3 읽기(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20\ 350o\0054\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=96764, ...}) = 0 mmap2(0x56fa000, 98028, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x56fa000 mmap2(0x570f000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14) = 0x570f000 닫기(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f74000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f73000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f736d0, 제한:1048575, seg_32bit:1, 내용:0, read_exec_only:0, 제한_in_pages:1, seg_not_present:0, 사용 가능:1}) = 0 mprotect(0x3e9000, 8192, PROT_READ) = 0 mprotect(0x1bc000, 4096, PROT_READ) = 0 mprotect(0x7d7000, 4096, PROT_READ) = 0 mprotect(0x2a9000, 4096, PROT_READ) = 0 mprotect(0x194000, 4096, PROT_READ) = 0 mprotect(0xff9000, 4096, PROT_READ) = 0 문맵(0xb7f79000, 51424) = 0 set_tid_address(0xb7f73718) = 5604 set_robust_list(0xb7f73720, 0xc) = 0 futex(0xbf9763c4, FUTEX_WAKE_PRIVATE, 1) = 0 rt_sigaction(SIGRTMIN, {0x1ad3d0, [], SA_SIGINFO}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x1ad2e0, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=10240*1024, rlim_max=RLIM_INFINITY}) = 0 uname({sys="Linux", node="wagon.localdomain", ...}) = 0 액세스("/etc/selinux/", F_OK) = 0 brk(0) = 0x9e98000 brk(0x9eb9000) = 0x9eb9000 open("/etc/selinux/config", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=511, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f85000 read(3, "# 이 파일은 o 상태를 제어합니다."..., 4096) = 511 읽기(3, "", 4096) = 0 닫기(3) = 0 문맵(0xb7f85000, 4096) = 0 open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f85000 read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 4096) = 587 읽기(3, "", 4096) = 0 닫기(3) = 0 문맵(0xb7f85000, 4096) = 0 --- SIGSEGV(분할 오류) @ 0 (0) --- +++ SIGSEGV에 의해 사망 +++ [root@wagon init.d]#
답변1
많은 조사 없이도 일부 프로그램이 세그폴트를 시작한 다음 다른 프로그램이 실패하기 시작하는 동안 올바르게 작동하기 시작했다는 설명에 따르면 메모리 모듈이 불량하거나 사전 링크가 끊어졌습니다.
먼저 모든 가상 머신을 중지하고 호스트를 재부팅한 후 메모리 테스트를 실행합니다. ESXi 외부에서 이 작업을 수행해야 합니다. 메모리 결함이 발견되면 그것이 문제입니다. 하드웨어를 교체하십시오.
메모리 결함이 발견되지 않은 경우 해당 아키텍처에 대해 CentOS에서 사용 가능한 최신 커널을 실행하고 있는지 확인하십시오.
호스트와 서버를 다시 부팅하고 서버를 단일 사용자 모드로 부팅하고(grub 커널 매개변수에 "single" 전달) 다음을 실행합니다.
prelink -avf
사전 연결이 완료되면 서버를 재부팅해야 합니다. 부팅을 재개 할 수도 있지만 telinit u && init 3
모든 바이너리가 새 메모리 매핑으로 다시 로드되도록 하려면 재부팅하는 것이 좋습니다.
답변2
이것은 추측이지만, se-linix를 끄고 작동하는지 확인해 보십시오.
segfault가 아니어야 하는데, tar가 생각지 못했던 se-linux 때문에 열리지 못하는 파일이 있을 수도 있습니다.
그렇지 않으면 tar용 소스 rpm을 설치하고 디버깅으로 빌드한 다음 디버거에서 실행하여 이유를 확인해야 합니다.
답변3
좋아요, 생각만큼 복잡하지는 않습니다. 서버가 손상되었고 천재 해커가 루트 키트 설치를 망쳤습니다. 따라서 그 영향은 바이너리 세그폴트였습니다. 또 다른 영향은 서버의 예상치 못한 네트워크 트래픽이었습니다. 응답해주신 모든 분들께 감사드립니다!
답변4
좋아요, 정말 재미있을 것 같네요.
첫째, 동일한 최신 상자 두 개가 있습니까(그 중 하나는 세그폴트가 아님)?
그렇다면 세그먼트 오류가 발생한 바이너리의 md5sum을 확인하여 동일한지 확인하세요.
다음으로, 실패한 바이너리에서 ldd를 실행한 다음 라이브러리에서 md5sum을 실행하여 서로 다른지 확인합니다.
이제 라이브러리가 동일하다고 가정하면 컴퓨터 환경이나 구성과 같은 다른 문제가 있을 수 있지만 추적을 통해 어떤 정보가 나오는지 살펴보겠습니다.
strace를 인용하면 끝 부분에 다음이 있습니다.
open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f85000
read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 4096) = 587
read(3, "", 4096) = 0
close(3) = 0
munmap(0xb7f85000, 4096) = 0
다음 줄은 segfault 메시지입니다.
내 CentOS 5.3 시스템(rpm 버전 4.4.2.3)에서 내 rpm은 즉시 다음을 수행합니다.
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=56458752, ...}) = 0
mmap(NULL, 56458752, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b36f9d01000
close(3) = 0
따라서 문제는 /proc/mounts를 읽은 후 메모리를 닫거나 /usr/lib/locale/locale-archive를 여는 데 있다고 생각합니다. munmap()이 0을 반환했기 때문에 로케일 트리를 확인했습니다.
덧붙여서, 구성에서 로케일을 제외하면 다음 블록 광산이 실행됩니다.
open("/usr/lib/rpm/rpmpopt-4.4.2.3", O_RDONLY) = 3
lseek(3, 0, SEEK_END) = 23100
lseek(3, 0, SEEK_SET) = 0
read(3, "#/*! \\page config_rpmpopt Defaul"..., 23100) = 23100
close(3)
행운을 빌며 찾은 내용을 알려주세요.