[CentOS] Scriptable way to edit yum .repo files?
Amos Shapira
amos.shapira at gmail.com
Thu Jan 8 03:57:00 UTC 2009
2009/1/8 R P Herrold <herrold at centos.org>:
> On Thu, 8 Jan 2009, Amos Shapira wrote:
>
>> I found Perl's Conf::INI module but it expects comments beginning with
>> ";", not "#".
>
> and
> | sed -e 's@^#@;@g'
> cannot cure that bad habit on generated files or an input
> stream?
Possibly, but then I'll get pushed back to scripting things around.
When I saw Filipe's pointer to configparser I already finished coding
something rough in perl which detects [section]'s in input files, adds
the "priority=nnn" for each section and moves the old version to a
backup with "~". The code should be generalised to do the other stuff
I'm interested in (e.g. configure yum-priorities, or the trigger for
all of this - yum-updatesd). It assumes that a section and also end
with the first empty line. Maybe this is wrong but it keeps my current
files "looking right".
It's small enough that I pasted it below for your amusement.
I also found a python script based on configparser which can do this
from command line
(http://robinbowes.com/article.php/20081026162228424) but it loses
comments.
Cheers,
--Amos
Here is my script:
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
use Readonly;
Readonly::Hash our %PRIORITIES =>
(
'base' => '1',
'updates' => '1',
'addons' => '1',
'extras' => '1',
'centosplus' => '2',
'c5-testing' => '13',
'rpmforce' => '10',
);
sub configure_priorities
{
my $orig_fh = new IO::File;
my $new_fh = new IO::File;
for my $repo_file (glob '/etc/yum.repos.d/*.repo')
{
$orig_fh->open($repo_file, 'r')
or die "!!! configure_priorities: failed to open \"$repo_file\"";
rename($repo_file, $repo_file.'~')
or die "!!! configure_priorities: failed to rename
\"$repo_file\" to \"$repo_file~\": $!";
$new_fh->open($repo_file, 'w')
or die "!!! configure_priorities: failed to create new
\"$repo_file\": $!";
my $reponame = undef;
while (my $line = $orig_fh->getline)
{
if ($line =~ /^\[(.+)\])/)
{
defined $reponame and
defined $PRIORITIES{$reponame} and
$new_fh->print("priority=", $PRIORITIES{$reponame}, "\n");
$reponame = $1; # will become undef if current $line is empty
}
$new_fh->print($line);
}
# if no empty lines after last repo
defined $reponame and
defined $PRIORITIES{$reponame} and
$new_fh->print("priority=", $PRIORITIES{$reponame}, "\n");
$new_fh->close
or die "!!! configure_priorities: Failed to close new version of
\"$repo_file\": $!";
}
$orig_fh->close
or warn "close failed: $!";
}
configure_priorities;
exit 0;
More information about the CentOS
mailing list