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

Compare commits

...

258 Commits

Author SHA1 Message Date
Axel Beckert
2ca9232fe9 Merge branch 'domaindir' of gitorious.org:xen-tools/xen-tools into domaindir 2010-05-28 00:12:04 +02:00
Axel Beckert
3a4fda345b New bug found: xen-delete-image ignores extension setting 2010-05-27 22:04:52 +02:00
Axel Beckert
24704f0bba Reword necessarity of x-c-i to check integer options on non-digits 2010-05-27 22:01:57 +02:00
Axel Beckert
dd2487a2e9 TODO: Hooks: Add the idea of package-manager or -format based hook directories 2010-05-27 01:00:23 +02:00
Axel Beckert
6e8ce650fd TODO: Move Non-Interactive Password Handling to post-4.2 2010-05-26 23:54:25 +02:00
Axel Beckert
78e134ea95 xen-update-image: Reformat source code comment to fit into 80 columns 2010-05-26 23:33:31 +02:00
Axel Beckert
7d9ee76da3 Offer --domaindir as alternativ to --dir
See http://bugs.debian.org/477238 for the discussion.
2010-05-26 23:32:18 +02:00
Axel Beckert
aba94e4c73 xen-update-image: Reformat source code comment to fit into 80 columns 2010-05-26 23:26:09 +02:00
Axel Beckert
6e5ea6a385 Debian Changelog Mention the addition of cfengine2 to the list of suggested packages 2010-05-26 22:59:35 +02:00
Axel Beckert
b674db90c9 Debian package: Add evms-cli to Suggests.
EVMS has been removed[1] from Debian before Lenny, but it is necessary
for some optional functionality of xen-tools. And since some Debian
derived distributions (e.g. Ubuntu 6.06 LTS Server, Ubuntu 8.04 LTS
and grml) still support it, it's included in the list of suggested
dependencies for the sake of completeness and correctness.

  [1] http://bugs.debian.org/491808
2010-05-26 22:53:48 +02:00
Axel Beckert
e169ca95a7 Fix cut & paste error in error message: wrong directory mentioned 2010-05-26 22:38:05 +02:00
Axel Beckert
15b8ece37a Implement --dry-run for xen-delete-image 2010-05-26 22:19:55 +02:00
Axel Beckert
a11bde091d Merge branch 'master' of gitorious.org:xen-tools/xen-tools 2010-05-26 22:13:27 +02:00
Axel Beckert
e16af7679b Fix spelling error: arbitary -> arbitrary 2010-05-26 22:11:47 +02:00
Dmitry Nedospasov
75ea318955 Merge branch 'master' of gitorious.org:xen-tools/xen-tools
Conflicts:
	TODO
2010-05-26 22:09:38 +02:00
Dmitry Nedospasov
e121eca49a Updated todo with (relevant for 4.2 and later)
* Removed several bullet points which are already implemented
* Added or changed several bullet points for the 4.2 release, most notably:
  1. Fix 70-install-ssh
  2. Clean up setup-hostname
* Added or changed several bullet points for a later release, most notably:
  1. Generic grub support
2010-05-26 21:58:32 +02:00
Axel Beckert
7a052cde71 TODO: Remove --vcpus and --bridge (implemented by Dmitry) 2010-05-26 21:45:00 +02:00
Axel Beckert
3990d298ae TODO: Merge passwd changing issues which were more or less listed twice 2010-05-26 21:42:22 +02:00
Axel Beckert
4c43c34025 TODO: Move new sources.list generation to post-4.2 2010-05-26 21:39:25 +02:00
Axel Beckert
babf60a9b7 roles/README: Hint to document new roles 2010-05-26 21:33:04 +02:00
Axel Beckert
ff2867f732 Document the udev role. 2010-05-26 21:30:36 +02:00
Axel Beckert
03532c16a6 Document the tmpfs role. 2010-05-26 21:28:27 +02:00
Axel Beckert
c464c336bd roles/tmpfs: Also remove legacy comment 2010-05-26 21:27:45 +02:00
Axel Beckert
3520cc7076 roles/tmpfs: Forgot to adjust authorship since it initially was just though for internal usage 2010-05-26 21:26:39 +02:00
Axel Beckert
a0fb2e22b0 Document the puppet role. 2010-05-26 21:21:48 +02:00
Axel Beckert
f7316431a0 Document the editor (sed) role.
Also fix a typo in roles/editor
2010-05-26 21:19:13 +02:00
Axel Beckert
d575169b42 Document the cfengine role, add cfengine to debian/control:Suggests.
Also fix some documentation bugs in roles/cfengine
2010-05-26 21:13:36 +02:00
Axel Beckert
ec848be650 TODO: xen-create-image(1): not all roles are listed 2010-05-26 21:04:05 +02:00
Axel Beckert
b452461473 xen-create-image(1): Don't talk aber Sarge and Etch, talk about Debian Stable, so we won't have to change to docs with every new Debian release. ;-) 2010-05-26 21:03:09 +02:00
Axel Beckert
fa4e023e68 TODO: Password handling 2010-05-26 20:54:42 +02:00
Axel Beckert
c93a08fee2 TODO: xen-delete-image doesn't delete all disk-images if --partitions is used 2010-05-25 23:45:36 +02:00
Axel Beckert
95a83dc5b9 Check for debootstrap and cdebootstrap installation, decide default based on that 2010-05-23 23:14:25 +02:00
Axel Beckert
b55d27c290 Add option --debootstrap-cmd to xen-create-image and xt-install-image 2010-05-23 23:02:48 +02:00
Axel Beckert
e1c1793232 Do not add security support if we're installing Sid 2010-05-23 21:40:30 +02:00
Axel Beckert
df82d28c3c Refactoring: Make check for sources.list more readable 2010-05-23 21:38:11 +02:00
Dmitry Nedospasov
c03029e0c6 Added support for (optionally) setting the bridge
--bridge

Added support for setting the number of vcpus
	--vcpus
2010-05-19 13:46:58 +02:00
Axel Beckert
e4eae6fcf5 bash completion: add rinse to list of install-methods 2010-05-18 17:28:53 +02:00
Axel Beckert
fcf98e6799 Remove image-server installation method
Was used by Steve with a "semi-proprietary" service at some hoster
which does no more use it (with Xen). According to Steve nobody else
used it so we can rip out this unneeded legacy code.

This also reverts the last commit.
2010-05-18 17:24:41 +02:00
Axel Beckert
131782b6c5 debian/control: Add "Suggests: libwww-perl" (needed if --image-server is used) 2010-05-18 14:15:34 +02:00
Axel Beckert
838303a939 Fix typo in error message: s/LDP/LWP/ 2010-05-18 14:10:05 +02:00
Axel Beckert
120ca27f6d List all possible install-methods close to the option itself 2010-05-18 14:09:40 +02:00
Dmitry Nedospasov
8634cda1ee Merge branch 'master' of gitorious.org:xen-tools/xen-tools 2010-05-17 23:20:14 +02:00
Dmitry Nedospasov
95932483e6 merged conflict 2010-05-17 23:17:09 +02:00
Axel Beckert
5cad841880 Indent list of distributions in debian package description to prevent word-wrapping
(fixes lintian warning possible-unindented-list-in-extended-description)
2010-05-17 23:14:41 +02:00
Dmitry Nedospasov
d5cd0fd8ae Added some TODOs
Updated Authors
2010-05-17 23:12:59 +02:00
Axel Beckert
0d71124eb1 Add pointer to /etc/xen-tools/partitions.d/sample-server as partitioning example.
(Thanks to Antoine Benkemoun for pointing out that such a hint is missing!)
2010-05-17 22:54:41 +02:00
Axel Beckert
7b026d3f99 Add role for making /var/run/, /var/lock/ and /tmp/ tmpfs 2010-05-17 21:55:48 +02:00
Axel Beckert
ea6cacf33d Reword and update distribution list in README and debian package description 2010-05-17 20:58:50 +02:00
Axel Beckert
e556ebdbf6 Use old-releases.ubuntu.com as default mirror for Edgy, Feisty and Gutsy; add default mirror for Dapper 2010-05-17 20:02:18 +02:00
Axel Beckert
83253c0214 Add files generated during the build of the debian package to .gitignore 2010-05-17 17:42:07 +02:00
Axel Beckert
3a53492e6a debian/changelog: new upstream author -> new upstream authors 2010-05-17 15:25:38 +02:00
Axel Beckert
24ef3371f8 Update debian/README.source to reflect switch to git 2010-05-17 13:33:10 +02:00
Axel Beckert
d1287f1949 Add Nathan O'Sullivan to contributors 2010-05-17 03:55:53 +02:00
Axel Beckert
ae22845718 Add documentation for commit af19678 2010-05-17 03:39:42 +02:00
Nathan
c0549371cc Add installPackage() function to call the appropriate distro installation function 2010-05-17 03:33:08 +02:00
Axel Beckert
97c1bb0637 Document changes introduced by 5b420f4 in POD 2010-05-17 03:30:15 +02:00
Nathan O'Sullivan
5b420f4cc6 Change role argument to allow supplying a full pathname to a file outside of roledir 2010-05-17 03:27:08 +02:00
Nathan O'Sullivan
f8f2915ec0 Mount /dev/pts while running apt-get to reduce unnecessary errors in logfile 2010-05-17 03:25:52 +02:00
Nathan O'Sullivan
0273892441 Allow disk_device and serial_device to be overridden on the command line 2010-05-17 03:25:13 +02:00
Nathan O'Sullivan
2bbd414b19 Copy /etc/localtime from host 2010-05-17 03:24:39 +02:00
Axel Beckert
c6cb25edf9 Fix cut & paste error in description of do_rinse 2010-05-17 03:07:29 +02:00
Axel Beckert
cea763b669 Let --mirror overrule per-distro mirror defaults
Previously the --mirror value was ignored if a default mirror for the
--dist value has been defined.

Now the --mirror value is by default unset and filled with the
per-distro default mirror in that case.
2010-05-17 02:52:19 +02:00
Axel Beckert
98514d3fc2 Remove redundant default mirror setting 2010-05-17 02:51:39 +02:00
Axel Beckert
29e2f7ece7 Mention also Hardy and Intrepid in Debian package description 2010-05-17 02:43:47 +02:00
Axel Beckert
abb37b2587 Edgy to Hardy: Also use hvc0 als default console device 2010-05-17 02:42:05 +02:00
Axel Beckert
f34afec732 hooks/intrepid: Fix log message regarding console tty 2010-05-17 02:41:23 +02:00
Axel Beckert
17b105e8e0 Use hvc0 instead of tty1 in intrepid, too 2010-05-17 02:32:38 +02:00
Axel Beckert
8df98d4198 Save the exit code of a command, but also allow its output to be saved to the log as it happens 2010-05-17 02:16:44 +02:00
Axel Beckert
620148b782 Fix lintian warning debian-news-entry-uses-asterisk 2010-05-17 02:13:29 +02:00
Axel Beckert
7a3ab22439 Split helper functions logprint into logprint and logonly 2010-05-17 02:09:47 +02:00
Axel Beckert
d670d13071 pygrub with Debian: Support the case where the local architectures is used by default
(Also fixes some typos in logged messages.)
2010-05-17 01:28:01 +02:00
Axel Beckert
546a1441a9 Fix some typos in code comments 2010-05-17 01:15:33 +02:00
Axel Beckert
fc973602e5 Correctly propagate failing hooks back to xen-create-image 2010-05-17 01:13:26 +02:00
Axel Beckert
dd5edf3ccb Call MAKEDEV only if it is installed.
(Which is the case as long as it was a 'required' package.)
2010-05-17 00:10:02 +02:00
Axel Beckert
57cc021ba7 Refactoring: consistent variable usage: ${variable}; some double quotes to ensure valid "test" syntax. 2010-05-16 23:39:44 +02:00
Axel Beckert
5653681c95 Fix syntax error 'unexpected operator' in kernel architecture check 2010-05-16 03:13:24 +02:00
Axel Beckert
d0b7777218 Use double quotes for ${pygrub} check 2010-05-16 03:06:14 +02:00
Axel Beckert
40405b41df Refactoring: Remove more differences between Karmic and Debian hooks 2010-05-16 02:50:35 +02:00
Axel Beckert
db32bcffd4 Refactoring: Remove whitespace differences between Karmic and Debian hooks 2010-05-16 02:48:45 +02:00
Axel Beckert
f7248b2e65 Reword list of supported distributions 2010-05-16 02:09:57 +02:00
Axel Beckert
85e98a86d5 Change letter cases in the Debian package description 2010-05-16 02:04:12 +02:00
Axel Beckert
b689cfd44d Update list of supported distributions, add them to the Debian package description 2010-05-16 02:02:54 +02:00
Axel Beckert
e3444880a6 Fix syntax error in detection of pygrub needing Ubuntu releases 2010-05-16 01:31:51 +02:00
Axel Beckert
b427cf74b2 Different default mirror for Sarge amd64 necessary 2010-05-16 01:31:06 +02:00
Axel Beckert
bbcfa3ad82 Use regexp to catch potential lucid derivatives as well as maverick 2010-05-16 01:10:50 +02:00
Axel Beckert
1b3f0539b9 Always use pygrub if installig Lucid, doesn't work without 2010-05-16 01:04:17 +02:00
Axel Beckert
a1d179c9eb Determine the correct pygrub path in xm.tmpl 2010-05-16 00:46:11 +02:00
Axel Beckert
49cf467f49 Document the --pygrub option 2010-05-16 00:07:41 +02:00
Axel Beckert
f72c3869e8 Karmic + Lucid: Also use hvc0 instead of tty1 2010-05-15 22:05:29 +02:00
Axel Beckert
c223b0f8c6 Use ftp.debian.org instead of ftp.us.debian.org as default Debian mirror
Rationale:

ftp.us.debian.org is a DNS Round Robin for five IPv4-only hosts in the US.

ftp.debian.org is only a single host (kassia in .nl), but also
reachable via IPv6 and connected to GEANT, i.e. most European
universities don't have to pay for traffic with ftp.debian.org.
2010-05-15 18:30:02 +02:00
Axel Beckert
c9023d73fd xen-create-image: Also output (often automatically determined) mirror 2010-05-15 18:24:50 +02:00
Axel Beckert
591f23157a Default mirror for Sarge (and soon Etch, too) is archive.debian.org 2010-05-15 18:23:53 +02:00
Axel Beckert
6dfbdb8fa0 Add hint about possibly missing xen-blkfront module in initramfs 2010-05-15 18:04:23 +02:00
Axel Beckert
49d01d9a76 Use hvc0 and xvda devices by default, add --scsi option for sda names 2010-05-15 16:04:17 +02:00
Axel Beckert
28803001d3 Use hvc0 instead of tty1 for Xen console by default 2010-05-15 15:48:59 +02:00
Axel Beckert
9210c6c8be Rudimentarily support Ubuntu Maverick Meerkat (10.10) 2010-05-15 01:29:17 +02:00
Axel Beckert
20b17ea5e1 Implement separate default mirrors for Debian and Ubuntu 2010-05-15 01:17:35 +02:00
Axel Beckert
3fb0ee97f4 Reduce double blank line to sigle one 2010-05-15 01:09:08 +02:00
Axel Beckert
a9aa524bea Install 'stable' instead of 'leny' by default 2010-05-15 01:08:19 +02:00
Axel Beckert
adeefd6fbb Also support 'stable' as suite to install 2010-05-15 01:07:40 +02:00
Axel Beckert
be143d50aa TODO: Make the hooks conffiles 2010-05-15 01:05:04 +02:00
Axel Beckert
9682622321 Install Lenny instead of Sarge by Default 2010-05-15 01:04:33 +02:00
Axel Beckert
b9d96a9f18 Debian preinst: remove also karmic.d symlink if it exists to allow clean unpacking 2010-05-15 00:46:00 +02:00
Axel Beckert
e2ac8b4ba1 Debian preinst: remove intrepid.d symlink if it exists to allow clean unpacking 2010-05-15 00:38:20 +02:00
Axel Beckert
fa09493b8c Add forgotten backslashes 2010-05-15 00:22:04 +02:00
Axel Beckert
12997b3416 Make VCS detection line more readable by splitting it up over several lines 2010-05-15 00:20:43 +02:00
Axel Beckert
27956bef61 Fix VCS detection in Makefile 2010-05-15 00:11:23 +02:00
Dmitry Nedospasov
b9d1fa2e72 Updated TODO 2010-05-02 13:20:17 +02:00
Dmitry Nedospasov
80a3fc020e * Added myself to Authors
* Removed hooks - they are working!
2010-04-24 20:04:29 +02:00
Dmitry Nedospasov
6f69386f90 * Test the supported distros
* Added an extra hook for Intrepid and Jaunty
* Cleaned up install-kernel scripts
* Updated README
* Updated Makefile to include the new hook
2010-04-24 17:01:53 +02:00
Dmitry Nedospasov
ed81659078 Updated README to reflect the following:
* Added the gitorious git repsoitory
	* Added a list of supported Distros (test by me)
	* Changed information on RPM-Based repositories
	* Other minor changes
2010-04-24 12:11:55 +02:00
Dmitry Nedospasov
23cd316a3f Merge branch 'master' of gitorious.org:xen-tools/xen-tools 2010-04-22 22:42:57 +02:00
Dmitry Nedospasov
a214296973 Updated kerenl install script in edgy 2010-04-17 19:24:51 +02:00
Dmitry Nedospasov
a155db0339 parse distribution for grub menu.lst from /etc/issue 2010-04-17 17:52:54 +02:00
Axel Beckert
3eee05758b Add "Suggests: xen-utils" to debian/control for pygrub 2010-04-17 15:13:18 +02:00
Axel Beckert
99329b4a96 Add missing item dash in TODO list 2010-04-17 15:05:24 +02:00
Axel Beckert
01d7921b0c TODO: Add Mathieu Parent's idea of having a directory of sources.list files for each distribution 2010-04-17 15:05:24 +02:00
Axel Beckert
1a5f9e1978 TODO: Fix debian/control when being online again 2010-04-17 15:05:24 +02:00
Axel Beckert
80770d0d76 debian/changelog: Supports pygrub 2010-04-17 15:05:24 +02:00
Dmitry Nedospasov
cda579c655 Modified TODO: Add distro name and release number to pygrub screen 2010-04-17 14:49:01 +02:00
Dmitry Nedospasov
5a0856e60d Merge branch 'master' of git@gitorious.org:xen-tools/xen-tools 2010-04-17 14:41:39 +02:00
Dmitry Nedospasov
0ecc697a82 1. Added pygrub support to the ubuntu scripts
- Hardy still not working
2. Added karmic support
	- Working fully
3. Edited Makefile to install karmic hooks
2010-04-17 14:41:18 +02:00
Dmitry Nedospasov
e5a3a80049 Updated howto 2010-04-17 03:50:09 +02:00
Dmitry Nedospasov
a82f8754df Changed description of the kernel script 2010-04-17 03:24:13 +02:00
Dmitry Nedospasov
efc9058c10 50-setup-hostname: added 127.0.1.1 with hostname for static ips, with FQDN for DHCP hosts
70-install-ssh: "ssh" package doesn't fully resolve on atleast the newer distros, changed the package "ssh" to "openssh-server"

80-install-kernel: new script to install a kernel for the pygrub flag

