[Lxc-users] clones of clones are failing to start

Jäkel, Guido G.Jaekel at dnb.de
Thu Jul 18 15:39:16 UTC 2013


Hi Serge,

>> to assist to avoid such problems i would propose to introduce macro expansion (of the own tags but also by incorporating the
>environment variables) into the configuration argument parser and to provide some useful basics like the container name.  Then one may
>use e.g.
>>
>> 	lxc.hook.mount = $MYCONTAINER_HOME/hooks/$lxc.name
>
>That sounds good.  Would you be able to post a patch to do this?

I'm very sorry, I'm no C code developer but a system engineer. I understand a lot of different code just from reading and may even point out bugs. Or more abstract things like this :}


>And if you had this, you'd be able to simply use lxc-start without
>the -s?  That sounds worthwhile then.
>
>Can you show us an example of a pre-parsed config, and the final
>executed lxc-start command?


I'm using the standard lxc configuration file just for the general setup. The concrete details are in an additional file per container. But a concrete containers extra config file might be a symlink to a file describing the configuration for a class of containers. Also, the container standard config file normally is a symlink to a central version. By cheating around with such symlinks, I'm easily able to test out and migrate then to new configuration scenarios .

In my central lxc command script, i don't have realized the expansion of "internal" lxc tags, but of environment variables.There's a section to gather the additional config to the array EXTRA_CONFIG, which is appended later to the arguments of lxc-start. 


  LXCBASE="/etc/lxc"
[...]
  CONTAINERBASE="$LXCBASE/$CONTAINER"
  [ ! -d "$CONTAINERBASE" ] && LOG "unknown container \"$CONTAINER\" (no LXC basedir found) !" 1>&2 && exit 1
[...]
  #  build/check standard and extra configuration
  declare -a EXTRA_OPTS
  [ -e "$CONTAINERBASE/fstab" ] && EXTRA_OPTS=("-s lxc.mount=$CONTAINERBASE/fstab")     # use a central fstab if exist
  EXTRA_CONFIG="$CONTAINERBASE/config.$CONTAINER"
  [ -f "$EXTRA_CONFIG" ] && while read LINE; do
    LINE="${LINE%%#*}" # delete comments
    [ -z "$LINE" ] && continue # skip empty lines
    TAG=${LINE%%=*}; TAG=`echo $TAG`    # split and remove surrounding whitespace
    VALUE=${LINE##*=}; VALUE=`echo $VALUE`; eval VALUE=$VALUE; # same to and evaluate
    [ -n "$VALUE" ] && EXTRA_OPTS=("${EXTRA_OPTS[@]}" "-s $TAG=$VALUE") # push to array
  done <$EXTRA_CONFIG && LOG "extra config processed."
[...]
  LOG "starting container \"$CONTAINER\" ..."
  lxc-start \
    -n $CONTAINER -d \
    -l $LXCLOGLEVEL -o "/var/log/lxc/$CONTAINER.log" -c "/var/log/lxc/$CONTAINER.out" \
    -f $CONTAINERBASE/config \
    -s lxc.utsname=$CONTAINER \
    -s lxc.rootfs=$CONTAINERBASE/rootfs \
    -s lxc.pivotdir=$CONTAINER \
    -s lxc.network.link=$BRIDGE \
    -s lxc.network.hwaddr=$HWADDR \
    -s lxc.network.veth.pair=$CONTAINER \
    -s lxc.mount.entry="$CGROUPPATH/$CONTAINER cgroup none ro,bind 0 0" \
    "${EXTRA_OPTS[@]}"; RC=$?
[...]


An additional config file containing

	# sample
	lxc.cgroup.memory.limit_in_bytes = 9G
	lxc.cgroup.memory.soft_limit_in_bytes = 8G
	lxc.editor=$EDITOR  # just an senseless example for expansion

would be translated to the "extra options"

	-s lxc.cgroup.memory.limit_in_bytes=9G -s lxc.cgroup.memory.soft_limit_in_bytes=8G -s lxc.editor=vim






More information about the lxc-users mailing list