Compare commits
3 Commits
febootstra
...
domaindir
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ca9232fe9 | ||
|
|
7d9ee76da3 | ||
|
|
aba94e4c73 |
14
Makefile
14
Makefile
@@ -150,13 +150,13 @@ install-hooks:
|
|||||||
cp -R hooks/fedora-core-6/*-* ${prefix}/usr/lib/xen-tools/fedora-core-6.d
|
cp -R hooks/fedora-core-6/*-* ${prefix}/usr/lib/xen-tools/fedora-core-6.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-4.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-4.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-5.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-5.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-7.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-7.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-8.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-8.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-9.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-9.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-10.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-10.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-11.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-11.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-12.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-12.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-13.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-13.d
|
||||||
mkdir -p ${prefix}/usr/lib/xen-tools/debian.d/
|
mkdir -p ${prefix}/usr/lib/xen-tools/debian.d/
|
||||||
cp -R hooks/debian/*-* ${prefix}/usr/lib/xen-tools/debian.d
|
cp -R hooks/debian/*-* ${prefix}/usr/lib/xen-tools/debian.d
|
||||||
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sarge.d
|
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sarge.d
|
||||||
|
|||||||
4
TODO
4
TODO
@@ -153,10 +153,6 @@ Maybe for a 4.3 or 5.0 release
|
|||||||
"type" of configuration you want, and a set of options specific to
|
"type" of configuration you want, and a set of options specific to
|
||||||
that flag could be parsed from xen-tools.conf
|
that flag could be parsed from xen-tools.conf
|
||||||
|
|
||||||
* Do not run copyDebFiles on RPM based installations.
|
|
||||||
|
|
||||||
Write a proper clone of it for caching RPMs.
|
|
||||||
|
|
||||||
Stuff from Steve's TODO list / Generic TODOs
|
Stuff from Steve's TODO list / Generic TODOs
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ xen-create-image - Easily create new Xen instances with networking and OpenSSH.
|
|||||||
Installation options:
|
Installation options:
|
||||||
|
|
||||||
--arch=arch Pass the given architecture to debootstrap, rinse,
|
--arch=arch Pass the given architecture to debootstrap, rinse,
|
||||||
or febootstrap when installing the system. This argument
|
or rpmstrap when installing the system. This argument
|
||||||
is ignored for other install methods.
|
is ignored for other install methods.
|
||||||
|
|
||||||
--dist=dist Specify the distribution you wish to install.
|
--dist=dist Specify the distribution you wish to install.
|
||||||
@@ -216,19 +216,35 @@ xen-create-image - Easily create new Xen instances with networking and OpenSSH.
|
|||||||
|
|
||||||
Mandatory options:
|
Mandatory options:
|
||||||
|
|
||||||
|
--domaindir=dir
|
||||||
--dir=dir Specify where the output images should go.
|
--dir=dir Specify where the output images should go.
|
||||||
Subdirectories will be created for each guest
|
Subdirectories will be created for each guest.
|
||||||
If you do not wish to use loopback images specify --lvm
|
|
||||||
or --evms. (These three options are mutually exclusive.)
|
Using --dir will create subdirectory domains as before
|
||||||
|
for backwards compatibility, e.g. if you use
|
||||||
|
--dir=foo, the default disk image will go to
|
||||||
|
foo/domains/$hostname/disk.img.
|
||||||
|
|
||||||
|
Using --domaindir will create direct subdirectories
|
||||||
|
named after the hostname as discussed in
|
||||||
|
http://bugs.debian.org/477238, e.g. if you use
|
||||||
|
--domaindir=foo, the default disk image will go to
|
||||||
|
foo/$hostname/disk.img.
|
||||||
|
|
||||||
|
If you do not wish to use loopback images specify
|
||||||
|
--lvm or --evms. (These three respectively four
|
||||||
|
options are mutually exclusive.)
|
||||||
|
|
||||||
--lvm=vg Specify the volume group to save images within.
|
--lvm=vg Specify the volume group to save images within.
|
||||||
If you do not wish to use LVM specify --dir or --evms.
|
If you do not wish to use LVM specify --evms. or
|
||||||
(These three options are mutually exclusive.)
|
--dir/--domaindir (These three respectively four
|
||||||
|
options are mutually exclusive.)
|
||||||
|
|
||||||
--evms=lvm2/container
|
--evms=lvm2/container
|
||||||
Specify the container to save images within, i.e. '--evms
|
Specify the container to save images within, i.e. '--evms
|
||||||
lvm2/mycontainer'. If you do not wish to use EVMS specify
|
lvm2/mycontainer'. If you do not wish to use EVMS specify
|
||||||
--dir or --lvm. (These three options are mutually exclusive.)
|
--dir/--domaindir or --lvm. (These three respectively
|
||||||
|
four options are mutually exclusive.)
|
||||||
|
|
||||||
--hostname=host.example.org
|
--hostname=host.example.org
|
||||||
Set the hostname of the new guest system. Ideally
|
Set the hostname of the new guest system. Ideally
|
||||||
@@ -347,7 +363,7 @@ Create a Xen configuration file in so that xm can start the new domain.
|
|||||||
|
|
||||||
#
|
#
|
||||||
# Installation method:
|
# Installation method:
|
||||||
# One of "copy", "debootstrap", "rinse", "febootstrap", or "tar".
|
# One of "copy", "debootstrap", "rinse", "rpmstrap", or "tar".
|
||||||
#
|
#
|
||||||
install-method = debootstrap
|
install-method = debootstrap
|
||||||
|
|
||||||
@@ -523,7 +539,7 @@ Create a Xen configuration file in so that xm can start the new domain.
|
|||||||
The new guest images may be installed in several different ways:
|
The new guest images may be installed in several different ways:
|
||||||
|
|
||||||
1. Using the debootstrap command, which must be installed and present.
|
1. Using the debootstrap command, which must be installed and present.
|
||||||
2. Using the febootstrap command, which must be installed and present.
|
2. Using the rpmstrap command, which must be installed and present.
|
||||||
3. using the rinse command, which must be installed and present.
|
3. using the rinse command, which must be installed and present.
|
||||||
4. By copying an existing installation.
|
4. By copying an existing installation.
|
||||||
5. By untarring a file containing a previous installation.
|
5. By untarring a file containing a previous installation.
|
||||||
@@ -758,25 +774,6 @@ my $RELEASE = '4.2rc1';
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Release Aliases
|
|
||||||
#
|
|
||||||
my %RELEASE_ALIASES = (qw(
|
|
||||||
stentz fedora-core-4
|
|
||||||
bordeaux fedora-core-5
|
|
||||||
zod fedora-core-6
|
|
||||||
moonshine fedora-7
|
|
||||||
werewolf fedora-8
|
|
||||||
sulphur fedora-9
|
|
||||||
cambridge fedora-10
|
|
||||||
leonidas fedora-11
|
|
||||||
constantine fedora-12
|
|
||||||
goddard fedora-13
|
|
||||||
laughlin fedora-14
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Setup default options.
|
# Setup default options.
|
||||||
#
|
#
|
||||||
@@ -881,7 +878,7 @@ checkBinariesPresent();
|
|||||||
if ( !$#PARTITIONS )
|
if ( !$#PARTITIONS )
|
||||||
{
|
{
|
||||||
populatePartitionsData()
|
populatePartitionsData()
|
||||||
if ( ( $CONFIG{ 'dir' } ) ||
|
if ( ( $CONFIG{ 'domaindir' } ) ||
|
||||||
( $CONFIG{ 'evms' } ) ||
|
( $CONFIG{ 'evms' } ) ||
|
||||||
( $CONFIG{ 'lvm' } ) );
|
( $CONFIG{ 'lvm' } ) );
|
||||||
}
|
}
|
||||||
@@ -897,7 +894,7 @@ showSummary();
|
|||||||
#
|
#
|
||||||
# Create and format the images if we're using loopback filesystems.
|
# Create and format the images if we're using loopback filesystems.
|
||||||
#
|
#
|
||||||
if ( $CONFIG{ 'dir' } )
|
if ( $CONFIG{ 'domaindir' } )
|
||||||
{
|
{
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1466,6 +1463,7 @@ sub parseCommandLineArguments
|
|||||||
my %install;
|
my %install;
|
||||||
$install{ 'evms' } = undef;
|
$install{ 'evms' } = undef;
|
||||||
$install{ 'dir' } = undef;
|
$install{ 'dir' } = undef;
|
||||||
|
$install{ 'domaindir' } = undef;
|
||||||
$install{ 'lvm' } = undef;
|
$install{ 'lvm' } = undef;
|
||||||
$install{ 'image-dev' } = undef;
|
$install{ 'image-dev' } = undef;
|
||||||
|
|
||||||
@@ -1488,6 +1486,7 @@ sub parseCommandLineArguments
|
|||||||
|
|
||||||
# Locations
|
# Locations
|
||||||
"dir=s", \$install{ 'dir' },
|
"dir=s", \$install{ 'dir' },
|
||||||
|
"domaindir=s", \$install{ 'domaindir' },
|
||||||
"evms=s", \$install{ 'evms' },
|
"evms=s", \$install{ 'evms' },
|
||||||
"kernel=s", \$CONFIG{ 'kernel' },
|
"kernel=s", \$CONFIG{ 'kernel' },
|
||||||
"initrd=s", \$CONFIG{ 'initrd' },
|
"initrd=s", \$CONFIG{ 'initrd' },
|
||||||
@@ -1576,12 +1575,22 @@ sub parseCommandLineArguments
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Now make ensure that the command line setting of '--lvm', '--evms'
|
# Now make ensure that the command line setting of '--lvm', '--evms',
|
||||||
# and '--dir=x' override anything specified in the configuration file.
|
# '--domaindir=x' and '--dir=x' override anything specified in the
|
||||||
|
# configuration file.
|
||||||
#
|
#
|
||||||
if ( $install{ 'dir' } )
|
if ( $install{ 'dir' } )
|
||||||
{
|
{
|
||||||
$CONFIG{ 'dir' } = $install{ 'dir' };
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'domaindir' } = $install{ 'dir' }.'/domains';
|
||||||
|
$CONFIG{ 'evms' } = undef;
|
||||||
|
$CONFIG{ 'lvm' } = undef;
|
||||||
|
$CONFIG{ 'image-dev' } = undef;
|
||||||
|
}
|
||||||
|
if ( $install{ 'domaindir' } )
|
||||||
|
{
|
||||||
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'domaindir' } = $install{ 'domaindir' };
|
||||||
$CONFIG{ 'evms' } = undef;
|
$CONFIG{ 'evms' } = undef;
|
||||||
$CONFIG{ 'lvm' } = undef;
|
$CONFIG{ 'lvm' } = undef;
|
||||||
$CONFIG{ 'image-dev' } = undef;
|
$CONFIG{ 'image-dev' } = undef;
|
||||||
@@ -1589,6 +1598,7 @@ sub parseCommandLineArguments
|
|||||||
if ( $install{ 'evms' } )
|
if ( $install{ 'evms' } )
|
||||||
{
|
{
|
||||||
$CONFIG{ 'dir' } = undef;
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'domaindir' } = undef;
|
||||||
$CONFIG{ 'evms' } = $install{ 'evms' };
|
$CONFIG{ 'evms' } = $install{ 'evms' };
|
||||||
$CONFIG{ 'lvm' } = undef;
|
$CONFIG{ 'lvm' } = undef;
|
||||||
$CONFIG{ 'image-dev' } = undef;
|
$CONFIG{ 'image-dev' } = undef;
|
||||||
@@ -1596,6 +1606,7 @@ sub parseCommandLineArguments
|
|||||||
if ( $install{ 'lvm' } )
|
if ( $install{ 'lvm' } )
|
||||||
{
|
{
|
||||||
$CONFIG{ 'dir' } = undef;
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'domaindir' } = undef;
|
||||||
$CONFIG{ 'evms' } = undef;
|
$CONFIG{ 'evms' } = undef;
|
||||||
$CONFIG{ 'lvm' } = $install{ 'lvm' };
|
$CONFIG{ 'lvm' } = $install{ 'lvm' };
|
||||||
$CONFIG{ 'image-dev' } = undef;
|
$CONFIG{ 'image-dev' } = undef;
|
||||||
@@ -1603,6 +1614,7 @@ sub parseCommandLineArguments
|
|||||||
if ( $install{ 'image-dev' } )
|
if ( $install{ 'image-dev' } )
|
||||||
{
|
{
|
||||||
$CONFIG{ 'dir' } = undef;
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'domaindir' } = undef;
|
||||||
$CONFIG{ 'evms' } = undef;
|
$CONFIG{ 'evms' } = undef;
|
||||||
$CONFIG{ 'lvm' } = undef;
|
$CONFIG{ 'lvm' } = undef;
|
||||||
$CONFIG{ 'image-dev' } = $install{ 'image-dev' };
|
$CONFIG{ 'image-dev' } = $install{ 'image-dev' };
|
||||||
@@ -1706,10 +1718,11 @@ sub checkArguments
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check for release alias names
|
# NOTE: FAKE!
|
||||||
#
|
#
|
||||||
if (exists $RELEASE_ALIASES{$CONFIG{ 'dist' }}) {
|
if ( $CONFIG{ 'dist' } eq 'fedora-core4' )
|
||||||
$CONFIG{ 'dist' } = $RELEASE_ALIASES{$CONFIG{ 'dist' }};
|
{
|
||||||
|
$CONFIG{ 'dist' } = 'stentz';
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1727,7 +1740,7 @@ sub checkArguments
|
|||||||
my $err = <<E_OR;
|
my $err = <<E_OR;
|
||||||
|
|
||||||
We are trying to configure an installation of $CONFIG{'dist'} in
|
We are trying to configure an installation of $CONFIG{'dist'} in
|
||||||
$CONFIG{'dir'} - but there is no hook directory for us to use.
|
$CONFIG{'domaindir'} - but there is no hook directory for us to use.
|
||||||
|
|
||||||
This means we do not know how to configure this installation.
|
This means we do not know how to configure this installation.
|
||||||
|
|
||||||
@@ -1770,7 +1783,7 @@ E_OR
|
|||||||
if ( defined( $CONFIG{ 'install-method' } ) )
|
if ( defined( $CONFIG{ 'install-method' } ) )
|
||||||
{
|
{
|
||||||
foreach my $recognised (
|
foreach my $recognised (
|
||||||
qw/ copy debootstrap rinse febootstrap tar /)
|
qw/ copy debootstrap rinse rpmstrap tar /)
|
||||||
{
|
{
|
||||||
$valid = 1
|
$valid = 1
|
||||||
if ( lc( $CONFIG{ 'install-method' } ) eq lc($recognised) );
|
if ( lc( $CONFIG{ 'install-method' } ) eq lc($recognised) );
|
||||||
@@ -1803,7 +1816,7 @@ E_OR
|
|||||||
--install-method=copy --install-source=/some/path
|
--install-method=copy --install-source=/some/path
|
||||||
--install-method=debootstrap
|
--install-method=debootstrap
|
||||||
--install-method=rinse
|
--install-method=rinse
|
||||||
--install-method=febootstrap
|
--install-method=rpmstrap
|
||||||
--install-method=tar --install-source=/some/file.tar
|
--install-method=tar --install-source=/some/file.tar
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@@ -2125,7 +2138,7 @@ sub checkBinariesPresent
|
|||||||
#
|
#
|
||||||
# Image type specific binaries
|
# Image type specific binaries
|
||||||
#
|
#
|
||||||
if ( defined( $CONFIG{ 'dir' } ) )
|
if ( defined( $CONFIG{ 'domaindir' } ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
# loopback image
|
# loopback image
|
||||||
@@ -2660,7 +2673,7 @@ sub createLoopbackImages
|
|||||||
#
|
#
|
||||||
# Make sure we have the relevant output directory.
|
# Make sure we have the relevant output directory.
|
||||||
#
|
#
|
||||||
my $output = $CONFIG{ 'dir' } . "/domains/" . $CONFIG{ 'hostname' };
|
my $output = $CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' };
|
||||||
|
|
||||||
if ( !-d $output )
|
if ( !-d $output )
|
||||||
{
|
{
|
||||||
@@ -2684,7 +2697,7 @@ sub createLoopbackImages
|
|||||||
foreach my $partition (@PARTITIONS)
|
foreach my $partition (@PARTITIONS)
|
||||||
{
|
{
|
||||||
my $disk =
|
my $disk =
|
||||||
$CONFIG{ 'dir' } . '/domains/' . $CONFIG{ 'hostname' } . '/' .
|
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . '/' .
|
||||||
$partition->{ 'name' } . '.img';
|
$partition->{ 'name' } . '.img';
|
||||||
|
|
||||||
if ( -e $disk )
|
if ( -e $disk )
|
||||||
@@ -2703,7 +2716,7 @@ sub createLoopbackImages
|
|||||||
foreach my $partition (@PARTITIONS)
|
foreach my $partition (@PARTITIONS)
|
||||||
{
|
{
|
||||||
my $disk =
|
my $disk =
|
||||||
$CONFIG{ 'dir' } . '/domains/' . $CONFIG{ 'hostname' } . '/' .
|
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . '/' .
|
||||||
$partition->{ 'name' } . '.img';
|
$partition->{ 'name' } . '.img';
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -15,9 +15,12 @@ xen-delete-image - Delete previously created Xen instances.
|
|||||||
--verbose Show diagnostic output.
|
--verbose Show diagnostic output.
|
||||||
|
|
||||||
General options:
|
General options:
|
||||||
--dir Specify the output directory where images were previously saved.
|
--dir Specify the output directory where images were previously
|
||||||
--lvm Specify the LVM volume to use.
|
saved. (old style)
|
||||||
--evms Specify the EVMS container to use.
|
--domaindir Specify the output directory where images were previously
|
||||||
|
saved. (new style)
|
||||||
|
--lvm Specify the LVM volume to use.
|
||||||
|
--evms Specify the EVMS container to use.
|
||||||
|
|
||||||
Specifying hosts:
|
Specifying hosts:
|
||||||
--hostname Specify the image name to delete.
|
--hostname Specify the image name to delete.
|
||||||
@@ -33,7 +36,14 @@ xen-delete-image - Delete previously created Xen instances.
|
|||||||
=over 8
|
=over 8
|
||||||
|
|
||||||
=item B<--dir>
|
=item B<--dir>
|
||||||
Specify the output directory where images were previously saved.
|
Specify the output directory where images were previously saved. Looks
|
||||||
|
for directories named after the hostname in a subdirectory
|
||||||
|
"domains". (old style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
|
=item B<--domaindir>
|
||||||
|
Specify the output directory where images were previously saved. Looks
|
||||||
|
for directories named after the hostname directorly in this
|
||||||
|
directory. (new style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
=item B<--evms>
|
=item B<--evms>
|
||||||
Specify the EVMS container where images were previously saved.
|
Specify the EVMS container where images were previously saved.
|
||||||
@@ -345,6 +355,7 @@ sub parseCommandLineArguments
|
|||||||
# Parse options.
|
# Parse options.
|
||||||
#
|
#
|
||||||
GetOptions( "dir=s", \$CONFIG{ 'dir' },
|
GetOptions( "dir=s", \$CONFIG{ 'dir' },
|
||||||
|
"domaindir=s", \$CONFIG{ 'domaindir' },
|
||||||
"dry-run", \$CONFIG{ 'dry-run' },
|
"dry-run", \$CONFIG{ 'dry-run' },
|
||||||
"lvm=s", \$CONFIG{ 'lvm' },
|
"lvm=s", \$CONFIG{ 'lvm' },
|
||||||
"evms=s", \$CONFIG{ 'evms' },
|
"evms=s", \$CONFIG{ 'evms' },
|
||||||
@@ -359,7 +370,6 @@ sub parseCommandLineArguments
|
|||||||
pod2usage(1) if $HELP;
|
pod2usage(1) if $HELP;
|
||||||
pod2usage( -verbose => 2 ) if $MANUAL;
|
pod2usage( -verbose => 2 ) if $MANUAL;
|
||||||
|
|
||||||
|
|
||||||
if ($VERSION)
|
if ($VERSION)
|
||||||
{
|
{
|
||||||
my $REVISION = '$Revision: 1.41 $';
|
my $REVISION = '$Revision: 1.41 $';
|
||||||
@@ -373,6 +383,11 @@ sub parseCommandLineArguments
|
|||||||
exit;
|
exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($CONFIG{ 'dir' }) {
|
||||||
|
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
|
||||||
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -401,7 +416,7 @@ sub checkArguments
|
|||||||
# Make sure we got one and only one installation method.
|
# Make sure we got one and only one installation method.
|
||||||
#
|
#
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
foreach my $type (qw/dir lvm evms/)
|
foreach my $type (qw/dir domaindir lvm evms/)
|
||||||
{
|
{
|
||||||
$count += 1 if defined( $CONFIG{ $type } );
|
$count += 1 if defined( $CONFIG{ $type } );
|
||||||
}
|
}
|
||||||
@@ -414,6 +429,7 @@ sub checkArguments
|
|||||||
{
|
{
|
||||||
print "Please select one and only one of the installation methods:\n";
|
print "Please select one and only one of the installation methods:\n";
|
||||||
print " --dir\n";
|
print " --dir\n";
|
||||||
|
print " --domaindir\n";
|
||||||
print " --evms\n";
|
print " --evms\n";
|
||||||
print " --lvm\n";
|
print " --lvm\n";
|
||||||
exit;
|
exit;
|
||||||
@@ -504,9 +520,9 @@ sub deleteXenImage
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ( defined( $CONFIG{ 'dir' } ) )
|
if ( defined( $CONFIG{ 'domaindir' } ) )
|
||||||
{
|
{
|
||||||
my $prefix = $CONFIG{ 'dir' } . "/domains/";
|
my $prefix = $CONFIG{ 'domaindir' } . '/';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Now remove the directory.
|
# Now remove the directory.
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
|
|||||||
--verbose Show diagnostic output.
|
--verbose Show diagnostic output.
|
||||||
|
|
||||||
General Options:
|
General Options:
|
||||||
--add Specify the amount of space to add, e.g. --add=1gb
|
--add Specify the amount of space to add, e.g. --add=1gb
|
||||||
--dir Specify the path to the loopback image root.
|
--dir Specify the path to the loopback image root. (old style)
|
||||||
--force Force the resize to happen without a last-chance delay.
|
--domaindir Specify the path to the loopback image root. (new style)
|
||||||
--hostname Specify the hostname of the guest to resize.
|
--force Force the resize to happen without a last-chance delay.
|
||||||
|
--hostname Specify the hostname of the guest to resize.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
@@ -28,10 +29,14 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
|
|||||||
=over 8
|
=over 8
|
||||||
|
|
||||||
=item B<--add>
|
=item B<--add>
|
||||||
Specify the amount of storage to add to the primary disk.
|
Specify the amount of storage to add to the primary disk. Looks
|
||||||
|
for directories named after the hostname in a subdirectory
|
||||||
|
"domains". (old style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
=item B<--dir>
|
=item B<--domaindir>
|
||||||
Specify the directory where the loopback files are based.
|
Specify the directory where the loopback files are based. Looks
|
||||||
|
for directories named after the hostname directorly in this
|
||||||
|
directory. (new style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
=item B<--force>
|
=item B<--force>
|
||||||
Don't pause for 10 seconds prior to commencing.
|
Don't pause for 10 seconds prior to commencing.
|
||||||
@@ -143,14 +148,14 @@ testArguments();
|
|||||||
#
|
#
|
||||||
my $path = undef;
|
my $path = undef;
|
||||||
|
|
||||||
if ( $CONFIG{ 'dir' } )
|
if ( $CONFIG{ 'domaindir' } )
|
||||||
{
|
{
|
||||||
|
|
||||||
#
|
#
|
||||||
# Make sure we can find the disk
|
# Make sure we can find the disk
|
||||||
#
|
#
|
||||||
$path =
|
$path =
|
||||||
$CONFIG{ 'dir' } . "/domains/" . $CONFIG{ 'hostname' } . "/disk.img";
|
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . "/disk.img";
|
||||||
if ( !-e $path )
|
if ( !-e $path )
|
||||||
{
|
{
|
||||||
print <<EOF;
|
print <<EOF;
|
||||||
@@ -392,6 +397,7 @@ sub parseCommandLineArguments
|
|||||||
# Misc. options
|
# Misc. options
|
||||||
"add=s", \$CONFIG{ 'add' },
|
"add=s", \$CONFIG{ 'add' },
|
||||||
"dir=s", \$install{ 'dir' },
|
"dir=s", \$install{ 'dir' },
|
||||||
|
"domaindir=s",\$install{ 'domaindir' },
|
||||||
"lvm=s", \$install{ 'lvm' },
|
"lvm=s", \$install{ 'lvm' },
|
||||||
"hostname=s", \$CONFIG{ 'hostname' },
|
"hostname=s", \$CONFIG{ 'hostname' },
|
||||||
"force", \$CONFIG{ 'force' },
|
"force", \$CONFIG{ 'force' },
|
||||||
@@ -426,7 +432,15 @@ sub parseCommandLineArguments
|
|||||||
}
|
}
|
||||||
if ( $install{ 'dir' } )
|
if ( $install{ 'dir' } )
|
||||||
{
|
{
|
||||||
$CONFIG{ 'dir' } = $install{ 'dir' };
|
$CONFIG{ 'domaindir' } = $install{ 'dir' }.'/domains';
|
||||||
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
$CONFIG{ 'lvm' } = undef;
|
||||||
|
delete $CONFIG{ 'lvm' };
|
||||||
|
}
|
||||||
|
if ( $install{ 'domaindir' } )
|
||||||
|
{
|
||||||
|
$CONFIG{ 'domaindir' } = $install{ 'domaindir' };
|
||||||
|
$CONFIG{ 'dir' } = undef;
|
||||||
$CONFIG{ 'lvm' } = undef;
|
$CONFIG{ 'lvm' } = undef;
|
||||||
delete $CONFIG{ 'lvm' };
|
delete $CONFIG{ 'lvm' };
|
||||||
}
|
}
|
||||||
@@ -493,18 +507,20 @@ EOF
|
|||||||
if ( defined( $CONFIG{ 'lvm' } ) && length( $CONFIG{ 'lvm' } ) );
|
if ( defined( $CONFIG{ 'lvm' } ) && length( $CONFIG{ 'lvm' } ) );
|
||||||
$options += 1
|
$options += 1
|
||||||
if ( defined( $CONFIG{ 'dir' } ) && length( $CONFIG{ 'dir' } ) );
|
if ( defined( $CONFIG{ 'dir' } ) && length( $CONFIG{ 'dir' } ) );
|
||||||
|
$options += 1
|
||||||
|
if ( defined( $CONFIG{ 'domaindir' } ) && length( $CONFIG{ 'domaindir' } ) );
|
||||||
|
|
||||||
#
|
#
|
||||||
# Report
|
# Report
|
||||||
#
|
#
|
||||||
if ( $options == 0 )
|
if ( $options == 0 )
|
||||||
{
|
{
|
||||||
print "Please specify one of --lvm or --dir\n";
|
print "Please specify one of --lvm, --domaindir or --dir\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
if ( $options > 1 )
|
if ( $options > 1 )
|
||||||
{
|
{
|
||||||
print "Please specify only one of --lvm or --dir - not both!\n";
|
print "Please specify only one of --lvm, --domaindir or --dir - not several of them!\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ xen-update-image - Update the software installed upon offline Xen images.
|
|||||||
--version Show the version number and exit.
|
--version Show the version number and exit.
|
||||||
|
|
||||||
General Options:
|
General Options:
|
||||||
--dir Specify the directory which contains the image(s).
|
--dir Specify the directory which contains the image(s). (old style)
|
||||||
|
--domaindir Specify the directory which contains the image(s). (new style)
|
||||||
--lvm Specify the LVM volume group which contains the image(s).
|
--lvm Specify the LVM volume group which contains the image(s).
|
||||||
--evms Specify the EVMS container which contains the image(s).
|
--evms Specify the EVMS container which contains the image(s).
|
||||||
|
|
||||||
@@ -27,7 +28,14 @@ xen-update-image - Update the software installed upon offline Xen images.
|
|||||||
=over 8
|
=over 8
|
||||||
|
|
||||||
=item B<--dir>
|
=item B<--dir>
|
||||||
Specify the directory which contains the image(s).
|
Specify the directory which contains the image(s). Looks
|
||||||
|
for directories named after the hostname in a subdirectory
|
||||||
|
"domains". (old style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
|
=item B<--domaindir>
|
||||||
|
Specify the directory which contains the image(s). Looks
|
||||||
|
for directories named after the hostname directorly in this
|
||||||
|
directory. (new style, see xen-create-image(1) for details)
|
||||||
|
|
||||||
=item B<--evms>
|
=item B<--evms>
|
||||||
Specify the EVMS container which contains the image(s).
|
Specify the EVMS container which contains the image(s).
|
||||||
@@ -214,7 +222,7 @@ sub updateXenImage
|
|||||||
{
|
{
|
||||||
|
|
||||||
# The loopback image.
|
# The loopback image.
|
||||||
$img = $CONFIG{ 'dir' } . "/domains/" . $name . "/disk.img";
|
$img = $CONFIG{ 'domaindir' } . '/' . $name . "/disk.img";
|
||||||
|
|
||||||
if ( !-e $img )
|
if ( !-e $img )
|
||||||
{
|
{
|
||||||
@@ -438,6 +446,7 @@ sub parseCommandLineArguments
|
|||||||
# Parse options.
|
# Parse options.
|
||||||
#
|
#
|
||||||
GetOptions( "dir=s", \$CONFIG{ 'dir' }, "lvm=s", \$CONFIG{ 'lvm' },
|
GetOptions( "dir=s", \$CONFIG{ 'dir' }, "lvm=s", \$CONFIG{ 'lvm' },
|
||||||
|
"domaindir=s", \$CONFIG{ 'dir' },
|
||||||
"evms=s", \$CONFIG{ 'evms' }, "help", \$HELP,
|
"evms=s", \$CONFIG{ 'evms' }, "help", \$HELP,
|
||||||
"manual", \$MANUAL, "version", \$VERSION
|
"manual", \$MANUAL, "version", \$VERSION
|
||||||
);
|
);
|
||||||
@@ -457,6 +466,11 @@ sub parseCommandLineArguments
|
|||||||
exit;
|
exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($CONFIG{ 'dir' }) {
|
||||||
|
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
|
||||||
|
$CONFIG{ 'dir' } = undef;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -477,7 +491,7 @@ sub checkArguments
|
|||||||
# Make sure we got one and only one installation method.
|
# Make sure we got one and only one installation method.
|
||||||
#
|
#
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
foreach my $type (qw/dir lvm evms/)
|
foreach my $type (qw/dir domaindir lvm evms/)
|
||||||
{
|
{
|
||||||
$count += 1 if defined( $CONFIG{ $type } );
|
$count += 1 if defined( $CONFIG{ $type } );
|
||||||
}
|
}
|
||||||
@@ -490,6 +504,7 @@ sub checkArguments
|
|||||||
{
|
{
|
||||||
print "Please select one and only one of the installation methods:\n";
|
print "Please select one and only one of the installation methods:\n";
|
||||||
print " --dir\n";
|
print " --dir\n";
|
||||||
|
print " --domaindir\n";
|
||||||
print " --evms\n";
|
print " --evms\n";
|
||||||
print " --lvm\n";
|
print " --lvm\n";
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -419,7 +419,7 @@ sub createXenConfig
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$ENV{ 'image_prefix' } = "file:$ENV{'dir'}/domains/$ENV{'hostname'}/";
|
$ENV{ 'image_prefix' } = "file:$ENV{'domaindir'}/$ENV{'hostname'}/";
|
||||||
$ENV{ 'image_suffix' } = '.img';
|
$ENV{ 'image_suffix' } = '.img';
|
||||||
importPartitionsFromEnvironment();
|
importPartitionsFromEnvironment();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ xt-install-image - Install a fresh copy of GNU/Linux into a directory
|
|||||||
--dist The name of the distribution which has been installed.
|
--dist The name of the distribution which has been installed.
|
||||||
|
|
||||||
Misc Options:
|
Misc Options:
|
||||||
--arch Pass the given arch setting to debootstrap or febootstrap.
|
--arch Pass the given arch setting to debootstrap or rpmstrap.
|
||||||
--config Read the specified config file in addition to the global
|
--config Read the specified config file in addition to the global
|
||||||
configuration file.
|
configuration file.
|
||||||
--mirror The mirror to use when installing with 'debootstrap'.
|
--mirror The mirror to use when installing with 'debootstrap'.
|
||||||
@@ -69,8 +69,8 @@ Copy the given directory recursively. This local directory is assumed to contai
|
|||||||
=item B<rinse>
|
=item B<rinse>
|
||||||
Install the distribution specified by B<--dist> using the rinse command.
|
Install the distribution specified by B<--dist> using the rinse command.
|
||||||
|
|
||||||
=item B<febootstrap>
|
=item B<rpmstrap>
|
||||||
Install the distribution specified by B<--dist> using the febootstrap command.
|
Install the distribution specified by B<--dist> using the rpmstrap command.
|
||||||
|
|
||||||
=item B<tar>
|
=item B<tar>
|
||||||
Untar a .tar file into the new installation location. This tarfile is assumed to contain a complete archived system. Specify the directory to copy with the B<--install-source> argument.
|
Untar a .tar file into the new installation location. This tarfile is assumed to contain a complete archived system. Specify the directory to copy with the B<--install-source> argument.
|
||||||
@@ -141,8 +141,8 @@ my %dispatch = (
|
|||||||
"rinse" => { sub => \&do_rinse,
|
"rinse" => { sub => \&do_rinse,
|
||||||
needBinary => "/usr/sbin/rinse",
|
needBinary => "/usr/sbin/rinse",
|
||||||
},
|
},
|
||||||
"febootstrap" => { sub => \&do_febootstrap,
|
"rpmstrap" => { sub => \&do_rpmstrap,
|
||||||
needBinary => "/usr/bin/febootstrap",
|
needBinary => "/usr/bin/rpmstrap",
|
||||||
},
|
},
|
||||||
"tar" => { sub => \&do_tar,
|
"tar" => { sub => \&do_tar,
|
||||||
needBinary => "/bin/tar",
|
needBinary => "/bin/tar",
|
||||||
@@ -532,7 +532,7 @@ E_OR
|
|||||||
|
|
||||||
--install-method=copy --install-source=/some/path
|
--install-method=copy --install-source=/some/path
|
||||||
--install-method=debootstrap
|
--install-method=debootstrap
|
||||||
--install-method=febootstrap
|
--install-method=rpmstrap
|
||||||
--install-method=tar --install-source=/some/file.tar
|
--install-method=tar --install-source=/some/file.tar
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@@ -717,13 +717,29 @@ sub do_debootstrap
|
|||||||
print("Done\n");
|
print("Done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Propogate --verbose appropriately.
|
||||||
|
#
|
||||||
|
my $EXTRA = '';
|
||||||
|
if ( $CONFIG{ 'verbose' } )
|
||||||
|
{
|
||||||
|
$EXTRA = ' --verbose';
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Propogate the --arch argument
|
||||||
|
#
|
||||||
|
if ( $CONFIG{ 'arch' } )
|
||||||
|
{
|
||||||
|
$EXTRA .= " --arch $CONFIG{'arch'}";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# This is the command we'll run
|
# This is the command we'll run
|
||||||
#
|
#
|
||||||
my $dist = $CONFIG{'dist'};
|
my $command =
|
||||||
$dist =~ s/fedora-core/fedora/;
|
"$cmd $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $CONFIG{'mirror'}";
|
||||||
|
|
||||||
my $command = "$cmd $dist $CONFIG{'location'}";
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Run the command.
|
# Run the command.
|
||||||
@@ -789,13 +805,13 @@ sub do_rinse
|
|||||||
|
|
||||||
=begin doc
|
=begin doc
|
||||||
|
|
||||||
Install a new distribution of GNU/Linux using the febootstrap tool.
|
Install a new distribution of GNU/Linux using the rpmstrap tool.
|
||||||
|
|
||||||
=end doc
|
=end doc
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub do_febootstrap
|
sub do_rpmstrap
|
||||||
{
|
{
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -824,7 +840,7 @@ sub do_febootstrap
|
|||||||
#
|
#
|
||||||
# The command we're going to run.
|
# The command we're going to run.
|
||||||
#
|
#
|
||||||
my $command = "febootstrap $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $mirror";
|
my $command = "rpmstrap $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $mirror";
|
||||||
runCommand($command);
|
runCommand($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
debian/changelog
vendored
2
debian/changelog
vendored
@@ -41,6 +41,8 @@ xen-tools (4.2~rc1-1) UNRELEASED; urgency=low
|
|||||||
- Checks for debootstrap and cdebootstrap, uses debootstrap if both
|
- Checks for debootstrap and cdebootstrap, uses debootstrap if both
|
||||||
are installed (Changed "Depends: debootstrap" to "Depends:
|
are installed (Changed "Depends: debootstrap" to "Depends:
|
||||||
debootstrap | cdebootstrap" in debian/control)
|
debootstrap | cdebootstrap" in debian/control)
|
||||||
|
- Introduces the --domaindir option as alternative to --dir which
|
||||||
|
always appends "/domains/" to the path. (Closes: #477238)
|
||||||
* Removal of /etc/bash_completion.d/xm from the package since
|
* Removal of /etc/bash_completion.d/xm from the package since
|
||||||
bash-completion ships a more elaborate version of that file. (Closes:
|
bash-completion ships a more elaborate version of that file. (Closes:
|
||||||
#566683, #550590, LP: #538917, #484098)
|
#566683, #550590, LP: #538917, #484098)
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ _xen_create_image()
|
|||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--install-method)
|
--install-method)
|
||||||
COMPREPLY=( $( compgen -W 'copy debootstrap rinse febootstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--ip)
|
--ip)
|
||||||
@@ -360,7 +360,7 @@ complete -F _xt-create-xen-config xt-create-xen-config
|
|||||||
#
|
#
|
||||||
_xt-customize-image()
|
_xt-customize-image()
|
||||||
{
|
{
|
||||||
local cur prev
|
local cur prev dists
|
||||||
|
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
cur=${COMP_WORDS[COMP_CWORD]}
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
@@ -369,9 +369,16 @@ _xt-customize-image()
|
|||||||
# Determine arguments dynamically. Avoids out-of-dateness.
|
# Determine arguments dynamically. Avoids out-of-dateness.
|
||||||
opts=$(xt-customize-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
|
opts=$(xt-customize-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Available distributions, from rpmstrap
|
||||||
|
#
|
||||||
|
if [ -d /usr/lib/rpmstrap/scripts ]; then
|
||||||
|
dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
|
||||||
|
fi
|
||||||
|
|
||||||
case "$prev" in
|
case "$prev" in
|
||||||
--dist)
|
--dist)
|
||||||
COMPREPLY=( $( compgen -W 'sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--location)
|
--location)
|
||||||
@@ -394,7 +401,7 @@ complete -F _xt-customize-image xt-customize-image
|
|||||||
#
|
#
|
||||||
_xt-install-image()
|
_xt-install-image()
|
||||||
{
|
{
|
||||||
local cur prev
|
local cur prev dists
|
||||||
|
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
cur=${COMP_WORDS[COMP_CWORD]}
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
@@ -404,6 +411,14 @@ _xt-install-image()
|
|||||||
opts=$(xt-install-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
|
opts=$(xt-install-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Available distributions, from rpmstrap
|
||||||
|
#
|
||||||
|
if [ -d /usr/lib/rpmstrap/scripts ]; then
|
||||||
|
dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
case "$prev" in
|
case "$prev" in
|
||||||
--cache)
|
--cache)
|
||||||
COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
||||||
@@ -414,11 +429,11 @@ _xt-install-image()
|
|||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--dist)
|
--dist)
|
||||||
COMPREPLY=( $( compgen -W 'sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--install-method)
|
--install-method)
|
||||||
COMPREPLY=( $( compgen -W 'copy debootstrap rinse febootstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
--location)
|
--location)
|
||||||
|
|||||||
Reference in New Issue
Block a user