どのライブラリが必要なのか調べる方法

chroot環境を構築するため、jail内にコピーする必要なライブラリを調べる方法のメモ。CentOSでの場合。

  • lddを使う。例えばこんな感じ。
    # ldd /usr/bin/ssh
    libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002ab5c4712000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00002ab5c4a63000)
    libz.so.1 => /usr/lib64/libz.so.1 (0x00002ab5c4c66000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ab5c4e7b000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ab5c5093000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00002ab5c52cb000)
    libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002ab5c54e1000)
    libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002ab5c570f000)
    libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002ab5c59a4000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002ab5c5bca000)
    libnss3.so => /usr/lib64/libnss3.so (0x00002ab5c5dcc000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ab5c611d000)
    libplc4.so => /usr/lib64/libplc4.so (0x00002ab5c6474000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00002ab5c6678000)
    libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002ab5c687c000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002ab5c6a85000)
    libnssutil3.so => /usr/lib64/libnssutil3.so (0x00002ab5c6c87000)
    libplds4.so => /usr/lib64/libplds4.so (0x00002ab5c6ea3000)
    libnspr4.so => /usr/lib64/libnspr4.so (0x00002ab5c70a7000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab5c72e1000)
    /lib64/ld-linux-x86-64.so.2 (0x00002ab5c44f5000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00002ab5c74fc000)
    libsepol.so.1 => /lib64/libsepol.so.1 (0x00002ab5c7715000)
    
  • straceを使うと、lddでは表示されないものもわかる。
    # strace -e trace=open /usr/bin/ssh
    open("/etc/ld.so.cache", O_RDONLY)      = 3
    open("/lib64/libcrypto.so.6", O_RDONLY) = 3
    open("/lib64/libutil.so.1", O_RDONLY)   = 3
    open("/usr/lib64/libz.so.1", O_RDONLY)  = 3
    open("/lib64/libnsl.so.1", O_RDONLY)    = 3
    open("/lib64/libcrypt.so.1", O_RDONLY)  = 3
    open("/lib64/libresolv.so.2", O_RDONLY) = 3
    open("/usr/lib64/libgssapi_krb5.so.2", O_RDONLY) = 3
    open("/usr/lib64/libkrb5.so.3", O_RDONLY) = 3
    open("/usr/lib64/libk5crypto.so.3", O_RDONLY) = 3
    open("/lib64/libcom_err.so.2", O_RDONLY) = 3
    open("/usr/lib64/libnss3.so", O_RDONLY) = 3
    open("/lib64/libc.so.6", O_RDONLY)      = 3
    open("/usr/lib64/libplc4.so", O_RDONLY) = 3
    open("/lib64/libdl.so.2", O_RDONLY)     = 3
    open("/usr/lib64/libkrb5support.so.0", O_RDONLY) = 3
    open("/lib64/libkeyutils.so.1", O_RDONLY) = 3
    open("/usr/lib64/libnssutil3.so", O_RDONLY) = 3
    open("/usr/lib64/libplds4.so", O_RDONLY) = 3
    open("/usr/lib64/libnspr4.so", O_RDONLY) = 3
    open("/lib64/libpthread.so.0", O_RDONLY) = 3
    open("/lib64/libselinux.so.1", O_RDONLY) = 3
    open("/lib64/libsepol.so.1", O_RDONLY)  = 3
    open("/etc/selinux/config", O_RDONLY)   = 3
    open("/proc/mounts", O_RDONLY)          = 3
    open("/dev/null", O_RDWR)               = 3
    open("/etc/nsswitch.conf", O_RDONLY)    = 3
    open("/etc/ld.so.cache", O_RDONLY)      = 3
    open("/lib64/libnss_files.so.2", O_RDONLY) = 3
    open("/etc/passwd", O_RDONLY)           = 3 
  • ちなみに、bashで上記の出力をlessなどパイプで渡したい場合には次のようにする。
    # strace -e trace=open /usr/bin/ssh  3>&1 >/dev/null 2>&3 | less

カテゴリー: Tips パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です