1
0
mirror of synced 2026-02-28 08:58:02 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Axel Beckert
9a81f9ddb5 Pass a hint that further guessing may be necessary 2010-05-28 00:04:55 +02:00
Axel Beckert
e1a620237a Determine which partitions to delete (doesn't delete them yet) 2010-05-28 00:03:54 +02:00
6 changed files with 125 additions and 124 deletions

View File

@@ -216,35 +216,19 @@ xen-create-image - Easily create new Xen instances with networking and OpenSSH.
Mandatory options:
--domaindir=dir
--dir=dir Specify where the output images should go.
Subdirectories will be created for each guest.
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.)
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.)
--lvm=vg Specify the volume group to save images within.
If you do not wish to use LVM specify --evms. or
--dir/--domaindir (These three respectively four
options are mutually exclusive.)
If you do not wish to use LVM specify --dir or --evms.
(These three options are mutually exclusive.)
--evms=lvm2/container
Specify the container to save images within, i.e. '--evms
lvm2/mycontainer'. If you do not wish to use EVMS specify
--dir/--domaindir or --lvm. (These three respectively
four options are mutually exclusive.)
--dir or --lvm. (These three options are mutually exclusive.)
--hostname=host.example.org
Set the hostname of the new guest system. Ideally
@@ -878,7 +862,7 @@ checkBinariesPresent();
if ( !$#PARTITIONS )
{
populatePartitionsData()
if ( ( $CONFIG{ 'domaindir' } ) ||
if ( ( $CONFIG{ 'dir' } ) ||
( $CONFIG{ 'evms' } ) ||
( $CONFIG{ 'lvm' } ) );
}
@@ -894,7 +878,7 @@ showSummary();
#
# Create and format the images if we're using loopback filesystems.
#
if ( $CONFIG{ 'domaindir' } )
if ( $CONFIG{ 'dir' } )
{
#
@@ -1463,7 +1447,6 @@ sub parseCommandLineArguments
my %install;
$install{ 'evms' } = undef;
$install{ 'dir' } = undef;
$install{ 'domaindir' } = undef;
$install{ 'lvm' } = undef;
$install{ 'image-dev' } = undef;
@@ -1486,7 +1469,6 @@ sub parseCommandLineArguments
# Locations
"dir=s", \$install{ 'dir' },
"domaindir=s", \$install{ 'domaindir' },
"evms=s", \$install{ 'evms' },
"kernel=s", \$CONFIG{ 'kernel' },
"initrd=s", \$CONFIG{ 'initrd' },
@@ -1575,22 +1557,12 @@ sub parseCommandLineArguments
#
# Now make ensure that the command line setting of '--lvm', '--evms',
# '--domaindir=x' and '--dir=x' override anything specified in the
# configuration file.
# Now make ensure that the command line setting of '--lvm', '--evms'
# and '--dir=x' override anything specified in the configuration file.
#
if ( $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{ 'dir' } = $install{ 'dir' };
$CONFIG{ 'evms' } = undef;
$CONFIG{ 'lvm' } = undef;
$CONFIG{ 'image-dev' } = undef;
@@ -1598,7 +1570,6 @@ sub parseCommandLineArguments
if ( $install{ 'evms' } )
{
$CONFIG{ 'dir' } = undef;
$CONFIG{ 'domaindir' } = undef;
$CONFIG{ 'evms' } = $install{ 'evms' };
$CONFIG{ 'lvm' } = undef;
$CONFIG{ 'image-dev' } = undef;
@@ -1606,7 +1577,6 @@ sub parseCommandLineArguments
if ( $install{ 'lvm' } )
{
$CONFIG{ 'dir' } = undef;
$CONFIG{ 'domaindir' } = undef;
$CONFIG{ 'evms' } = undef;
$CONFIG{ 'lvm' } = $install{ 'lvm' };
$CONFIG{ 'image-dev' } = undef;
@@ -1614,7 +1584,6 @@ sub parseCommandLineArguments
if ( $install{ 'image-dev' } )
{
$CONFIG{ 'dir' } = undef;
$CONFIG{ 'domaindir' } = undef;
$CONFIG{ 'evms' } = undef;
$CONFIG{ 'lvm' } = undef;
$CONFIG{ 'image-dev' } = $install{ 'image-dev' };
@@ -1740,7 +1709,7 @@ sub checkArguments
my $err = <<E_OR;
We are trying to configure an installation of $CONFIG{'dist'} in
$CONFIG{'domaindir'} - but there is no hook directory for us to use.
$CONFIG{'dir'} - but there is no hook directory for us to use.
This means we do not know how to configure this installation.
@@ -2138,7 +2107,7 @@ sub checkBinariesPresent
#
# Image type specific binaries
#
if ( defined( $CONFIG{ 'domaindir' } ) )
if ( defined( $CONFIG{ 'dir' } ) )
{
# loopback image
@@ -2673,7 +2642,7 @@ sub createLoopbackImages
#
# Make sure we have the relevant output directory.
#
my $output = $CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' };
my $output = $CONFIG{ 'dir' } . "/domains/" . $CONFIG{ 'hostname' };
if ( !-d $output )
{
@@ -2697,7 +2666,7 @@ sub createLoopbackImages
foreach my $partition (@PARTITIONS)
{
my $disk =
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . '/' .
$CONFIG{ 'dir' } . '/domains/' . $CONFIG{ 'hostname' } . '/' .
$partition->{ 'name' } . '.img';
if ( -e $disk )
@@ -2716,7 +2685,7 @@ sub createLoopbackImages
foreach my $partition (@PARTITIONS)
{
my $disk =
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . '/' .
$CONFIG{ 'dir' } . '/domains/' . $CONFIG{ 'hostname' } . '/' .
$partition->{ 'name' } . '.img';
#

View File

@@ -15,12 +15,9 @@ xen-delete-image - Delete previously created Xen instances.
--verbose Show diagnostic output.
General options:
--dir Specify the output directory where images were previously
saved. (old style)
--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.
--dir Specify the output directory where images were previously saved.
--lvm Specify the LVM volume to use.
--evms Specify the EVMS container to use.
Specifying hosts:
--hostname Specify the image name to delete.
@@ -36,14 +33,7 @@ xen-delete-image - Delete previously created Xen instances.
=over 8
=item B<--dir>
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)
Specify the output directory where images were previously saved.
=item B<--evms>
Specify the EVMS container where images were previously saved.
@@ -182,7 +172,6 @@ my %CONFIG;
my $RELEASE = '4.2rc1';
#
# Read the global configuration file if it exists.
#
@@ -230,7 +219,21 @@ while ( my $name = shift )
{
if ( !xenRunning($name) )
{
deleteXenImage($name);
#
# Partition layout information values read from the
# partitions file, or constructed automatically if no
# partitions file is specified.
#
my @PARTITIONS = undef;
#
# Check for partitions to delete by reading the DomU's
# configuration file
#
my @PARTITIONS = findPartitions($host
deleteXenImage($name, @PARTITIONS);
}
else
{
@@ -355,7 +358,6 @@ sub parseCommandLineArguments
# Parse options.
#
GetOptions( "dir=s", \$CONFIG{ 'dir' },
"domaindir=s", \$CONFIG{ 'domaindir' },
"dry-run", \$CONFIG{ 'dry-run' },
"lvm=s", \$CONFIG{ 'lvm' },
"evms=s", \$CONFIG{ 'evms' },
@@ -370,6 +372,7 @@ sub parseCommandLineArguments
pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL;
if ($VERSION)
{
my $REVISION = '$Revision: 1.41 $';
@@ -383,11 +386,6 @@ sub parseCommandLineArguments
exit;
}
if ($CONFIG{ 'dir' }) {
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
$CONFIG{ 'dir' } = undef;
}
}
@@ -416,7 +414,7 @@ sub checkArguments
# Make sure we got one and only one installation method.
#
my $count = 0;
foreach my $type (qw/dir domaindir lvm evms/)
foreach my $type (qw/dir lvm evms/)
{
$count += 1 if defined( $CONFIG{ $type } );
}
@@ -429,7 +427,6 @@ sub checkArguments
{
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --domaindir\n";
print " --evms\n";
print " --lvm\n";
exit;
@@ -465,6 +462,70 @@ sub xenRunning
}
=begin doc
Read the (usually to be deleted) DomU configuration file specified
and returns the list of used partitions found in the file.
=end doc
=cut
sub findPartitions
{
my ($hostname) = (@_);
my $file = "/etc/xen/$hostname.cfg";
if ( -e $file )
{
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
my $contents = "";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
$contents .= $line;
}
close(FILE);
if ($contents =~ /\ndisk\s*=\s*\[\s*(.*?)\s*\]\s*\n/) {
my $disks = $1;
my @disks = split(/\n/, $disks);
foreach (@disks) {
s/^\s*'phy:(.*),\w*,\w*',\s*$/$1/;
}
return @disks;
}
} else {
warn "Couldn't find $file. May start guessing based on further parameters.\n";
return qw(GUESSING);
}
}
=begin doc
Delete the named image, and the corresponding configuration file
@@ -476,7 +537,11 @@ sub xenRunning
sub deleteXenImage
{
my ($hostname) = (@_);
my $hostname = shift;
my @partitions = @_;
my $guessing = ($#partitions == 0 and $partitions[0] eq 'GUESSING');
#
# Collect the names of files to delete.
@@ -520,9 +585,9 @@ sub deleteXenImage
}
if ( defined( $CONFIG{ 'domaindir' } ) )
if ( defined( $CONFIG{ 'dir' } ) )
{
my $prefix = $CONFIG{ 'domaindir' } . '/';
my $prefix = $CONFIG{ 'dir' } . "/domains/";
#
# Now remove the directory.

View File

@@ -15,11 +15,10 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
--verbose Show diagnostic output.
General Options:
--add Specify the amount of space to add, e.g. --add=1gb
--dir Specify the path to the loopback image root. (old style)
--domaindir Specify the path to the loopback image root. (new style)
--force Force the resize to happen without a last-chance delay.
--hostname Specify the hostname of the guest to resize.
--add Specify the amount of space to add, e.g. --add=1gb
--dir Specify the path to the loopback image root.
--force Force the resize to happen without a last-chance delay.
--hostname Specify the hostname of the guest to resize.
=cut
@@ -29,14 +28,10 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
=over 8
=item B<--add>
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)
Specify the amount of storage to add to the primary disk.
=item B<--domaindir>
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<--dir>
Specify the directory where the loopback files are based.
=item B<--force>
Don't pause for 10 seconds prior to commencing.
@@ -148,14 +143,14 @@ testArguments();
#
my $path = undef;
if ( $CONFIG{ 'domaindir' } )
if ( $CONFIG{ 'dir' } )
{
#
# Make sure we can find the disk
#
$path =
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . "/disk.img";
$CONFIG{ 'dir' } . "/domains/" . $CONFIG{ 'hostname' } . "/disk.img";
if ( !-e $path )
{
print <<EOF;
@@ -397,7 +392,6 @@ sub parseCommandLineArguments
# Misc. options
"add=s", \$CONFIG{ 'add' },
"dir=s", \$install{ 'dir' },
"domaindir=s",\$install{ 'domaindir' },
"lvm=s", \$install{ 'lvm' },
"hostname=s", \$CONFIG{ 'hostname' },
"force", \$CONFIG{ 'force' },
@@ -432,15 +426,7 @@ sub parseCommandLineArguments
}
if ( $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{ 'dir' } = $install{ 'dir' };
$CONFIG{ 'lvm' } = undef;
delete $CONFIG{ 'lvm' };
}
@@ -507,20 +493,18 @@ EOF
if ( defined( $CONFIG{ 'lvm' } ) && length( $CONFIG{ 'lvm' } ) );
$options += 1
if ( defined( $CONFIG{ 'dir' } ) && length( $CONFIG{ 'dir' } ) );
$options += 1
if ( defined( $CONFIG{ 'domaindir' } ) && length( $CONFIG{ 'domaindir' } ) );
#
# Report
#
if ( $options == 0 )
{
print "Please specify one of --lvm, --domaindir or --dir\n";
print "Please specify one of --lvm or --dir\n";
exit 1;
}
if ( $options > 1 )
{
print "Please specify only one of --lvm, --domaindir or --dir - not several of them!\n";
print "Please specify only one of --lvm or --dir - not both!\n";
exit 1;
}

View File

@@ -14,8 +14,7 @@ xen-update-image - Update the software installed upon offline Xen images.
--version Show the version number and exit.
General Options:
--dir Specify the directory which contains the image(s). (old style)
--domaindir Specify the directory which contains the image(s). (new style)
--dir Specify the directory 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).
@@ -28,14 +27,7 @@ xen-update-image - Update the software installed upon offline Xen images.
=over 8
=item B<--dir>
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)
Specify the directory which contains the image(s).
=item B<--evms>
Specify the EVMS container which contains the image(s).
@@ -222,7 +214,7 @@ sub updateXenImage
{
# The loopback image.
$img = $CONFIG{ 'domaindir' } . '/' . $name . "/disk.img";
$img = $CONFIG{ 'dir' } . "/domains/" . $name . "/disk.img";
if ( !-e $img )
{
@@ -446,7 +438,6 @@ sub parseCommandLineArguments
# Parse options.
#
GetOptions( "dir=s", \$CONFIG{ 'dir' }, "lvm=s", \$CONFIG{ 'lvm' },
"domaindir=s", \$CONFIG{ 'dir' },
"evms=s", \$CONFIG{ 'evms' }, "help", \$HELP,
"manual", \$MANUAL, "version", \$VERSION
);
@@ -466,11 +457,6 @@ sub parseCommandLineArguments
exit;
}
if ($CONFIG{ 'dir' }) {
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
$CONFIG{ 'dir' } = undef;
}
}
@@ -491,7 +477,7 @@ sub checkArguments
# Make sure we got one and only one installation method.
#
my $count = 0;
foreach my $type (qw/dir domaindir lvm evms/)
foreach my $type (qw/dir lvm evms/)
{
$count += 1 if defined( $CONFIG{ $type } );
}
@@ -504,7 +490,6 @@ sub checkArguments
{
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --domaindir\n";
print " --evms\n";
print " --lvm\n";
exit;

View File

@@ -419,7 +419,7 @@ sub createXenConfig
}
else
{
$ENV{ 'image_prefix' } = "file:$ENV{'domaindir'}/$ENV{'hostname'}/";
$ENV{ 'image_prefix' } = "file:$ENV{'dir'}/domains/$ENV{'hostname'}/";
$ENV{ 'image_suffix' } = '.img';
importPartitionsFromEnvironment();
}

2
debian/changelog vendored
View File

@@ -41,8 +41,6 @@ xen-tools (4.2~rc1-1) UNRELEASED; urgency=low
- Checks for debootstrap and cdebootstrap, uses debootstrap if both
are installed (Changed "Depends: debootstrap" to "Depends:
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
bash-completion ships a more elaborate version of that file. (Closes:
#566683, #550590, LP: #538917, #484098)