initial commit of file from CVS for smeserver-yum on Thu 26 Oct 11:26:23 BST 2023

This commit is contained in:
2023-10-26 11:26:23 +01:00
parent b6e325dc61
commit 2302f71017
189 changed files with 4126 additions and 2 deletions

View File

@@ -0,0 +1,14 @@
[Unit]
Description=Yum db updater for Koozali SME Server
After=network-pre.target networking.service
Conflicts=yum-cron.service
[Service]
Type=forking
ExecStartPre=/sbin/e-smith/service-status yum
ExecStart=/sbin/e-smith/yum_update_dbs
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=sme-server.target

View File

@@ -0,0 +1,446 @@
# vim: noexpandtab tabstop=4
import os
import shutil
import subprocess
import syslog
from yum.constants import *
from yum.plugins import PluginYumExit
from yum.plugins import TYPE_CORE
from yum.packages import parsePackages
from yum.packages import RpmBase
requires_api_version = '2.1'
plugin_type = (TYPE_CORE,)
events_path = '/etc/e-smith/events'
initialize_database = events_path + '/actions/initialize-default-databases'
navigation_conf = events_path + '/actions/navigation-conf'
systemctl = "/usr/bin/systemctl"
yum_update_dbs = events_path + '/actions/yum-update-dbs'
signal_event = '/sbin/e-smith/signal-event'
config_set = '/sbin/e-smith/config'
status_file = '/var/run/yum.status'
expand_template = '/sbin/e-smith/expand-template'
service = '/sbin/e-smith/service'
eventlist = dict()
actionlist = dict()
templateslist = dict()
serviceslist = dict()
# list of packages that need a reboot
# if a package name starts with one these names, a reboot is needed
rebootpkgs = ['daemontools', 'dbus', 'glibc', 'gnutls', 'kernel', 'linux-firmware', 'lvm2', 'mdadm', 'openssl-libs', 'systemd']
# exclusions :
rebootpkgsexclude = dict()
rebootpkgsexclude['dbus']='-python','-tests','-devel','-doc',
rebootpkgsexclude['glibc']='-devel','-headers','-statics','-utils','-glib',
rebootpkgsexclude['gnutls']='-devel',
rebootpkgsexclude['kernel']='-doc','-debug','-devel','-abi-whitelists','tools',
rebootpkgsexclude['lvm2']='-devel','-python',
rebootpkgsexclude['systemd']='-devel','-python',
# list of packages that need a service restart
# if a package name starts with one of these values, a service restart is needed
# since, for example, httpd means httpd-admin and httpd-e-smith, we won't use these names directly but via serviceslist (see below)
restartpkgs = ['dovecot','bglibs','cvm','freeradius','httpd','iptables', 'mariadb' , 'nut', 'openldap', 'openssh', 'php', 'pptpd', 'proftp', 'samba', 'spamassassin', 'squid', 'qmail', 'qpsmtpd']
servicenames = dict()
servicenames['bglibs']='cvm-unix',
servicenames['cvm']='cvm-unix',
servicenames['dovecot']='dovecot',
servicenames['freeradius']='radiusd',
servicenames['httpd']='httpd-admin','httpd-e-smith',
servicenames['iptables']='masq',
servicenames['mariadb']='mariadb',
servicenames['nut']='nut-server','nut-driver','nut-monitor',
servicenames['openldap']='ldap',
servicenames['openssh']='sshd',
servicenames['php']='httpd-e-smith', 'php-fpm', 'php55-php-fpm', 'php56-php-fpm', 'php70-php-fpm', 'php71-php-fpm', 'php72-php-fpm', 'php73-php-fpm', 'php74-php-fpm', 'php80-php-fpm', 'php81-php-fpm',
servicenames['proftp']='ftp',
servicenames['samba']='smb',
servicenames['spamassassin']='spamassassin',
servicenames['squid']='squid',
servicenames['qmail']='qmail',
servicenames['qpsmtpd']='qpsmtpd',
smechange = False
smechangelist = dict()
ourfile = False
erasing = False
DEBUG = False
smeEventPretrans = False
removenorebootok = dict()
def log(s):
if DEBUG :
print s
def createevent():
if os.path.isdir('/etc/e-smith/events/temp'):
shutil.rmtree('/etc/e-smith/events/temp')
os.makedirs('/etc/e-smith/events/temp/services2adjust', 0o777)
os.makedirs('/etc/e-smith/events/temp/templates2expand', 0o777)
def addtemplate2expand(template):
#check filename
head_tail = os.path.split(template)
head = head_tail[0];
filename = head_tail[1];
# create dir
if not os.path.isdir('/etc/e-smith/events/temp/templates2expand' + head):
os.makedirs('/etc/e-smith/events/temp/templates2expand' + head, 0o777)
#touch file
fname= '/etc/e-smith/events/temp/templates2expand'+ template
fhandle = open(fname, 'a')
try:
os.utime(fname, None)
finally:
fhandle.close()
def report_yum_status(status):
fileHandle = open(status_file, 'w')
fileHandle.write(status)
fileHandle.close()
def predownload_hook(conduit):
report_yum_status('predownload')
def postdownload_hook(conduit):
report_yum_status('postdownload')
def prereposetup_hook(conduit):
global ourfile
ourfile = True
report_yum_status('prereposetup')
def postreposetup_hook(conduit):
report_yum_status('postreposetup')
def exclude_hook(conduit):
report_yum_status('exclude')
def preresolve_hook(conduit):
report_yum_status('preresolve')
def postresolve_hook(conduit):
report_yum_status('postresolve')
def pretrans_hook(conduit):
# we might need to change the strategy here to make a difference between update and removal.
#transaction set states
#TS_UPDATE = 10
#TS_INSTALL = 20
#TS_TRUEINSTALL = 30
#TS_ERASE = 40
#TS_OBSOLETED = 50
#TS_OBSOLETING = 60
#TS_AVAILABLE = 70
#TS_UPDATED = 90
#TS_FAILED = 100
#TS_INSTALL_STATES = [TS_INSTALL, TS_TRUEINSTALL, TS_UPDATE, TS_OBSOLETING]
#TS_REMOVE_STATES = [TS_ERASE, TS_OBSOLETED, TS_UPDATED]
report_yum_status('pretrans')
log("*******Pretrans********")
# Prefetch filelist for packages to be removed,
# otherwise for updated packages headers will not be available
ts = conduit.getTsInfo()
removes = ts.getMembersWithState(output_states=TS_REMOVE_STATES)
rpmdb = conduit.getRpmDB()
global smechange
global eventlist
global actionlist
global templateslist
global serviceslist
global erasing
global smeEventPretrans
global removenorebootok
# reinstall are not listed there so already skipped
# downgrade are going there
# update are going there, we filter them out
# real removal are the real deal there ; downgrade are played like if they were removal
for tsmem in removes:
erasing = True
(n, a, e, v, r) = tsmem.po.pkgtup
if tsmem.output_state == TS_UPDATED :
# if we are actually updating then we are not removing, and new package will do better... skipping
log('skiping as updating ==> state ' + str(tsmem.po.state) + " RPM current state" + str(tsmem.current_state) + " RPM output state" + str(tsmem.output_state))
continue
log('**Package: ' + tsmem.name + ' to be removed')
smeevent = tsmem.name + '-update'
if os.path.isdir(events_path + os.sep + smeevent):
tmppath = events_path + os.sep + smeevent + os.sep
eventlist[tsmem.name] = smeevent
if os.path.isdir(tmppath + "templates2expand" + os.sep):
tmppathtmpl = tmppath + "templates2expand" + os.sep
for subdir, dirs, files in os.walk(tmppathtmpl):
for file in files:
mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep)
if not templateslist.has_key(mytmptemplate):
templateslist[mytmptemplate]=mytmptemplate
log(" template " + mytmptemplate)
# nothing for actions ???
tmppathsrv = tmppath + os.sep
files = [f for f in os.listdir(tmppathsrv)]
for f in files:
if os.path.islink(tmppathsrv + f):
mytmpaction = os.path.realpath(os.readlink(tmppath + f).replace("..",events_path))
log(" link " + f + ": " + mytmpaction)
actionlist[f]=mytmpaction
# end debug print
if os.path.isdir(tmppath + "services2adjust" + os.sep):
tmppathsrv = tmppath + "services2adjust" + os.sep
files = [f for f in os.listdir(tmppathsrv)]
for f in files:
if os.path.islink(tmppathsrv + f):
log(" service link " + f + ": " + (os.readlink(tmppathsrv + f)))
mytmpserv = os.readlink(tmppathsrv + f)
if not serviceslist.has_key(f):
serviceslist[f]=mytmpserv
else:
if mytmpserv == "restart":
log("overriding all signals, forcing restart " + f )
serviceslist[f]="restart"
removenorebootok[n]=1;
thispo = rpmdb.searchNevra(name=n, arch=a, epoch=e, ver=v, rel=r)[0]
# thispo.dirlist thispo.ghostlist thispo.filelist
if "/etc/e-smith/web/panels/manager/cgi-bin" in thispo.dirlist:
log(" ==> pannel detected : adding navigation-conf")
actionlist['S80navigation-conf']="/etc/e-smith/events/actions/navigation-conf"
else:
if (n.startswith('smeserver') or n.startswith('e-smith')) and not n.startswith('smeserver-locale'):
smechange = True
smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state) )
#only for debug
log('## smechange: '+str(smechange))
log('## eventlist: '+ str(eventlist))
log('## templateslist: '+str(templateslist.keys()))
log('## serviceslist: '+str(serviceslist.items()))
log('## actions ALL: ' + str(actionlist.keys()))
log('## smechangelist: ' + str(smechangelist.keys()))
if len(serviceslist)>0:
# would it be a good idea to do some action/event there to stop service being removed ?
# for the moment we do not, logic : if template still there at posttrans, we expand it after removal
# probably the actions in some situations could be done before...
# create an empty temp event
print "Creating temporary event 'temp' and populating it..."
createevent()
print " Adding services to adjust"
for kservices in serviceslist:
log(" " + kservices + ": " + serviceslist[kservices])
os.symlink(serviceslist[kservices], '/etc/e-smith/events/temp/services2adjust/' + kservices)
# execute the event ; should we really wait ??
print "Executing signal-event temp before uninstalling ..........."
os.spawnl(os.P_WAIT,signal_event,signal_event, 'temp')
smeEventPretrans = True;
def posttrans_hook(conduit):
report_yum_status('posttrans')
log("*******Postrans********")
ts = conduit.getTsInfo()
rpmdb = conduit.getRpmDB()
global smechange
global eventlist
global actionlist
global templateslist
global serviceslist
global erasing
global smeEventPretrans
global removenorebootok
for tsmem in ts.getMembers():
(n, a, e, v, r) = tsmem.po.pkgtup
# n: name ; a : arch; e: epoch ; v: version, r: release
#if tsmem.output_state in TS_INSTALL_STATES:
# thispo = rpmdb.searchNevra(name=n, arch=a, epoch=e, ver=v, rel=r)[0]
# we're upgrading/installing/removing a rebootpkgs package.. a reboot is required
for pkg in rebootpkgs:
if n.startswith(pkg):
log('**Package: ' + tsmem.name + ' triggers reboot')
# we do some exclusions -devel -doc ...
if pkg in rebootpkgsexclude:
cont=False
for name in rebootpkgsexclude[pkg]:
if n.startswith(pkg + name):
cont=True
if cont:
# this is an exception we do not need reboot : -devel, -doc ...
continue
# either no exception or does not fit exceptions: we need reboot
smechange = True
smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state))
#log("smechange set to True because of " + pkg)
# check if we're upgrading a restartpkgs rpm
for pkg in restartpkgs:
if n.startswith(pkg):
if pkg in servicenames:
for name in servicenames[pkg]:
if not serviceslist.has_key(name):
serviceslist[name] = 'restart'
else:
if not serviceslist.has_key(pkg):
serviceslist[pkg] = 'restart'
#if smechange is true we can ignore the following part
# wondering if we reallly do want to ignore that : let's say we want to delay kernel reboot,
# could we at least configure httpd cleanly until next week ?
# also when updating a package the erasing flag was on and prevented to do this ....
# if not smechange and not erasing:
if True:
smeevent = tsmem.name + '-update'
if os.path.isdir(events_path + os.sep + smeevent):
tmppath = events_path + os.sep + smeevent + os.sep
eventlist[tsmem.name] = smeevent
files = [f for f in os.listdir(tmppath)]
for f in files:
if os.path.islink(tmppath + f):
mytmpaction = os.path.realpath(os.readlink(tmppath + f).replace("..",events_path))
#log(" link " + f + ": " + mytmpaction)
actionlist[f]=mytmpaction
if os.path.isdir(tmppath + "templates2expand" + os.sep):
tmppathtmpl = tmppath + "templates2expand" + os.sep
for subdir, dirs, files in os.walk(tmppathtmpl):
for file in files:
mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep)
if not templateslist.has_key(mytmptemplate):
templateslist[mytmptemplate]=mytmptemplate
log(" template " + mytmptemplate)
if os.path.isdir(tmppath + "services2adjust" + os.sep):
tmppathsrv = tmppath + "services2adjust" + os.sep
files = [f for f in os.listdir(tmppathsrv)]
for f in files:
if os.path.islink(tmppathsrv + f):
log(" service link " + f + ": " + (os.readlink(tmppathsrv + f)))
mytmpserv = os.readlink(tmppathsrv + f)
if not serviceslist.has_key(f):
serviceslist[f]=mytmpserv
else:
if mytmpserv == "restart":
#only for debug
log("overriding all signals, forcing restart " + f)
serviceslist[f]="restart"
if tsmem.output_state in TS_INSTALL_STATES:
thispo = rpmdb.searchNevra(name=n, arch=a, epoch=e, ver=v, rel=r)[0]
# thispo.dirlist thispo.ghostlist thispo.filelist
if "/etc/e-smith/web/panels/manager/cgi-bin" in thispo.dirlist:
log(" ==> pannel detected : adding navigation-conf")
actionlist['S80navigation-conf']="/etc/e-smith/events/actions/navigation-conf"
else:
if (n.startswith('smeserver') or n.startswith('e-smith')) and not n.startswith('smeserver-locale') and not (n in removenorebootok):
smechange = True
smechangelist[n]=str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state)
log("smechange set to True because of " + n + " with " + str(tsmem.po.state) + " " + str(tsmem.current_state) + " " + str(tsmem.output_state) )
#only for debug
log('## smechange: '+str(smechange))
log('## eventlist: '+ str(eventlist))
log('## templateslist: '+str(templateslist.keys()))
log('## serviceslist: '+str(serviceslist.items()))
log('## actions ALL: ' + str(actionlist.keys()))
log('## smechangelist: ' + str(smechangelist.keys()))
# check if smechange is true or if eventlist has items.. in both cases we must initialize databases
if smechange == True or len(eventlist)>0:
print 'Initializing databases'
os.spawnl(os.P_WAIT, initialize_database, initialize_database)
# just in case we add systemd-default and systemd-reload
if not actionlist.has_key('S88systemd-default'):
actionlist['S88systemd-default'] = '/etc/e-smith/events/actions/systemd-default'
if not actionlist.has_key('S89systemd-reload'):
actionlist['S89systemd-reload'] = '/etc/e-smith/events/actions/systemd-reload'
# here we would like to remove duplicates
# those are potential : S??navigation-conf S??systemd-reload S??systemd-default
for act in ('navigation-conf','systemd-reload','systemd-default'):
global iter
iter = 0
for key in actionlist.keys():
if key.endswith(act):
iter += 1
if iter>1:
del actionlist[key]
log("removing duplicate action " + key + " iter " + str(iter))
# now, if smechange is false (no reboot needed), we can execute actions, expand templates and adjust services
# create an empty temp event
print "Creating temporary event 'temp' and populating it..."
createevent()
# fill it with our list of actions
if len(actionlist)>0:
print " Adding actions to execute"
for kactions in actionlist:
if os.path.isfile(actionlist[kactions]):
log(" " + kactions)
os.symlink(actionlist[kactions],'/etc/e-smith/events/temp/' + kactions)
# fill it with our list of templates to expand
if len(templateslist)>0:
print " Adding templates to expand"
for ktemplates in templateslist:
mytemplatedir = '/etc/e-smith/templates/' + ktemplates
mytemplatemeta = '/etc/e-smith/templates.metadata/' + ktemplates
if os.path.exists(mytemplatedir) or os.path.exists(mytemplatemeta):
log(" " + ktemplates)
addtemplate2expand(ktemplates)
if len(serviceslist)>0:
print " Adding services to adjust"
for kservices in serviceslist:
log(" " + kservices + ": " + serviceslist[kservices])
os.symlink(serviceslist[kservices], '/etc/e-smith/events/temp/services2adjust/' + kservices)
# execute the event ; should we really wait ??
print "Executing signal-event temp ..........."
os.spawnl(os.P_WAIT,signal_event,signal_event, 'temp')
if smechange:
os.spawnl(os.P_WAIT, config_set, config_set, 'set', 'UnsavedChanges', 'yes')
os.spawnl(os.P_WAIT, navigation_conf, navigation_conf)
syslog.syslog('Needs signal-event post-upgrade; signal-event reboot because of: ' + str(smechangelist.keys()) )
print "Reload yum db for server-manager"
os.spawnl(os.P_WAIT, systemctl, systemctl, 'restart', 'yum')
def close_hook(conduit):
if ourfile and os.path.isfile('/var/run/yum.status'):
os.unlink('/var/run/yum.status')
if smechange:
print "\nThe following updates require a server reboot:\n" + str(smechangelist.keys())
print "\n=============================================================="
print "WARNING: You now need to run BOTH of the following commands"
print "to ensure consistent system state:\n"
print "signal-event post-upgrade; signal-event reboot\n"
print "You should run these commands unless you are certain that"
print "yum made no changes to your system."
print "=============================================================="

