1
0
mirror of synced 2026-02-20 13:55:16 +00:00

Compare commits

...

207 Commits

Author SHA1 Message Date
Axel Beckert
12960c8f2b Release 4.4 beta 1 2013-08-23 19:31:47 +02:00
Axel Beckert
029faab59c Add build-dependencies on libdata-validate-{domain,ip,uri}-perl 2013-08-23 19:31:47 +02:00
Axel Beckert
cb5ce9ea5c Bump Standards-Version to 3.9.4 (no changes) 2013-08-23 19:08:42 +02:00
Axel Beckert
fbc903877a Declare POD encoding to be UTF-8 in bin/*
Fixes FTBFS with Perl 5.18.

Closes: #720519
2013-08-23 09:08:43 +02:00
Axel Beckert
fb8b494b41 Preliminary support for Ubuntu Saucy
Does not yet work due to missing support for Saucy in debootstrap.

Also move default mirror for Ubuntu Hardy from archive to old-releases
as Hardy is now EoL.
2013-07-11 01:49:46 +02:00
Axel Beckert
516a7a1625 Update descriptions of distributions 2013-07-11 01:30:41 +02:00
Axel Beckert
d0c4439a10 README: Update list of required Perl modules 2013-07-11 01:13:45 +02:00
Axel Beckert
87fc2a76a0 Remove some redundancy in the README 2013-07-11 00:59:33 +02:00
Axel Beckert
34838811f9 Reorder list of Perl modules in README alphabetically 2013-07-11 00:57:59 +02:00
Axel Beckert
ad68cdb46b Change CPAN links from search.cpan.org to metacpan.org 2013-07-11 00:55:51 +02:00
Axel Beckert
e5abe64ae0 Fix broken quoting in list of required binaries 2013-07-11 00:44:25 +02:00
Axel Beckert
9c47e5da4f Use File::Which instead of findBinary or which 2013-07-11 00:39:05 +02:00
Axel Beckert
b271bf6a63 TODO: Still to many backticks in use
Also merge the two findBinary TODOs
2013-07-11 00:26:12 +02:00
Axel Beckert
a72fbb5f79 TODO: The mess after hitting Ctrl-C has been fixed, too 2013-07-11 00:16:09 +02:00
Axel Beckert
149ad47c5f TODO: Remove #623443-related stuff. Fixed in 74f35d65 2013-07-11 00:13:28 +02:00
Axel Beckert
4442c1a17f TODO: Move remaining code deduplication to Break-Backwards-Compatibility list 2013-07-11 00:11:54 +02:00
Axel Beckert
be55a4a6f2 Remove reference to removed t/xen-tools.t from KNOWN_BUGS 2013-07-11 00:07:37 +02:00
Axel Beckert
5883b7a15c TODO: Generate ECDSA host keys where possible 2013-07-10 23:54:46 +02:00
Axel Beckert
9e05298832 Add dependency on ${perl:Depends} to fix dpkg-gencontrol warning 2013-07-10 22:55:20 +02:00
Axel Beckert
be05397249 Bump debhelper compatibility to 9
Update versioned debhelper build-dependency
2013-07-10 22:53:14 +02:00
Axel Beckert
3b72f2ee4b Mention that #715340 is fixed by 1de424a6 2013-07-10 22:45:05 +02:00
Axel Beckert
699025f33e Use Data::Validate::{Domain,IP} for IP addresses and hostname checks
Add corresponding dependencies on libdata-validate-{domain,ip}-perl.
2013-07-10 22:38:29 +02:00
Axel Beckert
74f35d6550 Better document and check requirements for --apt_proxy
See http://bugs.debian.org/623443 for the corresponding apt issue.

Also add a dependency on libdata-validate-uri-perl which is used to do
the syntax check.
2013-07-10 21:50:09 +02:00
Axel Beckert
72a2a637be Mention issue about #623443 in TODO 2013-07-09 22:38:42 +02:00
Axel Beckert
5ac0f15c32 Remove all redundant pod-inline occurrences of "=cut"
Also care that there are always two blank lines before each "=head1"
(except behind "=head1 NAME").
2013-04-18 20:41:51 +02:00
Axel Beckert
dcb9284636 Remove unused Perl modules Xen::Tools and Xen::Tools::Log
Further developement of the (if any) will happen in the git branch
"xen-tools-moose" where they are still available.

Also remove the according (already disabled) tests and test
modifications from the test suite.

Also remove no the more needed build-dependency on Moose as well as
one Makefile line installing the above mentioned Perl modules.
2013-04-18 20:17:33 +02:00
Axel Beckert
07622d8ed0 t/xen-delete-image.t: Check xen-delete-image exit code
Also run xen-delete-image verbose and print output.
2013-04-18 16:26:55 +02:00
Axel Beckert
081c0370d4 Properly clean up after t/xt-create-xen-config.t 2013-04-18 16:21:25 +02:00
Axel Beckert
ea209f085b Refactor some code duplication in xen-delete-image 2013-04-18 16:21:25 +02:00
Axel Beckert
a70b79f63f Hopefully catch all remaining "ARRAY(0x…).log" issues 2013-04-18 14:45:27 +02:00
Axel Beckert
c482220b99 Rework xci POD: New SYNOPSIS; add EXAMPLES, rename old SYNOPSIS to OPTIONS 2013-04-18 13:52:45 +02:00
Axel Beckert
dcd0bf09f1 Add reference for the three types of MAC relevant for DomUs 2013-04-16 18:03:33 +02:00
Axel Beckert
92a825b87b Axel's Break-Backwards-Compatibility Wishlist: MAC stuff 2013-04-16 17:57:12 +02:00
Axel Beckert
6871954f6e Merge branch 'lib-vs-share' 2013-04-11 19:49:53 +02:00
Axel Beckert
e9d8bd0896 xt-install-image: Don't bail out if only cdebootstrap is installed
There was a duplicated check on debootstrap being installed and only
one has been expanded when cdebootstrap support was added. So
xen-tools bailed out if debootstrap wasn't installed even if it had
been instructed to use cdebootstrap instead.

This also adds support for cdebootstrap-static.

Additionally xt-install-image dispatcher has been extended to hand
array refs of command paths instead of just single command paths.

Thanks to Elmar Heeb for reporting this issue!
2013-04-11 19:47:05 +02:00
Axel Beckert
9369fd2a03 Update debian/changelog 2013-04-11 19:18:41 +02:00
Axel Beckert
04dd81ec07 Mention http.debian.net as default mirror also in POD 2013-04-11 15:59:42 +02:00
Axel Beckert
d39255dc5e Reindent options in POD 2013-04-11 15:59:19 +02:00
Axel Beckert
5a48067d9e Make some x-c-i commandline options negatable
Update documentation and tests accordingly.

Also add pygrub = 1 as example to xen-tools.conf, now that the effect
can be reversed via commandline options.
2013-04-11 15:51:31 +02:00
Axel Beckert
6fc51d20be Update xen-tools.conf comments to be more concise and consistent
Thanks Elmar Heeb!
2013-04-11 13:08:31 +02:00
Axel Beckert
16dbe870f2 TODO: test for --size constraints
... and its prerequisites
2013-04-11 10:52:45 +02:00
Axel Beckert
cb3227d61b Don't only allow lowercase "b" for "bytes".
Also put some examples in the according error message.
2013-04-11 10:32:20 +02:00
Axel Beckert
a89aa86511 Consistent amount of blank lines in POD 2013-04-11 10:29:56 +02:00
Axel Beckert
555ce383d3 Switch from /usr/lib/xen-tools/ to /usr/share/xen-tools/ to properly adhere FHS 2013-04-05 20:19:22 +02:00
Axel Beckert
b29117be02 Ignore Devel::Cover cache 2013-03-22 16:58:59 +01:00
Axel Beckert
ff7ded28e8 Only the key for %ENV, but not for %CONFIG, needs to be modified 2013-03-14 00:10:18 +01:00
Axel Beckert
f0691c9a38 Merge branch 'master' of gitorious.org:xen-tools/xen-tools
Conflicts:
	debian/changelog
2013-03-14 00:01:05 +01:00
Axel Beckert
76d9d59510 Fix export of environment variables (dash vs underscore)
Previously they could contain dashes and then were only accessible
from within Perl, but not from within Bash.

From now on potential dashes in environment variable names are
converted to underscores ("_") before being exported. May affect some
hook or role scripts.
2013-03-13 23:29:52 +01:00
Axel Beckert
5342b04ac7 Some more TODOs (mostly refactoring + code cleanup) 2013-03-13 23:17:09 +01:00
Axel Beckert
01e525106b Use Test::NoTabs in t/no-tabs.t 2013-03-05 23:07:04 +01:00
Axel Beckert
5146706536 Document 4.3.1 in NEWS 2013-01-26 01:18:28 +01:00
Axel Beckert
dfa32a97ca Also switch xt-guess-suite-and-mirror's fallback to http.debian.net 2013-01-25 17:34:39 +01:00
Axel Beckert
c409759745 Rename NEWS to NEWS.markdown 2013-01-25 17:32:20 +01:00
Axel Beckert
149b92af77 Document 4.3 release date in NEWS 2013-01-25 17:30:17 +01:00
Axel Beckert
a4b3c9c568 Also use http.debian.net as default mirror for the debian-archive 2013-01-25 17:09:54 +01:00
Axel Beckert
dbb9124666 Use http.debian.net as default Debian mirror if no mirror is given
... i.e. if even xt-guess-suite-and-mirror is not used.
2013-01-25 17:09:19 +01:00
Axel Beckert
f2d30eaa63 xen-delete-image no more passes $CONFIG{hostname} as array to logprint_with_config
The deletion of failed attempts was logged to files named like
ARRAY(0xa9dd98).log because the hostname was passed twice, i.e. as
arrayref (which didn't hurt otherwise).
2013-01-25 15:22:42 +01:00
Axel Beckert
0709308c1f Save exit code $? at the beginning of the END block
Otherwise cleaning up by doing some system() calls garbles $? with
unwanted values.
2013-01-25 13:19:36 +01:00
Axel Beckert
d3baf1f8ba KNOWN BUGS: -1 +1 2013-01-25 13:03:23 +01:00
Axel Beckert
d7f219f160 Create /boot/grub/default if non-existent
Seems to be needed at least for Squeeze.
2013-01-24 23:14:34 +01:00
Axel Beckert
bc054b1b02 chomp the output of dpkg --print-architecture 2013-01-24 23:14:34 +01:00
Axel Beckert
f18285943c Call update-grub at the end of 82-install-grub-legacy to update menu.lst 2013-01-24 23:14:34 +01:00
Axel Beckert
780839988d Remove trailing blank line 2013-01-24 23:14:34 +01:00
Axel Beckert
025e20a1f1 Better check for grub-legacy availability which ignores virtual packages 2013-01-24 23:14:34 +01:00
Axel Beckert
9330b79d51 hooks/common.sh: Fix syntax error in installCentOS4Package wrapper. 2013-01-24 23:14:10 +01:00
Axel Beckert
979b6fb166 hooks/common.sh: installDebianPackage no more installs recommends 2013-01-24 23:07:56 +01:00
Axel Beckert
57c7d13c48 Factor out legacy grub menu.lst generation 2013-01-24 23:06:53 +01:00
Axel Beckert
1de424a69d Fix filesystem tools installation in 91-install-fs-tools
Was broken since 4.3rc1.

Merged 91-install-fs-tools back into 90-make-fstab. Added support for
RPM-based distributions, too, so it's more generic now.
2013-01-23 18:02:44 +01:00
Axel Beckert
505950dae0 isAPT: Also check for dpkg and rename it to isDeb
That way we should not try to use Debian/Ubuntu package names if
apt4rpm is available.
2013-01-23 17:47:13 +01:00
Axel Beckert
0c8b5d25c4 Factor out functions to test if we should use yum or apt 2013-01-23 17:40:00 +01:00
Axel Beckert
bce580658e hooks/common.sh: Rename installCentOS4Package to installRPMPackage
Add installCentOS4Package wrapper for backward compatibility.
2013-01-23 17:00:09 +01:00
Axel Beckert
b451260f0d TODO/KNOWN_BUGS: Add some hook issues noticed recently
Found during debugging error messages and warnings in log files.
2013-01-23 16:08:01 +01:00
Axel Beckert
af6e1435aa Mention in error message why xen-create-image thinks that an installation failed 2013-01-23 13:14:35 +01:00
Axel Beckert
290ca33840 Fix some typos and grammar in log messages 2013-01-23 13:14:35 +01:00
Axel Beckert
a1838d9030 Also use linux-image-virtual instead of linux-image-server for >= karmic 2013-01-23 13:14:35 +01:00
Axel Beckert
30ae761c27 Fix typo 2013-01-22 02:37:44 +01:00
Axel Beckert
9182aaccb7 Install grub-legacy in all pygrub-based DomUs 2013-01-22 02:35:27 +01:00
Axel Beckert
a2aa1b8a02 Factor out module-init-tools (or kmod) installation 2013-01-22 02:33:12 +01:00
Axel Beckert
03506de7e4 Refactoring: Normalize 80-kernel-install for Ubuntus 2013-01-22 02:01:13 +01:00
Axel Beckert
f71460358b chmod 644 everything in xen-tools/misc 2013-01-22 01:29:13 +01:00
Axel Beckert
8c2a2878df Ubuntu: install linux-image-virtual instead of linux-image-server
By default install linux-image-virtual instead of linux-image-server
on Ubuntu Intrepid and newer.

Hopefully closes: #640099, LP #839492
2013-01-22 01:18:57 +01:00
Axel Beckert
2e69bee531 Rename misc/{xen-tools → xen-tools.bash-completion}
This prevents name space cluttering and ambiguity in xen-tools/misc/.
2013-01-22 00:21:10 +01:00
Axel Beckert
e985d4151b Ship /etc/initramfs-tools/conf.d/xen-tools with MODULES=most
This is a necessary setting to generate Dom0 initrds which are also
suitable for DomU usage.

Trigger update-initramfs in the Debian package.
2013-01-22 00:17:27 +01:00
Axel Beckert
a4a4b7a8e7 Add default mount options for ext4, identical to ext2/ext3 2013-01-21 21:23:41 +01:00
Axel Beckert
a297aa4f5b Fix quoting in hooks/common/91-install-fs-tools 2013-01-21 16:32:10 +01:00
Axel Beckert
6423a67982 Handle module-init-tools → kmod transition in wheezy/raring gracefully 2013-01-21 16:20:03 +01:00
Axel Beckert
4dbb6fe189 Bump copyright years in xen-delete-image and xen-list-images 2013-01-18 02:25:06 +01:00
Axel Beckert
d38718b24b xen-create-image seems to work now again, too: remove TODO 2013-01-18 02:21:25 +01:00
Axel Beckert
53c013f1cc xen-delete-image now also understand --extension 2013-01-18 02:13:19 +01:00
Axel Beckert
6a59d0fd9b Properly ident --extension docs in xen-list-images' POD 2013-01-18 02:12:22 +01:00
Axel Beckert
4e7f58785f Fix Markdown syntax of reference style links in README 2013-01-18 01:55:57 +01:00
Axel Beckert
e240c63c8b README: Installing Dapper and Edgy no more works on Wheezy due to #659360 2013-01-18 01:37:52 +01:00
Axel Beckert
c39628cbe4 Overwork TLS disabling on Debian and Ubuntu 2013-01-18 01:26:11 +01:00
Axel Beckert
73dabead05 unMountImage may fail if $CONFIG{FAIL} is already set 2013-01-17 22:59:34 +01:00
Axel Beckert
ce1624b83e Remove redundant and broken second setting of mirror by distribution 2013-01-17 22:59:01 +01:00
Axel Beckert
97553c50fb Handle Sarge amd64 case properly
Uses File::Which, (build-) dependency on libfile-which-perl added
2013-01-17 22:48:15 +01:00
Axel Beckert
3456849ec8 Make t/xen-lists-images.t more strict: No more /i 2013-01-17 22:17:37 +01:00
Axel Beckert
dc5b36f8ef xen-list-images now also outputs the name of the config file 2013-01-17 22:15:21 +01:00
Axel Beckert
00623e2327 Add --extension option to xen-list-images 2013-01-17 22:13:34 +01:00
Axel Beckert
c6caa0a0ad Fix "--extension=" with empty parameter 2013-01-17 21:57:50 +01:00
Axel Beckert
13dbf65793 Mention that --keep does not prevent unmounting 2013-01-17 21:19:55 +01:00
Axel Beckert
d6144d45ea It's said that just "END" is better style than "sub END". 2013-01-17 21:16:22 +01:00
Axel Beckert
b682ad1817 Normalize redundant FAIL test 2013-01-17 21:16:22 +01:00
Axel Beckert
61df2a6c51 Trap SIGINT to unmount to temporary mount point
This makes END being called again after Ctrl-C.
2013-01-17 21:16:22 +01:00
Axel Beckert
c1e7cb717a Add optional argument to unMountImage and hence runCommand to allow failure 2013-01-17 21:16:22 +01:00
Axel Beckert
a223eedf0b Remove redundant unMountImage call 2013-01-17 20:55:42 +01:00
Axel Beckert
987cf32458 TODO: Move /usr/lib/xen-tools/ to /usr/share/xen-tools/ 2013-01-17 18:30:39 +01:00
Axel Beckert
dd15b27b85 Apply wrap-and-sort to debian/control 2013-01-17 18:06:40 +01:00
Axel Beckert
0defc0f0e3 Switch to a minimal dh style debian/rules
Override dh_auto_build as it triggers the nop target.
2013-01-17 18:05:12 +01:00
Axel Beckert
1f70c8f5d7 Use dh_installexamples with a debian/examples file
This was also the reason to move the examples around in the previous
commit. :-)
2013-01-17 17:53:31 +01:00
Axel Beckert
39c6bb5974 Move examples from debian/examples to examples 2013-01-17 17:51:16 +01:00
Axel Beckert
02240309b3 Bump Copyright years at multiple place 2013-01-17 17:09:37 +01:00
Axel Beckert
ed2c2d5a14 TODO: Obvious Sarge amd64 mirror issues 2013-01-17 16:49:34 +01:00
Axel Beckert
931f88f99a No more explicitly call "make manpages"
It's a depedency of "make install" in the next line anyway.
2013-01-16 18:00:26 +01:00
Axel Beckert
5d0bd617e0 Fix copy & paste error in binary-* targets in debian/rules 2013-01-16 17:59:39 +01:00
Axel Beckert
70e0115f94 Use dh_auto_{install,clean}; use "$(MAKE)" instead of "make" 2013-01-16 16:58:10 +01:00
Axel Beckert
1d16c86eba Remove explicit mentioning of upstream changelog in debian/rules
dh_installchangelogs finds it by itself if it exist. That way building
out of a freshly clone git repository does not fail due to a missing
upstream changelog.
2013-01-16 16:55:23 +01:00
Axel Beckert
e15d6cfd5e Revert "Install upstream ChangeLog only if it exists."
This reverts commit 35477c6172.

If the upstream ChangeLog did not exist, the debian/changelog wasn't
installed either. Which was not the intention.
2013-01-16 16:47:15 +01:00
Axel Beckert
ae33f60680 Makefile: Accept "DESTDIR" instead of "prefix=", too
That way it adheres more commonly used conventions and allows using dh_auto_install
2013-01-16 16:44:42 +01:00
Axel Beckert
459f418f12 No more specific milestones in KNOWN_BUGS 2012-12-13 14:49:06 +01:00
Axel Beckert
448a176e58 Bump version to 4.4~dev 2012-11-28 01:28:48 +01:00
Axel Beckert
0a7544c57a Replace some verbose print()s by logprint_with_config() 2012-11-28 01:10:58 +01:00
Axel Beckert
4830ce8b8a TODO: Unify --debug and --dumpconfig 2012-11-28 01:10:09 +01:00
Axel Beckert
00b316a2c4 Call findXenToolstack() also in xen-{delete,resize,update}-image 2012-11-28 01:09:24 +01:00
Axel Beckert
1efbc72676 Add --no-xen-ok option also to xen-create-image 2012-11-28 01:09:23 +01:00
Axel Beckert
8bd56bd67e Bugfix: Can't pass @_ to templated functions which expect scalars 2012-11-28 00:52:20 +01:00
Axel Beckert
ab9b033068 Fix some whitespace issues in t/argument-check.t 2012-11-28 00:04:25 +01:00
Axel Beckert
16dd2d9f2f Use done_testing instead of no_plan 2012-11-28 00:04:07 +01:00
Axel Beckert
00bb137012 New xen-delete-image option --no-xen-ok for disabling xenRunning tests 2012-11-27 23:53:03 +01:00
Axel Beckert
4c3e4abff7 Move findBinary to Xen::Tools::Common 2012-11-27 23:43:06 +01:00
Axel Beckert
6b64dcc122 Call scripts in tests with local library paths 2012-11-27 23:39:49 +01:00
Axel Beckert
9a9fa39f69 Make t/pod-coverage.t pass for Xen::Tools::Common 2012-11-27 23:38:26 +01:00
Axel Beckert
ffa0ac5681 Fix some logprint() calls with multiple arguments 2012-11-27 23:37:46 +01:00
Axel Beckert
b5499e48b4 Define fail() and logprint() helpers as early as necessary 2012-11-27 23:37:09 +01:00
Axel Beckert
2d79f13714 All runCommand() calls should pass %CONFIG 2012-11-27 23:31:21 +01:00
Axel Beckert
de9d3f2814 Replace one more die by fail 2012-11-27 23:30:07 +01:00
Axel Beckert
9da26382f4 Fix missing trailing semicolon 2012-11-27 23:30:07 +01:00
Axel Beckert
85f7d1b9fe Consequently use $CONFIG{FAIL} instead of $FAIL 2012-11-27 23:30:07 +01:00
Axel Beckert
d2f935b823 Make fail(), logprint() and logonly() get \%CONFIG, too 2012-11-27 23:29:59 +01:00
Axel Beckert
68d548ef60 Parameter templates for fail(), logprint() and logonly() 2012-11-27 23:04:45 +01:00
Axel Beckert
ea23c79431 Support Xen xl toolstack elsewhere than xen-create-image 2012-11-27 22:49:56 +01:00
Axel Beckert
76fbd23423 Move findXenToolstack() to Xen::Tools::Common 2012-11-27 22:48:37 +01:00
Axel Beckert
494ec02a7c Merge branch 'master' into code-deduplication
Conflicts:
	bin/xen-create-image
	bin/xen-create-nfs
	bin/xt-create-xen-config
2012-11-27 22:40:08 +01:00
Axel Beckert
83eede665c Fix warning about no_plan usage in t/hook-inittab.t 2012-11-27 22:29:04 +01:00
Axel Beckert
8f1f298551 New option to dump contents of %CONFIG
Probably only needed for debugging.
2012-11-27 22:28:38 +01:00
Axel Beckert
e57e7f16eb Preliminary support for the Xen xl toolstack
(xen-create-image supported only so far)
2012-11-27 22:26:30 +01:00
Axel Beckert
b54d5b84f9 Refactoring: Replace $options with $option as it contains just one option 2012-11-27 18:26:47 +01:00
Axel Beckert
b99ca853e1 Replace system() by runCommand() 2012-11-27 16:01:27 +01:00
Axel Beckert
e7b710d43a No more refer to forking in the comments 2012-11-27 13:24:33 +01:00
Axel Beckert
6f2814f414 Merge branch 'master' into code-deduplication
Conflicts:
	bin/xen-create-image
2012-11-27 13:22:34 +01:00
Axel Beckert
874d1fcfb0 No more mention xm bash-completion file. It has been removed. 2012-11-27 13:13:14 +01:00
Axel Beckert
814adbd85a Fix typo in README 2012-11-22 20:49:00 +01:00
Axel Beckert
74ef51eb26 Fix even more Markdown indenting 2012-11-15 20:09:37 +01:00
Axel Beckert
ff4620c39a Fix some Markdown indenting 2012-11-15 20:06:22 +01:00
Axel Beckert
bac1d6c63b Use .markdown instead of .mdwn as GitHub doesn't recognize the latter 2012-11-15 18:38:26 +01:00
Axel Beckert
0842ddd128 Converting a first bunch of documentation to Markdown format 2012-11-15 18:29:38 +01:00
Axel Beckert
026e47ac83 Preliminary support for Debian Jessie and Ubuntu Raring
Also set the default mirror for Ubuntu Natty to
old-releases.ubuntu.com as it's end of life and will move there soon.
2012-11-15 16:55:10 +01:00
Axel Beckert
b116f1cca7 Update contact information in SUPPORT 2012-11-14 00:18:26 +01:00
Axel Beckert
a87b0d1b2c Remove CVS revisions from --version output 2012-11-14 00:02:54 +01:00
Axel Beckert
80edc04573 Merge branch 'master' of github.com:xtaran/xen-tools
Conflicts:
	debian/changelog
2012-11-13 23:38:30 +01:00
Axel Beckert
3b7750e9a9 Also suppport elevator=noop for pygrub 2012-11-13 23:35:20 +01:00
Axel Beckert
a7cc86c567 Default DomUs to use the noop scheduler (Closes: #693131) 2012-11-13 23:10:04 +01:00
Axel Beckert
442021849d Also recognize M and G as size unit for --memory (Closes: #691320)
Document all recognized units.
2012-11-13 22:55:53 +01:00
Axel Beckert
446e157b80 Move code for --boot feature to END block.
Fixes missing SSH fingerprint display if --boot was used. (Closes: #679183)

Remove a redundant unsetting of $MOUNT_POINT. Guard a potentially
second call to the not idempotent unMountImage().
2012-11-13 22:41:47 +01:00
Axel Beckert
1dbb1f191f Use local parameter instead of global variable in unMountImage 2012-11-13 22:29:46 +01:00
Axel Beckert
adca82e808 2 new TODOs: Remove CVS keywords, uncouple auto-start from --boot 2012-11-13 20:45:50 +01:00
Axel Beckert
324fff9f7e Execute END block not on --version/--help/--manual (Closes: #684346) 2012-11-13 19:47:36 +01:00
Axel Beckert
7b908a4069 Fix symbolic link hooks/centos-6/15-setup-arch (Closes: #690299) 2012-11-13 18:16:02 +01:00
Axel Beckert
b233cb614d Bump version to 4.3.1+dev 2012-11-13 18:07:42 +01:00
Axel Beckert
8523d76c14 Document ideas about authorized_keys 2012-10-26 15:14:38 +02:00
Axel Beckert
35477c6172 Install upstream ChangeLog only if it exists.
The upstream changelog is generated during the upstream release
process, but expected when building the binary .debs. Make its
inclusion optional in the binary .debs.
2012-08-13 00:37:41 +02:00
Axel Beckert
b692dbbe75 Add forgotten section header in gbp.conf 2012-08-12 19:49:05 +02:00
Axel Beckert
26b4c1ed90 Add debian/gbp.conf for git-buildpackage support 2012-08-12 19:44:36 +02:00
Axel Beckert
7860d5ac4e Release 4.3.1 RC1 unmodified as 4.3.1 2012-06-30 16:45:59 +02:00
Axel Beckert
bb54ee7868 4.3.1 release candidate 1
Will likely just appear in the Ubuntu PPA to check if it finally build
for Ubuntu again
2012-06-30 16:07:41 +02:00
Axel Beckert
6a5506768c Changelog entry for t/hook-tls.t failures on 32-bit 2012-06-27 01:52:12 +02:00
Axel Beckert
d6e33edb5b Only run testTLSDisabling if distribution actually has 10-disable-tls 2012-06-27 01:49:56 +02:00
Axel Beckert
611d6c4eb4 Ignore hooks/common in t/hook-tls.t 2012-06-27 01:49:21 +02:00
Axel Beckert
0cde7cdf39 t/hook-tls.t: Always output tested distribution 2012-06-27 01:41:42 +02:00
Axel Beckert
cde5617a29 Use "rm -vf" instead of "-rm" in t/Makefile 2012-06-27 01:33:47 +02:00
Axel Beckert
74411f970b Remove t/modules.t in upstream's t/Makefile
... instead of remove it in debian/rules' clean target.

Call clean target of t/Makefile also from clean target of toplevel
Makefile.
2012-06-27 01:32:41 +02:00
Axel Beckert
3383b6dacf Bump version to 4.3+dev 2012-06-27 01:31:09 +02:00
Axel Beckert
d9f8a3fc31 Release 4.3 2012-06-27 00:03:56 +02:00
Axel Beckert
5703f8b5c9 Remove generated file t/modules.t in clean target
Otherwise the package wouldn't build twice in a row.

It didn't hurt while developing since it's listed in .gitignore. :-)
2012-06-27 00:03:56 +02:00
Axel Beckert
f67c7e25c8 Don't remove stamp files manually, dh_clean does that already 2012-06-27 00:03:56 +02:00
Axel Beckert
8dbd0ef7dc Switch to source format to "3.0 (quilt)" 2012-06-26 22:32:52 +02:00
Axel Beckert
58a050218f Remove most Mercurial traces 2012-06-08 21:45:49 +02:00
Axel Beckert
3ce7398cf6 Add bug report reference to FTBFS in testsuite 2012-06-08 21:28:28 +02:00
Axel Beckert
0ec64f6926 Rewrite current changelog entry; start new NEWS entry 2012-06-08 20:36:34 +02:00
Axel Beckert
fa9a420490 Add build-dependency on git for t/gitignore.t 2012-06-08 20:31:05 +02:00
Axel Beckert
c212cfb08f Add build-dependency on Test::Pod::Coverage for t/pod-coverage.t 2012-06-08 18:54:53 +02:00
Axel Beckert
c400b6644a Add build-dependency on Moose for t/perl-syntax.t 2012-06-08 18:51:28 +02:00
Axel Beckert
917d3d6b2a Skip t/hook-inittab.t if /etc/inittab is not present
Fixes FTBFS on Ubuntu.
2012-06-08 18:41:58 +02:00
Axel Beckert
8ba16d0e7a Disable tests of not yet used Xen::Tools perl modules.
Fixes FTBFS in test suite due to not satisifed Moose dependency in
Xen::Tools::Log.
2012-06-08 17:37:28 +02:00
Axel Beckert
f58a9faa6a Merge branch 'master' into code-deduplication 2012-05-31 01:29:11 +02:00
Axel Beckert
b1476676fe Xen::Tools::Common should return true 2012-05-31 01:21:35 +02:00
Axel Beckert
a23f31077a Call commands in tests with proper search path for perl modules 2012-05-31 01:19:23 +02:00
Axel Beckert
34ccb63f64 Move functions fail, logonly and logprint to Xen::Tools::Common
They're used in there
2012-05-31 01:10:14 +02:00
Axel Beckert
ed91f1fc43 Merge branch 'master' into code-deduplication
Conflicts:
	bin/xen-create-image
2012-05-31 01:07:59 +02:00
Axel Beckert
65d76b6aa4 Deduplicate setupAdminUsers 2011-11-16 01:44:11 +01:00
Axel Beckert
0f71f545df deduplicate runCommand()
Version taken from xen-create-image. Needed a small hack WRT $FAIL.
2011-11-16 01:34:23 +01:00
Axel Beckert
2de01d8cbc deduplicate xenRunning() 2011-11-16 01:10:51 +01:00
Axel Beckert
1d45cd33ab Use function prototypes in Xen::Tools::Common 2011-11-16 01:02:01 +01:00
Axel Beckert
eabb327786 Remove all occurrences of 'sub readConfigurationFile' in bin/.
Use the version from Xen::Tools::Common instead
2011-11-16 00:55:12 +01:00
Axel Beckert
8835b9134b Add lib to Perl search path in t/perl-syntax.t 2011-11-16 00:47:57 +01:00
Axel Beckert
fec2114caf Merge branch 'master' into code-deduplication 2011-11-16 00:35:53 +01:00
Axel Beckert
24cd27b737 Create new Perl module Xen::Tools::Common, start with xen-create-nfs' readConfigurationFile function 2011-11-16 00:19:20 +01:00
139 changed files with 2305 additions and 3263 deletions

4
.gitignore vendored
View File

@@ -5,7 +5,6 @@
.*
# but we _wan't_ those dot-files
!.gitignore
!.hgignore
!.mailmap
# ChangeLog is generated during make
@@ -29,3 +28,6 @@
# backups created by "make update-version"
*.bak
# Devel::Cover cache
cover_db/

View File

@@ -1,5 +0,0 @@
(^|/)CVS($|/)
(^|/)\.hg($|/)
(^|/)\.hgtags($|/)
ChangeLog
~$

27
BUGS
View File

@@ -1,27 +0,0 @@
Reporting Bugs
--------------
To report a bug please use the xen-tools-discuss mailing list:
http://xen-tools.org/software/xen-tools/lists.html
If you're capable of fixing it yourself a patch is appreciated,
and a test case would be a useful bonus.
Known Bugs
----------
The Debian bug tracker contains a list of all currently
open issues which have been reported by the users of the Debian
package (the primary user-base):
http://bugs.debian.org/xen-tools
If you're running the code on a Debian host system then reporting
bugs against this package is a good thing to do; by doing so you
allow others to view issues, and I check the bug-page regularly.
Steve
--

23
BUGS.markdown Normal file
View File

@@ -0,0 +1,23 @@
Reporting Bugs
==============
To report a bug please use the [xen-tools-discuss* mailing
list](http://xen-tools.org/software/xen-tools/lists.html).
If you're capable of fixing it yourself a patch is appreciated, and a
test case would be a useful bonus.
Known Bugs
==========
The Debian bug tracker contains a [list of all currently open
issues](http://bugs.debian.org/xen-tools) which have been reported by
the users of the Debian package (the primary user-base).
If you're running the code on a Debian host system then reporting bugs
against this package is a good thing to do; by doing so you allow
others to view issues, and I check the bug-page regularly.
--
The Xen-Tools Developer Team

View File

@@ -1,46 +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
* partitions were mounted in config file order, not in mountpoint order.
That implies that if you specified :
/boot
/
in that order, / was mounted _over_ /boot, and you would not _see_ /boot.
Xen-Tools would then install boot on your / partition, and your boot device
was just empty and unbootable.
Workaround for 4.2 is to write your partition file such as mounts overlap
correctly when mounted in specified order.
Current (unreleased) fix is to sort by mountpoint length.
Fix would be to reproduce what mount does with mount -a.
* xen-create-image doesn't unmount the tempdir properly if /proc wasn't mounted inside
* xen-create-image says on startup summary that the Debian mirror is
used even if Ubuntu is going to be installed (and works)
* xen-list-images does not honour --extension
* --extension='' (i.e. empty string) no more works
Bugs to fix later
-----------------
t/xen-tools.t can't really test Xen::Tools as the latter requires a
local Xen installation. For proper testing, a dummy set of Xen
configuration files and configurable paths to them in Xen::Tools would
be necessary.

34
KNOWN_BUGS.markdown Normal file
View File

@@ -0,0 +1,34 @@
KNOWN BUGS in xen-tools
=======================
Bugs to fix before next release
-------------------------------
[None so far]
Bugs to fix rather soon
-----------------------
* `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.
[Bug Report](http://xen-tools.org/pipermail/xen-tools-discuss/2010-May/000757.html)
* partitions were mounted in config file order, not in mountpoint order.
That implies that if you specified :
/boot
/
in that order, `/` was mounted _over_ `/boot`, and you would not
_see_ `/boot`. Xen-Tools would then install `boot` on your `/`
partition, and your boot device was just empty and unbootable.
Workaround for 4.2 is to write your partition file such as mounts overlap
correctly when mounted in specified order.
Current (unreleased) fix is to sort by mountpoint length.
Fix would be to reproduce what mount does with mount `-a`.

View File

@@ -3,7 +3,7 @@ xen-tools
---------
Copyright (c) 2005-2009: Steve Kemp. All rights reserved.
Copyright (c) 2010-2012: The Xen-Tools Development Team, currently consisting of:
Copyright (c) 2010-2013: The Xen-Tools Development Team, currently consisting of:
Axel Beckert <abe@deuxchevaux.org>,
Dmitry Nedospasov <dmitry@nedos.net>, and
Stéphane Jourdois <sjourdois@gmail.com>

133
Makefile
View File

@@ -14,17 +14,16 @@
#
TMP ?= /tmp
DIST_PREFIX = ${TMP}
VERSION = 4.3rc1
VERSION = 4.4beta1
DEBVERSION = $(shell echo $(VERSION)|sed 's/\(rc\|pre\|beta\|alpha\)/~\1/')
BASE = xen-tools
VCS = $(shell if git ls-files > /dev/null; then echo git; \
elif hg st > /dev/null; then echo hg; \
else echo cannot-determine-used-vcs; fi)
VCS = git
#
# Installation prefix, useful for the Debian package.
#
prefix=
DESTDIR=
prefix=${DESTDIR}
nop:
@@ -70,6 +69,7 @@ clean:
@if [ -d debian/xen-tools ]; then rm -rf ./debian/xen-tools; fi
@if [ -e $(BASE)-$(VERSION).tar.gz ]; then rm $(BASE)-$(VERSION).tar.gz ; fi
@if [ -e $(BASE)-$(VERSION).tar.gz.asc ]; then rm $(BASE)-$(VERSION).tar.gz.asc ; fi
cd t; $(MAKE) clean
#
@@ -95,7 +95,7 @@ fixup-perms:
chmod 644 etc/xen-tools.conf
chmod 644 etc/xm.tmpl
chmod 644 etc/xm-nfs.tmpl
chmod 644 misc/xen-tools misc/README
chmod 644 misc/*
#
# Install files to /etc/
@@ -110,8 +110,10 @@ install-etc:
cp etc/xm.tmpl ${prefix}/etc/xen-tools/
cp etc/xm-nfs.tmpl ${prefix}/etc/xen-tools/
cp partitions/*-* ${prefix}/etc/xen-tools/partitions.d/
-mkdir -p ${prefix}/etc/bash_completion.d
cp misc/xen-tools ${prefix}/etc/bash_completion.d/
-mkdir -p ${prefix}/etc/bash_completion.d/
cp misc/xen-tools.bash-completion ${prefix}/etc/bash_completion.d/xen-tools
-mkdir -p ${prefix}/etc/initramfs-tools/conf.d/
cp misc/xen-tools.initramfs-tools ${prefix}/etc/initramfs-tools/conf.d/xen-tools
#
@@ -145,60 +147,63 @@ install-bin:
#
install-hooks:
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-5.d/
mkdir -p ${prefix}/usr/lib/xen-tools/centos-6.d/
mkdir -p ${prefix}/usr/lib/xen-tools/fedora-core-6.d/
cp -R hooks/centos-4/*-* ${prefix}/usr/lib/xen-tools/centos-4.d
cp -R hooks/centos-5/*-* ${prefix}/usr/lib/xen-tools/centos-5.d
cp -R hooks/centos-6/*-* ${prefix}/usr/lib/xen-tools/centos-6.d
cp -R hooks/fedora-core-6/*-* ${prefix}/usr/lib/xen-tools/fedora-core-6.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-4.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-5.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-7.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-8.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-9.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-10.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-11.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-12.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-13.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-14.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-15.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-16.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s fedora-core-6.d fedora-core-17.d
mkdir -p ${prefix}/usr/lib/xen-tools/debian.d/
cp -R hooks/debian/*-* ${prefix}/usr/lib/xen-tools/debian.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sarge.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d etch.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 wheezy.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 stable.d
mkdir -p ${prefix}/usr/lib/xen-tools/gentoo.d/
cp -R hooks/gentoo/*-* ${prefix}/usr/lib/xen-tools/gentoo.d
mkdir -p ${prefix}/usr/lib/xen-tools/dapper.d/
cp -R hooks/dapper/*-* ${prefix}/usr/lib/xen-tools/dapper.d/
mkdir -p ${prefix}/usr/lib/xen-tools/edgy.d/
cp -R hooks/edgy/*-* ${prefix}/usr/lib/xen-tools/edgy.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s edgy.d feisty.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s edgy.d gutsy.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s edgy.d hardy.d
mkdir -p ${prefix}/usr/lib/xen-tools/intrepid.d/
cp -R hooks/intrepid/*-* ${prefix}/usr/lib/xen-tools/intrepid.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s intrepid.d jaunty.d
mkdir -p ${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 maverick.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d natty.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d oneiric.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d precise.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d quantal.d
cp hooks/common.sh ${prefix}/usr/lib/xen-tools
cp -r hooks/common ${prefix}/usr/lib/xen-tools
for i in ${prefix}/usr/share/xen-tools/*.d; do if [ -L "$$i" ]; then rm -vf "$$i"; fi; done
mkdir -p ${prefix}/usr/share/xen-tools/centos-4.d/
mkdir -p ${prefix}/usr/share/xen-tools/centos-5.d/
mkdir -p ${prefix}/usr/share/xen-tools/centos-6.d/
mkdir -p ${prefix}/usr/share/xen-tools/fedora-core-6.d/
cp -R hooks/centos-4/*-* ${prefix}/usr/share/xen-tools/centos-4.d
cp -R hooks/centos-5/*-* ${prefix}/usr/share/xen-tools/centos-5.d
cp -R hooks/centos-6/*-* ${prefix}/usr/share/xen-tools/centos-6.d
cp -R hooks/fedora-core-6/*-* ${prefix}/usr/share/xen-tools/fedora-core-6.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-4.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-5.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-7.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-8.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-9.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-10.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-11.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-12.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-13.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-14.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-15.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-16.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s fedora-core-6.d fedora-core-17.d
mkdir -p ${prefix}/usr/share/xen-tools/debian.d/
cp -R hooks/debian/*-* ${prefix}/usr/share/xen-tools/debian.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d sarge.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d etch.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d lenny.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d squeeze.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d wheezy.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d jessie.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d sid.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d testing.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s debian.d stable.d
mkdir -p ${prefix}/usr/share/xen-tools/gentoo.d/
cp -R hooks/gentoo/*-* ${prefix}/usr/share/xen-tools/gentoo.d
mkdir -p ${prefix}/usr/share/xen-tools/dapper.d/
cp -R hooks/dapper/*-* ${prefix}/usr/share/xen-tools/dapper.d/
mkdir -p ${prefix}/usr/share/xen-tools/edgy.d/
cp -R hooks/edgy/*-* ${prefix}/usr/share/xen-tools/edgy.d/
-cd ${prefix}/usr/share/xen-tools/ && ln -s edgy.d feisty.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s edgy.d gutsy.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s edgy.d hardy.d
mkdir -p ${prefix}/usr/share/xen-tools/intrepid.d/
cp -R hooks/intrepid/*-* ${prefix}/usr/share/xen-tools/intrepid.d/
-cd ${prefix}/usr/share/xen-tools/ && ln -s intrepid.d jaunty.d
mkdir -p ${prefix}/usr/share/xen-tools/karmic.d/
cp -R hooks/karmic/*-* ${prefix}/usr/share/xen-tools/karmic.d/
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d lucid.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d maverick.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d natty.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d oneiric.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d precise.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d quantal.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d raring.d
-cd ${prefix}/usr/share/xen-tools/ && ln -s karmic.d saucy.d
cp hooks/common.sh ${prefix}/usr/share/xen-tools
cp -r hooks/common ${prefix}/usr/share/xen-tools
#
@@ -206,7 +211,6 @@ install-hooks:
#
install-libraries:
-mkdir -p ${prefix}/usr/share/perl5/Xen/Tools
cp ./lib/Xen/*.pm ${prefix}/usr/share/perl5/Xen
cp ./lib/Xen/Tools/*.pm ${prefix}/usr/share/perl5/Xen/Tools
#
@@ -240,7 +244,6 @@ release: tidy fixup-perms update-version update-modules clean changelog
rm -f $(DIST_PREFIX)/$(BASE)-$(VERSION).tar.gz
cp -R . $(DIST_PREFIX)/$(BASE)-$(VERSION)
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/debian
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/.hg*
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/.git*
cd $(DIST_PREFIX) && tar -cvf $(DIST_PREFIX)/$(BASE)-$(VERSION).tar $(BASE)-$(VERSION)/
gzip $(DIST_PREFIX)/$(BASE)-$(VERSION).tar
@@ -300,7 +303,9 @@ uninstall:
-rm -rf ${prefix}/etc/xen-tools/skel
-rmdir ${prefix}/etc/xen-tools/
-rm -f ${prefix}/etc/bash_completion.d/xen-tools
# Maybe needed to remove older releases of xen-tools
rm -rf ${prefix}/usr/lib/xen-tools
rm -rf ${prefix}/usr/share/xen-tools
rm -f ${prefix}/usr/share/man/man8/xen-create-image.8.gz
rm -f ${prefix}/usr/share/man/man8/xen-delete-image.8.gz
rm -f ${prefix}/usr/share/man/man8/xen-list-images.8.gz

View File

@@ -1,3 +1,24 @@
xen-tools 4.3.1 (released 30-Jun-2012)
======================================
Bugfix Release only
xen-tools 4.3 (released 26-Jun-2012)
====================================
Bug Fixes
---------
* Fix several testuite failures depending on the build host's
installation.
Other Changes
-------------
* Remove most Mercurial traces
xen-tools 4.3rc1 (released 08 Jun 2012)
=======================================

173
README
View File

@@ -1,173 +0,0 @@
xen-tools
---------
Homepage:
http://www.xen-tools.org/software/xen-tools
Git Repository:
http://gitorious.org/xen-tools
Mailing Lists:
http://www.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.
Using this software, you can easily create new Xen guests configured
to be accessible over the network via OpenSSH.
xen-tools currently has scripts to install most releases of Debian
(starting with 3.1 "Sarge") and Ubuntu (starting with 6.06 LTS
"Dapper") and some RPM-based distributions. On the Dom0 side all
current Xen supporting distributions should work.
However, currently only Debian and Ubuntu releases are tested and
known to work, i.e.:
Debian:
* Sarge 3.1 (i386 and DomU only)
* Etch 4.0 (Dom0 no more tested)
* Lenny 5.0
* Squeeze 6.0
* Wheezy 7.0
* Sid (works at least at the moment of writing :-)
Ubuntu (only DomUs tested):
* Dapper Drake 6.06
* Edgy Eft 6.10
* Feisty Fawn 7.04
* Gutsy Gibbon 7.10
* Hardy Heron 8.04 (see [1])
* Interpid Ibex 8.10
* Jaunty Jackaplope 9.04
* Karmic Koala 9.10
* Lucid Lynx 10.04
* Maverick Meerkat 10.10
* Natty Narwhal 11.04
* Oneiric Ocelot 11.10
* Precise Pangolin 12.04
* Quantal Quetzal 12.10 (preliminary support as it's not yet available)
CentOS (only DomUs tested, pygrub support incomplete):
* CentOS 5
* CentOS 6
[1] There is an issue with debootstrap on hardy not installing ksyslogd
This can be fixed by chrooting into the newly installed system
and removing the startup scripts. See:
http://www.linux-vserver.org/Installing_Ubuntu_8.04_Hardy_as_guest
Xen-Tools are available prepackaged in Debian and as source tar-ball
for local installation. Installing from source should work flawlessly
on most Linux systems that meet the installation requirements.
Requirements
------------
To use these tools you'll need the following software:
* debootstrap
* Perl
* The Perl module "Text::Template"
* The Perl module "Config::IniFiles"
- Both of these modules are available as Debian packages,
or direct from http://www.cpan.org/ for non-Debian distributions.
* Make, if you are not installing through a package manager
You can try to install RPM-based distributions such as CentOS, or
Fedora Core, but you will need a correctly installed and configured
"rinse" package. This is currently not supported.
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
unmaintained) xen-shell package which is available from:
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
-----------
Here is a brief description of each included script, for more
thorough documentation please consult the appropriate man page.
xen-create-image
----------------
This script is designed to create new images which may be used
with the Xen hypervisor.
This script performs the initial setup, then delegates the real
work to a collection of helper scripts:
* xt-install-image
Installs a distribution into a directory.
* xt-customize-image
Run a collection of hook scripts to configure the freshly
installed system.
* xt-create-xen-config
Create a configuration file in /etc/xen such that Xen can
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
--------------
This script is similar in spirit to xen-create-image, but much
less complex. It allows the creation of Xen guests which are
diskless, mounting their root filesystem over a remote NFS-share.
There are not many options to tweak, but still a useful addition
to the suite.
xen-delete-image
----------------
This script will allow you to completely remove Xen instances
which have previously been created by xen-create-image, this
includes removing the storage block devices from the system,
and deleting the Xen configuration file.
xen-list-images
---------------
List all the created images beneath a given root directory along
with a brief overview of their setup details.
xen-update-image
----------------
This script runs "apt-get update; apt-get upgrade" for a given
Xen image.
NOTES:
* The image should not be running or corruption will occur!
* The script should only be used for Xen instances of Debian or
a Debian-derived distribution.
--
The Xen-Tools Developer Team

191
README.markdown Normal file
View File

@@ -0,0 +1,191 @@
xen-tools
=========
* [Homepage](http://www.xen-tools.org/software/xen-tools)
* Git Repository:
* [at Gitorious](http://gitorious.org/xen-tools)
* [at GitHub](http://github.com/xtaran/xen-tools)
* [Mailing Lists](http://www.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.
Using this software, you can easily create new
[Xen](http://www.xen.org) guests configured to be accessible over the
network via [OpenSSH](http://www.openssh.org/).
xen-tools currently has scripts to install most releases of
[Debian](http://www.debian.org/) (starting with 3.1 "Sarge") and
[Ubuntu](http://www.ubuntu.com/) (starting with 6.06 LTS "Dapper") and
some RPM-based distributions. On the Dom0 side all current Xen
supporting distributions should work.
However, currently only Debian and Ubuntu releases are tested and
known to work reliably, i.e.:
### Debian
* Sarge 3.1 (i386 and DomU only)
* Etch 4.0 (Dom0 no more tested)
* Lenny 5.0
* Squeeze 6.0
* Wheezy 7
* Jessie 8 (under developement)
* Sid (always under developement; works at least at the moment of writing :-)
### Ubuntu
(only DomUs tested)
* Dapper Drake 6.06 (needs editing of `/usr/share/debootstrap/scripts/dapper` since at least debootstrap version 1.0.37, see [#659360][1])
* Edgy Eft 6.10 (needs editing of `/usr/share/debootstrap/scripts/edgy` since at least debootstrap version 1.0.37, see [#659360][1])
* Feisty Fawn 7.04
* Gutsy Gibbon 7.10
* Hardy Heron 8.04 (see [Installing Ubuntu 8.04 as DomU][2])
* Interpid Ibex 8.10
* Jaunty Jackaplope 9.04
* Karmic Koala 9.10
* Lucid Lynx 10.04
* Maverick Meerkat 10.10
* Natty Narwhal 11.04
* Oneiric Ocelot 11.10
* Precise Pangolin 12.04
* Quantal Quetzal 12.10
* Raring Ringtail 13.04
* Saucy Salamander 13.10 (under developement)
[1]: http://bugs.debian.org/659360
"debootstrap in Wheezy can no more build Ubuntu Edgy or earlier"
[2]: http://www.linux-vserver.org/Installing_Ubuntu_8.04_Hardy_as_guest
"There is an issue with debootstrap on hardy not installing ksyslogd."
### CentOS
(only DomUs tested, pygrub support incomplete)
* CentOS 5
* CentOS 6
Packages
--------
xen-tools are available prepackaged in Debian (and derivates) and as
source tar-ball for local installation. Installing from source should
work flawlessly on most Linux systems that meet the installation
requirements.
Requirements
------------
To use these tools you'll need the following software:
* [debootstrap](http://packages.debian.org/debootstrap)
* Perl and the following Perl modules
* [Config::IniFiles](http://metacpan.org/release/Config-IniFiles)
([Debian Package libconfig-inifiles-perl](http://packages.debian.org/libconfig-inifiles-perl))
* [Text::Template](http://metacpan.org/release/Text-Template)
([Debian Package libtext-template-perl](http://packages.debian.org/libtext-template-perl))
* [Data::Validate::Domain](http://metacpan.org/release/Data-Validate-Domain)
([Debian Package libdata-validate-domain-perl](http://packages.debian.org/libdata-validate-domain-perl))
* [Data::Validate::IP](http://metacpan.org/release/Data-Validate-IP)
([Debian Package libdata-validate-ip-perl](http://packages.debian.org/libdata-validate-ip-perl))
* [Data::Validate::URI](http://metacpan.org/release/Data-Validate-URI)
([Debian Package libdata-validate-uri-perl](http://packages.debian.org/libdata-validate-uri-perl))
* [File::Slurp](http://metacpan.org/release/File-Slurp)
([Debian Package libfile-slurp-perl](http://packages.debian.org/libfile-slurp-perl))
* [File::Which](http://metacpan.org/release/File-Which)
([Debian Package libfile-which-perl](http://packages.debian.org/libfile-which-perl))
* and some more modules which are part of the Perl core and hence do not need to be installed separately.
* Make, if you are not installing through a package manager
You can try to install RPM-based distributions such as CentOS, or
Fedora Core, but you will need a correctly installed and configured
[rinse](http://packages.debian.org/rinse) package. This is currently
not fully supported.
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
unmaintained) [xen-shell](http://xen-tools.org/software/xen-shell/)
project.
Installation
------------
As root or with sudo, execute `make instal`.
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
-----------
Here is a brief description of each included script, for more thorough
documentation please consult the appropriate man page.
### xen-create-image
This script is designed to create new images which may be used
with the Xen hypervisor.
This script performs the initial setup, then delegates the real
work to a collection of helper scripts:
* `xt-install-image`: Installs a distribution into a directory.
* `xt-customize-image`: Run a collection of hook scripts to configure
the freshly installed system.
* `xt-create-xen-config`: Create a configuration file in `/etc/xen`
such that Xen can 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
This script is similar in spirit to `xen-create-image`, but much less
complex. It allows the creation of Xen guests which are diskless,
mounting their root filesystem over a remote NFS-share.
There are not many options to tweak, but still a useful addition
to the suite.
### xen-delete-image
This script will allow you to completely remove Xen instances which
have previously been created by `xen-create-image`, this includes
removing the storage block devices from the system, and deleting the
Xen configuration file.
### xen-list-images
List all the created images beneath a given root directory along with
a brief overview of their setup details.
### xen-update-image
This script runs "apt-get update; apt-get upgrade" for a given Xen
image.
#### NOTES
* The image should not be running or corruption will occur!
* The script should only be used for Xen instances of Debian or a
Debian-derived distribution.
--
The Xen-Tools Developer Team

42
SUPPORT
View File

@@ -1,42 +0,0 @@
Mailing List
------------
For assistance on using, or customising, these scripts please
consult the manpages initially, then the website:
http://xen-tools.org/software/xen-tools/
If these are not sufficient resources please consider posting
any queries you might have to the mailing list:
http://xen-tools.org/software/xen-tools/lists.html
Included with the release you should find the file "BUGS" which
contains some notes on reporting bugs.
Xen Queries
-----------
If your query is mostly related to Xen, rather than these tools,
then please consider joining the xen-users mailing list:
http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users
The members of that list are very good at diagnosing issues with
networking, block devices, and other Xen oddities.
Contact The Author
------------------
As a last resort feel free to contact the author at <steve@steve.org.uk>.
I say last resort not because I'm unwilling to help, but because
it will take longer for me to respond to you personally and I hate
answering the same question multiple times.
Steve
--

41
SUPPORT.markdown Normal file
View File

@@ -0,0 +1,41 @@
Mailing List
============
For assistance on using, or customising, these scripts please consult
the manpages initially, then the
[website](http://xen-tools.org/software/xen-tools/).
If these are not sufficient resources please consider posting any
queries you might have to the [mailing
list](http://xen-tools.org/software/xen-tools/lists.html)
Included with the release you should find the file `BUGS.markdown`
which contains some notes on reporting bugs.
Xen Queries
===========
If your query is mostly related to Xen, rather than these tools, then
please consider joining the [xen-users mailing
list](http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users)
The members of that list are very good at diagnosing issues with
networking, block devices, and other Xen oddities.
There's also the IRC channel `##xen` (the double hashmark is not a
typo) on the [Freenode](http://freenode.net/) IRC network.
Contact The Author
==================
As a last resort you can to contact the current maintainer, Axel
Beckert, at <abe@deuxchevaux.org>.
As the previous xen-tools maintainer and original author, Steve
Kemp, said, I say last resort not because I'm unwilling to help, but
because it may take longer for me to respond to you personally.
--
Axel

209
TODO
View File

@@ -1,209 +0,0 @@
TODO
====
See KNOWN_BUGS for real bugs.
Bugs to fix and features to add for 4.3
---------------------------------------
Refactor TLS disabling. Seems to be happen twice, once in 20-setup-apt
and once in 10-disable-tls.
Bugs to fix and features to add for 5.0
---------------------------------------
* xen-create-image man page overhaul:
- ambiguous option list with regards to parameters
- Set Fail in more situations where the script has clearly failed
i.e.: lvm exists
* Test and support more file system types.
Actually this should be pretty simple now that the parameters are
stored in the configuration hash.
* Setup locales in the hooks?
Currently no locales are set and this causes several domU errors
which appear in the domU's logs.
* Documentation overhaul
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.
* Think again about disk_device checks :
Newer Xen provides "xvda", older provided "sda". The current check for
valid values of disk_device (used for root device in domU /etc/fstab)
does only allow those values.
This forbids any deployment of LVM/RAID _inside_ domU, which cannot
be created by xen-tools anyway. So the current check is fine with the
current possibilities of xen-tools, but could become a limitation.
- Is it possible/wanted to "query" xend for default device names ?
- Is it possible to create /dev/mapper devices with xend conf ?
- Can we just avoid to ask for this value and not specify the device
in /etc/fstab (and use /dev/root, /dev/by-uuid, or anything ?)
* xen-create-image --dist=... / sources.list generation should be more fine-grained
xen-tools should offer the possibility to enable/disable
security/volatile/backports as well as
contrib/non-free/universe/restricted/multiverse for each of them
not only based on defaults plus the Dom0's sources.list
One idea is to allow parameters like
--dist="lenny:main,contrib,non-free;security;volatile:main"
and maybe (if the default will be to include security) to also
allow
--dist="lenny;no-security"
The second idea (by Mathieu Parent) is to have an
/etc/xen-tools/sources.list.d/ which then contains files like
lenny.list, lenny-server.list, karmic.list, etc. which defaults to
$dist.list, but can be also select with --sources-list=lenny-server
(which looks for ./lenny-server.list, ./lenny-server,
/etc/xen-tools/sources.list.d/lenny-server.list and
/etc/xen-tools/sources.list.d/lenny-server in that order).
Third variant is to use /etc/xen-tools/sources.lists/ instead of
/etc/xen-tools/sources.list.d/ because that directory is no
runparts-like directory.
* LVM snapshot support as an install source.
* Clean up mounts on Ctrl-C, causes error while installing otherwise:
Removing /dev/vg0/acromantula-domu1-disk - since we're forcing the
install Can't remove open logical volume "acromantula-domu1-disk"
this should be a matter of unmounting the mounted volume from /tmp.
* Generic grub support
This will generate a much nicer menu.lst as a side effect, as its
currently generated once at install, and is never updated. Installing
a full grub into the domU should update the menu.lst every time a
new kernel is installed and will also use the domU distro's menu.lst
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
added and modified hooks.
* Clean up the hooks directory
We still have a link farm for hooks and a meta link farm for distro
releases created on "make install". It probably would be better if
we would just have one directory per distro (like with debian) but
without the need to created symlinks on "make install"
Currently CentOS's 25-setup-kernel creates an fstab and
90-make-fstab does again. It works, but that cries for debugging
hell.
centos-5/25-setup-kernel centos-6/25-setup-kernel still differ and
I'm not sure if that's necessary respectively what's the common
denominator.
80-install-kernel is not yet merged into one hook script.
Common oneliners for code deduplication in the hooks/ directory:
$ find -L . -not -xtype l -not -type d -not -path '*/common/*' | sort -t / -k3
$ fdupes -r1 . | sort -t / -k3
$ find . -type f | sim_text -ipTt 50 | tac | column -t
* Create users, add ssh pubkeys to .ssh/authorized_keys
Still have to think of a good way of doing this. It would be nice
To specify a directory of public keys, parsing the hostnames
parsing the usernames from the ssh comment line
* More generic roles
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
that are fairly common.
* Sections for the xen-tools.conf file
Currently it's really annoying when you are trying to create VMs
on multiple subnets. It would be nice to specify with a flag what
"type" of configuration you want, and a set of options specific to
that flag could be parsed from xen-tools.conf
* 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
* Support cpu_weight and other features from
http://wiki.xensource.com/xenwiki/CreditScheduler
* Code Deduplication / Refactor the code for less code duplication
bin/x* currently contain the same or similar code like e.g. in the
function readConfigurationFile. This needs to be cleaned up.
* Use Perl::Critic
Stuff from Steve's TODO list / Generic TODOs
--------------------------------------------
* Write more test cases.
* xen-delete-image should unallocate any used IP addresses.
Axel's Break-Backwards-Compatibility Wishlist
---------------------------------------------
* Make empty extension the default
This would ease tab completion and CLI parameter reusage with "xm
create" and friends.
* Check if we can reduce MAKEDEV invocations in hooks/common/55-create-dev
MAKEDEV std is called in any case. First comment says "Early
termination if we have a couple of common devices present should
speed up installs which use --copy/--tar" and then "We still need
to make sure the basic devices are present" and calls MAKEDEV more
often than otherwise.
Additionally the 55-create-dev for CentOS/Fedora just created
console, zero and null. zero and null are part of "MAKEDEV std",
perhaps can we reduce it to that. console is part of "MAKEDEV
generic".
Additionally the devices hda, sda and tty1 may not necessary in any
case, but instead hvc0 should be created for sure in many
cases. Nothing cares about $serial_device there either.
Current MAKEDEV implementation support more than one device as
parameter. That could reduce the MAKEDEV calls from currently six
to two.

245
TODO.markdown Normal file
View File

@@ -0,0 +1,245 @@
TODO
====
See KNOWN_BUGS.markdown for real bugs.
Bugs to fix and features to add for 5.0
---------------------------------------
* `xen-create-image` man page overhaul:
* ambiguous option list with regards to parameters
* Set Fail in more situations where the script has clearly failed
i.e.: lvm exists
* Test and support more file system types.
Actually this should be pretty simple now that the parameters are
stored in the configuration hash.
* Setup locales in the hooks?
Currently no locales are set and this causes several domU errors
which appear in the domU's logs.
* Documentation overhaul
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.
* Think again about disk_device checks :
Newer Xen provides `xvda`, older provided `sda`. The current check for
valid values of `disk_device` (used for root device in DomU `/etc/fstab`)
does only allow those values.
This forbids any deployment of LVM/RAID _inside_ DomU, which cannot
be created by xen-tools anyway. So the current check is fine with the
current possibilities of xen-tools, but could become a limitation.
* Is it possible/wanted to "query" xend for default device names?
* Is it possible to create `/dev/mapper` devices with xend conf?
* Can we just avoid to ask for this value and not specify the device
in `/etc/fstab` (and use `/dev/root`, `/dev/by-uuid`, or anything?)
* `xen-create-image --dist=…` / sources.list generation should be more fine-grained
xen-tools should offer the possibility to enable/disable
security/volatile/backports as well as
contrib/non-free/universe/restricted/multiverse for each of them not
only based on defaults plus the Dom0's sources.list
One idea is to allow parameters like
--dist="lenny:main,contrib,non-free;security;volatile:main"
and maybe (if the default will be to include security) to also
allow
--dist="lenny;no-security"
The second idea (by Mathieu Parent) is to have an
`/etc/xen-tools/sources.list.d/` which then contains files like
`lenny.list`, `lenny-server.list`, `karmic.list`, etc. which
defaults to `$dist.list`, but can be also select with
`--sources-list=lenny-server` (which looks for
`./lenny-server.list`, `./lenny-server`,
`/etc/xen-tools/sources.list.d/lenny-server.list` and
`/etc/xen-tools/sources.list.d/lenny-server` in that order).
Third variant is to use `/etc/xen-tools/sources.lists/` instead of
`/etc/xen-tools/sources.list.d/` because that directory is no
runparts-like directory.
* LVM snapshot support as an install source.
* Generic grub support
This will generate a much nicer `menu.lst` as a side effect, as its
currently generated once at install, and is never updated. Installing
a full grub into the domU should update the `menu.lst` every time a
new kernel is installed and will also use the domU distro's `menu.lst`
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
added and modified hooks.
* Clean up the hooks directory
We still have a link farm for hooks and a meta link farm for distro
releases created on `make install`. It probably would be better if
we would just have one directory per distro (like with debian) but
without the need to created symlinks on `make install`.
Currently CentOS's `25-setup-kernel` creates an fstab and
`90-make-fstab` does again. It works, but that cries for debugging
hell.
`centos-5/25-setup-kernel` and `centos-6/25-setup-kernel` still
differ and I'm not sure if that's necessary respectively what's the
common denominator.
`80-install-kernel` is not yet merged into one hook script.
Common oneliners for code deduplication in the hooks/ directory:
$ find -L . -not -xtype l -not -type d -not -path '*/common/*' | sort -t / -k3
$ fdupes -r1 . | sort -t / -k3
$ find . -type f | sim_text -ipTt 50 | tac | column -t
* Create users, add ssh pubkeys to `.ssh/authorized_keys`
Still have to think of a good way of doing this. It would be nice
To specify a directory of public keys, parsing the hostnames
parsing the usernames from the ssh comment line.
Potential ideas are to add options to add a given file as
`authorized_keys` (e.g. a users public key) or to just add the Dom0's
`/root/.ssh/authorized_keys` as the DomU's one.
* Generate ECDSA host keys where possible. (Likely depends on the
to-be-installed SSH version.)
* More generic roles
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
that are fairly common.
* Sections for the xen-tools.conf file
Currently it's really annoying when you are trying to create VMs
on multiple subnets. It would be nice to specify with a flag what
"type" of configuration you want, and a set of options specific to
that flag could be parsed from xen-tools.conf
* 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 whether 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
* Support `cpu_weight` and other features from
http://wiki.xensource.com/xenwiki/CreditScheduler
* Make used Xen toolstack configurable, i.e. via --xen-toolstack=xl
* Unify --debug and --dumpconfig. Likely make --debug exit
gracefully. Document --debug if --dumpconfig is removed.
* Use `Perl::Critic`
* Refactor the different Ubuntu hooks directories so that only one
ubuntu hooks directory is left.
Then also refactor TLS disabling so that it works on all
distributions the same. Currently Debian is a special case and
Ubuntu half a special case.
* Remove from the (unused) Xen::Tools what's already in the used
Xen::Tools::Common.
* Add test for `--size` constraints (upper- and lowercase letters,
with and without `B`, etc.)
* Needs a `--dry-run` or `--check-constraints` option in
`xen-create-image` first. Which probably both would be a good
idea.
* Replace several occurences of backticks with runCommand. (Mostly
mount commands in `xen-update-image`. The calls to uname or
lsb_release should be fine.)
Stuff from Steve's TODO list / Generic TODOs
--------------------------------------------
* Write more test cases.
* `xen-delete-image` should unallocate any used IP addresses.
* `installGentooPackage` in `hooks/common.sh` is a stub and does
nothing yet.
Axel's Break-Backwards-Compatibility Wishlist
---------------------------------------------
* Make empty extension the default
This would ease tab completion and CLI parameter reusage with "xm
create" and friends.
* Check if we can reduce `MAKEDEV` invocations in
`hooks/common/55-create-dev`
`MAKEDEV std` is called in any case. First comment says "Early
termination if we have a couple of common devices present should
speed up installs which use `--copy`/`--tar`" and then "We still
need to make sure the basic devices are present" and calls `MAKEDEV`
more often than otherwise.
Additionally the `55-create-dev` for CentOS/Fedora just created
`console`, `zero` and `null`. `zero` and `null` are part of `MAKEDEV
std`, perhaps can we reduce it to that. `console` is part of
`MAKEDEV generic`.
Additionally the devices `hda`, `sda` and `tty1` may not necessary
in any case, but instead `hvc0` should be created for sure in many
cases. Nothing cares about `$serial_device` there either.
Current `MAKEDEV` implementation support more than one device as
parameter. That could reduce the `MAKEDEV` calls from currently six
to two.
* Uncouple generating auto start symlinks from `--boot`.
Maybe add some `--autostart` or such.
* MAC addresses should no more depend on the distribution.
* Let the admin switch between MAC addresses based on XenSource's OUI,
its organisation's own OUI or locally administrated MAC addresses.
See also http://wiki.xen.org/wiki/Xen_Networking#MAC_addresses
* More radical Code Deduplication
`bin/x*` currently still contain similar code like e.g. in the
function parseCommandLineArguments. This should be cleaned up, too,
but may need a bigger redesign.

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xen-create-nfs - Create a Xen configuration file for an NFS-root guest.
@@ -36,8 +38,6 @@ xen-create-nfs - Create a Xen configuration file for an NFS-root guest.
--nfs_server Specify the NFS server to mount the root partition from.
--nfs_root Specify the path, upon the NFS server, to mount.
=cut
=head1 OPTIONS
@@ -55,11 +55,8 @@ Read the manual for this script.
=item B<--version>
Show the version number and exit.
=back
=cut
=head1 DESCRIPTION
@@ -71,8 +68,6 @@ Show the version number and exit.
support more than the minimal number of options to completement the
existing xen-create-image script, however it is hopefully useful.
=cut
=head1 REFERENCE
@@ -81,16 +76,12 @@ Show the version number and exit.
http://www.debian-administration.org/articles/505
=cut
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -102,7 +93,6 @@ you can redistribute it and/or modify it under
the same terms as Perl itself.
The LICENSE file contains the full text of the license.
=cut
@@ -112,7 +102,7 @@ use Env;
use Getopt::Long;
use Pod::Usage;
use Text::Template;
use Xen::Tools::Common;
#
@@ -131,7 +121,7 @@ $CONFIG{ 'template' } = '/etc/xen-tools/xm-nfs.tmpl';
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
# store version number away.
@@ -141,7 +131,7 @@ $CONFIG{ 'xen_tools_version' } = $RELEASE;
#
# Read the global configuration file.
#
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
#
@@ -170,7 +160,7 @@ if ( -e "/etc/xen/$CONFIG{'hostname'}.cfg" )
#
if ( $CONFIG{ 'admins' } )
{
setupAdminUsers();
setupAdminUsers(\%CONFIG);
}
#
@@ -186,88 +176,6 @@ createNewConfigurationFile();
exit;
=begin doc
Read the specified configuration file, and update our global configuration
hash with the values found in it.
=end doc
=cut
sub readConfigurationFile
{
my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( !-e $file );
my $line = "";
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
Parse the command line arguments this script was given.
@@ -324,13 +232,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.13 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
logprint("xen-create-nfs release $RELEASE - CVS: $REVISION\n");
logprint("xen-create-nfs release $RELEASE\n");
exit;
}
}
@@ -409,82 +311,6 @@ sub testArguments
=begin doc
This routine is designed to ensure that any users specified with
the --admins flag are setup as administrators of the new instance.
=end doc
=cut
sub setupAdminUsers
{
#
# If we're not root we can't modify users.
#
return if ( $EFFECTIVE_USER_ID != 0 );
#
# If we don't have a sudoers file then we'll also ignore this.
#
return if ( !-e "/etc/sudoers" );
#
# Find the path to the xen-login-shell
#
my $shell = undef;
$shell = "/usr/bin/xen-login-shell" if ( -x "/usr/bin/xen-login-shell" );
$shell = "/usr/local/bin/xen-login-shell"
if ( -x "/usr/bin/local/xen-login-shell" );
return if ( !defined($shell) );
#
# For each user make sure they exist, and setup the
# login shell for them.
#
foreach my $user ( split( /,/, $ENV{ 'admins' } ) )
{
# Strip leading and trailing whitespace.
$user =~ s/^\s+//;
$user =~ s/\s+$//;
# Ignore root
next if ( $user =~ /^root$/i );
# Does the user exist?
if ( getpwnam($user) )
{
# Change shell.
$CONFIG{ 'verbose' } && print "Changing shell for $user: $shell\n";
system( "chsh", "-s", $shell, $user );
}
else
{
# Add a new user.
$CONFIG{ 'verbose' } && print "Adding new user: $user\n";
system( "useradd", "-s", $shell, $user );
}
#
# Add the entry to /etc/sudoers.
#
open( SUDOERS, ">>", "/etc/sudoers" ) or
warn "Failed to add user to sudoers file : $user - $!";
print SUDOERS
"$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n";
close(SUDOERS);
}
}
=begin doc
Create the Xen configuration file for our new Xen guest.

View File

@@ -1,5 +1,7 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xen-delete-image - Delete previously created Xen instances.
@@ -8,6 +10,10 @@ xen-delete-image - Delete previously created Xen instances.
xen-delete-image [options] [--hostname=]imageName1 [--hostname=]imageName2
Filename Options:
--extension Specify the file extension to use. An empty extension is equal
to any extension.
Help Options:
--help Show help information.
--manual Read the manual for this script.
@@ -23,9 +29,8 @@ xen-delete-image - Delete previously created Xen instances.
--hostname Specify the image name to delete.
Testing options:
--test Don't complain if we're not invoked by root.
=cut
--test Don't complain if we're not invoked by root.
--no-xen-ok Don't complain if xen seems not installed or xend is not running
=head1 OPTIONS
@@ -56,11 +61,8 @@ Do not complain, or exit, if the script is not executed by the root user.
=item B<--version>
Show the version number and exit.
=back
=cut
=head1 DESCRIPTION
@@ -74,8 +76,6 @@ Show the version number and exit.
but will fail to remove anything which the user does not have permission
to delete.)
=cut
=head1 LOOPBACK EXAMPLE
@@ -91,8 +91,6 @@ Show the version number and exit.
(The matching Xen configuration files beneath /etc/xen will also be
removed.)
=cut
=head1 LVM EXAMPLE
@@ -109,8 +107,6 @@ Show the version number and exit.
The Xen configuration files will also be removed from beneath /etc/xen.
=cut
=head1 EVMS EXAMPLE
@@ -127,8 +123,6 @@ Show the version number and exit.
The Xen configuration files will also be removed.
=cut
=head1 AUTHORS
@@ -136,12 +130,10 @@ Show the version number and exit.
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010-2013 by The Xen-Tools
Development Team. All rights reserved.
This module is free software;
@@ -149,7 +141,6 @@ you can redistribute it and/or modify it under
the same terms as Perl itself.
The LICENSE file contains the full text of the license.
=cut
@@ -158,6 +149,7 @@ use English;
use Getopt::Long;
use Pod::Usage;
use File::Path;
use Xen::Tools::Common;
#
@@ -171,16 +163,26 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
#
# Find xen toolstack command
#
$CONFIG{ 'xm' } = findXenToolstack();
#
# Default values
#
$CONFIG{ 'extension' } = '.cfg';
#
# Read the global configuration file if it exists.
#
if ( -e "/etc/xen-tools/xen-tools.conf" )
{
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
}
@@ -216,27 +218,21 @@ E_O_ROOT
#
# Loop over the supplied arguments, and attempt to delete each
# image.
# image. Check both, bare parameters as well as --hostname options.
#
while ( my $name = shift )
{
if ( !xenRunning($name) )
{
deleteXenImage($name);
}
else
{
print "Skipping xen guest '$name' - it appears to be running.\n";
}
my @hosts = ();
if (exists($CONFIG{ 'hostname' }) and defined($CONFIG{ 'hostname' })) {
my $hostname_option = $CONFIG{ 'hostname' };
@hosts = 'ARRAY' eq ref($hostname_option) ?
@$hostname_option : $hostname_option;
}
#
# Also delete any which were specified using the --hostname flag
#
my $hosts = $CONFIG{ 'hostname' };
foreach my $name (@$hosts)
foreach my $name (@ARGV, @hosts)
{
if ( !xenRunning($name) )
my %PER_HOST_CONFIG = %CONFIG;
$PER_HOST_CONFIG{ 'hostname' } = $name;
if ( $CONFIG{ 'no_xen_ok' } or !xenRunning($name, \%PER_HOST_CONFIG) )
{
deleteXenImage($name);
}
@@ -253,81 +249,6 @@ exit 0;
=begin doc
Read the configuration file specified.
=end doc
=cut
sub readConfigurationFile
{
my ($file) = (@_);
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
@@ -350,9 +271,11 @@ sub parseCommandLineArguments
"dry-run", \$CONFIG{ 'dry-run' },
"lvm=s", \$CONFIG{ 'lvm' },
"evms=s", \$CONFIG{ 'evms' },
"extension:s", \$CONFIG{ 'extension' },
"hostname=s@", \$CONFIG{ 'hostname' },
"test", \$CONFIG{ 'test' },
"verbose", \$CONFIG{ 'verbose' },
"no-xen-ok", \$CONFIG{ 'no_xen_ok' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
@@ -364,14 +287,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.41 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xen-delete-image release $RELEASE - CVS: $REVISION\n";
print "xen-delete-image release $RELEASE\n";
exit;
}
@@ -424,33 +340,6 @@ sub checkArguments
=begin doc
Test to see if the given instance is running.
=end doc
=cut
sub xenRunning
{
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |" ) or
die "Failed to run 'xm list $hostname'";
while (<CMD>)
{
my $line = $_;
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close(CMD);
return ($running);
}
=begin doc
Delete the named image, and the corresponding configuration file
@@ -472,17 +361,17 @@ sub deleteXenImage
#
# Delete the Xen auto-start file if it exists.
#
if ( -e "/etc/xen/auto/$hostname.cfg" )
if ( -e "/etc/xen/auto/$hostname".$CONFIG{ 'extension' } )
{
push( @delete, "/etc/xen/auto/$hostname.cfg" );
push( @delete, "/etc/xen/auto/$hostname".$CONFIG{ 'extension' } );
}
#
# Delete the Xen configuration file if it exists.
#
if ( -e "/etc/xen/$hostname.cfg" )
if ( -e "/etc/xen/$hostname".$CONFIG{ 'extension' } )
{
push( @delete, "/etc/xen/$hostname.cfg" );
push( @delete, "/etc/xen/$hostname".$CONFIG{ 'extension' } );
}
#
@@ -505,7 +394,8 @@ sub deleteXenImage
}
}
my %PER_HOST_CONFIG = %CONFIG;
$PER_HOST_CONFIG{ 'hostname' } = $hostname;
if ( defined( $CONFIG{ 'dir' } ) )
{
my $prefix = $CONFIG{ 'dir' } . "/domains/";
@@ -539,7 +429,7 @@ sub deleteXenImage
print "Would remove LVM swap volume /dev/$CONFIG{'lvm'}/$hostname-swap\n";
} else {
print "Removing swap volume\n";
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-swap --force");
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-swap --force", \%PER_HOST_CONFIG);
}
}
@@ -549,7 +439,7 @@ sub deleteXenImage
print "Would remove LVM disk volume /dev/$CONFIG{'lvm'}/$hostname-disk\n";
} else {
print "Removing LVM disk volume\n";
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-disk --force");
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-disk --force", \%PER_HOST_CONFIG);
}
}
@@ -571,8 +461,8 @@ sub deleteXenImage
print "Would remove EVMS swap volume: $CONFIG{'evms'}/$hostname-swap\n";
} else {
print "Removing EVMS swap volume\n";
runCommand("echo Delete : /dev/evms/$hostname-swap | evms");
runCommand("echo Delete : $CONFIG{'evms'}/$hostname-swap | evms");
runCommand("echo Delete : /dev/evms/$hostname-swap | evms", \%PER_HOST_CONFIG);
runCommand("echo Delete : $CONFIG{'evms'}/$hostname-swap | evms", \%PER_HOST_CONFIG);
}
}
@@ -583,8 +473,8 @@ sub deleteXenImage
print "Would remove EVMS disk volume: $CONFIG{'evms'}/$hostname-swap\n";
} else {
print "Removing EVMS disk volume\n";
runCommand("echo Delete : /dev/evms/$hostname-disk | evms");
runCommand("echo Delete : $CONFIG{'evms'}/$hostname-disk | evms");
runCommand("echo Delete : /dev/evms/$hostname-disk | evms", \%PER_HOST_CONFIG);
runCommand("echo Delete : $CONFIG{'evms'}/$hostname-disk | evms", \%PER_HOST_CONFIG);
}
}
@@ -597,66 +487,3 @@ sub deleteXenImage
exit 127;
}
}
=begin doc
A utility method to run a system command. We will capture the return
value and exit if the command files.
When running verbosely we will also display any command output.
=end doc
=cut
sub runCommand
{
my ($cmd) = (@_);
#
# Header.
#
$CONFIG{ 'verbose' } && print "Executing : $cmd\n";
#
# Hide output unless running with --debug.
#
if ( $CONFIG{ 'verbose' } )
{
#
# Copy stderr to stdout, so we can see it.
#
$cmd .= " 2>&1";
}
else
{
$cmd .= " >/dev/null 2>/dev/null";
}
#
# Run it.
#
my $output = `$cmd`;
if ( $? != 0 )
{
print "Running command '$cmd' failed.\n";
print "Aborting\n";
exit;
}
#
# All done.
#
$CONFIG{ 'verbose' } && print "Output\n";
$CONFIG{ 'verbose' } && print "======\n";
$CONFIG{ 'verbose' } && print $output . "\n";
$CONFIG{ 'verbose' } && print "Finished : $cmd\n";
return ($output);
}

View File

@@ -1,5 +1,7 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xen-list-images - List all the created and configured Xen images.
@@ -8,6 +10,10 @@ xen-list-images - List all the created and configured Xen images.
xen-list-image [options]
Filename Options:
--extension Specify the file extension to use. An empty extension is equal
to any extension.
Help Options:
--help Show this scripts help information.
--manual Read this scripts manual.
@@ -16,6 +22,7 @@ xen-list-images - List all the created and configured Xen images.
Testing options:
--test Specify an alternate Xen configuration directory.
=head1 OPTIONS
=over 8
@@ -48,26 +55,22 @@ Show the version number and exit.
and then either the IP address configured, or "DHCP" to denote
a dynamic host.
=cut
=head1 TODO
It should be possible to determine the disk(s) used by the images,
and then display their sizes.
=cut
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/
Stéphane Jourdois
=cut
=head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010-2013 by The Xen-Tools
Development Team. All rights reserved.
This module is free software;
@@ -83,6 +86,7 @@ use English;
use File::Temp qw/ tempdir /;
use Getopt::Long;
use Pod::Usage;
use Xen::Tools::Common;
#
@@ -94,21 +98,22 @@ use Pod::Usage;
my %CONFIG;
#
# Default prefix
# Default values
#
$CONFIG{ 'prefix' } = "/etc/xen";
$CONFIG{ 'extension' } = '.cfg';
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
#
# Read the global configuration file if it exists.
#
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
#
@@ -144,83 +149,6 @@ exit;
=begin doc
Read the configuration file specified.
=end doc
=cut
sub readConfigurationFile
{
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' - $!";
while ( defined( my $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
Parse the arguments specified upon the command line.
@@ -238,6 +166,7 @@ sub parseCommandLineArguments
# Parse options.
#
GetOptions( "test=s", \$CONFIG{ 'prefix' },
"extension:s", \$CONFIG{ 'extension' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION );
@@ -248,13 +177,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.30 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xen-list-images release $RELEASE - CVS: $REVISION\n";
print "xen-list-images release $RELEASE\n";
exit;
}
}
@@ -274,9 +197,12 @@ sub findXenInstances
{
my @found;
foreach my $file ( sort( glob( $CONFIG{ 'prefix' } . "/*.cfg" ) ) )
foreach my $file ( sort( glob( $CONFIG{ 'prefix' } . "/*" . $CONFIG{ 'extension' } ) ) )
{
push @found, $file if ( -e $file );
push @found, $file if (
-f $file and
$file !~ m(~$|\.dpkg-[a-z]+$|\.sxp$|/xl\.conf$)
);
}
return (@found);
@@ -341,6 +267,7 @@ sub displayInstance
print "Memory: $mem\n";
print "IP: " . $ip . $mac . "\n" if length($ip);
print "DHCP" . $mac . "\n" if $dhcp;
print "Config: $file\n";
}

View File

@@ -1,5 +1,7 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xen-resize-guest - Resize a loopback or LVM based xen guest.
@@ -20,8 +22,6 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
--force Force the resize to happen without a last-chance delay.
--hostname Specify the hostname of the guest to resize.
=cut
=head1 OPTIONS
@@ -53,8 +53,6 @@ Show the version number and exit.
=back
=cut
=head1 DESCRIPTION
@@ -74,15 +72,12 @@ Show the version number and exit.
More than once I've heard of users making mistakes and breaking their
filesystems; hence this tool.
=cut
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/
Axel Beckert, http://noone.org/abe/
=cut
=head1 LICENSE
@@ -94,7 +89,6 @@ you can redistribute it and/or modify it under
the same terms as Perl itself.
The LICENSE file contains the full text of the license.
=cut
@@ -104,6 +98,7 @@ use Env;
use Getopt::Long;
use Pod::Usage;
use Text::Template;
use Xen::Tools::Common;
@@ -116,14 +111,19 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
#
# Find xen toolstack command
#
$CONFIG{ 'xm' } = findXenToolstack();
#
# Read the global configuration file.
#
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
#
@@ -289,84 +289,6 @@ exit 0;
=begin doc
Read the configuration file specified.
=end doc
=cut
sub readConfigurationFile
{
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' - $!";
my $line = "";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
Parse the command line arguments this script was given.
@@ -482,7 +404,7 @@ EOF
#
# Make sure the guest isn't running
#
if ( xenRunning( $CONFIG{ 'hostname' } ) )
if ( xenRunning( $CONFIG{ 'hostname' }, \%CONFIG ) )
{
print "The guest $CONFIG{'hostname'} appears to be running!\n";
exit 1;
@@ -523,31 +445,3 @@ EOF
$CONFIG{ 'add' } = $1;
}
}
=begin doc
Test to see if the given instance is running.
=end doc
=cut
sub xenRunning
{
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |" ) or
die "Failed to run 'xm list $hostname'";
while (<CMD>)
{
my $line = $_;
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close(CMD);
return ($running);
}

View File

@@ -1,5 +1,7 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xen-update-image - Update the software installed upon offline Xen images.
@@ -18,9 +20,6 @@ xen-update-image - Update the software installed upon offline Xen images.
--lvm Specify the LVM volume group which contains the image(s).
--evms Specify the EVMS container which contains the image(s).
=cut
=head1 OPTIONS
@@ -46,8 +45,6 @@ Show the version number and exit.
=back
=cut
=head1 DESCRIPTION
@@ -65,8 +62,6 @@ Show the version number and exit.
corruption otherwise it will allow you to update your image without
booting it.
=cut
=head1 EXAMPLES
@@ -77,8 +72,6 @@ Show the version number and exit.
xen-update-images --dir=/home/xen test.my.flat x11.my.flat
=cut
=head1 AUTHORS
@@ -86,7 +79,6 @@ Show the version number and exit.
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -107,6 +99,7 @@ use File::Temp qw/ tempdir /;
use File::Copy qw/ mv cp /;
use Getopt::Long;
use Pod::Usage;
use Xen::Tools::Common;
#
@@ -120,7 +113,13 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
#
# Find xen toolstack command
#
$CONFIG{ 'xm' } = findXenToolstack();
#
@@ -128,7 +127,7 @@ my $RELEASE = '4.3rc1';
#
if ( -e "/etc/xen-tools/xen-tools.conf" )
{
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
}
@@ -168,7 +167,7 @@ E_O_ROOT
#
while ( my $name = shift )
{
if ( !xenRunning($name) )
if ( !xenRunning($name, \%CONFIG) )
{
updateXenImage($name);
}
@@ -331,110 +330,6 @@ sub updateXenImage
=begin doc
Test to see if the given instance is running.
=end doc
=cut
sub xenRunning
{
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list 2>/dev/null |" ) or
die "Failed to run 'xm list $hostname'";
while (<CMD>)
{
my $line = $_;
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close(CMD);
return ($running);
}
=begin doc
Read the configuration file specified.
=end doc
=cut
sub readConfigurationFile
{
my ($file) = (@_);
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
Parse the arguments specified upon the command line.
@@ -463,13 +358,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.29 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xen-update-image release $RELEASE - CVS: $REVISION\n";
print "xen-update-image release $RELEASE\n";
exit;
}

View File

@@ -1,11 +1,11 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xt-create-config - Create a Xen configuration file for a new guest
=cut
=head1 SYNOPSIS
xt-create-config [options]
@@ -39,7 +39,6 @@ xt-create-config - Create a Xen configuration file for a new guest
All other options from xen-create-image, such as the new IP address(es)
to give to the new instance, will be passed as environmental variables.
=cut
=head1 ABOUT
@@ -53,8 +52,6 @@ xt-create-config - Create a Xen configuration file for a new guest
By default the script will use /etc/xen-tools/xm.tmpl as its input.
=cut
=head1 INVOCATION
@@ -75,9 +72,6 @@ xt-create-config - Create a Xen configuration file for a new guest
=for example end
=cut
=head1 ARGUMENT PASSING
This script will be invoked with a full copy of the arguments from
@@ -102,7 +96,6 @@ xt-create-config - Create a Xen configuration file for a new guest
for the "Text::Template" perl module. (If you have the perldoc
package installed you can read this with "perldoc Text::Template".)
=cut
=head1 AUTHORS
@@ -110,7 +103,6 @@ xt-create-config - Create a Xen configuration file for a new guest
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -156,7 +148,7 @@ $CONFIG{ 'extension' } = '.cfg';
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
@@ -177,7 +169,7 @@ checkArguments();
#
if ( $ENV{ 'admins' } )
{
setupAdminUsers();
setupAdminUsers(\%CONFIG);
}
@@ -215,7 +207,7 @@ sub parseCommandLineArguments
#
GetOptions( "admins=s", \$ENV{ 'admins' },
"output=s", \$CONFIG{ 'output' },
"extension=s", \$CONFIG{ 'extension' },
"extension:s", \$CONFIG{ 'extension' },
"template=s", \$CONFIG{ 'template' },
"verbose", \$CONFIG{ 'verbose' },
"help", \$HELP,
@@ -229,13 +221,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.47 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xt-create-xen-config release $RELEASE - CVS: $REVISION\n";
print "xt-create-xen-config release $RELEASE\n";
exit;
}
}
@@ -375,7 +361,7 @@ sub createXenConfig
#
# The memory size: Convert Gb -> Mb.
#
if ( $ENV{ 'memory' } =~ /^(\d+)Gb.*$/i )
if ( $ENV{ 'memory' } =~ /^(\d+)Gb?.*$/i )
{
$ENV{ 'memory' } = $1 * 1024;
}
@@ -383,7 +369,7 @@ sub createXenConfig
#
# Remove any trailing Mb.
#
if ( $ENV{ 'memory' } =~ /^(\d+)Mb.*$/i )
if ( $ENV{ 'memory' } =~ /^(\d+)Mb?.*$/i )
{
$ENV{ 'memory' } = $1;
}
@@ -404,13 +390,13 @@ sub createXenConfig
$ENV{ 'image_suffix' } = '';
importPartitionsFromEnvironment();
}
elsif ( $ENV{ 'image-dev' } )
elsif ( $ENV{ 'image_dev' } )
{
$ENV{ 'image_vbd' } = "phy:$ENV{'image-dev'}";
$ENV{ 'image_vbd' } = "phy:$ENV{'image_dev'}";
if ( $ENV{ 'swap-dev' } )
if ( $ENV{ 'swap_dev' } )
{
$ENV{ 'swap_vbd' } = "phy:$ENV{'swap-dev'}";
$ENV{ 'swap_vbd' } = "phy:$ENV{'swap_dev'}";
}
else
{
@@ -470,80 +456,3 @@ sub createXenConfig
close(FILE);
}
=begin doc
This routine is designed to ensure that any users specified with
the --admins flag are setup as administrators of the new instance.
=end doc
=cut
sub setupAdminUsers
{
#
# If we're not root we can't modify users.
#
return if ( $EFFECTIVE_USER_ID != 0 );
#
# If we don't have a sudoers file then we'll also ignore this.
#
return if ( !-e "/etc/sudoers" );
#
# Find the path to the xen-login-shell
#
my $shell = undef;
$shell = "/usr/bin/xen-login-shell" if ( -x "/usr/bin/xen-login-shell" );
$shell = "/usr/local/bin/xen-login-shell"
if ( -x "/usr/bin/local/xen-login-shell" );
return if ( !defined($shell) );
#
# For each user make sure they exist, and setup the
# login shell for them.
#
foreach my $user ( split( /,/, $ENV{ 'admins' } ) )
{
# Strip leading and trailing whitespace.
$user =~ s/^\s+//;
$user =~ s/\s+$//;
# Ignore root
next if ( $user =~ /^root$/i );
# Does the user exist?
if ( getpwnam($user) )
{
# Change shell.
$CONFIG{ 'verbose' } && print "Changing shell for $user: $shell\n";
system( "chsh", "-s", $shell, $user );
}
else
{
# Add a new user.
$CONFIG{ 'verbose' } && print "Adding new user: $user\n";
system( "useradd", "-s", $shell, $user );
}
#
# Add the entry to /etc/sudoers.
#
open( SUDOERS, ">>", "/etc/sudoers" ) or
warn "Failed to add user to sudoers file : $user - $!";
print SUDOERS
"$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n";
close(SUDOERS);
}
}

View File

@@ -1,11 +1,11 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xt-customize-image - Customize a freshly installed copy of GNU/Linux
=cut
=head1 SYNOPSIS
xt-customize-image [options]
@@ -25,7 +25,6 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
All other options from xen-create-image, such as the new IP address(es)
to give to the new instance, will be passed as environmental variables.
=cut
=head1 NOTES
@@ -41,8 +40,6 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
--location - The temporary installation root of the new install
--dist - The distribution which has been installed.
=cut
=head1 HOOK SCRIPTS
@@ -54,11 +51,9 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
the --location option.
For the distribution named 'foo' the scripts will be loaded and
executed from '/usr/lib/xen-tools/foo.d'. Each executable will
executed from '/usr/share/xen-tools/foo.d'. Each executable will
be loaded and executed in sorted order.
=cut
=head1 AUTHORS
@@ -66,8 +61,6 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -98,7 +91,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
@@ -159,13 +152,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.33 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xt-customize-image release $RELEASE - CVS: $REVISION\n";
print "xt-customize-image release $RELEASE\n";
exit;
}
}
@@ -221,7 +208,7 @@ sub checkArguments
# If there are no scripts then we clearly cannot
# customise it!
#
my $dir = "/usr/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d";
my $dir = "/usr/share/xen-tools/" . $CONFIG{ 'dist' } . ".d";
if ( !-d $dir )
{
@@ -263,7 +250,7 @@ sub runDistributionHooks
#
# Hook directory.
#
my $hooks = "/usr/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d/";
my $hooks = "/usr/share/xen-tools/" . $CONFIG{ 'dist' } . ".d/";
#
# Installation prefix

View File

@@ -1,12 +1,12 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xt-guess-suite-and-mirror - Tries to guess the most suitable suite and
mirror for DomUs on Debian and Ubuntu Dom0s.
=cut
=head1 SYNOPSIS
--suite Show suite
@@ -20,7 +20,6 @@ mirror for DomUs on Debian and Ubuntu Dom0s.
--manual Show the manual for this script.
--version Show the version number and exit.
=cut
=head1 DESCRIPTION
@@ -28,14 +27,12 @@ xt-guess-suite-and-mirror tries to find the mirror and suite the Xen
Dom0 is currently using and returns them in a way suitable for
xen-create-image(1) or the backticks feature in xen-tools.conf.
=cut
=head1 AUTHORS
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -55,9 +52,9 @@ full text of the license.
# Fallback to Debian or Ubuntu in case we can't find anything
my $fallback = 'Debian';
# Which mirrors to use if everything else fails (cdn.debian.net uses
# GeoIP, see http://wiki.debian.org/DebianGeoMirror)
my %fallback_mirror = ( Debian => 'http://cdn.debian.net/debian/',
# Which mirrors to use if everything else fails (http.debian.net
# redirects to a working mirror nearby)
my %fallback_mirror = ( Debian => 'http://http.debian.net/debian/',
Ubuntu => 'http://archive.ubuntu.com/ubuntu/' );
# Which suite to use if everything else fails. For Debian "stable"
@@ -74,6 +71,7 @@ my @sources_list_files = ( '/etc/apt/sources.list',
use File::Slurp;
use Getopt::Long;
use Pod::Usage;
use File::Which;
use strict;
@@ -81,7 +79,7 @@ use strict;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
# Init
my $mirror = '';
@@ -153,10 +151,8 @@ all_sources_list_files: foreach my $sources_list_file (@sources_list_files) {
die "Couldn't find a useful entry in the sources.list files of the Dom0. Tried:\n ".
join("\n ", @sources_list_files)."\n" unless $found;
my $lsb_release = `which lsb_release`;
chomp($lsb_release);
if (!$found and $lsb_release and -x $lsb_release) {
my $lsb_release = which('lsb_release');
if (!$found and defined($lsb_release) and -x $lsb_release) {
my $vendor = `$lsb_release -s -i`;
if ($vendor eq 'Debian' or $vendor eq 'Ubuntu') {

View File

@@ -1,11 +1,11 @@
#!/usr/bin/perl -w
=encoding utf8
=head1 NAME
xt-install-image - Install a fresh copy of GNU/Linux into a directory
=cut
=head1 SYNOPSIS
xt-install-image [options]
@@ -39,8 +39,6 @@ xt-install-image - Install a fresh copy of GNU/Linux into a directory
All other options from xen-create-image will be passed as environmental
variables.
=cut
=head1 NOTES
@@ -50,8 +48,6 @@ xt-install-image - Install a fresh copy of GNU/Linux into a directory
configuration, etc.
=cut
=head1 INSTALLATION METHODS
There are several available methods of installation, depending upon the
@@ -78,8 +74,6 @@ Untar a .tar file into the new installation location. This tarfile is assumed t
=back
=cut
=head1 AUTHORS
@@ -88,7 +82,6 @@ Untar a .tar file into the new installation location. This tarfile is assumed t
Dmitry Nedospasov, http://nedos.net/
Stéphane Jourdois
=cut
=head1 LICENSE
@@ -108,6 +101,7 @@ use Env;
use File::Copy;
use Getopt::Long;
use Pod::Usage;
use Xen::Tools::Common;
#
@@ -118,7 +112,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '4.3rc1';
my $RELEASE = '4.4beta1';
#
@@ -132,13 +126,19 @@ my $RELEASE = '4.3rc1';
# needDirectory Defined if we need an install-source directory specified.
#
#
my $debootstrap_cmd;
my %dispatch = (
"copy" => { sub => \&do_copy,
needBinary => "/bin/cp",
needDirectory => 1,
},
"debootstrap" => { sub => \&do_debootstrap,
needBinary => "/usr/sbin/debootstrap",
needBinary => ["/usr/sbin/debootstrap", "/usr/bin/cdebootstrap", "/usr/bin/cdebootstrap-static"],
var => \$debootstrap_cmd,
},
"cdebootstrap" => { sub => \&do_debootstrap,
needBinary => ["/usr/sbin/cdebootstrap", "/usr/bin/cdebootstrap-static"],
var => \$debootstrap_cmd,
},
"rinse" => { sub => \&do_rinse,
needBinary => "/usr/sbin/rinse",
@@ -156,7 +156,7 @@ my %dispatch = (
#
# Read the global configuration file.
#
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
readConfigurationFile("/etc/xen-tools/xen-tools.conf", \%CONFIG);
#
@@ -179,7 +179,7 @@ if ( $CONFIG{ 'config' } )
}
# Read the file, if it exists.
readConfigurationFile($path) if ( -e $path );
readConfigurationFile($path, \%CONFIG) if ( -e $path );
}
@@ -209,13 +209,35 @@ if ( defined( $CONFIG{ 'install-method' } ) &&
#
# Do we need to test for a binary.
if ( ( $installer->{ 'needBinary' } ) &&
( !-x $installer->{ 'needBinary' } ) )
{
print
"The following required binary for the installation was not found\n";
print "\t" . $installer->{ 'needBinary' } . "\n";
exit 1;
if ( $installer->{ 'needBinary' } ) {
if ( 'ARRAY' eq ref $installer->{ 'needBinary' } ) {
unless (ref $installer->{ 'var' }) {
die "Assertion: If dispatch->->needBinary is an array ref, dispatch->->var must exist";
}
foreach my $binary (@{$installer->{ 'needBinary' }}) {
if (-x $binary) {
${$installer->{ 'var' }} = $binary;
last;
}
}
unless ( ${$installer->{ 'var' }} ) {
print
"One of the following binaries are required for the installation, but none was found\n";
print "\t" . join(', ', @{$installer->{ 'needBinary' }}) . "\n";
exit 1;
}
}
else
{
if ( !-x $installer->{ 'needBinary' } ) {
print
"The following required binary for the installation was not found\n";
print "\t" . $installer->{ 'needBinary' } . "\n";
exit 1;
}
}
}
# Do we need a directory specified as the installation source?
@@ -280,87 +302,6 @@ else
=begin doc
Read the specified configuration file, and update our global configuration
hash with the values found in it.
=end doc
=cut
sub readConfigurationFile
{
my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( !-e $file );
my $line = "";
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG{ $key } = $val;
}
}
close(FILE);
}
=begin doc
Parse the command line arguments this script was given.
@@ -411,13 +352,7 @@ sub parseCommandLineArguments
if ($VERSION)
{
my $REVISION = '$Revision: 1.65 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xt-install-image release $RELEASE - CVS: $REVISION\n";
print "xt-install-image release $RELEASE\n";
exit;
}
}
@@ -473,7 +408,7 @@ sub checkArguments
# If there are no scripts then we clearly cannot
# customise it!
#
my $dir = "/usr/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d";
my $dir = "/usr/share/xen-tools/" . $CONFIG{ 'dist' } . ".d";
if ( !-d $dir )
{
@@ -553,53 +488,6 @@ EOT
=begin doc
A utility method to run a system command. We will capture the return
value and exit if the command fails.
When running verbosely we will also display any command output.
=end doc
=cut
sub runCommand
{
my ($cmd) = (@_);
#
# Command start.
#
$CONFIG{ 'verbose' } && print "Executing : $cmd\n";
#
# Copy stderr to stdout, so we can see it, and make sure we log it.
#
$cmd .= " 2>&1 | tee --append /var/log/xen-tools/$CONFIG{'hostname'}.log";
#
# Run it.
#
my $output = `$cmd`;
if ( $? != 0 )
{
print "Running command '$cmd' failed.\n";
print "Aborting\n";
exit 127;
}
#
# Command finished.
#
$CONFIG{ 'verbose' } && print "Finished : $cmd\n";
return ($output);
}
=begin doc
This function will copy all the .deb files from one directory
@@ -685,7 +573,7 @@ sub do_copy
#
# Run the copy command.
#
runCommand($cmd);
runCommand($cmd, \%CONFIG);
}
@@ -705,21 +593,9 @@ sub do_debootstrap
# The command is a little configurable - mostly to allow you
# to use cdebootstrap.
#
my $cmd = $CONFIG{ 'debootstrap-cmd' };
my $cmd = $CONFIG{ 'debootstrap-cmd' } || $debootstrap_cmd;
print "Using $cmd as debootstrap command\n";
my $cachedir = $CONFIG{ 'cachedir' };
if ( !$cmd )
{
if (-x '/usr/sbin/debootstrap') {
$cmd = '/usr/sbin/debootstrap';
} elsif (-x '/usr/sbin/cdebootstrap') {
$cmd = '/usr/sbin/cdebootstrap';
} else {
print STDERR "Found neither debootstrap nor cdebootstrap and no --debootstrap-cmd given\n";
exit 1;
}
print "Using $cmd as debootstrap command\n";
}
#
# Cache from host -> new installation if we've got caching
@@ -736,7 +612,7 @@ sub do_debootstrap
}
$cachedir = $xtcache;
}
runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives");
runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives", \%CONFIG);
copyDebFiles( "$cachedir",
"$CONFIG{'location'}/var/cache/apt/archives" );
print("Done\n");
@@ -777,7 +653,7 @@ sub do_debootstrap
#
# Run the command.
#
runCommand($command);
runCommand($command, \%CONFIG);
#
@@ -848,7 +724,7 @@ sub do_rinse
$command .= " --verbose";
}
runCommand($command);
runCommand($command, \%CONFIG);
}
@@ -891,7 +767,7 @@ sub do_rpmstrap
# The command we're going to run.
#
my $command = "rpmstrap $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $mirror";
runCommand($command);
runCommand($command, \%CONFIG);
}
@@ -925,5 +801,5 @@ sub do_tar
#
# Run a command to copy an installed system into the new root.
#
runCommand("cd $CONFIG{'location'} && $cmd");
runCommand("cd $CONFIG{'location'} && $cmd", \%CONFIG);
}

15
debian/NEWS vendored
View File

@@ -1,3 +1,18 @@
xen-tools (4.4~beta1-1) unstable; urgency=low
* Exported environment variables no more contain dashes ("-"). Dashes in
environment variable names are from now on converted to underscores
("_") before being exported. May affect some hook or role scripts.
* /usr/lib/xen-tools/ has been moved to /usr/share/xen-tools/ to
properly adhere to FHS. In case you had local scripts added to
/usr/lib/xen-tools/, please move them to /usr/share/xen-tools/, too
and then remove /usr/lib/xen-tools/ and its left-over subdirectories
which all should be empty at that point, i.e. "rmdir -p
/usr/lib/xen-tools/*" should do the trick.
-- Axel Beckert <abe@debian.org> Fri, 23 Aug 2013 19:01:16 +0200
xen-tools (4.2~rc1-1) unstable; urgency=low
By default, xen-create-image now generates a random root password and

113
debian/changelog vendored
View File

@@ -1,3 +1,116 @@
xen-tools (4.4~beta1-1) unstable; urgency=low
* New upstream beta release
- Code deduplication to unify the xen-*-image scripts
- Moves /usr/lib/xen-tools/ to /usr/share/xen-tools/
- Use http.debian.net as default Debian mirror if no mirror is given
and xt-guess-suite-and-mirror is not used.
- Fix symbolic link hooks/centos-6/15-setup-arch (Closes: #690299)
- Execute END block not on --version/--help/--manual (Closes: #684346)
- Move code for --boot feature to END block. Fixes missing SSH
fingerprint display if --boot was used. (Closes: #679183)
- Correctly handle aborts in END block. (Closes: #704882)
- Use local parameter instead of global variable in unMountImage.
- Also recognize "M" and "G" instead of "MB" and "GB" as size unit for
--memory. (Closes: #691320) Document the recognized units.
- Default DomUs to use the noop scheduler (Closes: #693131)
- Overwork TLS disabling on Debian and Ubuntu
- xen-list-images now also outputs the file name of the config file.
- xen-list-images and xen-delete-image now understand --extension.
- Fixes "--extension=" with empty parameter.
- Sarge amd64 case handle properly
- Remove CVS revisions from --version output
- Support for Debian Jessie, Ubuntu Raring and preliminary support for
Ubuntu Saucy (debootstrap doesn't have support for Saucy at the time
of writing)
- Preliminary support for xl toolstack
- xen-create-image: Consistently use runCommand() instead of system()
- xt-install-image: Don't bail out if only cdebootstrap is installed
but not debootstrap (Thanks Elmar Heeb!)
- Makefile accepts DESTDIR=…
- Move examples from debian/examples to examples.
- Uses File::Which exclusively (no more findBinary, no more `which`),
added (build-) dependency on libfile-which-perl
- Knows about module-init-tools → kmod transition in wheezy/raring.
- Adds default mount options for ext4, identical to ext2/ext3.
- Ships /etc/initramfs-tools/conf.d/xen-tools for generating Dom0
initrds also suitable for DomU usage. Trigger update-initramfs.
- By default install linux-image-virtual instead of linux-image-server
on Ubuntu Intrepid and newer (Hopefully closes: #640099, LP #839492)
- Installs a legacy grub in all pygrub based Debian/Ubuntu DomUs to be
able to update the menu.list automatically.
- hooks/common.sh: installDebianPackage no more installs recommends.
- hooks/common.sh: Rename installCentOS4Package to installRPMPackage.
Add installCentOS4Package wrapper for backward compatibility.
- Fix filesystem tools installation in 91-install-fs-tools (which was
broken since 4.3~rc1-1) by merging 91-install-fs-tools back into
90-make-fstab. (Closes: #715340) Also supports RPM-based
distributions now.
- Fixes export of environment variables. Previously they could contain
dashes and then were only accessible from within Perl, but not from
within Bash.
- Fixes creation of "ARRAY(0x…).log" named log files.
- Makes some options (like --pygrub) negatable.
- Uses Test::NoTabs; add according build-dependency.
- Removes unused Perl modules Xen::Tools and Xen::Tools::Log from
source code. Also removes the according tests from the test suite.
→ Remove no more needed build-dependency on Moose.
- Better documents and checks requirements for the --apt_proxy
value. (See #623443 for the corresponding apt issue.) Add (build-)
dependency on libdata-validate-uri-perl.
- Use Data::Validate::{Domain,IP} for IP addresses and hostname checks.
Add corresponding (build-) dependencies on
libdata-validate-{domain,ip}-perl.
- Fixes broken quoting in list of required binaries
- Declares POD encoding. Fixes FTBFS with Perl 5.18. (Closes: #720519)
* Add debian/gbp.conf to be able to to build xen-tools with
git-buildpackage.
* Clean up debian/rules:
- Don't mention (generated) upstream changelog explicitly,
dh_installchangelogs finds it by itself if it exist. That way
building out of a freshly clone git repository does not fail due to
a missing upstream changelog.
- Use dh_auto_{install,clean}; use "$(MAKE)" instead of "make" where
dh_auto_* can't help. No more explicitly call "make manpages", it's
a depedency of "make install" in the next line anyway.
- Finally switch to a minimal dh style debian/rules.
* Bump debhelper compatibility to 9
- Update versioned debhelper build-dependency
* Bump Standards-Version to 3.9.4 (no changes)
* Add dependency on ${perl:Depends} to fix dpkg-gencontrol warning.
* Bump copyright years in debian/copyright.
* Apply wrap-and-sort.
-- Axel Beckert <abe@debian.org> Fri, 23 Aug 2013 19:00:03 +0200
xen-tools (4.3.1-1) unstable; urgency=low
* Remove t/modules.t in upstream's t/Makefile instead of debian/rules'
clean target.
* Run t/hook-tls.t only if distribution actually has
10-disable-tls. Fixes test suite failure on 32 bit architectures.
-- Axel Beckert <abe@debian.org> Sat, 30 Jun 2012 16:44:50 +0200
xen-tools (4.3-1) unstable; urgency=low
* New upstream release
- Remove most Mercurial traces
* Fixes FTBFS due to testsuite failures (Closes: #676681)
- Disable tests of not yet used Xen::Tools. Fixes FTBFS in test suite
due to not satisifed Moose dependency in Xen::Tools::Log.
- Added build-dependencies on libmoose-perl, git, and
libtest-pod-coverage-perl for t/perl-syntax.t, t/gitignore.t, and
t/pod-coverage.t.
- Skip t/hook-inittab.t if /etc/inittab is not present on the build
host. Fixes FTBFS on Ubuntu.
* Switch to source format to "3.0 (quilt)"
* Don't remove stamp files manually, dh_clean does that already
* Remove generated file t/modules.t in clean target to be able to build
twice in a row.
-- Axel Beckert <abe@debian.org> Tue, 26 Jun 2012 22:23:59 +0200
xen-tools (4.3~rc1-1) unstable; urgency=low
* New upstream release candidate

2
debian/compat vendored
View File

@@ -1 +1 @@
7
9

44
debian/control vendored
View File

@@ -2,17 +2,45 @@ Source: xen-tools
Section: utils
Priority: extra
Maintainer: Axel Beckert <abe@debian.org>
Build-Depends: debhelper (>= 7.0.0), libtest-pod-perl, libtext-template-perl, libfile-slurp-perl, devscripts
Standards-Version: 3.9.3
Build-Depends: debhelper (>= 9~),
devscripts,
git,
libdata-validate-domain-perl,
libdata-validate-ip-perl,
libdata-validate-uri-perl,
libfile-slurp-perl,
libfile-which-perl,
libtest-notabs-perl,
libtest-pod-coverage-perl,
libtest-pod-perl,
libtext-template-perl
Standards-Version: 3.9.4
Homepage: http://xen-tools.org/software/xen-tools
Vcs-Browser: http://gitorious.org/xen-tools/xen-tools
Vcs-Git: git://gitorious.org/xen-tools/xen-tools.git
Package: xen-tools
Architecture: all
Depends: debootstrap | cdebootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl, libfile-slurp-perl, ${misc:Depends}, openssh-client
Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, rinse (>= 1.9.1-1), libexpect-perl, xen-utils
Suggests: reiserfsprogs, xfsprogs, cfengine2, btrfs-tools
Depends: debootstrap | cdebootstrap,
libconfig-inifiles-perl,
libdata-validate-domain-perl,
libdata-validate-ip-perl,
libdata-validate-uri-perl,
libfile-slurp-perl,
libfile-which-perl,
libtext-template-perl,
openssh-client,
perl-modules,
${misc:Depends},
${perl:Depends}
Recommends: libexpect-perl,
rinse (>= 1.9.1-1),
xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae,
xen-utils
Suggests: btrfs-tools,
cfengine2,
reiserfsprogs,
xfsprogs
Description: Tools to manage Xen virtual servers
This package contains tools to manage Debian based Xen virtual servers.
.
@@ -25,7 +53,8 @@ Description: Tools to manage Xen virtual servers
* Debian 4.0 Etch
* Debian 5.0 Lenny
* Debian 6.0 Squeeze
* Debian 7.0 Wheezy
* Debian 7 Wheezy
* Debian 8 Jessie (under development)
* Debian Sid (Unstable)
* Ubuntu 6.06 Dapper Drake (LTS)
* Ubuntu 6.10 Edgy Eft
@@ -40,5 +69,8 @@ Description: Tools to manage Xen virtual servers
* Ubuntu 11.04 Natty Narwhal
* Ubuntu 11.10 Oneiric Ocelot
* Ubuntu 12.04 Precise Pangolin (LTS)
* Ubuntu 12.10 Quantal Quetzal
* Ubuntu 13.04 Raring Ringtail
* Ubuntu 13.10 Saucy Salamander (under development)
* CentOS 5
* CentOS 6

2
debian/copyright vendored
View File

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

2
debian/dirs vendored
View File

@@ -1,4 +1,4 @@
/etc/xen-tools
/etc/xen-tools/role.d
/etc/xen-tools/skel
/usr/lib/xen-tools
/usr/share/xen-tools

12
debian/docs vendored
View File

@@ -1,7 +1,7 @@
AUTHORS
README
SUPPORT
BUGS
TODO
KNOWN_BUGS
NEWS
README.markdown
SUPPORT.markdown
BUGS.markdown
TODO.markdown
KNOWN_BUGS.markdown
NEWS.markdown

1
debian/examples vendored Normal file
View File

@@ -0,0 +1 @@
examples/*

3
debian/gbp.conf vendored Normal file
View File

@@ -0,0 +1,3 @@
[DEFAULT]
upstream-tag=release-%(version)s
debian-tag=debian-%(version)s

55
debian/rules vendored
View File

@@ -2,56 +2,7 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
configure: configure-stamp
configure-stamp:
dh_testdir
touch configure-stamp
build: build-arch build-indep
build-arch: build-stamp
build-indep: build-stamp
build-stamp: configure-stamp
dh_testdir
touch build-stamp
clean:
dh_testdir
dh_testroot
make clean
rm -f build-stamp configure-stamp
dh_clean
install: build
dh_testdir
dh_testroot
dh_prep
dh_auto_test
make manpages
make install prefix=`pwd`/debian/xen-tools
dh_installdirs
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-indep: build install
dh_testdir
dh_testroot
dh_install
dh_installexamples debian/examples/setup-kernel-initrd debian/examples/update-modules
dh_installchangelogs ChangeLog
dh_installdocs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure
override_dh_auto_build:

View File

@@ -1 +1 @@
1.0
3.0 (quilt)

1
debian/triggers vendored Normal file
View File

@@ -0,0 +1 @@
activate update-initramfs

View File

@@ -125,13 +125,14 @@ install-method = debootstrap
# Disk and Sizing options.
##
#
size = 4Gb # Disk image size.
memory = 128Mb # Memory size
swap = 128Mb # Swap size
# noswap = 1 # Don't use swap at all for the new system.
fs = ext3 # use the EXT3 filesystem for the disk image.
dist = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
size = 4G # Root disk, suffix (G, M, k) required
memory = 128M # Suffix (G, M, k) required
swap = 128M # Suffix (G, M, k) required
# noswap = 1 # Don't use swap at all for new systems.
fs = ext3 # Default file system for any disk
dist = `xt-guess-suite-and-mirror --suite`
# Default distribution is determined by Dom0's distribution
image = sparse # Specify sparse vs. full disk images (file based images only)
#
# See the README for currently supported and tested distributions. You can
@@ -235,6 +236,13 @@ image = sparse # Specify sparse vs. full disk images.
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
#
# Uncomment the following line if you wish to use pygrub by default
# for all distributions.
#
# pygrub = 1
#
#
# The architecture to use when using debootstrap, rinse, or rpmstrap.
#
@@ -266,21 +274,24 @@ mirror = `xt-guess-suite-and-mirror --mirror`
# mirror_lenny = http://archive.debian.org/debian
# mirror_squeeze = http://cdn.debian.net/debian
# mirror_wheezy = http://cdn.debian.net/debian
# mirror_jessie = http://cdn.debian.net/debian
# mirror_sid = http://cdn.debian.net/debian
# mirror_dapper = http://old-releases.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_hardy = http://old-releases.ubuntu.com/ubuntu
# mirror_intrepid = http://old-releases.ubuntu.com/ubuntu
# mirror_jaunty = http://old-releases.ubuntu.com/ubuntu
# mirror_karmic = http://old-releases.ubuntu.com/ubuntu
# mirror_lucid = http://archive.ubuntu.com/ubuntu
# mirror_maverick = http://old-releases.ubuntu.com/ubuntu
# mirror_natty = http://archive.ubuntu.com/ubuntu
# mirror_natty = http://old-releases.ubuntu.com/ubuntu
# mirror_oneiric = http://archive.ubuntu.com/ubuntu
# mirror_precise = http://archive.ubuntu.com/ubuntu
# mirror_quantal = http://archive.ubuntu.com/ubuntu
# mirror_raring = http://archive.ubuntu.com/ubuntu
# mirror_saucy = http://archive.ubuntu.com/ubuntu
# If this is defined it will be used by debootstrap, and configured as the
# proxy for the guest
@@ -290,6 +301,7 @@ mirror = `xt-guess-suite-and-mirror --mirror`
#
# Filesystem options for the different filesystems we support.
#
ext4_options = noatime,nodiratime,errors=remount-ro
ext3_options = noatime,nodiratime,errors=remount-ro
ext2_options = noatime,nodiratime,errors=remount-ro
xfs_options = defaults

View File

@@ -8,7 +8,8 @@
#
{ if ( ( $kernel ) && ( !defined($pygrub)) )
{
$OUT.= "kernel = '$kernel'";
$OUT .= "kernel = '$kernel'\n";
$OUT .= "extra = 'elevator=noop'";
}
}
{ if ( ( $initrd ) && ( !defined($pygrub)) )

View File

@@ -19,7 +19,7 @@ hooks/
* The installation will have a running installation of OpenSSH
The subdirectories in this hooks/ directory will be installed
to the directory /usr/lib/xen-tools/
to the directory /usr/share/xen-tools/
Steve
--

View File

@@ -8,8 +8,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -66,7 +66,7 @@ cat > ${prefix}/boot/grub/menu.lst << EOF
default=0
timeout=5
title CentOS ($KERNELVERSION)
kernel /boot/vmlinuz-$KERNELVERSION xen_pv_hvm=enable
kernel /boot/vmlinuz-$KERNELVERSION xen_pv_hvm=enable elevator=noop
initrd /boot/initrd-$KERNELVERSION.img
EOF

View File

@@ -1 +1 @@
../common/15-disable-hwclock
../common/15-setup-arch

View File

@@ -8,8 +8,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -66,7 +66,7 @@ cat > ${prefix}/boot/grub/menu.lst << EOF
default=0
timeout=5
title CentOS ($KERNELVERSION)
kernel /boot/vmlinuz-$KERNELVERSION
kernel /boot/vmlinuz-$KERNELVERSION elevator=noop
initrd /boot/initramfs-$KERNELVERSION.img
EOF

View File

@@ -60,7 +60,7 @@ assert ()
# We take special care so that daemons shouldn't start after installation
# which they might otherwise do.
#
# NOTE: Function not renamed with trailing "s" for compatability reasons.
# NOTE: Function not renamed with trailing "s" for compatibility reasons.
#
installDebianPackage ()
{
@@ -98,7 +98,7 @@ installDebianPackage ()
#
# Install the packages
#
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 --no-install-recommends install "$@"
#
# Remove the policy-rc.d script.
@@ -113,6 +113,143 @@ installDebianPackage ()
}
#
# Generate a Debian-/Ubuntu-compliant menu.lst for legacy GRUB
#
generateDebianGrubMenuLst ()
{
prefix="$1"
DOMU_ISSUE="$2"
DOMU_KERNEL="$3"
DOMU_RAMDISK="$4"
#
# Log our options
#
logMessage "Generating a legacy GRUB menu.lst into prefix ${prefix}"
#
# We require at least 3 parameters
#
assert "$LINENO" "${prefix}"
assert "$LINENO" "${DOMU_ISSUE}"
assert "$LINENO" "${DOMU_KERNEL}"
#
# Prefix must be a directory, kernel a file
#
assert "$LINENO" -d ${prefix}
assert "$LINENO" -f "${prefix}/boot/${DOMU_KERNEL}"
#
# Generate a menu.lst for pygrub
#
mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default 0
timeout 2
### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below
## DO NOT UNCOMMENT THEM, Just edit them to your needs
## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
## kopt_2_6_8=root=/dev/hdc1 ro
## kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/xvda2 ro elevator=noop
## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)
## should update-grub create alternative automagic boot options
## e.g. alternative=true
## alternative=false
# alternative=true
## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
## lockalternative=false
# lockalternative=false
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=
## should update-grub lock old automagic boot options
## e.g. lockold=false
## lockold=true
# lockold=false
## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
## altoptions=(single-user) single
# altoptions=(single-user mode) single
## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
## howmany=7
# howmany=all
## should update-grub create memtest86 boot option
## e.g. memtest86=true
## memtest86=false
# memtest86=false
## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false
## should update-grub add savedefault to the default options
## can be true or false
# savedefault=false
## ## End Default Options ##
### END DEBIAN AUTOMAGIC KERNELS LIST
# Entries statically generated bu xen-tools upon installation. Maybe
# removed manually if the entries above (generated by update-grub)
# seem to work fine.
title $DOMU_ISSUE
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro elevator=noop
initrd /boot/$DOMU_RAMDISK
title $DOMU_ISSUE (Single-User)
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro single elevator=noop
initrd /boot/$DOMU_RAMDISK
title $DOMU_ISSUE (Default Kernel)
root (hd0,0)
kernel /vmlinuz root=/dev/xvda2 ro elevator=noop
initrd /initrd.img
title $DOMU_ISSUE (Default Kernel, Single-User)
root (hd0,0)
kernel /vmlinuz root=/dev/xvda2 ro single elevator=noop
initrd /initrd.img
E_O_MENU
}
#
# Disable the start-stop-daemon
@@ -191,9 +328,9 @@ removeDebianPackage ()
#
# Install a CentOS4 package via yum
# Install a RPM package via yum
#
installCentOS4Package ()
installRPMPackage ()
{
prefix=$1
package=$2
@@ -201,7 +338,7 @@ installCentOS4Package ()
#
# Log our options
#
logMessage "Installing CentOS4 ${package} to prefix ${prefix}"
logMessage "Installing RPM ${package} to prefix ${prefix}"
#
# We require a package + prefix
@@ -220,6 +357,15 @@ installCentOS4Package ()
chroot ${prefix} /usr/bin/yum -y install ${package}
}
# Backwards Compatibility Function
installCentOS4Package () ( installRPMPackage "$@" )
#
# Functions to test if we're on a redhatesk or debianesk system
#
isDeb() ( [ -x $1/usr/bin/apt-get -a -x $1/usr/bin/dpkg ] )
isYum() ( [ -x $1/usr/bin/yum ] )
#
@@ -230,11 +376,11 @@ installPackage ()
prefix=$1
package=$2
if [ -x ${prefix}/usr/bin/apt-get ] ; then
if isDeb ; then
installDebianPackage "$@"
elif [ -x ${prefix}/usr/bin/yum ] ; then
installCentOS4Package "$@"
elif isYum ; then
installRPMPackage "$@"
else
logMessage "Unable to install package ${package}; no package manager found"
@@ -261,4 +407,3 @@ installGentooPackage ()
logMessage "NOTE: Not doing anything - this is a stub - FIXME"
}

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -6,8 +6,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -70,18 +70,14 @@ chroot ${prefix} /usr/bin/apt-get update
#
# Now fixup TLS on non-64bit systems after dapper.
# Now fixup TLS on non-64bit systems after dapper. For dapper this is
# already fixed in 10-disable-tls.
#
if [ "$dist" != 'dapper' ]; then
if [ "`uname -m`" = "x86_64" ]; then
if [ "$arch" = 'i386' -a "$dist" != 'dapper' ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
else
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
fi
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -12,8 +12,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -11,8 +11,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -11,8 +11,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -38,9 +38,9 @@ mkdir -p ${prefix}/etc/ssh
#
if [ ! -f ${prefix}/etc/ssh/ssh_host_rsa_key ]; then
if ssh-keygen -t rsa -N "" -f ${prefix}/etc/ssh/ssh_host_rsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host RSA"
logMessage "successfully generated RSA host key"
else
logMessage "failed to generate Host RSA Key"
logMessage "failed to generate RSA host key"
fi
fi
@@ -49,9 +49,9 @@ fi
#
if [ ! -f ${prefix}/etc/ssh/ssh_host_dsa_key ]; then
if ssh-keygen -t dsa -N "" -f ${prefix}/etc/ssh/ssh_host_dsa_key -C "root@${hostname}"; then
logMessage "successfully generetaged Host DSA"
logMessage "successfully generated DSA host key"
else
logMessage "failed to generate Host DSA Key"
logMessage "failed to generate DSA host key"
fi
fi

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -19,8 +19,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -73,11 +73,6 @@ else
cp -au /lib/modules/$(uname -r) ${prefix}/lib/modules
fi
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
fi # if pygrub
#

View File

@@ -19,8 +19,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -0,0 +1,44 @@
#!/bin/sh
#
# Ensure that either modules-init-tools or kmod is setup.
#
# This is required in most setups. But even if it isn't required it
# can't really do anything bad; just waste a bit of space.
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install either kmod or module-init-tools package.
#
if chroot ${prefix} /usr/bin/apt-cache show module-init-tools >/dev/null 2>/dev/null; then
if chroot ${prefix} /usr/bin/apt-cache show module-init-tools | fgrep -qi transitional; then
installDebianPackage ${prefix} kmod
else
installDebianPackage ${prefix} module-init-tools
fi
else
installDebianPackage ${prefix} kmod
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1,52 @@
#!/bin/sh
#
# Ensure that either modules-init-tools or kmod is setup.
#
# This is most likely required if you're using a custom kernel
# for your Xen system. But even if it isn't required it can't
# really do anything bad; just waste a bit of space.
prefix=$1
#
# Source our common functions
#
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
#
# Install the grub 0.9x package ("grub-legacy" on Debian, "grub" on Ubuntu)
#
if chroot ${prefix} /usr/bin/apt-cache show grub-legacy 2>/dev/null | egrep -qi 'GRand Unified Bootloader.*Legacy'; then
installDebianPackage ${prefix} grub-legacy
else
installDebianPackage ${prefix} grub
fi
if [ ! -e ${prefix}/boot/grub/default ]; then
echo default > ${prefix}/boot/grub/default
fi
chroot ${prefix} /usr/sbin/update-grub
else
logMessage "pygrub not set, skipping grub-legacy installation"
fi # if pygrub
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -17,8 +17,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -100,6 +100,34 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
done
logMessage Checking for filesystem tools to install
#
# Install any required packages for the given root filesystem
#
if [ "$has_xfs" -eq 1 ]; then
installPackage ${prefix} xfsprogs
fi
if [ "$has_reiserfs" -eq 1 ]; then
if isAPT; then
installDebianPackage reiserfsprogs
elif isYum; then
installRPMPackage reiserfs-utils
else
logMessage "Unable to install reiserfs tools; no package manager recognized"
fi
fi
if [ "$has_btrfs" -eq 1 ]; then
if isAPT; then
installDebianPackage btrfs-tools
elif isYum; then
installRPMPackage btrfs-progs
else
logMessage "Unable to install btrfs tools; no package manager recognized"
fi
fi
#
# Log our finish
#

View File

@@ -1,45 +0,0 @@
#!/bin/sh
#
# Some root filesystems will require the installation of new packages
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Install any required packages for the given root filesystem
#
if [ $has_xfs -eq 1 ]; then
installDebianPackage ${prefix} xfsprogs
fi
if [ $has_reiserfs -eq 1 ]; then
installDebianPackage ${prefix} reiserfsprogs
fi
if [ $has_btrfs -eq 1 ]; then
installDebianPackage ${prefix} btrfs-tools
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -13,8 +13,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -12,8 +12,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -0,0 +1 @@
../common/81-install-modules-init-tools

View File

@@ -1 +0,0 @@
../common/91-install-fs-tools

View File

@@ -14,8 +14,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -90,30 +90,20 @@ fi
#
chroot ${prefix} /usr/bin/apt-get update
#
# For sid or etch systems we install libc6-xen
# For all systems after Sarge we install libc6-xen on i386
#
# For sarge we don't have that option, so we disable TLS.
# For Sarge we don't have that option, so we disable TLS the hard way.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
else
case "${dist}" in
*)
logMessage "Installing xen-aware libc6"
installDebianPackage ${prefix} libc6-xen
;;
sarge)
logMessage "Disabling TLS"
mv ${prefix}/lib/tls ${prefix}/lib/tls.disabled
mkdir ${prefix}/lib/tls
;;
esac
if [ "${arch}" = "i386" ]; then
if [ "${dist}" = 'sarge' ]; then
logMessage "Disabling TLS"
mv ${prefix}/lib/tls ${prefix}/lib/tls.disabled
mkdir ${prefix}/lib/tls
else
logMessage "Installing xen-aware libc6"
installDebianPackage ${prefix} libc6-xen
fi
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -103,28 +103,8 @@ fi
# Generate a menu.lst for pygrub
#
mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default 0
timeout 2
generateDebianGrubMenuLst "${prefix}" "$DOMU_ISSUE" "$DOMU_KERNEL" "$DOMU_RAMDISK"
title $DOMU_ISSUE
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro
initrd /boot/$DOMU_RAMDISK
title $DOMU_ISSUE (Single-User)
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro single
initrd /boot/$DOMU_RAMDISK
E_O_MENU
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
else
logMessage pygrub not set, skipping kernel install

View File

@@ -0,0 +1 @@
../common/81-install-modules-init-tools

View File

@@ -0,0 +1 @@
../common/82-install-grub-legacy

View File

@@ -1 +0,0 @@
../common/91-install-fs-tools

View File

@@ -12,8 +12,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -27,7 +27,7 @@ fi
logMessage Script $0 starting
if [ ${pygrub} ]; then
if [ "${pygrub}" ]; then
#
# Attempt to install a xen kernel, if that fails, then install a normal one
@@ -78,32 +78,12 @@ fi
# Generate a menu.lst for pygrub
#
mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default 0
timeout 2
generateDebianGrubMenuLst "${prefix}" "$DOMU_ISSUE" "$DOMU_KERNEL" "$DOMU_RAMDISK"
title $DOMU_ISSUE
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro
initrd /boot/$DOMU_RAMDISK
title $DOMU_ISSUE (Single-User)
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro single
initrd /boot/$DOMU_RAMDISK
E_O_MENU
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
else
logMessage pygrub not set, skipping kernel install
fi
fi # if pygrub
#
# Log our finish

View File

@@ -0,0 +1 @@
../common/81-install-modules-init-tools

View File

@@ -0,0 +1 @@
../common/82-install-grub-legacy

View File

@@ -1 +0,0 @@
../common/91-install-fs-tools

View File

@@ -12,8 +12,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -12,8 +12,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -16,8 +16,8 @@ prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi

View File

@@ -15,8 +15,8 @@ prefix=$1
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
@@ -27,13 +27,13 @@ fi
logMessage Script $0 starting
if [ ${pygrub} ]; then
if [ "${pygrub}" ]; then
#
# Attempt to install a xen kernel, if that fails, then install a normal one
#
KERNEL_PKG="linux-image-server"
KERNEL_PKG="linux-image-virtual"
logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops
@@ -68,32 +68,11 @@ fi
# Generate a menu.lst for pygrub
#
mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default 0
timeout 2
title $DOMU_ISSUE
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro
initrd /boot/$DOMU_RAMDISK
title $DOMU_ISSUE (Single-User)
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro single
initrd /boot/$DOMU_RAMDISK
E_O_MENU
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
generateDebianGrubMenuLst "${prefix}" "$DOMU_ISSUE" "$DOMU_KERNEL" "$DOMU_RAMDISK"
else
logMessage pygrub not set, skipping kernel install
fi
fi # if pygrub
#
# Log our finish

View File

@@ -0,0 +1 @@
../common/81-install-modules-init-tools

View File

@@ -0,0 +1 @@
../common/82-install-grub-legacy

View File

@@ -1 +0,0 @@
../common/91-install-fs-tools

View File

@@ -15,25 +15,25 @@ prefix=$1
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
if [ -e /usr/share/xen-tools/common.sh ]; then
. /usr/share/xen-tools/common.sh
else
. ./hooks/common.sh
fi
if [ "${pygrub}" ]; then
#
# Log our start
#
logMessage Script $0 starting
if [ "${pygrub}" ]; then
#
# The type of kernel that we will be installing
#
# linux_kernel_type="desktop"
#
linux_kernel_type="server"
linux_kernel_type="virtual"
linux_kernel_package="linux-image-${linux_kernel_type}"
@@ -54,33 +54,17 @@ DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
DOMU_RAMDISK=$(basename $(ls -1 ${prefix}/boot/initrd*|tail -n 1))
DOMU_ISSUE=$(head -n 1 ${prefix}/etc/issue | awk -F '\' '{ print $1 }' | sed 's/[ \t]*$//')
mkdir -p ${prefix}/boot/grub
cat << E_O_MENU > ${prefix}/boot/grub/menu.lst
default 0
timeout 2
#
# Generate a menu.lst for pygrub
#
title $DOMU_ISSUE
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro
initrd /boot/$DOMU_RAMDISK
generateDebianGrubMenuLst "${prefix}" "$DOMU_ISSUE" "$DOMU_KERNEL" "$DOMU_RAMDISK"
title $DOMU_ISSUE (Single-User)
root (hd0,0)
kernel /boot/$DOMU_KERNEL root=/dev/xvda2 ro single
initrd /boot/$DOMU_RAMDISK
E_O_MENU
else
logMessage "Package '${linux_kernel_package}' is not available"
fi
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
else
logMessage pygrub not set, skipping kernel install
fi # if pygrub

View File

@@ -0,0 +1 @@
../common/81-install-modules-init-tools

View File

@@ -0,0 +1 @@
../common/82-install-grub-legacy

View File

@@ -1 +0,0 @@
../common/91-install-fs-tools

View File

@@ -1,332 +0,0 @@
package Xen::Tools;
use warnings;
use strict;
use Moose;
use Xen::Tools::Log;
=head1 NAME
Xen::Tools - Build Xen domains with Perl
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
=head1 SYNOPSIS
my $xt = Xen::Tools->new();
=head1 FUNCTIONS
=head2 new
Instantiate the object.
=cut
override 'new' => sub {
my $class = shift;
# Initialize the base class
my $self = $class->super(@_);
$self->{_xtl} = Xen::Tools::Log->new( hostname => $self->hostname,
logpath => $self->logpath,
);
$self->_checkSystem();
return $self;
};
=head2 meta
This is a method which provides access to the current class's meta-
class. Inherited from Moose.
=cut
=head2 log
This method sends a log message to the current object's logging
mechanism
=cut
sub log {
my $self = shift;
$self->{_xtl}->print(@_);
}
=head2 hostname
Attribute which indicates the domain's hostname
=cut
has 'hostname' => ( is => 'ro', isa => 'Str', required => 1 );
=head2 logpath
Attribute which indicates the log directory. Defaults to /var/log/xen-tools
=cut
has 'logpath' => ( is => 'ro',
isa => 'Str',
default => '/var/log/xen-tools'
);
=begin doc
_findBinary
Find the location of the specified binary on the curent user's PATH.
Return undef if the named binary isn't found.
=end doc
=cut
sub _findBinary {
my $self = shift;
my( $bin ) = (@_);
# strip any path which might be present.
$bin = $2 if ( $bin =~ /(.*)[\/\\](.*)/ );
foreach my $entry ( split( /:/, $ENV{'PATH'} ) )
{
# guess of location.
my $guess = $entry . "/" . $bin;
# return it if it exists and is executable
return $guess if ( -e $guess && -x $guess );
}
return;
}
=begin doc
_checkSystem
Test that this system is fully setup for the new xen-create-image
script.
This means that the the companion scripts xt-* are present on the
host and executable.
=end doc
=cut
sub _checkSystem {
my $self = shift;
my @required = qw ( / xt-customize-image
xt-install-image
xt-create-xen-config / );
foreach my $bin ( @required )
{
if ( ! defined( $self->_findBinary( $bin ) ) )
{
$self->log("The script '$bin' was not found.\n",
"Aborting\n\n"
);
exit;
}
}
#
# Make sure that we have Text::Template installed - this
# will be used by `xt-create-xen-config` and if that fails then
# running is pointless.
#
my $test = "use Text::Template";
eval( $test );
if ( ( $@ ) && ( ! $self->{_force} ) )
{
print <<E_O_ERROR;
Aborting: The Text::Template perl module isn't installed or available.
Specify '--force' to skip this check and continue regardless.
E_O_ERROR
exit;
}
#
# Make sure that xen-shell is installed if we've got an --admin
# flag specified
#
if ( $self->{_admins} )
{
my $shell = undef;
$shell = "/usr/bin/xen-login-shell" if ( -x "/usr/bin/xen-login-shell" );
$shell = "/usr/local/bin/xen-login-shell" if ( -x "/usr/bin/local/xen-login-shell" );
if ( !defined( $shell ) )
{
print <<EOF;
You've specified administrator accounts for use with the xen-shell,
however the xen-shell doesn't appear to be installed.
Aborting.
EOF
exit;
}
}
#
# Test the system has a valid (network-script) + (vif-script) setup.
#
return $self->_testXenConfig();
}
=begin doc
Test that the current Xen host has a valid network configuration,
this is designed to help newcomers to Xen.
=end doc
=cut
sub _testXenConfig {
my $self = shift;
# wierdness.
return if ( ! -d "/etc/xen" );
#
# Temporary hash.
#
my %cfg;
#
# Read the configuration file.
#
open( my $config_fh, q{<}, '/etc/xen/xend-config.sxp' )
or die "Failed to read /etc/xen/xend-config.sxp: $!";
while( <$config_fh> )
{
next if ( ! $_ || !length( $_ ) );
# vif
if ( $_ =~ /^\(vif-script ([^)]+)/ )
{
$cfg{'vif-script'} = $1;
}
# network
if ( $_ =~ /^\(network-script ([^)]+)/ )
{
$cfg{'network-script'} = $1;
}
}
close( $config_fh );
if ( !defined( $cfg{'network-script'} ) ||
!defined( $cfg{'vif-script'} ) )
{
print <<EOF;
WARNING
-------
You appear to have a missing vif-script, or network-script, in the
Xen configuration file /etc/xen/xend-config.sxp.
Please fix this and restart Xend, or your guests will not be able
to use any networking!
EOF
}
else
{
if ( ( $cfg{'network-script'} =~ /dummy/i ) ||
( $cfg{'vif-script'} =~ /dummy/i ) )
{
print <<EOF;
WARNING
-------
You appear to have a "dummy" vif-script, or network-script, setting
in the Xen configuration file /etc/xen/xend-config.sxp.
Please fix this and restart Xend, or your guests will not be able to
use any networking!
EOF
}
}
return 1;
}
=head1 AUTHOR
C.J. Adams-Collier, C<< <cjac at colliertech.org> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-xen-tools at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Xen-Tools>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Xen::Tools
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Xen-Tools>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/Xen-Tools>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/Xen-Tools>
=item * Search CPAN
L<http://search.cpan.org/dist/Xen-Tools>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2007 C.J. Adams-Collier, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1; # End of Xen::Tools

411
lib/Xen/Tools/Common.pm Normal file
View File

@@ -0,0 +1,411 @@
# -*- perl -*
package Xen::Tools::Common;
=head1 NAME
Xen::Tools::Common - Common funtions used in xen-tools' Perl scripts
=head1 SYNOPSIS
use Xen::Tools::Common;
=cut
use warnings;
use strict;
use Exporter 'import';
use vars qw(@EXPORT_OK @EXPORT);
use English;
use File::Which;
@EXPORT = qw(readConfigurationFile xenRunning runCommand setupAdminUsers
findXenToolstack
logprint_with_config logonly_with_config fail_with_config);
=head1 FUNCTIONS
=head2 readConfigurationFile
=begin doc
Read the specified configuration file, and update our global configuration
hash with the values found in it.
=end doc
=cut
sub readConfigurationFile ($$)
{
my ($file, $CONFIG) = (@_);
# Don't read the file if it doesn't exist.
return if ( !-e $file );
my $line = "";
open( FILE, "<", $file ) or
fail_with_config("Cannot read file '$file' - $!", $CONFIG);
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
}
# Skip lines beginning with comments
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
{
$line = $1;
}
# Find variable settings
if ( $line =~ /([^=]+)=([^\n]+)/ )
{
my $key = $1;
my $val = $2;
# Strip leading and trailing whitespace.
$key =~ s/^\s+//;
$key =~ s/\s+$//;
$val =~ s/^\s+//;
$val =~ s/\s+$//;
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
my $post = $3;
# get output
my $output = `$cmd`;
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
}
# Store value.
$CONFIG->{ $key } = $val;
}
}
close(FILE);
}
=head2 xenRunning
=begin doc
Test to see if the given instance is running.
=end doc
=cut
sub xenRunning ($$)
{
my ($hostname, $CONFIG) = (@_);
my $running = 0;
die "Couldn't determine Xen toolstack" unless $CONFIG->{'xm'};
open( CMD, $CONFIG->{'xm'}." list $hostname 2>/dev/null |" ) or
fail_with_config("Failed to run '".$CONFIG->{'xm'}." list $hostname'", $CONFIG);
while (<CMD>)
{
my $line = $_;
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close(CMD);
return ($running);
}
=head2 findXenToolstack
=begin doc
Find the right Xen toolstack. On Debian and derivatives there's a
script which tells you about the current toolstack.
=end doc
=cut
sub findXenToolstack
{
my $helper = '/usr/lib/xen-common/bin/xen-toolstack';
if (-x $helper) {
my $toolstack = `$helper`;
chomp($toolstack);
return $toolstack if $toolstack;
}
my $xm = which('xm');
if ($xm and system("$xm list >/dev/null 2>/dev/null") == 0) {
return $xm;
}
my $xl = which('xl');
if ($xl and system("$xl list >/dev/null 2>/dev/null") == 0) {
return $xl;
}
return undef;
}
=head2 runCommand
=begin doc
A utility method to run a system command. We will capture the return
value and exit if the command files.
When running verbosely we will also display any command output once
it has finished.
=end doc
=cut
sub runCommand ($$;$)
{
my ($cmd, $CONFIG, $fail_ok) = (@_);
#
# Set a local if we don't have one.
#
$ENV{ 'LC_ALL' } = "C" unless ( $ENV{ 'LC_ALL' } );
#
# Header.
#
if ($CONFIG->{ 'verbose' }) {
logprint_with_config("Executing : $cmd\n", $CONFIG);
}
#
# Copy stderr to stdout, so we can see it, and make sure we log it.
#
$cmd .= " 2>&1";
#
# Run it.
#
my $rcopen = open(CMD, '-|', $cmd);
if (!defined($rcopen)) {
logprint_with_config("Starting command '$cmd' failed: $!\n", $CONFIG);
unless ($fail_ok) {
logprint_with_config("Aborting\n", $CONFIG);
print "See /var/log/xen-tools/".$CONFIG->{'hostname'}.".log for details\n";
$CONFIG->{'FAIL'} = 1;
exit 127;
}
}
while (my $line = <CMD>) {
if ($CONFIG->{ 'verbose' }) {
logprint_with_config($line, $CONFIG);
} else {
logonly_with_config($line, $CONFIG);
}
}
my $rcclose = close(CMD);
if ($CONFIG->{ 'verbose' }) {
logprint_with_config("Finished : $cmd\n", $CONFIG);
}
if (!$rcclose)
{
logprint_with_config("Running command '$cmd' failed with exit code $?.\n", $CONFIG);
logprint_with_config("Aborting\n", $CONFIG);
print "See /var/log/xen-tools/".$CONFIG->{'hostname'}.".log for details\n";
unless ($fail_ok) {
$CONFIG->{'FAIL'} = 1;
exit 127;
}
}
}
=head2 setupAdminUsers (xen-shell helper)
=begin doc
This routine is designed to ensure that any users specified with
the --admins flag are setup as administrators of the new instance.
=end doc
=cut
sub setupAdminUsers ($)
{
my $CONFIG = (@_);
#
# If we're not root we can't modify users.
#
return if ( $EFFECTIVE_USER_ID != 0 );
#
# If we don't have a sudoers file then we'll also ignore this.
#
return if ( !-e "/etc/sudoers" );
#
# Find the path to the xen-login-shell
#
my $shell = undef;
$shell = "/usr/bin/xen-login-shell" if ( -x "/usr/bin/xen-login-shell" );
$shell = "/usr/local/bin/xen-login-shell"
if ( -x "/usr/bin/local/xen-login-shell" );
return if ( !defined($shell) );
#
# For each user make sure they exist, and setup the
# login shell for them.
#
foreach my $user ( split( /,/, $ENV{ 'admins' } ) )
{
# Strip leading and trailing whitespace.
$user =~ s/^\s+//;
$user =~ s/\s+$//;
# Ignore root
next if ( $user =~ /^root$/i );
# Does the user exist?
if ( getpwnam($user) )
{
# Change shell.
if ($CONFIG->{ 'verbose' }) {
logprint_with_config("Changing shell for $user: $shell\n", $CONFIG);
}
system( "chsh", "-s", $shell, $user );
}
else
{
# Add a new user.
if ($CONFIG->{ 'verbose' }) {
logprint_with_config("Adding new user: $user\n", $CONFIG);
}
system( "useradd", "-s", $shell, $user );
}
#
# Add the entry to /etc/sudoers.
#
open( SUDOERS, ">>", "/etc/sudoers" ) or
warn "Failed to add user to sudoers file : $user - $!";
print SUDOERS
"$user ALL = NOPASSWD: /usr/sbin/xm, /usr/sbin/xl, /usr/bin/xen-create-image\n";
close(SUDOERS);
}
}
=head2 fail_with_config
=begin doc
Properly set $CONFIG{FAIL} on die
=end doc
=cut
sub fail_with_config ($$)
{
my ($text, $CONFIG) = (@_);
logprint_with_config($text, $CONFIG);
$CONFIG->{'FAIL'} = 1;
exit 127;
}
=head2 logonly_with_config
=begin doc
Print the given string to the logfile.
=end doc
=cut
sub logonly_with_config ($$)
{
my ($text, $CONFIG) = (@_);
if ( $CONFIG->{ 'hostname' } )
{
open( LOGFILE, '>>', '/var/log/xen-tools/'.$CONFIG->{'hostname'}.'.log' ) or
return;
print LOGFILE $text;
close(LOGFILE);
}
}
=head2 logprint_with_config
=begin doc
Print the given string both to our screen, and to the logfile.
=end doc
=cut
sub logprint_with_config ($$)
{
my ($text, $CONFIG) = (@_);
print $text;
logonly_with_config($text, $CONFIG);
}
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/
Axel Beckert, http://noone.org/abe/
Dmitry Nedospasov, http://nedos.net/
Stéphane Jourdois
Merged from several scripts by Axel Beckert.
=cut
return 1;

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