1
0
mirror of synced 2026-02-20 22:05:15 +00:00

Compare commits

..

6 Commits

Author SHA1 Message Date
Steve Kemp
85846b480d Document state of Debian package 3.9-6 2010-08-31 23:11:56 +02:00
Steve Kemp
f73eb76b1e Document state of Debian package 3.9-5 2010-08-31 23:08:22 +02:00
Radu Spineanu
f56ebbaf68 Document state of Debian package 3.9-4 2010-08-31 22:56:33 +02:00
Steve Kemp
09bf1cd84d Document state of Debian package 3.9-3 2010-08-31 22:40:01 +02:00
Steve Kemp
7d9b9b9881 Document state of Debian package 3.9-2 2010-08-31 22:28:34 +02:00
Steve Kemp
aba8e1b411 Document state of Debian package 3.9-1 2010-08-31 22:19:29 +02:00
163 changed files with 2597 additions and 7161 deletions

31
.gitignore vendored
View File

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

View File

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

View File

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

34
.release Normal file
View File

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

35
AUTHORS
View File

@@ -1,9 +1,8 @@
Primary Authors
---------------
Axel Beckert <abe@deuxchevaux.org>
Dmitry Nedospasov <dmitry@nedos.net> Primary Author
Stéphane Jourdois <sjourdois [at] com.gmail> --------------
Steve Kemp <steve [at] uk.org.steve> Steve Kemp <steve [at] uk.org.steve>
@@ -12,7 +11,7 @@ Contributions
Listed alphabetically by surname. Listed alphabetically by surname.
C.J. Adams-Collier <cjcollier [at] com.gmail> C.J. Adams-Collier <cjcollier [at] com.gmail.com
- Added new modular structure to the code. - Added new modular structure to the code.
Nick Anderson <nick [at] net.anders0n> Nick Anderson <nick [at] net.anders0n>
@@ -33,9 +32,6 @@ Contributions
Stefan Fritsch <sf [at] de.sfritsch> Stefan Fritsch <sf [at] de.sfritsch>
- Contributed the policy-rc.d fixups for common.sh - Contributed the policy-rc.d fixups for common.sh
Raphaël Halimi <raphael.halimi [at] com.gmail>
- Contribute bashism fix
Sven Hertge <sven [at] de.svenhartge> Sven Hertge <sven [at] de.svenhartge>
- Bugfix for Debian/Gentoo package installation. - Bugfix for Debian/Gentoo package installation.
@@ -52,37 +48,21 @@ Contributions
- Improved binary detection and good suggestions. - Improved binary detection and good suggestions.
- Better portability for non-bash shells. - Better portability for non-bash shells.
Jorge Armando Medina <jmedina [at] com.e-compugraf>
- Fix for backward compatibility with xvc0 serial consoles
Gordon Messmer <gmessmer [at] edu.washington.u> Gordon Messmer <gmessmer [at] edu.washington.u>
- Supplied .spec file for building .rpm packages. - Supplied .spec file for building .rpm packages.
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
Guillaume Pernot <gpernot [at] org.praksys>
- Fixed Sarge amd64 special case
Walter Reiner <walter [at] at.wreiner> Walter Reiner <walter [at] at.wreiner>
- Provided --image-dev + --swap-dev patch. - Provided --image-dev + --swap-dev patch.
Jameson Rollins <jrollins [at] edu.columbia.phys> Jameson Rollins <jrollins [at] edu.columbia.phys>
- Provided --output + --extension code. - 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> Felipe Scarel <fbscarel [at] com.gmail>
- Bugfix for --no-swap + LVM - Bugfix for --no-swap + LVM
Radu Spineanu <radu [at] org.debian> Radu Spineanu <radu [at] org.debian>
- Supplied many small tweaks, bugfixes, and suggestions. - Supplied many small tweaks, bugfixes, and suggestions.
- Radu is also one of the former Debian package maintainers. - Radu is also the Debian package maintainer and has CVS commit access.
Henning Sprang <henning_sprang [at] de.gmx> Henning Sprang <henning_sprang [at] de.gmx>
- Many suggestions and useful Debian bug reports. - Many suggestions and useful Debian bug reports.
@@ -96,3 +76,6 @@ Contributions
Ward Vandewege <ward [at] be.pong> Ward Vandewege <ward [at] be.pong>
- Made several updates for Ubuntu support. - 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

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

View File