View File

@@ -0,0 +1,416 @@
#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 2004 Shad L. Lords <slords@mail.com>
# Copyright (C) 2005-2006 Gordon Rowell <gordonr@gormand.com.au>
# Copyright (C) 2005 Darrell May <dmay@myezserver.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#----------------------------------------------------------------------
package esmith::FormMagick::Panel::yum;
use strict;
use esmith::ConfigDB;
use esmith::FormMagick;
use CGI::FormMagick::TagMaker;
use esmith::util;
use esmith::cgi;
use File::Basename;
use File::stat;
use Exporter;
use Carp;
our @ISA = qw(esmith::FormMagick Exporter);
our @EXPORT = qw( print_yum_status_page );
our $VERSION = sprintf '%d.%03d', q$Revision: 1.0 $ =~ /: (\d+).(\d+)/;
our $db = esmith::ConfigDB->open or
die "Couldn't open configuration database (permissions problems?)";
our %dbs;
for ( qw(available installed updates) )
{
$dbs{$_} = esmith::ConfigDB->open_ro("yum_$_") or
die "Couldn't open yum_$_ DB\n";
}
for ( qw(repositories) )
{
$dbs{$_} = esmith::ConfigDB->open("yum_$_") or
die "Couldn't open yum_$_ DB\n";
}
=pod
=head1 NAME
esmith::FormMagick::Panels::yum - useful panel functions
=head1 SYNOPSIS
use esmith::FormMagick::Panels::yum;
my $panel = esmith::FormMagick::Panel::yum->new();
$panel->display();
=head1 DESCRIPTION
=cut
=head2 new();
Exactly as for esmith::FormMagick
=cut
sub new {
shift;
my $self = esmith::FormMagick->new(csrfdelay=>600);
$self->{calling_package} = (caller)[0];
bless $self;
return $self;
}
=head2 get_prop ITEM PROP
A simple accessor for esmith::ConfigDB::Record::prop
=cut
sub get_prop {
my ($fm, $item, $prop, $default) = @_;
warn "You must specify a record key" unless $item;
warn "You must specify a property name" unless $prop;
my $record = $db->get($item) or warn "Couldn't get record for $item";
my $value = $record ? $record->prop($prop) : undef;
return defined $value ? $value : $default;
}
=head2 get_value ITEM
A simple accessor for esmith::ConfigDB::Record::value
=cut
sub get_value {
my ($fm,$item,$default) = @_;
my $record = $db->get($item) or warn "Couldn't get record for $item";
my $value = $record ? $record->value() : undef;
return defined $value ? $value : $default;
}
sub is_empty
{
my ($fm, $yumdb) = @_;
my $groups = $dbs{$yumdb}->get_all_by_prop(type => 'group') || 'none';
my $packages = $dbs{$yumdb}->get_all_by_prop(type => 'package') || 'none';
#Show no updates if both = none
return 1 if ($packages eq $groups);
#else return here
return;
}
sub non_empty
{
my ($fm, $yumdb, $type) = @_;
$type ||= 'both';
return 0 unless (exists $dbs{$yumdb});
my $groups = scalar $dbs{$yumdb}->get_all_by_prop(type => 'group');
return $groups if ($type eq 'group');
my $packages = scalar $dbs{$yumdb}->get_all_by_prop(type => 'package');
if ($type eq 'package')
{
return $fm->package_functions_enabled ? $packages : 0;
}
return ($fm->package_functions_enabled or $yumdb eq 'updates') ?
($groups || $packages) : $groups;
}
sub get_options
{
my ($fm, $yumdb, $type) = @_;
my %options;
for ($dbs{$yumdb}->get_all_by_prop(type => $type))
{
$options{$_->key} = $_->key . " " . ($_->prop("Version")||"") . " - " .
($_->prop("Repo")||"");
}
return \%options;
}
sub get_names
{
return [ keys %{get_options(@_)} ];
}
sub get_avail
{
my ($fm, $yumdb, $type) = @_;
return $fm->get_options("available", "package");
}
sub get_status
{
my ($fm, $prop, $localise) = @_;
my $status = $db->get_prop("yum", $prop) || 'disabled';
return $status unless $localise;
return $fm->localise($status eq 'enabled' ? 'ENABLED' : 'DISABLED');
}
sub change_settings
{
my ($fm) = @_;
my $q = $fm->{'cgi'};
for my $param ( qw(
PackageFunctions
) )
{
$db->set_prop('yum', $param, $q->param("yum_$param"));
}
my $check4updates = $q->param("yum_check4updates");
my $status = 'disabled';
if ($check4updates ne 'disabled') { $status = 'enabled'; }
$db->set_prop('yum', 'check4updates', $check4updates);
my $deltarpm = $q->param("yum_DeltaRpmProcess");
$db->set_prop('yum', 'DeltaRpmProcess', $deltarpm);
my $downloadonly = $q->param("yum_DownloadOnly");
if ($downloadonly ne 'disabled') { $status = 'enabled'; }
$db->set_prop('yum', 'DownloadOnly', $downloadonly);
my $AutoInstallUpdates = $q->param("yum_AutoInstallUpdates");
if ($AutoInstallUpdates ne 'disabled') { $status = 'enabled'; }
$db->set_prop('yum', 'AutoInstallUpdates', $AutoInstallUpdates);
$db->set_prop('yum', 'status', $status);
my %selected = map {$_ => 1} $q->param('SelectedRepositories');
foreach my $repos (
$dbs{repositories}->get_all_by_prop(type => "repository") )
{
$repos->set_prop("status",
exists $selected{$repos->key} ? 'enabled' : 'disabled');
}
$dbs{repositories}->reload;
unless ( system( "/sbin/e-smith/signal-event", "yum-modify" ) == 0 )
{
$fm->error('ERROR_UPDATING_CONFIGURATION');
return undef;
}
$fm->success('SUCCESS');
}
sub do_yum
{
my ($fm, $function) = @_;
my $q = $fm->{'cgi'};
for ( qw(SelectedGroups SelectedPackages) )
{
$db->set_prop("yum", $_, join(',', ($q->param($_) )));
}
esmith::util::backgroundCommand(0,
"/sbin/e-smith/signal-event", "yum-$function");
$db->reload;
$fm->print_yum_status_page();
}
sub print_skip_header
{
return "<INPUT TYPE=\"hidden\" NAME=\"skip_header\" VALUE=\"1\">\n";
}
sub format_yum_log
{
my ($fm) = @_;
my $yum_log = $db->get_prop('yum', 'LogFile');
return '' unless $yum_log and -f $yum_log;
my @contents;
open my $log_file, "<", $yum_log or die "Couldn't open $yum_log\n";
push @contents, "<PRE>", <$log_file>, "</PRE>";
close $log_file or die "Failed to close $yum_log\n";
return @contents;
}
sub print_yum_status_page
{
my ($fm) = @_;
my @yum_status;
if (open(YUM_STATUS, "</var/run/yum.status")) {
@yum_status = <YUM_STATUS>;
close(YUM_STATUS);
}
my @yum_log = $fm->format_yum_log();
my $page_output = << "EOF";
Expires: 0
Refresh: 10; URL=/server-manager/cgi-bin/yum
Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="refresh" CONTENT="10;URL=/server-manager/cgi-bin/yum">
<TITLE>server manager</TITLE>
<LINK REL="stylesheet" TYPE="text/css"
HREF="/server-common/css/sme_core.css">
</HEAD>
<BODY TOPMARGIN="0" LEFTMARGIN="0" MARGINHEIGHT="0" MARGINWIDTH="0">
<BR><center><H2>Please Wait - Yum Running (@yum_status)</H2></center>
@yum_log
</BODY>
</HTML>
EOF
print $page_output;
}
sub package_functions_enabled
{
my ($fm) = @_;
return ($db->get_prop("yum", "PackageFunctions") eq "enabled");
}
sub get_repository_options
{
my $self = shift;
my %options;
foreach my $repos (
$dbs{repositories}->get_all_by_prop(type => "repository") )
{
next unless ($repos->prop('Visible') eq 'yes'
or $repos->prop('status') eq 'enabled');
$options{$repos->key} = $repos->prop('Name');
}
return \%options;
}
sub get_repository_current_options
{
my $self = shift;
my @selected;
foreach my $repos (
$dbs{repositories}->get_all_by_prop( type => "repository" ) )
{
next unless ($repos->prop('Visible') eq 'yes'
or $repos->prop('status') eq 'enabled');
push @selected, $repos->key if ($repos->prop('status') eq 'enabled');
}
return \@selected;
}
sub post_upgrade_reboot
{
my $fm = shift;
$db->get_prop_and_delete('yum', 'LogFile');
$db->reload;
if (fork == 0)
{
exec "/sbin/e-smith/signal-event post-upgrade; /sbin/e-smith/signal-event reboot";
die "Exec failed";
}
$fm->success('SYSTEM_BEING_RECONFIGURED');
}
sub display_yum_log
{
my $fm = shift;
print $fm->format_yum_log();
my $yum_log = $db->get_prop_and_delete('yum', 'LogFile');
return;
}
sub skip_to_postupgrade
{
my $fm = shift;
my $reconf = get_value($fm,"UnsavedChanges",'yes');
if ( $reconf eq 'no' ) {
$fm->success('UPDATE_SUCCESS');
$fm->{cgi}->param(-name => "page", -value => 0);
$fm->{cgi}->param(-name => "page_stack", -value => '');
$fm->{cgi}->param(-name => "Next", -value => 'Next');
$fm->{cgi}->param(-name => "wherenext", -value =>'YUM_PAGE_NO_POSTUPGRADE');
} else {
# effective reconfigure and reboot required
$fm->success('HEADER_POSTUPGRADE_REQUIRED', 'YUM_PAGE_POSTUPGRADE');
if ($fm->{csrf}) {
# we want to restart CSRF token timer from now
$fm->{cgi}->param(-name => 'csrf_timestamp', -value => time);
$fm->commit_session;
}
$fm->{cgi}->param(-name => "page", -value => 0);
$fm->{cgi}->param(-name => "page_stack", -value => '');
$fm->{cgi}->param(-name => "Next", -value => 'Next');
$fm->{cgi}->param(-name => "wherenext", -value =>'YUM_PAGE_POSTUPGRADE');
}
}
1;

