Rex-Repositorio
view release on metacpan or search on metacpan
bin/repositorio view on Meta::CPAN
type = Yum
images = true
</Repository>
# create a custom repository
<Repository centos-6-x86-64-mixed>
local = centos-6-x86-64-mixed/mixed/6/x86_64/
type = Yum
</Repository>
If you want to sign your custom repositories you have to configure the gpg key to use.
repositorio automatically exports the public key into the root of the repository, so it can be imported from the clients.
If you don't specify the gpg password repositorio will ask you for the password.
An example for YUM repositories:
<Repository centos-6-x86-64-mixed>
local = centos-6-x86-64-mixed/mixed/6/x86_64/
type = Yum
<gpg>
key = DA95F273
password = test
</gpg>
</Repository>
An example for APT repositories:
<Repository debian-7-x86-64-mixed>
local = debian-7-x86-64-mixed/debian
type = Apt
arch = amd64
dist = wheezy
component = mixed
<gpg>
key = DA95F273
password = test
</gpg>
</Repository>
An example log4perl.conf file:
log4perl.rootLogger = DEBUG, FileAppndr1
log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
log4perl.appender.FileAppndr1.filename = /var/log/repositorio.log
log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
lib/Rex/Repositorio.pm view on Meta::CPAN
<Repository debian-wheezy-i386-main>
url = http://ftp.de.debian.org/debian/
local = debian-wheezy-amd64-main/debian
type = Apt
arch = i386
dist = wheezy
component = main
</Repository>
If you want to sign your custom repositories you have to configure the gpg key to use.
repositorio automatically exports the public key into the root of the repository, so it can be imported from the clients.
If you don't specify the gpg password repositorio will ask you for the password.
An example for YUM repositories:
<Repository centos-6-x86-64-mixed>
local = centos-6-x86-64-mixed/mixed/6/x86_64/
type = Yum
<gpg>
key = DA95F273
password = test
</gpg>
</Repository>
An example for APT repositories:
<Repository debian-7-x86-64-mixed>
local = debian-7-x86-64-mixed/debian
type = Apt
arch = amd64
dist = wheezy
component = mixed
<gpg>
key = DA95F273
password = test
</gpg>
</Repository>
An example log4perl.conf file:
log4perl.rootLogger = DEBUG, FileAppndr1
log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
log4perl.appender.FileAppndr1.filename = /var/log/repositorio.log
log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
lib/Rex/Repositorio/Repository/Apt.pm view on Meta::CPAN
##############################################################################
my $url = $self->repo->{url} . "/dists/${dist}";
my $contents = $self->download("$url/Release");
my $ref = $self->_parse_debian_release_file($contents);
my $arch = $self->repo->{arch};
$self->app->logger->notice('Downloading metadata...');
my $destbase = $self->app->get_repo_dir(repo => $self->repo->{name});
# try download Release and Release.gpg
try {
$self->download_metadata(
url => $url . '/Release',
dest => File::Spec->catfile('dists',$dist,'Release'),
force => $option{update_metadata},
);
$self->app->logger->info("1/2 ${url}");
$self->download_metadata(
url => $url . '/Release.gpg',
dest => File::Spec->catfile('dists', $dist, 'Release.gpg'),
force => $option{update_metadata},
);
$self->app->logger->info("2/2 ${url}");
}
catch {
$self->app->logger->info("2/2 ${url}");
$self->app->logger->error($_);
};
lib/Rex/Repositorio/Repository/Apt.pm view on Meta::CPAN
confess "Error running apt-ftparchive generate";
}
system
"cd $repo_dir ; apt-ftparchive release -c=aptftp.conf dists/$dist >dists/$dist/Release";
if ( $? != 0 ) {
confess "Error running apt-ftparchive release";
}
if ( exists $self->repo->{gpg} && $self->repo->{gpg}->{key} ) {
my $key = $self->repo->{gpg}->{key};
my $pass = $self->repo->{gpg}->{password};
if ( !$pass ) {
$pass = $self->read_password("GPG key passphrase: ");
}
unlink "$repo_dir/dists/$dist/Release.gpg";
my $cmd =
"cd $repo_dir ; gpg -u $key "
. "--batch --passphrase '"
. $pass
. "' -bao dists/$dist/Release.gpg dists/$dist/Release";
system $cmd;
if ( $? != 0 ) {
$cmd =~ s/\Q$pass\E/\*\*\*\*\*\*\*/;
confess "Error running gpg sign: $cmd";
}
# export pub key as asc file
my $pub_file = $self->repo->{name} . ".asc";
$cmd = "cd $repo_dir ; gpg -a --output $pub_file --export $key";
system $cmd;
if ( $? != 0 ) {
confess "Error running gpg export: $cmd";
}
}
}
# test if all necessary parameters are available
override verify_options => sub {
my $self = shift;
super();
if ( !exists $self->repo->{local} ) {
lib/Rex/Repositorio/Repository/Yum.pm view on Meta::CPAN
@_,
{
file => {
type => SCALAR
},
}
);
my $dest = File::Spec->catfile($self->app->get_repo_dir(repo => $self->repo->{name}), basename( $option{file} ));
if ( exists $self->repo->{gpg} && $self->repo->{gpg}->{key} ) {
my $key_id = $self->repo->{gpg}->{key};
my $exp = Expect->spawn("/bin/rpmsign", "--addsign", "--key-id=$key_id", $option{file});
$exp->expect(60, [
qr/Enter pass phrase:/ => sub {
my $exp = shift;
$exp->send($self->repo->{gpg}->{password} . "\n");
exp_continue;
},
]);
$exp->soft_close();
}
$self->add_file_to_repo( source => $option{file}, dest => $dest );
$self->_run_createrepo();
}
lib/Rex/Repositorio/Repository/Yum.pm view on Meta::CPAN
$self->remove_file_from_repo( file => $file );
$self->_run_createrepo();
}
sub _run_createrepo {
my $self = shift;
my $repo_dir = $self->app->get_repo_dir(repo => $self->repo->{name});
if ( exists $self->repo->{gpg} && $self->repo->{gpg}->{key} ) {
unlink File::Spec->catfile($repo_dir, qw/ repodata repomd.xml.asc /);
}
system "cd $repo_dir ; createrepo .";
if ( $? != 0 ) {
confess "Error running createrepo.";
}
if ( exists $self->repo->{gpg} && $self->repo->{gpg}->{key} ) {
my $key = $self->repo->{gpg}->{key};
my $pass = $self->repo->{gpg}->{password};
if ( !$pass ) {
$pass = $self->read_password("GPG key passphrase: ");
}
my $cmd =
"cd $repo_dir ; gpg --default-key $key -a --batch --passphrase '"
. $pass
. "' --detach-sign repodata/repomd.xml";
system $cmd;
if ( $? != 0 ) {
$cmd =~ s/\Q$pass\E/\*\*\*\*\*\*\*/;
confess "Error running: $cmd";
}
my $pub_file = $self->repo->{name} . ".asc";
unlink File::Spec->catfile($repo_dir, $pub_file);
$cmd = "cd $repo_dir ; gpg -a --output $pub_file --export $key";
system $cmd;
if ( $? != 0 ) {
confess "Error running gpg export: $cmd";
}
}
}
# test if all necessary parameters are available
override verify_options => sub {
my $self = shift;
super();
if ( !exists $self->repo->{local} ) {
( run in 0.564 second using v1.01-cache-2.11-cpan-df04353d9ac )