.deb 패키지에 하드웨어 의존성을 어떻게 배치합니까?


4

임의의 CPU 명령어에 최적화 된 deb 패키지를 빌드하려면 CPU 명령어를 deb 패키지에 대한 종속성으로 어떻게 배치합니까? 이 패키지는 대량 배포 용이 아니지만 CPU가 너무 오래되어 빌드에 적합하지 않기 때문에 사람들이 충돌과 혼동하기를 원하지 않습니다.


당신이 말하는 종류의 제한의 예를 제공 할 수 있습니까? 일반적으로 dpkg-buildpackage현재 아키텍처를 선택하지만 요구 사항에 맞지 않을 수 있습니다.
Stephen Harris

"-march = amdfam10"을 사용하면 SSE4가없는 오래된 core2를 가진 사람은 치명적인 오류없이 빌드를 실행할 수 없습니다.
Zulgrib

답변:


6

dpkg형식 자체가 필요한 것을 할 수 있는지 잘 모르겠습니다 .

그러나 사전 설치 스크립트를 사용할 수 있습니다 . 여기에서 CPU의 레벨이 올바른지 테스트하고 충분하지 않은 경우 중단 할 수 있습니다. 이런 식으로 패키지가 설치되지 않습니다.

preinst스크립트의 일부입니다 controlPKG의 섹션; https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html 에서 읽을 수 있습니다.

이를 사전 설치 온 전성 스크립트 라고도 합니다. 종료 코드가 0이 아닌 경우 패키지 설치가 실패합니다.

귀하의 preinst스크립트는 것처럼 간단 할 수있다

#!/bin/sh
set -e

flags=`grep ^flags /proc/cpuinfo | head -1`

if [ -z "`echo $flags | grep sse4`" ]
then
  echo Can only run on machines with SSE4 instructions.  Install failed
  exit 1
fi

exit 0

1
사전 설치 스크립트는 하드웨어 테스트를 수행하는 장소이며, gnu / linux, 특히 데비안에서 많은 하드웨어 기반 스크립팅을 수행했으며 패키지 관리자가 설치 스크립트에서 하드웨어 테스트를 절대 거부한다는 사실은 항상 놀랍습니다. 논리는 세상 어디에서나 사용할 수 있고 준비가되었습니다. stephen가 말한 것처럼 패키지를 설치하기 전에 실패가 발생하기를 원하며 이상적으로는 실패 메시지를 표시 한 후 거부 된 이유를 설명하는 명확한 언어를 표시 한 후 모든 것이 사전 설치 상태로 돌아 가기를 원합니다.
Lizardx

@lizardx 그런 preinst 스크립트의 구체적인 예제 구현이 있다면 정말 좋은 대답이 될 것입니다.
GnP

@GnP CPU가 적절한 지 어떻게 알 수 있습니까? 그것은 간단 할 수 있습니다if [ -z ! $(grep myrequiredstuff /proc/cpuinfo)]; then exit 1; fi
Stephen Harris

gnp, 하드웨어는 특정 적이므로 정확한 데이터를 제공해야합니다. 그렇지 않으면 시간과 에너지가 낭비됩니다. 그러나 stephen는 다시 정확합니다. 리눅스 커널 실행 시스템의 모든 / proc / cpuinfo에 있습니다. CPU 플래그를 얻는 것은 쉽지 않습니다. grep ^ flags / proc / cpuinfo | grep '당신의 깃발'. 설치 스크립트는 내가 아는 한 bash 파일 일 뿐이며 잊어 버린 패키지는 없습니다.
Lizardx

@StephenHarris 완성도를 높이기 위해 CPU 명령어 2 개와 스크립트 위치를 확인하는 예제 스크립트를 추가 할 수 있습니까? (수동 링크에는 표시되지 않음)
Zulgrib
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.