배경
Centos 7에서 실행되어야 하는 C++ 애플리케이션을 만들고 있습니다. 빌드는 Centos 7.9에서 수행되었으며 이전 버전의 Centos 7과의 호환성을 제한하는 C++11 및 C++17 기능을 사용하고 있습니다. 사용자가 애플리케이션을 실행하기 전에 몇 가지 검사를 수행하는 설치 프로그램이 있습니다.
질문
개발 중인 애플리케이션이 지원하는 최소 Centos 7 버전을 자동으로 확인하려면 어떻게 해야 합니까?
내가 현재 가지고 있는 것
ldd
이제 빌드 후 필수 라이브러리 목록을 검색하기 위해 및 를 사용하고 있습니다 readelf
(참조:https://stackoverflow.com/questions/6242761/define-direct-shared-object-dependent-of-a-linux-binary). 이 목록을 사용하여 사용자가 갖고 있는 것과 내 애플리케이션에 필요한 것을 비교할 수 있으며, 사용자의 버전이 필요한 버전보다 낮으면 설치 프로그램에서 업그레이드하라고 지시합니다. 그러나 이 접근 방식을 사용하면 내 목록은 가장 오래된 호환 버전이 아닌 빌드 시스템에 있는 라이브러리의 버전을 알려줍니다.
제가 할 일은 빌드 머신을 Centos 7의 일부 버전으로 다운그레이드하고 앱이 컴파일되는 경우 해당 버전이 최소 지원 버전이라고 말하는 것입니다. 그런 다음 설치 프로그램은 사용자의 라이브러리 버전을 생성된 목록과 비교합니다. 즉, 새 버전이 내가 사용할 버전과 하위 호환될 것이라는 약속을 하고 싶지만 Centos나 Red Hat의 웹 페이지에서는 그런 내용을 찾을 수 없습니다. 지원되지 않는 이전 운영 체제 버전을 사용하면 보안 문제도 있습니다.
두 번째 옵션은 내 빌드 시스템에 있는 모든 것을 지원하는 것이지만 일부 사용자는 업그레이드해야 할 수도 있고 마음에 들지 않을 수도 있습니다.
세 번째 옵션은 애플리케이션을 빌드하고 이전 버전의 Centos에서 실행해 보는 것입니다.
가장 큰 문제는 패킷 관리자 외부에서 Linux 애플리케이션을 배포하는 방법에 대한 지식이 부족하다는 것입니다. Windows에서는 모든 DLL을 EXE로 패키지합니다(대부분의 경우). 그러나 Linux에서는 그렇게 할 수 없습니다(즉, RPATH를 망칠 수 있다는 뜻입니다...).
답변1
이것오직지원되는 모든 RHEL 버전은 $release
이 $latest
버전입니다. 예를 들어 7의 경우 7.9입니다. 이전 버전을 대상으로 하는 것은 시간과 자원 낭비입니다. 잠재 고객이 7.9가 아닌 다른 버전을 실행하는 경우 심각한 보안 허점이 발생하게 됩니다.
가장 큰 문제는 패킷 관리자 외부에서 Linux 애플리케이션을 배포하는 방법에 대한 지식이 부족하다는 것입니다.
- flatpak/snap/appimage로 게시합니다. (저는 일반적으로 이 접근 방식을 좋아하지 않지만 Linux 배포판은 묻혀진 지 오래되었습니다.최하위 비트)
- 애플리케이션이 오픈 소스인 경우 모든 항목과 정적으로 링크할 수 있습니다(이는 매우 나쁜 생각입니다).
- 소스코드 형태로 배포하고, 필요한 사람이 직접 컴파일하도록 하세요.