정말로 마지막 것을 원하시나요? 백포트는 안되나요?

정말로 마지막 것을 원하시나요? 백포트는 안되나요?

저는 CentOS 5.5를 사용하고 있습니다. 일부 패키지를 새 버전으로 업그레이드해야 하는데 안타깝게도 사용할 수 없습니다. 소스에서 빌드하는 중입니다.

나중에 특정 패키지를 사용할 수 있게 되면 소스에서 빌드한 버전을 제거하고 해당 패키지로 교체할 수 있도록 yum을 사용하여 소스에서 빌드한 내용을 관리할 수 있는 쉬운 방법이 있습니까?

답변1

정말로 마지막 것을 원하시나요? 백포트는 안되나요?

소스에서 빌드하는 대신 백포트를 설치하는 것이 더 쉬울 수도 있습니다. RHEL 기반 배포에는 기본적으로 보안 수정 사항의 백포트가 포함되어 있습니다. 그리고 당신은 아무것도 할 필요가 없습니다! ie를 사용하여 패키지 rpm -q --changelog httpd | grep CVE의 보안 수정 사항을 확인할 수 있습니다 httpd. 고려하다이것을 읽어보세요이것이 CentOS에 이전 버전으로 보이는 패키지가 있는 이유입니다. 이것이 마음에 들지 않으면 최첨단을 사용하는 다른 배포판을 사용하는 것이 좋습니다.특징, 네, 이것은 기능입니다. 이것을 깨달았다면 계속 읽으십시오.

우리는 시스템을 무너뜨리지 않으려고 노력합니다

인터넷의 다양한 기사에 따르면안정적인 CentOS에 소스 패키지를 설치할 때는 시스템 구성이 손상될 수 있으므로 특별한 주의를 기울여야 합니다..또한 패키지를 빌드하면 시스템에 자체적으로 설치하려고 시도하므로 루트로 패키지를 빌드해서는 안 됩니다., 이 경우 두 개의 터미널을 사용하는 것이 좋습니다. 하나는 도구 설치용이고 yum다른 하나는 패키지 구축용입니다. 즉, 시스템을 깨뜨리자 :D.

전제 조건

패키지를 구축하기 전에 (다른 모든 것과 마찬가지로) 이 작업을 수행하는 데 적합한 도구 세트가 필요하므로 양식 소스 구축을 위한 기본 도구 세트를 다운로드하여 시작해야 합니다.

$ sudo yum groupinstall "Development Tools"
$ sudo yum install rpm-build

일부 최신 소프트웨어 패키지에는 다음에 포함된 특정 매크로와 스크립트가 필요합니다 redhat-rpm-config.

$ sudo yum install redhat-rpm-config

즉, 빌드하려는 패키지/소스에 따라 이보다 더 많은 헤더가 필요할 수 있습니다. 특정 빌드 종속성을 미리 검색하는 것으로 충분합니다.

환경을 조성하다

다음 단계는 홈 디렉터리에 RPM을 빌드하는 데 필요한 파일과 디렉터리를 만드는 것입니다. 전에 언급했듯이,시스템 라이브러리 및 기타 파일의 손상 가능성을 방지하려면 루트 사용자를 사용하여 RPM을 빌드하면 안 됩니다.. 당신은해야항상 비특권 사용이를 위해 사용자.

이제 홈 경로에 디렉터리 구조를 만들어 보겠습니다.

 $ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

을 작성해야 하는데 ~/.rpmmacros, 해당 파일이 없는지 확인하거나 현재 파일을 백업해 두어야 합니다.

 $ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

그 후에는 시스템이 더 이상 검색할 필요 없이 대부분의 RPM 패키지를 빌드할 준비가 되어 있어야 합니다.

더 많은 도구가 필요합니다

의 대해서 들어 봤나 make? 음, 아직 설치하지 않았습니다. 이제 손(손가락)을 작동해 보겠습니다.

$ sudo yum install make

C또한, 다음에서 수행되는 일부 패키지를 빌드하려면 라이브러리가 필요할 수도 있습니다 C.

# yum install gcc

이전에 말했듯이 더 많은 라이브러리가 필요할 수 있지만 이는 구축 중인 소프트웨어에 따라 다릅니다. 일반적으로 이러한 파일은 다음으로 끝나므로 -devel패키지에서 설치해야 한다고 알리면 zlib설치해야 합니다 zlib-devel.

소스코드 패키지 및 생성.spec

