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:

관련 정보