Hi Florian,
Hi everyone,
This patch is to allow using the "mount" type in the "filesystem" tag
for OpenVZ domains.
Example:
...
<filesystem type='mount'>
<source dir='/path/to/filesystem/directory/' />
<target dir='/path/to/pivot/root/' />
</filesystem>
...
This is my first patch to an external project, so don't spare me if I
got things wrong :)
Also, I'm curious for suggestions as to how I could allow for the target
not to be specified in the XML. Because in this case OpenVZ just makes a
temporary pivot root in "/var/lib/vz/root/" and that is probably
sufficient for most people, who might not want to have to explicitly
create a pivot root somewhere, just for mounting the filesystem while
it's running.
I was thinking either allow for the target tag not to be specified, or
add an "auto" attribute to target. Which one sounds better ?
Thanks,
Florian
diff --git a/src/openvz_conf.c b/src/openvz_conf.c
index ff3d607..33fb259 100644
--- a/src/openvz_conf.c
+++ b/src/openvz_conf.c
@@ -314,6 +314,41 @@ error:
}
+/* utility function to replace 'from' by 'to' in 'str' */
+static char*
+openvz_replace(const char* str,
+ const char* from,
+ int to) {
+ char tmp[4096];
+ char* offset = tmp;
+ int len = strlen(str);
+ int fromLen = strlen(from);
+ int r,i,maxcmp,left = sizeof(tmp);
+
+ if(!from)
+ return NULL;
+
+ for(i = 0; i < len && left; ++i) {
+ /* compare first caracters to limit useless full comparisons */
+ if(*from == str[i]) {
+ maxcmp = (fromLen > len-i) ? len-i : fromLen;
+ if(strncmp(from, str+i, maxcmp) == 0) {
+ r = snprintf(offset, left, "%d", to);
+ offset += r;
+ i += fromLen - 1;
+ continue;
+ }
+ }
+ *offset++ = str[i];
+ left = sizeof(tmp) - (offset-tmp);
+ }
search can be simplified by strstr(str, from)
+
+ tmp[sizeof(tmp)-left] = '\0';
+
+ return strdup(tmp);
+}
+
+
diff --git a/src/openvz_conf.h b/src/openvz_conf.h
index 8e02056..da9bfb4 100644
--- a/src/openvz_conf.h
+++ b/src/openvz_conf.h
@@ -42,6 +42,7 @@ enum { OPENVZ_WARN, OPENVZ_ERR };
/* OpenVZ commands - Replace with wrapper scripts later? */
#define VZLIST "/usr/sbin/vzlist"
#define VZCTL "/usr/sbin/vzctl"
+#define VZ_DEFAULT_CONF_FILE "ve-vps.basic.conf-sample"
really, default config is specified in /etc/sysconfig/vz
# grep -R CONFIGFILE /etc/sysconfig/vz
CONFIGFILE="vps.basic"
config file is calculating by
snprintf(path, sizeof(path), VPS_CONF_DIR "ve-%s.conf-sample",
config);
#define VZCTL_BRIDGE_MIN_VERSION ((3 * 1000 * 1000) + (0 * 1000) + 22 + 1)