80-install-modules: added support for pygrub, this script is essentially ignored if pygrub is set. The kernel script will install modules in that case.
2010-04-17 03:12:52 +02:00
Axel Beckert
30ad001bb2 TODO: List of failing tests 2010-04-15 03:12:47 +02:00
Axel Beckert
631020a2a1 t/perl-syntax.t: Needs done_testing() now to declare the end of all tests 2010-04-15 03:12:09 +02:00
Axel Beckert
f419491ad7 TODO: Test suite should pass 2010-04-15 03:01:34 +02:00
Axel Beckert
a2ddaceab9 t/shell-syntax.t: Skip .git directories, too 2010-04-15 02:57:54 +02:00
Axel Beckert
105e53b355 t/portable-shell.t: Add checkbashism from Debian's devscripts (if available) 2010-04-15 02:56:31 +02:00
Axel Beckert
ce8f44ed36 Automatically skip syntax check if Moose is not installed 2010-04-15 02:51:05 +02:00
Axel Beckert
bf195706b8 Note that t/perl-syntax.t needs Moose.pm 2010-04-15 02:34:59 +02:00
Axel Beckert
4d240abd6c Don't check Makefiles for perl syntax 2010-04-15 02:25:09 +02:00
Axel Beckert
ae5a2eab53 Replace all tabs with 8 blanks to make t/no-tabs.t happy 2010-04-15 02:22:44 +02:00
Axel Beckert
3f9c79f0f2 Remove tab from blank line 2010-04-15 02:22:44 +02:00
Axel Beckert
e9b9b02869 Fix no-tabs.t to ignore .git as well as Makefiles 2010-04-15 02:22:44 +02:00
Axel Beckert
fb1de328c9 Make toplevel Makefile VCS-agnostic 2010-04-15 00:29:13 +02:00
Axel Beckert
7f70f4b148 Change debian/control Vcs-* header to new gitorious.org URLs 2010-04-15 00:01:05 +02:00
Axel Beckert
a007f0b49d Add .gitignore based on .hgignore 2010-04-14 23:56:48 +02:00
Axel Beckert
76d62ed165 TODO: Clean up the hooks directory 2010-04-10 15:22:56 +02:00
Axel Beckert
339116f886 Fix another typo in TODO 2010-04-10 15:21:52 +02:00
Axel Beckert
4362775855 Fix typo in last commit 2010-04-10 13:30:56 +02:00
Axel Beckert
a56858263d Remove resolved issues from TODO, add new ideas about --dist 2010-04-10 13:24:25 +02:00
Axel Beckert
03f1b523fc hg should ignore emacs-style backup files 2010-04-09 11:12:40 +02:00
Axel Beckert
bc750e31e0 Fix exit code of xt-install-image when install method failed (Closes: #534290) 2010-04-09 10:55:18 +02:00
Axel Beckert
0ae7d1a8ec Fix grammar debian/changelog entry 2010-04-09 10:52:49 +02:00
Axel Beckert
35c4a6f61f bashism fixes belong to the upstream part of the debian/changelog entry 2010-04-09 10:52:16 +02:00
Axel Beckert
05c80ffe3a Avoid single quotes in here data to avoid syntax hilighting issues (nearly the same text in xt-install-image) 2010-04-09 10:39:24 +02:00
Axel Beckert
e613f2088c Avoid single quotes in here data to avoid syntax hilighting issues 2010-04-09 10:35:45 +02:00
Axel Beckert
ac4ebe6246 Added a README.source explaining how to build xen-tools directly from the Mercurial repository 2010-04-09 02:09:58 +02:00
Axel Beckert
a08b06726a Fix one more bashism: ${parm/?/pat[/str]} 2010-04-09 01:58:02 +02:00
Axel Beckert
fb9b6347a0 Fix bashism: read without parameter 2010-04-09 01:56:04 +02:00
Axel Beckert
06e4590d0a Fix bashisms: echo -e -> printf 2010-04-09 01:48:15 +02:00
Axel Beckert
4728dffa72 Fix bashism: ${parm/?/pat[/str]} 2010-04-09 01:42:53 +02:00
Axel Beckert
eae96c3b5a Fix bashisms: kill -HUP -> kill -s HUP 2010-04-09 01:32:22 +02:00
Axel Beckert
1fded1e897 Mention fixing of bashisms in the debian/changelog 2010-04-09 01:31:04 +02:00
Axel Beckert
dd40247b13 Fix bashism in Makefile: [^y] -> [!y] 2010-04-09 01:03:31 +02:00
Axel Beckert
0dc86d6ccc Add debian/source/format to silence lintian 2010-03-26 21:53:44 +01:00
Axel Beckert
23966f2a39 Fix e-mail address of C.J. Adams-Collier 2010-03-26 21:45:50 +01:00
Axel Beckert
a53371f7ae Add myself as primary author to AUTHORS 2010-03-26 21:44:04 +01:00
Axel Beckert
467d45d1ec Removal of /etc/bash_completion.d/xm also fixes LP: #484098 as the feature where the bug was in will be removed 2010-03-26 21:36:18 +01:00
Axel Beckert
8ca88a9551 Installs dhclient for CentOS and Fedora if DHCP networking is requested (LP: #241446) 2010-03-26 21:03:50 +01:00
Axel Beckert
f007a6e7c5 Also check /etc/apt/sources.list.d for security updates 2010-03-26 20:52:43 +01:00
Axel Beckert
110498e5b8 First check if /etc/apt/sources.list exists, then grep it. If it doesn't exist enable security updates by default 2010-03-26 20:51:35 +01:00
Axel Beckert
07c59a1b0d Mention fix for LP: #309750 in the changelog 2010-03-26 20:48:57 +01:00
Axel Beckert
b9c1b50873 Just check for the string 'security' in sources.list, so it also matches local and ubuntu mirrors (LP: #309750) 2010-03-26 20:46:13 +01:00
Axel Beckert
24758e4dd3 File conflict with bash-completion: Also close freshly reported Launchpad bug 2010-03-26 20:35:11 +01:00
Axel Beckert
d6284de7e9 Fix missing curly bracket. Thanks to Steve Allison for noticing 2010-03-26 15:43:23 +01:00
Axel Beckert
465a9773b7 Also close parent Launchpad bug to #561618 2010-03-11 01:07:08 +01:00
Axel Beckert
fbc5ef984f Put rinse back to recommends, it's more or less needed for RPM based distros 2010-03-11 01:05:45 +01:00
Axel Beckert
2d8a03c5ac Reordered changelog entry, sort all upstream changes under "New upstream release candidate" 2010-03-11 01:04:32 +01:00
Axel Beckert
be1ef1850b Calls pwconv and grpconv inside chroot when installing Fedora (Closes: #499476) 2010-03-11 00:56:48 +01:00
Axel Beckert
2c14aab186 Support for more recent versions of Fedora, Ubuntu and Debian (Closes: #499477) 2010-03-11 00:54:39 +01:00
Axel Beckert
74195e43f1 Dereference pointers before hashing them to generate a MAC address. (Closes: #547265) 2010-03-10 23:37:21 +01:00
Axel Beckert
ead13f17b3 Don't write the FQDN into /etc/hostname (Closes: #492583) 2010-03-10 23:24:21 +01:00
Axel Beckert
814f1babd2 TODO: Bashisms 2010-03-10 23:23:59 +01:00
Axel Beckert
f8843e5233 Overhaul xen-create-image synopsis, show necessary option parameters 2010-03-10 22:58:52 +01:00
Axel Beckert
bd2b7f2ea8 Add the real bug which caused PEBKAC 2010-03-10 22:26:22 +01:00
Axel Beckert
ce37cac21f Remove note on bug which was PEBKAC (respectively bad documentation :-) 2010-03-10 22:25:00 +01:00
Axel Beckert
5bc0f1e7a4 Add Backspace to ease syntax highlighting 2010-03-10 22:10:06 +01:00
Axel Beckert
368b94e4ef Update TODO: Installs Squeeze now, ext4 support in, but buggy, add newly found bugs 2010-03-10 22:07:12 +01:00
Axel Beckert
83af869d16 Fix missing ';' 2010-03-10 21:56:38 +01:00
Axel Beckert
797196f23f Add new xt-guess-suite-and-mirror script to install-bin target 2010-03-10 21:54:22 +01:00
Axel Beckert
b66263df67 Set release version to 4.2rc1 and generate debian package version with ~ from it
Also do not tidy or modify Emacs' *~ backup files.
2010-03-10 21:29:14 +01:00
Axel Beckert
de31b27c9d Add (yet untested) support for ext4 2010-03-10 20:17:38 +01:00
Axel Beckert
878bc31dc0 Add full header to NEWS.Debian 2010-03-10 20:17:02 +01:00
Axel Beckert
2c8c1ecf62 Revert accidentially committed generated changes to t/modules.t 2010-03-10 20:05:04 +01:00
Axel Beckert
a4b4d67e76 Add (yet untested) support for Fedora 9-13. Ubuntu 9.04-10.04, Debian 6.0
Also resort the Debian releases by release date and add support for
Debian "testing", too.
2010-03-10 20:00:12 +01:00
Axel Beckert
3c5940f8d3 Rename xen-guess-debian-mirror to xt-guess-suite-and-mirror
--HG--
rename : bin/xen-guess-debian-mirror => bin/xt-guess-suite-and-mirror
2010-03-10 19:52:50 +01:00
Axel Beckert
967f926ed2 Debian/Ubuntu: Use Dom0's distribution by default for DomUs
Includes new tool xen-guess-debian-mirror.
2010-03-10 19:46:42 +01:00
Axel Beckert
066e434e08 Updated Copyright years 2010-03-10 19:32:56 +01:00
Axel Beckert
ea181e40a1 Give the example LVM volume group a more common name 2010-03-10 19:29:02 +01:00
Axel Beckert
ba66ab4231 Some more man page todos 2010-03-10 15:55:20 +01:00
Axel Beckert
e261684240 Merge in my todo list and first bugs found during testing, some more structure 2010-03-10 15:37:26 +01:00
Axel Beckert
324d0d26ba Reformat Steve's TODO list into todoo-mode compatible format 2010-03-10 15:13:17 +01:00
Axel Beckert
fb0575a47d Raising Debhelper compat means also raising the Build-Dependency 2010-03-03 02:14:49 +01:00
Axel Beckert
aad28f3fd3 Don't use perl syntax in shell scripts ;-) 2010-03-03 02:11:44 +01:00
Axel Beckert
b6c82d9f1a Only generate man pages for non-tidied scripts 2010-03-03 02:08:18 +01:00
Axel Beckert
4ddc72318b Fix some spelling errors found by lintian 2010-03-03 02:06:37 +01:00
Axel Beckert
f6e224e40e Also clean up .tdy files 2010-03-03 02:05:30 +01:00
Axel Beckert
962d1a4497 Update copyright file, add missing copyright years 2010-03-03 01:59:20 +01:00
Axel Beckert
10cc9763a4 Bump debhelper compat to 7 2010-03-03 01:56:05 +01:00
Axel Beckert
faee230c4b Fix lintian warning debhelper-but-no-misc-depends 2010-03-03 01:54:49 +01:00
Axel Beckert
9fb9ea1d4b Add an orig-tar-gz target 2010-03-03 01:51:52 +01:00
Axel Beckert
09a637f48e Prepare a 4.2~rc1 release so that at least the package builds 2010-03-03 01:46:36 +01:00
Axel Beckert
4bdd02ba9d Upload will close ITP #566714 2010-02-18 14:55:35 +01:00
Axel Beckert
44175e7369 Add Vcs-* header since the repository is now online 2010-02-18 14:27:55 +01:00
Axel Beckert
4f6e76338e Bump Standards-Version to 3.8.4 (no changes); change maintainer e-mail address to my debian.org address 2010-02-01 03:22:18 +01:00
Axel Beckert
d0070878a7 Fixed typo: 3.8. -> 3.8.3 2010-01-26 03:36:04 +01:00
Axel Beckert
be71eff471 Don't bail out if directory man already exists 2010-01-26 03:10:14 +01:00
Axel Beckert
cdc8d3041a Bump Standards-Version to 3.8. (no changes necessary) 2010-01-26 03:08:33 +01:00
Axel Beckert
98ce96a080 Downgrade reiserfsprogs, xfsprogs and rinse to Suggests. (Closes: #561618) 2010-01-26 02:57:00 +01:00
Axel Beckert
e08ade0875 Fix typo in /usr/lib/xen-tools/*.d/75-fixup-securetty (Closes: #503339) 2010-01-26 02:51:31 +01:00
Axel Beckert
fab5bc9861 xen-create-image: Don't delete configuration file if it already exists. (Closes: #520177) 2010-01-26 02:49:21 +01:00
Axel Beckert
da302cdd1d Change rinse path to /usr/sbin/. (Closes: #511211) 2010-01-26 02:41:02 +01:00
Axel Beckert
bc54d27f97 Bugs 502798 and 515228 seem the same 2010-01-26 02:34:46 +01:00
Axel Beckert
610ba4e71d Make sure, MAKEDEV is found (Closes: #502798) 2010-01-26 02:25:03 +01:00
Axel Beckert
c4bce3ea2f Last change justifies a new release 2010-01-26 02:00:36 +01:00
Axel Beckert
dfbf5910b9 Set umask to 0077 before creating disk images 2010-01-26 01:57:40 +01:00
Axel Beckert
a1078d5908 Adjust description 2010-01-26 01:34:43 +01:00
Axel Beckert
e253d89a68 New maintainer also in debian/control 2010-01-26 01:33:52 +01:00
Axel Beckert
3e12e5c0b6 Remove /etc/bash_completion.d/xm
Remove /etc/bash_completion.d/xm from the package since the package
bash-completion ships a more elaborate version of that file. Closes
the Debian bugs #566683 and #550590.
2010-01-26 01:31:18 +01:00
Axel Beckert
e28038f900 New upstream author, new Debian maintainer 2010-01-26 01:29:50 +01:00
Steve Kemp
5c899053cd tidy 2009-01-11 23:23:59 +00:00
Steve Kemp
3e120099d7 Added tag release-4.1 for changeset 6a10240d7c66 2009-01-11 23:22:44 +00:00
Steve Kemp
f968c9dd76 Added tag release-4. for changeset d75c787add2a 2009-01-11 23:22:44 +00:00
Steve Kemp
5ed66652ad Use perltidy with no args 2009-01-11 23:22:03 +00:00
Steve Kemp
7b29ec1bdf Fixed tab vs. space 2009-01-11 23:21:25 +00:00
Steve Kemp
31719505f6 Updated. 2009-01-06 21:01:51 +00:00
Steve Kemp
6338ba62c4 Added. 2009-01-06 20:59:55 +00:00
Steve Kemp
3c4e0160ae Updated. 2008-12-10 21:39:59 +00:00
Steve Kemp
84ee1658d1 Another fixup 2008-12-10 21:35:35 +00:00
Steve Kemp
a28bced5e3 Last juggle. 2008-12-09 14:02:04 +00:00
Steve Kemp
8965988439 Hardy + Intrepid now work 2008-12-08 22:56:55 +00:00
Steve Kemp
1d6771c719 Reverse order. 2008-12-08 22:56:28 +00:00
Steve Kemp
3cb87c09e9 Updated. 2008-12-08 20:35:13 +00:00
Steve Kemp
a95d576a4e 1. Work with partitions.
2.  Allow pygrub
2008-11-24 14:37:34 +00:00
Steve Kemp
9d061fe5a6 Always make /dev/pts available 2008-11-24 14:37:14 +00:00
Steve Kemp
22a4774cfe Updated to work with partitions 2008-11-23 21:12:42 +00:00
Steve Kemp
1b6d3dbdeb Delete the file if it exists 2008-11-23 21:12:36 +00:00
Steve Kemp
996e7d7e1f Don't abort if the file exists 2008-11-23 21:11:43 +00:00
Steve Kemp
97d01456a3 Attempt to fixup image-dev 2008-11-23 13:13:38 +00:00
Steve Kemp
aa7a2c4c5e New command line argument --no-hosts 2008-11-23 13:06:24 +00:00
Steve Kemp
3522a919ce Allow command line flags to be unset. 2008-10-14 22:04:40 +01:00
Steve Kemp
ef3a15c16c Updated standards version 2008-10-13 19:24:01 +01:00
Steve Kemp
c85144de0f Sync 2008-10-13 19:23:15 +01:00
Steve Kemp
455c16cefe Abort if the generated configuration file already exists.
(Closes: #499475)
2008-10-13 19:18:05 +01:00
Steve Kemp
290a30b1b1 Record the arch for rpm-based distros. Closes: 475125 2008-10-13 19:14:47 +01:00
Steve Kemp
8e2f1236fb Don't test for the POSIX module; per http://www.perlmonks.org/?node_id=689911 2008-06-03 21:49:44 +01:00
Steve Kemp
15436cc018 Correctly sort custom partitions.
#477334
2008-04-30 19:06:36 +01:00
Steve Kemp
3717d0cc15 Correctly force purging of packages in the role script(s).
#477629
2008-04-30 19:05:54 +01:00
Steve Kemp
5d11b820b7 Add the hostname to dom0's /etc/hosts in the correct order.
#477775
2008-04-30 19:05:21 +01:00
Steve Kemp
161ee94632 Add /dev/pts to the fedora guests. #474919 2008-04-30 19:04:04 +01:00
Steve Kemp
9ff14a400e Updated with the debian release 2008-04-30 19:02:51 +01:00
Steve Kemp
cb77db18b9 added perltidy rule 2008-04-01 20:52:15 +01:00
Steve Kemp
8be8f39add Ran through perltidy 2008-04-01 20:52:08 +01:00
Steve Kemp
be30692061 Only show the install source if there is one. 2008-03-14 12:12:28 +00:00
Steve Kemp
7a6c7f17c9 Fixed bug where quote characters prevented interpolation.
Added naive test case to catch the error next time round..
2008-02-20 11:55:32 +00:00
128 changed files with 6332 additions and 1949 deletions

11
.gitignore vendored Normal file
View File

@@ -0,0 +1,11 @@
.hg
.hgtags
ChangeLog
*~
build-stamp
configure-stamp
man
debian/files
debian/xen-tools
debian/xen-tools.debhelper.log
debian/xen-tools.substvars

View File

@@ -2,3 +2,4 @@
(^|/)\.hg($|/)
(^|/)\.hgtags($|/)
ChangeLog
~$

2
.hgtags Normal file
View File

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

21
AUTHORS
View File

@@ -1,8 +1,10 @@
Primary Author
--------------
Primary Authors
---------------
Axel Beckert <abe@deuxchevaux.org>
Dmitry Nedospasov <dmitry@nedos.net>
Steve Kemp <steve [at] uk.org.steve>
@@ -11,7 +13,7 @@ Contributions
Listed alphabetically by surname.
C.J. Adams-Collier <cjcollier [at] com.gmail.com
C.J. Adams-Collier <cjcollier [at] com.gmail>
- Added new modular structure to the code.
Nick Anderson <nick [at] net.anders0n>
@@ -51,12 +53,22 @@ Contributions
Gordon Messmer <gmessmer [at] edu.washington.u>
- Supplied .spec file for building .rpm packages.
Wilson Neil <neil [at] uk.co.aldur>
- Several suggestions and code for disabling start-stop-daemon
- Compatibility fixups for Ubuntu.
Nathan O'Sullivan <nathan [at] au.com.mammoth>
- New features wrt. options and helper functions
Walter Reiner <walter [at] at.wreiner>
- Provided --image-dev + --swap-dev patch.
Jameson Rollins <jrollins [at] edu.columbia.phys>
- Provided --output + --extension code.
Michal Safranek (Wejn) <wejn [at] box.cz>
- Inspiration for pygrub in the install-kernel scripts
Felipe Scarel <fbscarel [at] com.gmail>
- Bugfix for --no-swap + LVM
@@ -76,6 +88,3 @@ Contributions
Ward Vandewege <ward [at] be.pong>
- Made several updates for Ubuntu support.
Wilson Neil <neil [at] uk.co.aldur>
- Several suggestions and code for disabling start-stop-daemon
- Compatibility fixups for Ubuntu.

View File

@@ -12,10 +12,14 @@
#
# Only used to build distribution tarballs.
#
TMP ?= /tmp
DIST_PREFIX = ${TMP}
VERSION = 3.9
VERSION = 4.2rc1
DEBVERSION = $(shell echo $(VERSION)|sed 's/\(rc\|pre\|beta\|alpha\)/~\1/')
BASE = xen-tools
VCS = $(shell if git st > /dev/null; then echo git; \
elif hg st > /dev/null; then echo hg; \
else echo cannot-determine-used-vcs; fi)
#
# Installation prefix, useful for the Debian package.
@@ -42,7 +46,7 @@ nop:
# with those details.
#
changelog:
hg log -v > ChangeLog
$(VCS) log -v > ChangeLog
#
@@ -56,7 +60,8 @@ clean:
@find . -name '*.tmp' -exec rm \{\} \;
@find . -name 'tags' -exec rm \{\} \;
@find . -name '*.8.gz' -exec rm \{\} \;
@find man -name '*.html' -exec rm \{\} \;
@find . -name '*.tdy' -exec rm \{\} \;
@if [ -d man ]; then rm -rf man ; fi
@if [ -e build-stamp ]; then rm -f build-stamp ; fi
@if [ -e configure-stamp ]; then rm -f configure-stamp ; fi
@if [ -d debian/xen-tools ]; then rm -rf ./debian/xen-tools; fi
@@ -68,14 +73,14 @@ clean:
# If the testsuite runs correctly then commit any pending changes.
#
commit: test
hg commit
$(VCS) commit
#
# Show what has been changed in the local copy vs. the remote repository.
#
diff:
hg diff 2>/dev/null
$(VCS) diff 2>/dev/null
#
@@ -87,7 +92,7 @@ fixup-perms:
chmod 644 etc/xen-tools.conf
chmod 644 etc/xm.tmpl
chmod 644 etc/xm-nfs.tmpl
chmod 644 misc/xm misc/xen-tools misc/README
chmod 644 misc/xen-tools misc/README
#
# Install files to /etc/
@@ -104,7 +109,6 @@ install-etc:
cp partitions/*-* ${prefix}/etc/xen-tools/partitions.d/
-mkdir -p ${prefix}/etc/bash_completion.d
cp misc/xen-tools ${prefix}/etc/bash_completion.d/
cp misc/xm ${prefix}/etc/bash_completion.d/
#
@@ -120,6 +124,7 @@ install-bin:
cp bin/xen-delete-image ${prefix}/usr/bin
cp bin/xen-list-images ${prefix}/usr/bin
cp bin/xen-update-image ${prefix}/usr/bin
cp bin/xt-guess-suite-and-mirror ${prefix}/usr/bin
chmod 755 ${prefix}/usr/bin/xen-create-image
chmod 755 ${prefix}/usr/bin/xen-create-nfs
chmod 755 ${prefix}/usr/bin/xt-customize-image
@@ -128,6 +133,7 @@ install-bin:
chmod 755 ${prefix}/usr/bin/xen-delete-image
chmod 755 ${prefix}/usr/bin/xen-list-images
chmod 755 ${prefix}/usr/bin/xen-update-image
chmod 755 ${prefix}/usr/bin/xt-guess-suite-and-mirror
@@ -146,24 +152,36 @@ install-hooks:
-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
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 lenny.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 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/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
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/
mkdir -p ${prefix}/usr/lib/xen-tools/dapper.d/
cp -R hooks/dapper/*-* ${prefix}/usr/lib/xen-tools/dapper.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
cp hooks/common.sh ${prefix}/usr/lib/xen-tools
@@ -193,25 +211,34 @@ install: fixup-perms install-bin install-etc install-hooks install-libraries ins
# Build our manpages via the `pod2man` command.
#
manpages:
cd bin; for i in *-*; do pod2man --release=${VERSION} --official --section=8 $$i ../man/$$i.8; done
-mkdir -p man
cd bin; for i in *-*[!y]; do pod2man --release=${VERSION} --official --section=8 $$i ../man/$$i.8; done
for i in man/*.8; do gzip --force -9 $$i; done
#
# Make a new release tarball, and make a GPG signature.
#
release: fixup-perms update-version update-modules clean changelog
release: tidy fixup-perms update-version update-modules clean changelog
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)
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
mv $(DIST_PREFIX)/$(BASE)-$(VERSION).tar.gz .
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)
gpg --armour --detach-sign $(BASE)-$(VERSION).tar.gz
#
# Make a new orig.tar.gz for the Debian package
#
orig-tar-gz: release
mv $(BASE)-$(VERSION).tar.gz ../$(BASE)_$(DEBVERSION).orig.tar.gz
mv $(BASE)-$(VERSION).tar.gz.asc ../$(BASE)_$(DEBVERSION).orig.tar.gz.asc
#
# Run the test suite.
@@ -228,6 +255,17 @@ test-verbose:
#
# Run our main script(s) through perltidy
#
tidy:
if [ -x /usr/bin/perltidy ]; then \
for i in bin/*-*[^~]; do \
echo "tidying $$i"; \
perltidy $$i \
; done \
; fi
#
# Uninstall the software, completely.
#
@@ -240,12 +278,12 @@ uninstall:
rm -f ${prefix}/usr/bin/xt-install-image
rm -f ${prefix}/usr/bin/xt-create-xen-config
rm -f ${prefix}/usr/bin/xen-create-nfs
rm -f ${prefix}/usr/bin/xt-guess-suite-and-mirror
rm -f ${prefix}/etc/xen-tools/xen-tools.conf
rm -f ${prefix}/etc/xen-tools/xm.tmpl
-rm -rf ${prefix}/etc/xen-tools/skel
-rmdir ${prefix}/etc/xen-tools/
-rm -f ${prefix}/etc/bash_completion.d/xen-tools
-rm -f ${prefix}/etc/bash_completion.d/xm
rm -rf ${prefix}/usr/lib/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
@@ -258,8 +296,8 @@ uninstall:
#
# NOTE: Removes empty local directories.
#
update:
hg pull --update 2>/dev/null
update:
$(VCS) pull --update 2>/dev/null
#
@@ -275,4 +313,4 @@ update-modules:
# at the top of this file. Steve-Specific?
#
update-version:
perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9]';/RELEASE = '${VERSION}';/g" bin/*-*
perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9][^']*';/RELEASE = '${VERSION}';/g" bin/*-*[^~]

59
README
View File

@@ -2,8 +2,8 @@
Homepage:
http://www.xen-tools.org/software/xen-tools
Mercurial Repository:
http://xen-tools.repository.steve.org.uk/
Git Repository:
http://gitorious.org/xen-tools
Mailing Lists:
http://xen-tools.org/software/xen-tools/lists.html
@@ -20,11 +20,45 @@ xen-tools
to be accessible over your local network and complete with an installed
copy of OpenSSH.
This software is primarily aimed at users who wish to create virtual
instances of Debian Sarge, Etch, or Sid. Although other distributions
such as Ubuntu Dapper, Edgy, and Feisty are supported if you have the
appropriate packages installed.
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.
However currently only Debian and Ubuntu releases are tested and
known to work, i.e.:
Debian:
* Sarge 3.1 (i386 only)
* Etch 4.0
* Lenny 5.0
* Squeeze 6.0
* Sid (works at least at the moment of writing :-)
Ubuntu:
* 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 (see [2])
* Maverick Meerkat 10.10 (works at least at the moment of writing :-)
[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
[2] As of writing this 24.04.10, there is an issue with tar on
Lucid with kernels < 2.6.22 this should however be patched right
after release. See:
https://bugs.launchpad.net/ubuntu/+source/tar/+bug/539814
Older versions of ubuntu may work, however you will have to have to find
a mirror that still hosts them. Currently the oldest Ubuntu Distribution
on Canonical's archive.ubuntu.com is Hardy Heron.
Requirements
------------
@@ -37,18 +71,11 @@ Requirements
* 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
In order to install RPM-based distributions such as CentOS, or
You can try to install RPM-based distributions such as CentOS, or
Fedora Core you will need a correctly installed and configured
"rinse" package.
To install Ubuntu distributions upon a Debian host system you will
need either:
* The Ubuntu version of debootstrap installed.
* A patched debootstrap package from:
http://steve.org.uk/Software/tmp/debootstrap/
"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 should also install the xen-shell package

165
TODO
View File

@@ -1,16 +1,161 @@
TODO
----
====
1. Test and support more file system types. Actually this should be
pretty simple now that the parameters are stored in the configuration
hash. The only issue is that trailing whitespace is missing from the
"make_fs_foo" option.
Bugs to fix and Features to add before a 4.2 release
----------------------------------------------------
2. Write more test cases.
* xen-create-image man page overhaul:
3. LVM snapshot support as an install source.
- ambiguous option list with regards to parameters
4. xen-delete-image should unallocate any used IP addresses.
* Interactive Password Handling (maybe also the passwd role)
Steve
--
Shouldn't give up after only one password missmatch. This is just
a mater of wrapping the passwd call in a loop.
* Fix 70-install-ssh
Currently 70-install-ssh fails to finish installing the ssh-server
because it does not have a random seed to generate the host keys.
Mounting /proc and /dev in chroot prior to calling the install
function should fix this. If ssh-server is successfully installed
in the domU, it's key fingerprint should be echo'd in a way that
can easily be grep'ed into other scripts.
* Test and support more file system types.
Actually this should be pretty simple now that the parameters are
stored in the configuration hash. The only issue is that trailing
whitespace is missing from the "make_fs_foo" option.
* xen-delete-image doesn't remove all logical volumes if --partitions is used.
See the link below for details how to reproduce. Reproducable at
least with --lvm. Thanks to Antoine Benkemoun for reporting.
http://xen-tools.org/pipermail/xen-tools-discuss/2010-May/000757.html
* xen-delete-image ignores extension setting
* xen-create-image should check all integer options on non-digits.
* Test suite should pass
Currently failing:
t/getopt.t
t/xen-delete-image.t
t/xen-tools.t
t/xt-create-xen-config.t
* Clean up setup-hostname - copying /etc/hosts isn't reliable
One could argue that that this gives "extra" information to the domU, since
the /etc/hosts file may contain more than just hosts on the same subnet.
This should atleast be disabled via a flag.
* Setup locales in the hooks?
Currently no locales are set and this causes several domU errors which appear
in the domU's logs.
Maybe for a 4.3 or 5.0 release
------------------------------
* 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.
* Non-Interactive Password Handling
Option to generate passwords (check pwgen, apg, makepasswd, and
gpw which of them are best suited for generating complete
/etc/passwd and /etc/shadow lines). The password should be echo'ed
after installation in a way that can be easily grep'ed into other
scripts.
* Generic grub support
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.
* Move the hooks directory to /etc/xen-tools/ to officially allow
added and modified hooks.
* Clean up the hooks directory
Currently we have one directory for Ubuntu and Fedora named after
the first supported release which is then duplicated for each
subsequent release.
I'm sure this won't scale forever. So to minimise code duplication
I'd like to have one common directory per distribution (e.g. called
ubuntu-common, fedora-common, debian-common, maybe even deb-common,
rpm-common or yum-common for dpkg/apt-, rpm/yum-based
distributions, etc.) with generic hooks valid for all or most of
the releases of one distribution and then one hook directory per
release (e.g. called ubuntu-10.04 or ubuntu-lucid or so) which has
symbolic links to everything which can be used unchanged from the
common directory and new files for everything which has to be
different or only there.
* 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 hooks
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
Stuff from Steve's TODO list / Generic TODOs
--------------------------------------------
* Write more test cases.
* xen-delete-image should unallocate any used IP addresses.

File diff suppressed because it is too large Load Diff

View File

@@ -94,7 +94,7 @@ Show the version number and exit.
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -124,23 +124,23 @@ my %CONFIG;
#
# Default options
#
$CONFIG{'template'} = '/etc/xen-tools/xm-nfs.tmpl';
$CONFIG{ 'template' } = '/etc/xen-tools/xm-nfs.tmpl';
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
# store version number away.
$CONFIG{'xen_tools_version'} = $RELEASE;
$CONFIG{ 'xen_tools_version' } = $RELEASE;
#
# Read the global configuration file.
#
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
#
@@ -161,13 +161,13 @@ testArguments();
if ( -e "/etc/xen/$CONFIG{'hostname'}.cfg" )
{
die "Configuration file for $CONFIG{'hostname'} already exists"
unless( $CONFIG{'force'} );
unless ( $CONFIG{ 'force' } );
}
#
# If we've been given any administrators then set them up.
#
if ( $CONFIG{'admins'} )
if ( $CONFIG{ 'admins' } )
{
setupAdminUsers();
}
@@ -197,20 +197,20 @@ exit;
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( ! -e $file );
return if ( !-e $file );
my $line = "";
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
while (defined($line = <FILE>) )
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -220,7 +220,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -243,6 +243,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -250,7 +251,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -261,7 +262,7 @@ sub readConfigurationFile
}
}
close( FILE );
close(FILE);
}
@@ -286,48 +287,48 @@ sub parseCommandLineArguments
#
GetOptions(
# Networking options
"dhcp", \$CONFIG{'dhcp'},
"gateway=s", \$CONFIG{'gateway'},
"broadcast=s", \$CONFIG{'broadcast'},
"ip=s", \$CONFIG{'ip'},
"netmask=s", \$CONFIG{'netmask'},
"hostname=s", \$CONFIG{'hostname'},
"memory=s", \$CONFIG{'memory'},
"mac=s", \$CONFIG{'mac'},
# Networking options
"dhcp", \$CONFIG{ 'dhcp' },
"gateway=s", \$CONFIG{ 'gateway' },
"broadcast=s", \$CONFIG{ 'broadcast' },
"ip=s", \$CONFIG{ 'ip' },
"netmask=s", \$CONFIG{ 'netmask' },
"hostname=s", \$CONFIG{ 'hostname' },
"memory=s", \$CONFIG{ 'memory' },
"mac=s", \$CONFIG{ 'mac' },
# NFS options.
"nfs_server=s", \$CONFIG{'nfs_server'},
"nfs_root=s", \$CONFIG{'nfs_root'},
# NFS options.
"nfs_server=s", \$CONFIG{ 'nfs_server' },
"nfs_root=s", \$CONFIG{ 'nfs_root' },
# Misc. options
"admins=s", \$CONFIG{'admins'},
"kernel=s", \$CONFIG{'kernel'},
"initrd=s", \$CONFIG{'initrd'},
"force", \$CONFIG{'force'},
"template=s", \$CONFIG{'template'},
# Misc. options
"admins=s", \$CONFIG{ 'admins' },
"kernel=s", \$CONFIG{ 'kernel' },
"initrd=s", \$CONFIG{ 'initrd' },
"force", \$CONFIG{ 'force' },
"template=s", \$CONFIG{ 'template' },
# Help options
"help", \$HELP,
"manual", \$MANUAL,
"verbose", \$CONFIG{'verbose'},
"version", \$VERSION
# Help options
"help", \$HELP,
"manual", \$MANUAL,
"verbose", \$CONFIG{ 'verbose' },
"version", \$VERSION
);
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.13 $';
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 - CVS: $REVISION\n");
exit;
}
}
@@ -344,36 +345,37 @@ sub parseCommandLineArguments
sub testArguments
{
#
# Hostname is mandatory
#
die "No hostname" unless( $CONFIG{'hostname'} );
die "No hostname" unless ( $CONFIG{ 'hostname' } );
my @network = qw/ ip gateway netmask /;
#
# If DHCP then all the other options aren't needed
#
if ( $CONFIG{'dhcp'} )
if ( $CONFIG{ 'dhcp' } )
{
foreach my $f ( @network )
foreach my $f (@network)
{
delete( $CONFIG{ $f } );
}
}
else
{
foreach my $f ( @network )
foreach my $f (@network)
{
die "Missing --$f" unless( $CONFIG{$f} );
die "Missing --$f" unless ( $CONFIG{ $f } );
}
}
#
# We need an NFS server + root
#
die "Missing NFS server." unless( $CONFIG{'nfs_server'} );
die "Missing NFS root." unless( $CONFIG{'nfs_root'} );
die "Missing NFS server." unless ( $CONFIG{ 'nfs_server' } );
die "Missing NFS root." unless ( $CONFIG{ 'nfs_root' } );
# All OK.
@@ -381,7 +383,6 @@ sub testArguments
=begin doc
This routine is designed to ensure that any users specified with
@@ -393,6 +394,7 @@ sub testArguments
sub setupAdminUsers
{
#
# If we're not root we can't modify users.
#
@@ -401,24 +403,26 @@ sub setupAdminUsers
#
# If we don't have a sudoers file then we'll also ignore this.
#
return if ( ! -e "/etc/sudoers" );
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" );
$shell = "/usr/local/bin/xen-login-shell"
if ( -x "/usr/bin/local/xen-login-shell" );
return if ( !defined( $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'} ) )
foreach my $user ( split( /,/, $ENV{ 'admins' } ) )
{
# Strip leading and trailing whitespace.
$user =~ s/^\s+//;
$user =~ s/\s+$//;
@@ -429,23 +433,27 @@ sub setupAdminUsers
# Does the user exist?
if ( getpwnam($user) )
{
# Change shell.
$CONFIG{'verbose'} && print "Changing shell for $user: $shell\n";
$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";
$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 );
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);
}
}
@@ -461,15 +469,16 @@ sub setupAdminUsers
sub createNewConfigurationFile
{
die "Template file missing: $CONFIG{'template'}" unless( -e $CONFIG{'template'} );
die "Template file missing: $CONFIG{'template'}"
unless ( -e $CONFIG{ 'template' } );
#
# Load the template.
#
my $template = new Text::Template( TYPE => 'FILE',
SOURCE => $CONFIG{'template'} );
SOURCE => $CONFIG{ 'template' } );
my $result = $template->fill_in( HASH => \%CONFIG );
my $result = $template->fill_in( HASH => \%CONFIG );
#
# The file we'll write to.
@@ -481,5 +490,5 @@ sub createNewConfigurationFile
#
open( FILE, ">", $file ) or die "Failed to write to $file - $!";
print FILE $result;
close( FILE );
close(FILE);
}

View File

@@ -15,9 +15,12 @@ xen-delete-image - Delete previously created Xen instances.
--verbose Show diagnostic output.
General options:
--dir Specify the output directory where images were previously saved.
--lvm Specify the LVM volume to use.
--evms Specify the EVMS container to use.
--dir Specify the output directory where images were previously
saved. (old style)
--domaindir Specify the output directory where images were previously
saved. (new style)
--lvm Specify the LVM volume to use.
--evms Specify the EVMS container to use.
Specifying hosts:
--hostname Specify the image name to delete.
@@ -33,7 +36,14 @@ xen-delete-image - Delete previously created Xen instances.
=over 8
=item B<--dir>
Specify the output directory where images were previously saved.
Specify the output directory where images were previously saved. Looks
for directories named after the hostname in a subdirectory
"domains". (old style, see xen-create-image(1) for details)
=item B<--domaindir>
Specify the output directory where images were previously saved. Looks
for directories named after the hostname directorly in this
directory. (new style, see xen-create-image(1) for details)
=item B<--evms>
Specify the EVMS container where images were previously saved.
@@ -141,7 +151,7 @@ Show the version number and exit.
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -169,8 +179,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
@@ -179,7 +188,7 @@ my $RELEASE = '3.9';
#
if ( -e "/etc/xen-tools/xen-tools.conf" )
{
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
}
@@ -199,7 +208,7 @@ checkArguments();
#
# Abort if non-root user.
#
if ( (!$CONFIG{'test'}) && ( $EFFECTIVE_USER_ID != 0 ) )
if ( ( !$CONFIG{ 'test' } ) && ( $EFFECTIVE_USER_ID != 0 ) )
{
print <<E_O_ROOT;
@@ -217,11 +226,11 @@ E_O_ROOT
# Loop over the supplied arguments, and attempt to delete each
# image.
#
while( my $name = shift )
while ( my $name = shift )
{
if ( !xenRunning( $name ) )
if ( !xenRunning($name) )
{
deleteXenImage( $name );
deleteXenImage($name);
}
else
{
@@ -232,12 +241,12 @@ while( my $name = shift )
#
# Also delete any which were specified using the --hostname flag
#
my $hosts = $CONFIG{'hostname'};
foreach my $name ( @$hosts )
my $hosts = $CONFIG{ 'hostname' };
foreach my $name (@$hosts)
{
if ( !xenRunning( $name ) )
if ( !xenRunning($name) )
{
deleteXenImage( $name );
deleteXenImage($name);
}
else
{
@@ -252,7 +261,6 @@ exit 0;
=begin doc
Read the configuration file specified.
@@ -263,16 +271,16 @@ exit 0;
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
my $line = "";
while (defined($line = <FILE>) )
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -282,7 +290,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -305,6 +313,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -312,7 +321,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -323,12 +332,11 @@ sub readConfigurationFile
}
}
close( FILE );
close(FILE);
}
=begin doc
Parse the arguments specified upon the command line.
@@ -342,38 +350,44 @@ sub parseCommandLineArguments
my $HELP = 0;
my $MANUAL = 0;
my $VERSION = 0;
$CONFIG{ 'dry-run' } = 0;
# Parse options.
#
GetOptions(
"dir=s", \$CONFIG{'dir'},
"lvm=s", \$CONFIG{'lvm'},
"evms=s", \$CONFIG{'evms'},
"hostname=s@", \$CONFIG{'hostname'},
"test", \$CONFIG{'test'},
"verbose", \$CONFIG{'verbose'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
GetOptions( "dir=s", \$CONFIG{ 'dir' },
"domaindir=s", \$CONFIG{ 'domaindir' },
"dry-run", \$CONFIG{ 'dry-run' },
"lvm=s", \$CONFIG{ 'lvm' },
"evms=s", \$CONFIG{ 'evms' },
"hostname=s@", \$CONFIG{ 'hostname' },
"test", \$CONFIG{ 'test' },
"verbose", \$CONFIG{ 'verbose' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.41 $';
my $REVISION = '$Revision: 1.41 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xen-delete-image release $RELEASE - CVS: $REVISION\n";
exit;
print "xen-delete-image release $RELEASE - CVS: $REVISION\n";
exit;
}
if ($CONFIG{ 'dir' }) {
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
$CONFIG{ 'dir' } = undef;
}
}
@@ -388,22 +402,23 @@ sub parseCommandLineArguments
sub checkArguments
{
#
# When testing we only care about loopback images, not disk images.
#
if ( $CONFIG{'test'} )
if ( $CONFIG{ 'test' } )
{
$CONFIG{'lvm'} = undef;
$CONFIG{'evms'} = undef;
$CONFIG{ 'lvm' } = undef;
$CONFIG{ 'evms' } = undef;
}
#
# Make sure we got one and only one installation method.
#
my $count = 0;
foreach my $type ( qw/dir lvm evms/ )
foreach my $type (qw/dir domaindir lvm evms/)
{
$count += 1 if defined( $CONFIG{$type} );
$count += 1 if defined( $CONFIG{ $type } );
}
#
@@ -412,17 +427,17 @@ sub checkArguments
#
if ( $count != 1 )
{
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --evms\n";
print " --lvm\n";
exit;
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --domaindir\n";
print " --evms\n";
print " --lvm\n";
exit;
}
}
=begin doc
Test to see if the given instance is running.
@@ -433,20 +448,20 @@ sub checkArguments
sub xenRunning
{
my( $hostname ) = (@_ );
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |")
or die "Failed to run 'xm list $hostname'";
while( <CMD> )
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/ )
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close( CMD );
close(CMD);
return( $running );
return ($running);
}
@@ -461,7 +476,7 @@ sub xenRunning
sub deleteXenImage
{
my ($hostname) = ( @_ );
my ($hostname) = (@_);
#
# Collect the names of files to delete.
@@ -487,12 +502,16 @@ sub deleteXenImage
#
# If we're working on disk images remove them.
#
foreach my $file ( @delete )
foreach my $file (@delete)
{
if ( -e $file )
{
print "Deleting: $file\n";
unlink( $file );
if ($CONFIG{ 'dry-run' }) {
print "Would delete: $file\n";
} else {
print "Deleting: $file\n";
unlink($file);
}
}
else
{
@@ -501,71 +520,95 @@ sub deleteXenImage
}
if ( defined( $CONFIG{'dir'} ) )
if ( defined( $CONFIG{ 'domaindir' } ) )
{
my $prefix = $CONFIG{'dir'} . "/domains/";
my $prefix = $CONFIG{ 'domaindir' } . '/';
#
# Now remove the directory.
#
if ( -d $prefix . $hostname )
{
print "Removing: " . $prefix . $hostname . "\n";
rmdir ( $prefix . $hostname );
}
#
# Now remove the directory.
#
if ( -d $prefix . $hostname )
{
if ($CONFIG{ 'dry-run' }) {
print "Would delete: $prefix$hostname\n";
} else {
print "Removing: " . $prefix . $hostname . "\n";
rmdir( $prefix . $hostname );
}
}
}
elsif ( defined( $CONFIG{'lvm'} ) )
elsif ( defined( $CONFIG{ 'lvm' } ) )
{
#
# LVM volumes
#
#
# TODO: Check we're not mounted.
#
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-swap" )
{
print "Removing swap volume\n";
runCommand( "lvremove /dev/$CONFIG{'lvm'}/$hostname-swap --force" );
}
#
# LVM volumes
#
#
# TODO: Check we're not mounted.
#
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-disk" )
{
print "Removing LVM disk volume\n";
runCommand( "lvremove /dev/$CONFIG{'lvm'}/$hostname-disk --force" );
}
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-swap" )
{
if ($CONFIG{ 'dry-run' }) {
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");
}
}
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-disk" )
{
if ($CONFIG{ 'dry-run' }) {
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");
}
}
}
elsif ( defined( $CONFIG{'evms'} ) )
elsif ( defined( $CONFIG{ 'evms' } ) )
{
#
# EVMS volumes
#
#
# TODO: Check we're not mounted.
#
if ( -e "/dev/evms/$hostname-swap" )
{
print "Removing EVMS swap volume\n";
runCommand( "echo Delete : /dev/evms/$hostname-swap | evms" );
runCommand( "echo Delete : $CONFIG{'evms'}/$hostname-swap | evms" );
}
#
# EVMS volumes
#
#
# TODO: Check we're not mounted.
#
if ( -e "/dev/evms/$hostname-disk" )
{
print "Removing EVMS disk volume\n";
runCommand( "echo Delete : /dev/evms/$hostname-disk | evms" );
runCommand( "echo Delete : $CONFIG{'evms'}/$hostname-disk | evms" );
}
if ( -e "/dev/evms/$hostname-swap" )
{
if ($CONFIG{ 'dry-run' }) {
print "Would remove EVMS swap volume: /dev/evms/$hostname-swap\n";
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");
}
}
if ( -e "/dev/evms/$hostname-disk" )
{
if ($CONFIG{ 'dry-run' }) {
print "Would remove EVMS disk volume: /dev/evms/$hostname-swap\n";
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");
}
}
}
else
{
print "Error: No installation type specified\n";
print "Can't happen!\n";
print "Hostname : $hostname\n";
exit 127;
print "Error: No installation type specified\n";
print "Can't happen!\n";
print "Hostname : $hostname\n";
exit 127;
}
}
@@ -584,26 +627,27 @@ sub deleteXenImage
sub runCommand
{
my ( $cmd ) = (@_ );
my ($cmd) = (@_);
#
# Header.
#
$CONFIG{'verbose'} && print "Executing : $cmd\n";
$CONFIG{ 'verbose' } && print "Executing : $cmd\n";
#
# Hide output unless running with --debug.
#
if ( $CONFIG{'verbose'} )
if ( $CONFIG{ 'verbose' } )
{
#
# Copy stderr to stdout, so we can see it.
#
$cmd .= " 2>&1";
#
# Copy stderr to stdout, so we can see it.
#
$cmd .= " 2>&1";
}
else
{
$cmd .= " >/dev/null 2>/dev/null" ;
$cmd .= " >/dev/null 2>/dev/null";
}
@@ -614,19 +658,19 @@ sub runCommand
if ( $? != 0 )
{
print "Running command '$cmd' failed.\n";
print "Aborting\n";
exit;
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";
$CONFIG{ 'verbose' } && print "Output\n";
$CONFIG{ 'verbose' } && print "======\n";
$CONFIG{ 'verbose' } && print $output . "\n";
$CONFIG{ 'verbose' } && print "Finished : $cmd\n";
return( $output );
return ($output);
}

View File

@@ -69,7 +69,7 @@ Show the version number and exit.
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -97,19 +97,19 @@ my %CONFIG;
#
# Default prefix
#
$CONFIG{'prefix'} = "/etc/xen";
$CONFIG{ 'prefix' } = "/etc/xen";
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
#
# Read the global configuration file if it exists.
#
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
#
@@ -129,11 +129,11 @@ my @instances = findXenInstances();
# Now process each instance.
#
my $count = 0;
foreach my $instance ( @instances )
foreach my $instance (@instances)
{
if ( $count ) { print "\n"; }
if ($count) {print "\n";}
displayInstance( $instance );
displayInstance($instance);
$count += 1;
}
@@ -155,18 +155,18 @@ exit;
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( ! -e $file );
return if ( !-e $file );
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
while (defined(my $line = <FILE>) )
while ( defined( my $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -176,7 +176,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -199,6 +199,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -206,7 +207,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -216,12 +217,11 @@ sub readConfigurationFile
$CONFIG{ $key } = $val;
}
}
close( FILE );
close(FILE);
}
=begin doc
Parse the arguments specified upon the command line.
@@ -234,24 +234,20 @@ sub parseCommandLineArguments
{
my $HELP = 0;
my $MANUAL = 0;
my $VERSION = 0;
my $VERSION = 0;
# Parse options.
#
GetOptions(
"test=s", \$CONFIG{'prefix'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
GetOptions( "test=s", \$CONFIG{ 'prefix' },
"help", \$HELP, "manual", \$MANUAL, "version", \$VERSION );
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.30 $';
my $REVISION = '$Revision: 1.30 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
@@ -277,12 +273,12 @@ sub findXenInstances
{
my @found;
foreach my $file ( sort( glob( $CONFIG{'prefix'} . "/*.cfg" ) ) )
foreach my $file ( sort( glob( $CONFIG{ 'prefix' } . "/*.cfg" ) ) )
{
push @found, $file if ( -e $file );
}
return( @found );
return (@found);
}
@@ -298,14 +294,14 @@ sub findXenInstances
sub displayInstance
{
my ( $file ) = ( @_ );
my ($file) = (@_);
#
# Read each line.
#
open( FILY, "<", $file );
my @LINES = <FILY>;
close( FILY );
close(FILY);
#
# Is it dynamic?
@@ -316,7 +312,7 @@ sub displayInstance
my $name = '';
my $mem = 0;
foreach my $line ( @LINES )
foreach my $line (@LINES)
{
if ( $line =~ /^\s*dhcp\s*=\s*"dhcp\"/i )
{
@@ -342,7 +338,7 @@ sub displayInstance
print "Name: $name\n";
print "Memory: $mem\n";
print "IP: " . $ip . $mac . "\n" if length( $ip );
print "IP: " . $ip . $mac . "\n" if length($ip);
print "DHCP" . $mac . "\n" if $dhcp;
}

View File

@@ -15,10 +15,11 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
--verbose Show diagnostic output.
General Options:
--add Specify the amount of space to add, e.g. --add=1gb
--dir Specify the path to the loopback image root.
--force Force the resize to happen without a last-chance delay.
--hostname Specify the hostname of the guest to resize.
--add Specify the amount of space to add, e.g. --add=1gb
--dir Specify the path to the loopback image root. (old style)
--domaindir Specify the path to the loopback image root. (new style)
--force Force the resize to happen without a last-chance delay.
--hostname Specify the hostname of the guest to resize.
=cut
@@ -28,10 +29,14 @@ xen-resize-guest - Resize a loopback or LVM based xen guest.
=over 8
=item B<--add>
Specify the amount of storage to add to the primary disk.
Specify the amount of storage to add to the primary disk. Looks
for directories named after the hostname in a subdirectory
"domains". (old style, see xen-create-image(1) for details)
=item B<--dir>
Specify the directory where the loopback files are based.
=item B<--domaindir>
Specify the directory where the loopback files are based. Looks
for directories named after the hostname directorly in this
directory. (new style, see xen-create-image(1) for details)
=item B<--force>
Don't pause for 10 seconds prior to commencing.
@@ -87,7 +92,7 @@ Show the version number and exit.
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -107,8 +112,6 @@ use Text::Template;
#
# Configuration values read from the command line, or configuration file.
#
@@ -118,14 +121,14 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
#
# Read the global configuration file.
#
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
#
@@ -145,13 +148,15 @@ testArguments();
#
my $path = undef;
if ( $CONFIG{'dir'} )
if ( $CONFIG{ 'domaindir' } )
{
#
# Make sure we can find the disk
#
$path = $CONFIG{'dir'} . "/domains/" . $CONFIG{'hostname'} . "/disk.img";
if ( ! -e $path )
$path =
$CONFIG{ 'domaindir' } . '/' . $CONFIG{ 'hostname' } . "/disk.img";
if ( !-e $path )
{
print <<EOF;
@@ -188,7 +193,7 @@ EOF
#
# Allow panic
#
if ( !$CONFIG{'force'} )
if ( !$CONFIG{ 'force' } )
{
foreach my $i ( 1 .. 10 )
{
@@ -201,15 +206,16 @@ EOF
print "DO NOT INTERRUPT\n";
my $cmd = "dd if=/dev/zero bs=1M count=$CONFIG{'add'}k >> $path";
system( $cmd );
system($cmd );
}
elsif ( $CONFIG{'lvm'} )
elsif ( $CONFIG{ 'lvm' } )
{
#
# Make sure we can find the disk
#
$path = "/dev/" . $CONFIG{'lvm'} . "/" . $CONFIG{'hostname'} . "-disk";
if ( ! -e $path )
$path = "/dev/" . $CONFIG{ 'lvm' } . "/" . $CONFIG{ 'hostname' } . "-disk";
if ( !-e $path )
{
print <<EOF;
@@ -246,7 +252,7 @@ EOF
#
# Allow panic
#
if ( !$CONFIG{'force'} )
if ( !$CONFIG{ 'force' } )
{
foreach my $i ( 1 .. 10 )
{
@@ -258,7 +264,7 @@ EOF
print "DO NOT INTERRUPT\n";
my $cmd = "lvextend -L+$CONFIG{'add'}M $path";
system( $cmd );
system($cmd );
}
else
{
@@ -271,13 +277,13 @@ else
# Check filesystem.
#
print "Checking filesystem\n";
system( "fsck.ext3 -f $path" );
system("fsck.ext3 -f $path");
#
# Run ext3resize.
#
print "Resizing in place\n";
system( "resize2fs $path" );
system("resize2fs $path");
#
@@ -298,16 +304,16 @@ exit 0;
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
my $line = "";
while (defined($line = <FILE>) )
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -317,7 +323,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -340,6 +346,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -347,7 +354,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -358,7 +365,7 @@ sub readConfigurationFile
}
}
close( FILE );
close(FILE);
}
@@ -387,27 +394,28 @@ sub parseCommandLineArguments
#
GetOptions(
# Misc. options
"add=s", \$CONFIG{'add'},
"dir=s", \$install{'dir'},
"lvm=s", \$install{'lvm'},
"hostname=s", \$CONFIG{'hostname'},
"force", \$CONFIG{'force'},
# Misc. options
"add=s", \$CONFIG{ 'add' },
"dir=s", \$install{ 'dir' },
"domaindir=s",\$install{ 'domaindir' },
"lvm=s", \$install{ 'lvm' },
"hostname=s", \$CONFIG{ 'hostname' },
"force", \$CONFIG{ 'force' },
# Help options
"help", \$HELP,
"manual", \$MANUAL,
"verbose", \$CONFIG{'verbose'},
"version", \$VERSION
);
# Help options
"help", \$HELP,
"manual", \$MANUAL,
"verbose", \$CONFIG{ 'verbose' },
"version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
print( "xen-resize-guest release $RELEASE\n" );
print("xen-resize-guest release $RELEASE\n");
exit 1;
}
@@ -416,17 +424,25 @@ sub parseCommandLineArguments
# they will allow the configuration values to be overriden by
# the command line.
#
if ( $install{'lvm'} )
if ( $install{ 'lvm' } )
{
$CONFIG{'lvm'} = $install{'lvm'};
$CONFIG{'dir'} = undef;
delete $CONFIG{'dir'};
$CONFIG{ 'lvm' } = $install{ 'lvm' };
$CONFIG{ 'dir' } = undef;
delete $CONFIG{ 'dir' };
}
if ( $install{'dir'} )
if ( $install{ 'dir' } )
{
$CONFIG{'dir'} = $install{'dir'};
$CONFIG{'lvm'} = undef;
delete $CONFIG{'lvm'};
$CONFIG{ 'domaindir' } = $install{ 'dir' }.'/domains';
$CONFIG{ 'dir' } = undef;
$CONFIG{ 'lvm' } = undef;
delete $CONFIG{ 'lvm' };
}
if ( $install{ 'domaindir' } )
{
$CONFIG{ 'domaindir' } = $install{ 'domaindir' };
$CONFIG{ 'dir' } = undef;
$CONFIG{ 'lvm' } = undef;
delete $CONFIG{ 'lvm' };
}
}
@@ -442,10 +458,11 @@ sub parseCommandLineArguments
sub testArguments
{
#
# Make sure we received a hostname.
#
if ( !$CONFIG{'hostname'} )
if ( !$CONFIG{ 'hostname' } )
{
print <<EOF;
@@ -460,7 +477,7 @@ EOF
#
# Make sure we received a size.
#
if ( !$CONFIG{'add'} )
if ( !$CONFIG{ 'add' } )
{
print <<EOF;
@@ -476,7 +493,7 @@ EOF
#
# Make sure the guest isn't running
#
if ( xenRunning( $CONFIG{'hostname'} ) )
if ( xenRunning( $CONFIG{ 'hostname' } ) )
{
print "The guest $CONFIG{'hostname'} appears to be running!\n";
exit 1;
@@ -486,33 +503,37 @@ EOF
# We should either have LVM *or* directory - not neither or both.
#
my $options = 0;
$options += 1if ( defined($CONFIG{'lvm'}) && length( $CONFIG{'lvm'} ) );
$options += 1if ( defined($CONFIG{'dir'}) && length( $CONFIG{'dir'} ) );
$options += 1
if ( defined( $CONFIG{ 'lvm' } ) && length( $CONFIG{ 'lvm' } ) );
$options += 1
if ( defined( $CONFIG{ 'dir' } ) && length( $CONFIG{ 'dir' } ) );
$options += 1
if ( defined( $CONFIG{ 'domaindir' } ) && length( $CONFIG{ 'domaindir' } ) );
#
# Report
#
if ( $options == 0 )
{
print "Please specify one of --lvm or --dir\n";
print "Please specify one of --lvm, --domaindir or --dir\n";
exit 1;
}
if ( $options > 1 )
{
print "Please specify only one of --lvm or --dir - not both!\n";
print "Please specify only one of --lvm, --domaindir or --dir - not several of them!\n";
exit 1;
}
#
# Convert from Gb -> Mb;
#
if ( $CONFIG{'add'} =~ /^([0-9.]+)Gb*$/i )
if ( $CONFIG{ 'add' } =~ /^([0-9.]+)Gb*$/i )
{
$CONFIG{'add'} = $1 * 1024;
$CONFIG{ 'add' } = $1 * 1024;
}
if ( $CONFIG{'add'} =~ /^([0-9.]+)Mb*$/i )
if ( $CONFIG{ 'add' } =~ /^([0-9.]+)Mb*$/i )
{
$CONFIG{'add'} = $1;
$CONFIG{ 'add' } = $1;
}
}
@@ -528,18 +549,18 @@ EOF
sub xenRunning
{
my( $hostname ) = (@_ );
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |")
or die "Failed to run 'xm list $hostname'";
while( <CMD> )
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/ )
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close( CMD );
close(CMD);
return( $running );
return ($running);
}

View File

@@ -14,7 +14,8 @@ xen-update-image - Update the software installed upon offline Xen images.
--version Show the version number and exit.
General Options:
--dir Specify the directory which contains the image(s).
--dir Specify the directory which contains the image(s). (old style)
--domaindir Specify the directory which contains the image(s). (new style)
--lvm Specify the LVM volume group which contains the image(s).
--evms Specify the EVMS container which contains the image(s).
@@ -27,7 +28,14 @@ xen-update-image - Update the software installed upon offline Xen images.
=over 8
=item B<--dir>
Specify the directory which contains the image(s).
Specify the directory which contains the image(s). Looks
for directories named after the hostname in a subdirectory
"domains". (old style, see xen-create-image(1) for details)
=item B<--domaindir>
Specify the directory which contains the image(s). Looks
for directories named after the hostname directorly in this
directory. (new style, see xen-create-image(1) for details)
=item B<--evms>
Specify the EVMS container which contains the image(s).
@@ -92,7 +100,7 @@ Show the version number and exit.
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -120,7 +128,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
#
@@ -128,7 +136,7 @@ my $RELEASE = '3.9';
#
if ( -e "/etc/xen-tools/xen-tools.conf" )
{
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
}
@@ -166,11 +174,11 @@ E_O_ROOT
#
# Loop over the supplied arguments, and attempt to update each image.
#
while( my $name = shift )
while ( my $name = shift )
{
if ( !xenRunning( $name ) )
if ( !xenRunning($name) )
{
updateXenImage( $name );
updateXenImage($name);
}
else
{
@@ -196,7 +204,7 @@ exit;
sub updateXenImage
{
my ( $name ) = ( @_ );
my ($name) = (@_);
#
# Create a temporary directory, and prepare to mount the
@@ -210,12 +218,13 @@ sub updateXenImage
# If we're dealing with loopback images find the main one,
# and mount it.
#
if ( $CONFIG{'dir'} )
if ( $CONFIG{ 'dir' } )
{
# The loopback image.
$img = $CONFIG{'dir'} . "/domains/" . $name . "/disk.img";
if ( ! -e $img )
# The loopback image.
$img = $CONFIG{ 'domaindir' } . '/' . $name . "/disk.img";
if ( !-e $img )
{
print "Disk image '$img' for host '$name' not found\n";
return;
@@ -223,13 +232,14 @@ sub updateXenImage
$mount_cmd = "mount -t auto -o loop $img $tmp";
}
elsif ( $CONFIG{'lvm'} )
elsif ( $CONFIG{ 'lvm' } )
{
# The LVM volume
$img = "/dev/" . $CONFIG{'lvm'} . "/$name-disk";
$img = "/dev/" . $CONFIG{ 'lvm' } . "/$name-disk";
# make sure it exists.
if ( ! -e $img )
if ( !-e $img )
{
print "Logical volume '$img' for host '$name' not found\n";
return;
@@ -237,25 +247,31 @@ sub updateXenImage
$mount_cmd = "mount -t auto $img $tmp";
}
elsif ( $CONFIG{'evms'} )
elsif ( $CONFIG{ 'evms' } )
{
# The EVMS volume -- note, unlike LVM, you don't need the $CONFIG{'evms'}
# to see it and mount the volume. $CONFIG{'evms'} is only used for manipulating
# the underlying object. Still, I don't want to mess with the parse code and
# make it confusing - otherwise --evms takes an argument everywhere but here,
# which will confuse users. The better solution is to make it so that --evms can
# take a following container, but doesn't require it. For the moment, it is
# better to leave it as it is, take a container, and then ignore it.
# The best way to do it is to just read it out of the configuration file,
# tell the user what you got and where you got it from, and not bother the user
# with picking --dir or --lvm or --evms at all, but infer it from the config
# file's disk = parameter. xen-delete-image might work the same way, but
# it could be *slightly* more dangerous in the context of deleting.
# The EVMS volume -- note, unlike LVM, you don't need the
# $CONFIG{'evms'} to see it and mount the
# volume. $CONFIG{'evms'} is only used for manipulating the
# underlying object. Still, I don't want to mess with the
# parse code and make it confusing - otherwise --evms takes an
# argument everywhere but here, which will confuse users. The
# better solution is to make it so that --evms can take a
# following container, but doesn't require it. For the
# moment, it is better to leave it as it is, take a container,
# and then ignore it.
# The best way to do it is to just read it out of the
# configuration file, tell the user what you got and where you
# got it from, and not bother the user with picking --dir or
# --lvm or --evms at all, but infer it from the config file's
# disk = parameter. xen-delete-image might work the same way,
# but it could be *slightly* more dangerous in the context of
# deleting.
$img = "/dev/evms/$name-disk";
# make sure it exists.
if ( ! -e $img )
if ( !-e $img )
{
print "EVMS volume '$img' for host '$name' not found\n";
return;
@@ -279,20 +295,23 @@ sub updateXenImage
if ( ( -e $tmp . "/usr/bin/apt-get" ) &&
( -x $tmp . "/usr/bin/apt-get" ) )
{
#
# Now run the update command.
#
system( "chroot $tmp /usr/bin/apt-get update" );
#
# Now run the update command.
#
system("chroot $tmp /usr/bin/apt-get update");
#
# Now upgrade
#
system( "DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes" );
#
# Now upgrade
#
system(
"DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes"
);
}
else
{
print "Xen image $name is not a Debian GNU/Linux image. Skipping\n";
print "Xen image $name is not a Debian GNU/Linux image. Skipping\n";
}
@@ -306,8 +325,6 @@ sub updateXenImage
=begin doc
Test to see if the given instance is running.
@@ -318,25 +335,24 @@ sub updateXenImage
sub xenRunning
{
my( $hostname ) = (@_ );
my ($hostname) = (@_);
my $running = 0;
open( CMD, "xm list 2>/dev/null |")
or die "Failed to run 'xm list $hostname'";
while( <CMD> )
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/ )
$running = 1 if ( $line =~ /\Q$hostname\E/ );
}
close( CMD );
close(CMD);
return( $running );
return ($running);
}
=begin doc
Read the configuration file specified.
@@ -347,16 +363,16 @@ sub xenRunning
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = "";
my $line = "";
while (defined($line = <FILE>) )
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -366,7 +382,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -389,6 +405,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -396,7 +413,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -407,12 +424,11 @@ sub readConfigurationFile
}
}
close( FILE );
close(FILE);
}
=begin doc
Parse the arguments specified upon the command line.
@@ -429,21 +445,18 @@ sub parseCommandLineArguments
# Parse options.
#
GetOptions(
"dir=s", \$CONFIG{'dir'},
"lvm=s", \$CONFIG{'lvm'},
"evms=s", \$CONFIG{'evms'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
GetOptions( "dir=s", \$CONFIG{ 'dir' }, "lvm=s", \$CONFIG{ 'lvm' },
"domaindir=s", \$CONFIG{ 'dir' },
"evms=s", \$CONFIG{ 'evms' }, "help", \$HELP,
"manual", \$MANUAL, "version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.29 $';
my $REVISION = '$Revision: 1.29 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
@@ -453,6 +466,11 @@ sub parseCommandLineArguments
exit;
}
if ($CONFIG{ 'dir' }) {
$CONFIG{ 'domaindir' } = $CONFIG{ 'dir' }.'/domains';
$CONFIG{ 'dir' } = undef;
}
}
@@ -468,13 +486,14 @@ sub parseCommandLineArguments
sub checkArguments
{
#
# Make sure we got one and only one installation method.
#
my $count = 0;
foreach my $type ( qw/dir lvm evms/ )
foreach my $type (qw/dir domaindir lvm evms/)
{
$count += 1 if defined( $CONFIG{$type} );
$count += 1 if defined( $CONFIG{ $type } );
}
#
@@ -483,10 +502,11 @@ sub checkArguments
#
if ( $count != 1 )
{
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --evms\n";
print " --lvm\n";
exit;
print "Please select one and only one of the installation methods:\n";
print " --dir\n";
print " --domaindir\n";
print " --evms\n";
print " --lvm\n";
exit;
}
}

View File

@@ -116,7 +116,7 @@ xt-create-config - Create a Xen configuration file for a new guest
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -150,14 +150,13 @@ my @PARTITIONS = undef;
#
# Default options
#
$CONFIG{'template'} = '/etc/xen-tools/xm.tmpl';
$CONFIG{ 'template' } = '/etc/xen-tools/xm.tmpl';
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
@@ -176,7 +175,7 @@ checkArguments();
#
# If we've been given any administrators then set them up.
#
if ( $ENV{'admins'} )
if ( $ENV{ 'admins' } )
{
setupAdminUsers();
}
@@ -189,9 +188,6 @@ createXenConfig();
#
# Exit cleanly - any errors which have already occurred will result
# in "exit 1".
@@ -200,9 +196,6 @@ exit 0;
=begin doc
Parse the command line arguments this script was given.
@@ -220,24 +213,23 @@ sub parseCommandLineArguments
#
# Parse options.
#
GetOptions(
"admins=s", \$ENV{'admins'},
"output=s", \$CONFIG{'output'},
"extension=s",\$CONFIG{'extension'},
"template=s", \$CONFIG{'template'},
"verbose", \$CONFIG{'verbose'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
GetOptions( "admins=s", \$ENV{ 'admins' },
"output=s", \$CONFIG{ 'output' },
"extension=s", \$CONFIG{ 'extension' },
"template=s", \$CONFIG{ 'template' },
"verbose", \$CONFIG{ 'verbose' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.47 $';
my $REVISION = '$Revision: 1.47 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
@@ -260,10 +252,11 @@ sub parseCommandLineArguments
sub checkArguments
{
#
# We require an output location.
#
if ( ! defined( $CONFIG{'output'} ) )
if ( !defined( $CONFIG{ 'output' } ) )
{
print "The '--output' argument is mandatory\n";
exit 1;
@@ -272,9 +265,10 @@ sub checkArguments
#
# The output location should be a directory which exists.
#
if ( ! -d $CONFIG{'output'} )
if ( !-d $CONFIG{ 'output' } )
{
print "The output directory we've been given, $CONFIG{'output'}, doesnt exist\n";
print
"The output directory we've been given, $CONFIG{'output'}, doesnt exist\n";
print "Aborting\n";
exit 1;
}
@@ -282,11 +276,12 @@ sub checkArguments
#
# Make sure that any specified template file exists.
#
if ( defined( $CONFIG{'template'} ) )
if ( defined( $CONFIG{ 'template' } ) )
{
if ( ! -e $CONFIG{'template'} )
if ( !-e $CONFIG{ 'template' } )
{
print "The specified template file, $CONFIG{'template'} does not exist.\n";
print
"The specified template file, $CONFIG{'template'} does not exist.\n";
exit 1;
}
}
@@ -310,20 +305,17 @@ sub importPartitionsFromEnvironment
{
@PARTITIONS = ();
for (my $i=1; $i <= $ENV{'NUMPARTITIONS'}; $i++)
for ( my $i = 1 ; $i <= $ENV{ 'NUMPARTITIONS' } ; $i++ )
{
my @parts = split(/:/, $ENV{'PARTITION' . $i}, 7);
my @parts = split( /:/, $ENV{ 'PARTITION' . $i }, 7 );
push( @PARTITIONS,
{
'name' => $parts[0],
'size' => $parts[1],
'type' => $parts[2],
'mountpoint' => $parts[3],
'options' => $parts[4],
'imagetype' => $parts[5],
'image' => $parts[6]
}
);
{ 'name' => $parts[0],
'size' => $parts[1],
'type' => $parts[2],
'mountpoint' => $parts[3],
'options' => $parts[4],
'imagetype' => $parts[5],
'image' => $parts[6] } );
}
}
@@ -341,29 +333,35 @@ sub importPartitionsFromEnvironment
sub createXenConfig
{
#
# The output file we're going to process.
#
my $file = $CONFIG{'output'} . '/' . $ENV{'hostname'} . $ENV{'extension'};
my $file =
$CONFIG{ 'output' } . '/' . $ENV{ 'hostname' } . $ENV{ 'extension' };
#
# The template we're going to read from.
#
my $template = new Text::Template( TYPE => 'FILE',
SOURCE => $CONFIG{'template'} );
SOURCE => $CONFIG{ 'template' } );
#
# The device we're using.
#
my $device = 'sda';
if ( defined( $ENV{'ide'} ) )
my $device = 'xvda';
if ( defined( $ENV{ 'ide' } ) )
{
$device = 'hda';
}
elsif ( defined( $ENV{'disk_device'} ) )
elsif ( defined( $ENV{ 'scsi' } ) )
{
$device = $ENV{'disk_device'};
$device = 'sda';
}
elsif ( defined( $ENV{ 'disk_device' } ) )
{
$device = $ENV{ 'disk_device' };
# strip /dev/, if present.
if ( $device =~ /^(.*)\/(.*)$/ )
@@ -371,65 +369,65 @@ sub createXenConfig
$device = $2;
}
}
$ENV{'device'} = $device;
$ENV{ 'device' } = $device;
#
# The memory size: Convert Gb -> Mb.
#
if ( $ENV{'memory'} =~ /^(\d+)Gb*$/i )
if ( $ENV{ 'memory' } =~ /^(\d+)Gb*$/i )
{
$ENV{'memory'} = $1 * 1024;
$ENV{ 'memory' } = $1 * 1024;
}
#
# Remove any trailing Mb.
#
if ( $ENV{'memory'} =~ /^(\d+)Mb*$/i )
if ( $ENV{ 'memory' } =~ /^(\d+)Mb*$/i )
{
$ENV{'memory'} = $1;
$ENV{ 'memory' } = $1;
}
#
# Images as presented to Xen - either loopback images, or LVM partitions.
#
if ( $ENV{'lvm'} )
if ( $ENV{ 'lvm' } )
{
$ENV{'image_prefix'} = "phy:$ENV{'lvm'}/$ENV{'hostname'}-";
$ENV{'image_suffix'} = '';
$ENV{ 'image_prefix' } = "phy:$ENV{'lvm'}/$ENV{'hostname'}-";
$ENV{ 'image_suffix' } = '';
importPartitionsFromEnvironment();
}
elsif ( $ENV{'evms'} )
elsif ( $ENV{ 'evms' } )
{
$ENV{'image_prefix'} = "phy:/dev/evms/$ENV{'hostname'}-";
$ENV{'image_suffix'} = '';
$ENV{ 'image_prefix' } = "phy:/dev/evms/$ENV{'hostname'}-";
$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
{
$ENV{'swap_vbd'} = undef;
$ENV{ 'swap_vbd' } = undef;
}
}
else
{
$ENV{'image_prefix'} = "file:$ENV{'dir'}/domains/$ENV{'hostname'}/";
$ENV{'image_suffix'} = '.img';
$ENV{ 'image_prefix' } = "file:$ENV{'domaindir'}/$ENV{'hostname'}/";
$ENV{ 'image_suffix' } = '.img';
importPartitionsFromEnvironment();
}
#
# The xen-tools version.
#
$ENV{'xen_tools_version'} = $RELEASE;
$ENV{ 'xen_tools_version' } = $RELEASE;
#
@@ -438,11 +436,11 @@ sub createXenConfig
# made available to our template file.
#
my %vars;
foreach my $key (sort keys %ENV )
foreach my $key ( sort keys %ENV )
{
$vars{$key} = $ENV{$key};
$vars{ $key } = $ENV{ $key };
}
$vars{'PARTITIONS'} = \@PARTITIONS;
$vars{ 'PARTITIONS' } = \@PARTITIONS;
#
# Now output the data.
@@ -457,9 +455,9 @@ sub createXenConfig
#
# Write the output of processing the template file, if it succeeds.
#
if (defined $result)
if ( defined $result )
{
print FILE $result ;
print FILE $result;
}
else
{
@@ -469,13 +467,12 @@ sub createXenConfig
#
# Close the output file.
#
close( FILE );
close(FILE);
}
=begin doc
This routine is designed to ensure that any users specified with
@@ -487,6 +484,7 @@ sub createXenConfig
sub setupAdminUsers
{
#
# If we're not root we can't modify users.
#
@@ -495,24 +493,26 @@ sub setupAdminUsers
#
# If we don't have a sudoers file then we'll also ignore this.
#
return if ( ! -e "/etc/sudoers" );
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" );
$shell = "/usr/local/bin/xen-login-shell"
if ( -x "/usr/bin/local/xen-login-shell" );
return if ( !defined( $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'} ) )
foreach my $user ( split( /,/, $ENV{ 'admins' } ) )
{
# Strip leading and trailing whitespace.
$user =~ s/^\s+//;
$user =~ s/\s+$//;
@@ -523,23 +523,27 @@ sub setupAdminUsers
# Does the user exist?
if ( getpwnam($user) )
{
# Change shell.
$CONFIG{'verbose'} && print "Changing shell for $user: $shell\n";
$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";
$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 );
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

@@ -71,7 +71,7 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -97,8 +97,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
@@ -128,9 +127,6 @@ exit 0;
=begin doc
Parse the command line arguments this script was given.
@@ -148,29 +144,28 @@ sub parseCommandLineArguments
#
# Parse options.
#
GetOptions(
"location=s", \$CONFIG{'location'},
"dist=s", \$CONFIG{'dist'},
"verbose", \$CONFIG{'verbose'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
GetOptions( "location=s", \$CONFIG{ 'location' },
"dist=s", \$CONFIG{ 'dist' },
"verbose", \$CONFIG{ 'verbose' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.33 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
my $REVISION = '$Revision: 1.33 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
}
print "xt-customize-image release $RELEASE - CVS: $REVISION\n";
exit;
print "xt-customize-image release $RELEASE - CVS: $REVISION\n";
exit;
}
}
@@ -186,10 +181,11 @@ sub parseCommandLineArguments
sub checkArguments
{
#
# We require a location.
#
if ( ! defined( $CONFIG{'location'} ) )
if ( !defined( $CONFIG{ 'location' } ) )
{
print "The '--location' argument is mandatory\n";
exit 1;
@@ -199,7 +195,7 @@ sub checkArguments
#
# Test that the location we've been given exists
#
if ( ! -d $CONFIG{'location'} )
if ( !-d $CONFIG{ 'location' } )
{
print "The installation directory we've been given doesn't exist\n";
print "We tried to use : $CONFIG{'location'}\n";
@@ -210,7 +206,7 @@ sub checkArguments
#
# We require a distribution name.
#
if ( ! defined( $CONFIG{'dist'} ) )
if ( !defined( $CONFIG{ 'dist' } ) )
{
print "The '--dist' argument is mandatory\n";
exit 1;
@@ -224,9 +220,9 @@ 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/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d";
if ( ! -d $dir )
if ( !-d $dir )
{
print <<E_OR;
@@ -262,15 +258,16 @@ E_OR
sub runDistributionHooks
{
#
# Hook directory.
#
my $hooks = "/usr/lib/xen-tools/" . $CONFIG{'dist'} . ".d/";
my $hooks = "/usr/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d/";
#
# Installation prefix
#
my $prefix = $CONFIG{'location'};
my $prefix = $CONFIG{ 'location' };
#
# If we're running verbosely then setup the client environment
@@ -279,9 +276,9 @@ sub runDistributionHooks
# This is useful in case this script is called outwith the usual
# xen-create-image framework.
#
if ( $CONFIG{'verbose'} )
if ( $CONFIG{ 'verbose' } )
{
$ENV{'verbose'} = 1;
$ENV{ 'verbose' } = 1;
}
#
@@ -290,6 +287,7 @@ sub runDistributionHooks
#
foreach my $file ( sort( glob( $hooks . "*" ) ) )
{
# skip files that end with .dpkg-new, .dpkg-old or '~'
next if ( $file =~ /\.dpkg-(new|old)/ );
next if ( $file =~ /~$/ );
@@ -299,6 +297,7 @@ sub runDistributionHooks
#
if ( ( -x $file ) && ( -f $file ) )
{
#
# Just display the name - no need to see the full path.
#
@@ -317,18 +316,26 @@ sub runDistributionHooks
# Run the command. This has different prolog and epilog
# depending on whether we're running verbosely or not.
#
if ( $CONFIG{'verbose'} )
if ( $CONFIG{ 'verbose' } )
{
print "Running hook $name ['$cmd']\n";
print "--\n";
system( $cmd );
my $rc = system($cmd);
if ($rc != 0) {
print "hook $name failed: $?\n";
exit 1;
}
print "--\n";
print "Done\n\n";
}
else
{
print "Running hook $name\n";
system( $cmd );
my $rc = system($cmd);
if ($rc != 0) {
print "hook $name failed: $?\n";
exit 1;
}
print "hook $name: done.\n";
}
}

183
bin/xt-guess-suite-and-mirror Executable file
View File

@@ -0,0 +1,183 @@
#!/usr/bin/perl -w
=head1 NAME
xen-guess-debian-mirror - Tries to guess the most suitable mirror and
suite for DomUs on Debian and Ubuntu Dom0s.
=cut
=head1 SYNOPSIS
xen-guess-debian-mirror [-s] [-m]
-s show suite
-m show mirror
Shows both if no parameter is given.
=cut
=head1 DESCRIPTION
xen-guess-debian-mirror tries to find the mirror and suite the Xen
Dom0 is currently using and returns them in a way suitable for
xen-create-image(1) or the backticks feature in xen-tools.conf.
=cut
=head1 AUTHOR
Axel Beckert <abe@deuxchevaux.org>, http://noone.org/abe/
=cut
=head1 LICENSE
Copyright (C) 2010 by Steve Kemp. All rights reserved.
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself. The LICENSE file contains the
full text of the license.
=cut
###
### Configuration
###
# Fallback to Debian or Ubuntu in case we can't find anything
my $fallback = 'Debian';
# Which mirrors to use if everything else fails
my %fallback_mirror = ( Debian => 'http://ftp.debian.org/debian/',
Ubuntu => 'http://archive.ubuntu.com/ubuntu/' );
# Which suite to use if everything else fails. For Debian "stable"
# should be the best choice independent of the time. Ubuntu does not
# have aliases like stable or testing, so we take the nearest LTS
# release which is 10.04 at the time of writing.
my %fallback_suite = ( Debian => 'stable',
Ubuntu => 'lucid' );
# Where to look for the sources.list to parse
my $sources_list_file = '/etc/apt/sources.list';
use File::Slurp;
use Getopt::Long;
use Pod::Usage;
use strict;
#
# Release number.
#
my $RELEASE = '4.2rc1';
# Init
my $mirror = '';
my $suite = '';
my $found = 0;
# Parsing command line options
my $want_mirror = 0;
my $want_suite = 0;
my $want_version = 0;
my $want_help = 0;
my $want_usage = 0;
my $result = GetOptions ('mirror' => \$want_mirror,
'suite' => \$want_suite,
'version' => \$want_version,
'usage' => \$want_usage,
'help' => \$want_help);
if ($want_help) {
print "Usage: $0 [-m] [-s]\n";
exit 0;
}
if ($want_usage) {
pod2usage(0);
}
if (-r $sources_list_file) {
# sources.list exists, so it's something debianoid.
# read sources.list and split it into lines
my @sources_list = read_file($sources_list_file);
# Find the first line which is a Debian or Ubuntu mirror but not
# an updates, backports, volatile or security mirror.
foreach my $sources_list_entry (@sources_list) {
# Normalize line
chomp($sources_list_entry);
$sources_list_entry =~ s/^\s*(.*?)\s*$/$1/;
# Skip definite non-entries
next if $sources_list_entry =~ /^\s*($|#)/;
# Split up into fields
my @source_components = split(/\s+/, $sources_list_entry);
# Minimum number of components is 4
next if $#source_components < 3;
# Don't use deb-src entries.
next if $source_components[0] eq 'deb-src';
# Skip updates, backports, volatile or security mirror.
next if $source_components[2] !~ /^[a-z]+$/;
if ($source_components[1] =~ m(/debian/?$|/ubuntu/?$)) {
# Seems a typical mirror. Let's use that one
$mirror = $source_components[1];
$suite = $source_components[2];
$found = 1;
last;
}
}
warn "Couldn't parse $sources_list_file of the Dom0.\n" unless $found;
}
my $lsb_release = `which lsb_release`;
chomp($lsb_release);
if (!$found and $lsb_release and -x $lsb_release) {
my $vendor = `$lsb_release -s -i`;
if ($vendor eq 'Debian' or $vendor eq 'Ubuntu') {
$suite = `$lsb_release -s -c`;
chomp($suite);
unless ($suite) {
$suite = $fallback_suite{$vendor};
warn "Dom0 seems to be $vendor, but couldn't determine suite. Falling back to $suite.\n";
}
$mirror = $fallback_mirror{$vendor};
$found = 1;
}
}
if ($found) {
unless ($want_help || $want_version || $want_suite || $want_mirror) {
print "$mirror $suite\n";
} else {
if ($want_mirror) {
print "$mirror";
}
if ($want_suite) {
print "$suite";
}
print "\n";
}
} else {
$suite = $fallback_suite{$fallback};
$mirror = $fallback_mirror{$fallback};
}

View File

@@ -29,8 +29,11 @@ xt-install-image - Install a fresh copy of GNU/Linux into a directory
--mirror The mirror to use when installing with 'debootstrap'.
Installation Options:
--install-method Specify the installation method to use.
--install-source Specify the installation source to use.
--install-method Specify the installation method to use.
--install-source Specify the installation source to use.
--debootstrap-cmd Specify which debootstrap command to
use. Defaults to debootstrap if both, debootstrap
and cdebootstrap are installed.
All other options from xen-create-image will be passed as environmental
variables.
@@ -88,7 +91,7 @@ Untar a .tar file into the new installation location. This tarfile is assumed t
=head1 LICENSE
Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Copyright (c) 2005-2009 by Steve Kemp. All rights reserved.
This module is free software;
you can redistribute it and/or modify it under
@@ -113,7 +116,7 @@ my %CONFIG;
#
# Release number.
#
my $RELEASE = '3.9';
my $RELEASE = '4.2rc1';
#
@@ -127,50 +130,31 @@ my $RELEASE = '3.9';
# needDirectory Defined if we need an install-source directory specified.
#
#
my %dispatch =
(
"copy" =>
{
sub => \&do_copy,
needBinary => "/bin/cp",
needDirectory => 1,
},
"debootstrap" =>
{
sub => \&do_debootstrap,
needBinary => "/usr/sbin/debootstrap",
},
"image-server" =>
{
sub => \&do_image_server,
needURL => 1,
},
"rinse" =>
{
sub => \&do_rinse,
needBinary => "/usr/bin/rinse",
},
"rpmstrap" =>
{
sub => \&do_rpmstrap,
needBinary => "/usr/bin/rpmstrap",
},
"tar" =>
{
sub => \&do_tar,
needBinary => "/bin/tar",
needFile => 1,
}
);
my %dispatch = (
"copy" => { sub => \&do_copy,
needBinary => "/bin/cp",
needDirectory => 1,
},
"debootstrap" => { sub => \&do_debootstrap,
needBinary => "/usr/sbin/debootstrap",
},
"rinse" => { sub => \&do_rinse,
needBinary => "/usr/sbin/rinse",
},
"rpmstrap" => { sub => \&do_rpmstrap,
needBinary => "/usr/bin/rpmstrap",
},
"tar" => { sub => \&do_tar,
needBinary => "/bin/tar",
needFile => 1,
} );
#
# Read the global configuration file.
#
readConfigurationFile( "/etc/xen-tools/xen-tools.conf" );
readConfigurationFile("/etc/xen-tools/xen-tools.conf");
#
@@ -182,9 +166,9 @@ parseCommandLineArguments();
#
# If we received a configuration file then read it.
#
if ( $CONFIG{'config'} )
if ( $CONFIG{ 'config' } )
{
my $path = $CONFIG{'config'};
my $path = $CONFIG{ 'config' };
# If not fully-qualified then read from /etc/xen-tools.
if ( $path !~ /^[\/]/ )
@@ -193,7 +177,7 @@ if ( $CONFIG{'config'} )
}
# Read the file, if it exists.
readConfigurationFile( $path ) if ( -e $path );
readConfigurationFile($path) if ( -e $path );
}
@@ -206,59 +190,65 @@ checkArguments();
#
# Now lookup our installation type and dispatch control to it.
#
if ( defined( $CONFIG{'install-method'} ) &&
length( $CONFIG{'install-method'} ) )
if ( defined( $CONFIG{ 'install-method' } ) &&
length( $CONFIG{ 'install-method' } ) )
{
#
# Get the entry from the dispatch table.
#
my $installer = $dispatch{ lc($CONFIG{'install-method'}) };
my $installer = $dispatch{ lc( $CONFIG{ 'install-method' } ) };
if ( defined( $installer ) )
if ( defined($installer) )
{
#
# If we found it.
#
# Do we need to test for a binary.
if ( ( $installer->{'needBinary'} ) &&
( ! -x $installer->{'needBinary'} ) )
if ( ( $installer->{ 'needBinary' } ) &&
( !-x $installer->{ 'needBinary' } ) )
{
print "The following required binary for the installation was not found\n";
print "\t" . $installer->{'needBinary'} . "\n";
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?
if ( ( $installer->{'needDirectory'} ) &&
( ! $CONFIG{'install-source'} || ! -d $CONFIG{'install-source'} ) )
if ( ( $installer->{ 'needDirectory' } ) &&
( !$CONFIG{ 'install-source' } || !-d $CONFIG{ 'install-source' } )
)
{
print "Please specify the source directory with --install-source\n";
if ( $CONFIG{'install-source'} )
if ( $CONFIG{ 'install-source' } )
{
print "The specified directory $CONFIG{'install-source'} does not exist.\n";
print
"The specified directory $CONFIG{'install-source'} does not exist.\n";
}
exit 1;
}
# Do we need a file specified as the installation source?
if ( ( $installer->{'needFile'} ) &&
( ! $CONFIG{'install-source'} || ! -e $CONFIG{'install-source'} ) )
if ( ( $installer->{ 'needFile' } ) &&
( !$CONFIG{ 'install-source' } || !-e $CONFIG{ 'install-source' } )
)
{
print "Please specify the source file with --install-source\n";
if ( $CONFIG{'install-source'} )
if ( $CONFIG{ 'install-source' } )
{
print "The specified file $CONFIG{'install-source'} does not exist.\n";
print
"The specified file $CONFIG{'install-source'} does not exist.\n";
}
exit 1;
}
# Do we need an URL specified as the installation source?
if ( ( $installer->{'needURL'} ) &&
( ! $CONFIG{'install-source'} ||
( $CONFIG{'install-source'} !~ /^http/i ) ) )
if ( ( $installer->{ 'needURL' } ) &&
( !$CONFIG{ 'install-source' } ||
( $CONFIG{ 'install-source' } !~ /^http/i ) ) )
{
print "Please specify the image server URL with --install-source\n";
exit 1;
@@ -269,16 +259,16 @@ if ( defined( $CONFIG{'install-method'} ) &&
#
# Now we can call the appropriate handler.
#
$installer->{'sub'}->();
$installer->{ 'sub' }->();
#
# Did the operation succeed?
#
# Test that we have some "standard" files present.
#
foreach my $file ( qw( /bin/ls /bin/cp ) )
foreach my $file (qw( /bin/ls /bin/cp ))
{
if ( ! -x $CONFIG{'location'} . $file )
if ( !-x $CONFIG{ 'location' } . $file )
{
print "The installation of the new system has failed.\n";
print "\n";
@@ -306,10 +296,6 @@ else
=begin doc
Read the specified configuration file, and update our global configuration
@@ -321,20 +307,20 @@ else
sub readConfigurationFile
{
my ($file) = ( @_ );
my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( ! -e $file );
return if ( !-e $file );
my $line = "";
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
while (defined($line = <FILE>) )
while ( defined( $line = <FILE> ) )
{
chomp $line;
if ($line =~ s/\\$//)
if ( $line =~ s/\\$// )
{
$line .= <FILE>;
redo unless eof(FILE);
@@ -344,7 +330,7 @@ sub readConfigurationFile
next if ( $line =~ /^([ \t]*)\#/ );
# Skip blank lines
next if ( length( $line ) < 1 );
next if ( length($line) < 1 );
# Strip trailing comments.
if ( $line =~ /(.*)\#(.*)/ )
@@ -367,6 +353,7 @@ sub readConfigurationFile
# command expansion?
if ( $val =~ /(.*)`([^`]+)`(.*)/ )
{
# store
my $pre = $1;
my $cmd = $2;
@@ -374,7 +361,7 @@ sub readConfigurationFile
# get output
my $output = `$cmd`;
chomp( $output );
chomp($output);
# build up replacement.
$val = $pre . $output . $post;
@@ -385,7 +372,7 @@ sub readConfigurationFile
}
}
close( FILE );
close(FILE);
}
@@ -408,35 +395,37 @@ sub parseCommandLineArguments
# Parse options.
#
GetOptions(
# Mandatory
"location=s", \$CONFIG{'location'},
"dist=s", \$CONFIG{'dist'},
"hostname=s", \$CONFIG{'hostname'},
# Installation method
"install-method=s", \$CONFIG{'install-method'},
"install-source=s", \$CONFIG{'install-source'},
# Mandatory
"location=s", \$CONFIG{ 'location' },
"dist=s", \$CONFIG{ 'dist' },
"hostname=s", \$CONFIG{ 'hostname' },
# Misc
"arch=s", \$CONFIG{'arch'},
"cache=s", \$CONFIG{'cache'},
"config=s", \$CONFIG{'config'},
"mirror=s", \$CONFIG{'mirror'},
# Installation method
"install-method=s", \$CONFIG{ 'install-method' },
"install-source=s", \$CONFIG{ 'install-source' },
"debootstrap-cmd=s", \$CONFIG{ 'debootstrap-cmd' },
# Help.
"verbose", \$CONFIG{'verbose'},
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
# Misc
"arch=s", \$CONFIG{ 'arch' },
"cache=s", \$CONFIG{ 'cache' },
"config=s", \$CONFIG{ 'config' },
"mirror=s", \$CONFIG{ 'mirror' },
# Help.
"verbose", \$CONFIG{ 'verbose' },
"help", \$HELP,
"manual", \$MANUAL,
"version", \$VERSION
);
pod2usage(1) if $HELP;
pod2usage(-verbose => 2 ) if $MANUAL;
pod2usage( -verbose => 2 ) if $MANUAL;
if ( $VERSION )
if ($VERSION)
{
my $REVISION = '$Revision: 1.65 $';
my $REVISION = '$Revision: 1.65 $';
if ( $REVISION =~ /1.([0-9.]+) / )
{
$REVISION = $1;
@@ -459,10 +448,11 @@ sub parseCommandLineArguments
sub checkArguments
{
#
# We require a location.
#
if ( ! defined( $CONFIG{'location'} ) )
if ( !defined( $CONFIG{ 'location' } ) )
{
print "The '--location' argument is mandatory\n";
exit 1;
@@ -472,7 +462,7 @@ sub checkArguments
#
# Test that the location we've been given exists
#
if ( ! -d $CONFIG{'location'} )
if ( !-d $CONFIG{ 'location' } )
{
print "The installation directory we've been given doesn't exist\n";
print "We tried to use : $CONFIG{'location'}\n";
@@ -483,7 +473,7 @@ sub checkArguments
#
# We require a distribution name.
#
if ( ! defined( $CONFIG{'dist'} ) )
if ( !defined( $CONFIG{ 'dist' } ) )
{
print "The '--dist' argument is mandatory\n";
exit 1;
@@ -497,18 +487,18 @@ 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/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d";
if ( ! -d $dir )
if ( !-d $dir )
{
print <<E_OR;
We're trying to configure an installation of $CONFIG{'dist'} in
We are trying to configure an installation of $CONFIG{'dist'} in
$CONFIG{'location'} - but there is no hook directory for us to use.
This means we won't know how to configure this installation.
This means we would not know how to configure this installation.
We'd expect the hook directory to be : $dir
We would expect the hook directory to be $dir.
Aborting.
E_OR
@@ -520,11 +510,12 @@ E_OR
# Test that we received a valid installation type.
#
my $valid = 0;
if ( defined( $CONFIG{'install-method'} ) )
if ( defined( $CONFIG{ 'install-method' } ) )
{
foreach my $recognised ( keys %dispatch )
{
$valid = 1 if ( lc($CONFIG{'install-method'}) eq lc($recognised) );
$valid = 1
if ( lc( $CONFIG{ 'install-method' } ) eq lc($recognised) );
}
}
else
@@ -552,7 +543,6 @@ EOF
=begin doc
A utility method to run a system command. We will capture the return
@@ -566,12 +556,12 @@ EOF
sub runCommand
{
my ( $cmd ) = (@_ );
my ($cmd) = (@_);
#
# Command start.
#
$CONFIG{'verbose'} && print "Executing : $cmd\n";
$CONFIG{ 'verbose' } && print "Executing : $cmd\n";
#
# Copy stderr to stdout, so we can see it, and make sure we log it.
@@ -587,20 +577,19 @@ sub runCommand
{
print "Running command '$cmd' failed.\n";
print "Aborting\n";
exit;
exit 127;
}
#
# Command finished.
#
$CONFIG{'verbose'} && print "Finished : $cmd\n";
$CONFIG{ 'verbose' } && print "Finished : $cmd\n";
return( $output );
return ($output);
}
=begin doc
This function will copy all the .deb files from one directory
@@ -613,7 +602,7 @@ sub runCommand
sub copyDebFiles
{
my ( $source, $dest ) = ( @_ );
my ( $source, $dest ) = (@_);
print "Copying files from $source -> $dest\n";
@@ -631,7 +620,7 @@ sub copyDebFiles
#
# Only copy if the file doesn't already exist.
#
if ( ! ( -e $dest . "/" . $name ) )
if ( !( -e $dest . "/" . $name ) )
{
File::Copy::cp( $file, $dest );
}
@@ -642,8 +631,6 @@ sub copyDebFiles
###
#
# Installation functions follow.
@@ -652,7 +639,6 @@ sub copyDebFiles
=begin doc
Install a new image of a distribution using `cp`.
@@ -663,14 +649,15 @@ sub copyDebFiles
sub do_copy
{
#
# Find the copy command to run from the configuration file.
#
my $cmd = $CONFIG{'copy-cmd'} ;
if ( !defined( $cmd ) )
my $cmd = $CONFIG{ 'copy-cmd' };
if ( !defined($cmd) )
{
print "Falling back to default copy command\n";
$cmd = '/bin/cp -a $src/* $dest'; # Note: single quotes.
$cmd = '/bin/cp -a $src/* $dest'; # Note: single quotes.
}
#
@@ -682,12 +669,11 @@ sub do_copy
#
# Run the copy command.
#
runCommand( $cmd );
runCommand($cmd);
}
=begin doc
Install a new image of Debian using 'debootstrap'.
@@ -698,15 +684,23 @@ sub do_copy
sub do_debootstrap
{
#
# The command is a little configurable - mostly to allow you
# to use cdebootstrap.
#
my $cmd = $CONFIG{'debootstrap-cmd'} ;
if ( !defined( $cmd ) )
my $cmd = $CONFIG{ 'debootstrap-cmd' };
if ( !$cmd )
{
print "Falling back to default debootstrap command\n";
$cmd = '/usr/sbin/debootstrap';
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";
}
@@ -714,19 +708,20 @@ sub do_debootstrap
# Cache from host -> new installation if we've got caching
# enabled.
#
if ( $CONFIG{'cache'} eq "yes" )
if ( $CONFIG{ 'cache' } eq "yes" )
{
print "\nCopying files from host to image.\n";
runCommand( "mkdir -p $CONFIG{'location'}/var/cache/apt/archives" );
copyDebFiles( "/var/cache/apt/archives", "$CONFIG{'location'}/var/cache/apt/archives" );
print( "Done\n" );
runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives");
copyDebFiles( "/var/cache/apt/archives",
"$CONFIG{'location'}/var/cache/apt/archives" );
print("Done\n");
}
#
# Propogate --verbose appropriately.
#
my $EXTRA = '';
if ( $CONFIG{'verbose'} )
if ( $CONFIG{ 'verbose' } )
{
$EXTRA = ' --verbose';
}
@@ -734,33 +729,34 @@ sub do_debootstrap
#
# Propogate the --arch argument
#
if ( $CONFIG{'arch'} )
if ( $CONFIG{ 'arch' } )
{
$EXTRA .= " --arch $CONFIG{'arch'}"
$EXTRA .= " --arch $CONFIG{'arch'}";
}
#
# This is the command we'll run
#
my $command = "$cmd $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $CONFIG{'mirror'}";
my $command =
"$cmd $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $CONFIG{'mirror'}";
#
# Run the command.
#
runCommand( $command );
runCommand($command);
#
# Cache from the new installation -> the host if we've got caching
# enabled.
#
if ( $CONFIG{'cache'} eq "yes" )
if ( $CONFIG{ 'cache' } eq "yes" )
{
print "\nCopying files from new installation to host.\n";
copyDebFiles( "$CONFIG{'location'}/var/cache/apt/archives",
"/var/cache/apt/archives" );
print( "Done\n" );
print("Done\n");
}
@@ -768,162 +764,9 @@ sub do_debootstrap
=begin doc
Install a system using the image-server.
Note: NON-Advertised ....
=end doc
=cut
sub do_image_server
{
#
# Load the modules we require.
#
my $test = 'use LWP::UserAgent; use CGI;';
#
# Test loading the module, if it fails then
# we must abort. We don't want to insist the module
# is installed since that adds to the dependencies
# which users will not require for the typical installation
# method(s).
#
eval( $test );
if ( $@ )
{
die "The module LDP::UserAgent wasn't found...\n";
}
#
# The number of attempts to request the image from our
# image server, and the time to sleep between them.
#
my $attempts = 30;
my $sleep = 30;
#
# Build up the request we're going to send.
#
my $request = $CONFIG{'install-source'} . "/create.cgi?submit=1";
#
# Some parameters are hard-wired.
#
$request .= "&arch=amd64";
$request .= "&root_device=/dev/sda";
$request .= "&ip1=" . $ENV{'ip1'};
$request .= "&dist=" . CGI::escapeHTML( $CONFIG{'dist'} );
$request .= "&hostname=" . CGI::escapeHTML( $CONFIG{'hostname'} );
#
# We only care about some keys
#
foreach my $k ( qw/ dhcp broadcast gateway netmask / )
{
# Skip values which aren't defined.
next unless defined $ENV{$k};
# CGI encode.
my $val = CGI::escapeHTML( $ENV{$k} );
# Add on to the request
$request .= "&$k=$val";
}
#
# Create a new user agent.
#
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
#
# Do the creation step
#
my $response = $ua->get( $request );
if ($response->is_success)
{
my $content = $response->content;
if ( $content =~ /fetch.cgi\?session=([^"]+)"/ )
{
my $session = $1;
my $new = $CONFIG{'install-source'};
$new .= "/fetch.cgi?session=$session";
my $attempt = 1;
# Make sure we don't wait indefinitely.
while( $attempt < $attempts )
{
$CONFIG{'verbose'} && print "Request: [$attempt/$attempts]\n";
#
# Make a request to see if our tar file is ready yet.
#
$response = $ua->head( $new );
if ( $response->is_success )
{
#
# Get the headers
#
my $header = $response->headers();
my $type = $header->{'content-type'};
#
# OK our file is correct.
#
if ( $type =~ /tar/ )
{
#
# Download it to the installation root.
#
$ua->get( $new,
":content_file" => $CONFIG{'location'} . "/$session.tar"
);
#
# If it worked .. then untar, remove, and return.
#
system( "cd $CONFIG{'location'} && tar --numeric-owner -xf $session.tar && rm -f $CONFIG{'location'}/$session.tar" );
return 1;
}
}
sleep( $sleep );
$attempt += 1;
}
print ( "ERROR: Timeout waiting for image to be ready." );
return 0;
}
else
{
print( "ERROR: Failed to find session. Received this:\n$content\n" );
return 0;
}
}
else
{
print( "ERROR: Submitting the image create request failed:\n" . $response->status_line );
return 0;
}
}
=begin doc
Install a new distribution of GNU/Linux using the rpmstrap tool.
Install a new distribution of GNU/Linux using the rinse tool.
=end doc
@@ -931,29 +774,31 @@ sub do_image_server
sub do_rinse
{
#
# The command we're going to run.
#
my $command = "rinse --distribution=$CONFIG{'dist'} --directory=$CONFIG{'location'}";
my $command =
"rinse --distribution=$CONFIG{'dist'} --directory=$CONFIG{'location'}";
#
# Propogate the --arch argument
#
if ( $CONFIG{'arch'} )
if ( $CONFIG{ 'arch' } )
{
$command .= " --arch $CONFIG{'arch'}"
$command .= " --arch $CONFIG{'arch'}";
}
#
# Propogate the verbosity setting.
#
if ( $CONFIG{'verbose'} )
if ( $CONFIG{ 'verbose' } )
{
$command .= " --verbose";
}
runCommand( $command );
runCommand($command);
}
@@ -972,8 +817,8 @@ sub do_rpmstrap
#
# Propogate the verbosity setting.
#
my $EXTRA='';
if ( $CONFIG{'verbose'} )
my $EXTRA = '';
if ( $CONFIG{ 'verbose' } )
{
$EXTRA .= " --verbose";
}
@@ -981,7 +826,7 @@ sub do_rpmstrap
#
# Propogate any arch setting we might have.
#
if ( $CONFIG{'arch'} )
if ( $CONFIG{ 'arch' } )
{
$EXTRA .= " --arch $CONFIG{'arch'}";
}
@@ -990,18 +835,17 @@ sub do_rpmstrap
# Setup mirror if present.
#
my $mirror = "";
$mirror = $CONFIG{'mirror'} if ( $CONFIG{'mirror'} );
$mirror = $CONFIG{ 'mirror' } if ( $CONFIG{ 'mirror' } );
#
# The command we're going to run.
#
my $command = "rpmstrap $EXTRA $CONFIG{'dist'} $CONFIG{'location'} $mirror";
runCommand( $command );
runCommand($command);
}
=begin doc
Install a new image of a distribution using `tar`.
@@ -1012,14 +856,15 @@ sub do_rpmstrap
sub do_tar
{
#
# Find the tar command to run from the configuration file.
#
my $cmd = $CONFIG{'tar-cmd'} ;
if ( !defined( $cmd ) )
my $cmd = $CONFIG{ 'tar-cmd' };
if ( !defined($cmd) )
{
print "Falling back to default tar command\n";
$cmd = '/bin/tar --numeric-owner -xvf $src'; # Note: single quotes.
$cmd = '/bin/tar --numeric-owner -xvf $src'; # Note: single quotes.
}
#
@@ -1030,5 +875,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");
}

18
debian/NEWS vendored Normal file
View File

@@ -0,0 +1,18 @@
xen-tools (4.2~rc1-1) unstable; urgency=low
If the DomU hangs with "Waiting for root file system" despite
/dev/xvd* is used as disk device, adding "xen-blkfront" to
/etc/initramfs-tools/modules and runing "update-initramfs -u"
afterwards may help.
If the Dom0 is a Debian or Ubuntu, the distribution and suite for
DomUs defaults to the distribution and suite the Dom0 is
running. Otherwise Debian DomUs get "stable" and Ubuntu "lucid" by
default.
Default Debian/Ubuntu mirror is now determined by looking into
/etc/apt/sources.list (if it exists) and taking the first entry with
path ending in /debian/ there.
-- Axel Beckert <abe@debian.org> Sat, 15 May 2010 18:04:14 +0200

21
debian/README.source vendored Normal file
View File

@@ -0,0 +1,21 @@
How to build xen-tools directly from the Git repository?
========================================================
Clone the git repository and change to the directory of your local
working copy.
$ git clone git://gitorious.org/xen-tools/xen-tools.git
$ cd xen-tools
If you just want to build the binary package, run
$ dpkg-buildpackage -uc -us -b
If you want to build source and binary packages, e.g. for an upload to
Debian or Ubuntu:
$ make orig-tar-gz
$ dpkg-buildpackage
-- Axel Beckert <abe@debian.org>, Mon, 17 May 2010 13:31:31 +0200

162
debian/changelog vendored
View File

@@ -1,3 +1,133 @@
xen-tools (4.2~rc1-1) UNRELEASED; urgency=low
* New maintainer and upstream authors
* Reintroduction into Debian Unstable (Closes: #566714)
* New upstream release candidate
- Needs dependency on libfile-slurp-perl
- Supports for more recent versions of Fedora, Ubuntu and Debian
(Closes: #499477)
- Supports pygrub. (Added "Suggests: xen-utils" to debian/control)
- Uses hvc0 and xvda devices by default
- Sets umask to 0077 before creating disk images (Closes: #548909)
- Makes sure, MAKEDEV is found in either /dev/ or /sbin/
(Closes: #502798, #515228)
- Changed rinse path to /usr/sbin/. (Closes: #511211)
- Doesn't delete configuration file if it already exists when
xen-create-image is run. (Closes: #520177)
- Doesn't write the FQDN into /etc/hostname (Closes: #492583)
- Dereferences pointers before hashing them to generate a MAC
address. (Closes: #547265)
- Calls pwconv and grpconv inside chroot when installing Fedora
(Closes: #499476)
- Fixed typo in /usr/lib/xen-tools/*.d/75-fixup-securetty
(Closes: #503339)
- Makes better decisions about when to enable Debian security updates
in the created DomU (LP: #309750)
- Installs dhclient for CentOS and Fedora if DHCP networking is
requested (LP: #241446)
- Fixes some bashisms (Closes: #530226)
* [^y] → [!y] (Thanks to Mathieu Parent!)
* kill -HUP → kill -s HUP (found by checkbashism)
* ${parm/?/pat[/str]} → echo | sed
* echo -e → printf
* read → read dummy
- xt-install-image now exits with return value 127 instead of 0 to
indicate errors on running the command given in --install-method.
(Closes: #534290)
- The debootstrap command now also can be configured on the
commandline with --debootstrap-cmd in xen-create-image and
xt-install-image (Enhances fix for #436480 which added the
debootstrap-cmd config file option)
- Checks for debootstrap and cdebootstrap, uses debootstrap if both
are installed (Changed "Depends: debootstrap" to "Depends:
debootstrap | cdebootstrap" in debian/control)
- Introduces the --domaindir option as alternative to --dir which
always appends "/domains/" to the path. (Closes: #477238)
* Removal of /etc/bash_completion.d/xm from the package since
bash-completion ships a more elaborate version of that file. (Closes:
#566683, #550590, LP: #538917, #484098)
* Downgrade reiserfsprogs and xfsprogs to Suggests. (Closes: #561618,
LP: #80233)
* Added evms-cli to Suggests. It has been removed from Debian before
Lenny, but it is necessary for some optional functionality of
xen-tools. And since some Debian derived distributions (e.g. Ubuntu
LTS and grml) still support it, it's included for the sake of
completeness and correctness.
* Added cfengine2 to Suggests. It is helpful to have it installed when
using the cfengine2 role.
* Bump Standards-Version to 3.8.4 (no changes necessary)
* Bump Debhelper Compatibility to 7
- Replace "dh_clean -k" by "dh_prep"
* Add Vcs-* headers pointing to new upstream and packaging repository
* Fix some Lintian warnings:
- [debian/control]: debhelper-but-no-misc-depends
- [debian/copyright]: copyright-without-copyright-notice
- [debian/source/format]: missing-debian-source-format
* Added a README.source explaining how to build xen-tools directly from
the Git repository.
* Overhauled package description
-- Axel Beckert <abe@debian.org> Mon, 17 May 2010 13:32:04 +0200
xen-tools (4.1-1) unstable; urgency=low
- New command line argument '--no-hosts' to avoid touching /etc/hosts
on dom0
- New command line argument '--pygrub' to setup a guest for pygrub use.
- Generated configuration file should work for --image-dev + --swap-dev
again.
- Always use /dev/pts for new images.
-- Steve Kemp <skx@debian.org> Sun, 23 Nov 2008 13:06:01 +0000
xen-tools (3.9-6) unstable; urgency=low
- Allow command line flags to be unset.
Thanks to Ruud Koolen for the patch.
(Closes: #484338)
-- Steve Kemp <skx@debian.org> Tue, 14 Oct 2008 22:00:22 +0000
xen-tools (3.9-5) unstable; urgency=medium
- Record the ARCH for RPM-based distros.
(Closes: #475125)
- Abort if the generated configuration file already exists.
(Closes: #499475)
-- Steve Kemp <skx@debian.org> Mon, 13 Oct 2008 19:20:21 +0000
xen-tools (3.9-4) unstable; urgency=high
* Changed two defaults in xen-tools.conf to conform
to the defaults used by the xen packages:
+ serial_device: tty1 -> hvc0
+ disk_device: sda -> xvda
* Priority High because of RC bug. (closes: #499282)
-- Radu Spineanu <radu@debian.org> Tue, 30 Sep 2008 02:02:21 +0300
xen-tools (3.9-3) unstable; urgency=medium
- Ensure that Fedora guests get /dev/pts mounted.
Thanks to Giovanni Biscuolo (Closes: #474919)
- Add the new hostnames to /etc/hosts on the dom0 in the correct order.
Thanks to Wolfgang Karall (Closes: #477775)
- Ensure that packages are remoed non-interactively for scripted stuff.
Thanks to Wolfgang Karall (Closes: #477629)
- Correctly handle custom partitioning systems.
Thanks to Stéphane AICARDI (Closes: #477334)
-- Steve Kemp <skx@debian.org> Wed, 20 Feb 2007 21:22:23 +0000
xen-tools (3.9-2) unstable; urgency=high
- Ensure that the hook scripts which setup networking details for
Debian & Ubuntu guests will correctly setup teh broadcast address.
-- Steve Kemp <skx@debian.org> Wed, 20 Feb 2007 21:22:23 +0000
xen-tools (3.9-1) unstable; urgency=low
- general:
@@ -37,9 +167,9 @@ xen-tools (3.8-1) unstable; urgency=low
(Closes: #439233)
* Use 'apt-get remove' rather than 'dpkg --purge' when removing packages
in hooks. (Closes: #441981)
[ Radu Spineanu ]
* debian/control: Roland Stigge and I switched maintainer places.
* debian/control: Roland Stigge and I switched maintainer places.
* debian/control: Added Steve Kemp to Uploaders.
-- Radu Spineanu <radu@debian.org> Wed, 03 Oct 2007 00:39:58 +0300
@@ -149,8 +279,8 @@ xen-tools (3.0-1) unstable; urgency=low
xen-tools (3.0~beta1-2) unstable; urgency=low
* Remove old symlinks and directories during preinst. (closes: #401834)
* Remove old symlinks and directories during preinst. (closes: #401834)
-- Radu Spineanu <radu@debian.org> Wed, 6 Dec 2006 15:58:44 +0200
xen-tools (3.0~beta1-1) unstable; urgency=low
@@ -158,7 +288,7 @@ xen-tools (3.0~beta1-1) unstable; urgency=low
* Development snapshot
* Mention the --mac option in the man page.
(closes: #399708)
* Set the locale version to 'C' to avoid perl warnings.
* Set the locale version to 'C' to avoid perl warnings.
(closes: #399778)
-- Radu Spineanu <radu@debian.org> Mon, 4 Dec 2006 16:55:31 +0200
@@ -181,7 +311,7 @@ xen-tools (2.8-2) unstable; urgency=low
xen-tools (2.8-1) unstable; urgency=low
* New upstream release
* New upstream release
-- Radu Spineanu <radu@debian.org> Wed, 8 Nov 2006 00:35:40 +0200
@@ -203,13 +333,13 @@ xen-tools (2.7-3) unstable; urgency=low
xen-tools (2.7-2) unstable; urgency=low
* Fixed 2.6-2 changelog entry.
* Fixed 2.6-2 changelog entry.
-- Radu Spineanu <radu@debian.org> Sat, 14 Oct 2006 02:21:25 +0300
xen-tools (2.7-1) unstable; urgency=low
* New upstream release
* New upstream release
-- Radu Spineanu <radu@debian.org> Sat, 14 Oct 2006 02:16:20 +0300
@@ -270,7 +400,7 @@ xen-tools (2.3-1) unstable; urgency=high
using a specific version of debootstrap.
- Updated manpages to avoid word-wrapping.
- Updated --noswap option such that a LVM swap volume isn't created.
- Reverted the usage of '--keep-debootstrap-dir' since that is a
- Reverted the usage of '--keep-debootstrap-dir' since that is a
"recent" thing. Will switch to keeping a global logfile for error
purposes.
(Closes: #383589)
@@ -312,7 +442,7 @@ xen-tools (2.2-2) unstable; urgency=low
xen-tools (2.2-1) unstable; urgency=high
* New upstream release, fixes several important bugs hence urgency=high.
- /etc/fstab creation generated correctly for reiserfs
- /etc/fstab creation generated correctly for reiserfs
(Closes: #379023) (Closes: #379096)
- --force works with xfs filesystems.
(Closes: #377684)
@@ -363,7 +493,7 @@ xen-tools (2.0-1) unstable; urgency=low
(Closes: #373800)
-- Steve Kemp <skx@debian.org> Tue, 20 Jun 2006 09:57:45 +0000
xen-tools (1.6-1) unstable; urgency=low
* New upstream release (closes: #368983)
@@ -406,26 +536,26 @@ xen-tools (1.4-1) unstable; urgency=low
(Closes: #363070)
* Added new option --initrd to specify the initial ramdisk.
(Closes: #365500)
-- Steve Kemp <skx@debian.org> Sun, 7 May 2006 14:43:43 +0000
xen-tools (1.3-1) unstable; urgency=low
* New upstream release
+ Ignore .dpkg-(new|old) files in the hooks directory
+ Ignore .dpkg-(new|old) files in the hooks directory
(closes: #357716)
-- Radu Spineanu <radu@debian.org> Sat, 15 Apr 2006 13:44:36 +0300
xen-tools (1.1-1) unstable; urgency=low
* New upstream release
+ Disk devices are no longer created one unit bigger than asked
* New upstream release
+ Disk devices are no longer created one unit bigger than asked
(closes: #353155)
+ Populate /dev on the virtual server (closes: #352942)
+ Added --use-ide flag in case people want ide style device names
(closes: #352937)
+ xen.cfg is no longer broken when using LVM
+ xen.cfg is no longer broken when using LVM
-- Radu Spineanu <radu@debian.org> Tue, 21 Feb 2006 01:28:28 +0200

2
debian/compat vendored
View File

@@ -1 +1 @@
4
7

38
debian/control vendored
View File

@@ -1,18 +1,38 @@
Source: xen-tools
Section: utils
Priority: extra
Maintainer: Roland Stigge <stigge@antcom.de>
Uploaders: Radu Spineanu <radu@debian.org>, Steve Kemp <skx@debian.org>
Build-Depends: debhelper (>= 4.0.0), libtest-pod-perl, libtext-template-perl
Standards-Version: 3.7.3
Maintainer: Axel Beckert <abe@debian.org>
Build-Depends: debhelper (>= 7.0.0), libtest-pod-perl, libtext-template-perl
Standards-Version: 3.8.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, perl-modules, libtext-template-perl, libconfig-inifiles-perl
Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, reiserfsprogs, xfsprogs, rinse, xen-shell, libexpect-perl
Description: Tools to manage Debian XEN virtual servers
This package contains tools to manage Debian based XEN virtual servers.
Depends: debootstrap | cdebootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl, libfile-slurp-perl, ${misc:Depends}
Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, rinse, xen-shell, libexpect-perl
Suggests: reiserfsprogs, xfsprogs, xen-utils, cfengine2, evms-cli
Description: Tools to manage Xen virtual servers
This package contains tools to manage Debian based Xen virtual servers.
.
Using the scripts you can easily create fully configured Xen guest
domains (domU) which can be listed, updated, or copied easily.
domains (DomU) which can be listed, updated, or copied easily.
.
xen-tools currently can install:
.
* Debian 3.1 Sarge (i386 only)
* Debian 4.0 Etch
* Debian 5.0 Lenny
* Debian 6.0 Squeeze
* Debian Sid (Unstable)
* Ubuntu 6.06 Dapper Drake (LTS)
* Ubuntu 6.10 Edgy Eft
* Ubuntu 7.04 Feisty Fawn
* Ubuntu 7.10 Gutsy Gibbon
* Ubuntu 8.04 Hardy Heron (LTS)
* Ubuntu 8.10 Intrepid Ibex
* Ubuntu 9.04 Jaunty Jackaplope
* Ubuntu 9.10 Karmic Koala
* Ubuntu 10.04 Lucid Lynx (LTS)
* Ubuntu 10.10 Maverick Meerkat

4
debian/copyright vendored
View File

@@ -3,7 +3,8 @@ Tue, 20 Dec 2005 02:21:05 +0200.
It was downloaded from http://xen-tools.org/software/xen-tools/
Copyright Holder: Steve Kemp <steve@steve.org.uk>
Copyright 2005-2009: Steve Kemp <steve@steve.org.uk>
Copyright 2010: Axel Beckert <abe@deuxchevaux.org>
License:
@@ -21,4 +22,3 @@ Perl is distributed under licenses:
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in /usr/share/common-licenses/GPL' and
the Artistic Licence in /usr/share/common-licenses/Artistic'.

View File

@@ -53,7 +53,7 @@ cat <<EOF
Press enter to continue, or Ctrl-c to abort.
EOF
read
read __dummy

11
debian/preinst vendored
View File

@@ -23,5 +23,16 @@ if [ -d "/usr/lib/xen-tools/ubuntu.d" ]; then
rm -r /usr/lib/xen-tools/ubuntu.d
fi
#
# 4.1 -> 4.2
#
if [ -L "/usr/lib/xen-tools/intrepid.d" ]; then
rm /usr/lib/xen-tools/intrepid.d
fi
if [ -L "/usr/lib/xen-tools/karmic.d" ]; then
rm /usr/lib/xen-tools/karmic.d
fi
#DEBHELPER#
exit 0

2
debian/rules vendored
View File

@@ -25,7 +25,7 @@ clean:
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_prep
make manpages
make install prefix=`pwd`/debian/xen-tools

1
debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
1.0

View File

@@ -52,7 +52,7 @@
# LVM volume group here instead
#
##
# lvm = skx-vg
# lvm = vg0
#
@@ -130,7 +130,7 @@ 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 = etch # Default distribution to install.
dist = `xt-guess-suite-and-mirror -s` # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
#
@@ -211,7 +211,7 @@ initrd = /boot/initrd.img-`uname -r`
#
# The default mirror for debootstrap to install Debian-derived distributions
#
mirror = http://ftp.us.debian.org/debian/
mirror = `xt-guess-suite-and-mirror -m`
#
# A mirror suitable for use when installing the Dapper release of Ubuntu.
@@ -248,17 +248,17 @@ reiser_options = defaults
#
# If you're using a newer version of the Xen guest kernel you will
# need to make sure that you use 'xvc0' for the guest serial device,
# If you're using the lenny or later version of the Xen guest kernel you will
# need to make sure that you use 'hvc0' for the guest serial device,
# and 'xvdX' instead of 'sdX' for serial devices.
#
# You may specify the things to use here:
#
# serial_device = tty1 #default
# serial_device = xvc0
# serial_device = hvc0 #default
# serial_device = tty1
#
# disk_device = sda #default
# disk_device = xvda
# disk_device = xvda #default
# disk_device = sda
#

View File

@@ -6,37 +6,89 @@
#
# Kernel + memory size
#
{ if ( $kernel )
{ if ( ( $kernel ) && ( !defined($pygrub)) )
{
$OUT.= "kernel = '$kernel'";
}
}
{ if ( $initrd )
{ if ( ( $initrd ) && ( !defined($pygrub)) )
{
$OUT.= "ramdisk = '$initrd'";
}
}
{
if ( $pygrub )
{
my $pygrub_bin = '';
foreach my $pygrub_path (reverse glob('/usr/lib/xen-*/bin/pygrub
/usr/lib/xen-default/bin/pygrub
/usr/*bin/pygrub')) {
if (-x $pygrub_path) {
$pygrub_bin = $pygrub_path;
last;
}
}
die "pygrub not found" unless $pygrub_bin;
$OUT .= "bootloader = '$pygrub_bin'\n";
}
}
vcpus = '{$vcpus}'
memory = '{$memory}'
#
# Disk device(s).
#
{
for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
{
if ( !defined($image_vbd ) )
{
for ( my $i = $#PARTITIONS; $i >= 0 ; $i-- )
{
if ( $PARTITIONS[$i]{'mountpoint'} eq '/' )
{
$OUT .= "root = '/dev/$device" . ($i + 1) . " ro'\n";
}
}
$OUT .= "disk = [\n";
for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
{
}
$OUT .= "disk = [\n";
for ( my $i = $#PARTITIONS; $i >= 0 ; $i-- )
{
$OUT .= " '$PARTITIONS[$i]{'imagetype'}$PARTITIONS[$i]{'image'},$device" . ( $i + 1 ) .",w',\n";
}
$OUT .= " ]\n";
}
$OUT .= " ]\n";
}
#
# Physical volumes
#
{
if ( ( $swap_vbd ) && ( $image_vbd ) )
{
$OUT .= "root = '/dev/$device" . "2 ro'\n";
$OUT .= "disk = [ ";
if ( $image_vbd )
{
$OUT .= "'$image_vbd," . $device . "2,w'";
}
if ( $swap_vbd )
{
if ( $image_vbd )
{
$OUT .= ",";
}
$OUT .= "'$swap_vbd," . $device . "1,w'";
}
$OUT .= " ]\n";
}
}
#
# Hostname
#
@@ -52,12 +104,26 @@ name = '{$hostname}'
# Setup the mac address, if present.
my $m = '';
if ( $mac )
{
{
$m = "mac=$mac"
}
$OUT .= "vif = [ '$m' ]";
}
my $br = '';
if ( $bridge )
{
if ( $mac )
{
$br = ",bridge=$bridge"
}
else
{
$br = "bridge=$bridge"
}
}
$OUT .= "vif = [ '";
$OUT .= "$m";
$OUT .= "$br";
$OUT .= "' ]";
}
else
{
#
@@ -65,12 +131,27 @@ name = '{$hostname}'
#
my $m = '';
if ( $mac )
{
{
$m = ",mac=$mac"
}
$OUT .= "vif = [ 'ip=$ip1";
$OUT .= "$m' ]";
my $vn = '';
if ( $vifname )
{
$vn = ",vifname=$vifname";
}
my $br = '';
if ( $bridge )
{
$br = ",bridge=$bridge"
}
$OUT .= "vif = [ 'ip=$ip1";
$OUT .= "$m";
$OUT .= "$vn";
$OUT .= "$br";
$OUT .= "' ]";
}
}

44
hooks/centos-4/15-setup-arch Executable file
View File

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

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Do the transformation.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -79,6 +79,7 @@ DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
E_O_DHCP
chroot ${prefix} /usr/bin/yum -y install dhclient
fi

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -89,23 +89,27 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

View File

@@ -36,15 +36,19 @@ logMessage Filesystem options are ${options}
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -64,6 +68,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -75,7 +80,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -84,7 +89,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

44
hooks/centos-5/15-setup-arch Executable file
View File

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

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Do the transformation.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -79,6 +79,7 @@ DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
E_O_DHCP
chroot ${prefix} /usr/bin/yum -y install dhclient
fi

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -89,23 +89,24 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

View File

@@ -37,15 +37,19 @@ logMessage Filesystem options are ${options}
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`

View File

@@ -12,7 +12,7 @@
# might develop.
#
# Steve
# --
# --
#
@@ -85,7 +85,7 @@ installDebianPackage ()
#
# Use policy-rc to stop any daemons from starting.
#
echo -e '#!/bin/bash\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d
printf '#!/bin/bash\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d
chmod +x ${prefix}/usr/sbin/policy-rc.d
#
@@ -98,7 +98,9 @@ installDebianPackage ()
#
# Install the packages
#
mount -t devpts devpts ${prefix}/dev/pts
DEBIAN_FRONTEND=noninteractive chroot ${prefix} /usr/bin/apt-get --yes --force-yes install "$@"
umount ${prefix}/dev/pts
#
# Remove the policy-rc.d script.
@@ -130,7 +132,7 @@ disableStartStopDaemon ()
chmod 755 "${daemonfile}"
logMessage "start-stop-daemon disabled / made a stub."
}
#
@@ -151,7 +153,7 @@ enableStartStopDaemon ()
fi
}
#
@@ -182,7 +184,7 @@ removeDebianPackage ()
#
# Purge the packages we've been given.
#
chroot ${prefix} /usr/bin/apt-get remove --purge "$@"
chroot ${prefix} /usr/bin/apt-get remove --yes --purge "$@"
}
@@ -218,6 +220,28 @@ installCentOS4Package ()
}
#
# Install a package using whatever package management tool is available
#
installPackage ()
{
prefix=$1
package=$2
if [ -x ${prefix}/usr/bin/apt-get ] ; then
installDebianPackage "$@"
elif [ -x ${prefix}/usr/bin/yum ] ; then
installCentOS4Package "$@"
else
logMessage "Unable to install package ${package}; no package manager found"
fi
}
#
# Install a package upon a gentoo system via emerge.
#
@@ -232,7 +256,7 @@ installGentooPackage ()
# Log our options
#
logMessage "Installing Gentoo package ${package} to prefix ${prefix}"
logMessage "NOTE: Not doing anything - this is a stub - FIXME"
}

View File

@@ -28,7 +28,7 @@ logMessage Script $0 starting
#
# Switch off the gettys for everything other than tty1.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -89,24 +89,25 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -28,6 +28,7 @@ logMessage Script $0 starting
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

View File

@@ -33,15 +33,19 @@ logMessage Script $0 starting
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -61,6 +65,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -72,7 +77,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -81,7 +86,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

View File

@@ -76,9 +76,12 @@ E_O_APT
#
# If the host system has security support then enable that here too.
# If the host system has security support then enable that here, too,
# except if we're installing Debian Unstable.
#
if ( grep ^deb.*security.debian.org /etc/apt/sources.list >/dev/null 2>/dev/null ) ; then
if ( test "${dist}" '!=' 'sid' && test "${dist}" '!=' 'unstable' && \
test -e /etc/apt/sources.list && \
grep ^deb.*security -r /etc/apt/sources.list /etc/apt/sources.list.d >/dev/null 2>/dev/null ) ; then
cat <<E_O_APT >> ${prefix}/etc/apt/sources.list
#

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Do the transformation.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -82,7 +82,7 @@ setupStaticNetworking ()
#
bcast='';
if [ ! -z "${broadcast}" ]; then
bcast=' broadcast ${broadcast}'
bcast=" broadcast ${broadcast}"
fi
#

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -42,10 +42,14 @@ echo ${hostname} > ${prefix}/etc/mailname
if [ -z "${dhcp}" ]; then
# Non-IPv6 stuff.
# TODO: Think of a better way of doing this, this may have a lot of trash
# depending on the dom0 (i.e. 127.0.0.1 dom0.example.com)
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
# echo "127.0.0.1 localhost" >> ${prefix}/etc/hosts
echo "127.0.1.1 $(echo ${hostname} | awk -F '.' '{ print $1 }')" >> ${prefix}/etc/hosts
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
@@ -57,7 +61,8 @@ else
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
127.0.0.1 localhost
127.0.1.1 $(echo ${hostname} | awk -F '.' '{ print $1 }') ${hostname}
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
@@ -89,23 +94,24 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -26,6 +26,19 @@ fi
#
logMessage Script $0 starting
#
# Test where MAKEDEV is located, assuming /sbin/ as default
#
MAKEDEV=''
MAKEDEV_PATHS="/sbin/MAKEDEV /dev/MAKEDEV"
for MAKEDEV_PATH in ${MAKEDEV_PATHS}; do
if [ -x "${prefix}${MAKEDEV_PATH}" ]; then
MAKEDEV="${prefix}${MAKEDEV_PATH}"
break
fi
done
if [ -n "${MAKEDEV}" ]; then
#
# Early termination if we have a couple of common devices present
@@ -36,10 +49,10 @@ if ( test `ls -1 ${prefix}/dev | wc -l` -gt 10 ); then
# We still need to make sure the basic devices are present
#
cd ${prefix}/dev
./MAKEDEV std
./MAKEDEV hda
./MAKEDEV sda
./MAKEDEV tty1
${MAKEDEV} std
${MAKEDEV} hda
${MAKEDEV} sda
${MAKEDEV} tty1
logMessage "Terminating because there appear to be files in /dev already"
exit
@@ -50,9 +63,10 @@ fi
# Make the device nodes.
#
cd ${prefix}/dev
./MAKEDEV generic
./MAKEDEV std
${MAKEDEV} generic
${MAKEDEV} std
fi # -n ${MAKEDEV}
#
# Log our finish

View File

@@ -28,6 +28,7 @@ logMessage Script $0 starting
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#

View File

@@ -32,7 +32,7 @@ logMessage Script $0 starting
#
# Install ssh
#
installDebianPackage ${prefix} ssh
installDebianPackage ${prefix} openssh-server
#

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

137
hooks/debian/80-install-kernel Executable file
View File

@@ -0,0 +1,137 @@
#!/bin/sh
#
# If the pygrub flag is set, this script will install the necessary
# packages to boot the VM from the dom0 via pygrub. This script installs
# the kernel and modules and generates a grub menu.lst in the newly
# created maschine.
#
# Dmitry Nedospasov
# --
# http://nedos.net
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
if [ "${pygrub}" ]; then
#
# Log our start
#
logMessage Script $0 starting
#
# Resolve the correct architecutre
#
if [ "${arch}" = "i386" ]; then
XEN_ARCH="686"
elif [ "${arch}" = "amd64" ]; then
XEN_ARCH="amd64"
elif [ -z "${arch}" ]; then
UNAME_ARCH=`uname -m`
if [ "${UNAME_ARCH}" = "i686" ]; then
XEN_ARCH="686"
elif [ "${UNAME_ARCH}" = "x86_64" ]; then
XEN_ARCH="amd64"
else
logMessage Unknown kernel architecture ${UNAME_ARCH}.
logMessage Please report this as bug to xen-tools-dev@xen-tools.org.
logMessage Script $0 failed
exit 1
fi
else
logMessage Unknown kernel architecture ${arch}
logMessage Script $0 failed
exit 1
fi
#
# Attempt to install a xen kernel, if that fails, then install a normal one
#
KERNEL_XEN_PKG="linux-image-xen-$XEN_ARCH"
KERNEL_PKG="linux-image-$XEN_ARCH"
logMessage Attempting to install the $KERNEL_XEN_PKG kernel image
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_XEN_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_XEN_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_XEN_PKG
else
logMessage Package $KERNEL_XEN_PKG is not available
logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG
else
logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed
exit 1
fi
fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
KERNEL_REV=$(echo $DOMU_KERNEL | sed "s/vmlinuz-//g")
DOMU_RAMDISK="initrd.img-$KERNEL_REV"
DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
#
# Generate initrd if it does not exist
#
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation
else
logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV
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
else
logMessage pygrub not set, skipping kernel install
fi # if pygrub
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -31,7 +31,9 @@ fi
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
logMessage "pygrub set, skipping module install"
else
#
# The name of the package containing the correct modules.
#
@@ -76,6 +78,7 @@ fi
#
installDebianPackage ${prefix} module-init-tools
fi # if pygrub
#
# Log our finish

View File

@@ -32,15 +32,19 @@ logMessage Script $0 starting
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -60,6 +64,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -71,7 +76,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -80,7 +85,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

View File

@@ -41,7 +41,8 @@ cp /etc/resolv.conf ${prefix}/etc
#
# Process any of the present apt-conf setup lines.
#
for i in /etc/apt/apt.conf /etc/apt/apt.conf.d/* ; do
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
@@ -52,7 +53,8 @@ for i in /etc/apt/apt.conf /etc/apt/apt.conf.d/* ; do
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -i HTTP::Proxy $i >> ${prefix}/etc/apt/apt.conf.d/proxy-guess
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done

View File

@@ -28,7 +28,9 @@ logMessage Script $0 starting
# Remove the links for upstart
#
rm ${prefix}/etc/event.d/tty[!1]
sed -i -e s/tty1/hvc0/ ${prefix}/etc/event.d/tty1
mv ${prefix}/etc/event.d/tty1 ${prefix}/etc/event.d/hvc0
[ -f ${prefix}/etc/inittab ] && sed -i -e s/tty1/hvc0/ ${prefix}/etc/inittab
#
# Are we using an alternative serial device?
@@ -38,11 +40,14 @@ if [ ! -z "${serial_device}" ]; then
serial_device=`basename ${serial_device}`
# Let the user know.
logMessage "Replacing default serial device (tty1) with ${serial_device}"
logMessage "Replacing default serial device (hvc0) with ${serial_device}"
# replace existing device.
mv ${prefix}/etc/event.d/tty1 ${prefix}/etc/event.d/${serial_device}
sed -i -e s/tty1/${serial_device}/ ${prefix}/etc/inittab
mv ${prefix}/etc/event.d/hvc0 ${prefix}/etc/event.d/${serial_device}
sed -i -e s/hvc0/${serial_device}/ ${prefix}/etc/event.d/${serial_device}
[ -f ${prefix}/etc/inittab ] && sed -i -e s/hvc0/${serial_device}/ ${prefix}/etc/inittab
# make sure that it is allowed to login.
echo $serial_device >> ${prefix}/etc/securetty

View File

@@ -72,7 +72,7 @@ setupStaticNetworking ()
#
bcast='';
if [ ! -z "${broadcast}" ]; then
bcast=' broadcast ${broadcast}'
bcast=" broadcast ${broadcast}"
fi
#

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -88,23 +88,24 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -28,6 +28,7 @@ logMessage Script $0 starting
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

112
hooks/edgy/80-install-kernel Executable file
View File

@@ -0,0 +1,112 @@
#!/bin/sh
#
# If the pygrub flag is set, this script will install the necessary
# packages to boot the VM from the dom0 via pygrub. This script installs
# the kernel and modules and generates a grub menu.lst in the newly
# created maschine.
#
# Dmitry Nedospasov
# --
# http://nedos.net
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
#
# Attempt to install a xen kernel, if that fails, then install a normal one
#
KERNEL_XEN_PKG="linux-image-xen"
KERNEL_PKG="linux-image-server"
logMessage Attempting to install the $KERNEL_XEN_PKG kernel image
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_XEN_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_XEN_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_XEN_PKG
else
logMessage Package $KERNEL_XEN_PKG is not available
logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG
else
logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed
exit 1
fi
fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
KERNEL_REV=$(echo $DOMU_KERNEL | sed "s/vmlinuz-//g")
DOMU_RAMDISK="initrd.img-$KERNEL_REV"
DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
#
# Generate initrd if it does not exist
#
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation
else
logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV
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
else
logMessage pygrub not set, skipping kernel install
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -31,7 +31,9 @@ fi
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
logMessage "pygrub set, skipping module install"
else
#
# The name of the package containing the correct modules.
#
@@ -71,12 +73,12 @@ 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
#
# Log our finish

View File

@@ -33,15 +33,19 @@ logMessage Script $0 starting
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -61,6 +65,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -72,7 +77,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -81,7 +86,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

View File

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

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Do the transformation.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -21,6 +21,12 @@ my $prefix = shift;
die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $prefix );
#
# Setup /etc/shadow and /etc/gshadow (Closes: #499476)
#
system( "chroot $prefix /usr/sbin/pwconv" );
system( "chroot $prefix /usr/sbin/grpconv" );
#
# Exit unless the 'accounts' variable is set.

View File

@@ -79,6 +79,7 @@ DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
E_O_DHCP
chroot ${prefix} /usr/bin/yum -y install dhclient
fi

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Setup the mailname + hostname files.
#
echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname
@@ -89,23 +89,25 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

View File

@@ -36,15 +36,19 @@ logMessage Filesystem options are ${options}
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -64,6 +68,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -75,7 +80,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -84,7 +89,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
#
# Do the transformation.
#
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' ${prefix}/etc/inittab
sed -i -e 's/^\([2-6].*:respawn*\)/#\1/' -e 's/^T/#\t/' -e 's/tty1$/hvc0/' ${prefix}/etc/inittab
#

View File

@@ -31,8 +31,8 @@ logMessage Script $0 starting
#
# We need to split up the hostname into name + domain
# do this by looking for a dot.
name=${hostname/.*/}
domain=${hostname/${name}\./}
name=$(echo "$hostname" | sed -e 's/\..*$//')
domain=$(echo "$hostname" | sed -e 's/^[^.]*\.//')
#
@@ -96,23 +96,24 @@ if [ -z "${dhcp}" ]; then
#
name=`echo ${hostname} | awk -F. '{print $1}'`
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
if [ -z "${nohosts}" ]; then
echo "${ip1} ${name} ${hostname}" >> /etc/hosts
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
echo "${ip1} ${hostname} ${name}" >> /etc/hosts
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
#
# If we've updated the /etc/hosts file on the host machine
# and there is an installation of dnsmasq installed then
# reload it.
#
# This will let the local LAN clients lookup the new address.
#
if [ -x /usr/sbin/dnsmasq ] ; then
if [ -e /var/run/dnsmasq.pid ]; then
logMessage Allowing DNSMasq to restart.
kill -HUP `cat /var/run/dnsmasq.pid`
logMessage Allowing DNSMasq to restart.
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
fi
fi
fi

View File

@@ -30,7 +30,7 @@ logMessage Script $0 starting
# If the file doesn't exist exit early.
#
if [ ! -e ${prefix}/etc/securetty ]; then
logMesage /etc/securetty not found.
logMessage /etc/securetty not found.
exit
fi

View File

@@ -33,15 +33,19 @@ logMessage Script $0 starting
#
# Find the root device.
#
# 1. default to sda.
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. Otherwise use a named $disk_device
# 3. If --scsi is specified use sda.
#
device=sda
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
@@ -61,6 +65,7 @@ cat <<E_O_FSTAB > ${prefix}/etc/fstab
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
@@ -72,7 +77,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
@@ -81,7 +86,7 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else

View File

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

View File

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

View File

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

106
hooks/intrepid/20-setup-apt Executable file
View File

@@ -0,0 +1,106 @@
#!/bin/sh
#
# This script sets up the /etc/apt/sources.list for APT.
#
# Steve
# --
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
#
# Attempt to auto-magically detect the use of a Proxy for apt-get, and
# replicate that setup in our new guest.
#
#
# Process any of the present apt-conf setup lines.
#
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
cat <<E_O_APT > ${prefix}/etc/apt/sources.list
#
# /etc/apt/sources.list
#
#
# ${dist}
#
deb ${mirror} ${dist} main restricted universe multiverse
deb-src ${mirror} ${dist} main restricted universe
deb ${mirror} ${dist}-updates main restricted universe multiverse
deb-src ${mirror} ${dist}-updates main restricted universe
deb http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
E_O_APT
#
# Now that the sources have been setup make sure the system is up to date.
#
chroot ${prefix} /usr/bin/apt-get update
#
# Now fixup TLS on non-64bit systems.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
else
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

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

View File

@@ -0,0 +1,60 @@
#!/bin/sh
#
# This script comments out all virtual terminals which aren't on the
# first console - that must remain so that 'xm console ...' works
# correctly.
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Remove the links for upstart
#
rm ${prefix}/etc/event.d/tty[!1]
sed -i -e s/tty1/hvc0/ ${prefix}/etc/event.d/tty1
mv ${prefix}/etc/event.d/tty1 ${prefix}/etc/event.d/hvc0
[ -f ${prefix}/etc/inittab ] && sed -i -e s/tty1/hvc0/ ${prefix}/etc/inittab
#
# Are we using an alternative serial device?
#
if [ ! -z "${serial_device}" ]; then
serial_device=`basename ${serial_device}`
# Let the user know.
logMessage "Replacing default serial device (hvc0) with ${serial_device}"
# replace existing device.
mv ${prefix}/etc/event.d/hvc0 ${prefix}/etc/event.d/${serial_device}
sed -i -e s/hvc0/${serial_device}/ ${prefix}/etc/event.d/${serial_device}
[ -f ${prefix}/etc/inittab ] && sed -i -e s/hvc0/${serial_device}/ ${prefix}/etc/inittab
# make sure that it is allowed to login.
echo $serial_device >> ${prefix}/etc/securetty
fi
#
# Log our finish
#
logMessage Script $0 finished

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

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

View File

@@ -0,0 +1,145 @@
#!/bin/sh
#
# This script sets up the /etc/network/interface file for the new
# image.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Make sure we have an /etc/network directory.
#
mkdir -p ${prefix}/etc/network
#
# A function to setup DHCP for our new image.
#
setupDynamicNetworking ()
{
#
# The host is using DHCP.
#
cat <<E_O_DHCP > ${prefix}/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# post-up ethtool -K eth0 tx off
#
# The commented out line above will disable TCP checksumming which
# might resolve problems for some users. It is disabled by default
#
E_O_DHCP
}
#
# A function to setup static IP addresses for our new image.
#
setupStaticNetworking ()
{
#
# broadcast address?
#
bcast='';
if [ ! -z "${broadcast}" ]; then
bcast=" broadcast ${broadcast}"
fi
#
# We have a static IP address
#
cat <<E_O_STATIC >${prefix}/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address ${ip1}
gateway ${gateway}
netmask ${netmask}
${bcast}
# post-up ethtool -K eth0 tx off
#
# The commented out line above will disable TCP checksumming which
# might resolve problems for some users. It is disabled by default
#
E_O_STATIC
interface=1
count=2
while [ "${count}" -le "${ip_count}" ]; do
value=\$ip${count}
value=`eval echo $value`
logMessage Adding etho:${interface}
cat <<E_O_STATIC >>${prefix}/etc/network/interfaces
auto eth0:${interface}
iface eth0:${interface} inet static
address ${value}
netmask ${netmask}
# post-up ethtool -K eth0 tx off
E_O_STATIC
count=`expr $count + 1`
interface=`expr $interface + 1`
done
}
#
# Call the relevant function
#
if [ -z "${dhcp}" ]; then
logMessage "Setting up static networking"
setupStaticNetworking
else
logMessage "Setting up DHCP networking"
setupDynamicNetworking
fi
#
# Log our finish
#
logMessage Script $0 finished

118
hooks/intrepid/50-setup-hostname Executable file
View File

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

View File

@@ -0,0 +1,59 @@
#!/bin/sh
#
# Copy files from a 'skel' directory, if present, into the
# new images
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# Copy "required" files from our host.
#
cp /etc/timezone ${prefix}/etc
cp /etc/localtime ${prefix}/etc
#
# If the host has sudo then copy the configuration file, and install
# the package
#
if [ -e /etc/sudoers ]; then
logMessage Installing SUDO too.
#
# Copy file and fixup permissions.
#
cp /etc/sudoers ${prefix}/etc
chown root:root ${prefix}/etc/sudoers
chmod 440 ${prefix}/etc/sudoers
#
# Install sudo
#
installDebianPackage ${prefix} sudo
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

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

42
hooks/intrepid/70-install-ssh Executable file
View File

@@ -0,0 +1,42 @@
#!/bin/sh
#
# This script installs OpenSSH upon the new system.
#
# It must make sure that the server is not running before it exits
# otherwise the temporary mounted directory will not be unmountable.
#
# 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 ssh
#
installDebianPackage ${prefix} ssh
#
# Log our finish
#
logMessage Script $0 finished

View File

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

102
hooks/intrepid/80-install-kernel Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/sh
#
# If the pygrub flag is set, this script will install the necessary
# packages to boot the VM from the dom0 via pygrub. This script installs
# the kernel and modules and generates a grub menu.lst in the newly
# created maschine.
#
# Dmitry Nedospasov
# --
# http://nedos.net
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
#
# Attempt to install a xen kernel, if that fails, then install a normal one
#
KERNEL_PKG="linux-image-server"
logMessage Attempting to install the $KERNEL_PKG kernel image
logMessage WARNING: This kernel may not have pvops
if chroot ${prefix} /usr/bin/apt-cache show $KERNEL_PKG > /dev/null 2>&1; then
logMessage Package $KERNEL_PKG is available - installing
installDebianPackage ${prefix} initramfs-tools
installDebianPackage ${prefix} $KERNEL_PKG
else
logMessage Package $KERNEL_PKG is not available
logMessage pygrub set, but kernel could not be installed
logMessage Script $0 failed
exit 1
fi
DOMU_KERNEL=$(basename $(ls -1 ${prefix}/boot/vmlinuz* | tail -n 1))
KERNEL_REV=$(echo $DOMU_KERNEL | sed "s/vmlinuz-//g")
DOMU_RAMDISK="initrd.img-$KERNEL_REV"
DOMU_ISSUE=$(sed -re "s/ *\\\.*//g" -e1q < ${prefix}/etc/issue)
#
# Generate initrd if it does not exist
#
if [ -f ${prefix}/boot/$DOMU_RAMDISK ]; then
logMessage initrd exists, skipping generation
else
logMessage initrd missing, generating
chroot ${prefix} update-initramfs -c -k $KERNEL_REV
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
else
logMessage pygrub not set, skipping kernel install
fi
#
# Log our finish
#
logMessage Script $0 finished

View File

@@ -0,0 +1,86 @@
#!/bin/sh
#
# Install modules from the host system into the new image, and
# ensure that 'module-init-tools' 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.
#
# Steve
# --
# http://www.steve.org.uk/
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
if [ ${pygrub} ]; then
logMessage "pygrub set, skipping module install"
else
#
# The name of the package containing the correct modules.
#
linux_modules_package="linux-modules-$(uname -r)"
#
# Attempt to install that package. This will either work on an Etch
# system, or fail on a Sarge/custom kernel.
#
if [ -n "${modules}" -a -d "${modules}" ]; then
#
# Modules path was specified during install
#
logMessage "Copying modules from ${modules}"
mkdir -p ${prefix}/lib/modules
cp -au ${modules} ${prefix}/lib/modules
elif chroot ${prefix} /usr/bin/apt-cache show ${linux_modules_package} >/dev/null 2>/dev/null; then
logMessage "Package '${linux_modules_package}' is available - installing"
#
# If it worked then we can install the package.
#
installDebianPackage ${prefix} ${linux_modules_package}
else
#
# Fall back to copying over modules from the host to the new
# system.
#
logMessage "Package '${linux_modules_package}' is not available"
logMessage "Copying modules from /lib/modules/$(uname -r)"
mkdir -p ${prefix}/lib/modules
cp -au /lib/modules/$(uname -r) ${prefix}/lib/modules
fi
#
# Install the module-init-tools package.
#
installDebianPackage ${prefix} module-init-tools
fi # if pygrub
#
# Log our finish
#
logMessage Script $0 finished

113
hooks/intrepid/90-make-fstab Executable file
View File

@@ -0,0 +1,113 @@
#!/bin/sh
#
# This script is responsible for setting up /etc/fstab upon the
# new instance.
#
# This should be a simple job, but it is complicated by some of the
# differences between filesystems - some root filesystems will require
# the installation of new packages, and we have to handle that here.
#
# 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
#
# Find the root device.
#
# 1. default to xvda.
#
# 2. If --ide is specified use hda.
#
# 3. If --scsi is specified use sda.
#
# 4. Otherwise use a named $disk_device
#
device=xvda
if [ "${ide}" ]; then
device=hda
elif [ "${scsi}" ]; then
device=sda
else
if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device`
fi
fi
logMessage "Root device is /dev/$device"
#
# Now we have the options we can create the fstab.
#
has_xfs=0
has_reiserfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\""
OLDIFS="${IFS}"
IFS=:
x=0
for partdata in ${PARTITION}; do
eval "partdata${x}=\"${partdata}\""
x=$(( $x+1 ))
done
IFS="${OLDIFS}"
case "${partdata2}" in
xfs)
has_xfs=1
;;
reiserfs)
has_reiserfs=1
;;
esac
if [ "${partdata2}" = "swap" ]; then
echo "/dev/${device}${part} none swap sw 0 0" >> ${prefix}/etc/fstab
else
echo "/dev/${device}${part} ${partdata3} ${partdata2} ${partdata4} 0 1" >> ${prefix}/etc/fstab
fi
done
#
# Finally we can 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
#
# Log our finish
#
logMessage Script $0 finished

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

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

View File

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

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

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

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

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

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

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

106
hooks/karmic/20-setup-apt Executable file
View File

@@ -0,0 +1,106 @@
#!/bin/sh
#
# This script sets up the /etc/apt/sources.list for APT.
#
# Steve
# --
#
prefix=$1
#
# Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
. /usr/lib/xen-tools/common.sh
else
. ./hooks/common.sh
fi
#
# Log our start
#
logMessage Script $0 starting
#
# You will probably need DNS to run "apt-get update"
#
cp /etc/resolv.conf ${prefix}/etc
#
# Attempt to auto-magically detect the use of a Proxy for apt-get, and
# replicate that setup in our new guest.
#
#
# Process any of the present apt-conf setup lines.
#
for i in /etc/apt/apt.conf $(run-parts --list /etc/apt/apt.conf.d) ; do
#
# If the file exists. (Need this in case the literal glob fails.)
#
if [ -e $i ] ; then
#
# Save the matching line(s) to the proxy guess file.
#
logMessage The use of a proxy detected.
grep -v '^//' $i | grep -i HTTP::Proxy >>${prefix}/etc/apt/apt.conf.d/proxy-guess
fi
done
cat <<E_O_APT > ${prefix}/etc/apt/sources.list
#
# /etc/apt/sources.list
#
#
# ${dist}
#
deb ${mirror} ${dist} main restricted universe multiverse
deb-src ${mirror} ${dist} main restricted universe
deb ${mirror} ${dist}-updates main restricted universe multiverse
deb-src ${mirror} ${dist}-updates main restricted universe
deb http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu ${dist}-security main restricted universe
E_O_APT
#
# Now that the sources have been setup make sure the system is up to date.
#
chroot ${prefix} /usr/bin/apt-get update
#
# Now fixup TLS on non-64bit systems.
#
if [ "`uname -m`" = "x86_64" ]; then
logMessage "Ignoring TLS since we're a 64 bit host."
else
logMessage "Installing libc6-xen"
installDebianPackage ${prefix} libc6-xen
fi
#
# Log our finish
#
logMessage Script $0 finished

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