[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:33404] [FYI] glibc-2.32 breaks install tools
-
From:KOJIMA Mitsuhiro
-
Date:Mon, 10 Aug 2020 22:08:08 +0900 (JST)
- Subject: [plamo:33404] [FYI] glibc-2.32 breaks install tools
- From: KOJIMA Mitsuhiro <kojima@xxxxxxxxxxx>
- Date: Mon, 10 Aug 2020 22:08:05 +0900 (JST)
こじま@メンテナMLの方には投げたけど、ハマる人がいると申しわけないんでこっちにも、です。
最近、手元で GCC-10.2.0 や glibc-2.32 を試しているものの、
glibc-2.32 では、それ以前バージョンの glibc でビルドした
static link なコマンドが一部動作しないようで、
その結果、installpkg/updatepkg/removepkg が動作不能になるようです。
Plamo Linuxの場合、インストール用ツールはshell scriptなので、
そのままではインストール用ツールが使っているコマンド(例えば tar)を
インストール用ツールで更新することができません。
# 缶切りが缶詰の中、状態になる。
そのため、インストール用ツールは /sbin/install/ 以下に用意した
専用のコマンドのみを使うようにしており、これら専用のコマンドは、
主に busybox 由来のstatic link なバイナリとして用意しています。
# 具体的にはこんな感じ
$ 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*
これらのコマンドはここ数年使い続けているものの、
glibc-2.32 な環境では "ls -l" が segfault するようです。
$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12 8月 7日 16:46 /lib/libc.so.6 -> libc-2.32.so*
$ /sbin/installer_org/ls -l .
Segmentation fault
dmesg にはこんなログが。
[ 6001.101927] ls[1350]: segfault at e5 ip 00007f5e4e382f90 sp 00007fff151afc70 error 4 in libc-2.32.so[7f5e4e26d000+167000]
[ 6001.106179] 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> 44 51 01 20 74 1c 66 0f 1f 84 00 00 00 00 00 48 0f be 55 01 48
いやらしいことに "-l" オプションを指定しないと動く。
$ /sbin/installer_org/ls .
busybox busybox-1.32.0.tar.bz2 busybox_commands.tar busybox_glibc-2.31
busybox-1.32.0 busybox.config busybox_coms.tar busybox_unstripped
glibc-2.31 では大丈夫で、glibc-2.32 環境でもバイナリをビルドし直すと
問題なく動くので、どうやら glibc-2.32 で追加された何かが static binary の
互換性を損なっている感じ。
$ gdb ls
GNU gdb (GDB) 8.0
Copyright (C) 2017 Free Software Foundation, Inc.
....
Reading symbols from ls...done.
(gdb) run -l
Starting program: /home/kojima/ls -l
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff77d6f90 in __nss_readline () from /lib/libc.so.6
この __ns_readline() というのは、ChangeLog.21 で
2020-07-21 Florian Weimer <fweimer@xxxxxxxxxx>
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.
と、つい最近 glibc に追加されたコードなようで、このあたりが原因かなぁ、、
と想像しているものの、具体的な対策は思いついていません。
---------
こじま
- Follow-Ups
-
- [plamo:33405] Re: [FYI] glibc-2.32 breaks install tools, KOJIMA Mitsuhiro
- [plamo:33407] Re: [FYI] glibc-2.32 breaks install tools, KOJIMA Mitsuhiro
[検索ページ]
[メール一覧]
Plamo ML 公開システム