confused about %config file directive

Tim Mooney mooney at dogbert.cc.ndsu.NoDak.edu
Wed Jun 2 19:42:18 UTC 2010


In regard to: Re: confused about %config file directive, Greg_Swift at aotx.us...:

>> I want to create two RPMs.  The first RPM install apache and I call it
>> my-apache.rpm and a second my-apache-config.rpm.  my-apache.rpm
>> installs apache and my-apache-config.rpm adds some files like
>> /usr/local/apache/conf/extra/my.conf but I also want it to overwrite
>> my-apache.rpm's /usr/local/apache/conf/httpd.conf with a custom
>> httpd.conf
>>
>> In my-apache.spec I used these lines:
>>
>> %files
>> ...
>> %config /apps/SD/apache/conf/httpd.conf
>>
>> but when I attempt to install the RPM via YUM I get an error
>>
>> Transaction Check Error:
>>   file /usr/local/apache/conf/httpd.conf from install of
>> my-apache-config conflicts with file from package my-apache
>>
>> I tried not using the %config directive and had the same result.  How
>> can I specify in my spec file that it is OK to overwrite a file?
>
> There is no clean, right, or easy way to do this (at least not that I've
> found so please please please, someone correct me and prove me wrong).

There isn't a clean way to do this that I'm aware of either.  I don't
think "clean" would even apply in a situation like this.

However, there are options.

First, since the original person is also installing their own version
of apache, the simple thing to do would be to

- modify their version of apache to not include the stock configuration
   files (or to include them only as "%doc", so they're installed in your
   docs directory as a reference).

- modify their version of apache so that it "Requires: my-apache-config",
   so that the my-apache can't be installed without also having appropriate
   config files installed.

- package the custom apache config files in my-apache-config (having them
   marked as %config or %config(noreplace)).

This avoids the "two packages want to install these files" problem.

An alternative approach would be

- don't actually include any config files (or any files at all, for that
   matter) in my-apache-config, keep them in the my-apache package.

- use a %post install script to actually modify the apache config files,
   using something like perl or sed to edit the stock configuration files.
   This nicely avoids the conflicting files problem because you're not
   packaging any files, you're just providing a script that starts with
   some type of stock config file and converts it into your custom config.

For extra credit, instead of using %post you could use a trigger.  That
has an even bigger advantage -- if your my-apache RPM is upgraded, you
could set up your triggers so that your modification script is
automatically run again, so your custom config gets re-applied without
anyone needing to remember to uninstall/reinstall your my-apache-config
RPM.

One final alternative is to not manage your custom config settings via RPM
at all, and instead use a configuration management system like puppet or
(ugh) cfengine.  If you have Red Hat Satellite, you might also have the
ability to manage config files through that.

Tim
-- 
Tim Mooney                                  mooney at dogbert.cc.ndsu.NoDak.edu
Enterprise Computing & Infrastructure       701-231-1076 (Voice)
Room 242-J6, IACC Building                  701-231-8541 (Fax)
North Dakota State University, Fargo, ND 58105-5164


More information about the Rpm-list mailing list