sudoで呼び出すと、vimの二重シンボリックリンクはライブラリファイルncurses.so.6をロードしません。

sudoで呼び出すと、vimの二重シンボリックリンクはライブラリファイルncurses.so.6をロードしません。

vim.basic実行可能ファイルへのシンボリックリンクがあります。

⤷ ls -l /etc/alternatives/vim
lrwxrwxrwx 1 root root 18 Apr 22 21:02 /etc/alternatives/vim -> /usr/bin/vim.basic

上記のシンボリックリンクへの別のシンボリックリンクは次のとおりです。

⤷ ls -l /usr/bin/vim         
lrwxrwxrwx 1 root root 21 Apr 22 21:02 /usr/bin/vim -> /etc/alternatives/vim

彼らのシステム構成は、新しい代替案で期待できるものと一致します。時々、Linuxカーネル5.4からブートしたり、通常は同じルートとホームパーティションを使って4.15からブートする以外は何も変更しませんでした。これはsudoが実行される原因になる可能性があります。精力? :

⤷ sudo vim.basic                #This works fine!
⤷ sudo /etc/alternatives/vim    #This works fine!
⤷ sudo vim      
vim: error while loading shared libraries: libncurses.so.6: cannot open shared object file: No such file or directory

libncurses.so は、LD_LIBRARY_PATH が指すパスにインストールされます。

⤷ echo $LD_LIBRARY_PATH
/home/akd/dotapps/local/lib:

⤷ ls -l /home/akd/dotapps/local/lib/libncurses.so.6
lrwxrwxrwx 1 akd akd 17 Nov  9 21:24 /home/akd/dotapps/local/lib/libncurses.so.6 -> libncurses.so.6.2

Sudo vimの操作では、二重シンボリックリンクがlibcurses.so.6を見つけることができない理由を理解できないようです。 sudoのない通常のvimバイナリは期待どおりに動作します(ncurses libは文句を言いません)。

⤷ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 16 2021 13:33:23)
⤷ sudo --version
Sudo version 1.8.21p2
Sudoers policy plugin version 1.8.21p2
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.21p2

なぜこのような奇妙な動作が発生するのかご存知ですか?

修正する:

リクエストに応じて追加情報を追加してください。

⤷ ldd $(which vim)        
    linux-vdso.so.1 (0x00007ffc9a2a6000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d5e059000)
    libncurses.so.6 => /home/akd/dotapps/local/lib/libncurses.so.6 (0x00007f9d5ddee000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d5dbea000)
    libpython3.6m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 (0x00007f9d5d53f000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d5d320000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d5cf2f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d5e909000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f9d5ccfd000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9d5cae0000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f9d5c8dd000)

ベストアンサー1

ホームディレクトリlibncurses.soにインストールし、追加して使用可能にしたようです。akbexport ENVIRONMENT=/home/akb/.../lib/home/akb/.bashrc

これはすべてユーザーごとに異なります。別のユーザー()で実行すると、そのユーザーに読み取り権限がないため、ライブラリを読み取れないというsudo -u akc vim問題が発生します。環境も更新されるため、現在存在する項目は適用されません。akc/home/akbakcexport/home/akb/.bashrc

libncurses.soこの問題を解決するには、システム全体にインストールする必要があります。推奨されるオプションは、ディストリビューションに付属のバージョンを使用することです(例)。

sudo apt install libncurses6

しかし、ローカルコピーがあるので、そこには理由があると思います。この場合は、システム全体にインストールする必要があります。

./configure
make
sudo make install DESTDIR=/usr/local

はいdebianのvim8.2リリースには依存関係はありません。ソースからビルド/インストールした場合、このランタイム依存関係が欠落している可能性が高くなります。ただし、パッケージを介してインストールする場合、パッケージマネージャは設定されたすべてのランタイム依存関係を自動的にインストールすることを期待します。そのため、パッケージをビルドすると、間違ったフラグが渡されたか、パッケージマネージャに通知する必要があるフラグが欠落しているように聞こえます。vim.basicncurses./configureDepends:

おすすめ記事