@@ -12,14 +12,10 @@
# #
# Only used to build distribution tarballs. # Only used to build distribution tarballs.
# #
TMP ?= /tmp
DIST_PREFIX = ${TMP} DIST_PREFIX = ${TMP}
VERSION = 4.2.1+dev VERSION = 3.9
DEBVERSION = $(shell echo $(VERSION)|sed 's/\(rc\|pre\|beta\|alpha\)/~\1/')
BASE = xen-tools BASE = xen-tools
VCS = $(shell if git ls-files > /dev/null; then echo git; \
elif hg st > /dev/null; then echo hg; \
else echo cannot-determine-used-vcs; fi)
# #
# Installation prefix, useful for the Debian package. # Installation prefix, useful for the Debian package.
@@ -46,25 +42,21 @@ nop:
# with those details. # with those details.
# #
changelog: changelog:
$(VCS) log -v > ChangeLog hg log -v > ChangeLog
# #
# Delete all temporary files, recursively. # Delete all temporary files, recursively.
# #
clean: clean:
@find . \ @find . -name '.*~' -exec rm \{\} \;
-path ./.git -prune -o \ @find . -name '.#*' -exec rm \{\} \;
\( \ @find . -name '*~' -exec rm \{\} \;
-name '*~' -o \ @find . -name '*.bak' -exec rm \{\} \;
-name '.#*' -o \ @find . -name '*.tmp' -exec rm \{\} \;
-name '*.bak' -o \ @find . -name 'tags' -exec rm \{\} \;
-name '*.tmp' -o \ @find . -name '*.8.gz' -exec rm \{\} \;
-name 'tags' -o \ @find man -name '*.html' -exec rm \{\} \;
-name '*.8.gz' -o \
-name '*.tdy' \
\) -exec rm "{}" +
@if [ -d man ]; then rm -rf man ; fi
@if [ -e build-stamp ]; then rm -f build-stamp ; fi @if [ -e build-stamp ]; then rm -f build-stamp ; fi
@if [ -e configure-stamp ]; then rm -f configure-stamp ; fi @if [ -e configure-stamp ]; then rm -f configure-stamp ; fi
@if [ -d debian/xen-tools ]; then rm -rf ./debian/xen-tools; fi @if [ -d debian/xen-tools ]; then rm -rf ./debian/xen-tools; fi
@@ -76,14 +68,14 @@ clean:
# If the testsuite runs correctly then commit any pending changes. # If the testsuite runs correctly then commit any pending changes.
# #
commit: test commit: test
$(VCS) commit hg commit
# #
# Show what has been changed in the local copy vs. the remote repository. # Show what has been changed in the local copy vs. the remote repository.
# #
diff: diff:
$(VCS) diff 2>/dev/null hg diff 2>/dev/null
# #
@@ -95,7 +87,7 @@ fixup-perms:
chmod 644 etc/xen-tools.conf chmod 644 etc/xen-tools.conf
chmod 644 etc/xm.tmpl chmod 644 etc/xm.tmpl
chmod 644 etc/xm-nfs.tmpl chmod 644 etc/xm-nfs.tmpl
chmod 644 misc/xen-tools misc/README chmod 644 misc/xm misc/xen-tools misc/README
# #
# Install files to /etc/ # Install files to /etc/
@@ -112,6 +104,7 @@ install-etc:
cp partitions/*-* ${prefix}/etc/xen-tools/partitions.d/ cp partitions/*-* ${prefix}/etc/xen-tools/partitions.d/
-mkdir -p ${prefix}/etc/bash_completion.d -mkdir -p ${prefix}/etc/bash_completion.d
cp misc/xen-tools ${prefix}/etc/bash_completion.d/ cp misc/xen-tools ${prefix}/etc/bash_completion.d/
cp misc/xm ${prefix}/etc/bash_completion.d/
# #
@@ -127,7 +120,6 @@ install-bin:
cp bin/xen-delete-image ${prefix}/usr/bin cp bin/xen-delete-image ${prefix}/usr/bin
cp bin/xen-list-images ${prefix}/usr/bin cp bin/xen-list-images ${prefix}/usr/bin
cp bin/xen-update-image ${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-image
chmod 755 ${prefix}/usr/bin/xen-create-nfs chmod 755 ${prefix}/usr/bin/xen-create-nfs
chmod 755 ${prefix}/usr/bin/xt-customize-image chmod 755 ${prefix}/usr/bin/xt-customize-image
@@ -136,7 +128,6 @@ install-bin:
chmod 755 ${prefix}/usr/bin/xen-delete-image chmod 755 ${prefix}/usr/bin/xen-delete-image
chmod 755 ${prefix}/usr/bin/xen-list-images chmod 755 ${prefix}/usr/bin/xen-list-images
chmod 755 ${prefix}/usr/bin/xen-update-image chmod 755 ${prefix}/usr/bin/xen-update-image
chmod 755 ${prefix}/usr/bin/xt-guess-suite-and-mirror
@@ -145,7 +136,6 @@ install-bin:
# #
install-hooks: install-hooks:
for i in roles/* ; do if [ -f $$i ]; then cp $$i ${prefix}/etc/xen-tools/role.d; fi ; done for i in roles/* ; do if [ -f $$i ]; then cp $$i ${prefix}/etc/xen-tools/role.d; fi ; done
for i in ${prefix}/usr/lib/xen-tools/*.d; do if [ -L "$$i" ]; then rm -vf "$$i"; fi; done
mkdir -p ${prefix}/usr/lib/xen-tools/centos-4.d/ mkdir -p ${prefix}/usr/lib/xen-tools/centos-4.d/
mkdir -p ${prefix}/usr/lib/xen-tools/centos-5.d/ mkdir -p ${prefix}/usr/lib/xen-tools/centos-5.d/
mkdir -p ${prefix}/usr/lib/xen-tools/fedora-core-6.d/ mkdir -p ${prefix}/usr/lib/xen-tools/fedora-core-6.d/
@@ -156,41 +146,24 @@ 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-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-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-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/ mkdir -p ${prefix}/usr/lib/xen-tools/debian.d/
cp -R hooks/debian/*-* ${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 sarge.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d etch.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d lenny.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d lenny.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d squeeze.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d etch.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d wheezy.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sid.d -cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d sid.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d testing.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s debian.d stable.d
mkdir -p ${prefix}/usr/lib/xen-tools/gentoo.d/ mkdir -p ${prefix}/usr/lib/xen-tools/gentoo.d/
cp -R hooks/gentoo/*-* ${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/ mkdir -p ${prefix}/usr/lib/xen-tools/dapper.d/
cp -R hooks/dapper/*-* ${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/ mkdir -p ${prefix}/usr/lib/xen-tools/edgy.d/
cp -R hooks/edgy/*-* ${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 mkdir -p ${prefix}/usr/lib/xen-tools/dapper.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s edgy.d gutsy.d cp -R hooks/dapper/*-* ${prefix}/usr/lib/xen-tools/dapper.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s edgy.d hardy.d
mkdir -p ${prefix}/usr/lib/xen-tools/intrepid.d/
cp -R hooks/intrepid/*-* ${prefix}/usr/lib/xen-tools/intrepid.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s intrepid.d jaunty.d
mkdir -p ${prefix}/usr/lib/xen-tools/karmic.d/
cp -R hooks/karmic/*-* ${prefix}/usr/lib/xen-tools/karmic.d/
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d lucid.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d maverick.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d natty.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d oneiric.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d precise.d
-cd ${prefix}/usr/lib/xen-tools/ && ln -s karmic.d quantal.d
cp hooks/common.sh ${prefix}/usr/lib/xen-tools cp hooks/common.sh ${prefix}/usr/lib/xen-tools
@@ -220,8 +193,7 @@ install: fixup-perms install-bin install-etc install-hooks install-libraries ins
# Build our manpages via the `pod2man` command. # Build our manpages via the `pod2man` command.
# #
manpages: manpages:
-mkdir -p man cd bin; for i in *-*; do pod2man --release=${VERSION} --official --section=8 $$i ../man/$$i.8; done
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 for i in man/*.8; do gzip --force -9 $$i; done
@@ -234,25 +206,17 @@ release: tidy fixup-perms update-version update-modules clean changelog
cp -R . $(DIST_PREFIX)/$(BASE)-$(VERSION) cp -R . $(DIST_PREFIX)/$(BASE)-$(VERSION)
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/debian rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/debian
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)/.hg* 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)/ cd $(DIST_PREFIX) && tar -cvf $(DIST_PREFIX)/$(BASE)-$(VERSION).tar $(BASE)-$(VERSION)/
gzip $(DIST_PREFIX)/$(BASE)-$(VERSION).tar gzip $(DIST_PREFIX)/$(BASE)-$(VERSION).tar
mv $(DIST_PREFIX)/$(BASE)-$(VERSION).tar.gz . mv $(DIST_PREFIX)/$(BASE)-$(VERSION).tar.gz .
rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION) rm -rf $(DIST_PREFIX)/$(BASE)-$(VERSION)
gpg --armour --detach-sign $(BASE)-$(VERSION).tar.gz 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. # Run the test suite.
# #
test: update-modules test:
prove --shuffle t/ prove --shuffle t/
@@ -269,9 +233,9 @@ test-verbose:
# #
tidy: tidy:
if [ -x /usr/bin/perltidy ]; then \ if [ -x /usr/bin/perltidy ]; then \
for i in bin/*-*[^~]; do \ for i in bin/*-*; do \
echo "tidying $$i"; \ echo "tidying $$i"; \
perltidy $$i \ perltidy -b -nt -bt=2 -sbt=1 -bl -mbl=3 -sbl -bbs -bbb -anl -lp $$i \
; done \ ; done \
; fi ; fi
@@ -287,12 +251,12 @@ uninstall:
rm -f ${prefix}/usr/bin/xt-install-image rm -f ${prefix}/usr/bin/xt-install-image
rm -f ${prefix}/usr/bin/xt-create-xen-config rm -f ${prefix}/usr/bin/xt-create-xen-config
rm -f ${prefix}/usr/bin/xen-create-nfs 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/xen-tools.conf
rm -f ${prefix}/etc/xen-tools/xm.tmpl rm -f ${prefix}/etc/xen-tools/xm.tmpl
-rm -rf ${prefix}/etc/xen-tools/skel -rm -rf ${prefix}/etc/xen-tools/skel
-rmdir ${prefix}/etc/xen-tools/ -rmdir ${prefix}/etc/xen-tools/
-rm -f ${prefix}/etc/bash_completion.d/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 -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-create-image.8.gz
rm -f ${prefix}/usr/share/man/man8/xen-delete-image.8.gz rm -f ${prefix}/usr/share/man/man8/xen-delete-image.8.gz
@@ -306,7 +270,7 @@ uninstall:
# NOTE: Removes empty local directories. # NOTE: Removes empty local directories.
# #
update: update:
$(VCS) pull --update 2>/dev/null hg pull --update 2>/dev/null
# #
@@ -314,7 +278,7 @@ update:
# cases to ensure that all required modules are available. # cases to ensure that all required modules are available.
# #
update-modules: update-modules:
@cd t && make modules cd t && make modules
# #
@@ -322,4 +286,4 @@ update-modules:
# at the top of this file. Steve-Specific? # at the top of this file. Steve-Specific?
# #
update-version: update-version:
perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9][^']*';/RELEASE = '${VERSION}';/g" bin/*-*[!~] perl -pi.bak -e "s/RELEASE = '[0-9]\.[0-9]';/RELEASE = '${VERSION}';/g" bin/*-*

111
README
View File

@@ -1,61 +1,30 @@
xen-tools
---------
Homepage: Homepage:
http://www.xen-tools.org/software/xen-tools http://www.xen-tools.org/software/xen-tools
Git Repository: Mercurial Repository:
http://gitorious.org/xen-tools http://xen-tools.repository.steve.org.uk/
Mailing Lists: Mailing Lists:
http://www.xen-tools.org/software/xen-tools/lists.html http://xen-tools.org/software/xen-tools/lists.html
About:
Xen-tools contains a collection of Perl scripts for working with Xen
guest images under Linux. xen-tools
---------
The xen-tools package contains a collection of Perl scripts for
working with Xen guest images under Debian GNU/Linux.
Using this software, you can easily create new Xen guests configured Using this software, you can easily create new Xen guests configured
to be accessible over the network via OpenSSH. to be accessible over your local network and complete with an installed
copy of OpenSSH.
xen-tools currently has scripts to install most releases of Debian This software is primarily aimed at users who wish to create virtual
(starting with 3.1 "Sarge") and Ubuntu (starting with 6.06 LTS instances of Debian Sarge, Etch, or Sid. Although other distributions
"Dapper") and some RPM-based distributions. such as Ubuntu Dapper, Edgy, and Feisty are supported if you have the
appropriate packages installed.
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
* Wheezy 7.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
* Maverick Meerkat 10.10
* Natty Narwhal 11.04
* Oneiric Ocelot 11.10
* Precise Pangolin 12.04
* Quantal Quetzal 12.10 (preliminary support as it's not yet available)
[1] There is an issue with debootstrap on hardy not installing ksyslogd
This can be fixed by chrooting into the newly installed system
and removing the startup scripts. See:
http://www.linux-vserver.org/Installing_Ubuntu_8.04_Hardy_as_guest
Xen-Tools are available prepackaged in Debian and as source tar-ball
for local installation. Installing from source should work flawlessly
on most Linux systems that meet the installation requirements.
Requirements Requirements
------------ ------------
@@ -68,34 +37,34 @@ Requirements
* The Perl module "Config::IniFiles" * The Perl module "Config::IniFiles"
- Both of these modules are available as Debian packages, - Both of these modules are available as Debian packages,
or direct from http://www.cpan.org/ for non-Debian distributions. or direct from http://www.cpan.org/ for non-Debian distributions.
* Make, if you are not installing through a package manager
You can try to install RPM-based distributions such as CentOS, or
Fedora Core, but you will need a correctly installed and configured In order to install RPM-based distributions such as CentOS, or
"rinse" package. This is currently not supported. 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/
If you wish to create new Xen instances which may be controlled by If you wish to create new Xen instances which may be controlled by
users via a login shell you can have a look at the (currently users via a login shell you should also install the xen-shell package
unmaintained) xen-shell package which is available from: which is available from:
http://xen-tools.org/software/xen-shell/ http://xen-tools.org/software/xen-shell/
Installation
------------
As root or with sudo, execute "make install".
See debian/README.source how to build the Debian package from a
checked out copy of the git repository (i.e. without a source tar
ball).
The Scripts The Scripts
----------- -----------
Here is a brief description of each included script, for more There now follows a brief description of each included script,
thorough documentation please consult the appropriate man page. for more thorough documentation please consult the appropriate
manpage.
xen-create-image xen-create-image
@@ -104,6 +73,10 @@ xen-create-image
This script is designed to create new images which may be used This script is designed to create new images which may be used
with the Xen hypervisor. with the Xen hypervisor.
The virtual images will have their networking settings created and,
you may optionally cause the new instance to boot once it has
been created.
This script performs the initial setup, then delegates the real This script performs the initial setup, then delegates the real
work to a collection of helper scripts: work to a collection of helper scripts:
@@ -118,11 +91,6 @@ xen-create-image
Create a configuration file in /etc/xen such that Xen can Create a configuration file in /etc/xen such that Xen can
boot the newly created machine. boot the newly created machine.
* xt-guess-suite-and-mirror
In case of a Debian or Ubuntu Dom0, this script tries to guess
the most suitable suite and mirror for DomUs based on the Dom0's
/etc/apt/sources.list.
xen-create-nfs xen-create-nfs
-------------- --------------
@@ -164,5 +132,6 @@ xen-update-image
a Debian-derived distribution. a Debian-derived distribution.
-- Steve
The Xen-Tools Developer Team --

168
TODO
View File

@@ -1,164 +1,16 @@
TODO TODO
==== ----
See KNOWN_BUGS for real bugs. 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 for 5.0 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.
- Set Fail in more situations where the script has clearly failed
i.e.: lvm exists
* Test and support more file system types. Steve
--
Actually this should be pretty simple now that the parameters are
stored in the configuration hash.
* Setup locales in the hooks?
Currently no locales are set and this causes several domU errors
which appear in the domU's logs.
* Documentation overhaul
Better explain what roles /should be/ used for, and that roles
are examples, and shouldn't cover every single scenario. They
are also easy to write.
* Think again about disk_device checks :
Newer Xen provides "xvda", older provided "sda". The current check for
valid values of disk_device (used for root device in domU /etc/fstab)
does only allow those values.
This forbids any deployment of LVM/RAID _inside_ domU, which cannot
be created by xen-tools anyway. So the current check is fine with the
current possibilities of xen-tools, but could become a limitation.
- Is it possible/wanted to "query" xend for default device names ?
- Is it possible to create /dev/mapper devices with xend conf ?
- Can we just avoid to ask for this value and not specify the device
in /etc/fstab (and use /dev/root, /dev/by-uuid, or anything ?)
* xen-create-image --dist=... / sources.list generation should be more fine-grained
xen-tools should offer the possibility to enable/disable
security/volatile/backports as well as
contrib/non-free/universe/restricted/multiverse for each of them
not only based on defaults plus the Dom0's sources.list
One idea is to allow parameters like
--dist="lenny:main,contrib,non-free;security;volatile:main"
and maybe (if the default will be to include security) to also
allow
--dist="lenny;no-security"
The second idea (by Mathieu Parent) is to have an
/etc/xen-tools/sources.list.d/ which then contains files like
lenny.list, lenny-server.list, karmic.list, etc. which defaults to
$dist.list, but can be also select with --sources-list=lenny-server
(which looks for ./lenny-server.list, ./lenny-server,
/etc/xen-tools/sources.list.d/lenny-server.list and
/etc/xen-tools/sources.list.d/lenny-server in that order).
Third variant is to use /etc/xen-tools/sources.lists/ instead of
/etc/xen-tools/sources.list.d/ because that directory is no
runparts-like directory.
* LVM snapshot support as an install source.
* Clean up mounts on Ctrl-C, causes error while installing otherwise:
Removing /dev/vg0/acromantula-domu1-disk - since we're forcing the
install Can't remove open logical volume "acromantula-domu1-disk"
this should be a matter of unmounting the mounted volume from /tmp.
* Generic grub support
This will generate a much nicer menu.lst as a side effect, as its
currently generated once at install, and is never updated. Installing
a full grub into the domU should update the menu.lst every time a
new kernel is installed and will also use the domU distro's menu.lst
conform.
* pv-grub support
This is a ways away and will probably start with a xen-pv-grub
package.
* Move the hooks directory to /etc/xen-tools/ to officially allow
added and modified hooks.
* Clean up the hooks directory
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 roles
Deploy a web server or setup ssmtp directly via flag when setting up
the machine. Open to suggestions, should just be some general use-cases
that are fairly common.
* Sections for the xen-tools.conf file
Currently it's really annoying when you are trying to create VMs
on multiple subnets. It would be nice to specify with a flag what
"type" of configuration you want, and a set of options specific to
that flag could be parsed from xen-tools.conf
* Refactor the code for less code duplication
Like e.g. readConfigurationFile in xen-create-image and
xen-resize-image which are not completely identical.
* Refactor the code for less variants of calling cp, rm, mv, etc.
E.g. always use either cp() from File::Copy or /bin/cp, but not
both. To allow verbose copying, I (Axel) would prefer /bin/cp over
cp();
* Parse numerical parameters transparently for the user
The user shouldn't have to know weather he should specify size
as <size>G or <size>Gb or <size>. This should be parsed without
user interaction and rely on a common format.
* xen-update-image should mount /dev/pts before running apt-get
* xen-update-image should have options for using ...
... aptitude instead of apt-get
... dist-upgrade instead of upgrade
* Use Perl::Critic
Stuff from Steve's TODO list / Generic TODOs
--------------------------------------------
* 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

@@ -19,9 +19,8 @@ xen-create-nfs - Create a Xen configuration file for an NFS-root guest.
--dhcp Configure the guest to use DHCP for IP allocation. --dhcp Configure the guest to use DHCP for IP allocation.
--gateway The gateway address to use when configured with a static IP. --gateway The gateway address to use when configured with a static IP.
--hostname The hostname to configure for the guest. --hostname The hostname to configure for the guest.
--ip The IP address to use when configured with a static IP.
--netmask The netmask to use when configured with a static IP. --netmask The netmask to use when configured with a static IP.
--nameserver The nameserver to use when configured with a static IP. --ip The IP address to use when configured with a static IP.
General options: General options:
--admins Specify which users should be setup as xen-shell admins. --admins Specify which users should be setup as xen-shell admins.
@@ -84,18 +83,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -125,17 +124,17 @@ my %CONFIG;
# #
# Default options # Default options
# #
$CONFIG{ 'template' } = '/etc/xen-tools/xm-nfs.tmpl'; $CONFIG{'template'} = '/etc/xen-tools/xm-nfs.tmpl';
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
# store version number away. # store version number away.
$CONFIG{ 'xen_tools_version' } = $RELEASE; $CONFIG{'xen_tools_version'} = $RELEASE;
# #
@@ -162,13 +161,13 @@ testArguments();
if ( -e "/etc/xen/$CONFIG{'hostname'}.cfg" ) if ( -e "/etc/xen/$CONFIG{'hostname'}.cfg" )
{ {
die "Configuration file for $CONFIG{'hostname'} already exists" 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 we've been given any administrators then set them up.
# #
if ( $CONFIG{ 'admins' } ) if ( $CONFIG{'admins'} )
{ {
setupAdminUsers(); setupAdminUsers();
} }
@@ -259,7 +258,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
@@ -289,31 +288,30 @@ sub parseCommandLineArguments
GetOptions( GetOptions(
# Networking options # Networking options
"dhcp", \$CONFIG{ 'dhcp' }, "dhcp", \$CONFIG{'dhcp'},
"gateway=s", \$CONFIG{ 'gateway' }, "gateway=s", \$CONFIG{'gateway'},
"broadcast=s", \$CONFIG{ 'broadcast' }, "broadcast=s", \$CONFIG{'broadcast'},
"ip=s", \$CONFIG{ 'ip' }, "ip=s", \$CONFIG{'ip'},
"netmask=s", \$CONFIG{ 'netmask' }, "netmask=s", \$CONFIG{'netmask'},
"nameserver=s", \$CONFIG{ 'nameserver' }, "hostname=s", \$CONFIG{'hostname'},
"hostname=s", \$CONFIG{ 'hostname' }, "memory=s", \$CONFIG{'memory'},
"memory=s", \$CONFIG{ 'memory' }, "mac=s", \$CONFIG{'mac'},
"mac=s", \$CONFIG{ 'mac' },
# NFS options. # NFS options.
"nfs_server=s", \$CONFIG{ 'nfs_server' }, "nfs_server=s", \$CONFIG{'nfs_server'},
"nfs_root=s", \$CONFIG{ 'nfs_root' }, "nfs_root=s", \$CONFIG{'nfs_root'},
# Misc. options # Misc. options
"admins=s", \$CONFIG{ 'admins' }, "admins=s", \$CONFIG{'admins'},
"kernel=s", \$CONFIG{ 'kernel' }, "kernel=s", \$CONFIG{'kernel'},
"initrd=s", \$CONFIG{ 'initrd' }, "initrd=s", \$CONFIG{'initrd'},
"force", \$CONFIG{ 'force' }, "force", \$CONFIG{'force'},
"template=s", \$CONFIG{ 'template' }, "template=s", \$CONFIG{'template'},
# Help options # Help options
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"verbose", \$CONFIG{ 'verbose' }, "verbose", \$CONFIG{'verbose'},
"version", \$VERSION "version", \$VERSION
); );
@@ -351,59 +349,35 @@ sub testArguments
# #
# Hostname is mandatory # Hostname is mandatory
# #
die "No hostname" unless ( $CONFIG{ 'hostname' } ); die "No hostname" unless ( $CONFIG{'hostname'} );
my @network = qw/ ip gateway netmask /; my @network = qw/ ip gateway netmask /;
# #
# If DHCP then all the other options aren't needed # 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 } ); delete( $CONFIG{$f} );
} }
} }
else 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 # We need an NFS server + root
# #
die "Missing NFS server." unless ( $CONFIG{ 'nfs_server' } ); die "Missing NFS server." unless ( $CONFIG{'nfs_server'} );
die "Missing NFS root." unless ( $CONFIG{ 'nfs_root' } ); die "Missing NFS root." unless ( $CONFIG{'nfs_root'} );
# Shorthack to fix http://bugs.debian.org/648814 -- xen-create-nfs
# should better use xt-create-xen-config instead. Guess from where
# this code is borrowed for now...
if ( exists($CONFIG{ 'memory' }) and
defined($CONFIG{ 'memory' }) ) {
#
# The memory size: Convert Gb -> Mb.
#
if ( $CONFIG{ 'memory' } =~ /^(\d+)Gb.*$/i )
{
$CONFIG{ 'memory' } = $1 * 1024;
}
#
# Remove any trailing Mb.
#
if ( $CONFIG{ 'memory' } =~ /^(\d+)Mb.*$/i )
{
$CONFIG{ 'memory' } = $1;
}
}
# All OK. # All OK.
} }
@@ -446,7 +420,7 @@ sub setupAdminUsers
# For each user make sure they exist, and setup the # For each user make sure they exist, and setup the
# login shell for them. # login shell for them.
# #
foreach my $user ( split( /,/, $ENV{ 'admins' } ) ) foreach my $user ( split( /,/, $ENV{'admins'} ) )
{ {
# Strip leading and trailing whitespace. # Strip leading and trailing whitespace.
@@ -461,22 +435,22 @@ sub setupAdminUsers
{ {
# Change shell. # 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 ); system( "chsh", "-s", $shell, $user );
} }
else else
{ {
# Add a new user. # 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 ); system( "useradd", "-s", $shell, $user );
} }
# #
# Add the entry to /etc/sudoers. # Add the entry to /etc/sudoers.
# #
open( SUDOERS, ">>", "/etc/sudoers" ) or open( SUDOERS, ">>", "/etc/sudoers" )
warn "Failed to add user to sudoers file : $user - $!"; or warn "Failed to add user to sudoers file : $user - $!";
print SUDOERS print SUDOERS
"$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n"; "$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n";
close(SUDOERS); close(SUDOERS);
@@ -496,13 +470,13 @@ sub setupAdminUsers
sub createNewConfigurationFile sub createNewConfigurationFile
{ {
die "Template file missing: $CONFIG{'template'}" die "Template file missing: $CONFIG{'template'}"
unless ( -e $CONFIG{ 'template' } ); unless ( -e $CONFIG{'template'} );
# #
# Load the template. # Load the template.
# #
my $template = new Text::Template( TYPE => 'FILE', 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 );

View File

@@ -16,8 +16,8 @@ xen-delete-image - Delete previously created Xen instances.
General options: General options:
--dir Specify the output directory where images were previously saved. --dir Specify the output directory where images were previously saved.
--evms Specify the EVMS container to use.
--lvm Specify the LVM volume to use. --lvm Specify the LVM volume to use.
--evms Specify the EVMS container to use.
Specifying hosts: Specifying hosts:
--hostname Specify the image name to delete. --hostname Specify the image name to delete.
@@ -51,7 +51,7 @@ Specify the LVM volume group where images were previously saved.
Read the manual for this script. Read the manual for this script.
=item B<--test> =item B<--test>
Do not complain, or exit, if the script is not executed by the root user. Don not complain, or exit, if the script is not executed by the root user.
=item B<--version> =item B<--version>
Show the version number and exit. Show the version number and exit.
@@ -130,19 +130,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Stéphane Jourdois http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -157,7 +156,6 @@ use strict;
use English; use English;
use Getopt::Long; use Getopt::Long;
use Pod::Usage; use Pod::Usage;
use File::Path;
# #
@@ -171,7 +169,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
@@ -200,7 +198,7 @@ checkArguments();
# #
# Abort if non-root user. # Abort if non-root user.
# #
if ( ( !$CONFIG{ 'test' } ) && ( $EFFECTIVE_USER_ID != 0 ) ) if ( ( !$CONFIG{'test'} ) && ( $EFFECTIVE_USER_ID != 0 ) )
{ {
print <<E_O_ROOT; print <<E_O_ROOT;
@@ -233,7 +231,7 @@ while ( my $name = shift )
# #
# Also delete any which were specified using the --hostname flag # Also delete any which were specified using the --hostname flag
# #
my $hosts = $CONFIG{ 'hostname' }; my $hosts = $CONFIG{'hostname'};
foreach my $name (@$hosts) foreach my $name (@$hosts)
{ {
if ( !xenRunning($name) ) if ( !xenRunning($name) )
@@ -320,7 +318,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
@@ -342,21 +340,20 @@ sub parseCommandLineArguments
my $HELP = 0; my $HELP = 0;
my $MANUAL = 0; my $MANUAL = 0;
my $VERSION = 0; my $VERSION = 0;
$CONFIG{ 'dry-run' } = 0;
# Parse options. # Parse options.
# #
GetOptions( "dir=s", \$CONFIG{ 'dir' }, GetOptions(
"dry-run", \$CONFIG{ 'dry-run' }, "dir=s", \$CONFIG{'dir'},
"lvm=s", \$CONFIG{ 'lvm' }, "lvm=s", \$CONFIG{'lvm'},
"evms=s", \$CONFIG{ 'evms' }, "evms=s", \$CONFIG{'evms'},
"hostname=s@", \$CONFIG{ 'hostname' }, "hostname=s@", \$CONFIG{'hostname'},
"test", \$CONFIG{ 'test' }, "test", \$CONFIG{'test'},
"verbose", \$CONFIG{ 'verbose' }, "verbose", \$CONFIG{'verbose'},
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"version", \$VERSION "version", \$VERSION
); );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;
@@ -393,10 +390,10 @@ sub checkArguments
# #
# When testing we only care about loopback images, not disk images. # When testing we only care about loopback images, not disk images.
# #
if ( $CONFIG{ 'test' } ) if ( $CONFIG{'test'} )
{ {
$CONFIG{ 'lvm' } = undef; $CONFIG{'lvm'} = undef;
$CONFIG{ 'evms' } = undef; $CONFIG{'evms'} = undef;
} }
# #
@@ -405,7 +402,7 @@ sub checkArguments
my $count = 0; my $count = 0;
foreach my $type (qw/dir lvm evms/) foreach my $type (qw/dir lvm evms/)
{ {
$count += 1 if defined( $CONFIG{ $type } ); $count += 1 if defined( $CONFIG{$type} );
} }
# #
@@ -414,7 +411,7 @@ sub checkArguments
# #
if ( $count != 1 ) if ( $count != 1 )
{ {
print "Please select one and only one of the installation methods to delete the DomU:\n"; print "Please select one and only one of the installation methods:\n";
print " --dir\n"; print " --dir\n";
print " --evms\n"; print " --evms\n";
print " --lvm\n"; print " --lvm\n";
@@ -438,8 +435,8 @@ sub xenRunning
my $running = 0; my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |" ) or open( CMD, "xm list $hostname 2>/dev/null |" )
die "Failed to run 'xm list $hostname'"; or die "Failed to run 'xm list $hostname'";
while (<CMD>) while (<CMD>)
{ {
my $line = $_; my $line = $_;
@@ -492,12 +489,8 @@ sub deleteXenImage
{ {
if ( -e $file ) if ( -e $file )
{ {
if ($CONFIG{ 'dry-run' }) { print "Deleting: $file\n";
print "Would delete: $file\n"; unlink($file);
} else {
print "Deleting: $file\n";
unlink($file);
}
} }
else else
{ {
@@ -506,24 +499,20 @@ sub deleteXenImage
} }
if ( defined( $CONFIG{ 'dir' } ) ) if ( defined( $CONFIG{'dir'} ) )
{ {
my $prefix = $CONFIG{ 'dir' } . "/domains/"; my $prefix = $CONFIG{'dir'} . "/domains/";
# #
# Now remove the directory. # Now remove the directory.
# #
if ( -d $prefix . $hostname ) if ( -d $prefix . $hostname )
{ {
if ($CONFIG{ 'dry-run' }) { print "Removing: " . $prefix . $hostname . "\n";
print "Would delete: $prefix$hostname\n"; rmdir( $prefix . $hostname );
} else {
print "Removing: " . $prefix . $hostname . "\n";
rmtree( $prefix . $hostname );
}
} }
} }
elsif ( defined( $CONFIG{ 'lvm' } ) ) elsif ( defined( $CONFIG{'lvm'} ) )
{ {
# #
@@ -535,26 +524,18 @@ sub deleteXenImage
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-swap" ) if ( -e "/dev/$CONFIG{'lvm'}/$hostname-swap" )
{ {
if ($CONFIG{ 'dry-run' }) { print "Removing swap volume\n";
print "Would remove LVM swap volume /dev/$CONFIG{'lvm'}/$hostname-swap\n"; runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-swap --force");
} else {
print "Removing swap volume\n";
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-swap --force");
}
} }
if ( -e "/dev/$CONFIG{'lvm'}/$hostname-disk" ) if ( -e "/dev/$CONFIG{'lvm'}/$hostname-disk" )
{ {
if ($CONFIG{ 'dry-run' }) { print "Removing LVM disk volume\n";
print "Would remove LVM disk volume /dev/$CONFIG{'lvm'}/$hostname-disk\n"; runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-disk --force");
} else {
print "Removing LVM disk volume\n";
runCommand("lvremove /dev/$CONFIG{'lvm'}/$hostname-disk --force");
}
} }
} }
elsif ( defined( $CONFIG{ 'evms' } ) ) elsif ( defined( $CONFIG{'evms'} ) )
{ {
# #
@@ -566,26 +547,16 @@ sub deleteXenImage
if ( -e "/dev/evms/$hostname-swap" ) if ( -e "/dev/evms/$hostname-swap" )
{ {
if ($CONFIG{ 'dry-run' }) { print "Removing EVMS swap volume\n";
print "Would remove EVMS swap volume: /dev/evms/$hostname-swap\n"; runCommand("echo Delete : /dev/evms/$hostname-swap | evms");
print "Would remove EVMS swap volume: $CONFIG{'evms'}/$hostname-swap\n"; runCommand("echo Delete : $CONFIG{'evms'}/$hostname-swap | evms");
} 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 ( -e "/dev/evms/$hostname-disk" )
{ {
if ($CONFIG{ 'dry-run' }) { print "Removing EVMS disk volume\n";
print "Would remove EVMS disk volume: /dev/evms/$hostname-swap\n"; runCommand("echo Delete : /dev/evms/$hostname-disk | evms");
print "Would remove EVMS disk volume: $CONFIG{'evms'}/$hostname-swap\n"; runCommand("echo Delete : $CONFIG{'evms'}/$hostname-disk | evms");
} else {
print "Removing EVMS disk volume\n";
runCommand("echo Delete : /dev/evms/$hostname-disk | evms");
runCommand("echo Delete : $CONFIG{'evms'}/$hostname-disk | evms");
}
} }
} }
@@ -618,12 +589,12 @@ sub runCommand
# #
# Header. # Header.
# #
$CONFIG{ 'verbose' } && print "Executing : $cmd\n"; $CONFIG{'verbose'} && print "Executing : $cmd\n";
# #
# Hide output unless running with --debug. # Hide output unless running with --debug.
# #
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
# #
@@ -653,10 +624,10 @@ sub runCommand
# #
# All done. # All done.
# #
$CONFIG{ 'verbose' } && print "Output\n"; $CONFIG{'verbose'} && print "Output\n";
$CONFIG{ 'verbose' } && print "======\n"; $CONFIG{'verbose'} && print "======\n";
$CONFIG{ 'verbose' } && print $output . "\n"; $CONFIG{'verbose'} && print $output . "\n";
$CONFIG{ 'verbose' } && print "Finished : $cmd\n"; $CONFIG{'verbose'} && print "Finished : $cmd\n";
return ($output); return ($output);
} }

View File

@@ -58,17 +58,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -96,12 +97,12 @@ my %CONFIG;
# #
# Default prefix # Default prefix
# #
$CONFIG{ 'prefix' } = "/etc/xen"; $CONFIG{'prefix'} = "/etc/xen";
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
@@ -130,7 +131,7 @@ my @instances = findXenInstances();
my $count = 0; 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; $count += 1;
@@ -213,7 +214,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
close(FILE); close(FILE);
@@ -237,10 +238,8 @@ sub parseCommandLineArguments
# Parse options. # Parse options.
# #
GetOptions( "test=s", \$CONFIG{ 'prefix' }, GetOptions( "test=s", \$CONFIG{'prefix'}, "help", \$HELP, "manual",
"help", \$HELP, \$MANUAL, "version", \$VERSION );
"manual", \$MANUAL,
"version", \$VERSION );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;
@@ -274,7 +273,7 @@ sub findXenInstances
{ {
my @found; my @found;
foreach my $file ( sort( glob( $CONFIG{ 'prefix' } . "/*.cfg" ) ) ) foreach my $file ( sort( glob( $CONFIG{'prefix'} . "/*.cfg" ) ) )
{ {
push @found, $file if ( -e $file ); push @found, $file if ( -e $file );
} }

View File

@@ -76,18 +76,18 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -116,7 +116,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
@@ -143,14 +143,13 @@ testArguments();
# #
my $path = undef; my $path = undef;
if ( $CONFIG{ 'dir' } ) if ( $CONFIG{'dir'} )
{ {
# #
# Make sure we can find the disk # Make sure we can find the disk
# #
$path = $path = $CONFIG{'dir'} . "/domains/" . $CONFIG{'hostname'} . "/disk.img";
$CONFIG{ 'dir' } . "/domains/" . $CONFIG{ 'hostname' } . "/disk.img";
if ( !-e $path ) if ( !-e $path )
{ {
print <<EOF; print <<EOF;
@@ -188,7 +187,7 @@ EOF
# #
# Allow panic # Allow panic
# #
if ( !$CONFIG{ 'force' } ) if ( !$CONFIG{'force'} )
{ {
foreach my $i ( 1 .. 10 ) foreach my $i ( 1 .. 10 )
{ {
@@ -203,13 +202,13 @@ EOF
my $cmd = "dd if=/dev/zero bs=1M count=$CONFIG{'add'}k >> $path"; 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 # Make sure we can find the disk
# #
$path = "/dev/" . $CONFIG{ 'lvm' } . "/" . $CONFIG{ 'hostname' } . "-disk"; $path = "/dev/" . $CONFIG{'lvm'} . "/" . $CONFIG{'hostname'} . "-disk";
if ( !-e $path ) if ( !-e $path )
{ {
print <<EOF; print <<EOF;
@@ -247,7 +246,7 @@ EOF
# #
# Allow panic # Allow panic
# #
if ( !$CONFIG{ 'force' } ) if ( !$CONFIG{'force'} )
{ {
foreach my $i ( 1 .. 10 ) foreach my $i ( 1 .. 10 )
{ {
@@ -301,9 +300,6 @@ sub readConfigurationFile
{ {
my ($file) = (@_); my ($file) = (@_);
# Don't read the file if it doesn't exist.
return if ( !-e $file );
open( FILE, "<", $file ) or die "Cannot read file '$file' - $!"; open( FILE, "<", $file ) or die "Cannot read file '$file' - $!";
my $line = ""; my $line = "";
@@ -359,7 +355,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
@@ -393,16 +389,16 @@ sub parseCommandLineArguments
GetOptions( GetOptions(
# Misc. options # Misc. options
"add=s", \$CONFIG{ 'add' }, "add=s", \$CONFIG{'add'},
"dir=s", \$install{ 'dir' }, "dir=s", \$install{'dir'},
"lvm=s", \$install{ 'lvm' }, "lvm=s", \$install{'lvm'},
"hostname=s", \$CONFIG{ 'hostname' }, "hostname=s", \$CONFIG{'hostname'},
"force", \$CONFIG{ 'force' }, "force", \$CONFIG{'force'},
# Help options # Help options
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"verbose", \$CONFIG{ 'verbose' }, "verbose", \$CONFIG{'verbose'},
"version", \$VERSION "version", \$VERSION
); );
@@ -421,17 +417,17 @@ sub parseCommandLineArguments
# they will allow the configuration values to be overriden by # they will allow the configuration values to be overriden by
# the command line. # the command line.
# #
if ( $install{ 'lvm' } ) if ( $install{'lvm'} )
{ {
$CONFIG{ 'lvm' } = $install{ 'lvm' }; $CONFIG{'lvm'} = $install{'lvm'};
$CONFIG{ 'dir' } = undef; $CONFIG{'dir'} = undef;
delete $CONFIG{ 'dir' }; delete $CONFIG{'dir'};
} }
if ( $install{ 'dir' } ) if ( $install{'dir'} )
{ {
$CONFIG{ 'dir' } = $install{ 'dir' }; $CONFIG{'dir'} = $install{'dir'};
$CONFIG{ 'lvm' } = undef; $CONFIG{'lvm'} = undef;
delete $CONFIG{ 'lvm' }; delete $CONFIG{'lvm'};
} }
} }
@@ -451,7 +447,7 @@ sub testArguments
# #
# Make sure we received a hostname. # Make sure we received a hostname.
# #
if ( !$CONFIG{ 'hostname' } ) if ( !$CONFIG{'hostname'} )
{ {
print <<EOF; print <<EOF;
@@ -466,7 +462,7 @@ EOF
# #
# Make sure we received a size. # Make sure we received a size.
# #
if ( !$CONFIG{ 'add' } ) if ( !$CONFIG{'add'} )
{ {
print <<EOF; print <<EOF;
@@ -482,7 +478,7 @@ EOF
# #
# Make sure the guest isn't running # 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"; print "The guest $CONFIG{'hostname'} appears to be running!\n";
exit 1; exit 1;
@@ -492,10 +488,8 @@ EOF
# We should either have LVM *or* directory - not neither or both. # We should either have LVM *or* directory - not neither or both.
# #
my $options = 0; my $options = 0;
$options += 1 $options += 1 if ( defined( $CONFIG{'lvm'} ) && length( $CONFIG{'lvm'} ) );
if ( defined( $CONFIG{ 'lvm' } ) && length( $CONFIG{ 'lvm' } ) ); $options += 1 if ( defined( $CONFIG{'dir'} ) && length( $CONFIG{'dir'} ) );
$options += 1
if ( defined( $CONFIG{ 'dir' } ) && length( $CONFIG{ 'dir' } ) );
# #
# Report # Report
@@ -514,13 +508,13 @@ EOF
# #
# Convert from Gb -> Mb; # 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;
} }
} }
@@ -540,8 +534,8 @@ sub xenRunning
my $running = 0; my $running = 0;
open( CMD, "xm list $hostname 2>/dev/null |" ) or open( CMD, "xm list $hostname 2>/dev/null |" )
die "Failed to run 'xm list $hostname'"; or die "Failed to run 'xm list $hostname'";
while (<CMD>) while (<CMD>)
{ {
my $line = $_; my $line = $_;

View File

@@ -80,18 +80,19 @@ Show the version number and exit.
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/
Axel Beckert, http://noone.org/abe/ Steve
Stéphane Jourdois --
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -104,7 +105,6 @@ The LICENSE file contains the full text of the license.
use strict; use strict;
use English; use English;
use File::Temp qw/ tempdir /; use File::Temp qw/ tempdir /;
use File::Copy qw/ mv cp /;
use Getopt::Long; use Getopt::Long;
use Pod::Usage; use Pod::Usage;
@@ -120,7 +120,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
# #
@@ -210,11 +210,11 @@ sub updateXenImage
# If we're dealing with loopback images find the main one, # If we're dealing with loopback images find the main one,
# and mount it. # and mount it.
# #
if ( $CONFIG{ 'dir' } ) if ( $CONFIG{'dir'} )
{ {
# The loopback image. # The loopback image.
$img = $CONFIG{ 'dir' } . "/domains/" . $name . "/disk.img"; $img = $CONFIG{'dir'} . "/domains/" . $name . "/disk.img";
if ( !-e $img ) if ( !-e $img )
{ {
@@ -224,11 +224,11 @@ sub updateXenImage
$mount_cmd = "mount -t auto -o loop $img $tmp"; $mount_cmd = "mount -t auto -o loop $img $tmp";
} }
elsif ( $CONFIG{ 'lvm' } ) elsif ( $CONFIG{'lvm'} )
{ {
# The LVM volume # The LVM volume
$img = "/dev/" . $CONFIG{ 'lvm' } . "/$name-disk"; $img = "/dev/" . $CONFIG{'lvm'} . "/$name-disk";
# make sure it exists. # make sure it exists.
if ( !-e $img ) if ( !-e $img )
@@ -239,27 +239,22 @@ sub updateXenImage
$mount_cmd = "mount -t auto $img $tmp"; $mount_cmd = "mount -t auto $img $tmp";
} }
elsif ( $CONFIG{ 'evms' } ) elsif ( $CONFIG{'evms'} )
{ {
# The EVMS volume -- note, unlike LVM, you don't need the # The EVMS volume -- note, unlike LVM, you don't need the $CONFIG{'evms'}
# $CONFIG{'evms'} to see it and mount the # to see it and mount the volume. $CONFIG{'evms'} is only used for manipulating
# volume. $CONFIG{'evms'} is only used for manipulating the # the underlying object. Still, I don't want to mess with the parse code and
# underlying object. Still, I don't want to mess with the # make it confusing - otherwise --evms takes an argument everywhere but here,
# parse code and make it confusing - otherwise --evms takes an # which will confuse users. The better solution is to make it so that --evms can
# argument everywhere but here, which will confuse users. The # take a following container, but doesn't require it. For the moment, it is
# better solution is to make it so that --evms can take a # better to leave it as it is, take a container, and then ignore it.
# 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 # The best way to do it is to just read it out of the configuration file,
# configuration file, tell the user what you got and where you # tell the user what you got and where you got it from, and not bother the user
# got it from, and not bother the user with picking --dir or # with picking --dir or --lvm or --evms at all, but infer it from the config
# --lvm or --evms at all, but infer it from the config file's # file's disk = parameter. xen-delete-image might work the same way, but
# disk = parameter. xen-delete-image might work the same way, # it could be *slightly* more dangerous in the context of deleting.
# but it could be *slightly* more dangerous in the context of
# deleting.
$img = "/dev/evms/$name-disk"; $img = "/dev/evms/$name-disk";
# make sure it exists. # make sure it exists.
@@ -284,14 +279,9 @@ sub updateXenImage
# #
# Make sure this is a Debian image. # Make sure this is a Debian image.
# #
if ( ( -e $tmp . "/usr/bin/apt-get" ) && if ( ( -e $tmp . "/usr/bin/apt-get" )
( -x $tmp . "/usr/bin/apt-get" ) ) && ( -x $tmp . "/usr/bin/apt-get" ) )
{ {
#
# Copy dom0's resolv.conf to domU
#
mv("$tmp/etc/resolv.conf", "$tmp/etc/resolv.conf.old") if -f "$tmp/etc/resolv.conf";
cp("/etc/resolv.conf", "$tmp/etc/resolv.conf");
# #
# Now run the update command. # Now run the update command.
@@ -303,17 +293,8 @@ sub updateXenImage
# Now upgrade # Now upgrade
# #
system( system(
"DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes" "DEBIAN_FRONTEND=noninteractive chroot $tmp /usr/bin/apt-get upgrade --yes --force-yes"
); );
#
# Restore domU's resolv.conf if needed
#
if (-f "$tmp/etc/resolv.conf") {
mv("$tmp/etc/resolv.conf.old", "$tmp/etc/resolv.conf");
} else {
unlink "$tmp/etc/resolv.conf";
}
} }
else else
{ {
@@ -345,8 +326,8 @@ sub xenRunning
my $running = 0; my $running = 0;
open( CMD, "xm list 2>/dev/null |" ) or open( CMD, "xm list 2>/dev/null |" )
die "Failed to run 'xm list $hostname'"; or die "Failed to run 'xm list $hostname'";
while (<CMD>) while (<CMD>)
{ {
my $line = $_; my $line = $_;
@@ -426,7 +407,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
@@ -451,12 +432,11 @@ sub parseCommandLineArguments
# Parse options. # Parse options.
# #
GetOptions( "dir=s", \$CONFIG{ 'dir' }, GetOptions(
"lvm=s", \$CONFIG{ 'lvm' }, "dir=s", \$CONFIG{'dir'}, "lvm=s", \$CONFIG{'lvm'},
"evms=s", \$CONFIG{ 'evms' }, "evms=s", \$CONFIG{'evms'}, "help", \$HELP,
"help", \$HELP, "manual", \$MANUAL, "version", \$VERSION
"manual", \$MANUAL, );
"version", \$VERSION );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;
@@ -495,7 +475,7 @@ sub checkArguments
my $count = 0; my $count = 0;
foreach my $type (qw/dir lvm evms/) foreach my $type (qw/dir lvm evms/)
{ {
$count += 1 if defined( $CONFIG{ $type } ); $count += 1 if defined( $CONFIG{$type} );
} }
# #

View File

@@ -104,18 +104,19 @@ xt-create-config - Create a Xen configuration file for a new guest
=cut =cut
=head1 AUTHORS
Steve Kemp, http://www.steve.org.uk/ =head1 AUTHOR
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois Steve
--
http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -149,14 +150,13 @@ my @PARTITIONS = undef;
# #
# Default options # Default options
# #
$CONFIG{ 'template' } = '/etc/xen-tools/xm.tmpl'; $CONFIG{'template'} = '/etc/xen-tools/xm.tmpl';
$CONFIG{ 'extension' } = '.cfg';
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
@@ -175,7 +175,7 @@ checkArguments();
# #
# If we've been given any administrators then set them up. # If we've been given any administrators then set them up.
# #
if ( $ENV{ 'admins' } ) if ( $ENV{'admins'} )
{ {
setupAdminUsers(); setupAdminUsers();
} }
@@ -213,15 +213,16 @@ sub parseCommandLineArguments
# #
# Parse options. # Parse options.
# #
GetOptions( "admins=s", \$ENV{ 'admins' }, GetOptions(
"output=s", \$CONFIG{ 'output' }, "admins=s", \$ENV{'admins'},
"extension=s", \$CONFIG{ 'extension' }, "output=s", \$CONFIG{'output'},
"template=s", \$CONFIG{ 'template' }, "extension=s", \$CONFIG{'extension'},
"verbose", \$CONFIG{ 'verbose' }, "template=s", \$CONFIG{'template'},
"verbose", \$CONFIG{'verbose'},
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"version", \$VERSION "version", \$VERSION
); );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;
@@ -256,7 +257,7 @@ sub checkArguments
# #
# We require an output location. # We require an output location.
# #
if ( !defined( $CONFIG{ 'output' } ) ) if ( !defined( $CONFIG{'output'} ) )
{ {
print "The '--output' argument is mandatory\n"; print "The '--output' argument is mandatory\n";
exit 1; exit 1;
@@ -265,10 +266,10 @@ sub checkArguments
# #
# The output location should be a directory which exists. # The output location should be a directory which exists.
# #
if ( !-d $CONFIG{ 'output' } ) if ( !-d $CONFIG{'output'} )
{ {
print print
"The output directory we've been given, $CONFIG{'output'}, doesnt exist\n"; "The output directory we've been given, $CONFIG{'output'}, doesnt exist\n";
print "Aborting\n"; print "Aborting\n";
exit 1; exit 1;
} }
@@ -276,12 +277,12 @@ sub checkArguments
# #
# Make sure that any specified template file exists. # 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 print
"The specified template file, $CONFIG{'template'} does not exist.\n"; "The specified template file, $CONFIG{'template'} does not exist.\n";
exit 1; exit 1;
} }
} }
@@ -305,18 +306,21 @@ sub importPartitionsFromEnvironment
{ {
@PARTITIONS = (); @PARTITIONS = ();
return unless exists $ENV{ 'NUMPARTITIONS' }; for ( my $i = 1 ; $i <= $ENV{'NUMPARTITIONS'} ; $i++ )
for ( my $i = 1 ; $i <= $ENV{ 'NUMPARTITIONS' } ; $i++ )
{ {
my @parts = split( /:/, $ENV{ 'PARTITION' . $i }, 7 ); my @parts = split( /:/, $ENV{'PARTITION' . $i}, 7 );
push( @PARTITIONS, push(
{ 'name' => $parts[0], @PARTITIONS,
'size' => $parts[1], {
'type' => $parts[2], 'name' => $parts[0],
'mountpoint' => $parts[3], 'size' => $parts[1],
'options' => $parts[4], 'type' => $parts[2],
'imagetype' => $parts[5], 'mountpoint' => $parts[3],
'image' => $parts[6] } ); 'options' => $parts[4],
'imagetype' => $parts[5],
'image' => $parts[6]
}
);
} }
} }
@@ -334,34 +338,30 @@ sub importPartitionsFromEnvironment
sub createXenConfig sub createXenConfig
{ {
# #
# The output file we're going to process. # The output file we're going to process.
# #
my $file = my $file = $CONFIG{'output'} . '/' . $ENV{'hostname'} . $ENV{'extension'};
$CONFIG{ 'output' } . '/' . $ENV{ 'hostname' } . $CONFIG{ 'extension' };
# #
# The template we're going to read from. # The template we're going to read from.
# #
my $template = new Text::Template( TYPE => 'FILE', my $template = new Text::Template( TYPE => 'FILE',
SOURCE => $CONFIG{ 'template' } ); SOURCE => $CONFIG{'template'} );
# #
# The device we're using. # The device we're using.
# #
my $device = 'xvda'; my $device = 'sda';
if ( defined( $ENV{ 'ide' } ) ) if ( defined( $ENV{'ide'} ) )
{ {
$device = 'hda'; $device = 'hda';
} }
elsif ( defined( $ENV{ 'scsi' } ) ) elsif ( defined( $ENV{'disk_device'} ) )
{ {
$device = 'sda'; $device = $ENV{'disk_device'};
}
elsif ( defined( $ENV{ 'disk_device' } ) )
{
$device = $ENV{ 'disk_device' };
# strip /dev/, if present. # strip /dev/, if present.
if ( $device =~ /^(.*)\/(.*)$/ ) if ( $device =~ /^(.*)\/(.*)$/ )
@@ -369,65 +369,65 @@ sub createXenConfig
$device = $2; $device = $2;
} }
} }
$ENV{ 'device' } = $device; $ENV{'device'} = $device;
# #
# The memory size: Convert Gb -> Mb. # 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. # 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. # 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_prefix'} = "phy:$ENV{'lvm'}/$ENV{'hostname'}-";
$ENV{ 'image_suffix' } = ''; $ENV{'image_suffix'} = '';
importPartitionsFromEnvironment(); importPartitionsFromEnvironment();
} }
elsif ( $ENV{ 'evms' } ) elsif ( $ENV{'evms'} )
{ {
$ENV{ 'image_prefix' } = "phy:/dev/evms/$ENV{'hostname'}-"; $ENV{'image_prefix'} = "phy:/dev/evms/$ENV{'hostname'}-";
$ENV{ 'image_suffix' } = ''; $ENV{'image_suffix'} = '';
importPartitionsFromEnvironment(); 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 else
{ {
$ENV{ 'swap_vbd' } = undef; $ENV{'swap_vbd'} = undef;
} }
} }
else else
{ {
$ENV{ 'image_prefix' } = "file:$ENV{'dir'}/domains/$ENV{'hostname'}/"; $ENV{'image_prefix'} = "file:$ENV{'dir'}/domains/$ENV{'hostname'}/";
$ENV{ 'image_suffix' } = '.img'; $ENV{'image_suffix'} = '.img';
importPartitionsFromEnvironment(); importPartitionsFromEnvironment();
} }
# #
# The xen-tools version. # The xen-tools version.
# #
$ENV{ 'xen_tools_version' } = $RELEASE; $ENV{'xen_tools_version'} = $RELEASE;
# #
@@ -438,9 +438,9 @@ sub createXenConfig
my %vars; 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. # Now output the data.
@@ -510,7 +510,7 @@ sub setupAdminUsers
# For each user make sure they exist, and setup the # For each user make sure they exist, and setup the
# login shell for them. # login shell for them.
# #
foreach my $user ( split( /,/, $ENV{ 'admins' } ) ) foreach my $user ( split( /,/, $ENV{'admins'} ) )
{ {
# Strip leading and trailing whitespace. # Strip leading and trailing whitespace.
@@ -525,22 +525,22 @@ sub setupAdminUsers
{ {
# Change shell. # 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 ); system( "chsh", "-s", $shell, $user );
} }
else else
{ {
# Add a new user. # 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 ); system( "useradd", "-s", $shell, $user );
} }
# #
# Add the entry to /etc/sudoers. # Add the entry to /etc/sudoers.
# #
open( SUDOERS, ">>", "/etc/sudoers" ) or open( SUDOERS, ">>", "/etc/sudoers" )
warn "Failed to add user to sudoers file : $user - $!"; or warn "Failed to add user to sudoers file : $user - $!";
print SUDOERS print SUDOERS
"$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n"; "$user ALL = NOPASSWD: /usr/sbin/xm, /usr/bin/xen-create-image\n";
close(SUDOERS); close(SUDOERS);

View File

@@ -60,19 +60,18 @@ xt-customize-image - Customize a freshly installed copy of GNU/Linux
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Stéphane Jourdois http://www.steve.org.uk/
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -98,7 +97,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
@@ -145,13 +144,14 @@ sub parseCommandLineArguments
# #
# Parse options. # Parse options.
# #
GetOptions( "location=s", \$CONFIG{ 'location' }, GetOptions(
"dist=s", \$CONFIG{ 'dist' }, "location=s", \$CONFIG{'location'},
"verbose", \$CONFIG{ 'verbose' }, "dist=s", \$CONFIG{'dist'},
"verbose", \$CONFIG{'verbose'},
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"version", \$VERSION "version", \$VERSION
); );
pod2usage(1) if $HELP; pod2usage(1) if $HELP;
pod2usage( -verbose => 2 ) if $MANUAL; pod2usage( -verbose => 2 ) if $MANUAL;
@@ -186,7 +186,7 @@ sub checkArguments
# #
# We require a location. # We require a location.
# #
if ( !defined( $CONFIG{ 'location' } ) ) if ( !defined( $CONFIG{'location'} ) )
{ {
print "The '--location' argument is mandatory\n"; print "The '--location' argument is mandatory\n";
exit 1; exit 1;
@@ -196,7 +196,7 @@ sub checkArguments
# #
# Test that the location we've been given exists # 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 "The installation directory we've been given doesn't exist\n";
print "We tried to use : $CONFIG{'location'}\n"; print "We tried to use : $CONFIG{'location'}\n";
@@ -207,7 +207,7 @@ sub checkArguments
# #
# We require a distribution name. # We require a distribution name.
# #
if ( !defined( $CONFIG{ 'dist' } ) ) if ( !defined( $CONFIG{'dist'} ) )
{ {
print "The '--dist' argument is mandatory\n"; print "The '--dist' argument is mandatory\n";
exit 1; exit 1;
@@ -221,18 +221,18 @@ sub checkArguments
# If there are no scripts then we clearly cannot # If there are no scripts then we clearly cannot
# customise it! # 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; print <<E_OR;
We\'re trying to configure an installation of $CONFIG{'dist'} in We're trying to configure an installation of $CONFIG{'dist'} in
$CONFIG{'location'} - but there is no hook directory for us to use. $CONFIG{'location'} - but there is no hook directory for us to use.
This means we don\'t know how to configure this installation. This means we don't know how to configure this installation.
We\'d expect the hook directory to be : $dir We'd expect the hook directory to be : $dir
Aborting. Aborting.
E_OR E_OR
@@ -263,12 +263,12 @@ sub runDistributionHooks
# #
# Hook directory. # Hook directory.
# #
my $hooks = "/usr/lib/xen-tools/" . $CONFIG{ 'dist' } . ".d/"; my $hooks = "/usr/lib/xen-tools/" . $CONFIG{'dist'} . ".d/";
# #
# Installation prefix # Installation prefix
# #
my $prefix = $CONFIG{ 'location' }; my $prefix = $CONFIG{'location'};
# #
# If we're running verbosely then setup the client environment # If we're running verbosely then setup the client environment
@@ -277,9 +277,9 @@ sub runDistributionHooks
# This is useful in case this script is called outwith the usual # This is useful in case this script is called outwith the usual
# xen-create-image framework. # xen-create-image framework.
# #
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
$ENV{ 'verbose' } = 1; $ENV{'verbose'} = 1;
} }
# #
@@ -317,26 +317,18 @@ sub runDistributionHooks
# Run the command. This has different prolog and epilog # Run the command. This has different prolog and epilog
# depending on whether we're running verbosely or not. # depending on whether we're running verbosely or not.
# #
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
print "Running hook $name ['$cmd']\n"; print "Running hook $name ['$cmd']\n";
print "--\n"; print "--\n";
my $rc = system($cmd); system($cmd );
if ($rc != 0) {
print "hook $name failed: $?\n";
exit 1;
}
print "--\n"; print "--\n";
print "Done\n\n"; print "Done\n\n";
} }
else else
{ {
print "Running hook $name\n"; print "Running hook $name\n";
my $rc = system($cmd); system($cmd );
if ($rc != 0) {
print "hook $name failed: $?\n";
exit 1;
}
print "hook $name: done.\n"; print "hook $name: done.\n";
} }
} }

View File

@@ -1,192 +0,0 @@
#!/usr/bin/perl -w
=head1 NAME
xt-guess-suite-and-mirror - Tries to guess the most suitable suite and
mirror for DomUs on Debian and Ubuntu Dom0s.
=cut
=head1 SYNOPSIS
--suite Show suite
--mirror Show mirror
Shows both if no parameter is given.
Help Options:
--help Show the help information for this script.
--manual Show the manual for this script.
--version Show the version number and exit.
=cut
=head1 DESCRIPTION
xt-guess-suite-and-mirror tries to find the mirror and suite the Xen
Dom0 is currently using and returns them in a way suitable for
xen-create-image(1) or the backticks feature in xen-tools.conf.
=cut
=head1 AUTHORS
Axel Beckert, http://noone.org/abe/
Stéphane Jourdois
=cut
=head1 LICENSE
Copyright (C) 2010 by The Xen-Tools Development Team. 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 (cdn.debian.net uses
# GeoIP, see http://wiki.debian.org/DebianGeoMirror)
my %fallback_mirror = ( Debian => 'http://cdn.debian.net/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_files = ( '/etc/apt/sources.list',
glob('/etc/apt/sources.list.d/*.list'));
use File::Slurp;
use Getopt::Long;
use Pod::Usage;
use strict;
#
# Release number.
#
my $RELEASE = '4.2.1+dev';
# 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_manual = 0;
my $result = GetOptions( 'mirror|m' => \$want_mirror,
'suite|s' => \$want_suite,
'version' => \$want_version,
'manual' => \$want_manual,
'help' => \$want_help );
if ($want_help) {
pod2usage(0);
}
if ($want_manual) {
pod2usage( -verbose => 2 );
}
all_sources_list_files: foreach my $sources_list_file (@sources_list_files) {
if (-r $sources_list_file) {
# sources.list file 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 all_sources_list_files;
}
}
}
}
die "Couldn't find a useful entry in the sources.list files of the Dom0. Tried:\n ".
join("\n ", @sources_list_files)."\n" unless $found;
my $lsb_release = `which lsb_release`;
chomp($lsb_release);
if (!$found and $lsb_release and -x $lsb_release) {
my $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,11 +29,8 @@ xt-install-image - Install a fresh copy of GNU/Linux into a directory
--mirror The mirror to use when installing with 'debootstrap'. --mirror The mirror to use when installing with 'debootstrap'.
Installation Options: Installation Options:
--install-method Specify the installation method to use. --install-method Specify the installation method to use.
--install-source Specify the installation source 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 All other options from xen-create-image will be passed as environmental
variables. variables.
@@ -80,19 +77,18 @@ Untar a .tar file into the new installation location. This tarfile is assumed t
=cut =cut
=head1 AUTHORS =head1 AUTHOR
Steve Kemp, http://www.steve.org.uk/ Steve
Axel Beckert, http://noone.org/abe/ --
Dmitry Nedospasov, http://nedos.net/ http://www.steve.org.uk/
Stéphane Jourdois
=cut =cut
=head1 LICENSE =head1 LICENSE
Copyright (c) 2005-2009 by Steve Kemp, (c) 2010 by The Xen-Tools Copyright (c) 2005-2007 by Steve Kemp. All rights reserved.
Development Team. All rights reserved.
This module is free software; This module is free software;
you can redistribute it and/or modify it under you can redistribute it and/or modify it under
@@ -117,7 +113,7 @@ my %CONFIG;
# #
# Release number. # Release number.
# #
my $RELEASE = '4.2.1+dev'; my $RELEASE = '3.9';
# #
@@ -132,23 +128,33 @@ my $RELEASE = '4.2.1+dev';
# #
# #
my %dispatch = ( my %dispatch = (
"copy" => { sub => \&do_copy, "copy" => {
needBinary => "/bin/cp", sub => \&do_copy,
needDirectory => 1, needBinary => "/bin/cp",
}, needDirectory => 1,
"debootstrap" => { sub => \&do_debootstrap, },
needBinary => "/usr/sbin/debootstrap", "debootstrap" => {
}, sub => \&do_debootstrap,
"rinse" => { sub => \&do_rinse, needBinary => "/usr/sbin/debootstrap",
needBinary => "/usr/sbin/rinse", },
}, "image-server" => {
"rpmstrap" => { sub => \&do_rpmstrap, sub => \&do_image_server,
needBinary => "/usr/bin/rpmstrap", needURL => 1,
}, },
"tar" => { sub => \&do_tar, "rinse" => {
needBinary => "/bin/tar", sub => \&do_rinse,
needFile => 1, needBinary => "/usr/bin/rinse",
} ); },
"rpmstrap" => {
sub => \&do_rpmstrap,
needBinary => "/usr/bin/rpmstrap",
},
"tar" => {
sub => \&do_tar,
needBinary => "/bin/tar",
needFile => 1,
}
);
@@ -167,9 +173,9 @@ parseCommandLineArguments();
# #
# If we received a configuration file then read it. # 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 not fully-qualified then read from /etc/xen-tools.
if ( $path !~ /^[\/]/ ) if ( $path !~ /^[\/]/ )
@@ -191,14 +197,14 @@ checkArguments();
# #
# Now lookup our installation type and dispatch control to it. # Now lookup our installation type and dispatch control to it.
# #
if ( defined( $CONFIG{ 'install-method' } ) && if ( defined( $CONFIG{'install-method'} )
length( $CONFIG{ 'install-method' } ) ) && length( $CONFIG{'install-method'} ) )
{ {
# #
# Get the entry from the dispatch table. # 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) )
{ {
@@ -208,57 +214,75 @@ if ( defined( $CONFIG{ 'install-method' } ) &&
# #
# Do we need to test for a binary. # Do we need to test for a binary.
if ( ( $installer->{ 'needBinary' } ) && if ( ( $installer->{'needBinary'} )
( !-x $installer->{ 'needBinary' } ) ) && ( !-x $installer->{'needBinary'} ) )
{ {
print print
"The following required binary for the installation was not found\n"; "The following required binary for the installation was not found\n";
print "\t" . $installer->{ 'needBinary' } . "\n"; print "\t" . $installer->{'needBinary'} . "\n";
exit 1; exit 1;
} }
# Do we need a directory specified as the installation source? # Do we need a directory specified as the installation source?
if ( ( $installer->{ 'needDirectory' } ) && if ( ( $installer->{'needDirectory'} )
( !$CONFIG{ 'install-source' } || !-d $CONFIG{ 'install-source' } ) && ( !$CONFIG{'install-source'} || !-d $CONFIG{'install-source'} ) )
)
{ {
print "Please specify the source directory with --install-source\n"; print "Please specify the source directory with --install-source\n";
if ( $CONFIG{ 'install-source' } ) if ( $CONFIG{'install-source'} )
{ {
print print
"The specified directory $CONFIG{'install-source'} does not exist.\n"; "The specified directory $CONFIG{'install-source'} does not exist.\n";
} }
exit 1; exit 1;
} }
# Do we need a file specified as the installation source? # Do we need a file specified as the installation source?
if ( ( $installer->{ 'needFile' } ) && if ( ( $installer->{'needFile'} )
( !$CONFIG{ 'install-source' } || !-e $CONFIG{ 'install-source' } ) && ( !$CONFIG{'install-source'} || !-e $CONFIG{'install-source'} ) )
)
{ {
print "Please specify the source file with --install-source\n"; print "Please specify the source file with --install-source\n";
if ( $CONFIG{ 'install-source' } ) if ( $CONFIG{'install-source'} )
{ {
print print
"The specified file $CONFIG{'install-source'} does not exist.\n"; "The specified file $CONFIG{'install-source'} does not exist.\n";
} }
exit 1; exit 1;
} }
# Do we need an URL specified as the installation source?
if (
( $installer->{'needURL'} )
&& ( !$CONFIG{'install-source'}
|| ( $CONFIG{'install-source'} !~ /^http/i ) )
)
{
print "Please specify the image server URL with --install-source\n";
exit 1;
}
# #
# Now we can call the appropriate handler. # Now we can call the appropriate handler.
# #
$installer->{ 'sub' }->(); $installer->{'sub'}->();
# #
# Did the operation succeed? # Did the operation succeed?
# #
# Test that we have some "standard" files present. # Test that we have some "standard" files present.
# #
foreach my $file (qw( /bin/ls /bin/cp ))
checkForCommonFilesInChroot($CONFIG{ 'location' }, {
"installed system"); if ( !-x $CONFIG{'location'} . $file )
{
print "The installation of the new system has failed.\n";
print "\n";
print "The system is missing the common file: $file\n";
exit 1;
}
}
# #
# All done. # All done.
@@ -351,7 +375,7 @@ sub readConfigurationFile
} }
# Store value. # Store value.
$CONFIG{ $key } = $val; $CONFIG{$key} = $val;
} }
} }
@@ -380,24 +404,22 @@ sub parseCommandLineArguments
GetOptions( GetOptions(
# Mandatory # Mandatory
"location=s", \$CONFIG{ 'location' }, "location=s", \$CONFIG{'location'},
"dist=s", \$CONFIG{ 'dist' }, "dist=s", \$CONFIG{'dist'},
"hostname=s", \$CONFIG{ 'hostname' }, "hostname=s", \$CONFIG{'hostname'},
# Installation method # Installation method
"install-method=s", \$CONFIG{ 'install-method' }, "install-method=s", \$CONFIG{'install-method'},
"install-source=s", \$CONFIG{ 'install-source' }, "install-source=s", \$CONFIG{'install-source'},
"debootstrap-cmd=s", \$CONFIG{ 'debootstrap-cmd' },
# Misc # Misc
"arch=s", \$CONFIG{ 'arch' }, "arch=s", \$CONFIG{'arch'},
"cache=s", \$CONFIG{ 'cache' }, "cache=s", \$CONFIG{'cache'},
"cachedir=s", \$CONFIG{ 'cachedir' }, "config=s", \$CONFIG{'config'},
"config=s", \$CONFIG{ 'config' }, "mirror=s", \$CONFIG{'mirror'},
"mirror=s", \$CONFIG{ 'mirror' },
# Help. # Help.
"verbose", \$CONFIG{ 'verbose' }, "verbose", \$CONFIG{'verbose'},
"help", \$HELP, "help", \$HELP,
"manual", \$MANUAL, "manual", \$MANUAL,
"version", \$VERSION "version", \$VERSION
@@ -436,7 +458,7 @@ sub checkArguments
# #
# We require a location. # We require a location.
# #
if ( !defined( $CONFIG{ 'location' } ) ) if ( !defined( $CONFIG{'location'} ) )
{ {
print "The '--location' argument is mandatory\n"; print "The '--location' argument is mandatory\n";
exit 1; exit 1;
@@ -446,7 +468,7 @@ sub checkArguments
# #
# Test that the location we've been given exists # 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 "The installation directory we've been given doesn't exist\n";
print "We tried to use : $CONFIG{'location'}\n"; print "We tried to use : $CONFIG{'location'}\n";
@@ -457,7 +479,7 @@ sub checkArguments
# #
# We require a distribution name. # We require a distribution name.
# #
if ( !defined( $CONFIG{ 'dist' } ) ) if ( !defined( $CONFIG{'dist'} ) )
{ {
print "The '--dist' argument is mandatory\n"; print "The '--dist' argument is mandatory\n";
exit 1; exit 1;
@@ -471,18 +493,18 @@ sub checkArguments
# If there are no scripts then we clearly cannot # If there are no scripts then we clearly cannot
# customise it! # 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; print <<E_OR;
We are trying to configure an installation of $CONFIG{'dist'} in We're trying to configure an installation of $CONFIG{'dist'} in
$CONFIG{'location'} - but there is no hook directory for us to use. $CONFIG{'location'} - but there is no hook directory for us to use.
This means we would not know how to configure this installation. This means we won't know how to configure this installation.
We would expect the hook directory to be $dir. We'd expect the hook directory to be : $dir
Aborting. Aborting.
E_OR E_OR
@@ -494,12 +516,12 @@ E_OR
# Test that we received a valid installation type. # Test that we received a valid installation type.
# #
my $valid = 0; my $valid = 0;
if ( defined( $CONFIG{ 'install-method' } ) ) if ( defined( $CONFIG{'install-method'} ) )
{ {
foreach my $recognised ( keys %dispatch ) foreach my $recognised ( keys %dispatch )
{ {
$valid = 1 $valid = 1
if ( lc( $CONFIG{ 'install-method' } ) eq lc($recognised) ); if ( lc( $CONFIG{'install-method'} ) eq lc($recognised) );
} }
} }
else else
@@ -527,30 +549,6 @@ EOF
=begin doc
Check if there are some common files in some chroot
=end doc
=cut
sub checkForCommonFilesInChroot {
my ($chroot, $what) = @_;
foreach my $file (qw( /bin/ls /bin/cp ))
{
if ( !-x $chroot.$file )
{
print STDERR <<EOT;
WARNING ($0): The $what at $chroot doesn\'t seem to be a full system.
WARNING ($0): The $what is missing the common file: $file.
EOT
}
}
}
=begin doc =begin doc
A utility method to run a system command. We will capture the return A utility method to run a system command. We will capture the return
@@ -569,7 +567,7 @@ sub runCommand
# #
# Command start. # 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. # Copy stderr to stdout, so we can see it, and make sure we log it.
@@ -585,13 +583,13 @@ sub runCommand
{ {
print "Running command '$cmd' failed.\n"; print "Running command '$cmd' failed.\n";
print "Aborting\n"; print "Aborting\n";
exit 127; exit;
} }
# #
# Command finished. # Command finished.
# #
$CONFIG{ 'verbose' } && print "Finished : $cmd\n"; $CONFIG{'verbose'} && print "Finished : $cmd\n";
return ($output); return ($output);
} }
@@ -658,16 +656,10 @@ sub copyDebFiles
sub do_copy sub do_copy
{ {
#
# Check if the copy source has at least some "standard" files present.
#
checkForCommonFilesInChroot($CONFIG{ 'install-source' },
"installation source");
# #
# Find the copy command to run from the configuration file. # Find the copy command to run from the configuration file.
# #
my $cmd = $CONFIG{ 'copy-cmd' }; my $cmd = $CONFIG{'copy-cmd'};
if ( !defined($cmd) ) if ( !defined($cmd) )
{ {
print "Falling back to default copy command\n"; print "Falling back to default copy command\n";
@@ -703,19 +695,11 @@ sub do_debootstrap
# The command is a little configurable - mostly to allow you # The command is a little configurable - mostly to allow you
# to use cdebootstrap. # to use cdebootstrap.
# #
my $cmd = $CONFIG{ 'debootstrap-cmd' }; my $cmd = $CONFIG{'debootstrap-cmd'};
my $cachedir = $CONFIG{ 'cachedir' }; if ( !defined($cmd) )
if ( !$cmd )
{ {
if (-x '/usr/sbin/debootstrap') { print "Falling back to default debootstrap command\n";
$cmd = '/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";
} }
@@ -723,19 +707,11 @@ sub do_debootstrap
# Cache from host -> new installation if we've got caching # Cache from host -> new installation if we've got caching
# enabled. # enabled.
# #
if ( $CONFIG{ 'cache' } eq "yes" ) if ( $CONFIG{'cache'} eq "yes" )
{ {
print "\nCopying files from host to image.\n"; print "\nCopying files from host to image.\n";
unless( -d $cachedir ) {
my $xtcache = '/var/cache/xen-tools/archives/';
print("$cachedir not found, defaulting to $xtcache\n");
unless ( -d $xtcache ) {
system "mkdir -p $xtcache";
}
$cachedir = $xtcache;
}
runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives"); runCommand("mkdir -p $CONFIG{'location'}/var/cache/apt/archives");
copyDebFiles( "$cachedir", copyDebFiles( "/var/cache/apt/archives",
"$CONFIG{'location'}/var/cache/apt/archives" ); "$CONFIG{'location'}/var/cache/apt/archives" );
print("Done\n"); print("Done\n");
} }
@@ -744,7 +720,7 @@ sub do_debootstrap
# Propogate --verbose appropriately. # Propogate --verbose appropriately.
# #
my $EXTRA = ''; my $EXTRA = '';
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
$EXTRA = ' --verbose'; $EXTRA = ' --verbose';
} }
@@ -752,7 +728,7 @@ sub do_debootstrap
# #
# Propogate the --arch argument # Propogate the --arch argument
# #
if ( $CONFIG{ 'arch' } ) if ( $CONFIG{'arch'} )
{ {
$EXTRA .= " --arch $CONFIG{'arch'}"; $EXTRA .= " --arch $CONFIG{'arch'}";
} }
@@ -774,11 +750,11 @@ sub do_debootstrap
# Cache from the new installation -> the host if we've got caching # Cache from the new installation -> the host if we've got caching
# enabled. # enabled.
# #
if ( $CONFIG{ 'cache' } eq "yes" ) if ( $CONFIG{'cache'} eq "yes" )
{ {
print "\nCopying files from new installation to host.\n"; print "\nCopying files from new installation to host.\n";
copyDebFiles( "$CONFIG{'location'}/var/cache/apt/archives", copyDebFiles( "$CONFIG{'location'}/var/cache/apt/archives",
"$cachedir" ); "/var/cache/apt/archives" );
print("Done\n"); print("Done\n");
} }
@@ -789,7 +765,165 @@ sub do_debootstrap
=begin doc =begin doc
Install a new distribution of GNU/Linux using the rinse tool. 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.
=end doc =end doc
@@ -807,7 +941,7 @@ sub do_rinse
# #
# Propogate the --arch argument # Propogate the --arch argument
# #
if ( $CONFIG{ 'arch' } ) if ( $CONFIG{'arch'} )
{ {
$command .= " --arch $CONFIG{'arch'}"; $command .= " --arch $CONFIG{'arch'}";
} }
@@ -816,7 +950,7 @@ sub do_rinse
# #
# Propogate the verbosity setting. # Propogate the verbosity setting.
# #
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
$command .= " --verbose"; $command .= " --verbose";
} }
@@ -841,7 +975,7 @@ sub do_rpmstrap
# Propogate the verbosity setting. # Propogate the verbosity setting.
# #
my $EXTRA = ''; my $EXTRA = '';
if ( $CONFIG{ 'verbose' } ) if ( $CONFIG{'verbose'} )
{ {
$EXTRA .= " --verbose"; $EXTRA .= " --verbose";
} }
@@ -849,7 +983,7 @@ sub do_rpmstrap
# #
# Propogate any arch setting we might have. # Propogate any arch setting we might have.
# #
if ( $CONFIG{ 'arch' } ) if ( $CONFIG{'arch'} )
{ {
$EXTRA .= " --arch $CONFIG{'arch'}"; $EXTRA .= " --arch $CONFIG{'arch'}";
} }
@@ -858,7 +992,7 @@ sub do_rpmstrap
# Setup mirror if present. # Setup mirror if present.
# #
my $mirror = ""; my $mirror = "";
$mirror = $CONFIG{ 'mirror' } if ( $CONFIG{ 'mirror' } ); $mirror = $CONFIG{'mirror'} if ( $CONFIG{'mirror'} );
# #
# The command we're going to run. # The command we're going to run.
@@ -883,7 +1017,7 @@ sub do_tar
# #
# Find the tar command to run from the configuration file. # Find the tar command to run from the configuration file.
# #
my $cmd = $CONFIG{ 'tar-cmd' }; my $cmd = $CONFIG{'tar-cmd'};
if ( !defined($cmd) ) if ( !defined($cmd) )
{ {
print "Falling back to default tar command\n"; print "Falling back to default tar command\n";

27
debian/NEWS vendored
View File

@@ -1,27 +0,0 @@
xen-tools (4.2~rc1-1) unstable; urgency=low
By default, xen-create-image now generates a random root password and
displays it as plain text at the end of the DomU generation process.
Use --genpass=0 and --passwd=1 to interactively set a root password
without the password being displayed.
-- Axel Beckert <abe@debian.org> Tue, 03 Aug 2010 16:14:42 +0200
xen-tools (4.2~beta1-1) unstable; urgency=low
If the DomU hangs with "Waiting for root file system" despite
/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> Sun, 30 May 2010 22:36:16 +0200

22
debian/README.source vendored
View File

@@ -1,22 +0,0 @@
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
$ make changelog
$ 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, 13 Sep 2010 14:30:05 +0200

172
debian/changelog vendored
View File

@@ -1,175 +1,3 @@
xen-tools (4.2.1+dev-1) UNRELEASED; urgency=low
* New upstream snapshot
- Correctly checks and documents valid values for
disk_device. (Closes: #621499)
- Supports creating Ubuntu 11.10 Oneiric DomUs (LP: #848654)
- Supports creating Ubuntu 12.04 Precise and 12.10 Quantal DomUs
- Updated mirror list for discontinued releases of Debian and Ubuntu
- Workaround for missing unit parsing in xen-create-nfs (Closes:
#648814)
- Fix wildcard vs regexp in memory configuration parsing.
- Fix misbehaviour if --ip option is passed multiple times (Closes:
#652110; Thanks Brian Bennett and Alexander Mette!)
- Supports /etc/apt/sources.list.d/ (Closes: #650300)
- xt-guess-suite-and-mirror exits with non-zero if no proper mirror
could be extracted from /etc/apt/sources.list or
/etc/apt/sources.list.d/*.list (Thanks Phil Frost!)
- Only attempts to generate the ssh host keys if not already present
(Closes: #607236; Thanks Vagrant Cascadian!)
* Add dependency on openssh-client for ssh-keygen (Closes: #649108)
* No more suggest evms-cli -- it's no more available on any supported
Dom0 distribution. Thanks to Markus Waldeck for the hint.
* Bump Standards-Version to 3.9.3 (no changes)
* Fix the following Lintian warnings:
- copyright-refers-to-symlink-license
- debian-rules-missing-recommended-target
-- Axel Beckert <abe@debian.org> Mon, 07 May 2012 21:21:33 +0200
xen-tools (4.2.1-1) unstable; urgency=low
* New upstream release
- Fixes bashism in "editor" roles script. Thanks Raphaël Halimi for
the patch! (Closes: #605203)
- Fixes missing architecture check in Sarge amd64 special case. Thanks
to Guillaume Pernot! (Closes: #611397) Also changes default Sarge
amd64 mirror to http://archive.debian.org/debian-amd64/.
- Allows --ip=auto again (Closes: #611407)
- Unmounts /proc and /dev/pts of the freshly installed DomU just
before unmounting the disk image. (Closes: #588783)
-- Axel Beckert <abe@debian.org> Thu, 17 Mar 2011 01:00:47 +0100
xen-tools (4.2-1) unstable; urgency=low
* New upstream release
- Fixes several cases of broken or incomplete config files with
unexpected or seldom parameter combinations. (Closes: #484652)
- Updates examples in /etc/xen-tools.conf to better reflect current
state
- Allows usage of xvc* as serial console as used as default by older
Xen versions.
- Preliminary support for Ubuntu 11.04 (Natty) and Debian 7.0 (Wheezy)
(Closes: #597521)
- Switches default mirror for EoL'ed Ubuntu 8.10 (Intrepid) and Debian
4.0 (Etch) to the distributions' archives for old releases.
* Does no more try extract the upstream changelog during debian package
build. The commit which introduced this problem has been reverted.
Document more clearly in debian/README.source how to build the package
from a checked out copy of the git repository, especially that the
upstream changelog has to be generated first out of the VCS log.
(Closes: #595883)
* Update debian/copyright: Add Stéphane Jourdois to list of authors.
-- Axel Beckert <abe@debian.org> Tue, 05 Oct 2010 19:01:49 +0200
xen-tools (4.2~rc1-1) unstable; urgency=low
[Axel Beckert]
* New upstream release candidate
- Uses GeoIP for Debian mirrors: Default Debian mirror is now
cdn.debian.net, see http://wiki.debian.org/DebianGeoMirror for
details.
- Uses the same 15-disable-hwclock hook for Debian as for Ubuntu DomUs
(Closes: #588880)
- Mounts not only /proc but also /dev/pts automatically before running
any customisation hooks (Closes: #588783)
- Uses apt-config to parse Dom0's apt.conf. (Closes: #560011)
- Fixes wrong loop module parameter syntax in warning. Thanks to
Daniel Baumann for spotting this. (Closes: #516902)
- With --verbose, the output of commands called by xen-tools
(e.g. debootstrap) is not only logged, but also printed to
STDOUT. (Closes: #513126)
- Adds btrfs support.
* Bump Standards-Version to 3.9.1 (no changes)
[Stéphane Jourdois]
* [debian/control] Suggest btrfs-tools
-- Axel Beckert <abe@debian.org> Sun, 15 Aug 2010 19:34:38 +0200
xen-tools (4.2~beta1-1) unstable; urgency=low
* New maintainer and upstream authors
* Reintroduction into Debian Unstable (Closes: #566714)
* New upstream beta version
- 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)
- Added new files TODO and KNOWN_BUGS to debian/docs.
* 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> Sun, 30 May 2010 22:32:30 +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 xen-tools (3.9-6) unstable; urgency=low
- Allow command line flags to be unset. - Allow command line flags to be unset.

2
debian/compat vendored
View File

@@ -1 +1 @@
7 4

42
debian/control vendored
View File

@@ -1,42 +1,18 @@
Source: xen-tools Source: xen-tools
Section: utils Section: utils
Priority: extra Priority: extra
Maintainer: Axel Beckert <abe@debian.org> Maintainer: Roland Stigge <stigge@antcom.de>
Build-Depends: debhelper (>= 7.0.0), libtest-pod-perl, libtext-template-perl Uploaders: Radu Spineanu <radu@debian.org>, Steve Kemp <skx@debian.org>
Standards-Version: 3.9.3 Build-Depends: debhelper (>= 4.0.0), libtest-pod-perl, libtext-template-perl
Standards-Version: 3.8.0
Homepage: http://xen-tools.org/software/xen-tools Homepage: http://xen-tools.org/software/xen-tools
Vcs-Browser: http://gitorious.org/xen-tools/xen-tools
Vcs-Git: git://gitorious.org/xen-tools/xen-tools.git
Package: xen-tools Package: xen-tools
Architecture: all Architecture: all
Depends: debootstrap | cdebootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl, libfile-slurp-perl, ${misc:Depends}, openssh-client Depends: debootstrap, perl-modules, libtext-template-perl, libconfig-inifiles-perl
Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, rinse, xen-shell, libexpect-perl Recommends: xen-hypervisor-amd64 | xen-hypervisor-i386 | xen-hypervisor-i386-pae, reiserfsprogs, xfsprogs, rinse, xen-shell, libexpect-perl
Suggests: reiserfsprogs, xfsprogs, xen-utils, cfengine2, btrfs-tools Description: Tools to manage Debian XEN virtual servers
Description: Tools to manage Xen virtual servers This package contains tools to manage Debian based XEN virtual servers.
This package contains tools to manage Debian based Xen virtual servers.
. .
Using the scripts you can easily create fully configured Xen guest 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 7.0 Wheezy
* 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
* Ubuntu 11.04 Natty Narwhal
* Ubuntu 11.10 Oneiric Ocelot
* Ubuntu 12.04 Precise Pangolin (LTS)

9
debian/copyright vendored
View File

@@ -3,11 +3,7 @@ Tue, 20 Dec 2005 02:21:05 +0200.
It was downloaded from http://xen-tools.org/software/xen-tools/ It was downloaded from http://xen-tools.org/software/xen-tools/
Copyright 2005-2009: Steve Kemp <steve@steve.org.uk> Copyright Holder: Steve Kemp <steve@steve.org.uk>
Copyright 2010: The Xen-Tools Development Team, currently consisting of:
Axel Beckert <abe@deuxchevaux.org>,
Dmitry Nedospasov <dmitry@nedos.net>, and
Stéphane Jourdois <sjourdois@gmail.com>
License: License:
@@ -23,5 +19,6 @@ Perl is distributed under licenses:
b) the "Artistic License" which comes with Perl. b) the "Artistic License" which comes with Perl.
On Debian GNU/Linux systems, the complete text of the GNU General On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in /usr/share/common-licenses/GPL-1' and Public License can be found in /usr/share/common-licenses/GPL' and
the Artistic Licence in /usr/share/common-licenses/Artistic'. the Artistic Licence in /usr/share/common-licenses/Artistic'.

3
debian/docs vendored
View File

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

2
debian/examples/setup-kernel-initrd vendored Executable file → Normal file
View File

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

0
debian/examples/update-modules vendored Executable file → Normal file
View File

11
debian/preinst vendored Executable file → Normal file
View File

@@ -23,16 +23,5 @@ if [ -d "/usr/lib/xen-tools/ubuntu.d" ]; then
rm -r /usr/lib/xen-tools/ubuntu.d rm -r /usr/lib/xen-tools/ubuntu.d
fi 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# #DEBHELPER#
exit 0 exit 0

7
debian/rules vendored
View File

@@ -9,9 +9,8 @@ configure-stamp:
touch configure-stamp touch configure-stamp
build: build-arch build-indep build: build-stamp
build-arch: build-stamp
build-indep: build-stamp
build-stamp: configure-stamp build-stamp: configure-stamp
dh_testdir dh_testdir
touch build-stamp touch build-stamp
@@ -26,7 +25,7 @@ clean:
install: build install: build
dh_testdir dh_testdir
dh_testroot dh_testroot
dh_prep dh_clean -k
make manpages make manpages
make install prefix=`pwd`/debian/xen-tools make install prefix=`pwd`/debian/xen-tools

View File

@@ -1 +0,0 @@
1.0

View File

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

View File

@@ -6,75 +6,35 @@
# #
# Kernel + memory size # Kernel + memory size
# #
{ if ( ( $kernel ) && ( !defined($pygrub)) ) { if ( $kernel )
{ {
$OUT.= "kernel = '$kernel'"; $OUT.= "kernel = '$kernel'";
} }
} }
{ if ( ( $initrd ) && ( !defined($pygrub)) ) { if ( $initrd )
{ {
$OUT.= "ramdisk = '$initrd'"; $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}' memory = '{$memory}'
# #
# Disk device(s). # Disk device(s).
# #
{ {
if ( !defined($image_vbd ) ) for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
{ {
for ( my $i = $#PARTITIONS; $i >= 0 ; $i-- )
{
if ( $PARTITIONS[$i]{'mountpoint'} eq '/' ) if ( $PARTITIONS[$i]{'mountpoint'} eq '/' )
{ {
$OUT .= "root = '/dev/$device" . ($i + 1) . " ro'\n"; $OUT .= "root = '/dev/$device" . ($i + 1) . " ro'\n";
} }
}
$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 .= "disk = [\n";
for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
# {
# Physical volumes $OUT .= " '$PARTITIONS[$i]{'imagetype'}$PARTITIONS[$i]{'image'},$device" . ( $i + 1 ) .",w',\n";
# }
{ $OUT .= " ]\n";
if ( $image_vbd )
{
$OUT .= "root = '/dev/$device" . "2 ro'\n";
$OUT .= "disk = [\n";
$OUT .= " '$image_vbd," . $device . "2,w',\n";
if ( $swap_vbd )
{
$OUT .= " '$swap_vbd," . $device . "1,w',\n";
}
$OUT .= " ]\n";
}
} }
# #
@@ -92,26 +52,12 @@ name = '{$hostname}'
# Setup the mac address, if present. # Setup the mac address, if present.
my $m = ''; my $m = '';
if ( $mac ) if ( $mac )
{ {
$m = "mac=$mac" $m = "mac=$mac"
} }
my $br = '';
if ( $bridge ) $OUT .= "vif = [ '$m' ]";
{ }
if ( $mac )
{
$br = ",bridge=$bridge"
}
else
{
$br = "bridge=$bridge"
}
}
$OUT .= "vif = [ '";
$OUT .= "$m";
$OUT .= "$br";
$OUT .= "' ]";
}
else else
{ {
# #
@@ -119,27 +65,12 @@ name = '{$hostname}'
# #
my $m = ''; my $m = '';
if ( $mac ) if ( $mac )
{ {
$m = ",mac=$mac" $m = ",mac=$mac"
} }
my $vn = ''; $OUT .= "vif = [ 'ip=$ip1";
if ( $vifname ) $OUT .= "$m' ]";
{
$vn = ",vifname=$vifname";
}
my $br = '';
if ( $bridge )
{
$br = ",bridge=$bridge"
}
$OUT .= "vif = [ 'ip=$ips";
$OUT .= "$m";
$OUT .= "$vn";
$OUT .= "$br";
$OUT .= "' ]";
} }
} }

0
hooks/centos-4/15-setup-arch Executable file → Normal file
View File

View File

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

View File

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

View File

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

View File

@@ -31,7 +31,7 @@ logMessage Script $0 starting
# #
# Setup the mailname + hostname files. # Setup the mailname + hostname files.
# #
echo ${hostname} | sed 's/^\([^\.]*\)\..*/\1/' > ${prefix}/etc/hostname echo ${hostname} > ${prefix}/etc/hostname
echo ${hostname} > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
@@ -89,27 +89,23 @@ if [ -z "${dhcp}" ]; then
# #
name=`echo ${hostname} | awk -F. '{print $1}'` name=`echo ${hostname} | awk -F. '{print $1}'`
if [ -z "${nohosts}" ]; then logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
logMessage Adding ${hostname} and ${name} to /etc/hosts on the host echo "${ip1} ${hostname} ${name}" >> /etc/hosts
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.
# If we've updated the /etc/hosts file on the host machine kill -HUP `cat /var/run/dnsmasq.pid`
# 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
fi fi

