need spec file example to replace files from various packages

Steve Friedman steve at adsi-m4.com
Thu Dec 7 00:30:42 UTC 2006


It isn't much.

The init.d file is just:

doconfig() {
         if [ -f ${CNF_HOME}/$1.proto ]; then
           ${CNF_HOME}/config.sh ${CNF_HOME}/$1.proto > $2
         fi
}

   doconfig motd /etc/motd
   doconfig yum.conf /etc/yum.conf
   doconfig selinux-config  /etc/selinux/config

   etc.

   (and the enabling/disabling of various services).

config.sh is:

sed 's/__HOSTNAME__/h1/g'          $1      | \
sed 's/__DOMAIN__/d1/g'       | \
sed 's/__DNS_RESOLVER__/172.16.1.22/g'          | \
sed 's/__NTP_SERVER__/172.16.1.22/g'   | \
sed 's/__WAN_GATEWAY__/172.16.1.1/g'  | \
  etc.

This allows us to have a master config file so that one parameter changed 
in one place updates the various necessary config files (e.g., the 
hostname can be set in /etc/hosts and /etc/sysconfig/network, the domain 
in resolv.conf and /etc/sysconfig/network, etc).  Likewise, the firewall 
script only allows access to NTP to NTP_SERVER, DNS to DNS_RESOLVER, SMTP 
to the MAIL_SERVER, etc (belts and suspenders is easy when it doesn't take 
any effort :-).  The script also adds files to /etc/profile.d directly.

The specfile is just a checkout from CVS in build, copy of the files to 
/etc/localconfig in install, the list of files (with only config.sh 
being marked %config), and the list of required RPMs.  The only wrinkle is 
including in %post a script that updates config.sh with a new config 
element (since config.sh won't be updated).  For example,

if ! grep -q __AUTO_YUM_UPD__ config.sh; then
  cp config.sh config.sh.rpmbackup
  sed '/WAN_GATEWAY/s/\\$/\\\nsed %s\/__AUTO_YUM_UPD__\/yes\/g%        |\
            \\/' config.sh.rpmbackup | sed "s/%/'/g"  > config.sh
fi

was needed in the migration to FC6 since yum-updatesd.conf was added.

The only problem with this solution is the makefiles that we have for 
certain services (e.g., postfix or selinux) trigger on every update.  I 
need to clean this up so that doconfig doesn't update the file if there 
wasn't a change.

Steve


On Tue, 5 Dec 2006, Craig White wrote:

> If you were inclined to share, I would be inclined to look...that sounds
> pretty sweet.
>
> Craig
>
> On Tue, 2006-12-05 at 18:11 -0500, Steve Friedman wrote:
>> We wrote an RPM that:
>>
>> (a) Requires whatever other RPMs that we want to use (so a standard
>> install would work and we didn't need to spend time selecting the packages
>> to install and so that we could deploy a newly useful RPM quickly to all
>> machines)
>>
>> (b) installs our config files to /etc/local-install
>>
>> (c) includes an init.d script which runs at level 01 in rc2/3/4/5 to copy
>> the above files to their appropriate location (overwriting the RPM-owned
>> file) on each startup.
>>
>> I couldn't think of a better way.
>>
>> Steve Friedman
>>
>>
>> On Tue, 5 Dec 2006, Paul Johnson wrote:
>>
>>> After installing Fedora, I want to replace various configuration files
>>> on lab computers. If I can learn how to do this in the post section of
>>> an RPM spec file, I will be happy.  For example, I want/need to
>>> replace things like
>>>
>>> /etc/gdm/PreSession/Default
>>> /etc/gdm/PostSession/Default
>>> /etc/pam.d/system-auth
>>> /etc/hosts.allow
>>> /etc/hosts.deny
>>>
>>> One brute force option is to install with rpm --replacefiles, but yum
>>> does not like that.
>>> So can  you point me at a spec file or two that will give example
>>> syntax on how I can create a backup of those files and replace them
>>> with the ones I want.
>>>
>>> Please?
>>>
>>>
>>
>
>




More information about the fedora-list mailing list