하나의 Linux 배포판에 설치된 소프트웨어가 다른 Linux 배포판에서 실행될 수 있습니까?

하나의 Linux 배포판에 설치된 소프트웨어가 다른 Linux 배포판에서 실행될 수 있습니까?

"/usr" 디렉토리에 대해 별도의 파티션을 생성한다고 가정합니다. 모든 사용자 프로그램이 포함된 디렉토리입니다. 한 운영 체제에서 다른 운영 체제로 전환하면(예: Ubuntu에서 Arch Linux로 또는 그 반대로) Arch Linux에서 프로그램이 실행됩니까?

Ubuntu에 설치한 Blender가 Arch Linux에서 실행되나요?

답변1

약간의 작업을 통해 다른 배포판에서 실행되도록 할 수 있습니다.
프로그램이 의존하는 가장 중요한 것은 라이브러리입니다. 이러한 라이브러리는 다양한 배포판의 다양한 위치에 저장되지만 ldd 명령을 사용하여 이러한 라이브러리가 링크된 위치를 찾을 수 있습니다. 예를 들어, Debian에서
실행할 때 ldd의 출력은 다음과 같습니다./usr/bin/vlc

linux-vdso.so.1 (0x00007fff11969000)
libvlc.so.5 => /usr/lib/libvlc.so.5 (0x00007f597eb01000)
libvlccore.so.5 => /usr/lib/libvlccore.so.5 (0x00007f597e819000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f597e5fd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f597e3f9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f597e0f5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f597ddf7000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f597dbe1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f597d834000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f597d5ee000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f597d3e6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f597ed37000)

/lib/x86_64-linux-gnu
모든 라이브러리가 Arch에 있고 vlc 라이브러리가 다음 위치에 있음 을 알 수 있습니다./usr/lib

linux-vdso.so.1 (0x00007fff5a1fe000)
libvlc.so.5 => /usr/lib/libvlc.so.5 (0x00007f84fd7c2000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f84fd5a4000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f84fd3a0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f84fcff5000)
libvlccore.so.7 => /usr/lib/libvlccore.so.7 (0x00007f84fcce1000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f84fcad9000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f84fc892000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f84fc58f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f84fd9e0000)

보시다시피 바이너리는 약간 다른 위치에 있으며 vlc 바이너리 자체는 다른 종속성을 갖습니다. 따라서 이론적으로 VLC의 Arch 설치를 통해 라이브러리를 올바른 위치에 연결하여 Debian에서 실행할 수 있습니다.
다음과 같이 LD_LIBRARY_PATH 변수를 설정하여 시스템이 라이브러리를 찾는 위치를 확장할 수도 있습니다.
export LD_LIBRARY_PATH=/usr/local/libs:$LD_LIBRARY_PATH

답변2

나는 그들이 그렇게 생각하지 않습니다. 다른 패키지 관리자와 파티션을 혼합하면 /usr충돌과 비호환성이 발생할 수 있습니다. 제가 생각하는 유일한 방법은 .tar.gz범용 파일에서 소프트웨어를 설치하는 /opt것 입니다.~해야 한다작동(테스트되지 않음)

답변3

배포판에 따라 일반적으로(항상 그런 것은 아님) 파일이 다른 위치에 저장됩니다. 변환 패키지를 사용할 수 있습니다외계인.

디스크 공간이 매우 부족한 경우 Arch 및 Ubuntu 파티션 모두에 Blender를 설치하고, 어떤 내용이 동일한지 확인하고, 동일한 파일 및 디렉터리(및 모든 하위 디렉터리)에서 소프트 링크를 만들 수 있습니다.

답변4

첫째, 서로 다른 분포를 혼합하지 마십시오 /usr. 각 배포판은 그 안에 있는 내용을 제어하기를 원하며 배포판은 지속적으로 서로의 파일을 덮어씁니다. /usr사용자 프로그램을 포함하는 대신(예, 이름이 유래된 곳이지만 지난 40년 동안 이 디렉토리에 포함된 내용은 아닙니다) 시스템 프로그램이 포함되어 있습니다.

한 배포판의 프로그램은 다른 배포판에서 실행될 수도 있고 실행되지 않을 수도 있습니다. 배포판에 프로그램에서 사용하는 라이브러리 버전이 충분히 가까운지 여부에 따라 다릅니다.

홈 디렉토리에 프로그램을 설치 /usr/local하고 특정 버전의 라이브러리가 필요하지 않은 경우 두 배포판 모두에서 작동합니다.

관련 정보