View File

@@ -27,8 +27,29 @@ logMessage Script $0 starting
# #
# Copy "required" files from our host. # Copy "required" files from our host.
# #
cp /etc/timezone ${prefix}/etc # NONE DONE
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
#
installCentOS4Package ${prefix} sudo
fi
# #

View File

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

View File

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

0
hooks/centos-5/15-setup-arch Executable file → Normal file
View File

View File

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

View File

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

View File

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

View File

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

View File

@@ -27,8 +27,29 @@ logMessage Script $0 starting
# #
# Copy "required" files from our host. # Copy "required" files from our host.
# #
cp /etc/timezone ${prefix}/etc # NONE DONE
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
#
installCentOS4Package ${prefix} sudo
fi
# #

View File

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

View File

@@ -37,19 +37,15 @@ logMessage Filesystem options are ${options}
# #
# Find the root device. # Find the root device.
# #
# 1. default to xvda. # 1. default to sda.
# #
# 2. If --ide is specified use hda. # 2. If --ide is specified use hda.
# #
# 3. If --scsi is specified use sda. # 3. Otherwise use a named $disk_device
# #
# 4. Otherwise use a named $disk_device device=sda
#
device=xvda
if [ "${ide}" ]; then if [ "${ide}" ]; then
device=hda device=hda
elif [ "${scsi}" ]; then
device=sda
else else
if [ ! -z "${disk_device}" ]; then if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device` device=`basename $disk_device`
@@ -64,7 +60,6 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
@@ -90,9 +85,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -113,9 +105,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

@@ -85,7 +85,7 @@ installDebianPackage ()
# #
# Use policy-rc to stop any daemons from starting. # Use policy-rc to stop any daemons from starting.
# #
printf '#!/bin/sh\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d echo -e '#!/bin/bash\nexit 101\n' > ${prefix}/usr/sbin/policy-rc.d
chmod +x ${prefix}/usr/sbin/policy-rc.d chmod +x ${prefix}/usr/sbin/policy-rc.d
# #
@@ -218,28 +218,6 @@ 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. # Install a package upon a gentoo system via emerge.
# #

View File

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

View File

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

View File

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

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
# #
# Setup the mailname + hostname files. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi fi
@@ -106,29 +78,35 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host #
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts # Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
# logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
# 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. echo "${ip1} ${hostname} ${name}" >> /etc/hosts
kill -s HUP `cat /var/run/dnsmasq.pid`
fi
#
# 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`
fi fi
fi fi
fi fi

