운영 체제 수준 실행 파일에는 구조화된 형식의 버전 정보가 있습니까?

운영 체제 수준 실행 파일에는 구조화된 형식의 버전 정보가 있습니까?

/usr/bin및 와 같은 운영 체제 수준 실행 파일의 버전 정보에 대한 구조화된 형식을 찾고 있습니다 /usr/local/bin. 우리가 겪고 있는 문제는 PROD와 TEST 환경 간의 아키텍처 불일치이며, 하위 환경에서 많은 실행 파일이 모두 패치되었지만 PROD는 그렇지 않습니다. 이로 인해 많은 테스트가 유효하지 않게 됩니다. TEST에서는 작동하지만 작동하지 않습니다. 이러한 체계적 차이로 인해 t는 PROD에 있습니다.

그래서 시스템 보증 검사를 실행하여 모든 실행 파일을 나열하고 버전 번호만 알아낸 다음 델타를 생성하려고 합니다. 일부 명령은 이 옵션을 지원하지 않지만 -version매우 자세한 자유 텍스트 버전 설명을 표시하는 명령이라 할지라도 버전 번호는 그 안에 숨겨져 있으며 프로그래밍 방식으로 추출할 수 있는 방법이 없습니다.

또는 최후의 수단으로 각 실행 파일에 대해 파일 수준을 실행하는 것을 고려하고 있지만 cksum버전 정보 관련 필드를 프로그래밍 방식으로 추출하는 방법을 원합니다.

감사해요

답변1

나는 이것을 할 수 있는 쉬운 방법이 없다고 말하고 싶습니다. 제가 이렇게 말하는 이유는 버전 제어가 UNIX/Linux에서 전혀 표준화된 프로세스가 아니거나 적어도 어떤 공급업체의 프로그램 수준에서도 이루어지지 않기 때문입니다.

버전 관리 정보가 포함된 설치된 패키지 정보를 확인하는 것이 좋습니다.

그러나 사람들이 배포판의 표준 패키지 관리자를 사용하지 않는 제품을 설치하는 경우에도 오류가 발생합니다.

확실하게 확인하려면 시스템 간에 일종의 테스트 체크섬을 수행해야 할 것입니다.

답변2

@mdpc로부터 이미 답변을 받으셨으므로 원래 질문에 대한 의견만 제공하겠습니다. 나는 이 방법을 사용하지 않을 것입니다. 이는 웜의 가능성이 있고 귀하의 프로그램이 일반적으로 모든 시스템에서 실행되어야 하기 때문입니다(또한 다른 로컬에서 실행하는 경우 시스템이 여전히 작동하는지 확인하십시오). 또한 출력/명령 자체에 의존해서는 안 되며, 적절한 API를 사용하여 정보에 액세스/수정해야 합니다.

어쨌든 문제를 완화하는 데 도움이 되는 몇 가지 방법은 다음과 같습니다.

  1. 구성 관리를 사용하고 컴퓨터에 설치해야 하는 프로그램/라이브러리를 지정합니다. 일반적으로 버전 번호를 지정할 수도 있습니다. 구성 관리를 사용하는 또 다른 이점은 일반적으로 시스템에 대한 모든 정보(예: 실행 중인 코어, 시스템에 있는 NIC 수 등)를 얻을 수 있다는 것입니다.
  2. 사용하는 프로그래밍 언어에 따라 가상화 환경(예: Ruby의 번들러 또는 Python의 virtualenv)을 살펴보는 것이 좋습니다.
  3. chroot를 사용하여 특정 요구 사항에 따라 환경을 설정하거나 (더 나은 경우)
  4. 귀하의 환경을 가상 머신 이미지로 제공하기만 하면 됩니다.

답변3

패키지가 답입니다(SunOS에서 왔다면 이것을 알아야 합니다).

CentOS에서는 RPM을 사용해야 합니다. 그 이상은 아닙니다.

개발자가 모든 것을 rpm으로 제공하도록 강제하면 RPM 데이터베이스에 구조화된 정보가 있게 됩니다(표준 SNMP 도구를 사용하여 쿼리할 수도 있음).

답변4

Solaris 10의 경우 운영 체제에 속하는 파일과 타사에서 SVR4 패키지로 제공하는 파일의 버전이 지정/체크섬됩니다. 예를 들어:

 # pkgchk -l -p /usr/bin/ls
Pathname: /usr/bin/ls
Type: regular file
Expected mode: 0555
Expected owner: root
Expected group: bin
Expected file size (bytes): 18700
Expected sum(1) of contents: 1763
Expected last modification: Mar 25 00:04:57 2010
Referenced by the following packages:
        SUNWcsu
Current status: installed

대부분의 정보는 /var/sadm/install/contents파일에 있습니다. 표준 도구를 사용하여 설치되지 않은 파일(즉, tarball 또는 압축된 아카이브로 제공되는 파일)은 패키지 데이터베이스에 알려지지 않았으며 다르게 처리되어야 합니다. 어쨌든 표준이 없기 때문에 체크섬 비교는 차이점을 감지하는 좋은 방법처럼 보입니다.

관련 정보