/** * virStorageBackendZFSVolModeNeeded: * * Checks if it's necessary to specify 'volmode' (i.e. that * we're working with BSD ZFS implementation). * * Returns 1 if 'volmode' is need, 0 if not needed, -1 on error */ static int virStorageBackendZFSVolModeNeeded(void) { virCommandPtr cmd = NULL; int ret = -1, exit = -1; char *error = NULL; /* 'zfs get' without arguments prints out * usage information to stderr, including * list of supported options, and exits with * exit code 2 */ cmd = virCommandNewArgList(ZFS, "get", NULL); virCommandAddEnvString(cmd, "LC_ALL=C"); virCommandSetErrorBuffer(cmd, &error); ret = virCommandRun(cmd, &exit); if ((ret < 0) || (exit != 2)) { VIR_WARN("Command 'zfs get' either failed " "to run or exited with unexpected status"); goto cleanup; } if (strstr(error, " volmode ")) ret = 1; else ret = 0; cleanup: virCommandFree(cmd); VIR_FREE(error); return ret; }
/** * lxcContainerBuildInitCmd: * @vmDef: pointer to vm definition structure * * Build a virCommandPtr for launching the container 'init' process * * Returns a virCommandPtr */ static virCommandPtr lxcContainerBuildInitCmd(virDomainDefPtr vmDef) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virCommandPtr cmd; virUUIDFormat(vmDef->uuid, uuidstr); cmd = virCommandNew(vmDef->os.init); virCommandAddEnvString(cmd, "PATH=/bin:/sbin"); virCommandAddEnvString(cmd, "TERM=linux"); virCommandAddEnvString(cmd, "container=lxc-libvirt"); virCommandAddEnvPair(cmd, "LIBVIRT_LXC_UUID", uuidstr); virCommandAddEnvPair(cmd, "LIBVIRT_LXC_NAME", vmDef->name); if (vmDef->os.cmdline) virCommandAddEnvPair(cmd, "LIBVIRT_LXC_CMDLINE", vmDef->os.cmdline); return cmd; }
static int openvzExtractVersionInfo(const char *cmdstr, int *retversion) { int ret = -1; unsigned long version; char *help = NULL; char *tmp; virCommandPtr cmd = virCommandNewArgList(cmdstr, "--help", NULL); if (retversion) *retversion = 0; virCommandAddEnvString(cmd, "LC_ALL=C"); virCommandSetOutputBuffer(cmd, &help); if (virCommandRun(cmd, NULL) < 0) goto cleanup; tmp = help; /* expected format: vzctl version <major>.<minor>.<micro> */ if ((tmp = STRSKIP(tmp, "vzctl version ")) == NULL) goto cleanup; if (virParseVersionString(tmp, &version, true) < 0) goto cleanup; if (retversion) *retversion = version; ret = 0; cleanup: virCommandFree(cmd); VIR_FREE(help); return ret; }