View File

@@ -28,7 +28,28 @@ logMessage Script $0 starting
# Copy "required" files from our host. # Copy "required" files from our host.
# #
cp /etc/timezone ${prefix}/etc 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
# #

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -27,47 +27,37 @@ fi
# #
logMessage Script $0 starting logMessage Script $0 starting
#
# Determine the FQDN and Hostname
#
GUEST_FQDN=${hostname}
GUEST_HOSTNAME=`echo $GUEST_FQDN | awk -F'.' '{print $1}'`
# #
# Setup the mailname + hostname files. # Setup the mailname + hostname files.
# #
echo $GUEST_HOSTNAME > ${prefix}/etc/hostname echo ${hostname} > ${prefix}/etc/hostname
echo $GUEST_FQDN > ${prefix}/etc/mailname echo ${hostname} > ${prefix}/etc/mailname
# #
# Fixup the /etc/hosts file upon the new image for # Fixup the /etc/hosts file upon the new image for
# machines with static IPs # machines with static IPs
# #
if [ -z "${copyhosts}" ]; then if [ -z "${dhcp}" ]; then
#
# Copy localhost
#
cat > ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
EOF
#
# Make sure our hostname and FQDN is resolvable
#
if [ -z "${dhcp}" ]; then
#
# If dhcp is diabled, FQDN should resolve to our IP
#
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
echo "${ip1} ${hostname}" >> ${prefix}/etc/hosts
echo " " >> ${prefix}/etc/hosts
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
else
#
# Stub /etc/hosts for DHCP clients.
#
cat >> ${prefix}/etc/hosts <<EOF cat >> ${prefix}/etc/hosts <<EOF
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts # The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback ::1 ip6-localhost ip6-loopback
@@ -79,25 +69,7 @@ ff02::3 ip6-allhosts
EOF EOF
else
# Non-IPv6 stuff.
grep -v '\(::\|IPv6\)' /etc/hosts > ${prefix}/etc/hosts
# New entry.
if [ -z "${dhcp}" ]; then
cat >> ${prefix}/etc/hosts <<EOF
${ip1} $GUEST_FQDN $GUEST_HOSTNAME
EOF
else
cat >> ${prefix}/etc/hosts <<EOF
127.0.1.1 $GUEST_FQDN $GUEST_HOSTNAME
EOF
fi
# IPv6 stuff.
grep '\(::\|IPv6\)' /etc/hosts >> ${prefix}/etc/hosts
fi fi
@@ -106,29 +78,34 @@ fi
# #
if [ -z "${dhcp}" ]; then if [ -z "${dhcp}" ]; then
if ( grep $GUEST_FQDN /etc/hosts > /dev/null ) ; then if ( grep ${hostname} /etc/hosts > /dev/null ) ; then
logMessage Host already has IP address for the host $GUEST_FQDN. logMessage Host already has IP address for the host ${hostname}.
else else
if [ -z "${nohosts}" ]; then
logMessage Adding $GUEST_FQDN and $GUEST_HOSTNAME to /etc/hosts on the host #
echo "${ip1} $GUEST_FQDN $GUEST_HOSTNAME" >> /etc/hosts # Short host name.
#
name=`echo ${hostname} | awk -F. '{print $1}'`
# logMessage Adding ${hostname} and ${name} to /etc/hosts on the host
# 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. echo "${ip1} ${hostname} ${name}" >> /etc/hosts
kill -s HUP `cat /var/run/dnsmasq.pid`
fi #
# 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`
fi fi
fi fi
fi fi

