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:
1
Makefile
1
Makefile
@@ -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
5
NEWS
@@ -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
1
debian/changelog
vendored
@@ -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.
|
||||
|
||||
@@ -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
|
||||
1
hooks/centos-4/10-disable-tls
Symbolic link
1
hooks/centos-4/10-disable-tls
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/10-disable-tls
|
||||
@@ -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
|
||||
|
||||
1
hooks/centos-4/15-setup-arch
Symbolic link
1
hooks/centos-4/15-setup-arch
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/15-disable-hwclock
|
||||
@@ -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/centos-4/35-setup-users
Symbolic link
1
hooks/centos-4/35-setup-users
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/35-setup-users
|
||||
@@ -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
|
||||
1
hooks/centos-4/55-create-dev
Symbolic link
1
hooks/centos-4/55-create-dev
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/55-create-dev
|
||||
@@ -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
|
||||
1
hooks/centos-4/65-copy-user-files
Symbolic link
1
hooks/centos-4/65-copy-user-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/65-copy-user-files
|
||||
@@ -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.
|
||||
|
||||
1
hooks/centos-4/75-fixup-securetty
Symbolic link
1
hooks/centos-4/75-fixup-securetty
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/75-fixup-securetty
|
||||
@@ -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
|
||||
1
hooks/centos-5/10-disable-tls
Symbolic link
1
hooks/centos-5/10-disable-tls
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/10-disable-tls
|
||||
@@ -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
|
||||
|
||||
1
hooks/centos-5/15-setup-arch
Symbolic link
1
hooks/centos-5/15-setup-arch
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/15-disable-hwclock
|
||||
@@ -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/centos-5/35-setup-users
Symbolic link
1
hooks/centos-5/35-setup-users
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/35-setup-users
|
||||
@@ -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
|
||||
1
hooks/centos-5/55-create-dev
Symbolic link
1
hooks/centos-5/55-create-dev
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/55-create-dev
|
||||
@@ -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
|
||||
1
hooks/centos-5/65-copy-user-files
Symbolic link
1
hooks/centos-5/65-copy-user-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/65-copy-user-files
|
||||
@@ -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.
|
||||
|
||||
1
hooks/centos-5/75-fixup-securetty
Symbolic link
1
hooks/centos-5/75-fixup-securetty
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/75-fixup-securetty
|
||||
54
hooks/common/01-disable-daemons
Executable file
54
hooks/common/01-disable-daemons
Executable 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
45
hooks/common/05-shadowconfig-on
Executable 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
49
hooks/common/10-disable-tls
Executable 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
38
hooks/common/15-disable-hwclock
Executable 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
44
hooks/common/15-setup-arch
Executable 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
90
hooks/common/20-setup-apt
Executable 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
40
hooks/common/25-generate-locale
Executable 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
181
hooks/common/35-setup-users
Executable 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
141
hooks/common/50-setup-hostname
Executable 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
53
hooks/common/55-create-dev
Executable 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
37
hooks/common/60-copy-host-files
Executable 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
49
hooks/common/65-copy-user-files
Executable 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
62
hooks/common/75-fixup-securetty
Executable 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
38
hooks/common/99-clean-image
Executable 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
45
hooks/common/99-enable-daemons
Executable 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
|
||||
@@ -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.
|
||||
|
||||
1
hooks/dapper/01-disable-daemons
Symbolic link
1
hooks/dapper/01-disable-daemons
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/01-disable-daemons
|
||||
@@ -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.
|
||||
|
||||
1
hooks/dapper/05-shadowconfig-on
Symbolic link
1
hooks/dapper/05-shadowconfig-on
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/05-shadowconfig-on
|
||||
@@ -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.
|
||||
|
||||
1
hooks/dapper/15-disable-hwclock
Symbolic link
1
hooks/dapper/15-disable-hwclock
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/15-disable-hwclock
|
||||
@@ -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
|
||||
1
hooks/dapper/25-generate-locale
Symbolic link
1
hooks/dapper/25-generate-locale
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/25-generate-locale
|
||||
@@ -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
1
hooks/dapper/35-setup-users
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/35-setup-users
|
||||
@@ -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
|
||||
1
hooks/dapper/50-setup-hostname
Symbolic link
1
hooks/dapper/50-setup-hostname
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/50-setup-hostname
|
||||
@@ -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
|
||||
1
hooks/dapper/60-copy-host-files
Symbolic link
1
hooks/dapper/60-copy-host-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/60-copy-host-files
|
||||
@@ -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
|
||||
1
hooks/dapper/65-copy-user-files
Symbolic link
1
hooks/dapper/65-copy-user-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/65-copy-user-files
|
||||
@@ -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.
|
||||
|
||||
1
hooks/dapper/75-fixup-securetty
Symbolic link
1
hooks/dapper/75-fixup-securetty
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/75-fixup-securetty
|
||||
@@ -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
1
hooks/dapper/99-clean-image
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/99-clean-image
|
||||
@@ -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
|
||||
1
hooks/dapper/99-enable-daemons
Symbolic link
1
hooks/dapper/99-enable-daemons
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/99-enable-daemons
|
||||
@@ -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.
|
||||
|
||||
1
hooks/debian/01-disable-daemons
Symbolic link
1
hooks/debian/01-disable-daemons
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/01-disable-daemons
|
||||
@@ -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.
|
||||
|
||||
1
hooks/debian/05-shadowconfig-on
Symbolic link
1
hooks/debian/05-shadowconfig-on
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/05-shadowconfig-on
|
||||
@@ -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.
|
||||
|
||||
1
hooks/debian/15-disable-hwclock
Symbolic link
1
hooks/debian/15-disable-hwclock
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/15-disable-hwclock
|
||||
@@ -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
1
hooks/debian/35-setup-users
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/35-setup-users
|
||||
@@ -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
|
||||
1
hooks/debian/50-setup-hostname
Symbolic link
1
hooks/debian/50-setup-hostname
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/50-setup-hostname
|
||||
@@ -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
|
||||
1
hooks/debian/60-copy-host-files
Symbolic link
1
hooks/debian/60-copy-host-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/60-copy-host-files
|
||||
@@ -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
|
||||
1
hooks/debian/65-copy-user-files
Symbolic link
1
hooks/debian/65-copy-user-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/65-copy-user-files
|
||||
@@ -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.
|
||||
|
||||
1
hooks/debian/75-fixup-securetty
Symbolic link
1
hooks/debian/75-fixup-securetty
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/75-fixup-securetty
|
||||
@@ -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
1
hooks/debian/99-clean-image
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/99-clean-image
|
||||
@@ -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
|
||||
1
hooks/debian/99-enable-daemons
Symbolic link
1
hooks/debian/99-enable-daemons
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/99-enable-daemons
|
||||
@@ -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.
|
||||
|
||||
1
hooks/edgy/01-disable-daemons
Symbolic link
1
hooks/edgy/01-disable-daemons
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/01-disable-daemons
|
||||
@@ -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.
|
||||
|
||||
1
hooks/edgy/05-shadowconfig-on
Symbolic link
1
hooks/edgy/05-shadowconfig-on
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/05-shadowconfig-on
|
||||
@@ -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.
|
||||
|
||||
1
hooks/edgy/15-disable-hwclock
Symbolic link
1
hooks/edgy/15-disable-hwclock
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/15-disable-hwclock
|
||||
@@ -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
1
hooks/edgy/20-setup-apt
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/20-setup-apt
|
||||
@@ -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
|
||||
1
hooks/edgy/25-generate-locale
Symbolic link
1
hooks/edgy/25-generate-locale
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/25-generate-locale
|
||||
@@ -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
1
hooks/edgy/35-setup-users
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/35-setup-users
|
||||
@@ -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
|
||||
1
hooks/edgy/50-setup-hostname
Symbolic link
1
hooks/edgy/50-setup-hostname
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/50-setup-hostname
|
||||
@@ -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
|
||||
1
hooks/edgy/60-copy-host-files
Symbolic link
1
hooks/edgy/60-copy-host-files
Symbolic link
@@ -0,0 +1 @@
|
||||
../common/60-copy-host-files
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user