1
0
mirror of synced 2026-03-28 10:32:43 +00:00

Refactoring: Massive code deduplication in hooks directory

All hooks files which were identical and had no second group of
identically named hook files have been moved to a new hooks/common
directory and now have symbolic links to the new single file at their
old locations.

Also slightly modified to make this work:

  * Makefile: copy new hooks/common directory
  * Some tests: ignore new hooks/common directory
This commit is contained in:
Axel Beckert
2012-06-04 16:26:03 +02:00
parent 3106753871
commit fc736c040d
99 changed files with 1054 additions and 5305 deletions

View File

@@ -192,6 +192,7 @@ install-hooks:
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d precise.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d quantal.d
cp hooks/common.sh ${prefix}/usr/lib/xen-tools
cp -r hooks/common ${prefix}/usr/lib/xen-tools
#

5
NEWS
View File

@@ -1,6 +1,11 @@
xen-tools 4.3 (released [TODO])
================================
New Features and Major Changes
------------------------------
* Massive code deduplication in hooks directory
New Options
-----------

1
debian/changelog vendored
View File

@@ -25,6 +25,7 @@ xen-tools (4.3~dev-1) UNRELEASED; urgency=low
- Fixes call to non-existent function logPrint (Closes: #673335)
- Also disable initctl in the chroot, not only start-stop-daemon
(LP: #997063; Thanks xstasi!)
- Massive code deduplication in hooks directory
* Add dependency on openssh-client for ssh-keygen (Closes: #649108)
* Use dh_auto_test for build time tests and add according
build-dependencies on devscripts and libfile-slurp-perl.

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# This script disables TLS on the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Don't touch TLS on 64 bit platforms.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
exit
fi
#
# Disable TLS and create an empty directory in its place
#
mv ${prefix}/lib/tls ${prefix}/lib/tls.disabled
mkdir ${prefix}/lib/tls
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/10-disable-tls

View File

@@ -1,44 +0,0 @@
#!/bin/sh
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Record arch, if present.
#
if [ -d $prefix/etc/rpm ]; then
logMessage Found /etc/rpm
#
# If i386 then record this
#
if [ "$arch" = "i386" ]; then
echo "i386-fedora-linux-gnu" >> $prefix/etc/rpm/platform
fi
else
logMessage Failed to find /etc/rpm
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/15-disable-hwclock

View File

@@ -1,181 +0,0 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

View File

@@ -0,0 +1 @@
../common/35-setup-users

View File

@@ -1,53 +0,0 @@
#!/bin/sh
#
# This script ensures that the new guest images have a nicely
# populated /dev directory.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Early termination if we have a couple of common devices present
# should speed up installs which use --copy/--tar
#
if ( test `ls -1 ${prefix}/dev | wc -l` -gt 10 ); then
logMessage "Terminating because there appear to be files in /dev already"
exit
fi
#
# Make the device nodes.
#
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV console'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV null'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV zero'
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/55-create-dev

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy everything from the skel directory into the new instance
# if that directory exists.
#
if [ -d /etc/xen-tools/skel ]; then
logMessage Copying files from /etc/xen-tools/skel
(cd /etc/xen-tools/skel; tar -cf - . ) | (cd ${prefix}/; tar -xpf -)
logMessage Finished
else
logMessage skel directory, /etc/xen-tools/skell, not present ignoring.
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/65-copy-user-files

View File

@@ -1,62 +0,0 @@
#!/bin/sh
#
# This script ensures /etc/securetty upon the new guests has the new
# Xen console devices in it
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMessage /etc/securetty not found.
exit
fi
#
# Do both the devices.
#
for i in xvc0 hvc0 ; do
#
# Only append if not presnt.
#
if ( grep $i ${prefix}/etc/securetty > /dev/null ) ; then
logMessage Host already has $i entry
else
echo $i >> ${prefix}/etc/securetty
fi
done
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/75-fixup-securetty

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# This script disables TLS on the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Don't touch TLS on 64 bit platforms.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
exit
fi
#
# Disable TLS and create an empty directory in its place
#
mv ${prefix}/lib/tls ${prefix}/lib/tls.disabled
mkdir ${prefix}/lib/tls
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/10-disable-tls

View File

@@ -1,44 +0,0 @@
#!/bin/sh
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Record arch, if present.
#
if [ -d $prefix/etc/rpm ]; then
logMessage Found /etc/rpm
#
# If i386 then record this
#
if [ "$arch" = "i386" ]; then
echo "i386-fedora-linux-gnu" >> $prefix/etc/rpm/platform
fi
else
logMessage Failed to find /etc/rpm
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/15-disable-hwclock

View File

@@ -1,181 +0,0 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

View File

@@ -0,0 +1 @@
../common/35-setup-users

View File

@@ -1,53 +0,0 @@
#!/bin/sh
#
# This script ensures that the new guest images have a nicely
# populated /dev directory.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Early termination if we have a couple of common devices present
# should speed up installs which use --copy/--tar
#
if ( test `ls -1 ${prefix}/dev | wc -l` -gt 10 ); then
logMessage "Terminating because there appear to be files in /dev already"
exit
fi
#
# Make the device nodes.
#
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV console'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV null'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV zero'
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/55-create-dev

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy everything from the skel directory into the new instance
# if that directory exists.
#
if [ -d /etc/xen-tools/skel ]; then
logMessage Copying files from /etc/xen-tools/skel
(cd /etc/xen-tools/skel; tar -cf - . ) | (cd ${prefix}/; tar -xpf -)
logMessage Finished
else
logMessage skel directory, /etc/xen-tools/skell, not present ignoring.
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/65-copy-user-files

View File

@@ -1,62 +0,0 @@
#!/bin/sh
#
# This script ensures /etc/securetty upon the new guests has the new
# Xen console devices in it
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMessage /etc/securetty not found.
exit
fi
#
# Do both the devices.
#
for i in xvc0 hvc0 ; do
#
# Only append if not presnt.
#
if ( grep $i ${prefix}/etc/securetty > /dev/null ) ; then
logMessage Host already has $i entry
else
echo $i >> ${prefix}/etc/securetty
fi
done
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/75-fixup-securetty

54
hooks/common/01-disable-daemons Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/sh
#
# This script ensures that daemons will not be started inside our
# chroot() installation.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Make sure we have a directory.
#
if [ ! -d "${prefix}/usr/sbin" ]; then
mkdir -p "${prefix}/usr/sbin"
logMessage "created missing directory: ${prefix}/usr/sbin"
fi
#
# Add the script.
#
echo '#!/bin/sh' > ${prefix}/usr/sbin/policy-rc.d
echo 'exit 101' >> ${prefix}/usr/sbin/policy-rc.d
chmod 755 ${prefix}/usr/sbin/policy-rc.d
#
# Log our finish
#
logMessage Script $0 finished.

45
hooks/common/05-shadowconfig-on Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/sh
#
# This script enforces the use of a shadow password file.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Enable the shadow passwords if the command is found.
#
if [ -x ${prefix}/sbin/shadowconfig ]; then
chroot ${prefix} /sbin/shadowconfig on
else
logMessage "/sbin/shadowconfig not found. skipping."
fi
#
# Log our finish
#
logMessage Script $0 finished.

49
hooks/common/10-disable-tls Executable file
View File

@@ -0,0 +1,49 @@
#!/bin/sh
#
# This script disables TLS on the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Don't touch TLS on 64 bit platforms.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
exit
fi
#
# Disable TLS and create an empty directory in its place
#
mv ${prefix}/lib/tls ${prefix}/lib/tls.disabled
mkdir ${prefix}/lib/tls
#
# Log our finish
#
logMessage Script $0 finished

38
hooks/common/15-disable-hwclock Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/sh
#
# This script disables the hardware clock.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Disable the startup scripts from all runlevels.
#
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove
#
# Log our finish
#
logMessage Script $0 finished.

44
hooks/common/15-setup-arch Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Record arch, if present.
#
if [ -d $prefix/etc/rpm ]; then
logMessage Found /etc/rpm
#
# If i386 then record this
#
if [ "$arch" = "i386" ]; then
echo "i386-fedora-linux-gnu" >> $prefix/etc/rpm/platform
fi
else
logMessage Failed to find /etc/rpm
fi
#
# Log our finish
#
logMessage Script $0 finished

90
hooks/common/20-setup-apt Executable file
View File

@@ -0,0 +1,90 @@
#!/bin/sh
#
# This script sets up the /etc/apt/sources.list for APT.
#
# Steve
# --
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Attempt to auto-magically detect the use of a Proxy for apt-get, and
# replicate that setup in our new guest via apt-config dump and save
# the setting to the proxy guess file.
#
if [ ${apt_proxy} ]; then
echo "Acquire::http::Proxy \"${apt_proxy}\";" > ${prefix}/etc/apt/apt.conf.d/01proxy
else
logMessage The use of a proxy detected.
apt-config dump | grep -i Acquire::HTTP::Proxy > ${prefix}/etc/apt/apt.conf.d/01proxy
fi
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list
#
# /etc/apt/sources.list
#
#
# ${dist}
#
deb ${mirror} ${dist} main restricted universe multiverse
deb-src ${mirror} ${dist} main restricted universe
deb ${mirror} ${dist}-updates main restricted universe multiverse
deb-src ${mirror} ${dist}-updates main restricted universe
deb http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
E_O_APT
#
# Now that the sources have been setup make sure the system is up to date.
#
chroot ${prefix} /usr/bin/apt-get update
#
# Now fixup TLS on non-64bit systems.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
else
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
fi
#
# Log our finish
#
logMessage Script $0 finished

40
hooks/common/25-generate-locale Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/sh
#
# This script generates a default en_US.UTF-8 locale.
#
# Ward
# --
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install the English language pack.
#
# NOTE: Failure to support your favourite language is *not* a bug.
#
installDebianPackage ${prefix} language-pack-en
#
# Log our finish
#
logMessage Script $0 finished

181
hooks/common/35-setup-users Executable file
View File

@@ -0,0 +1,181 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

141
hooks/common/50-setup-hostname Executable file
View File

@@ -0,0 +1,141 @@
#!/bin/sh
#
# This script places the new systems hostname into a couple of files within
# the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
#
# Setup the mailname + hostname files.
#
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname
#
# Fixup the /etc/hosts file upon the new image for
# machines with static IPs
#
if [ -z "${copyhosts}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
cat >> ${prefix}/etc/hosts <<EOF
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi
#
# Allow the host system to know the IP address of our new guest.
#
if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN.
else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi
fi
#
# Log our finish
#
logMessage Script $0 finished

53
hooks/common/55-create-dev Executable file
View File

@@ -0,0 +1,53 @@
#!/bin/sh
#
# This script ensures that the new guest images have a nicely
# populated /dev directory.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Early termination if we have a couple of common devices present
# should speed up installs which use --copy/--tar
#
if ( test `ls -1 ${prefix}/dev | wc -l` -gt 10 ); then
logMessage "Terminating because there appear to be files in /dev already"
exit
fi
#
# Make the device nodes.
#
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV console'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV null'
chroot ${prefix} /bin/sh -c 'cd /dev && ./MAKEDEV zero'
#
# Log our finish
#
logMessage Script $0 finished

37
hooks/common/60-copy-host-files Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# Log our finish
#
logMessage Script $0 finished

49
hooks/common/65-copy-user-files Executable file
View File

@@ -0,0 +1,49 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy everything from the skel directory into the new instance
# if that directory exists.
#
if [ -d /etc/xen-tools/skel ]; then
logMessage Copying files from /etc/xen-tools/skel
(cd /etc/xen-tools/skel; tar -cf - . ) | (cd ${prefix}/; tar -xpf -)
logMessage Finished
else
logMessage skel directory, /etc/xen-tools/skell, not present ignoring.
fi
#
# Log our finish
#
logMessage Script $0 finished

62
hooks/common/75-fixup-securetty Executable file
View File

@@ -0,0 +1,62 @@
#!/bin/sh
#
# This script ensures /etc/securetty upon the new guests has the new
# Xen console devices in it
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMessage /etc/securetty not found.
exit
fi
#
# Do both the devices.
#
for i in xvc0 hvc0 ; do
#
# Only append if not presnt.
#
if ( grep $i ${prefix}/etc/securetty > /dev/null ) ; then
logMessage Host already has $i entry
else
echo $i >> ${prefix}/etc/securetty
fi
done
#
# Log our finish
#
logMessage Script $0 finished.

38
hooks/common/99-clean-image Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/sh
#
# This script cleans the newly created image's apt-get archive.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Clean the APT package cache for Debian GNU/Linux.
#
chroot ${prefix} /usr/bin/apt-get clean
#
# Log our finish
#
logMessage Script $0 finished

45
hooks/common/99-enable-daemons Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/sh
#
# This script removes the file which prevents daemons from running.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Remove the script if present.
#
if [ -x "${prefix}/usr/sbin/policy-rc.d" ]; then
rm -f "${prefix}/usr/sbin/policy-rc.d"
logMessage "Removed: ${prefix}/usr/sbin/policy-rc.d"
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -1,54 +0,0 @@
#!/bin/sh
#
# This script ensures that daemons will not be started inside our
# chroot() installation.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Make sure we have a directory.
#
if [ ! -d "${prefix}/usr/sbin" ]; then
mkdir -p "${prefix}/usr/sbin"
logMessage "created missing directory: ${prefix}/usr/sbin"
fi
#
# Add the script.
#
echo '#!/bin/sh' > ${prefix}/usr/sbin/policy-rc.d
echo 'exit 101' >> ${prefix}/usr/sbin/policy-rc.d
chmod 755 ${prefix}/usr/sbin/policy-rc.d
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/01-disable-daemons

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# This script enforces the use of a shadow password file.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Enable the shadow passwords if the command is found.
#
if [ -x ${prefix}/sbin/shadowconfig ]; then
chroot ${prefix} /sbin/shadowconfig on
else
logMessage "/sbin/shadowconfig not found. skipping."
fi
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/05-shadowconfig-on

View File

@@ -1,38 +0,0 @@
#!/bin/sh
#
# This script disables the hardware clock.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Disable the startup scripts from all runlevels.
#
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/15-disable-hwclock

View File

@@ -1,40 +0,0 @@
#!/bin/sh
#
# This script generates a default en_US.UTF-8 locale.
#
# Ward
# --
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install the English language pack.
#
# NOTE: Failure to support your favourite language is *not* a bug.
#
installDebianPackage ${prefix} language-pack-en
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/25-generate-locale

View File

@@ -1,181 +0,0 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

1
hooks/dapper/35-setup-users Symbolic link
View File

@@ -0,0 +1 @@
../common/35-setup-users

View File

@@ -1,141 +0,0 @@
#!/bin/sh
#
# This script places the new systems hostname into a couple of files within
# the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
#
# Setup the mailname + hostname files.
#
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname
#
# Fixup the /etc/hosts file upon the new image for
# machines with static IPs
#
if [ -z "${copyhosts}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
cat >> ${prefix}/etc/hosts <<EOF
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi
#
# Allow the host system to know the IP address of our new guest.
#
if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN.
else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/50-setup-hostname

View File

@@ -1,37 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/60-copy-host-files

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy everything from the skel directory into the new instance
# if that directory exists.
#
if [ -d /etc/xen-tools/skel ]; then
logMessage Copying files from /etc/xen-tools/skel
(cd /etc/xen-tools/skel; tar -cf - . ) | (cd ${prefix}/; tar -xpf -)
logMessage Finished
else
logMessage skel directory, /etc/xen-tools/skell, not present ignoring.
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/65-copy-user-files

View File

@@ -1,62 +0,0 @@
#!/bin/sh
#
# This script ensures /etc/securetty upon the new guests has the new
# Xen console devices in it
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMessage /etc/securetty not found.
exit
fi
#
# Do both the devices.
#
for i in xvc0 hvc0 ; do
#
# Only append if not presnt.
#
if ( grep $i ${prefix}/etc/securetty > /dev/null ) ; then
logMessage Host already has $i entry
else
echo $i >> ${prefix}/etc/securetty
fi
done
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/75-fixup-securetty

View File

@@ -1,38 +0,0 @@
#!/bin/sh
#
# This script cleans the newly created image's apt-get archive.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Clean the APT package cache for Debian GNU/Linux.
#
chroot ${prefix} /usr/bin/apt-get clean
#
# Log our finish
#
logMessage Script $0 finished

1
hooks/dapper/99-clean-image Symbolic link
View File

@@ -0,0 +1 @@
../common/99-clean-image

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# This script removes the file which prevents daemons from running.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Remove the script if present.
#
if [ -x "${prefix}/usr/sbin/policy-rc.d" ]; then
rm -f "${prefix}/usr/sbin/policy-rc.d"
logMessage "Removed: ${prefix}/usr/sbin/policy-rc.d"
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/99-enable-daemons

View File

@@ -1,54 +0,0 @@
#!/bin/sh
#
# This script ensures that daemons will not be started inside our
# chroot() installation.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Make sure we have a directory.
#
if [ ! -d "${prefix}/usr/sbin" ]; then
mkdir -p "${prefix}/usr/sbin"
logMessage "created missing directory: ${prefix}/usr/sbin"
fi
#
# Add the script.
#
echo '#!/bin/sh' > ${prefix}/usr/sbin/policy-rc.d
echo 'exit 101' >> ${prefix}/usr/sbin/policy-rc.d
chmod 755 ${prefix}/usr/sbin/policy-rc.d
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/01-disable-daemons

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# This script enforces the use of a shadow password file.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Enable the shadow passwords if the command is found.
#
if [ -x ${prefix}/sbin/shadowconfig ]; then
chroot ${prefix} /sbin/shadowconfig on
else
logMessage "/sbin/shadowconfig not found. skipping."
fi
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/05-shadowconfig-on

View File

@@ -1,38 +0,0 @@
#!/bin/sh
#
# This script disables the hardware clock.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Disable the startup scripts from all runlevels.
#
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/15-disable-hwclock

View File

@@ -1,181 +0,0 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

1
hooks/debian/35-setup-users Symbolic link
View File

@@ -0,0 +1 @@
../common/35-setup-users

View File

@@ -1,141 +0,0 @@
#!/bin/sh
#
# This script places the new systems hostname into a couple of files within
# the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
#
# Setup the mailname + hostname files.
#
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname
#
# Fixup the /etc/hosts file upon the new image for
# machines with static IPs
#
if [ -z "${copyhosts}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
cat >> ${prefix}/etc/hosts <<EOF
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi
#
# Allow the host system to know the IP address of our new guest.
#
if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN.
else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/50-setup-hostname

View File

@@ -1,37 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/60-copy-host-files

View File

@@ -1,49 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy everything from the skel directory into the new instance
# if that directory exists.
#
if [ -d /etc/xen-tools/skel ]; then
logMessage Copying files from /etc/xen-tools/skel
(cd /etc/xen-tools/skel; tar -cf - . ) | (cd ${prefix}/; tar -xpf -)
logMessage Finished
else
logMessage skel directory, /etc/xen-tools/skell, not present ignoring.
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/65-copy-user-files

View File

@@ -1,62 +0,0 @@
#!/bin/sh
#
# This script ensures /etc/securetty upon the new guests has the new
# Xen console devices in it
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMessage /etc/securetty not found.
exit
fi
#
# Do both the devices.
#
for i in xvc0 hvc0 ; do
#
# Only append if not presnt.
#
if ( grep $i ${prefix}/etc/securetty > /dev/null ) ; then
logMessage Host already has $i entry
else
echo $i >> ${prefix}/etc/securetty
fi
done
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/75-fixup-securetty

View File

@@ -1,38 +0,0 @@
#!/bin/sh
#
# This script cleans the newly created image's apt-get archive.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Clean the APT package cache for Debian GNU/Linux.
#
chroot ${prefix} /usr/bin/apt-get clean
#
# Log our finish
#
logMessage Script $0 finished

1
hooks/debian/99-clean-image Symbolic link
View File

@@ -0,0 +1 @@
../common/99-clean-image

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# This script removes the file which prevents daemons from running.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Remove the script if present.
#
if [ -x "${prefix}/usr/sbin/policy-rc.d" ]; then
rm -f "${prefix}/usr/sbin/policy-rc.d"
logMessage "Removed: ${prefix}/usr/sbin/policy-rc.d"
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/99-enable-daemons

View File

@@ -1,54 +0,0 @@
#!/bin/sh
#
# This script ensures that daemons will not be started inside our
# chroot() installation.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Make sure we have a directory.
#
if [ ! -d "${prefix}/usr/sbin" ]; then
mkdir -p "${prefix}/usr/sbin"
logMessage "created missing directory: ${prefix}/usr/sbin"
fi
#
# Add the script.
#
echo '#!/bin/sh' > ${prefix}/usr/sbin/policy-rc.d
echo 'exit 101' >> ${prefix}/usr/sbin/policy-rc.d
chmod 755 ${prefix}/usr/sbin/policy-rc.d
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/01-disable-daemons

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# This script enforces the use of a shadow password file.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Enable the shadow passwords if the command is found.
#
if [ -x ${prefix}/sbin/shadowconfig ]; then
chroot ${prefix} /sbin/shadowconfig on
else
logMessage "/sbin/shadowconfig not found. skipping."
fi
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/05-shadowconfig-on

View File

@@ -1,38 +0,0 @@
#!/bin/sh
#
# This script disables the hardware clock.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Disable the startup scripts from all runlevels.
#
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove
#
# Log our finish
#
logMessage Script $0 finished.

View File

@@ -0,0 +1 @@
../common/15-disable-hwclock

View File

@@ -1,90 +0,0 @@
#!/bin/sh
#
# This script sets up the /etc/apt/sources.list for APT.
#
# Steve
# --
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Attempt to auto-magically detect the use of a Proxy for apt-get, and
# replicate that setup in our new guest via apt-config dump and save
# the setting to the proxy guess file.
#
if [ ${apt_proxy} ]; then
echo "Acquire::http::Proxy \"${apt_proxy}\";" > ${prefix}/etc/apt/apt.conf.d/01proxy
else
logMessage The use of a proxy detected.
apt-config dump | grep -i Acquire::HTTP::Proxy > ${prefix}/etc/apt/apt.conf.d/01proxy
fi
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list
#
# /etc/apt/sources.list
#
#
# ${dist}
#
deb ${mirror} ${dist} main restricted universe multiverse
deb-src ${mirror} ${dist} main restricted universe
deb ${mirror} ${dist}-updates main restricted universe multiverse
deb-src ${mirror} ${dist}-updates main restricted universe
deb http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
E_O_APT
#
# Now that the sources have been setup make sure the system is up to date.
#
chroot ${prefix} /usr/bin/apt-get update
#
# Now fixup TLS on non-64bit systems.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
else
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
fi
#
# Log our finish
#
logMessage Script $0 finished

1
hooks/edgy/20-setup-apt Symbolic link
View File

@@ -0,0 +1 @@
../common/20-setup-apt

View File

@@ -1,40 +0,0 @@
#!/bin/sh
#
# This script generates a default en_US.UTF-8 locale.
#
# Ward
# --
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install the English language pack.
#
# NOTE: Failure to support your favourite language is *not* a bug.
#
installDebianPackage ${prefix} language-pack-en
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/25-generate-locale

View File

@@ -1,181 +0,0 @@
#!/usr/bin/perl -w
#
# This script attempts to copy all user accounts from the host to
# the guest. It does this by copying all user accounts which are not
# already present.
#
# NOTE: Unless '--accounts' was specified upon the 'xen-create-image'
# command line we don't do this.
#
# Steve
# --
# http://www.steve.org.uk/
use strict;
use Env;
my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Exit unless the 'accounts' variable is set.
#
exit unless ( $ENV{'accounts'} );
#
# Make sure we have $prefix/etc
#
die "Prefix is missing /etc : $prefix" unless ( -d $prefix . "/etc" );
#
# Read all accounts from the installed /etc/passwd on the guest.
#
my %present;
if ( -e $prefix . "/etc/passwd" )
{
%present = readAccounts( $prefix . "/etc/passwd" );
}
#
# Now read the accounts on the host.
#
my %host = readAccounts( "/etc/passwd" );
#
# For each account not present on new installation then add it
#
foreach my $account ( sort keys( %host ) )
{
if ( ! $present{ $account } )
{
print "Adding: $account\n";
addAccount( $account );
#
# Find any groups the user is member of on the host
# and add them on the guest system
#
addGroups( $account );
}
}
#
# Read the accounts which are already present on the guest image.
#
sub readAccounts
{
my ( $file ) = ( @_ );
my %found;
open( EXISTING, "<", $file );
foreach my $line ( <EXISTING> )
{
#
# Record the userid + username
#
if ( $line =~ /^([^:]+):([^:]+):([^:]+)/ )
{
my $user = $1;
my $pass = $2;
my $uid = $3;
$found{$user} = 1;
}
}
close( EXISTING );
return( %found );
}
#
# Add the passwd + shadow accounts for the given user.
#
sub addAccount
{
my ( $user ) = ( @_ );
#
# passwd file.
#
open( PASSWD, "<", "/etc/passwd" );
foreach my $line ( <PASSWD> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/passwd" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( PASSWD );
#
# shadow file.
#
open( SHADOW, "<", "/etc/shadow" ) or die "Failed to open : $!";
foreach my $line ( <SHADOW> )
{
chomp( $line );
if ( $line =~ /^\Q$user\E:/ )
{
#
# Add the line
#
open( OUTY, ">>", $prefix . "/etc/shadow" );
print OUTY $line . "\n";
close( OUTY );
}
}
close( SHADOW );
}
#
# Find the groups a user is member of on the host, and add them to
# those groups on the new guest.
#
sub addGroups
{
my( $username ) = ( @_ );
#
# Get the groups.
#
my $groups = `groups $username`;
# split off the usernmame.
if ( $groups =~ /^([^:]+):(.*)/ )
{
$groups = $2;
print "User: $username is member of the groups: $groups\n";
}
foreach my $g ( split( / /, $groups ) )
{
# Make sure the group exists.
system( "chroot $prefix /usr/sbin/addgroup $g" );
# add the user to it.
system( "chroot $prefix /usr/sbin/adduser $username $g" );
}
}

1
hooks/edgy/35-setup-users Symbolic link
View File

@@ -0,0 +1 @@
../common/35-setup-users

View File

@@ -1,141 +0,0 @@
#!/bin/sh
#
# This script places the new systems hostname into a couple of files within
# the new image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
#
# Setup the mailname + hostname files.
#
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname
#
# Fixup the /etc/hosts file upon the new image for
# machines with static IPs
#
if [ -z "${copyhosts}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
cat >> ${prefix}/etc/hosts <<EOF
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi
#
# Allow the host system to know the IP address of our new guest.
#
if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN.
else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/50-setup-hostname

View File

@@ -1,37 +0,0 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1 @@
../common/60-copy-host-files

Some files were not shown because too many files have changed in this diff Show More