저는 수십 개의 바이너리와 스크립트를 빌드하는 생물정보학 툴킷용 패키지를 만들고 있습니다. 현재로서는 패키지 관리자가 사용하는 접두사가 무엇이든 "bin" 디렉터리에 설치됩니다. 패키지 저장소를 유지관리하는 사람들에게 이 프로그램을 실행하게 했더니 다른 패키지와 파일 이름이 충돌할 가능성이 많이 생겨서 눈살을 찌푸리게 만들었습니다.
대부분의 사용자는 약 9개의 실행 파일만 사용합니다. 나머지는 파일 형식 변환기와 같은 유틸리티입니다. 패키지 저장소 관리자는 libexec 아래의 하위 디렉터리에 다른 실행 파일을 설치할 것을 권장합니다. 이것은 쉽지만 libexec의 표준을 준수하지 않는 것이 조금 걱정됩니다.파일 시스템 계층 표준, 실행 파일이 있기 때문에예최종 사용자가 직접 실행하도록 고안되었습니다.
자주 사용되지 않는 수십 개의 실행 파일을 설치하기 위한 더 나은 패키지 대상이 있습니까?
답변1
libexec
예를 들어 RedHat의 postfix MTA는 좋습니다 /usr/libexec/postfix
. mailman
RedHat에 패키지된 또 다른 옵션 /usr/lib/mailman/bin
은 명령줄 유틸리티( newlist
등 list_lists
)입니다.
그러나 유틸리티를 포함해야 하는 경우 PATH
해당 유틸리티를 포함하도록 셸 구성을 조정해야 합니다(모든 것을 디렉토리에 덤프하고 bin
사용하거나 디렉토리에 없는 유틸리티에 대해). 문제에 대해 전화해야 할 경우 PATH
완전히 자격을 부여합니다 ... )PATH
답변2
libexec
사용 중인 시스템 에서는 /usr/libexec/yourpackage
괜찮습니다.설명했다통과트리거. /usr/lib/yourpackage
어디서나 일하세요.
이는 액세스 문제를 해결하지 못합니다. 충돌 문제가 다시 발생하므로 경로에 새 디렉터리를 추가하는 것은 적절하지 않을 수 있습니다. 한 가지 가능한 해결책은 모든 하위 명령 /usr/bin
과 동일한 스타일 로 실행 프로그램 스크립트를 사용하는 것입니다 (Bioinformatics Toolkit).git
bit
#!/bin/sh
prefix=/usr/lib/yourpackage/bin
if [ ! -x "${prefix}/$1" ]; then
echo Unknown bit subcommand "$1"
exit 1
fi
shift
exec "${prefix}/$1" "$@"
사용자가 손가락을 다시 훈련하면 패키지 도구에 합리적으로 액세스할 수 있습니다.
답변3
/usr/libexec/
(또는 그 안의 일부 하위 디렉터리나 다른 곳, 예를 들어 아래 ) 는 /usr/lib
사용자 디렉터리에 있어야 한다는 의미가 아니며 있어서도 안 됩니다.$PATH
, 만큼 짧을 수 있습니다 /bin:/usr/bin
. 실행 파일은 사용자가 직접 실행해서는 안 되며, 특정 다른(사용자가 시작한) 프로그램(셸이 아님)에 의해서만 실행되어야 합니다. 예를 들어 g++
시작 /usr/lib/gcc/x86_64-linux-gnu/7/cc1plus
(사용자가 cc1plus
프로그램을 직접 실행해서는 안 됨)입니다.
패키지에서 여러 실행 파일을 설치하도록 할 수 있습니다 /usr/bin/
(위치:$PATH
), 디렉토리가 꽤 클 것으로 예상됩니다. 거기에는 4400개 이상의 파일이 있고 coreutils
단일 패키지로 100개 이상의 실행 파일이 설치되어 있습니다.
패키지 사용자가 항상 다음과 같은 단일 드라이버를 사용하도록 결정할 수 있습니다.자식.
패키지 실행 파일에 대한 공통 접두사를 공유할 수 있습니다. 예를 들어 모든 XFCE 관련 바이너리는 로 시작 xfce
하고 모든 LXDE 바이너리는 lx
. 실제로 비슷한 규칙을 따르는 것이 좋습니다.
또는 특정 실행 파일을 설치하지 않는 것이 타당한 경우 패키지를 여러 패키지로 분할할 수 있습니다.
여러 버전의 제품군이 공존할 수 있도록 패키지를 디자인할 수도 있습니다(예: I have gcc-6
및 gcc-7
).