View File

@@ -0,0 +1,28 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
mQGiBEWfB6MRBACrnYW6yKMT+MwJlCIhoyTxGf3mAxmnAiDEy6HcYN8rivssVTJk
CFtQBlBOpLV/OW2YtKrCO2xHn46eNfnMri8FGT8g+9JF3MUVi7kiV1He4iJynHXB
+F2ZqIvHf3IaUj1ys+p8TK64FDFxDQDrGQfIsD/+pkSGx53/877IrvdwjwCguQcr
Ioip5TH0Fj0OLUY4asYVZH8EAIqFHEqsY+9ziP+2R3/FyxSllKkjwcMLrBug+cYO
LYDD6eQXE9Mq8XKGFDj9ZB/0+JzK/XQeStheeFG75q3noq5oCPVFO4czuKErIRAB
qKbDBhaTj3JhOgM12XsUYn+rI6NeMV2ZogoQCC2tWmDETfRpYp2moo53NuFWHbAy
XjETA/sHEeQT9huHzdi/lebNBj0L8nBGfLN1nSRP1GtvagBvkR4RZ6DTQyl0UzOJ
RA3ywWlrL9IV9mrpb1Fmn60l2jTMMCc7J6LacmPK906N+FcN/Docj1M4s/4CNanQ
NhzcFhAFtQL56SNyLTCk1XzhssGZ/jwGnNbU/aaj4wOj0Uef5LRGQ2VudE9TLTUg
S2V5IChDZW50T1MgNSBPZmZpY2lhbCBTaWduaW5nIEtleSkgPGNlbnRvcy01LWtl
eUBjZW50b3Mub3JnPohkBBMRAgAkBQJFnwekAhsDBQkSzAMABgsJCAcDAgMVAgMD
FgIBAh4BAheAAAoJEKikR9zoViiXKlEAmwSoZDvZo+WChcg3s/SpNoWCKhMAAJwI
E2aXpZVrpsQnInUQWwkdrTiL5YhMBBMRAgAMBQJFnwiSBYMSzAIRAAoJEDjCFhY5
bKCk0hAAn134bIx3wSbq58E6P6U5RT7Z2Zx4AJ9VxnVkoGHkVIgSdsxHUgRjo27N
F7kBDQRFnwezEAQA/HnJ5yiozwgtf6jt+kii8iua+WnjqBKomPHOQ8moxbWdv5Ks
4e1DPhzRqxhshjmub4SuJ93sgMSAF2ayC9t51mSJV33KfzPF2gIahcMqfABe/2hJ
aMzcQZHrGJCEX6ek8l8SFKou7vICzyajRSIK8gxWKBuQknP/9LKsoczV+xsAAwUD
/idXPkk4vRRHsCwc6I23fdI0ur52bzEqHiAIswNfO521YgLk2W1xyCLc2aYjc8Ni
nrMX1tCnEx0/gK7ICyJoWH1Vc7//79sWFtX2EaTO+Q07xjFX4E66WxJlCo9lOjos
Vk5qc7R+xzLDoLGFtbzaTRQFzf6yr7QTu+BebWLoPwNTiE8EGBECAA8FAkWfB7MC
GwwFCRLMAwAACgkQqKRH3OhWKJfvvACfbsF1WK193zM7vSc4uq51XsceLwgAoI0/
9GxdNhGQEAweSlQfhPa3yYXH
=o/Mx
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBE4P06MBEACqn48FZgYkG2QrtUAVDV58H6LpDYEcTcv4CIFSkgs6dJ9TavCW
NyPBZRpM2R+Rg5eVqlborp7TmktBP/sSsxc8eJ+3P2aQWSWc5ol74Y0OznJUCrBr
bIdypJllsD9Fe+h7gLBXTh3vdBEWr2lR+xA+Oou8UlO2gFbVFQqMafUgU1s0vqaE
/hHH0TzwD0/tJ6eqIbHwVR/Bu6kHFK4PwePovhfvyYD9Y+C0vOYd5Ict2vbLHz1f
QBDZObv4M6KN3j7nzme47hKtdMd+LwFqxM5cXfM6b5doDulWPmuGV78VoX6OR7el
x1tlfpuiFeuXYnImm5nTawArcQ1UkXUSYcTUKShJebRDLR3BycxR39Q9jtbOQ29R
FumHginovEhdUcinRr22eRXgcmzpR00zFIWoFCwHh/OCtG14nFhefuZ8Z80qbVhW
2J9+/O4tksv9HtQBmQNOK5S8C4HNF2M8AfOWNTr8esFSDc0YA5/cxzdfOOtWam/w
lBpNcUUSSgddRsBwijPuWhVA3NmA/uQlJtAo4Ji5vo8cj5MTPG3+U+rfNqRxu1Yc
ioXRo4LzggPscaTZX6V24n0fzw0J2k7TT4sX007k+7YXwEMqmHpcMYbDNzdCzUer
Zilh5hihJwvGfdi234W3GofttoO+jaAZjic7a3p6cO1ICMgfVqrbZCUQVQARAQAB
tEZDZW50T1MtNiBLZXkgKENlbnRPUyA2IE9mZmljaWFsIFNpZ25pbmcgS2V5KSA8
Y2VudG9zLTYta2V5QGNlbnRvcy5vcmc+iQI8BBMBAgAmBQJOD9OjAhsDBQkSzAMA
BgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQCUb8osEFud6ajRAAnb6d+w6Y/v/d
MSy7UEy4rNquArix8xhqBwwjoGXpa37OqTvvcJrftZ1XgtzmTbkqXc+9EFch0C+w
ST10f+H0SPTUGuPwqLkg27snUkDAv1B8laub+l2L9erzCaRriH8MnFyxt5v1rqWA
mVlRymzgXK+EQDr+XOgMm1CvxVY3OwdjdoHNox4TdVQWlZl83xdLXBxkd5IRciNm
sg5fJAzAMeg8YsoDee3m4khg9gEm+/Rj5io8Gfk0nhQpgGGeS1HEXl5jzTb44zQW
qudkfcLEdUMOECbu7IC5Z1wrcj559qcp9C94IwQQO+LxLwg4kHffvZjCaOXDRiya
h8KGsEDuiqwjU9HgGq9fa0Ceo3OyUazUi+WnOxBLVIQ8cUZJJ2Ia5PDnEsz59kCp
JmBZaYPxUEteMtG3yDTa8c8jUnJtMPpkwpSkeMBeNr/rEH4YcBoxuFjppHzQpJ7G
hZRbOfY8w97TgJbfDElwTX0/xX9ypsmBezgGoOvOkzP9iCy9YUBc9q/SNnflRWPO
sMVrjec0vc6ffthu2xBdigBXhL7x2bphWzTXf2T067k+JOdoh5EGney6LhQzcp8m
YCTENStCR+L/5XwrvNgRBnoXe4e0ZHet1CcCuBCBvSmsPHp5ml21ahsephnHx+rl
JNGtzulnNP07RyfzQcpCNFH7W4lXzqM=
=jrWY
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBFOn/0sBEADLDyZ+DQHkcTHDQSE0a0B2iYAEXwpPvs67cJ4tmhe/iMOyVMh9
Yw/vBIF8scm6T/vPN5fopsKiW9UsAhGKg0epC6y5ed+NAUHTEa6pSOdo7CyFDwtn
4HF61Esyb4gzPT6QiSr0zvdTtgYBRZjAEPFVu3Dio0oZ5UQZ7fzdZfeixMQ8VMTQ
4y4x5vik9B+cqmGiq9AW71ixlDYVWasgR093fXiD9NLT4DTtK+KLGYNjJ8eMRqfZ
Ws7g7C+9aEGHfsGZ/SxLOumx/GfiTloal0dnq8TC7XQ/JuNdB9qjoXzRF+faDUsj
WuvNSQEqUXW1dzJjBvroEvgTdfCJfRpIgOrc256qvDMp1SxchMFltPlo5mbSMKu1
x1p4UkAzx543meMlRXOgx2/hnBm6H6L0FsSyDS6P224yF+30eeODD4Ju4BCyQ0jO
IpUxmUnApo/m0eRelI6TRl7jK6aGqSYUNhFBuFxSPKgKYBpFhVzRM63Jsvib82rY
438q3sIOUdxZY6pvMOWRkdUVoz7WBExTdx5NtGX4kdW5QtcQHM+2kht6sBnJsvcB
JYcYIwAUeA5vdRfwLKuZn6SgAUKdgeOtuf+cPR3/E68LZr784SlokiHLtQkfk98j
NXm6fJjXwJvwiM2IiFyg8aUwEEDX5U+QOCA0wYrgUQ/h8iathvBJKSc9jQARAQAB
tEJDZW50T1MtNyBLZXkgKENlbnRPUyA3IE9mZmljaWFsIFNpZ25pbmcgS2V5KSA8
c2VjdXJpdHlAY2VudG9zLm9yZz6JAjUEEwECAB8FAlOn/0sCGwMGCwkIBwMCBBUC
CAMDFgIBAh4BAheAAAoJECTGqKf0qA61TN0P/2730Th8cM+d1pEON7n0F1YiyxqG
QzwpC2Fhr2UIsXpi/lWTXIG6AlRvrajjFhw9HktYjlF4oMG032SnI0XPdmrN29lL
F+ee1ANdyvtkw4mMu2yQweVxU7Ku4oATPBvWRv+6pCQPTOMe5xPG0ZPjPGNiJ0xw
4Ns+f5Q6Gqm927oHXpylUQEmuHKsCp3dK/kZaxJOXsmq6syY1gbrLj2Anq0iWWP4
Tq8WMktUrTcc+zQ2pFR7ovEihK0Rvhmk6/N4+4JwAGijfhejxwNX8T6PCuYs5Jiv
hQvsI9FdIIlTP4XhFZ4N9ndnEwA4AH7tNBsmB3HEbLqUSmu2Rr8hGiT2Plc4Y9AO
aliW1kOMsZFYrX39krfRk2n2NXvieQJ/lw318gSGR67uckkz2ZekbCEpj/0mnHWD
3R6V7m95R6UYqjcw++Q5CtZ2tzmxomZTf42IGIKBbSVmIS75WY+cBULUx3PcZYHD
ZqAbB0Dl4MbdEH61kOI8EbN/TLl1i077r+9LXR1mOnlC3GLD03+XfY8eEBQf7137
YSMiW5r/5xwQk7xEcKlbZdmUJp3ZDTQBXT06vavvp3jlkqqH9QOE8ViZZ6aKQLqv
pL+4bs52jzuGwTMT7gOR5MzD+vT0fVS7Xm8MjOxvZgbHsAgzyFGlI1ggUQmU7lu3
uPNL0eRx4S1G4Jn5
=OGYX
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,20 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
mQENBFYM/AoBCADR9Q5cb+H5ndx+QkzNBQ88wcD+g112yvnHNlSiBMOnNEGHuKPJ
tujZ+eWXP3K6ucJckT91WxfQ2fxPr9jQ0xpZytcHcZdTfn3vKL9+OwR0npp+qmcz
rK8/EzVz/SWSgBQ5xT/HUvaeoVAbzBHSng0r2njnBAqABKAoTxgyRGKSCWduKD32
7PF2ZpqeDFFhd99Ykt6ar8SlV8ToqH6F7An0ILeejINVbHUxd6+wsbpcOwQ4mGAa
/CPXeqqLGj62ASBv36xQr34hlN/9zQMViaKkacl8zkuvwhuHf4b4VlGVCe6VILpQ
8ytKMV/lcg7YpMfRq4KVWBjCwkvk6zg6KxaHABEBAAG0aENlbnRPUyBTb2Z0d2Fy
ZUNvbGxlY3Rpb25zIFNJRyAoaHR0cHM6Ly93aWtpLmNlbnRvcy5vcmcvU3BlY2lh
bEludGVyZXN0R3JvdXAvU0NMbykgPHNlY3VyaXR5QGNlbnRvcy5vcmc+iQE5BBMB
AgAjBQJWDPwKAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQTrhOcfLu
nVXNewgAg7RVclomjTY4w80XiztUuUaFlCHyR76KazdaGfx/8XckWH2GdQtwii+3
Tg7+PT2H0Xyuj1aod+jVTPXTPVUr+rEHAjuNDY+xyAJrNljoOHiz111zs9pk7PLX
CPwKWQLnmrcKIi8v/51L79FFsUMvhClTBdLUQ51lkCwbcXQi+bOhPvZTVbRhjoB/
a9z0d8t65X16zEzE7fBhnVoj4xye/MPMbTH41Mv+FWVciBTuAepOLmgJ9oxODliv
rgZa28IEWkvHQ8m9GLJ0y9mI6olh0cGFybnd5y4Ss1cMttlRGR4qthLhN2gHZpO9
2y4WgkeVXCj1BK1fzVrDMLPbuNNCZQ==
=UtPD
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
mQGiBEXopTIRBACZDBMOoFOakAjaxw1LXjeSvh/kmE35fU1rXfM7T0AV31NATCLF
l5CQiNDA4oWreDThg2Bf6+LIVTsGQb1V+XXuLak4Em5yTYwMTVB//4/nMxQEbpl/
QB2XwlJ7EQ0vW+kiPDz/7pHJz1p1jADzd9sQQicMtzysS4qT2i5A23j0VwCg1PB/
lpYqo0ZhWTrevxKMa1n34FcD/REavj0hSLQFTaKNLHRotRTF8V0BajjSaTkUT4uk
/RTaZ8Kr1mTosVtosqmdIAA2XHxi8ZLiVPPSezJjfElsSqOAxEKPL0djfpp2wrTm
l/1iVnX+PZH5DRKCbjdCMLDJhYap7YUhcPsMGSeUKrwmBCBJUPc6DhjFvyhA9IMl
1T0+A/9SKTv94ToP/JYoCTHTgnG5MoVNafisfe0wojP2mWU4gRk8X4dNGKMj6lic
vM6gne3hESyjcqZSmr7yELPPGhI9MNauJ6Ob8cTR2T12Fmv9w03DD3MnBstR6vhP
QcqZKhc5SJYYY7oVfxlSOfF4xfwcHQKoD5TOKwIAQ6T8jyFpKbQkRmVkb3JhIEVQ
RUwgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iGQEExECACQFAkXopTICGwMFCRLM
AwAGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQEZzANiF1IfabmQCgzvE60MnHSOBa
ZXXF7uU2Vzu8EOkAoKg9h+j0NuNom6WUYZyJQt4zc5seuQINBEXopTYQCADapnR/
blrJ8FhlgNPl0X9S3JE/kygPbNXIqne4XBVYisVp0uzNCRUxNZq30MpY027JCs2J
nL2fMpwvx33f0phU029vrIZKA3CmnnwVsjcWfMJOVPBmVN7m5bGU68F+PdRIcDsl
PMOWRLkTBZOGolLgIbM4719fqA8etewILrX6uPvRDwywV7/sPCFpRcfNNBUY+Zx3
5bf4fnkaCKxgXgQS3AT+hGYhlzIqQVTkGNveHTnt4SSzgAqR9sSwQwqvEfVtYNeS
w5rDguLG41HQm1Hojv59HNYjH6F/S1rClZi21bLgZbKpCFX76qPt8CTw+iQLBPPd
yoOGHfzyp7nsfhUrAAMFB/9/H9Gpk822ZpBexQW4y3LGFo9ZSnmu+ueOZPU3SqDA
DW1ovZdYzGuJTGGM9oMl6bL8eZrcUBBOFaWge5wZczIE3hx2exEOkDdvq+MUDVD1
axmN45q/7h1NYRp5GQL2ZsoV4g9U2gMdzHOFtZCER6PP9ErVlfJpgBUCdSL93V4H
Sgpkk7znmTOklbCM6l/G/A6q4sCRqfzHwVSTiruyTBiU9lfROsAl8fjIq2OzWJ2T
P9sadBe1llUYaow7txYSUxssW+89avct35gIyrBbof5M+CBXyAOUaSWmpM2eub24
0qbqiSr/Y6Om0t6vSzR8gRk7g+1H6IE0Tt1IJCvCAMimiE8EGBECAA8FAkXopTYC
GwwFCRLMAwAACgkQEZzANiF1IfZQYgCgiZHCv4xb+sTHCn/otc1Ovvi/OgMAnRXY
bbsLFWOfmzAnNIGvFRWy+YHi
=MMNL
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBEvSKUIBEADLGnUj24ZVKW7liFN/JA5CgtzlNnKs7sBg7fVbNWryiE3URbn1
JXvrdwHtkKyY96/ifZ1Ld3lE2gOF61bGZ2CWwJNee76Sp9Z+isP8RQXbG5jwj/4B
M9HK7phktqFVJ8VbY2jfTjcfxRvGM8YBwXF8hx0CDZURAjvf1xRSQJ7iAo58qcHn
XtxOAvQmAbR9z6Q/h/D+Y/PhoIJp1OV4VNHCbCs9M7HUVBpgC53PDcTUQuwcgeY6
pQgo9eT1eLNSZVrJ5Bctivl1UcD6P6CIGkkeT2gNhqindRPngUXGXW7Qzoefe+fV
QqJSm7Tq2q9oqVZ46J964waCRItRySpuW5dxZO34WM6wsw2BP2MlACbH4l3luqtp
Xo3Bvfnk+HAFH3HcMuwdaulxv7zYKXCfNoSfgrpEfo2Ex4Im/I3WdtwME/Gbnwdq
3VJzgAxLVFhczDHwNkjmIdPAlNJ9/ixRjip4dgZtW8VcBCrNoL+LhDrIfjvnLdRu
vBHy9P3sCF7FZycaHlMWP6RiLtHnEMGcbZ8QpQHi2dReU1wyr9QgguGU+jqSXYar
1yEcsdRGasppNIZ8+Qawbm/a4doT10TEtPArhSoHlwbvqTDYjtfV92lC/2iwgO6g
YgG9XrO4V8dV39Ffm7oLFfvTbg5mv4Q/E6AWo/gkjmtxkculbyAvjFtYAQARAQAB
tCFFUEVMICg2KSA8ZXBlbEBmZWRvcmFwcm9qZWN0Lm9yZz6JAjYEEwECACAFAkvS
KUICGw8GCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRA7Sd8qBgi4lR/GD/wLGPv9
qO39eyb9NlrwfKdUEo1tHxKdrhNz+XYrO4yVDTBZRPSuvL2yaoeSIhQOKhNPfEgT
9mdsbsgcfmoHxmGVcn+lbheWsSvcgrXuz0gLt8TGGKGGROAoLXpuUsb1HNtKEOwP
Q4z1uQ2nOz5hLRyDOV0I2LwYV8BjGIjBKUMFEUxFTsL7XOZkrAg/WbTH2PW3hrfS
WtcRA7EYonI3B80d39ffws7SmyKbS5PmZjqOPuTvV2F0tMhKIhncBwoojWZPExft
HpKhzKVh8fdDO/3P1y1Fk3Cin8UbCO9MWMFNR27fVzCANlEPljsHA+3Ez4F7uboF
p0OOEov4Yyi4BEbgqZnthTG4ub9nyiupIZ3ckPHr3nVcDUGcL6lQD/nkmNVIeLYP
x1uHPOSlWfuojAYgzRH6LL7Idg4FHHBA0to7FW8dQXFIOyNiJFAOT2j8P5+tVdq8
wB0PDSH8yRpn4HdJ9RYquau4OkjluxOWf0uRaS//SUcCZh+1/KBEOmcvBHYRZA5J
l/nakCgxGb2paQOzqqpOcHKvlyLuzO5uybMXaipLExTGJXBlXrbbASfXa/yGYSAG
iVrGz9CE6676dMlm8F+s3XXE13QZrXmjloc6jwOljnfAkjTGXjiB7OULESed96MR
XtfLk0W5Ab9pd7tKDR6QHI7rgHXfCopRnZ2VVQ==
=V/6I
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
mQINBFKuaIQBEAC1UphXwMqCAarPUH/ZsOFslabeTVO2pDk5YnO96f+rgZB7xArB
OSeQk7B90iqSJ85/c72OAn4OXYvT63gfCeXpJs5M7emXkPsNQWWSju99lW+AqSNm
jYWhmRlLRGl0OO7gIwj776dIXvcMNFlzSPj00N2xAqjMbjlnV2n2abAE5gq6VpqP
vFXVyfrVa/ualogDVmf6h2t4Rdpifq8qTHsHFU3xpCz+T6/dGWKGQ42ZQfTaLnDM
jToAsmY0AyevkIbX6iZVtzGvanYpPcWW4X0RDPcpqfFNZk643xI4lsZ+Y2Er9Yu5
S/8x0ly+tmmIokaE0wwbdUu740YTZjCesroYWiRg5zuQ2xfKxJoV5E+Eh+tYwGDJ
n6HfWhRgnudRRwvuJ45ztYVtKulKw8QQpd2STWrcQQDJaRWmnMooX/PATTjCBExB
9dkz38Druvk7IkHMtsIqlkAOQMdsX1d3Tov6BE2XDjIG0zFxLduJGbVwc/6rIc95
T055j36Ez0HrjxdpTGOOHxRqMK5m9flFbaxxtDnS7w77WqzW7HjFrD0VeTx2vnjj
GqchHEQpfDpFOzb8LTFhgYidyRNUflQY35WLOzLNV+pV3eQ3Jg11UFwelSNLqfQf
uFRGc+zcwkNjHh5yPvm9odR1BIfqJ6sKGPGbtPNXo7ERMRypWyRz0zi0twARAQAB
tChGZWRvcmEgRVBFTCAoNykgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iQI4BBMB
AgAiBQJSrmiEAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBqL66iNSxk
5cfGD/4spqpsTjtDM7qpytKLHKruZtvuWiqt5RfvT9ww9GUUFMZ4ZZGX4nUXg49q
ixDLayWR8ddG/s5kyOi3C0uX/6inzaYyRg+Bh70brqKUK14F1BrrPi29eaKfG+Gu
MFtXdBG2a7OtPmw3yuKmq9Epv6B0mP6E5KSdvSRSqJWtGcA6wRS/wDzXJENHp5re
9Ism3CYydpy0GLRA5wo4fPB5uLdUhLEUDvh2KK//fMjja3o0L+SNz8N0aDZyn5Ax
CU9RB3EHcTecFgoy5umRj99BZrebR1NO+4gBrivIfdvD4fJNfNBHXwhSH9ACGCNv
HnXVjHQF9iHWApKkRIeh8Fr2n5dtfJEF7SEX8GbX7FbsWo29kXMrVgNqHNyDnfAB
VoPubgQdtJZJkVZAkaHrMu8AytwT62Q4eNqmJI1aWbZQNI5jWYqc6RKuCK6/F99q
thFT9gJO17+yRuL6Uv2/vgzVR1RGdwVLKwlUjGPAjYflpCQwWMAASxiv9uPyYPHc
ErSrbRG0wjIfAR3vus1OSOx3xZHZpXFfmQTsDP7zVROLzV98R3JwFAxJ4/xqeON4
vCPFU6OsT3lWQ8w7il5ohY95wmujfr6lk89kEzJdOTzcn7DBbUru33CQMGKZ3Evt
RjsC7FDbL017qxS+ZVA/HGkyfiu4cpgV8VUnbql5eAZ+1Ll6Dw==
=hdPa
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,19 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
mQGiBEM84T4RBACMPEsM0PcEqt0hFSOWI4BLLUfBbXZVDekRD24vEq9wGQWWvNxf
tABh53/eLemGxLF28dqipU5TK+6B0FFDkRyaBppmhmtgBD4jDfw9hPoIIw8ufHO6
F929yBdRuKLPMn+uQ74Bva1JEhUChxMafE+yyrXORXvZWjR5sc2THJWTywCgnfpQ
ENzljYR1TcM451xgYxIQKBkD/jHPXM7jfCUYobUQ2P80GqaPCnNtA5nhR9/jyUmP
KPEgiQCVYQmfXWL6/LnnHEi0IFmZ7bDZc7hLO4JhWQINDgg5WDFNflawCeqZ2KIp
j+SnwbudnXmE4QdGJ66DrS7eNqJkFvLAT/S2Y2A9QIZCWKrg3HfvbrmiR4abRcy0
kzBVA/sE/6OTLSO5o/kWBIuPQ616800vhXhLdITEPETkkaA3Oj0POKP6AJi7aLKO
KqpZzyLZi80vhCauztiQmY6fJiHQym6b/HsRSKf+DjExxoq4zp3TEojUK8ReSY6P
Mx9nsK5l+T70BX4iJsFdcjJHipnXBcuHOMlQtRlszU0b3NMLE7QvU01FIFNlcnZl
ciA3IHNpZ25pbmcga2V5IDxidWd0ZWFtQGNvbnRyaWJzLm9yZz6IXgQTEQIAHgUC
QzzhPgIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRA9cgUIHpyTCJWFAJ4xgIUK
VQysThX/neAbxWvl2YeqpQCeOOUivZbOSScohei7r8jCa+xUiVWIRgQTEQIABgUC
QzzjFwAKCRC8R3SEoTuRTTJbAJ9auKPxDeQ1hLN43hO5/bmd+TUKggCeIKAFeaR7
9Pfl09sv0czvNTFSLRM=
=z7FN
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQGiBEm+/6QRBAC5mbtqOFSQ0FkTLIMdIoqxtraIeUqwbPp3IBYQ/u/EREjyEf1D
qFyBEXII0dD8JDT85vRZ81jhB7nFWa0VbUfY0xfghkbnokiNBVNpiQcvszw3UYDF
aLAaOC8Z98vmlsQaBBTQG6704ZXLr7FJyG3GP5WE6egXIQQbrMcdmCoRBwCg/dwC
HLWjuemoDc5SX7hKHbB4zZ8D/jP+oMbqz+bDn8OZ2UuaGdxr+mHW8tzTdPjnEU8e
hUt1ws8eBqn/gMfKvUBa8xFSILe8Ty99u+VjFbcRsdf0H6dRre9AdDVUz5oxzoPw
gamA8mhPQvFh3wt9smtRUh5IoM2LiM1s5pGMLuYuvSnVUPArEnSfW6K5I6v7OarU
3WfrBACDEGGcaWKjfdkRtmKIQrzu6AnldVC1ISLVAoqxHnKNFTk1BgO0PSZDpfJI
x8fMCnGlusoL6F5+LYEk4K4B0zvlj1ur3JocjxpuBLccl94JTo/+I9ZbS8ptUqLw
LBUkgIQJzzIH4G5NZsQ3FpzSWGRFVa7etqTv9BfUMUmJxhEoobQ/ZWxyZXBvLm9y
ZyAoUlBNIFNpZ25pbmcgS2V5IGZvciBlbHJlcG8ub3JnKSA8c2VjdXJlQGVscmVw
by5vcmc+iGAEExECACAFAkm+/6QCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK
CRAwm8MFuq2uUlgWAKCGWOpyodbzxS7Xy/0X9m9qVnHq+ACfUHrQzYAtFRpT07Sg
giosE+mvAKu5Ag0ESb7/pxAIALgT0q0HhwugE717a7N+gAtCbFu8pCXOZcrAnJpG
cMA9VWmsODZStPTxXYM2ggCMSzUnNis8pPZOPIP5C+t2IYtVjLshM4C9UiY7u5ET
jErWCxWmF+2QLO50K56E4qxj0wufZt9P+Ih0USUM5L2oyrQG51uj/2v3Qq3igc8Z
NTtmEOfis3losusQbAfZtTBmNQ0570kkhMxiyavgAUxLenXHYrkDJFuL7XdBCmna
kykTn2dzU81rIDZ+QPxII4V/eZ5xGiRY/EDUIAysEV2m0NNZgWi/twUnZICm7zYp
VRviJrBnFTvNEPMhiGRnJgQp/Krv4WIHQ67N8lQg3q5RJX8AAwUH/0UBjBgbsuWR
dB+ZYWjKPBy+bJY/6HefPUuLrt3QDNINMW8kY7VzWRMWyGc4IlPJDW0nwOn/vT5H
Dgc3YmA3tm7cKj5wpFijzff61Db8eq+CUKGscKxDBGzHq6oirM5U7DQLmipCs5Eb
efwHIjE3aOUSnoQmniEnBWI2hm/rftmY9oJSi8xgns4wAokDPiMcucADtbV3fznx
ppuowtBi8bcGB1vJZjTySQcSKWv+IVp5ej06uZ9501BEm6HxUZkuAGPecP65kcQu
5bg7B7LQeI5AWyujqvfuWgAF34xhl9QU/sDWxM3wUog+bw7y8pyWCqnJhp70yx8o
SqzhFygT62eISQQYEQIACQUCSb7/pwIbDAAKCRAwm8MFuq2uUq8PAKC1+E2pSwiS
oHXkKYPYDwApsP1mVACfRe1YnggLYQtG9LMeweVQQC77rK8=
=qyRr
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,35 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.7 (GNU/Linux)
mQGiBEG+vu8RBACyH3cUSp+DXbyIvZ075bGDhjhRCf8m44UW2cCQdO/45CJBkRnC
AA6SHthCrXCVKIuuo1jSwy8kMXt1P/7IpF6Tc8ZMzcHKTyNetuuD/A7oavgnrJNb
QVTScqbD6VrvjUAPpDz5TMPqMMFYwylp+ySKMQpoPOYoqdNE3XwnA5vOywCg44+S
KDWIV0j5xCeIAoa47VmgF2cEAK/FIZRkbb7+i2Fob1mxKsnuLN/xx67aBpU2w7HO
scVnkke08lRestDVk/6xb+lrq+gVLdNBfAANBrOcwRv2heu+Zu3PZGuC166/JWFM
kx5a9TkI0zQAw72LqKeX4VDBRz5fUoIs/C+3aGc5Mh+h8fZYjJGf0kr/90rnd/0e
WqsBA/9ONArdHN44aICt7xku/t98p9Da04A7kRYTHlLrBk5i0U4JJXKei7ZAzNi4
Or//8ATepQdsBMCJVx1Ss/vJKxupLG9Mw43nbNuA5SmOSPnAoyglYadKyaUXBbVj
mkqf9ZkjOMfD5u9PEWMWMq3f8uf05qxsrBDeiyc7Fk0jBYTvnrQ4RmVkb3JhIFBy
ZSBFeHRyYXMgUmVsZWFzZSA8cHJlLWV4dHJhc0BmZWRvcmFwcm9qZWN0Lm9yZz6I
XgQTEQIAHgUCQb6+7wIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRCC7ZUEGscM
5uAMAKC+XaPSCYIpdcmJYEe9rNxYMz/hLwCeOyBYUYA2L0WnbfXuNafRqwta/s2I
RgQSEQIABgUCQgD+/AAKCRC0QmnQTypv0lVYAJoCLolPSuAj873GbV2+m3Bj6sS/
UACeNcDmIWeruRld83uSQcx4xJyEOUa0KUZlZG9yYSBQcm9qZWN0IDxmZWRvcmEt
ZXh0cmFzQHJlZGhhdC5jb20+iF4EExECAB4FAkIAeFQCGwMGCwkIBwMCAxUCAwMW
AgECHgECF4AACgkQgu2VBBrHDOYu8wCffLm57mvcYApV7eqvHXr29gNAbLwAoJVq
JWvgBIvg8/4MiqwKAQ1MDkIUiEYEEhECAAYFAkIA/wQACgkQtEJp0E8qb9LQJACf
c0LteS513+5O6erQO7RBUxC/NI4AniDHK+Ogf5l5Gs2ciwD+WApsZ4mPtDBGZWRv
cmEgUHJvamVjdCA8ZmVkb3JhLWV4dHJhc0BmZWRvcmFwcm9qZWN0Lm9yZz6IXgQT
EQIAHgUCQgB4iQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRCC7ZUEGscM5gZ7
AJ9n8CYN6nvMqxCbQQZwvs7e/J4//QCeM3nDwC5EfEbEtOHPIYAqTf3IQZaIRgQS
EQIABgUCQgD/BAAKCRC0QmnQTypv0qKuAJ0cnqk9BbbblRSBbn72bK/BAquzywCe
M7S0C6rfrYlfOjQHQdVB5GitT9u5AQ0EQb6+8RAEAJmsZ5apOFz0Fj6RwX0D+nOU
Atdzd3zpTNzu4j8+L750ePutjuwizEmCxKycchuG+gGasLmdxY+xk5AUB7gLt4ms
eKsWyHvQt+H4wG8jjOjHWXlaJkZaYQUxpVPd6/11hkoqpodJ9ckfoIJnpUJWDcd3
HTW7jdq+ZtBXjQlwvh3HAAMHA/9g50+hqjn23d91SaFTkvaAySZYHEF/xm5sOV1X
Z37XNFdl7JRl6BN7y59PE9Nk6qP4yHqH1G2YNDL3BmejChMF5GmEqluNdnvfFvwk
yqPvE7qCv8BhktPqsnrpFmtfeDFI4vztD08oab9LdkDvQwLHBZpc+wCb4VJzOkaZ
7e7VP4hJBBgRAgAJBQJBvr7xAhsMAAoJEILtlQQaxwzmxdYAn3X4X/ENC3V4yPDR
7X6oVeIVr5fvAJ4n5vY10NpvYKV5arzKd8DSW2m5Bg==
=N/fy
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBFbb5JYBEAC9I+N9hcehQ60cessrpEfyuJhoG4G5hUtF2ri53YzvsW/+in6Y
va5r4OM9/iiX01ie5bO7uj7JIbWkoAmrIFoQ3aKSFPHa8X6QFZ9T1Ho1vKfVnXYW
GzeX2VXavEGC4zRjD74AoKj4Pm0Gsa7Yi8iKOCWuxOU2kwc3+RfEiMi18kdtX6UR
X8KrXZfeG3n8gLrLeK7lqphpk8SUr9BTXnWVGlPUt15qFS5wkcPlhSlnutknFEFI
i7hLSUqYSL+8L3hNcoNMuKvMAL+TS40s4Ei5G4SrAGxXH1z9NVE98msUfAdK3ROi
7xigNZFjCFiaL0D27ropBG0oJQURLtbAdCis5vlgVpz3YKQTadmNYy8iU0j9V5uv
kLlwfXgKOVGrYwrW3c04u64iIRDa638dD0JObAyGQn/H7lCtifH0QNmOr4g20dEl
Yfhd4jyWFOwg8/qYlCDvfvKMy+CHsib8+5p6uUIuDd7Xrm2/lgnsFJSFrazXh9Ly
ieWmY5wpX0Eq26MiSNSDm0AKYEu+yMa7Kifgh5dpjqe1/x0B0SR0mcRN+I2GSunE
xIx/PoZf8wUAKsPq5a9lcTR9PwSu7si7wgfHI187GbuLbIoxobk138TcKiZVcGmJ
9aDNWS68EbfjKP+ftJB8pHRW0ViFi/KOydkA3NQ+zRNGIle/6+nLQ3G/8wARAQAB
tDlLb296YWxpIFNNRSBTZXJ2ZXIgc2lnbmluZyBrZXkgKDEwKSA8YnVndGVhbUBr
b296YWxpLm9yZz6JAjYEEwECACAFAlbb5JYCGwMGCwkIBwMCBBUCCAMEFgIDAQIe
AQIXgAAKCRAaDbzAVocxUWyeEACC+CXtPCeSC8TS+kDzpSJ7+7Q+oJAydQjknmeO
kYOP/8aw0OGLysMQtdErOlJh+Am5oJyLquKH2Fs3NpwjbCy/jvFuFuwxZ0ahM3dd
6nf7Evd0rOoZUO+xeoUzl/ykHgXaEGY2750Tib7/R9lOSHglgrF/QOIelHKOZqOU
y0nT3w+FTyqf3ZNA9IMS/YvfMZGJ0KgxoOx8nV/GMVmt0gKHqz2DL3muHGiXub6D
EXb8aZOH9q6dAGrpixEExBRgtAs3JTYl2M47w4xDb91/yRWoqUHmlv8aV7ZQr20c
sLuxijbqpfR//Vp9OEXFmK6jCd1s0qBKwJu+e8wiRD8UvDLzic0Hki5imBggos1g
TWAec9yjBMUUVKse1opmU14k1b8N+iv2d2MaspHrswVRU3Um/0vDlny0OMtYBnvz
nBPaKSk8FcqDbItFBJCK7Y3Rrx5dsTadAr+Dmli54EM9aYOrhPG7GBLDjML8HI2x
RjxQ4aAOAl0ETZmgC9Ib2YBt2Xza1ogtTHOjie+Am0j5il0FeGohV28UcJluy5Zt
bctEEPeeZq7kzYDvv0lSiXy0S11TsvSXbmhs0Z/Lh7CorMaHUiRjt+Hg17CGe0V9
jzFRUokUykrDqTDai0R7UYRcEUpKfiA+32yqf11J2kpyqzueJ3z59xPr2n4SkZ6Y
bu7tgg==
=aVLF
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,24 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.7 (GNU/Linux)
mQGiBDps6bkRBACFKoIFqtDXVbzQDfuVhUDbKy1bNTEen8E/0UyqDPfSLgD8uEDU
ZdG9v3e1IAiAKwBRpNNdn7DrvYSP2HnM+5gSL9WwF+Qc7pt6i5Fp8jsnVKHtulF4
8hoU/0nbJth/1r+uQOCXIn/5yU0gt9ev7y6FovpE4TmvGkZocKs9PGlSnwCg2Fcg
Rw2Z3BlIdwTIH4HdY4A+X9ED/AiCz6AIbTN3No4Pofyd9Ctdb8Wi2+HDFe8o1r5M
BUn2yb04v5/fUgZ32DJHqPxdC/6rwR15PMEO0weIITji8nkGPAUU5Yf1U6WfxaXC
fj5z6dSM1QbMdEXBZ2qXuzGFV+NoHrPpsi5k1LCETNAmiZ1YdK5QsqcBvLTenum0
S82+A/96vqBlaxf7VsqVQ6f/KwLvegd1ftpncKzX1lDFN3wT9FSJDz2wbN7X93jg
bRaSBbwwgSrISCtjciJLzvg8btInRXvzHpngA+jrY82GBMjJ0g0rO/e8WeK4S3+z
zVAnljQRogFErsxe6AhZFz2Hz9pL12t2Bb1Y/Yj62kIdBs1FTLQkR2F2aW4gQ2Fy
ciA8Z2F2aW5Ab3BlbmZ1c2lvbi5jb20uYXU+iFcEExECABcFAjps6bkFCwcKAwQD
FQMCAxYCAQIXgAAKCRDceqMiKmuRSn7KAJwPv3xGQvZjKneR5aYMr8DR4tGXmgCc
C/YcA9yRa17VcCS8SFTNbrFs9um5AQ0EOmzpwhAEAKYnfhzBJW99bSGWg6826FbC
g7LdQBjUa7lIk/Osvlkd1FjeogRg4jtEqAeUwTo4Nf3nPMRKE/l4Rzv0DOjhWDEG
hOKpx1iIKJUPKGHTToOcNAWXSTvzWOx6Rm/sKbInvVgUZjj36IktS88IEI+LMgdm
nxuPdI46YDcA6+jyUhYnAAMFA/44mjlvBSX8MYaklIMQrps8hPVSVINwTmksRIDb
wuLU6R85g8If9LaRpVG3rPca+EQ2gEDFVlgt2t2A5XrcHFfkLUx3k1UyF1LOmpRt
I78FY5s4IXQE7s/QOrBWQj3+FdOkSjeoOyAor5t8ckkLNEM48WAa1hFChOiqYRfO
vkbYdohGBBgRAgAGBQI6bOnCAAoJENx6oyIqa5FK6QcAn0zeyRrNrt3yHkxoLI36
XNgiCqE/AJ9AZ+mLPpxeFe8oSM37ZlWQu0yvyQ==
=r1Po
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,24 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mQGiBEJny1wRBACRnbQgZ6qLmJSuGvi/EwrRL6aW610BbdpLQRL3dnwy5wI5t9T3
/JEiEJ7GTvAwfiisEHifMfk2sRlWRf2EDQFttHyrrYXfY5L6UAF2IxixK5FL7PWA
/2a7tkw1IbCbt4IGG0aZJ6/xgQejrOLi4ewniqWuXCc+tLuWBZrGpE2QfwCggZ+L
0e6KPTHMP97T4xV81e3Ba5MD/3NwOQh0pVvZlW66Em8IJnBgM+eQh7pl4xq7nVOh
dEMJwVU0wDRKkXqQVghOxALOSAMapj5mDppEDzGLZHZNSRcvGEs2iPwo9vmY+Qhp
AyEBzE4blNR8pwPtAwL0W3cBKUx7ZhqmHr2FbNGYNO/hP4tO2ochCn5CxSwAfN1B
Qs5pBACOkTZMNC7CLsSUT5P4+64t04x/STlAFczEBcJBLF1T16oItDITJmAsPxbY
iee6JRfXmZKqmDP04fRdboWMcRjfDfCciSdIeGqP7vMcO25bDZB6x6++fOcmQpyD
1Fag3ZUq2yojgXWqVrgFHs/HB3QE7UQkykNp1fjQGbKK+5mWTrQkUmVtaSBDb2xs
ZXQgPFJQTVNARmFtaWxsZUNvbGxldC5jb20+iGAEExECACAFAkZ+MYoCGwMGCwkI
BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAATm9HAPl/Vv/UAJ9EL8ioMTsz/2EPbNuQ
MP5Xx/qPLACeK5rk2hb8VFubnEsbVxnxfxatGZ25AQ0EQmfLXRAEANwGvY+mIZzj
C1L5Nm2LbSGZNTN3NMbPFoqlMfmym8XFDXbdqjAHutGYEZH/PxRI6GC8YW5YK4E0
HoBAH0b0F97JQEkKquahCakj0P5mGuH6Q8gDOfi6pHimnsSAGf+D+6ZwAn8bHnAa
o+HVmEITYi6s+Csrs+saYUcjhu9zhyBfAAMFA/9Rmfj9/URdHfD1u0RXuvFCaeOw
CYfH2/nvkx+bAcSIcbVm+tShA66ybdZ/gNnkFQKyGD9O8unSXqiELGcP8pcHTHsv
JzdD1k8DhdFNhux/WPRwbo/es6QcpIPa2JPjBCzfOTn9GXVdT4pn5tLG2gHayudK
8Sj1OI2vqGLMQzhxw4hJBBgRAgAJBQJCZ8tdAhsMAAoJEABOb0cA+X9WcSAAn11i
gC5ns/82kSprzBOU0BNwUeXZAJ0cvNmY7rvbyiJydyLsSxh/la6HKw==
=6Rbg
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFVE8DcBEACmsFjnapHXm5l0dXbyxXZU8sZVawRIQ/lG9Yc9tSICcY8QuSxu
636wsVHiQHd0sIipk6vvgWfTTV+w0OxyovY8PFciEtOC4JZBJO1cT952sDxRTzcU
Y+DArqPUwqyMqJo86BxwoQi9qdg4eNlp5RNamzbu2yKpPZUk4RWF0QnlEJ5bQ8xY
Q2HyzR6YUsKBuCbNV/OevxxSjSFesWqmE2zIFVDsNvS+FGbH6SwDrKgBeDHCeg35
KQgHyNkONoe7EjfCVdWwWsOdo9pqEKZKd4U6Sz234d9JqvF7y3+Lc85l/TxU+G/C
uXxRki5XVx3sMH0UgK0nn0fBEv95Dtq5I7EWNYDOesFDbBRjhqo5dh51yOcfn1QO
ATKGwo2WZTGc32kOXwu/zzZaT37HulyOpJ/8jAoOQ6qH5T7RDy2M1vlAvGcdy2dz
GUyD2bNlPSp1exw6CWOXjty/9nOglJBBsr/YwTundSKpZSKPkn3z74ZAD4Pqviwx
yRsk1UjHlCm8sPfahkpRheFKDJT/wIBUhI7tbzyfxMaNwryc1U+yOiAl92sMr8ra
a0CGk48cFa6vulSq/ELdt/qF+I0TywacaTvU3ySSd3Juff54c8ELNBjTGY4MAomk
y1P755q83yBdYaRDU6U1ljKP1GP8Kgilk6QCWu1izFPepPK4Bi7ZGTUEhQARAQAB
tE5SUE0gRnVzaW9uIGZyZWUgcmVwb3NpdG9yeSBmb3IgRUwgKDcpIDxycG1mdXNp
b24tYnVpbGRzeXNAbGlzdHMucnBtZnVzaW9uLm9yZz6JAjIEEwECABwFAlVE8DcC
GwMECwkIBwMVCAoDFgIAAh4BAheAAAoJEHWLPRj1z2weGigQAKO+ULRBzztGDg3m
ev8rDEOfv49x3T4+tTYlMOtvsg8Jvi5okGp+bXO0qZkw8463Ljrs5FAW1/oIGFYA
D9RMDnlgpDAhP6Gho/tGIPc6yfSHOUm2uS5Ve1Q7j3eBHr8IlAvpg/1U9IIS7LDU
WcVNjpsBzog8pGXRBSYx5yi7ddP5GcQPLwn0TT7jkawzrlmfnMz3un6gaxgFIxmS
wzd+lr7CHP3Lptxt3Oe5pliEQ58kuBzt0gkxGkkbeRyolareanJBlIozYIM3TQum
K4UbXIjPWlHr02z+qtrkpkDgM5aO+rEPGctd4W12zT5Gqp5Ij5fuFUHgFKvxf+0F
t7RDWffAiKtk8HX0PoytIBY9fiQtZXjnbPq1rT65brz6bc85HR3sRx2+gn9IN+Cg
OwdV7NoL8Dj7w3J5DMS1yT1KbmwRHHyKD0muL3NUw9RZXPmmUakbIvLZlERKhyca
JZlkakLUOvesXcZg2Zqug36ET0AQO/Af7e6dw8jXBc4BN/R5U8LU0ENaB3apRcdF
NEDqxPo98MGzIxqJUjWkwJfRvdqAPEM8JLeyhcuChsmwIGF0WbLsmVJ90LJxsoZQ
G+iQKiFwF8HO6fBk4APSAtic+j+9uHoLMS9tWsLABmNQCvjtRe6hxz20yud672uo
OEGWGYNPKeu56Dbc18pxBHez9m42
=buWg
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
mQGiBD5gtCgRBACKIvjMF+20r9k/Uw2Hq6Y/qn1nM0AZEFalhglXP5pMm5bMgkcI
1vCWqJxSbhQhk8hSEenoszes8hyUxHj4hFFUDiRtAxOpCpGCsCnUddgQtHAQd+tm
aQsM6J3Jm/EZPtwR0lvwvRGvz2x6Rr95G8+42KK9x+mBYhLk0y3gAbBzhwCgnkDH
a97MGBT7gRLrmtFqiHrWlPkD/2tBaH6IEuoJhcAbNj9MukbhDOYJ6ic9Nzf6sR3t
ZG+XgQLLS2DNy8+HWcYJOjpJDEe8zWFDdUv3cL1D0U2f2e85FuJaMucHn+816iw8
mNjZXJEoDE4LJ8Vv53fkevNZpdWmO2VtRwI+woDnIHYHukDLj2sWhVt+5W+uOKAE
OippA/9OzuWrwBtTR+Np8ApZGkxhxU1z0iEStV+kQNqJE7YoR4SGMuzEa3bFzrPx
k4qIU+rw4YgFgHrs1x08lXxNOZkq6avvbl60HqN2qF2UQL/YdU+5X3ixaJVaYYk8
yuK+hp0Hx2DdBWmVhq6rEzIfpnFhF4qspwMWEiiBGjYDL62W7LQ0QVRycG1zLm5l
dCAocnBtIHNpZ25pbmcga2V5KSA8QXhlbC5UaGltbUBBVHJwbXMubmV0PohnBBMR
AgAnAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAhkBBQJB1X6uBQkFVf4GAAoJEFCM
5eZmU0wr0wUAmQF0c6+9GiXCV2WOKtT++GM6YKHnAJ0cDppTgYooRSritXjCG+cr
Mk8llYhnBBMRAgAnAhsDBQkDdMLsBgsJCAcDAgMVAgMDFgIBAh4BAheABQJAKteu
AhkBAAoJEFCM5eZmU0wrMMUAnRjS2PXQp0tsC/69IGMMxqU+8xeAAJ9XQjVAo+mU
kg/3AeBlMBIlFe5hDbQ2QVRycG1zIChycG0gc2lnbmluZyBrZXkpIDxBeGVsLlRo
aW1tQHBoeXNpay5mdS1iZXJsaW4+iEkEMBECAAkFAkHVfmQCHQAACgkQUIzl5mZT
TCsESwCcCgs7hLZMF0BThsLvxwnC9qSvHkcAn0UkCAzjm7Q2KsuoX5cS+rNvAgf7
iEwEEBECAAwFAj5gtJsFgwHhMw0ACgkQQBVS1GOamfHbLgCfWP8SvaGYzOWuJIoV
TToAkYcF0tEAoIuDT91/XarnY/ZUO+Rolw9w7leNiF8EExECAB8ECwcDAgMVAgMD
FgIBAh4BAheABQJB1X6uBQkFVf4GAAoJEFCM5eZmU0wrOtEAn0QhRI4QG3vo5zm3
RZdd2JHwOvw0AJ9UHpxXmlsL0zbdLVcWvobRWLfGgYhfBBMRAgAfBQI+YLQoBQkB
4TOABAsHAwIDFQIDAxYCAQIeAQIXgAAKCRBQjOXmZlNMKx1jAJwPYAl6NLcSYWeR
Bz56nWqWv39XBACeP7jdZExNZu+vQjONd+zXsMU8MpuIXwQTEQIAHwQLBwMCAxUC
AwMWAgECHgECF4AFAj/wTxQFCQN0wuwACgkQUIzl5mZTTCsPOgCdHnJrsLx2shkq
7IS2f0auH+D+m8wAoIgencfOcNUsuJDLYhaGLjjBKcgw
=IhnP
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,32 @@
The following public key can be used to verify RPM packages
downloaded from http://dag.wieers.com/apt/ using 'rpm -K'
if you have the GNU GPG package.
Questions about this key should be sent to:
Dag Wieers <dag@wieers.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.1 (GNU/Linux)
mQGiBD9JMT0RBAC9Q2B0AloUMTxaK73sD0cOu1MMdD8yuDagbMlDtUYA1aGeJVO6
TV02JLGr67OBY+UkYuC1c3PUwmb3+jakZd5bW1L8E2L705wS0129xQOZPz6J+alF
5rTzVkiefg8ch1yEcMayK20NdyOmhDGXQXNQS8OJFLTIC6bJs+7MZL83/wCg3cG3
3q7MWHm3IpJb+6QKpB9YH58D/2WjPDK+7YIky/JbFBT4JPgTSBy611+bLqHA6PXq
39tzY6un8KDznAMNtm+NAsr6FEG8PHe406+tbgd7tBkecz3HPX8nR5v0JtDT+gzN
8fM3kAiAzjCHUAFWVAMAZLr5TXuoq4lGTTxvZbwTjZfyjCm7gIieCu8+qnPWh6hm
30NgA/0ZyEHG6I4rOWqPks4vZuD+wlp5XL8moBXEKfEVOMh2MCNDRGnvVHu1P3eD
oHOooVMt9sWrGcgxpYuupPNL4Uf6B6smiLlH6D4tEg+qCxC17zABI5572XJTJ170
JklZJrPGtnkPrrKMamnN9MU4RjGmjh9JZPa7rKjZHyWP/z/CBrQ1RGFnIFdpZWVy
cyAoRGFnIEFwdCBSZXBvc2l0b3J5IHYxLjApIDxkYWdAd2llZXJzLmNvbT6IWQQT
EQIAGQUCP0kxPQQLBwMCAxUCAwMWAgECHgECF4AACgkQog5SFGuNeeYvDQCeKHST
hIq/WzFBXtJOnQkJGSqAoHoAnRtsJVWYmzYKHqzkRx1qAzL18Sd0iEYEEBECAAYF
Aj9JMWAACgkQoj2iXPqnmevnOACfRQaageMcESHVE1+RSuP3txPUvoEAoJAtOHon
g+3SzVNSZLn/g7/Ljfw+uQENBD9JMT8QBACj1QzRptL6hbpWl5DdQ2T+3ekEjJGt
llCwt4Mwt/yOHDhzLe8SzUNyYxTXUL4TPfFvVW9/j8WOkNGvffbs7g84k7a5h/+l
IJTTlP9V9NruDt1dlrBe+mWF6eCY55OFHjb6nOIkcJwKxRd3nGlWnLsz0ce9Hjrg
6lMrn0lPsMV6swADBQP9H42sss6mlqnJEFA97Fl3V9s+7UVJoAIA5uSVXxEOwVoh
Vq7uECQRvWzif6tzOY+vHkUxOBRvD6oIU6tlmuG3WByKyA1d0MTqMr3eWieSYf/L
n5VA9NuD7NwjFA1kLkoDwfSbsF51LppTMkUggzwgvwE46MB6yyuqAVI1kReAWw+I
RgQYEQIABgUCP0kxPwAKCRCiDlIUa4155oktAKDAzm9QYbDpk6SrQhkSFy016BjE
BACeJU1hpElFnUZCL4yKj4EuLnlo8kc=
=mqUt
-----END PGP PUBLIC KEY BLOCK-----