|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Name: virtualX.sh - part of the BeakerLib project
|
|
Packit |
bbb0ff |
# Description: Helpers for handling virtual X server
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Author: Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Copyright (c) 2008-2010 Red Hat, Inc. All rights reserved.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This copyrighted material is made available to anyone wishing
|
|
Packit |
bbb0ff |
# to use, modify, copy, or redistribute it subject to the terms
|
|
Packit |
bbb0ff |
# and conditions of the GNU General Public License version 2.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This program is distributed in the hope that it will be
|
|
Packit |
bbb0ff |
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
Packit |
bbb0ff |
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
bbb0ff |
# PURPOSE. See the GNU General Public License for more details.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# You should have received a copy of the GNU General Public
|
|
Packit |
bbb0ff |
# License along with this program; if not, write to the Free
|
|
Packit |
bbb0ff |
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
bbb0ff |
# Boston, MA 02110-1301, USA.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 NAME
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
BeakerLib - virtualX - Helpers for handling virtual X server
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 DESCRIPTION
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
This module provides a simple way to start and stop virtual X server
|
|
Packit |
bbb0ff |
(framebuffer).
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 FUNCTIONS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# Internal Stuff
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Files:
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# /tmp/$Xid-pid - contains PID for X server we are running # no-reboot
|
|
Packit |
bbb0ff |
# /tmp/$Xid-display - contains DISPLAY of our X server # no-reboot
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
. $BEAKERLIB/testing.sh
|
|
Packit |
bbb0ff |
. $BEAKERLIB/infrastructure.sh
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtXGetCorrectID
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Generate internal ID from provided unique string, used by other
|
|
Packit |
bbb0ff |
# rlVirtX* functions. You probably do not need to call this
|
|
Packit |
bbb0ff |
# function and can forget about its existence.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# usage: rlVirtXGetCorrectID some_unique_string
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# * some_unique_string: unique identifier, you can use e.g. $TEST
|
|
Packit |
bbb0ff |
# (non-alnum chars will be stripped)
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtXGetCorrectID() {
|
|
Packit |
bbb0ff |
echo "$1" | sed "s/[^[:alnum:]]//g"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtXGetPid
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Return PID of virtual X server
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# usage: rlVirtXGetPid string
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# * string: ID (e.g. $TEST variable can be used)
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtXGetPid() {
|
|
Packit |
bbb0ff |
local Xid=$( rlVirtXGetCorrectID "$1" )
|
|
Packit |
bbb0ff |
if [ -f "/tmp/$Xid-pid" ]; then # no-reboot
|
|
Packit |
bbb0ff |
cat "/tmp/$Xid-pid" # no-reboot
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtXStartDisplay
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Start a virtual X server on display "display"
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# usage: rlVirtXStartDisplay string display
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# * string: ID (e.g. $TEST variable can be used)
|
|
Packit |
bbb0ff |
# * display: DISPLAY number (without ':')
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtXStartDisplay() {
|
|
Packit |
bbb0ff |
local Xid=$( rlVirtXGetCorrectID "$1" )
|
|
Packit |
bbb0ff |
local Xdisplay=$( echo $2 | sed "s/[^0-9]//g" )
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtXStartDisplay: Starting a virtual X ($Xid) server on :$Xdisplay"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Xvfb :$Xdisplay -ac -screen 0 1600x1200x24 -fbdir /tmp & # no-reboot
|
|
Packit |
bbb0ff |
local Xpid=$!
|
|
Packit |
bbb0ff |
sleep 3
|
|
Packit |
bbb0ff |
if ! ps | grep $Xpid >/dev/null; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtXStartDisplay: Virtual X failed to start"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtXStartDisplay: Started with PID '$Xpid' on display :$Xdisplay"
|
|
Packit |
bbb0ff |
echo "$Xpid" > /tmp/$Xid-pid # no-reboot
|
|
Packit |
bbb0ff |
echo ":$Xdisplay" > /tmp/$Xid-display # no-reboot
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# Virtual X Server --- Public Stuff
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head2 Virtual X Server
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Functions providing simple way how to start and stop virtual X
|
|
Packit |
bbb0ff |
server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtualXStart
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlVirtualXStart
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Start a virtual X server on a first free display. Tries only first
|
|
Packit |
bbb0ff |
N displays, so you can run out of them.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlVirtualXStart name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
String identifying the X server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 when the server is started successfully.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtualXStart() {
|
|
Packit |
bbb0ff |
local Xmax=3
|
|
Packit |
bbb0ff |
local Xid=$( rlVirtXGetCorrectID "$1" )
|
|
Packit |
bbb0ff |
local Xdisplay=0
|
|
Packit |
bbb0ff |
for Xdisplay in $( seq 1 $Xmax ); do
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStart: Trying to start on display :$Xdisplay"
|
|
Packit |
bbb0ff |
if rlVirtXStartDisplay $Xid $Xdisplay; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStart: Started on display :$Xdisplay"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStart: Was not able to start on displays from :1 to :Xmax"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtualXGetDisplay
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlVirtualXGetDisplay
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Get the DISPLAY variable for specified virtual X server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlVirtualXGetDisplay name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
String identifying the X server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Displays the number of display where specified virtual X server is
|
|
Packit |
bbb0ff |
running to standard output. Returns 0 on success.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtualXGetDisplay() {
|
|
Packit |
bbb0ff |
local Xid=$( rlVirtXGetCorrectID "$1" )
|
|
Packit |
bbb0ff |
if [ -f "/tmp/$Xid-display" ]; then # no-reboot
|
|
Packit |
bbb0ff |
cat "/tmp/$Xid-display" # no-reboot
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlVirtualXStop
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlVirtualXStop
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Kill the specified X server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlVirtualXStop name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
String identifying the X server.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 when the server is stopped successfully.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
function rlVirtualXStop() {
|
|
Packit |
bbb0ff |
local Xid=$( rlVirtXGetCorrectID "$1" )
|
|
Packit |
bbb0ff |
local Xpid=$( rlVirtXGetPid "$Xid" )
|
|
Packit |
bbb0ff |
local Xdisplay=$( rlVirtualXGetDisplay "$1" )
|
|
Packit |
bbb0ff |
if [ -z "$Xpid" ]; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStop: Provide pid you want to kill"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
if ps | grep $Xpid >/dev/null; then
|
|
Packit |
bbb0ff |
kill "$Xpid"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
sleep 2; # added by koca (some servers aren't so quick :))
|
|
Packit |
bbb0ff |
if ! ps | grep $Xpid >/dev/null; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStop: Normal 'kill $Xpid' succeed"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogWarning "rlVirtualXStop: I had to 'kill -9 $Xpid' (rc: $?) X server"
|
|
Packit |
bbb0ff |
kill -9 "$Xpid"
|
|
Packit |
bbb0ff |
sleep 1
|
|
Packit |
bbb0ff |
if [ -r "/tmp/.X$Xdisplay-lock" ]; then # no-reboot
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStop: Lock file '/tmp/.X$Xdisplay-lock' still exists, last attempt" # no-reboot
|
|
Packit |
bbb0ff |
kill $( cat "/tmp/.X$Xdisplay-lock" ) &>/dev/null # no-reboot
|
|
Packit |
bbb0ff |
kill -9 $( cat "/tmp/.X$Xdisplay-lock" ) &>/dev/null # no-reboot
|
|
Packit |
bbb0ff |
rm -f "/tmp/.X$Xdisplay-lock" # no-reboot
|
|
Packit |
bbb0ff |
sleep 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
if ps | grep $Xpid >/dev/null; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlVirtualXStop: I was not able to kill pid '$Xpid', sorry"
|
|
Packit |
bbb0ff |
return 2
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
rm -rf /tmp/$Xid-display /tmp/$Xid-pid # no-reboot
|
|
Packit |
bbb0ff |
sleep 1 # give it some time to end
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# Example
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 Example
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Below is a simple example of usage. Note that a lot of usefull
|
|
Packit |
bbb0ff |
debugging information is reported on the DEBUG level, so you can
|
|
Packit |
bbb0ff |
run your test with C<DEBUG=1 make run> to get them.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlVirtualXStart $TEST
|
|
Packit |
bbb0ff |
rlAssert0 "Virtual X server started" $?
|
|
Packit |
bbb0ff |
export DISPLAY="$( rlVirtualXGetDisplay $TEST )"
|
|
Packit |
bbb0ff |
# ...your test which needs X...
|
|
Packit |
bbb0ff |
rlVirtualXStop $TEST
|
|
Packit |
bbb0ff |
rlAssert0 "Virtual X server killed" $?
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
These are "Requires" lines for your scripts - note different package
|
|
Packit |
bbb0ff |
names for different RHEL versions:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
@echo "Requires: xorg-x11-server-Xvfb" >> $(METADATA) # RHEL-5
|
|
Packit |
bbb0ff |
@echo "Requires: xorg-x11-Xvfb" >> $(METADATA) # RHEL-4
|
|
Packit |
bbb0ff |
@echo "Requires: XFree86-Xvfb" >> $(METADATA) # RHEL-3
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# AUTHORS
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 AUTHORS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|