RPM을 만들 때 /bin과 /sbin을 어떻게 분리하나요?

RPM을 만들 때 /bin과 /sbin을 어떻게 분리하나요?

redis RPM을 사용하려고 합니다.불소 PM

다음 명령을 실행하면 모든 바이너리가 /tmp/installdir/usr/local/bin에 설치됩니다.

cd /tmp/redis2-8
PREFIX=/tmp/installdir/usr/local/ make 
PREFIX=/tmp/installdir/usr/local/ make install 

redis-server바이너리가 설치되고 /tmp/installdir/usr/local/sbin다른 모든 것(등..)이 설치 되도록 Redis를 어떻게 컴파일합니까 ?redis-cli, redis-benchmark/tmp/installdir/usr/local/bin

답변1

fpm개발자할 말이 있어요배포판별 가이드 주제:

나는 말도 안되는 패키지를 만드는 쉬운 방법을 원합니다. 내 인프라에서는 Debian 정책과 RedHat 패키징 지침에 관심이 없습니다. 저는 팀 고유의 스타일 문화에 관심이 있고 작업을 완료하는 데 매우 관심이 있습니다.

(Debian이나 RedHat 정책을 준수하는 패키지를 생성하기 위해 FPM을 사용할 수 없다는 뜻은 아닙니다. 원한다면 가능하고 그래야 합니다.)

따라서 당신이 관찰한 기본 동작(모든 것이 배치된 곳)은 /usr/local/bin이 그룹이 선호하는 것 같습니다. 그들은 혼자가 아닙니다. Fedora 등이 아닙니다.무료 데스크톱 웹사이트병합에 동의 /bin하고 /sbin를 입력합니다 /usr/bin. 하지만현재 초안FSH는 여전히 sbind디렉토리를 사용하고 있지만 이에 반대하는 움직임이 있는 것 같습니다.

어쨌든 Fedora 사람들은아주 좋은 주장여기에는 다음이 sbin포함됩니다(강조).

a) sbin과 bin을 분리하려면
업스트림 개발자의 영적인 힘이 필요합니다.

간단한 사실은 이러한 디렉터리 간에 바이너리를 이동하는 것이 정말 어렵다는 것입니다. 따라서 이론적으로 개발자는 바이너리가 처음 도입될 때 바이너리가 있는지 알아야 합니다.한 번권한이 없는 사용자로 호출하는 것이 합리적일 수 있습니다(이 경우 바이너리는 /sbin이 아닌 /bin에 속하므로).역사에 따르면 개발자는 자신의 내용을 잘못된 디렉터리에 넣는 경우가 많습니다. /sbin/arp, /sbin/ifconfig, /usr/sbin/httpd를 참조하세요.경로를 변경하면 하드코딩된 모든 스크립트가 중단된다는 의미이므로 문제를 해결할 수 있는 합리적인 방법이 없습니다. 우리는 실제로 성능상의 이유로 스크립트에서 경로를 하드코딩하는 것을 권장합니다. 최종 결과는 많은 업스트림 개발자가 sbin을 고려하지 않고 무조건 자신의 물건을 bin에 넣는 것이며, 이는 sbin의 목적을 완전히 무너뜨리는 것입니다(예:systemd에서는 개별 바이너리를 sbin에 붙여넣지 않습니다., 그 도구 중 어떤 것도 루트가 아닌 사용자에게 유용할 것이라고 확신할 수 없기 때문입니다. systemd는 하위 수준이며 시스템별로 다릅니다.

b) /sbin의 원래 정의는 완전히 구식입니다(즉, sbin의 "s"는 원래 "정적" 바이너리를 나타냄).

c) /bin 및 /sbin은 보안과 관련이 없으며, 전혀 관련이 없습니다. 그렇게 하는 것은
모호한 상황에서는 안전할 뿐만 아니라 매우 어리석은 일이기도 합니다.

디)/sbin에서 /bin을 분리하는 것은 순전히 $PATH에만 관련됩니다. 이는 순전히 셸 사용자가 그 안에 있는 도구에 쉽게 액세스할 수 있도록 하기 위한 것입니다. 여기서 강조점은 "편함"입니다. 이는 사용자가 특정 도구에 액세스하기 더 어렵게 만드는 방법이 아닙니다.즉, 사용자가 혼동하지 않도록 특정 도구를 숨기는 것이 목적이라면 이를 수행할 수 있는 더 좋은 장소가 있습니다. 문서에서는 해당 도구를 별도의 섹션에 문서화할 수 있습니다. 나는 사용자가 셸에서 TAB 키를 눌렀을 때 볼 수 있는 내용에 대해 게임을 통해 사용자를 교육하려는 노력이 의미가 없다고 생각합니다. [...]

이러한 점은 이전에 언급되었지만 /sbin동일하게 적용 가능한 것 같습니다 /usr/local/sbin. 따라서 @slm이 실제로 요구하는 작업을 수행하는 방법이라고 확신하는 방법을 제공했지만 이를 무시 sbin하고 fpm원하는 대로 하도록 두는 것이 좋습니다 .

답변2

다양한 파일이 설치되는 위치를 제어하려면 .specRPM 파일에서 직접 수동으로 이를 수행해야 합니다.

.spec다음은 몇 년 전에 작성한 블로그 시리즈의 일부로 만든 JBOSS RPM 파일의 일부입니다. 이 기사 시리즈의 제목은 다음과 같습니다.CentOS RPM 튜토리얼 3부 - 자신만의 JBoss RPM 구축.

...
%prep
%setup -q

%build

%install
rm -fr $RPM_BUILD_ROOT
mkdir -m 0755 -p $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}
cp -R * $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}

%clean
rm -rf $RPM_BUILD_ROOT

%post
echo " "
echo "install of jboss complete!"

%files
%defattr(-,root,root)
/opt/%{name}/*
...

위 섹션에서는 소프트웨어를 "설치"할 위치를 %install지정해야 합니다 . $RPM_BUILD_ROOT여기서 각각 sbinbin디렉토리를 생성할 수 있습니다.

%files이 RPM으로 "설치된" 파일을 분류할 때 섹션에 해당 위치를 반영 해야 합니다 . $HOME/.rpmmacros항상 동일한 매크로를 생성하는 경우 파일에 bulid 매크로를 생성하여 이를 단순화할 수 있습니다.

%_topdir예를 들어, 다음과 같은 것을 만들 때 사용하는 매크로가 있습니다 .

%_topdir %(echo $HOME)/rpmbuild

그런 다음 이러한 매크로를 파일에서 사용할 수 있습니다 .spec.

관련 정보