「名前解決
この機能はNSS
最近、
発端
時期を逸して本連載では紹介していなかったものの、
Plamo-7.
そろそろバージョンアップしておこうか、
Plamo Linuxでは、
configureやビルドの過程を眺めていても特にエラーはありませんし、
$ sudo updatepkg glibc-2.32-x86_64-B1.txz [sudo] kojima のパスワード: removing glibc-2.30 Removing package glibc... Removing files: --&lgt; Deleting symlink lib/ld-linux-x86-64.so.2 ... glibc-2.32-x86_64-B1 のインストールスクリプトを実行中 processing [ glibc ] ... glibc package initializing Replace /etc/ld.so.conf, and backup it to /etc/ld.so.conf.old '/etc/ld.so.conf' -&lgt; '/etc/ld.so.conf.old' glibc timezone configuring glibc initialize finished $ sudo updatepkg libc-2.32-x86_64-B1.txz removing libc-2.30 Removing package libc... ... --&lgt; Deleting empty directory usr/include/bits --&lgt; Deleting empty directory usr/include/arpa Segmentation fault expr: syntax error libc-2.32-x86_64-B2 のインストール中 PACKAGE DESCRIPTION: libc-2.32-x86_64-B1.txzをインストールできませんでした。 パッケージが壊れているようです(tar のエラーコード: 139)
「あれれ、
$ tar tvf libc-2.32-x86_64-B1.txz drwxr-xr-x root/root 0 2020-08-16 08:37:03 usr/ drwxr-xr-x root/root 0 2020-08-16 08:36:41 usr/include/ ... -rw-r--r-- root/root 1503 2020-08-16 09:00:00 install/doinst.sh $ mkdir Work ; cd Work $ tar xvf ../libc-2.32-x86_64-B1.txz usr/ usr/include/ usr/include/limits.h .... $ ls -l usr/lib Mcrt1.o libBrokenLocale.so libdl.so libnss_db.so librt.so Scrt1.o libanl.a libg.a libnss_dns.so libthread_db.so crt1.o libanl.so libm-2.32.a libnss_files.so libutil.a ....
「パッケージは別に壊れてないようだけどなぁ?」
これはどうやらパッケージではなく管理ツール側の問題らしい、
376
377 COMPRESSED=`ls -l $package | crunch | cut -f5 -d' '`
378 if [ "$compress" = "bzip2" ]; then
379 UNCOMPRESSED=`bzcat $package | wc -c`
SegFaultの内容をdmesgで確認すると、
$ dmesg .... [ 1291.190826] ls[3525]: segfault at e5 ip 00007f0d689a4f90 sp 00007ffcb9978530 error 4 in libc-2.32.so[7f0d6888f000+167000] [ 1291.191697] Code: ff 48 85 c0 0f 84 9d 00 00 00 41 80 3c 24 ff 0f 85 b8 00 00 00 48 8b 05 56 0e 0a 00 49 0f be 16 4c 89 f5 64 48 8b 08 48 89 d0 <f6&lgt; 44 51 01 20 74 1c 66 0f 1f 84 00 00 00 00 00 48 0f be 55 01 48
この結果を見て、
これら専用のコマンドは/sbin/
$ ls /sbin/installer [* bzip2* cp* dirname* gzip* mv* rmdir* tar* wc* basename* cat* cut* echo* ln* paste* sed* tee* xz* busybox* chmod* date* expr* ls* readlink* sh* touch* xzcat* bzcat* comm* dialog* grep* mkdir* rm* sort* uniq* zcat* $ file /sbin/installer/ls /sbin/installer/ls: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=da04378ba94777f445f236eca25143f6f2300b32, stripped $ ldd /sbin/installer/ls 動的実行ファイルではありません
static linkなバイナリは実行時に共有ライブラリを必要としません。それにもかかわらず、
分析
トラブル状況を調べるために/sbin/
$ /sbin/installer/ls Desktop Mail Public Videos libc-2.32-x86_64-B2.txz Documents Music Sample Work glibc-2.32-x86_64-B2.txz ... $ /sbin/installer/ls -F Desktop/ Mail/ Public/ Videos/ libc-2.32-x86_64-B2.txz Documents/ Music/ Sample/ Work/ glibc-2.32-x86_64-B2.txz .. $ /sbin/installer/ls -i 57487674 Desktop 21013232 Pictures 87692 Work 57487675 Documents 37874572 Public 37874576 glibc-2.32-x86_64-B2.txz 4855301 Downloads 37871997 Sample 37874577 libc-2.32-x86_64-B2.txz ... $ /sbin/installer/ls -l Segmentation fault
幸いなことに、
まず一つ前のバージョンであるglibc-2.
次に
このトラブルのせいでパッケージ管理ツールは使えないものの、
そこでglibc-2.
ところが、
$ ./ls_static -l total 25264120 ls_static: dl-call-libc-early-init.c:37: _dl_call_libc_early_init: Assertion `sym != NULL' failed. 中止
どうやらglibc-2.
もう少し詳しい情報が得られないかな、
$ file ./ls_static_glibc230 ./ls_static_glibc230: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=dffd8c4e274ec29fc18b181898b06fc7e99ca57a, for GNU/Linux 3.2.0, with debug_info, not stripped $ gdb ./ls_static_glibc230 GNU gdb (GDB) 8.0 Copyright (C) 2017 Free Software Foundation, Inc. .... Reading symbols from ./ls_static_glibc230...done. (gdb) run -l Starting program: /home/kojima/ls_static_glibc230 -l Program received signal SIGSEGV, Segmentation fault. 0x00007ffff77d7f90 in __nss_readline () from /lib/libc.so.6 (gdb)
この結果を見ると、
$ nm ls_static_glibc230 | grep __nss 000000000051d8e8 V __nss_aliases_database 0000000000479be0 T __nss_configure_lookup 000000000051e3e0 B __nss_database_custom 0000000000479740 T __nss_database_lookup2 000000000051d8e0 V __nss_ethers_database 000000000051d8d8 V __nss_group_database 000000000047a230 T __nss_group_lookup2 000000000051d8d0 V __nss_gshadow_database 00000000004b3840 T __nss_hash 000000000051d8c8 V __nss_hosts_database 000000000051d8c0 V __nss_initgroups_database 000000000047a080 T __nss_lookup 0000000000479d10 T __nss_lookup_function 000000000051d8b8 V __nss_netgroup_database 000000000051d8b0 V __nss_networks_database 000000000047a130 T __nss_next2 000000000051e410 B __nss_not_use_nscd_group 000000000051e3f0 B __nss_not_use_nscd_passwd 000000000051d8a8 V __nss_passwd_database 000000000047a2c0 T __nss_passwd_lookup2 000000000051d8a0 V __nss_protocols_database 000000000051d898 V __nss_publickey_database 000000000051d890 V __nss_rpc_database 000000000051d888 V __nss_services_database 000000000051d880 V __nss_shadow_database
どうやら"__
2020-07-21 Florian Weimer <[email protected]&lgt;
COMMIT: bdee910e88006ae33dc83ac3d2c0708adb6627d0
nss: Add __nss_fgetent_r
* include/nss_files.h: Modified.
(libc_hidden_proto): Modified.
(libc_hidden_proto): Modified.
(libc_hidden_proto): Modified.
(libc_hidden_proto): Modified.
(__nss_readline): New function.
(__nss_readline_seek): New function.
(__nss_parse_line_result): New function.
(libc_hidden_proto): New.
(libc_hidden_proto): New.
(__nss_fgetent_r): New function.
* nss/Makefile: Modified.
* nss/Versions: Modified.
* nss/nss_fgetent_r.c: New file.
* nss/nss_files/files-XXX.c: Modified.
(internal_getent): Modified function.
* nss/nss_parse_line_result.c: New file.
* nss/nss_readline.c: New file.
どうやら、
解決しないまま日々が過ぎ、
(続く)
紙幅の都合で思わせぶりなところで終ったものの、
なぜこのパッケージを先にインストールしなければいけないかを含め、