tar.gz문서를 받으셨을 것입니다 . 그렇지 않다면 무엇을 기다리고 계십니까? ? 소스 코드가 있으면 .spec파일을 생성해야 합니다. 이는 debian/*빌드하려는 패키지에 대한 규칙과 정보를 포함한다는 점에서 데비안과 유사한 시스템의 파일 과 동일합니다 .

복사의 예는 다음과 같습니다.어딘가에서:

#
# Example spec file for cdplayer app...
#
Summary: A CD player app that rocks!
Name: cdplayer
Version: 1.0
Release: 1
Copyright: GPL
Group: Applications/Sound
Source: ftp://ftp.gnomovision.com/pub/cdplayer/cdplayer-1.0.tgz
URL: http://www.gnomovision.com/cdplayer/cdplayer.html
Distribution: WSS Linux
Vendor: White Socks Software, Inc.
Packager: Santa Claus <[email protected]>

%description
It slices!  It dices!  It's a CD player app that
can't be beat.  By using the resonant frequency
of the CD itself, it is able to simulate 20X
oversampling.  This leads to sound quality that
cannot be equaled with more mundane software...

지금까지는 모든 것이 자명해야 한다고 생각합니다. 하지만 여기서는 패키지 작성, 준비 등에 대한 규칙도 작성해야 하지만 모든 사람이 더 쉽게 만들 수 있도록 노력할 것이므로 매크로를 사용하겠습니다.

%prep
%setup

처음 몇 줄은 %prep소프트웨어 패키지를 업그레이드하고 설치하기 전에 수행해야 하는 준비 작업을 나타냅니다. 수동으로 자신만의 규칙을 만들 수도 있지만 솔직히 말해서 그건 고통스럽습니다. 이제 끝났으니 다음 부분은 %build여기서 무슨 일이 일어나고 있는지 쉽게 알 수 있다는 것입니다. ;)

%build
make

이 섹션을 필요에 맞게 개인화할 수 있으며 BUILD_PARAMETERS="--some-switch"이는 물론 소스 패키지에 따라 다릅니다. 이제 %install다음과 같은 부분이 나옵니다.

%install
make install

여기에는 로켓 과학이 없습니다. 따라서 일부만 남습니다 %files.

%files
%doc README
/usr/local/bin/cdp
/usr/local/bin/cdplay
/usr/local/man/man1/cdp.1

이 섹션에는 패키지에 포함될 모든 파일이 나열됩니다. 이 섹션이 설정되지 않으면 패키지는 사실상 비어 있습니다! 문서는 ...당신이 이미 알고 있다는 것을 의미합니다 %doc. 이제 이 섹션에 포함할 파일을 어떻게 선택합니까 %files? 인용하자면:

대부분의 응용 프로그램 파일은 makefile을 통해 설치되기 때문에 RPM은 빌드 프로세스의 해당 부분을 제어할 수 없으므로 어떤 파일이 패키지에 포함될 것인지 자동으로 결정할 수 없습니다. 어떤 사람들은 설치하는 모든 파일의 이름을 기록하는 수정된 버전의 설치를 사용하려고 합니다. 그러나 모든 makefile이 install을 사용하는 것은 아니며, 사용하더라도 가끔씩만 사용됩니다.

시도해 볼 수 있는 또 다른 접근 방식은 빌드 전후에 빌드 시스템의 모든 파일 목록을 가져오고 차이점을 파일 목록으로 사용하는 것입니다. 이 방법을 사용하면 응용 프로그램이 설치한 모든 파일을 확실히 찾을 수 있지만 시스템 로그, /tmp의 파일 등과 같은 불필요한 파일도 선택할 수 있습니다. 이 접근 방식을 실현 가능하게 만드는 유일한 방법은 빌드 시스템에서 다른 작업을 수행하지 않는 것인데, 이는 매우 불편합니다. 또한 이 접근 방식은 특정 시간에 여러 패키지가 시스템에 구축되는 것을 방지합니다.

현재 파일 목록을 만드는 가장 좋은 방법은 makefile을 읽어서 어떤 파일이 설치되는지 확인하고, 빌드 시스템에 설치된 파일과 비교하여 확인한 다음 목록을 만드는 것입니다.

어떻게 하느냐에 따라 다릅니다 :).

마무리 손질

좋습니다. 작동하는 간단한 파일이 생겼습니다 .spec. 그러나 세상이 항상 순조롭게 진행되는 것은 아니며 이것이 작동하지 않는 경우도 있으므로 더 복잡한 빌드 단계가 필요할 수 있습니다. 찾았어요이 가이드따라하기 쉽고 도움이 될 수 있습니다.

원천:

관련 정보