View File

@@ -26,19 +26,6 @@ fi
# #
logMessage Script $0 starting 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 # Early termination if we have a couple of common devices present
@@ -49,10 +36,10 @@ if ( test `ls -1 ${prefix}/dev | wc -l` -gt 10 ); then
# We still need to make sure the basic devices are present # We still need to make sure the basic devices are present
# #
cd ${prefix}/dev cd ${prefix}/dev
${MAKEDEV} std ./MAKEDEV std
${MAKEDEV} hda ./MAKEDEV hda
${MAKEDEV} sda ./MAKEDEV sda
${MAKEDEV} tty1 ./MAKEDEV tty1
logMessage "Terminating because there appear to be files in /dev already" logMessage "Terminating because there appear to be files in /dev already"
exit exit
@@ -63,10 +50,9 @@ fi
# Make the device nodes. # Make the device nodes.
# #
cd ${prefix}/dev cd ${prefix}/dev
${MAKEDEV} generic ./MAKEDEV generic
${MAKEDEV} std ./MAKEDEV std
fi # -n ${MAKEDEV}
# #
# Log our finish # Log our finish

View File

@@ -28,7 +28,29 @@ logMessage Script $0 starting
# Copy "required" files from our host. # Copy "required" files from our host.
# #
cp /etc/timezone ${prefix}/etc 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
# #

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -28,7 +28,28 @@ logMessage Script $0 starting
# Copy "required" files from our host. # Copy "required" files from our host.
# #
cp /etc/timezone ${prefix}/etc 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
# #

