[lxc-devel] [PATCH 5/5] Add distro config file /etc/lxc/lxc.conf
Serge Hallyn
serge.hallyn at canonical.com
Mon Oct 15 17:42:57 UTC 2012
Quoting Dwight Engen (dwight.engen at oracle.com):
> This allows a distro to put the distro specific default network
> configuration (for example bridge device, link type), or other lxc
> configuration in the case that -f is not passed by the user to
> lxc-create, in which case lxc-create will use the distro conf file as
> the basis for the containers config.
I think this is great. Note though that debian does not have an lxcbr0,
only Ubuntu does.
This is getting "out there", but I wonder if, for the unknown os case,
it would be reliable to look at the default nic, and check if it is a
bridge, and use that bridge if so.
> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> ---
> Makefile.am | 2 +-
> config/Makefile.am | 9 +++++++++
> config/lxc.conf.debian | 3 +++
> config/lxc.conf.libvirt | 3 +++
> config/lxc.conf.unknown | 1 +
> configure.ac | 25 +++++++++++++++++++++++++
> lxc.spec.in | 1 +
> src/lxc/lxc-create.in | 23 +++++++++--------------
> 8 files changed, 52 insertions(+), 15 deletions(-)
> create mode 100644 config/lxc.conf.debian
> create mode 100644 config/lxc.conf.libvirt
> create mode 100644 config/lxc.conf.unknown
>
> diff --git a/Makefile.am b/Makefile.am
> index c66ecc6..2f7606f 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -2,7 +2,7 @@
>
> ACLOCAL_AMFLAGS = -I config
>
> -SUBDIRS = src templates doc
> +SUBDIRS = config src templates doc
> DIST_SUBDIRS = config src templates doc
> EXTRA_DIST = autogen.sh lxc.spec CONTRIBUTING MAINTAINERS ChangeLog
>
> diff --git a/config/Makefile.am b/config/Makefile.am
> index 783ba73..6c39d3c 100644
> --- a/config/Makefile.am
> +++ b/config/Makefile.am
> @@ -1,2 +1,11 @@
> +configdir = $(sysconfdir)/lxc
> +config_DATA = lxc.conf
> +conffile = @LXC_CONFFILE@
> +
> +EXTRA_DIST = lxc.conf.debian lxc.conf.libvirt lxc.conf.unknown
> +
> +lxc.conf:
> + cp $(conffile) $@
> +
> distclean:
> @$(RM) -f compile config.guess config.sub depcomp install-sh ltmain.sh missing Makefile.in Makefile
> diff --git a/config/lxc.conf.debian b/config/lxc.conf.debian
> new file mode 100644
> index 0000000..d2ac167
> --- /dev/null
> +++ b/config/lxc.conf.debian
> @@ -0,0 +1,3 @@
> +lxc.network.type=veth
> +lxc.network.link=lxcbr0
> +lxc.network.flags=up
> diff --git a/config/lxc.conf.libvirt b/config/lxc.conf.libvirt
> new file mode 100644
> index 0000000..7128619
> --- /dev/null
> +++ b/config/lxc.conf.libvirt
> @@ -0,0 +1,3 @@
> +lxc.network.type=veth
> +lxc.network.link=virbr0
> +lxc.network.flags=up
> diff --git a/config/lxc.conf.unknown b/config/lxc.conf.unknown
> new file mode 100644
> index 0000000..16fa9d6
> --- /dev/null
> +++ b/config/lxc.conf.unknown
> @@ -0,0 +1 @@
> +lxc.network.type=empty
> diff --git a/configure.ac b/configure.ac
> index b9a0d65..9f1e669 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -12,10 +12,34 @@ AM_PROG_CC_C_O
> AC_GNU_SOURCE
> AC_CHECK_PROG(SETCAP, setcap, yes, no, $PATH$PATH_SEPARATOR/sbin)
>
> +# Make sure to test for fedora first since it has both fedora-release
> +# and redhat-release
> if test -f /etc/debian_version; then
> osname="debian"
> +elif test -f /etc/oracle-release; then
> + osname="oracle"
> +elif test -f /etc/fedora-release; then
> + osname="fedora"
> +elif test -f /etc/redhat-release; then
> + osname="redhat"
> fi
> +
> AM_CONDITIONAL([HAVE_DEBIAN], [test x"$osname" == xdebian])
> +AM_CONDITIONAL([HAVE_ORACLE], [test x"$osname" == xoracle])
> +AM_CONDITIONAL([HAVE_FEDORA], [test x"$osname" == xfedora])
> +AM_CONDITIONAL([HAVE_REDHAT], [test x"$osname" == xredhat])
> +
> +case $osname in
> + debian)
> + conffile=lxc.conf.debian
> + ;;
> + oracle|redhat|fedora)
> + conffile=lxc.conf.libvirt
> + ;;
> + *)
> + conffile=lxc.conf.unknown
> + ;;
> +esac
>
> AC_ARG_ENABLE([rpath],
> [AC_HELP_STRING([--disable-rpath], [do not set rpath in executables])],
> @@ -111,6 +135,7 @@ AC_ARG_WITH([rootfs-path],
> [lxc rootfs mount point]
> )], [], [with_rootfs_path=['${libdir}/lxc/rootfs']])
>
> +AS_AC_EXPAND(LXC_CONFFILE, $conffile)
> AS_AC_EXPAND(LXC_GENERATE_DATE, "$(date)")
> AS_AC_EXPAND(LXCPATH, "${with_config_path}")
> AS_AC_EXPAND(LXCROOTFSMOUNT, "${with_rootfs_path}")
> diff --git a/lxc.spec.in b/lxc.spec.in
> index e14eff6..24d3ded 100644
> --- a/lxc.spec.in
> +++ b/lxc.spec.in
> @@ -93,6 +93,7 @@ rm -rf %{buildroot}
> %{_mandir}/*
> %{_datadir}/doc/*
> %{_datadir}/lxc/*
> +%{_sysconfdir}/lxc/*
>
> %files libs
> %defattr(-,root,root)
> diff --git a/src/lxc/lxc-create.in b/src/lxc/lxc-create.in
> index 79c67d6..949edbe 100644
> --- a/src/lxc/lxc-create.in
> +++ b/src/lxc/lxc-create.in
> @@ -260,16 +260,18 @@ trap cleanup HUP INT TERM
> mkdir -p $lxc_path/$lxc_name
>
> if [ -z "$lxc_config" ]; then
> - touch $lxc_path/$lxc_name/config
> -else
> - if [ ! -r "$lxc_config" ]; then
> - echo "$(basename $0): '$lxc_config' configuration file not found" >&2
> - exit 1
> - fi
> + lxc_config="@SYSCONFDIR@/lxc/lxc.conf"
> + echo
> + echo "$(basename $0): No config file specified, using the default config $lxc_config"
> +fi
>
> - cp $lxc_config $lxc_path/$lxc_name/config
> +if [ ! -r "$lxc_config" ]; then
> + echo "$(basename $0): '$lxc_config' configuration file not found" >&2
> + exit 1
> fi
>
> +cp $lxc_config $lxc_path/$lxc_name/config
> +
> if [ -n "$custom_rootfs" ]; then
> if grep -q "lxc.rootfs" $lxc_path/$lxc_name/config ; then
> echo "configuration file already specifies a lxc.rootfs"
> @@ -295,13 +297,6 @@ if [ ! -z $lxc_template ]; then
> cleanup
> fi
>
> - if [ -z "$lxc_config" ]; then
> - echo "Note: Usually the template option is called with a configuration"
> - echo "file option too, mostly to configure the network."
> - echo "For more information look at lxc.conf (5)"
> - echo
> - fi
> -
> ${templatedir}/lxc-$lxc_template --path=$lxc_path/$lxc_name --name=$lxc_name $*
> if [ $? -ne 0 ]; then
> echo "$(basename $0): failed to execute template '$lxc_template'" >&2
> --
> 1.7.1
>
More information about the lxc-devel
mailing list