[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
  Web www.spinics.net

Re: confused about %config file directive

In regard to: Re: confused about %config file directive, Greg_Swift@xxxxxxxxxx:

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

In my-apache.spec I used these lines:

%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

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 Mooney                                  mooney@xxxxxxxxxxxxxxxxxxxxxxxxx
Enterprise Computing & Infrastructure       701-231-1076 (Voice)
Room 242-J6, IACC Building                  701-231-8541 (Fax)
North Dakota State University, Fargo, ND 58105-5164
Rpm-list mailing list

[Linux Kernel]     [Red Hat Install]     [PAM]     [Red Hat Watch List]     [Red Hat Development]     [Red Hat]     [Gimp]     [Yosemite News]     [IETF Discussion]