나는 (내 자신의 rpm을 사용하여) 쉽게 설치하고 싶은 바이너리, 스크립트 등을 만들고 있습니다. 나는 모든 사람이 이에 액세스할 수 있기를 원하므로 본능적으로 /usr/bin에 넣습니다.
- 경로를 변경할 필요가 없습니다.
그러나 내 실행 파일이 이제 다른 모든 실행 파일 풀로 사라지고 있습니다. 거기에 넣은 모든 실행 파일을 쉽게 찾을 수 있는 방법은 무엇입니까? 나는 생각 중입니다:
- /usr/bin의 하위 디렉터리(이 작업을 수행할 수 없다는 것을 알고 있습니다. 단지 내 아이디어를 설명하기 위한 것임)
- 다른 디렉터리(/opt/myself/bin)를 만들고 각 실행 파일을 /usr/bin에 연결합니다(많은 작업).
- 다른 디렉터리(/opt/myself/bin)를 만들고 해당 디렉터리를 /usr/bin에 연결합니다(이것이 가능합니까?)
이 작업을 수행하는 "최고의 Linux 호환 방법"은 무엇입니까?
편집: 우리는 회사에서 이에 대해 논의한 후 두 번째로 좋은 옵션을 생각해 냈습니다. 바이너리를 /usr/bin/company에 넣고 /usr/bin의 심볼릭 링크를 사용하는 것입니다. 이 솔루션이 만족스럽지 않습니다(논의 중).
답변1
바이너리를 자신의 RPM에 묶으면 바이너리가 무엇인지, 어디에 설치되어 있는지에 대한 목록을 얻는 것이 간단합니다.
예
$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
실행 파일을 넣거나 자체 RPM을 롤링하는 /usr/bin
것이 좋습니다. /usr/local/bin
이를 수행하는 것은 매우 간단하며, RPM을 사용하여 소프트웨어 배포를 관리하면 버전 번호로 번들에 태그를 지정할 수 있어 소프트웨어 배포 시 구성 관리가 더욱 단순화됩니다.
어떤 RPM이 "내"인지 확인하시겠습니까?
알려진 정보를 사용하여 RPM을 구축한 다음 구축하기 전에 동의할 수 있습니다. 나는 종종 내 도메인이 소유한 시스템에서 패키지를 빌드하므로 호스트 X.mydom.com에 빌드된 모든 RPM을 검색하기만 하면 쉽게 RPM을 찾을 수 있습니다.
예
$ rpm -qi httpd
Name : httpd
Version : 2.4.7
Release : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group : System Environment/Daemons
Size : 3865725
License : ASL 2.0
Signature : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM : httpd-2.4.7-1.fc19.src.rpm
Build Date : Mon 27 Jan 2014 08:39:13 AM EST
Build Host : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager : Fedora Project
Vendor : Fedora Project
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
Build Host
이는 RPM 내의 라인이 됩니다 .
/usr/bin/company를 사용하시겠습니까?
아마도 그러한 위치의 사용을 권장하지 않을 것입니다. 주로 이를 포함하려면 모든 시스템을 개선해야 $PATH
하고 비표준이기 때문입니다. 사용자 정의는 항상 Unix 관리자가 되려는 모든 사람의 "통행권"이었지만 꼭 필요한 경우가 아니면 항상 권장하지 않았습니다.
이와 같은 사용자 정의의 가장 큰 문제는 환경을 유지하고 새로운 사람들이 사용 방법을 빠르게 익히는 데 부담이 된다는 것입니다.
RPM에서 파일 목록을 가져올 수 있나요?
예, 이를 달성할 수 있지만 RPM을 2번 호출해야 합니다. 첫 번째는 호스트 X.mydom.com에 빌드된 패키지 목록을 작성합니다. 이 목록이 있으면 RPM 쿼리를 다시 호출하여 각 패키지가 소유한 파일을 찾아야 합니다. 이를 달성하려면 다음 라이너를 사용할 수 있습니다.
$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon
답변2
분명한 제안은 바이너리나 패키지의 이름을 특별한 방식으로 지정하는 것입니다. 예를 들어 cm-
이 문서에 표시된 대로 를 추가할 수 있습니다. rpms를 설치하려면 /usr/bin
FHS에 따라 이를 입력해야 합니다(사용자 수준 실행 파일인 경우). /usr/local/bin
예를 들어 입력해서는 안됩니다 . 이는 로컬 설치에서만 작동합니다.
참고로 바이너리를 특별한 디렉터리에 넣어서 연결하는 아이디어는 전혀 매력적이지 않다고 생각합니다. 또한 어떤 바이너리가 어떤 패키지에 속하는지 알아내려면 패키징 시스템에 쿼리하면 됩니다.
답변3
시스템이나 배포판에 속하지 않는 바이너리는 일반적으로 다음 위치에 있습니다.
/usr/local/bin
$PATH
이 디렉터리는 일반적 으로 바이너리를 찾을 수 있도록 표준 디렉터리에 위치합니다 .