View File

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

View File

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

View File

@@ -1,112 +0,0 @@
#!/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,9 +31,7 @@ fi
# #
logMessage Script $0 starting logMessage Script $0 starting
if [ ${pygrub} ]; then
logMessage "pygrub set, skipping module install"
else
# #
# The name of the package containing the correct modules. # The name of the package containing the correct modules.
# #
@@ -73,12 +71,12 @@ else
cp -au /lib/modules/$(uname -r) ${prefix}/lib/modules cp -au /lib/modules/$(uname -r) ${prefix}/lib/modules
fi fi
# #
# Install the module-init-tools package. # Install the module-init-tools package.
# #
installDebianPackage ${prefix} module-init-tools installDebianPackage ${prefix} module-init-tools
fi # if pygrub
# #
# Log our finish # Log our finish

View File

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

0
hooks/fedora-core-6/15-setup-arch Executable file → Normal file
View File

View File

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

View File

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

View File

@@ -21,12 +21,6 @@ my $prefix = shift;
die "Prefix must be given" unless defined( $prefix ); die "Prefix must be given" unless defined( $prefix );
die "Prefix must be a directory" unless ( -d $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. # Exit unless the 'accounts' variable is set.

View File

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

View File

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

View File

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

View File

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

View File

@@ -36,19 +36,15 @@ logMessage Filesystem options are ${options}
# #
# Find the root device. # Find the root device.
# #
# 1. default to xvda. # 1. default to sda.
# #
# 2. If --ide is specified use hda. # 2. If --ide is specified use hda.
# #
# 3. If --scsi is specified use sda. # 3. Otherwise use a named $disk_device
# #
# 4. Otherwise use a named $disk_device device=sda
#
device=xvda
if [ "${ide}" ]; then if [ "${ide}" ]; then
device=hda device=hda
elif [ "${scsi}" ]; then
device=sda
else else
if [ ! -z "${disk_device}" ]; then if [ ! -z "${disk_device}" ]; then
device=`basename $disk_device` device=`basename $disk_device`
@@ -63,13 +59,12 @@ logMessage "Root device is /dev/$device"
# #
has_xfs=0 has_xfs=0
has_reiserfs=0 has_reiserfs=0
has_btrfs=0
cat <<E_O_FSTAB > ${prefix}/etc/fstab cat <<E_O_FSTAB > ${prefix}/etc/fstab
# /etc/fstab: static file system information. # /etc/fstab: static file system information.
# #
# <file system> <mount point> <type> <options> <dump> <pass> # <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0 proc /proc proc defaults 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
E_O_FSTAB E_O_FSTAB
for part in `seq 1 ${NUMPARTITIONS}`; do for part in `seq 1 ${NUMPARTITIONS}`; do
eval "PARTITION=\"\${PARTITION${part}}\"" eval "PARTITION=\"\${PARTITION${part}}\""
@@ -89,9 +84,6 @@ for part in `seq 1 ${NUMPARTITIONS}`; do
reiserfs) reiserfs)
has_reiserfs=1 has_reiserfs=1
;; ;;
btrfs)
has_btrfs=1
;;
esac esac
if [ "${partdata2}" = "swap" ]; then if [ "${partdata2}" = "swap" ]; then
@@ -112,9 +104,6 @@ done
#if [ $has_reiserfs -eq 1 ]; then #if [ $has_reiserfs -eq 1 ]; then
# installDebianPackage ${prefix} reiserfsprogs # installDebianPackage ${prefix} reiserfsprogs
#fi #fi
#if [ $has_btrfs -eq 1 ]; then
# installDebianPackage ${prefix} btrfs-tools
#fi
# #

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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