lxc-init used to be under /usr/lib/lxc. Now it is under /usr/lib/<multiarch>/lxc, but old containers will still have it under /usr/lib/lxc. So search for a valid lxc-init to run.
[ This has been tested in a ubuntu package based on the debian one, but I haven't yet tested it against lxc.git. Note snprintf return values should be checked before this is committed. ] Does this look reasonable? Index: lxc-0.8.0~rc1/src/lxc/execute.c =================================================================== --- lxc-0.8.0~rc1.orig/src/lxc/execute.c 2012-03-01 21:42:19.000000000 +0000 +++ lxc-0.8.0~rc1/src/lxc/execute.c 2012-04-25 17:41:19.835015340 +0000 @@ -21,10 +21,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <sys/types.h> +#include <sys/stat.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> + #include "log.h" #include "start.h" @@ -35,12 +38,42 @@ int quiet; }; +/* historically lxc-init has been under /usr/lib/lxc. Now with + * multi-arch it can be under /usr/lib/$ARCH/lxc. Serge thinks + * it makes more sense to put it under /sbin. + * If /usr/lib/$ARCH/lxc exists and is used, then LXCINITDIR will + * point to it. + */ +static char *choose_init(void) +{ + char *retv = malloc(PATH_MAX); + int ret; + struct stat mystat; + if (!retv) + return NULL; + + snprintf(retv, PATH_MAX-1, LXCINITDIR "/lxc-init"); + ret = stat(retv, &mystat); + if (ret == 0) + return retv; + snprintf(retv, PATH_MAX-1, "/usr/lib/lxc/lxc-init"); + ret = stat(retv, &mystat); + if (ret == 0) + return retv; + snprintf(retv, PATH_MAX-1, "/sbin/lxc-init"); + ret = stat(retv, &mystat); + if (ret == 0) + return retv; + return NULL; +} + static int execute_start(struct lxc_handler *handler, void* data) { int j, i = 0; struct execute_args *my_args = data; char **argv; int argc = 0; + char *initpath; while (my_args->argv[argc++]); @@ -48,7 +81,10 @@ if (!argv) return 1; - argv[i++] = LXCINITDIR "/lxc-init"; + initpath = choose_init(); + if (!initpath) + return 1; + argv[i++] = initpath; if (my_args->quiet) argv[i++] = "--quiet"; argv[i++] = "--"; ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Lxc-users mailing list Lxc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-users