RPM을 통해 구성을 관리하시겠습니까?

RPM을 통해 구성을 관리하시겠습니까?

소규모 부서 네트워크의 여러 서버에 일부 구성 사용자 정의를 제공해야 합니다. 우리는 현재 RHEL5를 사용하고 있으며 작업을 반복하고 싶지 않기 때문에 해당 구성으로 RPM을 생성하여 RHN에 업로드하고 싶습니다.

이제 문제는: .NET을 통해 NTP 구성을 배포한다고 가정합니다 /etc/ntp.conf. 안타깝게도 /etc/ntp.d/내 파일을 넣을 파일이 없으므로 ntp.confRPM으로 해당 파일을 덮어써야 합니다. 즉 ntp, 업데이트할 때 해당 구성을 잃지 않고 구성 파일 충돌 가능성도 없이 이를 올바르게 수행하려면 어떻게 해야 합니까 ?

답변1

대신 꼭두각시를 사용하는 David의 솔루션을 사용하세요. 정말.

그러나 결정한 경우 "/etc/ntp.conf.rassie"가 포함된 rassie-ntp-conf 패키지를 생성할 수 있습니다. 사양 파일에는 %post기본 구성 위에 구성을 복사하는 와 %triggerin -- ntp-server동일한 작업을 수행하는 " "도 필요합니다. 이렇게 하면 이후 업그레이드가 구성을 덮어쓰는 경우 트리거가 해당 구성을 다시 복사합니다. 어쩌면 확실히 하기 위해 /etc/cron.daily에 뭔가를 넣어서 동일한 작업을 수행할 수도 있습니다. 아마도 모든 스크립트에서 service ntpd condrestartcp 이후에도 작업을 수행해야 할 것입니다.

그것이 기본입니다. 더 많은 패키지에 대해 이 작업을 수행하려면 대신 /etc/rassie/를 통해 실행되는 표준 스크립트를 작성하여 /etc에 복사할 구성을 찾고 대신 %post 및 %triggerin 항목이 이를 실행하도록 할 수 있습니다.

하지만 실제로는 이를 무시하고 puppet이나 Chef 또는 cfengine을 사용하십시오. 이러한 종류의 "RPM을 통해 구성을 내보내는" 방식은 RPM이 두 개의 서로 다른 패키지가 싸우도록 설계되지 않았다는 근본적인 문제에서 비롯된 미묘한 문제로 가득 차 있습니다. 단일 파일. 테스트도 어렵고, 디버깅도 어렵고, 처음부터 꼭두각시를 사용하고 싶게 만드는 영리한 솔루션입니다.

답변2

대체 솔루션을 제안할 수 있나요? Puppet 또는 Cfengine2와 같은 구성 관리 도구가 원하는 작업을 수행한다는 것을 알 수 있습니다. 시스템이 어떻게 보이길 원하는지 설명하는 매니페스트 파일을 작성하면 시스템이 사라지고 시스템이 그렇게 보이도록 변경됩니다. 시스템을 변경하는 방법이 아니라 시스템이 어떻게 보여야 하는지 설명한다는 중요한 차이점에 주목하세요. ntp의 예는 다음과 같습니다.

class ntp {
   package {"ntpd":
       ensure => latest,
   }
   file { "/etc/ntp/ntp.conf":
       source => "puppet:///ntp/ntp.conf",
       owner => "root",
       group => "root",
       mode => 644,
       require => Package["ntpd"],
   }
   service { "ntpd":
       ensure => running,
       enable => true,
       subscribe => File["/etc/ntp/ntp.conf"],
   }
}

특정 노드에 이 클래스를 포함시키면 ntpd 패키지를 설치하고 파일을 서버에 복사한 다음 데몬이 실행 중인지 확인하게 됩니다. puppet이 ntp.conf를 변경하면 ntp 데몬이 다시 시작됩니다(subscribe 라인 덕분에).

이것이 당신의 문제를 어떻게 해결합니까? 음, 새 버전의 ntp가 설치될 때 패키지가 구성 파일을 덮어쓰면 puppet은 이전 버전을 다시 복사합니다. 차이점이 있는 경우 변경 시 차이점이 표시되므로 어떤 변경 사항이 있는지 확인할 수 있으므로 차이점을 확인하고 해당 변경 사항을 원할 경우 중앙 버전을 업데이트할 수 있습니다.

답변3

변경 사항을 푸시하기로 결정한 방법에 관계없이 ntp.conf(또는 실제로 모든 구성 파일)를 수정해야 하고 파일을 전체적으로 교체하고 싶지 않은 경우 Augeas를 살펴보십시오(http://augeas.net). 약간의 학습 곡선이 있지만 파일 구문 분석/편집의 복잡성이 많이 제거됩니다.

답변4

나는 rpms만을 사용하여 처리하려고 노력했습니다. 구성 파일이 매우 간단한 경우에만 가능합니다.

가장 좋은 접근 방식은 구현하기가 쉽지 않지만 모두가 제안한 것처럼 puppet 및 cfengine과 같은 도구를 사용하는 것입니다.

관련 정보