바이너리를 넣을 위치는 항상 경로에 있고 쉽게 찾을 수 있습니다.


10

나는 쉽게 자신의 rpm을 사용하여 설치하고 싶은 바이너리, 스크립트 등을 만들고 있습니다. 모든 사람이 액세스 할 수 있기를 원하기 때문에 직감은 / usr / bin에 넣는 것입니다.

  • PATH를 변경할 필요가 없습니다

하나; 내 실행 파일은 이제 다른 모든 풀에서 사라집니다. 내가 거기에 넣은 모든 실행 파일을 쉽게 찾을 수있는 방법. 나는 생각하고 있었다 :

  • / usr / bin의 서브 디렉토리 (이것은 할 수 없다는 것을 알고 있습니다; 단지 내 생각을 설명하기 위해)
  • 다른 디렉토리 (/ opt / myself / bin) 및 각 실행 파일을 / usr / bin (많은 작업)에 연결
  • 다른 디렉토리 (/ opt / myself / bin) 및 디렉토리를 / usr / bin에 연결 (가능합니까?)

이를 위해 "가장 최선의 리눅스 호환 방법"은 무엇입니까?

편집 : 우리는 회사에서 이것에 대해 토론 하고이 차선책 옵션을 생각해 냈습니다 : 바이너리를 / usr / bin / company에 넣고 / usr / bin의 심볼릭 링크를 사용하십시오. 나는이 솔루션에 감격하지 않았다 (토론 진행 중)

답변:


7

바이너리를 자신의 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

실행 파일을 /usr/bin넣거나 /usr/local/binRPM을 롤링 하는 것이 좋습니다 . 이 작업은 매우 사소한 일이며 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 HostRPM 내의 라인입니다.

/ usr / bin / company?

아마도 이와 같은 위치의 사용을 권장하지 않을 것입니다. 주로 모든 시스템에 $PATH이를 포함시키기 위해 기능을 보강해야하고 비표준 이기 때문 입니다. 사물 커스터마이징은 항상 모든 wannabee 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

그리고 내가 설치 한 모든 rpm으로 설치된 모든 바이너리 목록을 얻는 방법은 무엇입니까? 다행히 우리는 회사 이름을 rpm 이름에 넣기로 동의했습니다. "rpm -qa | grep company"와 같은 것은 설치된 rpm을 보여줍니다
Chris Maes

@ChrisMaes-업데이트를 참조하십시오. 어떤 pkg가 "광"인지 확인하기 위해 빌드 호스트를 사용합니다.
slm

업데이트 해 주셔서 감사합니다. 내 rpm이 소유 한 모든 바이너리 (이름에 "회사"가있는)를 찾는 명령을 추가 할 수 있다면
Chris Maes

@ChrisMaes-추가 지침이 필요한 경우 업데이트, LMK를 참조하십시오.
slm

아주 좋은 서면 답변; 완전하고 잘 포맷되어 있습니다. 고마워요!
Chris Maes

4

명백한 제안은 바이너리 또는 패키지의 이름을 특별한 방식으로 지정하는 것입니다. 예를 cm-들어이 게시물에 제공된 이니셜에 따라 접두사를 접두어로 사용할 수 있습니다 . rpm을 설치하는 /usr/bin경우 FHS에 따라 (사용자 레벨 실행 파일 인 경우) 들어가야 합니다. 그들은 /usr/local/bin예를 들어 들어가면 안됩니다 . 이는 로컬 설치에만 해당됩니다.

기록을 위해, 바이너리를 특별한 디렉토리에 넣고 그것들을 전혀 매력적으로 연결시키는 아이디어를 찾지 못했습니다. 어떤 바이너리가 어떤 패키지에 속하는지 알아 내려면 패키징 시스템을 쿼리하면됩니다.


3

시스템이나 배포판의 일부가 아닌 바이너리는 일반적으로

/usr/local/bin

디렉토리는 일반적으로 표준에 $PATH있으므로 바이너리를 찾을 수 있습니다.


일반적으로 / usr / local / bin은 해당 시스템에 "로컬"로만 존재하는 바이너리를위한 것입니다. 바이너리가 아닌 경우 rpm을 사용하여 다른 컴퓨터에 배포 할 것입니다 ...?
Chris Maes

2
Linux에서는 /usr/local/bin수동으로 설치된 실행 파일을위한 것입니다. 패키지 관리자가 관리하는 실행 파일은로 이동합니다 /usr/bin.
Gilles 'SO- 악마 그만해'

@Gilles, 질문에 대한 첫 번째 해석은 모든 사용자가 바이너리를 사용할 수 있도록 단일 컴퓨터에 설치하는 것입니다 ($ HOME에는 설치하지 않음). 이제 나는 그것이 내가 이해 한 것이 아니라는 것을 안다.
Matteo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.