Fix incompatibility with LXC 3.0
LXC 3.0, unlike 2.1, doesn't support old configuration formats at all and because our previous approach to handling old format was incomplete, running `vagrant up` on a system with LXC 3.0 would fail, even if the base box itself was made with modernized config. This commit fixes this problem: is the box has a modern config, it's going to be properly created and booted under LXC 3.0. It does so without breaking the support for LXC < 2.1
This commit is contained in:
parent
208edd49e5
commit
dd24cdc3d6
6 changed files with 35 additions and 13 deletions
|
@ -8,11 +8,15 @@ module Vagrant
|
||||||
|
|
||||||
def call(env)
|
def call(env)
|
||||||
@env = env
|
@env = env
|
||||||
|
driver = env[:machine].provider.driver
|
||||||
config = env[:machine].provider_config
|
config = env[:machine].provider_config
|
||||||
|
|
||||||
utsname = env[:machine].config.vm.hostname || env[:machine].id
|
utsname = env[:machine].config.vm.hostname || env[:machine].id
|
||||||
|
if driver.supports_new_config_format
|
||||||
|
config.customize 'uts.name', utsname
|
||||||
|
else
|
||||||
config.customize 'utsname', utsname
|
config.customize 'utsname', utsname
|
||||||
|
end
|
||||||
|
|
||||||
# Fix apparmor issues when starting Ubuntu 14.04 containers
|
# Fix apparmor issues when starting Ubuntu 14.04 containers
|
||||||
# See https://github.com/fgrehm/vagrant-lxc/issues/278 for more information
|
# See https://github.com/fgrehm/vagrant-lxc/issues/278 for more information
|
||||||
|
@ -32,7 +36,7 @@ module Vagrant
|
||||||
end
|
end
|
||||||
|
|
||||||
env[:ui].info I18n.t("vagrant_lxc.messages.starting")
|
env[:ui].info I18n.t("vagrant_lxc.messages.starting")
|
||||||
env[:machine].provider.driver.start(config.customizations)
|
driver.start(config.customizations)
|
||||||
|
|
||||||
@app.call env
|
@app.call env
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,13 +24,17 @@ module Vagrant
|
||||||
backingstore = config.privileged ? "best" : "dir"
|
backingstore = config.privileged ? "best" : "dir"
|
||||||
end
|
end
|
||||||
driver = env[:machine].provider.driver
|
driver = env[:machine].provider.driver
|
||||||
|
template_options = env[:lxc_template_opts]
|
||||||
|
if ! driver.supports_new_config_format
|
||||||
|
template_options['--oldconfig'] = ''
|
||||||
|
end
|
||||||
driver.create(
|
driver.create(
|
||||||
container_name,
|
container_name,
|
||||||
backingstore,
|
backingstore,
|
||||||
config.backingstore_options,
|
config.backingstore_options,
|
||||||
env[:lxc_template_src],
|
env[:lxc_template_src],
|
||||||
env[:lxc_template_config],
|
env[:lxc_template_config],
|
||||||
env[:lxc_template_opts]
|
template_options
|
||||||
)
|
)
|
||||||
driver.update_config_keys
|
driver.update_config_keys
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,7 @@ module Vagrant
|
||||||
@cli.name = @container_name = name
|
@cli.name = @container_name = name
|
||||||
|
|
||||||
@logger.debug "Creating container..."
|
@logger.debug "Creating container..."
|
||||||
|
|
||||||
@cli.create template_path, backingstore, backingstore_options, config_file, template_options
|
@cli.create template_path, backingstore, backingstore_options, config_file, template_options
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -214,6 +215,10 @@ module Vagrant
|
||||||
@version ||= @cli.version
|
@version ||= @cli.version
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def supports_new_config_format
|
||||||
|
Gem::Version.new(version) >= Gem::Version.new('2.1.0')
|
||||||
|
end
|
||||||
|
|
||||||
# TODO: This needs to be reviewed and specs needs to be written
|
# TODO: This needs to be reviewed and specs needs to be written
|
||||||
def compress_rootfs
|
def compress_rootfs
|
||||||
# TODO: Pass in tmpdir so we can clean up from outside
|
# TODO: Pass in tmpdir so we can clean up from outside
|
||||||
|
|
|
@ -59,7 +59,7 @@ module Vagrant
|
||||||
config_opts = ['-f', config_file]
|
config_opts = ['-f', config_file]
|
||||||
end
|
end
|
||||||
|
|
||||||
extra = template_opts.to_a.flatten
|
extra = template_opts.to_a.flatten.reject { |elem| elem.empty? }
|
||||||
extra.unshift '--' unless extra.empty?
|
extra.unshift '--' unless extra.empty?
|
||||||
|
|
||||||
run :create,
|
run :create,
|
||||||
|
|
|
@ -33,8 +33,10 @@ LXC_PATH=
|
||||||
LXC_ROOTFS=
|
LXC_ROOTFS=
|
||||||
LXC_TARBALL=
|
LXC_TARBALL=
|
||||||
LXC_CONFIG=
|
LXC_CONFIG=
|
||||||
|
LXC_USE_OLDCONFIG=
|
||||||
LXC_STRIP_COMPONENTS=2
|
LXC_STRIP_COMPONENTS=2
|
||||||
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
vagrant-lxc default template
|
vagrant-lxc default template
|
||||||
|
@ -44,6 +46,7 @@ Required arguments:
|
||||||
|
|
||||||
Optional arguments:
|
Optional arguments:
|
||||||
[ --config ]: Configuration file to be used when building the container
|
[ --config ]: Configuration file to be used when building the container
|
||||||
|
[ --oldconfig ]: Use pre LXC 2.1 config format
|
||||||
[ -h | --help ]: This help message
|
[ -h | --help ]: This help message
|
||||||
|
|
||||||
LXC internal arguments (do not pass manually!):
|
LXC internal arguments (do not pass manually!):
|
||||||
|
@ -57,7 +60,7 @@ EOF
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
options=$(getopt -o h -l tarball:,config:,help:,name:,path:,rootfs:,mapped-uid:,mapped-gid:,strip-components: -- "$@")SS
|
options=$(getopt -o h -l tarball:,config:,oldconfig,help:,name:,path:,rootfs:,mapped-uid:,mapped-gid:,strip-components: -- "$@")SS
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
usage $(basename $0)
|
usage $(basename $0)
|
||||||
|
@ -70,6 +73,7 @@ do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
-h|--help) usage $0 && exit 0;;
|
-h|--help) usage $0 && exit 0;;
|
||||||
--config) LXC_CONFIG=$2; shift 2;;
|
--config) LXC_CONFIG=$2; shift 2;;
|
||||||
|
--oldconfig) LXC_USE_OLDCONFIG=1; shift 1;;
|
||||||
--tarball) LXC_TARBALL=$2; shift 2;;
|
--tarball) LXC_TARBALL=$2; shift 2;;
|
||||||
--name) LXC_NAME=$2; shift 2;;
|
--name) LXC_NAME=$2; shift 2;;
|
||||||
--path) LXC_PATH=$2; shift 2;;
|
--path) LXC_PATH=$2; shift 2;;
|
||||||
|
@ -144,7 +148,12 @@ if [ -e "${LXC_PATH}/config-auto" ]; then
|
||||||
cat ${LXC_PATH}/config-auto >> ${LXC_PATH}/config
|
cat ${LXC_PATH}/config-auto >> ${LXC_PATH}/config
|
||||||
rm ${LXC_PATH}/config-auto
|
rm ${LXC_PATH}/config-auto
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $LXC_USE_OLDCONFIG ]; then
|
||||||
echo "lxc.utsname = ${LXC_NAME}" >> ${LXC_PATH}/config
|
echo "lxc.utsname = ${LXC_NAME}" >> ${LXC_PATH}/config
|
||||||
|
else
|
||||||
|
echo "lxc.uts.name = ${LXC_NAME}" >> ${LXC_PATH}/config
|
||||||
|
fi
|
||||||
|
|
||||||
## Re-add the previously removed network config
|
## Re-add the previously removed network config
|
||||||
if [ -e "${LXC_PATH}/config-network" ]; then
|
if [ -e "${LXC_PATH}/config-network" ]; then
|
||||||
|
|
|
@ -211,9 +211,9 @@ describe Vagrant::LXC::Driver do
|
||||||
# Blah blah comment
|
# Blah blah comment
|
||||||
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
|
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
|
||||||
lxc.mount.entry = sysfs sys sysfs defaults 0 0
|
lxc.mount.entry = sysfs sys sysfs defaults 0 0
|
||||||
lxc.tty = 4
|
lxc.tty.max = 4
|
||||||
lxc.pts = 1024
|
lxc.pty.max = 1024
|
||||||
lxc.rootfs = #{rootfs_path}
|
lxc.rootfs.path = #{rootfs_path}
|
||||||
# VAGRANT-BEGIN
|
# VAGRANT-BEGIN
|
||||||
lxc.network.type=veth
|
lxc.network.type=veth
|
||||||
lxc.network.name=eth1
|
lxc.network.name=eth1
|
||||||
|
@ -241,9 +241,9 @@ describe Vagrant::LXC::Driver do
|
||||||
# Blah blah comment
|
# Blah blah comment
|
||||||
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
|
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
|
||||||
lxc.mount.entry = sysfs sys sysfs defaults 0 0
|
lxc.mount.entry = sysfs sys sysfs defaults 0 0
|
||||||
lxc.tty = 4
|
lxc.tty.max = 4
|
||||||
lxc.pts = 1024
|
lxc.pty.max = 1024
|
||||||
lxc.rootfs = overlayfs:/path/to/master/directory:#{rootfs_path}
|
lxc.rootfs.path = overlayfs:/path/to/master/directory:#{rootfs_path}
|
||||||
# VAGRANT-BEGIN
|
# VAGRANT-BEGIN
|
||||||
lxc.network.type=veth
|
lxc.network.type=veth
|
||||||
lxc.network.name=eth1
|
lxc.network.name=eth1
|
||||||
|
|
Loading…
Reference in a new issue