VIF_GUEST=eth0
##########
+FEDORA_MIRROR_BASE="http://mirror.onelab.eu/fedora/"
+FEDORA_MIRROR_KEYS="http://mirror.onelab.eu/keys/"
FEDORA_PREINSTALLED="yum initscripts passwd rsyslog vim-minimal dhclient chkconfig rootfiles policycoreutils openssh-server openssh-clients"
DEBIAN_PREINSTALLED="openssh-server openssh-client"
fcdistro=$1; shift
case $fcdistro in
f[0-9]*|centos[0-9]*|sl[0-9]*) echo yum ;;
- squeeze|wheezy|jessie|oneiric|precise|quantal|raring|saucy) echo debootstrap ;;
+ squeeze|wheezy|jessie|oneiric|precise|quantal|raring|saucy|trusty) echo debootstrap ;;
*) echo Unknown distro $fcdistro ;;
esac
}
set -e
cache=/var/cache/lxc/fedora/$arch/$release
+ mkdir -p $cache
- mkdir -p /var/lock/subsys/
(
- flock -n -x 200 || { echo "Cache repository is busy." ; return 1 ; }
+ flock --exclusive --timeout 60 200 || { echo "Cache repository is busy." ; return 1 ; }
if [ ! -e "$cache/rootfs" ]; then
echo "Getting cache download in $cache/rootfs ... "
- fedora_download || { echo "Failed to download 'fedora base'"; return 1; }
+ fedora_download $cache || { echo "Failed to download 'fedora base'"; return 1; }
else
echo "Updating cache $cache/rootfs ..."
if ! yum --installroot $cache/rootfs -y --nogpgcheck update ; then
fi
fi
- echo "Copy $cache/rootfs to $lxc_root ... "
+ echo "Filling $lxc_root from $cache/rootfs ... "
rsync -a $cache/rootfs/ $lxc_root/
return 0
- ) 200>/var/lock/subsys/lxc
+ ) 200> $cache/lock
return $?
}
function fedora_download() {
set -x
+
+ cache=$1; shift
+
# check the mini fedora was not already downloaded
INSTALL_ROOT=$cache/partial
echo $INSTALL_ROOT
sed -i "s/\$basearch/$arch/g; s/\$releasever/$release/g;" $f
done
- MIRROR_URL=http://mirror.onelab.eu/fedora/releases/$release/Everything/$arch/os
+ MIRROR_URL=$FEDORA_MIRROR_BASE/releases/$release/Everything/$arch/os
RELEASE_URL1="$MIRROR_URL/Packages/fedora-release-$release-1.noarch.rpm"
# with fedora18 the rpms are scattered by first name
RELEASE_URL2="$MIRROR_URL/Packages/f/fedora-release-$release-1.noarch.rpm"
cat > $lxc_root/etc/yum.repos.d/building.repo <<EOF
[fedora]
-name=Fedora $release - $arch
-baseurl=http://mirror.onelab.eu/fedora/releases/$release/Everything/$arch/os/
+name=Fedora \$releasever - \$basearch
+baseurl=$FEDORA_MIRROR_BASE/releases/\$releasever/Everything/\$basearch/os/
enabled=1
metadata_expire=7d
gpgcheck=1
-gpgkey=http://mirror.onelab.eu/keys/RPM-GPG-KEY-fedora-$release-primary
+gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-$release-primary
[updates]
-name=Fedora $release - $arch - Updates
-baseurl=http://mirror.onelab.eu/fedora/updates/$release/$arch/
+name=Fedora \$releasever - \$basearch - Updates
+baseurl=$FEDORA_MIRROR_BASE/updates/\$releasever/\$basearch/
enabled=1
metadata_expire=7d
gpgcheck=1
-gpgkey=http://mirror.onelab.eu/keys/RPM-GPG-KEY-fedora-$release-primary
+gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-$release-primary
EOF
-
+
# for using vtest-init-lxc.sh as a general-purpose lxc creation wrapper
# just mention 'none' as the repo url
if [ -n "$REPO_URL" ] ; then
case $fcdistro in
squeeze|wheezy|jessie)
echo http://ftp2.fr.debian.org/debian/ ;;
- oneiric|precise|quantal|raring|saucy)
+ oneiric|precise|quantal|raring|saucy|trusty)
echo http://mir1.ovh.net/ubuntu/ubuntu/ ;;
*) echo unknown distro $fcdistro; exit 1;;
esac
function post_install () {
lxc=$1; shift
personality=$1; shift
+ # setup localtime from the host
+ cp /etc/localtime $lxc_root/etc/localtime
if [ -n "$BUILD_MODE" ] ; then
post_install_build $lxc $personality
- virsh -c lxc:/// start $lxc
- # manually run dhclient in guest - somehow this network won't start on its own
- virsh -c lxc:/// lxc-enter-namespace $lxc /bin/bash -c "dhclient $VIF_GUEST"
+ if [ -n "$START_VM" ] ; then
+ virsh -c lxc:/// start $lxc
+ # manually run dhclient in guest - somehow this network won't start on its own
+ virsh -c lxc:/// lxc-enter-namespace $lxc /bin/bash -c "dhclient $VIF_GUEST"
+ fi
else
post_install_myplc $lxc $personality
- virsh -c lxc:/// start $lxc
-# it sounds like we don't need ssh per se any more
-# it still makes sense to wait for network readiness though
-# some day maybe...
- wait_for_ssh $lxc
+ if [ -n "$START_VM" ] ; then
+ virsh -c lxc:/// start $lxc
+ # it sounds like we don't need ssh per se any more
+ # it still makes sense to wait for network readiness though
+ # some day maybe...
+ wait_for_ssh $lxc
+ fi
fi
- # setup localtime from the host
- cp /etc/localtime $lxc_root/etc/localtime
}
function post_install_build () {
echo " by default we use devel.pkgs (build mode) or runtime.pkgs (test mode)"
echo " -i image - the location of the rootfs"
echo " -m memory - the amount of allocated memory in MB - defaults to $DEFAULT_MEMORY MB"
+ echo " -s do not start VM"
echo " -v be verbose"
exit 1
}
exit 1
fi
- while getopts "n:f:d:p:r:P:i:m:v" opt ; do
+ START_VM=true
+ while getopts "n:f:d:p:r:P:i:m:sv" opt ; do
case $opt in
n) GUEST_HOSTNAME=$OPTARG;;
f) fcdistro=$OPTARG;;
P) PREINSTALLED=$OPTARG;;
i) IMAGE=$OPTARG;;
m) MEMORY=$OPTARG;;
+ s) START_VM= ;;
v) VERBOSE=true; set -x;;
*) usage ;;
esac
MEMORY=$(($MEMORY * 1024))
# the set of preinstalled packages - depends on mode
- if [ -z "$PREINSTALLED"] ; then
+ if [ -z "$PREINSTALLED" ] ; then
if [ -n "$BUILD_MODE" ] ; then
PREINSTALLED=devel.pkgs
else