Ubuntu를 기반으로 구축된 애플리케이션을 CentOS에 배포하는 방법이 있습니까? 그렇다면 어떻게 해야 할까요?
편집: 죄송합니다. 더 많은 정보를 제공했어야 했습니다.
Ubuntu 15.10 및 Qt 5.6을 기반으로 구축되었으며 Qt 외에 정적으로 연결된 종속성이 하나만 있습니다. 종속성이 정적으로 링크되어 있는지는 확실하지 않지만 일부 부스트 라이브러리를 사용하고 Ubuntu 관련 항목이 없으므로 문제가 되지 않을 것 같습니다.
답변1
다른 배포판에 사용 가능한 필수 라이브러리가 있는 한 다른 배포판에서 하나의 Linux 배포판용으로 컴파일된 애플리케이션을 실행할 수 있습니다. 실제로 문제는 종종 서로 다른 배포판이 특정 시점에 서로 다른 버전의 라이브러리를 릴리스한다는 것입니다.
라이브러리를 정적으로 연결하는 것은 나쁜 생각입니다. 이는 앱 파일 크기를 부풀리고(인터넷 대역폭이 매우 작은 사람들을 제외하고 대부분의 경우 문제 없음), 메모리의 앱 크기를 부풀리며(실제로는 더 큰 문제임) 애플리케이션이 모든 버그로 인해 정체될 수 있음을 의미합니다. 당신이 링크한 버전에서. 사용자가 라이브러리의 버그 수정, 특히 보안 수정의 혜택을 누릴 수 있도록 라이브러리를 동적으로 연결하세요.
또한, 할 수 있는 동안달리기애플리케이션에 캡슐화 문제가 있습니다. 수동으로 앱을 설치하는 것은 고통스럽습니다. CentOS용 RPM 패키지와 Ubuntu용 deb 패키지를 배포하지 않으면 사용자에게 해를 끼치는 것입니다.
따라서 모든 배포판에 적합한 패키지를 생성해야 합니다. 당신은 할 수달리기CentOS에서 Ubuntu용으로 구축된 애플리케이션은 라이브러리 요구 사항에 따라 다소 노력이 필요하지만 그렇게 할 수는 없습니다.배포CentOS에서 Ubuntu용으로 구축된 애플리케이션입니다.
답변2
이는 애플리케이션이 생성된 방식과 애플리케이션의 종속성에 따라 달라집니다. Python 등으로 작성된 경우 일반적으로 호환되는 Python 인터프리터 및 모듈이 설치되어 있는 한 실행됩니다.
elf 바이너리인 경우 바이너리 호환성 라이브러리 설치 여부에 따라 다릅니다. 일부 라이브러리는 사용할 수 없거나 호환되지 않는 버전으로만 사용 가능하거나 이름이 잘못되었을 수 있으므로 바이너리를 정적으로 링크하거나 누락된 라이브러리를 애플리케이션과 함께 배포할 수 있습니다.
당신은 또한 사용할 수 있습니다플랫팩애플리케이션을 패키징하고 여러 배포판에서 사용하세요.
답변3
다른 사람들이 언급했듯이 응용 프로그램을 시스템에 직접 설치/압축 해제하는 것은 응용 프로그램이 스크립트인지 컴파일된 바이너리인지, 정적 또는 동적 링크, lib 버전 등에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다.
애플리케이션이 실행되려면 애플리케이션이 구축된 운영 체제의 컨텍스트 내에서 실행되어야 합니다. 가장 쉬운 방법 중 하나는 docker입니다. 다소 강력한 솔루션이지만 기본적으로 하나의 운영 체제를 다른 운영 체제 내에서 실행할 수 있습니다. 따라서 우분투 컨테이너를 실행하고 그 안에 애플리케이션을 넣을 수 있습니다.
우분투 chroot를 설정하고 그 안에서 애플리케이션을 실행할 수도 있습니다. 이는 docker가 수행하는 작업과 유사하지만 훨씬 가볍습니다.
이러한 솔루션이 해결하지 못하는 유일한 문제는 애플리케이션이 Ubuntu에만 존재하는 특정 커널 기능에 의존하는 경우입니다. 그러나 이것은 가능성이 낮습니다.