1
0
mirror of synced 2026-02-26 00:03:55 +00:00

Compare commits

..

4 Commits

109 changed files with 1869 additions and 2420 deletions

40
.gitignore vendored
View File

@@ -1,31 +1,11 @@
# Note! Please run 'prove t/gitignore.t' after changing .hg
# this file, to check its coherency .hgtags
ChangeLog
# all dotfiles
.*
# but we _wan't_ those dot-files
!.gitignore
!.hgignore
!.mailmap
# ChangeLog is generated during make
/ChangeLog
# those are generated during debian package build
/build-stamp
/configure-stamp
/man
/debian/files
/debian/xen-tools
/debian/xen-tools.debhelper.log
/debian/xen-tools.substvars
# git-generated patches
/*.patch
# some backups
*~ *~
*.orig build-stamp
configure-stamp
# backups created by "make update-version" man
*.bak debian/files
debian/xen-tools
debian/xen-tools.debhelper.log
debian/xen-tools.substvars

2
.hgtags Normal file
View File

@@ -0,0 +1,2 @@
d75c787add2a7ceb19b30b018d4d16b7317c772d release-4.
6a10240d7c66e2f7df56457708efb9287640bcf4 release-4.1

View File

@@ -1,6 +0,0 @@
Axel Beckert <abe@deuxchevaux.org>
Dmitry Nedospasov <dmitry@nedos.net>
Nathan O'Sullivan <nathan@mammoth.com.au>
Radu Spineanu <radu@debian.org> radu <none@none>
Steve Kemp <steve@steve.org.uk> steve <none@none>
Stéphane Jourdois <sjourdois@gmail.com> <stephane@jourdois.fr>

34
.release Normal file
View File

@@ -0,0 +1,34 @@
#
# Configuration file for 'release', a utility to make release more
# easily:
#
# http://release.repository.steve.org.uk/
#
# Steve
# --
#
#
# Command to run
#
preupload="make release"
#
#
# Pattern for our release tarball.
#
pattern=xen-tools-[0-9].[0-9].tar.gz*
#
# Pattern for our GPG-signature.
#
signature=xen-tools-[0-9].[0-9].tar.gz.asc
#
# Upload location.
#
upload=steve@www.xen-tools.org:/home/www/www.xen-tools.org/htdocs/software/xen-tools/

14
AUTHORS
View File

@@ -1,9 +1,10 @@
Primary Authors Primary Authors
--------------- ---------------
Axel Beckert <abe@deuxchevaux.org> Axel Beckert <abe@deuxchevaux.org>
Dmitry Nedospasov <dmitry@nedos.net> Dmitry Nedospasov <dmitry@nedos.net>
Stéphane Jourdois <sjourdois [at] com.gmail>
Steve Kemp <steve [at] uk.org.steve> Steve Kemp <steve [at] uk.org.steve>
@@ -33,9 +34,6 @@ Contributions
Stefan Fritsch <sf [at] de.sfritsch> Stefan Fritsch <sf [at] de.sfritsch>
- Contributed the policy-rc.d fixups for common.sh - Contributed the policy-rc.d fixups for common.sh
Raphaël Halimi <raphael.halimi [at] com.gmail>
- Contribute bashism fix
Sven Hertge <sven [at] de.svenhartge> Sven Hertge <sven [at] de.svenhartge>
- Bugfix for Debian/Gentoo package installation. - Bugfix for Debian/Gentoo package installation.
@@ -52,9 +50,6 @@ Contributions
- Improved binary detection and good suggestions. - Improved binary detection and good suggestions.
- Better portability for non-bash shells. - Better portability for non-bash shells.
Jorge Armando Medina <jmedina [at] com.e-compugraf>
- Fix for backward compatibility with xvc0 serial consoles
Gordon Messmer <gmessmer [at] edu.washington.u> Gordon Messmer <gmessmer [at] edu.washington.u>
- Supplied .spec file for building .rpm packages. - Supplied .spec file for building .rpm packages.
@@ -65,9 +60,6 @@ Contributions
Nathan O'Sullivan <nathan [at] au.com.mammoth> Nathan O'Sullivan <nathan [at] au.com.mammoth>
- New features wrt. options and helper functions - New features wrt. options and helper functions
Guillaume Pernot <gpernot [at] org.praksys>
- Fixed Sarge amd64 special case
Walter Reiner <walter [at] at.wreiner> Walter Reiner <walter [at] at.wreiner>
- Provided --image-dev + --swap-dev patch. - Provided --image-dev + --swap-dev patch.
@@ -82,7 +74,7 @@ Contributions
Radu Spineanu <radu [at] org.debian> Radu Spineanu <radu [at] org.debian>
- Supplied many small tweaks, bugfixes, and suggestions. - Supplied many small tweaks, bugfixes, and suggestions.
- Radu is also one of the former Debian package maintainers. - Radu is also the Debian package maintainer and has CVS commit access.
Henning Sprang <henning_sprang [at] de.gmx> Henning Sprang <henning_sprang [at] de.gmx>
- Many suggestions and useful Debian bug reports. - Many suggestions and useful Debian bug reports.

View File

@@ -1,13 +0,0 @@
KNOWN BUGS in xen-tools
Bugs to fix before a 4.3 release
--------------------------------
* xen-delete-image doesn't remove all logical volumes if --partitions is used.
See the link below for details how to reproduce. Reproducable at
least with --lvm. Thanks to Antoine Benkemoun for reporting.
http://xen-tools.org/pipermail/xen-tools-discuss/2010-May/000757.html
* xen-delete-image ignores extension setting

View File

@@ -14,10 +14,10 @@
# #
TMP ?= /tmp TMP ?= /tmp
DIST_PREFIX = ${TMP} DIST_PREFIX = ${TMP}
VERSION = 4.2.1 VERSION = 4.2rc1
DEBVERSION = $(shell echo $(VERSION)|sed 's/\(rc\|pre\|beta\|alpha\)/~\1/') DEBVERSION = $(shell echo $(VERSION)|sed 's/\(rc\|pre\|beta\|alpha\)/~\1/')
BASE = xen-tools BASE = xen-tools
VCS = $(shell if git ls-files > /dev/null; then echo git; \ VCS = $(shell if git st > /dev/null; then echo git; \
elif hg st > /dev/null; then echo hg; \ elif hg st > /dev/null; then echo hg; \
else echo cannot-determine-used-vcs; fi) else echo cannot-determine-used-vcs; fi)
@@ -53,17 +53,14 @@ changelog:
# Delete all temporary files, recursively. # Delete all temporary files, recursively.
# #
clean: clean:
@find . \ @find . -name '.*~' -exec rm \{\} \;
-path ./.git -prune -o \ @find . -name '.#*' -exec rm \{\} \;
\( \ @find . -name '*~' -exec rm \{\} \;
-name '*~' -o \ @find . -name '*.bak' -exec rm \{\} \;
-name '.#*' -o \ @find . -name '*.tmp' -exec rm \{\} \;
-name '*.bak' -o \ @find . -name 'tags' -exec rm \{\} \;
-name '*.tmp' -o \ @find . -name '*.8.gz' -exec rm \{\} \;
-name 'tags' -o \ @find . -name '*.tdy' -exec rm \{\} \;
-name '*.8.gz' -o \
-name '*.tdy' \
\) -exec rm "{}" +
@if [ -d man ]; then rm -rf man ; fi @if [ -d man ]; then rm -rf man ; fi
@if [ -e build-stamp ]; then rm -f build-stamp ; fi @if [ -e build-stamp ]; then rm -f build-stamp ; fi
@if [ -e configure-stamp ]; then rm -f configure-stamp ; fi @if [ -e configure-stamp ]; then rm -f configure-stamp ; fi
@@ -145,7 +142,6 @@ install-bin:
# #
install-hooks: install-hooks:
for i in roles/* ; do if [ -f $$i ]; then cp $$i ${prefix}/etc/xen-tools/role.d; fi ; done for i in roles/* ; do if [ -f $$i ]; then cp $$i ${prefix}/etc/xen-tools/role.d; fi ; done
for i in ${prefix}/usr/lib/xen-tools/*.d; do if [ -L "$$i" ]; then rm -vf "$$i"; fi; done
mkdir -p ${prefix}/usr/lib/xen-tools/centos-4.d/ mkdir -p ${prefix}/usr/lib/xen-tools/centos-4.d/
mkdir -p ${prefix}/usr/lib/xen-tools/centos-5.d/ mkdir -p ${prefix}/usr/lib/xen-tools/centos-5.d/
mkdir -p ${prefix}/usr/lib/xen-tools/fedora-core-6.d/ mkdir -p ${prefix}/usr/lib/xen-tools/fedora-core-6.d/
@@ -167,7 +163,6 @@ install-hooks:
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d etch.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d etch.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d lenny.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d lenny.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d squeeze.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d squeeze.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d wheezy.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sid.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sid.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d testing.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d testing.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d stable.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d stable.d
@@ -187,7 +182,6 @@ install-hooks:
cp -R hooks/karmic/*-* ${prefix}/usr/lib/xen-tools/karmic.d/ cp -R hooks/karmic/*-* ${prefix}/usr/lib/xen-tools/karmic.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d lucid.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d lucid.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d maverick.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d maverick.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d natty.d
cp hooks/common.sh ${prefix}/usr/lib/xen-tools cp hooks/common.sh ${prefix}/usr/lib/xen-tools
@@ -249,7 +243,7 @@ orig-tar-gz: release
# #
# Run the test suite. # Run the test suite.
# #
test: update-modules test:
prove --shuffle t/ prove --shuffle t/
@@ -311,7 +305,7 @@ update:
# cases to ensure that all required modules are available. # cases to ensure that all required modules are available.
# #
update-modules: update-modules:
@cd t && make modules cd t && make modules
# #
@@ -319,4 +313,4 @@ update-modules:
# at the top of this file. Steve-Specific? # at the top of this file. Steve-Specific?
# #
update-version: update-version:
perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9][^']*';/RELEASE = '${VERSION}';/g" bin/*-*[!~] perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9][^']*';/RELEASE = '${VERSION}';/g" bin/*-*[^~]

71
README
View File

@@ -1,5 +1,3 @@
xen-tools
---------
Homepage: Homepage:
http://www.xen-tools.org/software/xen-tools http://www.xen-tools.org/software/xen-tools
@@ -8,28 +6,32 @@ Git Repository:
http://gitorious.org/xen-tools http://gitorious.org/xen-tools
Mailing Lists: Mailing Lists:
http://www.xen-tools.org/software/xen-tools/lists.html http://xen-tools.org/software/xen-tools/lists.html
About:
Xen-tools contains a collection of Perl scripts for working with Xen
guest images under Linux. xen-tools
---------
The xen-tools package contains a collection of Perl scripts for
working with Xen guest images under Debian GNU/Linux.
Using this software, you can easily create new Xen guests configured Using this software, you can easily create new Xen guests configured
to be accessible over the network via OpenSSH. to be accessible over your local network and complete with an installed
copy of OpenSSH.
xen-tools currently has scripts to install most releases of Debian xen-tools currently has scripts to install most releases of Debian
(starting with 3.1 "Sarge") and Ubuntu (starting with 6.06 LTS (starting with 3.1 "Sarge") and Ubuntu (starting with 6.06 LTS
"Dapper") and some RPM-based distributions. "Dapper") and some RPM-based distributions.
However, currently only Debian and Ubuntu releases are tested and However currently only Debian and Ubuntu releases are tested and
known to work, i.e.: known to work, i.e.:
Debian: Debian:
* Sarge 3.1 (i386 only) * Sarge 3.1 (i386 only)
* Etch 4.0 * Etch 4.0
* Lenny 5.0 * Lenny 5.0
* Squeeze 6.0 * Squeeze 6.0
* Wheezy 7.0 (preliminary support as it's not yet available)
* Sid (works at least at the moment of writing :-) * Sid (works at least at the moment of writing :-)
Ubuntu: Ubuntu:
@@ -41,18 +43,22 @@ About:
* Interpid Ibex 8.10 * Interpid Ibex 8.10
* Jaunty Jackaplope 9.04 * Jaunty Jackaplope 9.04
* Karmic Koala 9.10 * Karmic Koala 9.10
* Lucid Lynx 10.04 * Lucid Lynx 10.04 (see [2])
* Maverick Meerkat 10.10 (works at least at the moment of writing :-) * Maverick Meerkat 10.10 (works at least at the moment of writing :-)
* Natty Narwhal 11.04 (preliminary support as it's not yet available)
[1] There is an issue with debootstrap on hardy not installing ksyslogd [1] There is an issue with debootstrap on hardy not installing ksyslogd
This can be fixed by chrooting into the newly installed system This can be fixed by chrooting into the newly installed system
and removing the startup scripts. See: and removing the startup scripts. See:
http://www.linux-vserver.org/Installing_Ubuntu_8.04_Hardy_as_guest http://www.linux-vserver.org/Installing_Ubuntu_8.04_Hardy_as_guest
Xen-Tools are available prepackaged in Debian and as source tar-ball [2] As of writing this 24.04.10, there is an issue with tar on
for local installation. Installing from source should work flawlessly Lucid with kernels < 2.6.22 this should however be patched right
on most Linux systems that meet the installation requirements. after release. See:
https://bugs.launchpad.net/ubuntu/+source/tar/+bug/539814
Older versions of ubuntu may work, however you will have to have to find
a mirror that still hosts them. Currently the oldest Ubuntu Distribution
on Canonical's archive.ubuntu.com is Hardy Heron.
Requirements Requirements
------------ ------------
@@ -68,31 +74,24 @@ Requirements
* Make, if you are not installing through a package manager * Make, if you are not installing through a package manager
You can try to install RPM-based distributions such as CentOS, or You can try to install RPM-based distributions such as CentOS, or
Fedora Core, but you will need a correctly installed and configured Fedora Core you will need a correctly installed and configured
"rinse" package. This is currently not supported. "rinse" package. This is currently not supported.
If you wish to create new Xen instances which may be controlled by If you wish to create new Xen instances which may be controlled by
users via a login shell you can have a look at the (currently users via a login shell you should also install the xen-shell package
unmaintained) xen-shell package which is available from: which is available from:
http://xen-tools.org/software/xen-shell/ http://xen-tools.org/software/xen-shell/
Installation
------------
As root or with sudo, execute "make install".
See debian/README.source how to build the Debian package from a
checked out copy of the git repository (i.e. without a source tar
ball).
The Scripts The Scripts
----------- -----------
Here is a brief description of each included script, for more There now follows a brief description of each included script,
thorough documentation please consult the appropriate man page. for more thorough documentation please consult the appropriate
manpage.
xen-create-image xen-create-image
@@ -101,6 +100,10 @@ xen-create-image
This script is designed to create new images which may be used This script is designed to create new images which may be used
with the Xen hypervisor. with the Xen hypervisor.
The virtual images will have their networking settings created and,
you may optionally cause the new instance to boot once it has
been created.
This script performs the initial setup, then delegates the real This script performs the initial setup, then delegates the real
work to a collection of helper scripts: work to a collection of helper scripts:
@@ -115,11 +118,6 @@ xen-create-image
Create a configuration file in /etc/xen such that Xen can Create a configuration file in /etc/xen such that Xen can
boot the newly created machine. boot the newly created machine.
* xt-guess-suite-and-mirror
In case of a Debian or Ubuntu Dom0, this script tries to guess
the most suitable suite and mirror for DomUs based on the Dom0's
/etc/apt/sources.list.
xen-create-nfs xen-create-nfs
-------------- --------------
@@ -161,5 +159,6 @@ xen-update-image
a Debian-derived distribution. a Debian-derived distribution.
-- Steve
The Xen-Tools Developer Team --

120
TODO
View File

@@ -1,32 +1,67 @@
TODO TODO
==== ====
See KNOWN_BUGS for real bugs. Bugs to fix and Features to add before a 4.2 release
----------------------------------------------------
Bugs to fix and features to add for 5.0
---------------------------------------
* xen-create-image man page overhaul: * xen-create-image man page overhaul:
- ambiguous option list with regards to parameters - ambiguous option list with regards to parameters
- Set Fail in more situations where the script has clearly failed
i.e.: lvm exists * Interactive Password Handling (maybe also the passwd role)
Shouldn't give up after only one password missmatch. This is just
a mater of wrapping the passwd call in a loop.
* Fix 70-install-ssh
Currently 70-install-ssh fails to finish installing the ssh-server
because it does not have a random seed to generate the host keys.
Mounting /proc and /dev in chroot prior to calling the install
function should fix this. If ssh-server is successfully installed
in the domU, it's key fingerprint should be echo'd in a way that
can easily be grep'ed into other scripts.
* Test and support more file system types. * Test and support more file system types.
Actually this should be pretty simple now that the parameters are Actually this should be pretty simple now that the parameters are
stored in the configuration hash. stored in the configuration hash. The only issue is that trailing
whitespace is missing from the "make_fs_foo" option.
* xen-delete-image doesn't remove all logical volumes if --partitions is used.
See the link below for details how to reproduce. Reproducable at
least with --lvm. Thanks to Antoine Benkemoun for reporting.
http://xen-tools.org/pipermail/xen-tools-discuss/2010-May/000757.html
* xen-delete-image ignores extension setting
* xen-create-image should check all integer options on non-digits.
* Test suite should pass
Currently failing:
t/getopt.t
t/xen-delete-image.t
t/xen-tools.t
t/xt-create-xen-config.t
* Clean up setup-hostname - copying /etc/hosts isn't reliable
One could argue that that this gives "extra" information to the domU, since
the /etc/hosts file may contain more than just hosts on the same subnet.
This should atleast be disabled via a flag.
* Setup locales in the hooks? * Setup locales in the hooks?
Currently no locales are set and this causes several domU errors Currently no locales are set and this causes several domU errors which appear
which appear in the domU's logs. in the domU's logs.
* Documentation overhaul Maybe for a 4.3 or 5.0 release
------------------------------
Better explain what roles /should be/ used for, and that roles
are examples, and shouldn't cover every single scenario. They
are also easy to write.
* xen-create-image --dist=... / sources.list generation should be more fine-grained * xen-create-image --dist=... / sources.list generation should be more fine-grained
@@ -60,22 +95,24 @@ Bugs to fix and features to add for 5.0
* Clean up mounts on Ctrl-C, causes error while installing otherwise: * Clean up mounts on Ctrl-C, causes error while installing otherwise:
Removing /dev/vg0/acromantula-domu1-disk - since we're forcing the Removing /dev/vg0/acromantula-domu1-disk - since we're forcing the install
install Can't remove open logical volume "acromantula-domu1-disk" Can't remove open logical volume "acromantula-domu1-disk" this should be a
this should be a matter of unmounting the mounted volume from /tmp. matter of unmounting the mounted volume from /tmp.
* Non-Interactive Password Handling
Option to generate passwords (check pwgen, apg, makepasswd, and
gpw which of them are best suited for generating complete
/etc/passwd and /etc/shadow lines). The password should be echo'ed
after installation in a way that can be easily grep'ed into other
scripts.
* Generic grub support * Generic grub support
This will generate a much nicer menu.lst as a side effect, as its This will generate a much nicer menu.lst as a side effect, as its currently
currently generated once at install, and is never updated. Installing generated once at install, and is never updated. Installing a full grub into
a full grub into the domU should update the menu.lst every time a the domU should update the menu.lst every time a new kernel is installed and
new kernel is installed and will also use the domU distro's menu.lst will also use the domU distro's menu.lst conform.
conform.
* pv-grub support
This is a ways away and will probably start with a xen-pv-grub
package.
* Move the hooks directory to /etc/xen-tools/ to officially allow * Move the hooks directory to /etc/xen-tools/ to officially allow
added and modified hooks. added and modified hooks.
@@ -103,7 +140,7 @@ Bugs to fix and features to add for 5.0
To specify a directory of public keys, parsing the hostnames To specify a directory of public keys, parsing the hostnames
parsing the usernames from the ssh comment line parsing the usernames from the ssh comment line
* More generic roles * More generic hooks
Deploy a web server or setup ssmtp directly via flag when setting up Deploy a web server or setup ssmtp directly via flag when setting up
the machine. Open to suggestions, should just be some general use-cases the machine. Open to suggestions, should just be some general use-cases
@@ -116,33 +153,6 @@ Bugs to fix and features to add for 5.0
"type" of configuration you want, and a set of options specific to "type" of configuration you want, and a set of options specific to
that flag could be parsed from xen-tools.conf that flag could be parsed from xen-tools.conf
* Refactor the code for less code duplication
Like e.g. readConfigurationFile in xen-create-image and
xen-resize-image which are not completely identical.
* Refactor the code for less variants of calling cp, rm, mv, etc.
E.g. always use either cp() from File::Copy or /bin/cp, but not
both. To allow verbose copying, I (Axel) would prefer /bin/cp over
cp();
* Parse numerical parameters transparently for the user
The user shouldn't have to know weather he should specify size
as <size>G or <size>Gb or <size>. This should be parsed without
user interaction and rely on a common format.
* xen-update-image should mount /dev/pts before running apt-get
* xen-update-image should have options for using ...
... aptitude instead of apt-get
... dist-upgrade instead of upgrade
* Use Perl::Critic
Stuff from Steve's TODO list / Generic TODOs Stuff from Steve's TODO list / Generic TODOs
-------------------------------------------- --------------------------------------------

File diff suppressed because it is too large Load Diff

View File

@@ -19,9 +19,8 @@ xen-create-nfs - Create a Xen configuration file for an NFS-root guest.
--dhcp Configure the guest to use DHCP for IP allocation. --dhcp Configure the guest to use DHCP for IP allocation.
--gateway The gateway address to use when configured with a static IP. --gateway The gateway address to use when configured with a static IP.
--hostname The hostname to configure for the guest. --hostname The hostname to configure for the guest.
--ip The IP address to use when configured with a static IP.
--netmask The netmask to use when configured with a static IP. --netmask The netmask to use when configured with a static IP.
--nameserver The nameserver to use when configured with a static IP. --ip The IP address to use when configured with a static IP.
General options: General options:
--admins Specify which users should be setup as xen-shell admins. --admins Specify which users should be setup as xen-shell admins.
@@ -84,18 +83,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -131,7 +130,7 @@ $CONFIG{ 'template' } = '/etc/xen-tools/xm-nfs.tmpl';
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
# store version number away. # store version number away.
@@ -289,15 +288,14 @@ sub parseCommandLineArguments
GetOptions( GetOptions(
# Networking options # Networking options
"dhcp", \$CONFIG{ 'dhcp' }, "dhcp", \$CONFIG{ 'dhcp' },
"gateway=s", \$CONFIG{ 'gateway' }, "gateway=s", \$CONFIG{ 'gateway' },
"broadcast=s", \$CONFIG{ 'broadcast' }, "broadcast=s", \$CONFIG{ 'broadcast' },
"ip=s", \$CONFIG{ 'ip' }, "ip=s", \$CONFIG{ 'ip' },
"netmask=s", \$CONFIG{ 'netmask' }, "netmask=s", \$CONFIG{ 'netmask' },
"nameserver=s", \$CONFIG{ 'nameserver' }, "hostname=s", \$CONFIG{ 'hostname' },
"hostname=s", \$CONFIG{ 'hostname' }, "memory=s", \$CONFIG{ 'memory' },
"memory=s", \$CONFIG{ 'memory' }, "mac=s", \$CONFIG{ 'mac' },
"mac=s", \$CONFIG{ 'mac' },
# NFS options. # NFS options.
"nfs_server=s", \$CONFIG{ 'nfs_server' }, "nfs_server=s", \$CONFIG{ 'nfs_server' },

View File

@@ -16,8 +16,8 @@ xen-delete-image - Delete previously created Xen instances.
General options: General options:
--dir Specify the output directory where images were previously saved. --dir Specify the output directory where images were previously saved.
--evms Specify the EVMS container to use.
--lvm Specify the LVM volume to use. --lvm Specify the LVM volume to use.
--evms Specify the EVMS container to use.
Specifying hosts: Specifying hosts:
--hostname Specify the image name to delete. --hostname Specify the image name to delete.
@@ -51,7 +51,7 @@ Specify the LVM volume group where images were previously saved.
Read the manual for this script. Read the manual for this script.
=item B<--test> =item B<--test>
Do not complain, or exit, if the script is not executed by the root user. Don not complain, or exit, if the script is not executed by the root user.
=item B<--version> =item B<--version>
Show the version number and exit. Show the version number and exit.
@@ -130,19 +130,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Stéphane Jourdois http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -157,7 +156,6 @@ use strict;
use English; use English;
use Getopt::Long; use Getopt::Long;
use Pod::Usage; use Pod::Usage;
use File::Path;
# #
@@ -171,7 +169,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
@@ -414,7 +412,7 @@ sub checkArguments
# #
if ( $count != 1 ) if ( $count != 1 )
{ {
print "Please select one and only one of the installation methods to delete the DomU:\n"; print "Please select one and only one of the installation methods:\n";
print " --dir\n"; print " --dir\n";
print " --evms\n"; print " --evms\n";
print " --lvm\n"; print " --lvm\n";
@@ -519,7 +517,7 @@ sub deleteXenImage
print "Would delete: $prefix$hostname\n"; print "Would delete: $prefix$hostname\n";
} else { } else {
print "Removing: " . $prefix . $hostname . "\n"; print "Removing: " . $prefix . $hostname . "\n";
rmtree( $prefix . $hostname ); rmdir( $prefix . $hostname );
} }
} }
} }

View File

@@ -58,17 +58,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -101,7 +102,7 @@ $CONFIG{ 'prefix' } = "/etc/xen";
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
@@ -238,9 +239,7 @@ sub parseCommandLineArguments
# Parse options. # Parse options.
# #
GetOptions( "test=s", \$CONFIG{ 'prefix' }, GetOptions( "test=s", \$CONFIG{ 'prefix' },
"help", \$HELP, "help", \$HELP, "manual", \$MANUAL, "version", \$VERSION );
"manual", \$MANUAL,
"version", \$VERSION );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;

View File

@@ -76,18 +76,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -116,7 +116,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
@@ -301,9 +301,6 @@ sub readConfigurationFile
{ {
my ($file) = (@_); my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( !-e $file );
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!"; open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = ""; my $line = "";

View File

@@ -80,18 +80,19 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/
Axel Beckert, http://noone.org/abe/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -104,7 +105,6 @@ The LICENSE file contains the full text of the license.
use strict; use strict;
use English; use English;
use File::Temp qw/ tempdir /; use File::Temp qw/ tempdir /;
use File::Copy qw/ mv cp /;
use Getopt::Long; use Getopt::Long;
use Pod::Usage; use Pod::Usage;
@@ -120,7 +120,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
# #
@@ -287,11 +287,6 @@ sub updateXenImage
if ( ( -e $tmp . "/usr/bin/apt-get" ) && if ( ( -e $tmp . "/usr/bin/apt-get" ) &&
( -x $tmp . "/usr/bin/apt-get" ) ) ( -x $tmp . "/usr/bin/apt-get" ) )
{ {
#
# Copy dom0's resolv.conf to domU
#
mv("$tmp/etc/resolv.conf", "$tmp/etc/resolv.conf.old") if -f "$tmp/etc/resolv.conf";
cp("/etc/resolv.conf", "$tmp/etc/resolv.conf");
# #
# Now run the update command. # Now run the update command.
@@ -305,15 +300,6 @@ sub updateXenImage
system( system(
"DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes" "DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes"
); );
#
# Restore domU's resolv.conf if needed
#
if (-f "$tmp/etc/resolv.conf") {
mv("$tmp/etc/resolv.conf.old", "$tmp/etc/resolv.conf");
} else {
unlink "$tmp/etc/resolv.conf";
}
} }
else else
{ {
@@ -451,12 +437,10 @@ sub parseCommandLineArguments
# Parse options. # Parse options.
# #
GetOptions( "dir=s", \$CONFIG{ 'dir' }, GetOptions( "dir=s", \$CONFIG{ 'dir' }, "lvm=s", \$CONFIG{ 'lvm' },
"lvm=s", \$CONFIG{ 'lvm' }, "evms=s", \$CONFIG{ 'evms' }, "help", \$HELP,
"evms=s", \$CONFIG{ 'evms' }, "manual", \$MANUAL, "version", \$VERSION
"help", \$HELP, );
"manual", \$MANUAL,
"version", \$VERSION );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;

View File

@@ -104,18 +104,19 @@ xt-create-config - Create a Xen configuration file for a new guest
=cut =cut
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/ =head1 AUTHOR
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois Steve
--
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -150,13 +151,12 @@ my @PARTITIONS = undef;
# Default options # Default options
# #
$CONFIG{ 'template' } = '/etc/xen-tools/xm.tmpl'; $CONFIG{ 'template' } = '/etc/xen-tools/xm.tmpl';
$CONFIG{ 'extension' } = '.cfg';
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
@@ -305,7 +305,6 @@ sub importPartitionsFromEnvironment
{ {
@PARTITIONS = (); @PARTITIONS = ();
return unless exists $ENV{ 'NUMPARTITIONS' };
for ( my $i = 1 ; $i <= $ENV{ 'NUMPARTITIONS' } ; $i++ ) for ( my $i = 1 ; $i <= $ENV{ 'NUMPARTITIONS' } ; $i++ )
{ {
my @parts = split( /:/, $ENV{ 'PARTITION' . $i }, 7 ); my @parts = split( /:/, $ENV{ 'PARTITION' . $i }, 7 );
@@ -334,11 +333,12 @@ sub importPartitionsFromEnvironment
sub createXenConfig sub createXenConfig
{ {
# #
# The output file we're going to process. # The output file we're going to process.
# #
my $file = my $file =
$CONFIG{ 'output' } . '/' . $ENV{ 'hostname' } . $CONFIG{ 'extension' }; $CONFIG{ 'output' } . '/' . $ENV{ 'hostname' } . $ENV{ 'extension' };
# #
# The template we're going to read from. # The template we're going to read from.

View File

@@ -60,19 +60,18 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Stéphane Jourdois http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -98,7 +97,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
@@ -227,12 +226,12 @@ sub checkArguments
{ {
print <<E_OR; print <<E_OR;
We\'re trying to configure an installation of $CONFIG{'dist'} in We're trying to configure an installation of $CONFIG{'dist'} in
$CONFIG{'location'} - but there is no hook directory for us to use. $CONFIG{'location'} - but there is no hook directory for us to use.
This means we don\'t know how to configure this installation. This means we don't know how to configure this installation.
We\'d expect the hook directory to be : $dir We'd expect the hook directory to be : $dir
Aborting. Aborting.
E_OR E_OR
@@ -323,9 +322,9 @@ sub runDistributionHooks
print "--\n"; print "--\n";
my $rc = system($cmd); my $rc = system($cmd);
if ($rc != 0) { if ($rc != 0) {
print "hook $name failed: $?\n"; print "hook $name failed: $?\n";
exit 1; exit 1;
} }
print "--\n"; print "--\n";
print "Done\n\n"; print "Done\n\n";
} }
@@ -334,9 +333,9 @@ sub runDistributionHooks
print "Running hook $name\n"; print "Running hook $name\n";
my $rc = system($cmd); my $rc = system($cmd);
if ($rc != 0) { if ($rc != 0) {
print "hook $name failed: $?\n"; print "hook $name failed: $?\n";
exit 1; exit 1;
} }
print "hook $name: done.\n"; print "hook $name: done.\n";
} }
} }

View File

@@ -2,45 +2,39 @@
=head1 NAME =head1 NAME
xt-guess-suite-and-mirror - Tries to guess the most suitable suite and xen-guess-debian-mirror - Tries to guess the most suitable mirror and
mirror for DomUs on Debian and Ubuntu Dom0s. suite for DomUs on Debian and Ubuntu Dom0s.
=cut =cut
=head1 SYNOPSIS =head1 SYNOPSIS
--suite Show suite xen-guess-debian-mirror [-s] [-m]
--mirror Show mirror
-s show suite
-m show mirror
Shows both if no parameter is given. Shows both if no parameter is given.
Help Options:
--help Show the help information for this script.
--manual Show the manual for this script.
--version Show the version number and exit.
=cut =cut
=head1 DESCRIPTION =head1 DESCRIPTION
xt-guess-suite-and-mirror tries to find the mirror and suite the Xen xen-guess-debian-mirror tries to find the mirror and suite the Xen
Dom0 is currently using and returns them in a way suitable for Dom0 is currently using and returns them in a way suitable for
xen-create-image(1) or the backticks feature in xen-tools.conf. xen-create-image(1) or the backticks feature in xen-tools.conf.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Axel Beckert, http://noone.org/abe/ Axel Beckert <abe@deuxchevaux.org>, http://noone.org/abe/
Stéphane Jourdois
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (C) 2010 by The Xen-Tools Development Team. All rights Copyright (C) 2010 by Steve Kemp. All rights reserved.
reserved.
This module is free software; you can redistribute it and/or modify it This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself. The LICENSE file contains the under the same terms as Perl itself. The LICENSE file contains the
@@ -55,9 +49,8 @@ full text of the license.
# Fallback to Debian or Ubuntu in case we can't find anything # Fallback to Debian or Ubuntu in case we can't find anything
my $fallback = 'Debian'; my $fallback = 'Debian';
# Which mirrors to use if everything else fails (cdn.debian.net uses # Which mirrors to use if everything else fails
# GeoIP, see http://wiki.debian.org/DebianGeoMirror) my %fallback_mirror = ( Debian => 'http://ftp.debian.org/debian/',
my %fallback_mirror = ( Debian => 'http://cdn.debian.net/debian/',
Ubuntu => 'http://archive.ubuntu.com/ubuntu/' ); Ubuntu => 'http://archive.ubuntu.com/ubuntu/' );
# Which suite to use if everything else fails. For Debian "stable" # Which suite to use if everything else fails. For Debian "stable"
@@ -80,7 +73,7 @@ use strict;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
# Init # Init
my $mirror = ''; my $mirror = '';
@@ -92,20 +85,21 @@ my $want_mirror = 0;
my $want_suite = 0; my $want_suite = 0;
my $want_version = 0; my $want_version = 0;
my $want_help = 0; my $want_help = 0;
my $want_manual = 0; my $want_usage = 0;
my $result = GetOptions( 'mirror|m' => \$want_mirror, my $result = GetOptions ('mirror' => \$want_mirror,
'suite|s' => \$want_suite, 'suite' => \$want_suite,
'version' => \$want_version, 'version' => \$want_version,
'manual' => \$want_manual, 'usage' => \$want_usage,
'help' => \$want_help ); 'help' => \$want_help);
if ($want_help) { if ($want_help) {
pod2usage(0); print "Usage: $0 [-m] [-s]\n";
exit 0;
} }
if ($want_manual) { if ($want_usage) {
pod2usage( -verbose => 2 ); pod2usage(0);
} }
if (-r $sources_list_file) { if (-r $sources_list_file) {

View File

@@ -80,19 +80,18 @@ Untar a .tar file into the new installation location. This tarfile is assumed t
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Dmitry Nedospasov, http://nedos.net/ http://www.steve.org.uk/
Stéphane Jourdois
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -117,7 +116,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1'; my $RELEASE = '4.2rc1';
# #
@@ -246,6 +245,17 @@ if ( defined( $CONFIG{ 'install-method' } ) &&
exit 1; exit 1;
} }
# Do we need an URL specified as the installation source?
if ( ( $installer->{ 'needURL' } ) &&
( !$CONFIG{ 'install-source' } ||
( $CONFIG{ 'install-source' } !~ /^http/i ) ) )
{
print "Please specify the image server URL with --install-source\n";
exit 1;
}
# #
# Now we can call the appropriate handler. # Now we can call the appropriate handler.
# #
@@ -256,9 +266,16 @@ if ( defined( $CONFIG{ 'install-method' } ) &&
# #
# Test that we have some "standard" files present. # Test that we have some "standard" files present.
# #
foreach my $file (qw( /bin/ls /bin/cp ))
checkForCommonFilesInChroot($CONFIG{ 'location' }, {
"installed system"); if ( !-x $CONFIG{ 'location' } . $file )
{
print "The installation of the new system has failed.\n";
print "\n";
print "The system is missing the common file: $file\n";
exit 1;
}
}
# #
# All done. # All done.
@@ -392,7 +409,6 @@ sub parseCommandLineArguments
# Misc # Misc
"arch=s", \$CONFIG{ 'arch' }, "arch=s", \$CONFIG{ 'arch' },
"cache=s", \$CONFIG{ 'cache' }, "cache=s", \$CONFIG{ 'cache' },
"cachedir=s", \$CONFIG{ 'cachedir' },
"config=s", \$CONFIG{ 'config' }, "config=s", \$CONFIG{ 'config' },
"mirror=s", \$CONFIG{ 'mirror' }, "mirror=s", \$CONFIG{ 'mirror' },
@@ -527,30 +543,6 @@ EOF
=begin doc
Check if there are some common files in some chroot
=end doc
=cut
sub checkForCommonFilesInChroot {
my ($chroot, $what) = @_;
foreach my $file (qw( /bin/ls /bin/cp ))
{
if ( !-x $chroot.$file )
{
print STDERR <<EOT;
WARNING ($0): The $what at $chroot doesn\'t seem to be a full system.
WARNING ($0): The $what is missing the common file: $file.
EOT
}
}
}
=begin doc =begin doc
A utility method to run a system command. We will capture the return A utility method to run a system command. We will capture the return
@@ -658,12 +650,6 @@ sub copyDebFiles
sub do_copy sub do_copy
{ {
#
# Check if the copy source has at least some "standard" files present.
#
checkForCommonFilesInChroot($CONFIG{ 'install-source' },
"installation source");
# #
# Find the copy command to run from the configuration file. # Find the copy command to run from the configuration file.
# #
@@ -704,18 +690,17 @@ sub do_debootstrap
# to use cdebootstrap. # to use cdebootstrap.
# #
my $cmd = $CONFIG{ 'debootstrap-cmd' }; my $cmd = $CONFIG{ 'debootstrap-cmd' };
my $cachedir = $CONFIG{ 'cachedir' };
if ( !$cmd ) if ( !$cmd )
{ {
if (-x '/usr/sbin/debootstrap') { if (-x '/usr/sbin/debootstrap') {
$cmd = '/usr/sbin/debootstrap'; $cmd = '/usr/sbin/debootstrap';
} elsif (-x '/usr/sbin/cdebootstrap') { } elsif (-x '/usr/sbin/cdebootstrap') {
$cmd = '/usr/sbin/cdebootstrap'; $cmd = '/usr/sbin/cdebootstrap';
} else { } else {
print STDERR "Found neither debootstrap nor cdebootstrap and no --debootstrap-cmd given\n"; print STDERR "Found neither debootstrap nor cdebootstrap and no --debootstrap-cmd given\n";
exit 1; exit 1;
} }
print "Using $cmd as debootstrap command\n"; print "Using $cmd as debootstrap command\n";
} }
@@ -726,16 +711,8 @@ sub do_debootstrap
if ( $CONFIG{ 'cache' } eq "yes" ) if ( $CONFIG{ 'cache' } eq "yes" )
{ {
print "\nCopying files from host to image.\n"; print "\nCopying files from host to image.\n";
unless( -d $cachedir ) {
my $xtcache = '/var/cache/xen-tools/archives/';
print("$cachedir not found, defaulting to $xtcache\n");
unless ( -d $xtcache ) {
system "mkdir -p $xtcache";
}
$cachedir = $xtcache;
}
runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives"); runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives");
copyDebFiles( "$cachedir", copyDebFiles( "/var/cache/apt/archives",
"$CONFIG{'location'}/var/cache/apt/archives" ); "$CONFIG{'location'}/var/cache/apt/archives" );
print("Done\n"); print("Done\n");
} }
@@ -778,7 +755,7 @@ sub do_debootstrap
{ {
print "\nCopying files from new installation to host.\n"; print "\nCopying files from new installation to host.\n";
copyDebFiles( "$CONFIG{'location'}/var/cache/apt/archives", copyDebFiles( "$CONFIG{'location'}/var/cache/apt/archives",
"$cachedir" ); "/var/cache/apt/archives" );
print("Done\n"); print("Done\n");
} }

11
debian/NEWS vendored
View File

@@ -1,14 +1,5 @@
xen-tools (4.2~rc1-1) unstable; urgency=low xen-tools (4.2~rc1-1) unstable; urgency=low
By default, xen-create-image now generates a random root password and
displays it as plain text at the end of the DomU generation process.
Use --genpass=0 and --passwd=1 to interactively set a root password
without the password being displayed.
-- Axel Beckert <abe@debian.org> Tue, 03 Aug 2010 16:14:42 +0200
xen-tools (4.2~beta1-1) unstable; urgency=low
If the DomU hangs with "Waiting for root file system" despite If the DomU hangs with "Waiting for root file system" despite
/dev/xvd* is used as disk device, adding "xen-blkfront" to /dev/xvd* is used as disk device, adding "xen-blkfront" to
/etc/initramfs-tools/modules and runing "update-initramfs -u" /etc/initramfs-tools/modules and runing "update-initramfs -u"
@@ -23,5 +14,5 @@ xen-tools (4.2~beta1-1) unstable; urgency=low
/etc/apt/sources.list (if it exists) and taking the first entry with /etc/apt/sources.list (if it exists) and taking the first entry with
path ending in /debian/ there. path ending in /debian/ there.
-- Axel Beckert <abe@debian.org> Sun, 30 May 2010 22:36:16 +0200 -- Axel Beckert <abe@debian.org> Sat, 15 May 2010 18:04:14 +0200

View File

@@ -9,7 +9,6 @@ $ cd xen-tools
If you just want to build the binary package, run If you just want to build the binary package, run
$ make changelog
$ dpkg-buildpackage -uc -us -b $ dpkg-buildpackage -uc -us -b
If you want to build source and binary packages, e.g. for an upload to If you want to build source and binary packages, e.g. for an upload to
@@ -19,4 +18,4 @@ $ make orig-tar-gz
$ dpkg-buildpackage $ dpkg-buildpackage
-- Axel Beckert <abe@debian.org>, Mon, 13 Sep 2010 14:30:05 +0200 -- Axel Beckert <abe@debian.org>, Mon, 17 May 2010 13:31:31 +0200

69
debian/changelog vendored
View File

@@ -1,70 +1,8 @@
xen-tools (4.2.1-1) unstable; urgency=low xen-tools (4.2~rc1-1) UNRELEASED; urgency=low
* New upstream release
- Fixes bashism in "editor" roles script. Thanks Raphaël Halimi for
the patch! (Closes: #605203)
- Fixes missing architecture check in Sarge amd64 special case. Thanks
to Guillaume Pernot! (Closes: #611397) Also changes default Sarge
amd64 mirror to http://archive.debian.org/debian-amd64/.
- Allows --ip=auto again (Closes: #611407)
- Unmounts /proc and /dev/pts of the freshly installed DomU just
before unmounting the disk image. (Closes: #588783)
-- Axel Beckert <abe@debian.org> Thu, 17 Mar 2011 01:00:47 +0100
xen-tools (4.2-1) unstable; urgency=low
* New upstream release
- Fixes several cases of broken or incomplete config files with
unexpected or seldom parameter combinations. (Closes: #484652)
- Updates examples in /etc/xen-tools.conf to better reflect current
state
- Allows usage of xvc* as serial console as used as default by older
Xen versions.
- Preliminary support for Ubuntu 11.04 (Natty) and Debian 7.0 (Wheezy)
(Closes: #597521)
- Switches default mirror for EoL'ed Ubuntu 8.10 (Intrepid) and Debian
4.0 (Etch) to the distributions' archives for old releases.
* Does no more try extract the upstream changelog during debian package
build. The commit which introduced this problem has been reverted.
Document more clearly in debian/README.source how to build the package
from a checked out copy of the git repository, especially that the
upstream changelog has to be generated first out of the VCS log.
(Closes: #595883)
* Update debian/copyright: Add Stéphane Jourdois to list of authors.
-- Axel Beckert <abe@debian.org> Tue, 05 Oct 2010 19:01:49 +0200
xen-tools (4.2~rc1-1) unstable; urgency=low
[Axel Beckert]
* New upstream release candidate
- Uses GeoIP for Debian mirrors: Default Debian mirror is now
cdn.debian.net, see http://wiki.debian.org/DebianGeoMirror for
details.
- Uses the same 15-disable-hwclock hook for Debian as for Ubuntu DomUs
(Closes: #588880)
- Mounts not only /proc but also /dev/pts automatically before running
any customisation hooks (Closes: #588783)
- Uses apt-config to parse Dom0's apt.conf. (Closes: #560011)
- Fixes wrong loop module parameter syntax in warning. Thanks to
Daniel Baumann for spotting this. (Closes: #516902)
- With --verbose, the output of commands called by xen-tools
(e.g. debootstrap) is not only logged, but also printed to
STDOUT. (Closes: #513126)
- Adds btrfs support.
* Bump Standards-Version to 3.9.1 (no changes)
[Stéphane Jourdois]
* [debian/control] Suggest btrfs-tools
-- Axel Beckert <abe@debian.org> Sun, 15 Aug 2010 19:34:38 +0200
xen-tools (4.2~beta1-1) unstable; urgency=low
* New maintainer and upstream authors * New maintainer and upstream authors
* Reintroduction into Debian Unstable (Closes: #566714) * Reintroduction into Debian Unstable (Closes: #566714)
* New upstream beta version * New upstream release candidate
- Needs dependency on libfile-slurp-perl - Needs dependency on libfile-slurp-perl
- Supports for more recent versions of Fedora, Ubuntu and Debian - Supports for more recent versions of Fedora, Ubuntu and Debian
(Closes: #499477) (Closes: #499477)
@@ -103,7 +41,6 @@ xen-tools (4.2~beta1-1) unstable; urgency=low
- Checks for debootstrap and cdebootstrap, uses debootstrap if both - Checks for debootstrap and cdebootstrap, uses debootstrap if both
are installed (Changed "Depends: debootstrap" to "Depends: are installed (Changed "Depends: debootstrap" to "Depends:
debootstrap | cdebootstrap" in debian/control) debootstrap | cdebootstrap" in debian/control)
- Added new files TODO and KNOWN_BUGS to debian/docs.
* Removal of /etc/bash_completion.d/xm from the package since * Removal of /etc/bash_completion.d/xm from the package since
bash-completion ships a more elaborate version of that file. (Closes: bash-completion ships a more elaborate version of that file. (Closes:
#566683, #550590, LP: #538917, #484098) #566683, #550590, LP: #538917, #484098)
@@ -128,7 +65,7 @@ xen-tools (4.2~beta1-1) unstable; urgency=low
the Git repository. the Git repository.
* Overhauled package description * Overhauled package description
-- Axel Beckert <abe@debian.org> Sun, 30 May 2010 22:32:30 +0200 -- Axel Beckert <abe@debian.org> Mon, 17 May 2010 13:32:04 +0200
xen-tools (4.1-1) unstable; urgency=low xen-tools (4.1-1) unstable; urgency=low

4
debian/control vendored
View File

@@ -3,7 +3,7 @@ Section: utils
Priority: extra Priority: extra
Maintainer: Axel Beckert <abe@debian.org> Maintainer: Axel Beckert <abe@debian.org>
Build-Depends: debhelper (>= 7.0.0), libtest-pod-perl, libtext-template-perl Build-Depends: debhelper (>= 7.0.0), libtest-pod-perl, libtext-template-perl
Standards-Version: 3.9.1 Standards-Version: 3.8.4
Homepage: http://xen-tools.org/software/xen-tools Homepage: http://xen-tools.org/software/xen-tools
Vcs-Browser: http://gitorious.org/xen-tools/xen-tools Vcs-Browser: http://gitorious.org/xen-tools/xen-tools
Vcs-Git: git://gitorious.org/xen-tools/xen-tools.git Vcs-Git: git://gitorious.org/xen-tools/xen-tools.git
@@ -12,7 +12,7 @@ Package: xen-tools
Architecture: all Architecture: all
Depends: debootstrap | cdebootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl, libfile-slurp-perl, ${misc:Depends} Depends: debootstrap | cdebootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl, libfile-slurp-perl, ${misc:Depends}
Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, rinse, xen-shell, libexpect-perl Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, rinse, xen-shell, libexpect-perl
Suggests: reiserfsprogs, xfsprogs, xen-utils, cfengine2, evms-cli, btrfs-tools Suggests: reiserfsprogs, xfsprogs, xen-utils, cfengine2, evms-cli
Description: Tools to manage Xen virtual servers Description: Tools to manage Xen virtual servers
This package contains tools to manage Debian based Xen virtual servers. This package contains tools to manage Debian based Xen virtual servers.
. .

5
debian/copyright vendored
View File

@@ -4,10 +4,7 @@ Tue, 20 Dec 2005 02:21:05 +0200.
It was downloaded from http://xen-tools.org/software/xen-tools/ It was downloaded from http://xen-tools.org/software/xen-tools/
Copyright 2005-2009: Steve Kemp <steve@steve.org.uk> Copyright 2005-2009: Steve Kemp <steve@steve.org.uk>
Copyright 2010: The Xen-Tools Development Team, currently consisting of: Copyright 2010: Axel Beckert <abe@deuxchevaux.org>
Axel Beckert <abe@deuxchevaux.org>,
Dmitry Nedospasov <dmitry@nedos.net>, and
Stéphane Jourdois <sjourdois@gmail.com>
License: License:

3
debian/docs vendored
View File

@@ -2,5 +2,4 @@ AUTHORS
README README
SUPPORT SUPPORT
BUGS BUGS
TODO TODO
KNOWN_BUGS

View File

@@ -107,13 +107,13 @@ install-method = debootstrap
# (This allows you to install from a .tar.bz file, rather than a plain # (This allows you to install from a .tar.bz file, rather than a plain
# tar file, use cdebootstrap, etc.) # tar file, use cdebootstrap, etc.)
# #
# install-method = copy: # install-method=copy:
# copy-cmd = /bin/cp -a $src/* $dest # copy-cmd = /bin/cp -a $src/* $dest
# #
# install-method = debootstrap: # install-method=debootstrap:
# debootstrap-cmd = /usr/sbin/debootstrap # debootstrap-cmd=/usr/sbin/debootstrap
# #
# install-method = tar: # install-method=tar:
# tar-cmd = /bin/tar --numeric-owner -xvf $src # tar-cmd = /bin/tar --numeric-owner -xvf $src
# #
# #
@@ -130,13 +130,24 @@ memory = 128Mb # Memory size
swap = 128Mb # Swap size swap = 128Mb # Swap size
# noswap = 1 # Don't use swap at all for the new system. # noswap = 1 # Don't use swap at all for the new system.
fs = ext3 # use the EXT3 filesystem for the disk image. fs = ext3 # use the EXT3 filesystem for the disk image.
dist = `xt-guess-suite-and-mirror --suite` # Default distribution to install. dist = `xt-guess-suite-and-mirror -s` # Default distribution to install.
image = sparse # Specify sparse vs. full disk images. image = sparse # Specify sparse vs. full disk images.
# #
# See the README for currently supported and tested distributions. You can # Currently supported and tested distributions include:
# either find it in the root directory of the unpacked source or, on Debian #
# and Ubuntu based systems, in /usr/share/doc/xen-tools/README.gz # via Debootstrap:
#
# Debian:
# sid, sarge, etch, lenny.
#
# Ubuntu:
# edgy, feisty, dapper.
#
# via Rinse:
# centos-4, centos-5.
# fedora-core-4, fedora-core-5, fedora-core-6, fedora-core-7
#
# #
@@ -149,30 +160,14 @@ image = sparse # Specify sparse vs. full disk images.
# Uncomment and adjust these network settings if you wish to give your # Uncomment and adjust these network settings if you wish to give your
# new instances static IP addresses. # new instances static IP addresses.
# #
# gateway = 192.168.1.1 # gateway = 192.168.1.1
# netmask = 255.255.255.0 # netmask = 255.255.255.0
# broadcast = 192.168.1.255 # broadcast = 192.168.1.255
# #
# Uncomment this if you wish the images to use DHCP # Uncomment this if you wish the images to use DHCP
# #
# dhcp = 1 # dhcp = 1
#
# Uncomment and adjust this setting if you wish to give your new
# instances a specific nameserver.
#
# By default, nameserver is not set, and Dom0's /etc/resolv.conf will
# be copied to guest.
#
# nameserver = 192.168.1.1
#
#
# Setup bridge name for host vif. Usefull if you use bridged networking
# for guests.
#
# bridge = xendmz
#
## ##
# Misc options # Misc options
@@ -186,41 +181,10 @@ image = sparse # Specify sparse vs. full disk images.
# #
# #
# The default cachedir is, /var/cache/apt/archives/, however if it # Uncomment the following line if you wish to interactively setup
# does not exist it will default to /var/cache/xen-tools/archives/ # a new root password for images.
# Uncomment the line below to set it to something else.
#
# cachedir = /var/cache/xen-tools/archives/
#
#
# Uncomment the following line if you wish not to generate a new root
# password for the new guest.
#
# genpass = 0
#
#
# You can also change the password length by uncommenting and
# changing the line below
#
# genpass_len = 8
#
#
# You can yet change the hashing method to encrypt the generated
# password by changing the line below.
# Valid values : md5, sha256 and sha512.
#
# hash_method = sha256
#
#
# Uncomment the following line if you wish to interactively setup a
# new root password for images.
# #
# passwd = 1 # passwd = 1
#
# #
# If you'd like all accounts on your host system which are not present # If you'd like all accounts on your host system which are not present
@@ -232,8 +196,8 @@ image = sparse # Specify sparse vs. full disk images.
# #
# Default kernel and ramdisk to use for the virtual servers # Default kernel and ramdisk to use for the virtual servers
# #
kernel = /boot/vmlinuz-`uname -r` kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r` initrd = /boot/initrd.img-`uname -r`
# #
# The architecture to use when using debootstrap, rinse, or rpmstrap. # The architecture to use when using debootstrap, rinse, or rpmstrap.
@@ -241,13 +205,13 @@ initrd = /boot/initrd.img-`uname -r`
# This is most useful on 64 bit host machines, for other systems it # This is most useful on 64 bit host machines, for other systems it
# doesn't need to be used. # doesn't need to be used.
# #
# arch = [i386|amd64] # arch=[i386|amd64]
# #
# #
# The default mirror for debootstrap to install Debian-derived distributions # The default mirror for debootstrap to install Debian-derived distributions
# #
mirror = `xt-guess-suite-and-mirror --mirror` mirror = `xt-guess-suite-and-mirror -m`
# #
# A mirror suitable for use when installing the Dapper release of Ubuntu. # A mirror suitable for use when installing the Dapper release of Ubuntu.
@@ -257,36 +221,24 @@ mirror = `xt-guess-suite-and-mirror --mirror`
# #
# If you like you could use per-distribution mirrors, which will # If you like you could use per-distribution mirrors, which will
# be more useful if you're working in an environment where you want # be more useful if you're working in an environment where you want
# to regularly use multiple distributions. The following are the # to regularly use multiple distributions:
# default values used (for Debian the GeoIP feature is used, see
# http://wiki.debian.org/DebianGeoMirror):
# #
# mirror_sarge = http://archive.debian.org/debian # mirror_sid=http://ftp.us.debian.org/debian
# mirror_etch = http://archive.debian.org/debian # mirror_sarge=http://ftp.us.debian.org/debian
# mirror_lenny = http://cdn.debian.net/debian # mirror_etch=http://ftp.us.debian.org/debian
# mirror_squeeze = http://cdn.debian.net/debian # mirror_dapper=http://archive.ubuntu.com/ubuntu
# mirror_wheezy = http://cdn.debian.net/debian # mirror_edgy=http://archive.ubuntu.com/ubuntu
# mirror_sid = http://cdn.debian.net/debian # mirror_feisty=http://archive.ubuntu.com/ubuntu
# mirror_dapper = http://archive.ubuntu.com/ubuntu # mirror_gutsy=http://archive.ubuntu.com/ubuntu
# mirror_edgy = http://old-releases.ubuntu.com/ubuntu
# mirror_feisty = http://old-releases.ubuntu.com/ubuntu
# mirror_gutsy = http://old-releases.ubuntu.com/ubuntu
# mirror_hardy = http://archive.ubuntu.com/ubuntu
# mirror_intrepid = http://old-releases.ubuntu.com/ubuntu
# mirror_karmic = http://archive.ubuntu.com/ubuntu
# mirror_lucid = http://archive.ubuntu.com/ubuntu
# mirror_maverick = http://archive.ubuntu.com/ubuntu
# mirror_natty = http://archive.ubuntu.com/ubuntu
# #
# Filesystem options for the different filesystems we support. # Filesystem options for the different filesystems we support.
# #
ext3_options = noatime,nodiratime,errors=remount-ro ext3_options = noatime,nodiratime,errors=remount-ro
ext2_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro
xfs_options = defaults xfs_options = defaults
reiserfs_options = defaults reiser_options = defaults
btrfs_options = defaults
# #
# Uncomment if you wish newly created images to boot once they've been # Uncomment if you wish newly created images to boot once they've been
@@ -322,20 +274,3 @@ btrfs_options = defaults
# output = /etc/xen # output = /etc/xen
# extension = .cfg # extension = .cfg
# #
#
# Here you can control weather your dom0's /etc/hosts file should be
# appended with the new guest, and also if your dom0's /etc/hosts file
# should be copied to the new guest.
#
# Change the following options to 1 to set them
# nohosts - don't touch the dom0's /etc/hosts file
# copyhosts - copy the dom0's /etc/hosts to the guest
#
# by default new guests ARE added to the dom0's /etc/hosts file
# nohosts = 0 # default
#
# by default the dom0's /etc/hosts IS NOT copied
# copyhosts = 0 # default
#

View File

@@ -63,20 +63,32 @@ memory = '{$memory}'
# Physical volumes # Physical volumes
# #
{ {
if ( ( $swap_vbd ) && ( $image_vbd ) )
{
$OUT .= "root = '/dev/$device" . "2 ro'\n";
$OUT .= "disk = [ ";
if ( $image_vbd ) if ( $image_vbd )
{ {
$OUT .= "root = '/dev/$device" . "2 ro'\n"; $OUT .= "'$image_vbd," . $device . "2,w'";
$OUT .= "disk = [\n";
$OUT .= " '$image_vbd," . $device . "2,w',\n";
if ( $swap_vbd ) }
{
$OUT .= " '$swap_vbd," . $device . "1,w',\n"; if ( $swap_vbd )
} {
$OUT .= " ]\n"; if ( $image_vbd )
{
$OUT .= ",";
}
$OUT .= "'$swap_vbd," . $device . "1,w'";
}
$OUT .= " ]\n";
} }
} }
# #
# Hostname # Hostname
# #

View File

@@ -26,6 +26,11 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# DNS is probably required to run "yum update".
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Update yum # Update yum
# #

View File

@@ -73,19 +73,6 @@ E_O_STATIC
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
else else
cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0 cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 DEVICE=eth0

View File

@@ -0,0 +1,58 @@
#!/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.
#
# NONE DONE
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installCentOS4Package ${prefix} sudo
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -63,7 +63,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -89,9 +88,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -112,9 +108,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

@@ -26,6 +26,12 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# DNS is probably required to run "yum update".
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Update yum # Update yum
# #

View File

@@ -73,19 +73,6 @@ E_O_STATIC
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
else else
cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0 cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 DEVICE=eth0

View File

@@ -0,0 +1,58 @@
#!/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.
#
# NONE DONE
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installCentOS4Package ${prefix} sudo
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -64,7 +64,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -90,9 +89,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -113,9 +109,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

@@ -85,7 +85,7 @@ installDebianPackage ()
# #
# Use policy-rc to stop any daemons from starting. # Use policy-rc to stop any daemons from starting.
# #
printf '#!/bin/sh\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d printf '#!/bin/bash\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d
chmod +x ${prefix}/usr/sbin/policy-rc.d chmod +x ${prefix}/usr/sbin/policy-rc.d
# #
@@ -98,7 +98,9 @@ installDebianPackage ()
# #
# Install the packages # Install the packages
# #
mount -t devpts devpts ${prefix}/dev/pts
DEBIAN_FRONTEND=noninteractive chroot ${prefix} /usr/bin/apt-get --yes --force-yes install "$@" DEBIAN_FRONTEND=noninteractive chroot ${prefix} /usr/bin/apt-get --yes --force-yes install "$@"
umount ${prefix}/dev/pts
# #
# Remove the policy-rc.d script. # Remove the policy-rc.d script.
@@ -224,18 +226,18 @@ installCentOS4Package ()
# #
installPackage () installPackage ()
{ {
prefix=$1 prefix=$1
package=$2 package=$2
if [ -x ${prefix}/usr/bin/apt-get ] ; then if [ -x ${prefix}/usr/bin/apt-get ] ; then
installDebianPackage "$@" installDebianPackage "$@"
elif [ -x ${prefix}/usr/bin/yum ] ; then elif [ -x ${prefix}/usr/bin/yum ] ; then
installCentOS4Package "$@" installCentOS4Package "$@"
else else
logMessage "Unable to install package ${package}; no package manager found" logMessage "Unable to install package ${package}; no package manager found"
fi fi
} }

View File

@@ -28,19 +28,36 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Attempt to auto-magically detect the use of a Proxy for apt-get, and # 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 # replicate that setup in our new guest.
# the setting to the proxy guess file.
# #
logMessage The use of a proxy detected. #
apt-config dump | grep -i Acquire::HTTP::Proxy \ # Process any of the present apt-conf setup lines.
> ${prefix}/etc/apt/apt.conf.d/proxy-guess #
for i in /etc/apt/apt.conf /etc/apt/apt.conf.d/* ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -i HTTP::Proxy $i >> ${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list cat <<E_O_APT > ${prefix}/etc/apt/sources.list
# #
# /etc/apt/sources.list # /etc/apt/sources.list

View File

@@ -112,20 +112,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting 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. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; 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
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF 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 fi
@@ -106,15 +78,22 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
#
# Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts echo "${ip1} ${hostname} ${name}" >> /etc/hosts
# #
# If we've updated the /etc/hosts file on the host machine # If we've updated the /etc/hosts file on the host machine
@@ -122,12 +101,12 @@ if [ -z "${dhcp}" ]; then
# reload it. # reload it.
# #
# This will let the local LAN clients lookup the new address. # This will let the local LAN clients lookup the new address.
# #
if [ -x /usr/sbin/dnsmasq ] ; then if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart. logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid` kill -s HUP `cat /var/run/dnsmasq.pid`
fi fi
fi fi
fi fi

View File

@@ -30,6 +30,28 @@ logMessage Script $0 starting
cp /etc/timezone ${prefix}/etc cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
# #
# Log our finish # Log our finish

View File

@@ -1,17 +1,18 @@
#!/bin/sh #!/bin/sh
# #
# This script installs OpenSSH Server on the newly created guest. # This script installs OpenSSH upon the new system.
# #
# It does this by generating the keys within the host, since guests # It must make sure that the server is not running before it exits
# do not have the necessary /dev/random and /dev/urandom to generate # otherwise the temporary mounted directory will not be unmountable.
# their own keys before boot.
# #
# Dmitry Nedospasov # Steve
# -- # --
# http://nedos.net/ # http://www.steve.org.uk/
prefix=$1 prefix=$1
# #
# Source our common functions # Source our common functions
# #
@@ -21,43 +22,21 @@ else
. ./hooks/common.sh . ./hooks/common.sh
fi fi
# #
# Log our start # Log our start
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Since our guests doesn't have an RNG, generate the keys from the host
#
# First, create an ssh directory
#
mkdir -p ${prefix}/etc/ssh
#
# Second, Generate the Host RSA Key
#
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
else
logMessage "failed to generate Host RSA Key"
fi
#
# Third, Generate the Host DSA Key
#
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
else
logMessage "failed to generate Host DSA Key"
fi
# #
# Install ssh # Install ssh
# #
installDebianPackage ${prefix} openssh-server installDebianPackage ${prefix} ssh
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished logMessage Script $0 finished

View File

@@ -60,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -86,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -109,9 +105,6 @@ fi
if [ $has_reiserfs -eq 1 ]; then if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs installDebianPackage ${prefix} reiserfsprogs
fi fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
# #

View File

@@ -29,10 +29,23 @@ logMessage Script $0 starting
# #
# Disable the startup scripts from all runlevels. # Disable the startup scripts from all runlevels.
# #
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove if [ -x ${prefix}/etc/init.d/hwclock.sh ]; then
chmod -x ${prefix}/etc/init.d/hwclock.sh
else
logMessage "/etc/init.d/hwclock.sh not found. skipping."
fi
if [ -x ${prefix}/etc/init.d/hwclockfirst.sh ]; then
chmod -x ${prefix}/etc/init.d/hwclockfirst.sh
else
logMessage "/etc/init.d/hwclockfirst.sh not found. skipping."
fi
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished. logMessage Script $0 finished.

View File

@@ -28,13 +28,33 @@ logMessage Script $0 starting
# #
# Attempt to auto-magically detect the use of a Proxy for apt-get, and # You'll probably need DNS to run "apt-get update".
# replicate that setup in our new guest via apt-config dump and save
# the setting to the proxy guess file.
# #
logMessage The use of a proxy detected. cp /etc/resolv.conf ${prefix}/etc
apt-config dump | grep -i Acquire::HTTP::Proxy \
> ${prefix}/etc/apt/apt.conf.d/proxy-guess
#
# Attempt to auto-magically detect the use of a Proxy for apt-get, and
# replicate that setup in our new guest.
#
#
# Process any of the present apt-conf setup lines.
#
for i in /etc/apt/apt.conf /etc/apt/apt.conf.d/* ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -i HTTP::Proxy $i >> ${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
# #
@@ -59,7 +79,7 @@ E_O_APT
# If the host system has security support then enable that here, too, # If the host system has security support then enable that here, too,
# except if we're installing Debian Unstable. # except if we're installing Debian Unstable.
# #
if ( test "${dist}" "!=" "sid" && test "${dist}" "!=" "unstable" && \ if ( test "${dist}" '!=' 'sid' && test "${dist}" '!=' 'unstable' && \
test -e /etc/apt/sources.list && \ test -e /etc/apt/sources.list && \
grep ^deb.*security -r /etc/apt/sources.list /etc/apt/sources.list.d >/dev/null 2>/dev/null ) ; then grep ^deb.*security -r /etc/apt/sources.list /etc/apt/sources.list.d >/dev/null 2>/dev/null ) ; then

View File

@@ -132,20 +132,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

View File

@@ -27,47 +27,42 @@ fi
# #
logMessage Script $0 starting 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. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; 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
# Non-IPv6 stuff.
# TODO: Think of a better way of doing this, this may have a lot of trash
# depending on the dom0 (i.e. 127.0.0.1 dom0.example.com)
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
# echo "127.0.0.1 localhost" >> ${prefix}/etc/hosts
echo "127.0.1.1 $(echo ${hostname} | awk -F '.' '{ print $1 }')" >> ${prefix}/etc/hosts
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
127.0.1.1 $(echo ${hostname} | awk -F '.' '{ print $1 }') ${hostname}
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +74,7 @@ ff02::3 ip6-allhosts
EOF 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 fi
@@ -106,15 +83,21 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
#
# Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts echo "${ip1} ${hostname} ${name}" >> /etc/hosts
# #
# If we've updated the /etc/hosts file on the host machine # If we've updated the /etc/hosts file on the host machine

View File

@@ -33,8 +33,8 @@ MAKEDEV=''
MAKEDEV_PATHS="/sbin/MAKEDEV /dev/MAKEDEV" MAKEDEV_PATHS="/sbin/MAKEDEV /dev/MAKEDEV"
for MAKEDEV_PATH in ${MAKEDEV_PATHS}; do for MAKEDEV_PATH in ${MAKEDEV_PATHS}; do
if [ -x "${prefix}${MAKEDEV_PATH}" ]; then if [ -x "${prefix}${MAKEDEV_PATH}" ]; then
MAKEDEV="${prefix}${MAKEDEV_PATH}" MAKEDEV="${prefix}${MAKEDEV_PATH}"
break break
fi fi
done done

View File

@@ -31,6 +31,29 @@ cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
# #
# Log our finish # Log our finish
# #

View File

@@ -1,17 +1,18 @@
#!/bin/sh #!/bin/sh
# #
# This script installs OpenSSH Server on the newly created guest. # This script installs OpenSSH upon the new system.
# #
# It does this by generating the keys within the host, since guests # It must make sure that the server is not running before it exits
# do not have the necessary /dev/random and /dev/urandom to generate # otherwise the temporary mounted directory will not be unmountable.
# their own keys before boot.
# #
# Dmitry Nedospasov # Steve
# -- # --
# http://nedos.net/ # http://www.steve.org.uk/
prefix=$1 prefix=$1
# #
# Source our common functions # Source our common functions
# #
@@ -21,43 +22,20 @@ else
. ./hooks/common.sh . ./hooks/common.sh
fi fi
# #
# Log our start # Log our start
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Since our guests doesn't have an RNG, generate the keys from the host
#
# First, create an ssh directory
#
mkdir -p ${prefix}/etc/ssh
#
# Second, Generate the Host RSA Key
#
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
else
logMessage "failed to generate Host RSA Key"
fi
#
# Third, Generate the Host DSA Key
#
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
else
logMessage "failed to generate Host DSA Key"
fi
# #
# Install ssh # Install ssh
# #
installDebianPackage ${prefix} openssh-server installDebianPackage ${prefix} openssh-server
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished logMessage Script $0 finished

View File

@@ -33,25 +33,25 @@ logMessage Script $0 starting
# #
if [ "${arch}" = "i386" ]; then if [ "${arch}" = "i386" ]; then
XEN_ARCH="686" XEN_ARCH="686"
elif [ "${arch}" = "amd64" ]; then elif [ "${arch}" = "amd64" ]; then
XEN_ARCH="amd64" XEN_ARCH="amd64"
elif [ -z "${arch}" ]; then elif [ -z "${arch}" ]; then
UNAME_ARCH=`uname -m` UNAME_ARCH=`uname -m`
if [ "${UNAME_ARCH}" = "i686" ]; then if [ "${UNAME_ARCH}" = "i686" ]; then
XEN_ARCH="686" XEN_ARCH="686"
elif [ "${UNAME_ARCH}" = "x86_64" ]; then elif [ "${UNAME_ARCH}" = "x86_64" ]; then
XEN_ARCH="amd64" XEN_ARCH="amd64"
else else
logMessage Unknown kernel architecture ${UNAME_ARCH}. logMessage Unknown kernel architecture ${UNAME_ARCH}.
logMessage Please report this as bug to xen-tools-dev@xen-tools.org. logMessage Please report this as bug to xen-tools-dev@xen-tools.org.
logMessage Script $0 failed logMessage Script $0 failed
exit 1 exit 1
fi fi
else else
logMessage Unknown kernel architecture ${arch} logMessage Unknown kernel architecture ${arch}
logMessage Script $0 failed logMessage Script $0 failed
exit 1 exit 1
fi fi
# #
@@ -68,19 +68,19 @@ if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_XEN_PKG > /dev/null 2>&1; th
installDebianPackage ${prefix} $KERNEL_XEN_PKG installDebianPackage ${prefix} $KERNEL_XEN_PKG
else else
logMessage Package $KERNEL_XEN_PKG is not available logMessage Package $KERNEL_XEN_PKG is not available
logMessage Attempting to install the $KERNEL_PKG kernel image logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG installDebianPackage ${prefix} $KERNEL_PKG
else else
logMessage Package $KERNEL_PKG is not available logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed logMessage Script $0 failed
exit 1 exit 1
fi fi
fi fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1)) DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
@@ -93,10 +93,10 @@ DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
# #
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation logMessage initrd exists, skipping generation
else else
logMessage initrd missing, generating logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV chroot ${prefix} update-initramfs -c -k $KERNEL_REV
fi fi
# #

View File

@@ -59,7 +59,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -85,9 +84,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -108,9 +104,6 @@ fi
if [ $has_reiserfs -eq 1 ]; then if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs installDebianPackage ${prefix} reiserfsprogs
fi fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
# #

View File

@@ -37,10 +37,10 @@ fi
# #
installDebianPackage ${prefix} locales installDebianPackage ${prefix} locales
installDebianPackage ${prefix} util-linux-locales installDebianPackage ${prefix} util-linux-locales
chroot ${prefix} /usr/sbin/update-locale LANG=C
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished. logMessage Script $0 finished.

View File

@@ -28,19 +28,38 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Attempt to auto-magically detect the use of a Proxy for apt-get, and # 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 # replicate that setup in our new guest.
# the setting to the proxy guess file.
# #
logMessage The use of a proxy detected. #
apt-config dump | grep -i Acquire::HTTP::Proxy \ # Process any of the present apt-conf setup lines.
> ${prefix}/etc/apt/apt.conf.d/proxy-guess #
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list cat <<E_O_APT > ${prefix}/etc/apt/sources.list
# #
# /etc/apt/sources.list # /etc/apt/sources.list

View File

@@ -121,20 +121,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting 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. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; 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
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF 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 fi
@@ -106,15 +78,20 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
#
# Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts echo "${ip1} ${hostname} ${name}" >> /etc/hosts
# #
# If we've updated the /etc/hosts file on the host machine # If we've updated the /etc/hosts file on the host machine

View File

@@ -30,6 +30,28 @@ logMessage Script $0 starting
cp /etc/timezone ${prefix}/etc cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
# #
# Log our finish # Log our finish

View File

@@ -1,17 +1,18 @@
#!/bin/sh #!/bin/sh
# #
# This script installs OpenSSH Server on the newly created guest. # This script installs OpenSSH upon the new system.
# #
# It does this by generating the keys within the host, since guests # It must make sure that the server is not running before it exits
# do not have the necessary /dev/random and /dev/urandom to generate # otherwise the temporary mounted directory will not be unmountable.
# their own keys before boot.
# #
# Dmitry Nedospasov # Steve
# -- # --
# http://nedos.net/ # http://www.steve.org.uk/
prefix=$1 prefix=$1
# #
# Source our common functions # Source our common functions
# #
@@ -21,43 +22,21 @@ else
. ./hooks/common.sh . ./hooks/common.sh
fi fi
# #
# Log our start # Log our start
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Since our guests doesn't have an RNG, generate the keys from the host
#
# First, create an ssh directory
#
mkdir -p ${prefix}/etc/ssh
#
# Second, Generate the Host RSA Key
#
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
else
logMessage "failed to generate Host RSA Key"
fi
#
# Third, Generate the Host DSA Key
#
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
else
logMessage "failed to generate Host DSA Key"
fi
# #
# Install ssh # Install ssh
# #
installDebianPackage ${prefix} openssh-server installDebianPackage ${prefix} ssh
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished logMessage Script $0 finished

View File

@@ -43,19 +43,19 @@ if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_XEN_PKG > /dev/null 2>&1; th
installDebianPackage ${prefix} $KERNEL_XEN_PKG installDebianPackage ${prefix} $KERNEL_XEN_PKG
else else
logMessage Package $KERNEL_XEN_PKG is not available logMessage Package $KERNEL_XEN_PKG is not available
logMessage Attempting to install the $KERNEL_PKG kernel image logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG installDebianPackage ${prefix} $KERNEL_PKG
else else
logMessage Package $KERNEL_PKG is not available logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed logMessage Script $0 failed
exit 1 exit 1
fi fi
fi fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1)) DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
@@ -68,10 +68,10 @@ DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
# #
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation logMessage initrd exists, skipping generation
else else
logMessage initrd missing, generating logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV chroot ${prefix} update-initramfs -c -k $KERNEL_REV
fi fi
# #

View File

@@ -60,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -86,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -109,9 +105,6 @@ fi
if [ $has_reiserfs -eq 1 ]; then if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs installDebianPackage ${prefix} reiserfsprogs
fi fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
# #

View File

@@ -26,6 +26,13 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# DNS is probably required to run "yum update".
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Update yum # Update yum
# #

View File

@@ -73,19 +73,6 @@ E_O_STATIC
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
else else
cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0 cat <<E_O_DHCP >${prefix}/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 DEVICE=eth0

View File

@@ -0,0 +1,58 @@
#!/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.
#
# NONE DONE
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installCentOS4Package ${prefix} sudo
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -63,7 +63,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -89,9 +88,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -112,9 +108,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

@@ -96,20 +96,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

59
hooks/gentoo/60-copy-host-files Executable file
View File

@@ -0,0 +1,59 @@
#!/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/resolv.conf ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/resolv.conf ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -60,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -86,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -109,9 +105,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

@@ -28,19 +28,38 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Attempt to auto-magically detect the use of a Proxy for apt-get, and # 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 # replicate that setup in our new guest.
# the setting to the proxy guess file.
# #
logMessage The use of a proxy detected. #
apt-config dump | grep -i Acquire::HTTP::Proxy \ # Process any of the present apt-conf setup lines.
> ${prefix}/etc/apt/apt.conf.d/proxy-guess #
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list cat <<E_O_APT > ${prefix}/etc/apt/sources.list
# #
# /etc/apt/sources.list # /etc/apt/sources.list

View File

@@ -27,12 +27,10 @@ logMessage Script $0 starting
# #
# Remove the links for upstart # Remove the links for upstart
# #
rm -f ${prefix}/etc/event.d/tty[!1] rm ${prefix}/etc/event.d/tty[!1]
[ -f ${prefix}/etc/event.d/tty1 ] && { sed -i -e s/tty1/hvc0/ ${prefix}/etc/event.d/tty1
sed -i -e s/tty1/hvc0/ ${prefix}/etc/event.d/tty1 mv ${prefix}/etc/event.d/tty1 ${prefix}/etc/event.d/hvc0
mv ${prefix}/etc/event.d/tty1 ${prefix}/etc/event.d/hvc0 [ -f ${prefix}/etc/inittab ] && sed -i -e s/tty1/hvc0/ ${prefix}/etc/inittab
}
[ -f ${prefix}/etc/inittab ] && sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
# #
# Are we using an alternative serial device? # Are we using an alternative serial device?

View File

@@ -121,20 +121,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting 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. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; 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
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF 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 fi
@@ -106,15 +78,20 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
#
# Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts echo "${ip1} ${hostname} ${name}" >> /etc/hosts
# #
# If we've updated the /etc/hosts file on the host machine # If we've updated the /etc/hosts file on the host machine

View File

@@ -30,6 +30,28 @@ logMessage Script $0 starting
cp /etc/timezone ${prefix}/etc cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
# #
# Log our finish # Log our finish

View File

@@ -1,17 +1,18 @@
#!/bin/sh #!/bin/sh
# #
# This script installs OpenSSH Server on the newly created guest. # This script installs OpenSSH upon the new system.
# #
# It does this by generating the keys within the host, since guests # It must make sure that the server is not running before it exits
# do not have the necessary /dev/random and /dev/urandom to generate # otherwise the temporary mounted directory will not be unmountable.
# their own keys before boot.
# #
# Dmitry Nedospasov # Steve
# -- # --
# http://nedos.net/ # http://www.steve.org.uk/
prefix=$1 prefix=$1
# #
# Source our common functions # Source our common functions
# #
@@ -21,43 +22,21 @@ else
. ./hooks/common.sh . ./hooks/common.sh
fi fi
# #
# Log our start # Log our start
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Since our guests doesn't have an RNG, generate the keys from the host
#
# First, create an ssh directory
#
mkdir -p ${prefix}/etc/ssh
#
# Second, Generate the Host RSA Key
#
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
else
logMessage "failed to generate Host RSA Key"
fi
#
# Third, Generate the Host DSA Key
#
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
else
logMessage "failed to generate Host DSA Key"
fi
# #
# Install ssh # Install ssh
# #
installDebianPackage ${prefix} openssh-server installDebianPackage ${prefix} ssh
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished logMessage Script $0 finished

View File

@@ -38,14 +38,14 @@ KERNEL_PKG="linux-image-server"
logMessage Attempting to install the $KERNEL_PKG kernel image logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG installDebianPackage ${prefix} $KERNEL_PKG
else else
logMessage Package $KERNEL_PKG is not available logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed logMessage Script $0 failed
exit 1 exit 1
fi fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1)) DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
@@ -58,10 +58,10 @@ DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
# #
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation logMessage initrd exists, skipping generation
else else
logMessage initrd missing, generating logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV chroot ${prefix} update-initramfs -c -k $KERNEL_REV
fi fi
# #

View File

@@ -60,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -86,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -109,9 +105,6 @@ fi
if [ $has_reiserfs -eq 1 ]; then if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs installDebianPackage ${prefix} reiserfsprogs
fi fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
# #

View File

@@ -28,19 +28,38 @@ fi
logMessage Script $0 starting logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
# #
# Attempt to auto-magically detect the use of a Proxy for apt-get, and # 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 # replicate that setup in our new guest.
# the setting to the proxy guess file.
# #
logMessage The use of a proxy detected. #
apt-config dump | grep -i Acquire::HTTP::Proxy \ # Process any of the present apt-conf setup lines.
> ${prefix}/etc/apt/apt.conf.d/proxy-guess #
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
#
# Setup the sources.list file for new installations of Ubuntu GNU/Linux.
#
cat <<E_O_APT > ${prefix}/etc/apt/sources.list cat <<E_O_APT > ${prefix}/etc/apt/sources.list
# #
# /etc/apt/sources.list # /etc/apt/sources.list

View File

@@ -27,12 +27,10 @@ logMessage Script $0 starting
# #
# Remove the links for upstart # Remove the links for upstart
# #
rm -f ${prefix}/etc/init/tty[!1].conf rm ${prefix}/etc/init/tty[!1].conf
[ -f ${prefix}/etc/init/tty1.conf ] && { sed -i -e s/tty1/hvc0/ ${prefix}/etc/init/tty1.conf
sed -i -e s/tty1/hvc0/ ${prefix}/etc/init/tty1.conf mv ${prefix}/etc/init/tty1.conf ${prefix}/etc/init/hvc0.conf
mv ${prefix}/etc/init/tty1.conf ${prefix}/etc/init/hvc0.conf
}
[ -f ${prefix}/etc/inittab ] && sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
# #
# Are we using an alternative serial device? # Are we using an alternative serial device?

View File

@@ -121,20 +121,6 @@ E_O_STATIC
count=`expr $count + 1` count=`expr $count + 1`
interface=`expr $interface + 1` interface=`expr $interface + 1`
done done
#
# Hooks are run chrooted, hence the resolv.conf is moved
# temporarily to /etc/resolv.conf.old. Use that file, it
# will be restored after hooks are run.
#
if [ '' != "$nameserver" ]; then
rm -f ${prefix}/etc/resolv.conf.old
for ns in $nameserver; do
echo "nameserver $ns" >>${prefix}/etc/resolv.conf.old
done
else
cp /etc/resolv.conf ${prefix}/etc/resolv.conf.old
fi
} }

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting 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. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; 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
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF 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 fi
@@ -106,15 +78,20 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
#
# Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts echo "${ip1} ${hostname} ${name}" >> /etc/hosts
# #
# If we've updated the /etc/hosts file on the host machine # If we've updated the /etc/hosts file on the host machine

View File

@@ -30,6 +30,28 @@ logMessage Script $0 starting
cp /etc/timezone ${prefix}/etc cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
# #
# Log our finish # Log our finish

View File

@@ -1,17 +1,18 @@
#!/bin/sh #!/bin/sh
# #
# This script installs OpenSSH Server on the newly created guest. # This script installs OpenSSH upon the new system.
# #
# It does this by generating the keys within the host, since guests # It must make sure that the server is not running before it exits
# do not have the necessary /dev/random and /dev/urandom to generate # otherwise the temporary mounted directory will not be unmountable.
# their own keys before boot.
# #
# Dmitry Nedospasov # Steve
# -- # --
# http://nedos.net/ # http://www.steve.org.uk/
prefix=$1 prefix=$1
# #
# Source our common functions # Source our common functions
# #
@@ -21,43 +22,21 @@ else
. ./hooks/common.sh . ./hooks/common.sh
fi fi
# #
# Log our start # Log our start
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Since our guests doesn't have an RNG, generate the keys from the host
#
# First, create an ssh directory
#
mkdir -p ${prefix}/etc/ssh
#
# Second, Generate the Host RSA Key
#
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
else
logMessage "failed to generate Host RSA Key"
fi
#
# Third, Generate the Host DSA Key
#
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
else
logMessage "failed to generate Host DSA Key"
fi
# #
# Install ssh # Install ssh
# #
installDebianPackage ${prefix} openssh-server installDebianPackage ${prefix} ssh
# #
# Log our finish # Log our finish
# #
logMessage Script $0 finished logMessage Script $0 finished

View File

@@ -60,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -86,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -109,9 +105,6 @@ fi
if [ $has_reiserfs -eq 1 ]; then if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs installDebianPackage ${prefix} reiserfsprogs
fi fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
# #

View File

@@ -319,6 +319,10 @@ L<http://search.cpan.org/dist/Xen-Tools>
=back =back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE =head1 COPYRIGHT & LICENSE
Copyright 2007 C.J. Adams-Collier, all rights reserved. Copyright 2007 C.J. Adams-Collier, all rights reserved.

View File

@@ -149,7 +149,7 @@ sub _init_fh {
my $logFile = my $logFile =
File::Spec->catfile( $self->logpath(), $self->hostname() . '.log' ); File::Spec->catfile( $self->logpath(), $self->hostname() . '.log' );
system( qw(mkdir -p), $self->logpath() ) unless -d $self->logpath(); system( 'mkdir -p', $self->logpath() ) unless -d $self->logpath();
carp "Couldn't create log directory: $!" unless $? == 0; carp "Couldn't create log directory: $!" unless $? == 0;
@@ -199,6 +199,10 @@ L<http://search.cpan.org/dist/Xen-Tools>
=back =back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE =head1 COPYRIGHT & LICENSE
Copyright 2007 C.J. Adams-Collier, all rights reserved. Copyright 2007 C.J. Adams-Collier, all rights reserved.

View File

@@ -2,7 +2,7 @@
# #
# /etc/bash_completion.d/xen-tools # /etc/bash_completion.d/xen-tools
# #
# Completion functions for Bash. # Completion functions for Bash.
# #
# This file offers basic support for all the command line options, along with # This file offers basic support for all the command line options, along with
# some specialist support to complete filesystem types, distribution targets, # some specialist support to complete filesystem types, distribution targets,
@@ -47,7 +47,7 @@ function _find_xen_images
# #
_xen_create_image() _xen_create_image()
{ {
local cur prev ip roles partitions dists vgs local cur prev ip evmscontainers roles partitions dists vgs
COMPREPLY=() COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]} cur=${COMP_WORDS[COMP_CWORD]}
@@ -55,8 +55,8 @@ _xen_create_image()
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
opts=$(xen-create-image --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u) opts=$(xen-create-image --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
# #
# Complete the initial part of the IP in the configuration file. # Complete the initial part of the IP in the configuration file.
ip=`grep ^gateway /etc/xen-tools/xen-tools.conf 2>/dev/null | awk -F'= ' '{print $2}'` ip=`grep ^gateway /etc/xen-tools/xen-tools.conf 2>/dev/null | awk -F'= ' '{print $2}'`
@@ -78,127 +78,71 @@ _xen_create_image()
# #
# EVMS container completion # EVMS container completion
# #
evmscontainers=`evms_query containers 2>/dev/null` evmscontainers=`evms_query containers 2>/dev/null`
case "$prev" in case "$prev" in
--cache) --cache)
COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--cachedir) --config)
_filedir -d _filedir
return 0 return 0
;; ;;
--config) --dir)
_filedir .conf _filedir -d
return 0 return 0
;; ;;
--debootstrap-cmd) --dist)
_filedir COMPREPLY=( $( compgen -W '${dists}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--dir) --evms)
_filedir -d COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--dist) --fs)
COMPREPLY=( $( compgen -W '${dists}' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'xfs ext3 reiserfs' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--evms) --hooks)
COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--fs) --install)
COMPREPLY=( $( compgen -W 'ext2 ext3 ext4 xfs reiserfs btrfs' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--genpass) --image)
COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'sparse full' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--hash_method) --install-method)
COMPREPLY=( $( compgen -W 'md5 sha256 sha512' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--hooks) --ip)
COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) ) ip=`echo ${ip} | sed -e 's/[.][^.]*$/./'`
return 0 COMPREPLY=( $(compgen -W "${ip}" -- ${cur}) )
;; return 0
--install) ;;
COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) ) --lvm)
return 0 COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
;; return 0
--image) ;;
COMPREPLY=( $( compgen -W 'sparse full' -- "${COMP_WORDS[COMP_CWORD]}" ) ) --role)
return 0
;;
--image-dev)
_filedir
return 0
;;
--initrd)
_filedir
return 0
;;
--initrd)
COMPREPLY=( $( compgen -W '0 1' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--install-method)
COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--install-source)
_filedir
return 0
;;
--ip)
ip=`echo ${ip} | sed -e 's/[.][^.]*$/./'`
COMPREPLY=( $(compgen -W "${ip}" -- ${cur}) )
return 0
;;
--kernel)
_filedir
return 0
;;
--lvm)
COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--modules)
_filedir -d
return 0
;;
--output)
_filedir -d
return 0
;;
--partitions)
partitions=$(for x in `/bin/ls -1 /etc/xen-tools/partitions.d/ 2>/dev/null | grep -v \/ 2>/dev/null`; do echo ${x} ; done )
COMPREPLY=( $( compgen -W '${partitions}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--role)
roles=$(ls -1 /etc/xen-tools/role.d/ | xargs echo ) roles=$(ls -1 /etc/xen-tools/role.d/ | xargs echo )
COMPREPLY=( $( compgen -W '${roles}' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W '${roles}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--roledir) --partitions)
_filedir -d partitions=$(for x in `/bin/ls -1 /etc/xen-tools/partitions.d/ 2>/dev/null | grep -v \/ 2>/dev/null`; do echo ${x} ; done )
return 0 COMPREPLY=( $( compgen -W '${partitions}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
;; return 0
--swap-dev) ;;
_filedir
return 0
;;
--template)
_filedir
return 0
;;
esac esac
if [[ ${cur} == -* ]] || [[ ${prev} == xen-create-image ]]; then if [[ ${cur} == -* ]] || [[ ${prev} == xen-create-image ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0 return 0
@@ -214,7 +158,7 @@ complete -F _xen_create_image xen-create-image
# #
_xen_create_nfs() _xen_create_nfs()
{ {
local cur prev ip roles dists vgs local cur prev
COMPREPLY=() COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]} cur=${COMP_WORDS[COMP_CWORD]}
@@ -223,14 +167,14 @@ _xen_create_nfs()
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
opts=$(xen-create-nfs --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u) opts=$(xen-create-nfs --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
case "$prev" in case "$prev" in
--template) --template)
_filedir _filedir
return 0 return 0
;; ;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0 return 0
@@ -243,7 +187,7 @@ complete -F _xen_create_nfs xen-create-nfs
# #
# Completion for xen-delete-image # Completion for xen-delete-image
# #
_xen_delete_image() _xen_delete_image()
{ {
local cur prev opts vgs names local cur prev opts vgs names
COMPREPLY=() COMPREPLY=()
@@ -257,34 +201,34 @@ _xen_delete_image()
# #
# EVMS container completion # EVMS container completion
# #
evmscontainers=`evms_query containers 2>/dev/null` evmscontainers=`evms_query containers 2>/dev/null`
# #
# Complete the options + all available hostnames. # Complete the options + all available hostnames.
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
# #
names=`_find_xen_images`
opts=$(xen-delete-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u) opts=$(xen-delete-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
opts="${opts} ${names}" opts="${opts} ${names}"
case "${prev}" in case "${prev}" in
--dir) --dir)
_filedir -d _filedir -d
return 0 return 0
;;
--evms)
COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;; ;;
--evms)
COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--hostname) --hostname)
names=`_find_xen_images`
COMPREPLY=( $(compgen -W "${names}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
return 0 return 0
;;
--lvm)
COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;; ;;
--lvm)
COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
@@ -305,9 +249,9 @@ complete -F _xen_delete_image xen-delete-image
# #
# Completion for xen-update-image # Completion for xen-update-image
# #
_xen_update_image() _xen_update_image()
{ {
local cur prev opts base names vgs local cur prev opts evmscontainers names vgs
COMPREPLY=() COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}" cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}" prev="${COMP_WORDS[COMP_CWORD-1]}"
@@ -327,17 +271,17 @@ _xen_update_image()
case "${prev}" in case "${prev}" in
--dir) --dir)
_filedir -d _filedir -d
return 0 return 0
;;
--evms)
COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--lvm)
COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;; ;;
--evms)
COMPREPLY=( $( compgen -W '${evmscontainers}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
--lvm)
COMPREPLY=( $( compgen -W '${vgs}' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0
;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
@@ -357,9 +301,9 @@ complete -F _xen_update_image xen-update-image
# #
# Completion for xen-list-images # Completion for xen-list-images
# #
_xen_list_images() _xen_list_images()
{ {
local cur prev opts vgs local cur prev opts
COMPREPLY=() COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}" cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}" prev="${COMP_WORDS[COMP_CWORD-1]}"
@@ -381,7 +325,7 @@ complete -F _xen_list_images xen-list-images
# #
_xt-create-xen-config() _xt-create-xen-config()
{ {
local cur prev local cur prev opts
COMPREPLY=() COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]} cur=${COMP_WORDS[COMP_CWORD]}
@@ -389,19 +333,19 @@ _xt-create-xen-config()
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
opts=$(xt-create-xen-config --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u) opts=$(xt-create-xen-config --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
case "$prev" in case "$prev" in
--output) --output)
_filedir -d _filedir -d
return 0 return 0
;; ;;
--template) --template)
COMPREPLY=( $( compgen -f -- ${cur#*:} ) ) COMPREPLY=( $( compgen -f -- ${cur#*:} ) )
return 0 return 0
;; ;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0 return 0
@@ -416,7 +360,7 @@ complete -F _xt-create-xen-config xt-create-xen-config
# #
_xt-customize-image() _xt-customize-image()
{ {
local cur prev dists local cur prev dists opts
COMPREPLY=() COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]} cur=${COMP_WORDS[COMP_CWORD]}
@@ -424,25 +368,25 @@ _xt-customize-image()
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
opts=$(xt-customize-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u) opts=$(xt-customize-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
# #
# Available distributions, from rpmstrap # Available distributions, from rpmstrap
# #
if [ -d /usr/lib/rpmstrap/scripts ]; then if [ -d /usr/lib/rpmstrap/scripts ]; then
dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts` dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
fi fi
case "$prev" in case "$prev" in
--dist) --dist)
COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--location) --location)
_filedir -d _filedir -d
return 0 return 0
;; ;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0 return 0
@@ -457,7 +401,7 @@ complete -F _xt-customize-image xt-customize-image
# #
_xt-install-image() _xt-install-image()
{ {
local cur prev dists local cur prev dists opts
COMPREPLY=() COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]} cur=${COMP_WORDS[COMP_CWORD]}
@@ -466,7 +410,7 @@ _xt-install-image()
# Determine arguments dynamically. Avoids out-of-dateness. # Determine arguments dynamically. Avoids out-of-dateness.
opts=$(xt-install-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u) opts=$(xt-install-image --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
# #
# Available distributions, from rpmstrap # Available distributions, from rpmstrap
# #
@@ -476,28 +420,28 @@ _xt-install-image()
case "$prev" in case "$prev" in
--cache) --cache)
COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'yes no' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--config) --config)
_filedir _filedir
return 0 return 0
;; ;;
--dist) --dist)
COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--install-method) --install-method)
COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) ) COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
return 0 return 0
;; ;;
--location) --location)
_filedir -d _filedir -d
return 0 return 0
;; ;;
esac esac
if [[ ${cur} == -* ]]; then if [[ ${cur} == -* ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0 return 0

View File

@@ -61,7 +61,8 @@ for i in `find ${source} -name '*.sed' -print`; do
# #
# Get the name of the file, minus the source prefix # Get the name of the file, minus the source prefix
# #
file=${i#$source} sourcelen=${#source}
file=/${i:$sourcelen}
# #
# Strip the .sed suffix # Strip the .sed suffix

186
roles/passwd Executable file
View File

@@ -0,0 +1,186 @@
#!/usr/bin/perl -w
=head1 NAME
passwd - xen-tools role-script to setup root password for new guests.
=head1 AUTHOR
Steve
--
http://www.steve.org.uk/
=cut
use strict;
use warnings;
use Digest::MD5;
use Expect;
#
# Get the arguments our role script was passed.
#
my( $prefix, $passwd ) = ( @ARGV );
#
# Make sure they are valid.
#
if ( ! -d $prefix )
{
print "Prefix not found: $prefix\n";
exit;
}
if ( ! length( $passwd ) )
{
print "Password missing.\n";
exit;
}
#
# Now make sure we have the module we require.
#
eval "use Expect;";
if ( $@ )
{
print "Expect.pm not found. Aborting.\n";
print "(For Debian systems run:\n\tapt-get install libexpect-perl\n";
exit;
}
#
# OK now we're good to go: Continue until it succeeds.
#
my $count = 0;
while( $count < 10 )
{
changePassword( $prefix, $passwd );
$count += 1;
}
print "Failed to setup root password\n";
print "-----------------------------\n";
#
# Don't look at this code.
#
# OK. Expect sometimes fails. It sucks.
#
# So how do we know if a password change operation fails? We take
# an MD5(/etc/passwd + /etc/shadow) and if they don't change we've
# failed.
#
# Upon success we will simply exit();
#
#
sub changePassword
{
my ( $prefix, $passwd ) = ( @_ );
#
# Find current checksum.
#
my $orig = checksum( $prefix );
#
# Create the expect object.
#
my $exp = Expect->spawn( "/usr/sbin/chroot",
$prefix,
"/usr/bin/passwd",
"root" )
or die "Cannot spawn the password under chroot: $!\n";
# prompt
unless ($exp->expect(5,"Enter new"))
{
print "Failed 1st prompt\n";
$exp->hard_close();
return;
}
# send + wait.
$exp->send( $passwd . "\n" );
sleep( 1 );
# confirm
unless ($exp->expect(5,"Retype new"))
{
print "Failed 2nd prompt\n";
$exp->hard_close();
return;
}
# send.
$exp->send( $passwd . "\n" );
# Closeup.
$exp->soft_close();
#
# Did it work?
#
my $updated = checksum( $prefix );
if ( $updated ne $orig )
{
print "Password setup correctly.\n";
exit;
}
else
{
print "Setting password failed.\n";
}
}
#
# Checksum /etc/passwd + /etc/shadow if they exist in the
# given chroot()
#
sub checksum
{
my( $prefix ) = ( @_ );
my $sum = '';
foreach my $file ( qw! /etc/passwd /etc/shadow ! )
{
if ( -e $prefix . "/" . $file )
{
#
# Open the file.
#
open(FILE, $prefix . "/" . $file)
or die "Can¡Çt open ¡Ç$prefix/$file¡Ç: $!";
binmode(FILE);
#
# Add the data
#
my $md5 = Digest::MD5->new;
while (<FILE>)
{
$md5->add($_);
}
close(FILE);
#
# Update the sum
#
$sum .= $md5->b64digest;
}
}
return $sum;
}

View File

@@ -1,44 +0,0 @@
#!/bin/sh
#
# This role helps to customize guest's /etc/resolv.conf
#
prefix=$1
#
# Source our common functions - this will let us install a Debian package.
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
echo "Installation problem"
fi
#
# Log our start
#
logMessage Script $0 starting
#
# WARNING :
#
# resolv.conf is backed up as resolv.conf.old during roles execution to
# permit the chrooted guest to be able to resolve during installation.
# Use resolv.conf.old name during hooks, it will be correctly renamed
# after hooks execution
#
#
# Create Guest's resolv.conf as resolv.conf.old (see WARNING before) :
#
cat <<RESOLV_CONF_EOF >${prefix}/etc/resolv.conf.old
nameserver 192.168.1.1
#search domain.tld
RESOLV_CONF_EOF
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -1,46 +0,0 @@
#!/bin/sh
#
# This role installs sudo with host sudoers file.
#
prefix=$1
#
# Source our common functions - this will let us install a Debian package.
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
echo "Installation problem"
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install sudo package
#
installDebianPackage ${prefix} sudo
#
# WARNING :
#
# Copying this file means that root users in guest will KNOW who is
# root on host.
#
#
# Copy dom0's file to domU.
#
cp /etc/sudoers ${prefix}/etc/
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Log our finish
#
logMessage Script $0 finished

2
t/.gitignore vendored
View File

@@ -1,2 +0,0 @@
# Automatically generated by modules.sh
/modules.t

View File

@@ -6,8 +6,11 @@ verbose:
@cd ..; prove --shuffle --verbose t/ @cd ..; prove --shuffle --verbose t/
modules: modules.sh modules: .PHONY
./modules.sh > modules.t ./modules.sh > modules.t
.PHONY:
true
clean: clean:
-rm *~ -rm *~

View File

@@ -45,8 +45,9 @@ foreach my $key ( sort keys %OPTIONS )
} }
} }
next if ( $key =~ /^mirror_/ ); next if ( $key =~ /mirror_/i );
next if ( $key =~ /_options$/ ); next if ( $key =~ /_options/i );
next if ( $key =~ /(serial_device|disk_device)/i );
is( $found, 1 , " Found documentation for '$key'" ); is( $found, 1 , " Found documentation for '$key'" );
} }

View File

@@ -59,7 +59,7 @@ sub testFile
# #
# Test we discovered some documented options. # Test we discovered some documented options.
# #
ok( $#documented > 1, "We found some options documented in $file." ); ok( $#documented > 1, "We found some options documented." );
@@ -105,11 +105,11 @@ sub testFile
#print " - strip comments : $o "; #print " - strip comments : $o ";
# #
# Remove "" or '' around it. # Remove "" from around it.
# #
if ( $o =~ /(["'])([^"']+)\1/ ) if ( $o =~ /"([^"]+)"/ )
{ {
$o = $2; $o = $1;
} }
#print " - remove quotes : $o "; #print " - remove quotes : $o ";
# #
@@ -125,18 +125,13 @@ sub testFile
# #
next if ( $o =~ /^[ \t]*$/ ); next if ( $o =~ /^[ \t]*$/ );
#
# Now split at pipe
#
foreach my $osplit (split(/\|/, $o)) {
# #
# Phew. Now we're done. # Phew. Now we're done.
# #
# This option '$osplit' is something we call GetOptions with. # This option '$o' is something we call GetOptions with.
# #
$accepted{$osplit} = 1; $accepted{$o} = 1;
}
} }
} }

View File

@@ -1,45 +0,0 @@
#!/usr/bin/perl -w
#
# Test that .gitignore is coherent
#
# Stéphane (kwisatz) Jourdois
# --
#
use strict;
use Test::More tests => 3;
BEGIN { use_ok( 'Git' ); }
# First, check that no tracked files are ignored
my $cmd = Git::command_output_pipe('ls-files', '--ignored', '--exclude-standard');
my $output;
while (<$cmd>) { $output .= "--> $_" }
close $cmd;
ok(!defined $output, 'No tracked file is ignored')
or diag(<<EOF
Check that the following tracked files _have_to_ be ignored, and then either :
- 'git rm' them
- modify .gitignore to not ignore them
EOF
. $output . "\n");
# Now, check that no untracked files are present
$cmd = Git::command_output_pipe('ls-files', '--others', '--exclude-standard');
undef $output;
while (<$cmd>) { $output .= "--> $_" }
close $cmd;
ok(!defined $output, 'No untracked file is present')
or diag(<<EOF
Check whether the following untracked files have to be ignored or
tracked, and either :
- 'git add' them
- modify .gitignore to ignore them
EOF
. $output . "\n");

View File

@@ -94,7 +94,7 @@ sub testHook
# 1:2345:respawn:/sbin/getty 38400 console # 1:2345:respawn:/sbin/getty 38400 console
# #
ok( $1 eq "1", "We found the first getty line." ); ok( $1 eq "1", "We found the first getty line." );
ok( $3 eq "hvc0", "Which does uses the correct driver: $3" ); ok( $3 eq "tty1", "Which does uses the correct driver: $3" );
} }
if ( $line =~ /^(.).*getty/ ) if ( $line =~ /^(.).*getty/ )

View File

@@ -25,11 +25,10 @@ use Test::More qw( no_plan );
EOF EOF
for i in `grep '^use ' -r .. | grep -v Expect | grep -v POSIX | grep -v Xen:: | grep -v Moose | awk '{print $2}' | tr -d for i in `rgrep '^use ' .. | grep -v Expect | grep -v POSIX | grep -v Xen:: | grep -v Moose | awk '{print $2}' | tr -d
\;\(\) | sort | uniq`; \ \;\(\) | sort | uniq`; \
do \ do \
echo "BEGIN{ use_ok( '$i' ); }"; \ echo "BEGIN{ use_ok( '$i' ); }"; \
echo "require_ok( '$i' );" ; \ echo "require_ok( '$i' );" ; \
printf '\n' ; \ printf '\n' ; \
done done

80
t/modules.t Executable file
View File

@@ -0,0 +1,80 @@
#!/usr/bin/perl -w -I..
#
# Test that all the Perl modules we require are available.
#
# This list is automatically generated by modules.sh
#
# Steve
# --
#
use Test::More qw( no_plan );
BEGIN{ use_ok( 'Carp' ); }
require_ok( 'Carp' );
BEGIN{ use_ok( 'Config' ); }
require_ok( 'Config' );
BEGIN{ use_ok( 'Digest::MD5' ); }
require_ok( 'Digest::MD5' );
BEGIN{ use_ok( 'English' ); }
require_ok( 'English' );
BEGIN{ use_ok( 'Env' ); }
require_ok( 'Env' );
BEGIN{ use_ok( 'File::Copy' ); }
require_ok( 'File::Copy' );
BEGIN{ use_ok( 'File::Find' ); }
require_ok( 'File::Find' );
BEGIN{ use_ok( 'File::Path' ); }
require_ok( 'File::Path' );
BEGIN{ use_ok( 'File::Slurp' ); }
require_ok( 'File::Slurp' );
BEGIN{ use_ok( 'File::Spec' ); }
require_ok( 'File::Spec' );
BEGIN{ use_ok( 'File::Temp' ); }
require_ok( 'File::Temp' );
BEGIN{ use_ok( 'Getopt::Long' ); }
require_ok( 'Getopt::Long' );
BEGIN{ use_ok( 'Pod::Usage' ); }
require_ok( 'Pod::Usage' );
BEGIN{ use_ok( 'strict' ); }
require_ok( 'strict' );
BEGIN{ use_ok( 'Test::More' ); }
require_ok( 'Test::More' );
BEGIN{ use_ok( 'Text::Template' ); }
require_ok( 'Text::Template' );
BEGIN{ use_ok( 'warnings' ); }
require_ok( 'warnings' );

View File

@@ -38,15 +38,9 @@ sub checkFile
# Nor about Makefiles # Nor about Makefiles
return if ( $file =~ /\/Makefile$/ ); return if ( $file =~ /\/Makefile$/ );
# Nor about dot files
return if ( $file =~ m{/\.[^/]+$} );
# Nor about files which start with ./debian/ # Nor about files which start with ./debian/
return if ( $file =~ /^\.\/debian\// ); return if ( $file =~ /^\.\/debian\// );
# Nor about Changlog
return if ( $file =~ /^\.\/ChangeLog$/ );
# Finally mercurial and git files are fine. # Finally mercurial and git files are fine.
return if ( $file =~ /\.(hg|git)\// ); return if ( $file =~ /\.(hg|git)\// );
# See if it is a shell/perl file. # See if it is a shell/perl file.

View File

@@ -11,7 +11,7 @@
use strict; use strict;
use File::Find; use File::Find;
use Test::More qw/ no_plan /; use Test::More;
eval "use Moose"; eval "use Moose";
plan skip_all => "Moose required for testing Perl syntax" plan skip_all => "Moose required for testing Perl syntax"
@@ -24,6 +24,8 @@ plan skip_all => "Moose required for testing Perl syntax"
# #
find( { wanted => \&checkFile, no_chdir => 1 }, '.' ); find( { wanted => \&checkFile, no_chdir => 1 }, '.' );
done_testing();
# #
# Check a file. # Check a file.
# #
@@ -41,12 +43,6 @@ sub checkFile
# Nor about Makefiles # Nor about Makefiles
return if ( $file =~ /\/Makefile$/ ); return if ( $file =~ /\/Makefile$/ );
# Nor about git files
return if ( $file =~ /^\.\/\.git\// );
# Nor about dot files
return if ( $file =~ m{/\.[^/]+$} );
# `modules.sh` is a false positive. # `modules.sh` is a false positive.
return if ( $file =~ /modules.sh$/ ); return if ( $file =~ /modules.sh$/ );

View File

@@ -1,7 +1,7 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
# #
# Test that the POD we include in our scripts is valid, via the external # Test that the POD we include in our scripts is valid, via the external
# podchecker command. # podcheck command.
# #
# Steve # Steve
# -- # --

View File

@@ -2,8 +2,6 @@ use strict;
use warnings; use warnings;
use Test::More; use Test::More;
push @INC, 'lib';
# Ensure a recent version of Test::Pod::Coverage # Ensure a recent version of Test::Pod::Coverage
my $min_tpc = 1.08; my $min_tpc = 1.08;
eval "use Test::Pod::Coverage $min_tpc"; eval "use Test::Pod::Coverage $min_tpc";

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