summaryrefslogtreecommitdiff
path: root/community-staging
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-02-15 20:35:25 +0000
committerroot <root@rshg054.dnsready.net>2012-02-15 20:35:25 +0000
commit650a87f5a67f6e71d4a56e52139a718d86ebbb46 (patch)
treea1fbbc8a6502d8f7fbee0529d283d788eb80f416 /community-staging
parent812b715ebd89fb9049df7000c721990084b525c6 (diff)
Wed Feb 15 20:35:25 UTC 2012
Diffstat (limited to 'community-staging')
-rw-r--r--community-staging/libvirt/PKGBUILD88
-rw-r--r--community-staging/libvirt/libvirt.install38
-rw-r--r--community-staging/libvirt/libvirtd-guests.conf.d11
-rw-r--r--community-staging/libvirt/libvirtd-guests.rc.d107
-rw-r--r--community-staging/libvirt/libvirtd.conf.d3
-rw-r--r--community-staging/libvirt/libvirtd.rc.d66
-rw-r--r--community-staging/libvirt/openbsd-netcat-default.patch36
-rw-r--r--community-staging/libvirt/unixperms.patch47
-rw-r--r--community-staging/libvirt/yajl-2.x.patch66
-rw-r--r--community-staging/netcf/PKGBUILD30
-rw-r--r--community-staging/netcf/netcf-0.1.7.patch426
11 files changed, 918 insertions, 0 deletions
diff --git a/community-staging/libvirt/PKGBUILD b/community-staging/libvirt/PKGBUILD
new file mode 100644
index 000000000..f5f73cd0e
--- /dev/null
+++ b/community-staging/libvirt/PKGBUILD
@@ -0,0 +1,88 @@
+# $Id: PKGBUILD 64468 2012-02-14 07:05:10Z spupykin $
+# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Contributor: Jonathan Wiersma <archaur at jonw dot org>
+
+pkgname=libvirt
+pkgver=0.9.10
+pkgrel=1
+pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)"
+arch=('i686' 'x86_64')
+url="http://libvirt.org/"
+license=('LGPL')
+depends=('e2fsprogs' 'gnutls' 'iptables' 'libxml2' 'parted' 'polkit' 'python2'
+ 'avahi' 'yajl' 'libpciaccess' 'udev' 'dbus-core' 'libxau' 'libxdmcp' 'libpcap'
+ 'curl' 'libsasl' 'libgcrypt' 'libgpg-error' 'openssl' 'libxcb' 'gcc-libs'
+ 'iproute2' 'netcf' 'libnl1')
+makedepends=('pkgconfig' 'lvm2')
+optdepends=('bridge-utils: for briged networking (default)'
+ 'dnsmasq: for NAT/DHCP for guests'
+ 'kvm'
+ 'openbsd-netcat: for remote management over ssh'
+ 'qemu'
+ 'radvd'
+ 'dmidecode')
+options=('emptydirs' '!libtool')
+backup=('etc/conf.d/libvirtd'
+ 'etc/conf.d/libvirtd-guests'
+ 'etc/libvirt/libvirtd.conf'
+ 'etc/libvirt/libvirt.conf'
+ 'etc/libvirt/qemu.conf'
+ 'etc/sasl2/libvirt.conf')
+install="libvirt.install"
+source=("http://libvirt.org/sources/$pkgname-$pkgver.tar.gz"
+ libvirtd.rc.d
+ libvirtd.conf.d
+ libvirtd-guests.rc.d
+ libvirtd-guests.conf.d
+ openbsd-netcat-default.patch
+ unixperms.patch
+ yajl-2.x.patch)
+md5sums=('a424bb793521e637349da47e93dd5fff'
+ 'c43244c40a0437038c82089618e7beaa'
+ '3ed0e24f5b5e25bf553f5427d64915e6'
+ '737ec24aa56871fbabfa892789457db4'
+ 'bc2971dacdbac967fc3474e50affc345'
+ 'b0be50eb9dfe4d133decf23b60880f7d'
+ 'db95aecdf2ccf3693fef5821cdcb7eba'
+ '5745bb8d0b254abb7a3528c66e03b0f9')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ # python2 fix
+ export PYTHON=`which python2`
+ for file in $(find . -name '*.py' -print); do
+ sed -i 's_#!.*/usr/bin/python_#!/usr/bin/python2_' $file
+ sed -i 's_#!.*/usr/bin/env.*python_#!/usr/bin/env python2_' $file
+ done
+
+# for more information on authentication see http://libvirt.org/auth.html
+# If you wish to have unix-permissions based access rather than only polkit
+# access, create a group called libvirt and uncomment the line below:
+# patch -Np1 -i "$srcdir"/unixperms.patch
+
+ [ $NOEXTRACT -eq 1 ] || patch -Np1 -i "$srcdir"/openbsd-netcat-default.patch
+
+ # fixes for yajl 2.0 API changes
+# [ $NOEXTRACT -eq 1 ] || patch -Np1 -i "$srcdir/yajl-2.x.patch"
+
+ export LDFLAGS=-lX11
+ [ -f Makefile ] || ./configure --prefix=/usr --libexec=/usr/lib/"$pkgname" \
+ --with-storage-lvm --without-xen --with-udev --without-hal --disable-static
+ find -name Makefile -exec sed -i 's#-L /usr#-L/usr#' {} \;
+ make -j1
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ make DESTDIR="$pkgdir" install
+
+ install -D -m755 "$srcdir"/libvirtd.rc.d "$pkgdir"/etc/rc.d/libvirtd
+ install -D -m644 "$srcdir"/libvirtd.conf.d "$pkgdir"/etc/conf.d/libvirtd
+
+ install -D -m755 "$srcdir"/libvirtd-guests.rc.d "$pkgdir"/etc/rc.d/libvirtd-guests
+ install -D -m644 "$srcdir"/libvirtd-guests.conf.d "$pkgdir"/etc/conf.d/libvirtd-guests
+
+ rm -rf $pkgdir/var/run
+}
diff --git a/community-staging/libvirt/libvirt.install b/community-staging/libvirt/libvirt.install
new file mode 100644
index 000000000..3881386d2
--- /dev/null
+++ b/community-staging/libvirt/libvirt.install
@@ -0,0 +1,38 @@
+_libvirt_setup() {
+ rm -f /usr/lib/python?.?/site-packages/libvirt.pyc
+ echo ">>> To use libvirt as a non-root user:"
+ echo ">>> Use polkit to grant access."
+ echo ">>> ...or change the access model in /etc/libvirt/libvirtd.conf."
+ echo ">>> (see unixperms.patch in PKGBUILD for help)"
+ echo ""
+}
+
+post_install() {
+ _libvirt_setup || return 1
+ echo ">>> Be sure to see optdepends as you may find some of them helpfull."
+ echo ">>> Especially: bridge-utils, dnsmasq, and hal."
+ echo ""
+ echo ">>> To start libvirtd run: '/etc/rc.d/libvirtd start' as root."
+ echo ">>> Add 'libvirtd' to daemons in /etc/rc.conf if you want it to load upon"
+ echo ">>> booting."
+ echo ""
+ /bin/true
+}
+
+post_upgrade() {
+ _libvirt_setup || return 1
+ echo ">>> To finish the upgrade, restart libvirtd by running the command:"
+ echo ">>> '/etc/rc.d/libvirtd restart' as root or rebooting."
+ echo ">>> You may also need to run 'rm -rf ~/.libvirt'"
+ echo ""
+ /bin/true
+}
+
+post_remove() {
+ rm -f /usr/lib/python[0-9].[0-9]/site-packages/libvirt.pyc
+ echo ">>> You may wish to delete the group 'libvirt' if it still exists."
+ echo ">>> It can be removed by running 'groupdel libvirt' as root."
+ echo ""
+ depmod -a
+ /bin/true
+}
diff --git a/community-staging/libvirt/libvirtd-guests.conf.d b/community-staging/libvirt/libvirtd-guests.conf.d
new file mode 100644
index 000000000..02a933715
--- /dev/null
+++ b/community-staging/libvirt/libvirtd-guests.conf.d
@@ -0,0 +1,11 @@
+LIBVIRTD_STOP_ACTION=suspend
+
+#LIBVIRTD_URI="-c qemu+ssh://user@host/system"
+LIBVIRTD_URI=""
+
+#LIBVIRTD_BYPASS_CACHE="--bypass-cache"
+LIBVIRTD_BYPASS_CACHE=""
+
+LIBVIRTD_START_DELAY=0
+
+LIBVIRTD_SHUTDOWN_TIMEOUT=3
diff --git a/community-staging/libvirt/libvirtd-guests.rc.d b/community-staging/libvirt/libvirtd-guests.rc.d
new file mode 100644
index 000000000..b4331964a
--- /dev/null
+++ b/community-staging/libvirt/libvirtd-guests.rc.d
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+. /etc/conf.d/libvirtd-guests
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+LIBVIRTD_LISTFILE="/var/state/libvirtd/vm-list"
+
+# get guest state by name
+libvirt_get_guest_state()
+{
+ virsh $LIBVIRTD_URI dominfo "$1" | grep -E '^State:' | awk '{print $2}'
+}
+
+# list IDs of running guests
+libvirt_list()
+{
+ virsh $LIBVIRTD_URI list | awk 'NR > 2 {print $2}'
+}
+
+# suspend guest by name
+libvirt_suspend()
+{
+ virsh $LIBVIRTD_URI $LIBVIRTD_BYPASS_CACHE managedsave "$1" >/dev/null
+ timeout=$LIBVIRTD_SHUTDOWN_TIMEOUT
+ while [ "$timeout" -gt 0 ]; do
+ sleep 1
+ timeout=$((timeout - 1))
+ state=`libvirt_get_guest_state "$1"`
+ [ "x$state" == "xshut" ] && return 0
+ done
+ return 1
+}
+
+# shutdown guest by name
+libvirt_shutdown()
+{
+ virsh $LIBVIRTD_URI shutdown "$1" >/dev/null
+ timeout=$LIBVIRTD_SHUTDOWN_TIMEOUT
+ while [ "$timeout" -gt 0 ]; do
+ sleep 1
+ timeout=$((timeout - 1))
+ state=`libvirt_get_guest_state "$1"`
+ [ "x$state" != "xshut" ] && return 0
+ done
+ return 1
+}
+
+# start guest by name
+libvirt_start()
+{
+ virsh $LIBVIRTD_URI $LIBVIRTD_BYPASS_CACHE start "$1" >/dev/null
+}
+
+# stop all guests
+libvirt_stop_all()
+{
+ mkdir -p `dirname $LIBVIRTD_LISTFILE`
+ echo -n >$LIBVIRTD_LISTFILE
+ for i in `libvirt_list`; do
+ if [ "x$LIBVIRTD_STOP_ACTION" == "xsuspend" ]; then
+ stat_busy "Suspending libvirtd/$i guest"
+ libvirt_suspend "$i"
+ else
+ stat_busy "Shutting libvirtd/$i guest down"
+ libvirt_shutdown "$i"
+ fi
+ [ $? -eq 0 ] && stat_done || stat_fail
+ echo $i >>$LIBVIRTD_LISTFILE
+ done
+}
+
+# start all guests
+libvirt_start_all()
+{
+ if [ -f $LIBVIRTD_LISTFILE ]; then
+ for i in `cat $LIBVIRTD_LISTFILE`; do
+ stat_busy "Starting/resuming libvirtd/$i guest"
+ libvirt_start "$i"
+ [ $? -eq 0 ] && { sleep $LIBVIRTD_START_DELAY; stat_done; } || stat_fail
+ done
+ fi
+ rm -f $LIBVIRTD_LISTFILE
+}
+
+# main
+LC_ALL=C
+LANG=C
+case "$1" in
+ start)
+ libvirt_start_all
+ add_daemon libvirtd-guests
+ ;;
+ stop)
+ libvirt_stop_all
+ rm_daemon libvirtd-guests
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart}"
+ ;;
+esac
+exit 0
diff --git a/community-staging/libvirt/libvirtd.conf.d b/community-staging/libvirt/libvirtd.conf.d
new file mode 100644
index 000000000..d4d25b47a
--- /dev/null
+++ b/community-staging/libvirt/libvirtd.conf.d
@@ -0,0 +1,3 @@
+LIBVIRTD_CONFIG="/etc/libvirt/libvirtd.conf"
+LIBVIRTD_ARGS="-p /var/run/libvirtd.pid"
+KRB5_KTNAME="/etc/libvirt/krb5.tab"
diff --git a/community-staging/libvirt/libvirtd.rc.d b/community-staging/libvirt/libvirtd.rc.d
new file mode 100644
index 000000000..193bffa9c
--- /dev/null
+++ b/community-staging/libvirt/libvirtd.rc.d
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/conf.d/libvirtd
+. /etc/rc.d/functions
+
+LIBVIRTD_CONFIG_ARGS=
+if [ -n "$LIBVIRTD_CONFIG" ]
+then
+ LIBVIRTD_CONFIG_ARGS="--config $LIBVIRTD_CONFIG"
+fi
+
+PID=`pidof -o %PPID /usr/sbin/libvirtd`
+case "$1" in
+ start)
+ stat_busy "Starting libvirtd"
+ export RADVD=/usr/sbin/radvd
+ for i in /var/run/libvirt/qemu /var/run/libvirt/lxc /var/run/libvirt/uml /var/run/libvirt/network; do
+ [ -d $i ] || mkdir -p $i
+ done
+ [ -z "$PID" ] && (
+ mkdir -p /var/{cache,run}/libvirt
+ rm -rf /var/cache/libvirt/*
+ KRB5_KTNAME=$KRB5_KTNAME \
+ /usr/sbin/libvirtd --daemon $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
+ )
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon libvirtd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping libvirtd"
+ [ ! -z "$PID" ] && (
+ kill $PID &> /dev/null
+ rm -rf /var/cache/libvirt/*
+ rm -f /var/run/libvirtd.pid
+ )
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon libvirtd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ reload)
+ stat_busy "Reloading libvirtd configuration"
+ [ ! -z "$PID" ] && kill -HUP $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart|reload}"
+ ;;
+esac
+exit 0
diff --git a/community-staging/libvirt/openbsd-netcat-default.patch b/community-staging/libvirt/openbsd-netcat-default.patch
new file mode 100644
index 000000000..a01b4f14e
--- /dev/null
+++ b/community-staging/libvirt/openbsd-netcat-default.patch
@@ -0,0 +1,36 @@
+diff -wbBur libvirt-0.9.7/src/qemu/qemu_migration.c libvirt-0.9.7.my/src/qemu/qemu_migration.c
+--- libvirt-0.9.7/src/qemu/qemu_migration.c 2011-10-31 07:46:04.000000000 +0400
++++ libvirt-0.9.7.my/src/qemu/qemu_migration.c 2011-11-08 15:46:10.000000000 +0400
+@@ -1589,7 +1589,7 @@
+ spec->dest.unix_socket.file);
+ } else {
+ const char *args[] = {
+- "nc", "-U", spec->dest.unix_socket.file, NULL
++ "nc.openbsd", "-U", spec->dest.unix_socket.file, NULL
+ };
+ ret = qemuMonitorMigrateToCommand(priv->mon, migrate_flags, args);
+ }
+diff -wbBur libvirt-0.9.7/src/remote/remote_driver.c libvirt-0.9.7.my/src/remote/remote_driver.c
+--- libvirt-0.9.7/src/remote/remote_driver.c 2011-11-08 07:53:30.000000000 +0400
++++ libvirt-0.9.7.my/src/remote/remote_driver.c 2011-11-08 15:46:10.000000000 +0400
+@@ -614,7 +614,7 @@
+ username,
+ !tty,
+ !verify,
+- netcat ? netcat : "nc",
++ netcat ? netcat : "nc.openbsd",
+ keyfile,
+ sockname)))
+ goto failed;
+diff -wbBur libvirt-0.9.7/src/rpc/virnetsocket.c libvirt-0.9.7.my/src/rpc/virnetsocket.c
+--- libvirt-0.9.7/src/rpc/virnetsocket.c 2011-11-08 07:53:30.000000000 +0400
++++ libvirt-0.9.7.my/src/rpc/virnetsocket.c 2011-11-08 15:46:31.000000000 +0400
+@@ -642,7 +642,7 @@
+ virCommandAddArgList(cmd, "-o", "StrictHostKeyChecking=no", NULL);
+
+ if (!netcat)
+- netcat = "nc";
++ netcat = "nc.openbsd";
+
+ virCommandAddArgList(cmd, nodename, "sh", "-c", NULL);
+
diff --git a/community-staging/libvirt/unixperms.patch b/community-staging/libvirt/unixperms.patch
new file mode 100644
index 000000000..b3fb86cf5
--- /dev/null
+++ b/community-staging/libvirt/unixperms.patch
@@ -0,0 +1,47 @@
+diff -ur libvirt-0.7.4-orig/daemon/libvirtd.conf libvirt-0.7.4-patched/daemon/libvirtd.conf
+--- libvirt-0.7.4-orig/daemon/libvirtd.conf 2009-11-23 03:10:33.398655655 -0800
++++ libvirt-0.7.4-patched/daemon/libvirtd.conf 2009-11-23 03:09:37.831189671 -0800
+@@ -78,14 +78,14 @@
+ # without becoming root.
+ #
+ # This is restricted to 'root' by default.
+-#unix_sock_group = "libvirt"
++unix_sock_group = "libvirt"
+
+ # Set the UNIX socket permissions for the R/O socket. This is used
+ # for monitoring VM status only
+ #
+ # Default allows any user. If setting group ownership may want to
+ # restrict this to:
+-#unix_sock_ro_perms = "0777"
++unix_sock_ro_perms = "0770"
+
+ # Set the UNIX socket permissions for the R/W socket. This is used
+ # for full management of VMs
+@@ -95,7 +95,7 @@
+ #
+ # If not using PolicyKit and setting group ownership for access
+ # control then you may want to relax this to:
+-#unix_sock_rw_perms = "0770"
++unix_sock_rw_perms = "0770"
+
+ # Set the name of the directory in which sockets will be found/created.
+ #unix_sock_dir = "/var/run/libvirt"
+@@ -126,7 +126,7 @@
+ #
+ # To restrict monitoring of domains you may wish to enable
+ # an authentication mechanism here
+-#auth_unix_ro = "none"
++auth_unix_ro = "none"
+
+ # Set an authentication scheme for UNIX read-write sockets
+ # By default socket permissions only allow root. If PolicyKit
+@@ -135,7 +135,7 @@
+ #
+ # If the unix_sock_rw_perms are changed you may wish to enable
+ # an authentication mechanism here
+-#auth_unix_rw = "none"
++auth_unix_rw = "none"
+
+ # Change the authentication scheme for TCP sockets.
+ #
diff --git a/community-staging/libvirt/yajl-2.x.patch b/community-staging/libvirt/yajl-2.x.patch
new file mode 100644
index 000000000..80d3edce0
--- /dev/null
+++ b/community-staging/libvirt/yajl-2.x.patch
@@ -0,0 +1,66 @@
+--- a/src/util/json.c 2011-03-24 03:10:26.000000000 -0400
++++ b/src/util/json.c 2011-04-25 20:01:29.354939116 -0400
+@@ -709,7 +709,7 @@
+
+ static int virJSONParserHandleNumber(void * ctx,
+ const char * s,
+- unsigned int l)
++ size_t l)
+ {
+ virJSONParserPtr parser = ctx;
+ char *str = strndup(s, l);
+@@ -735,7 +735,7 @@
+
+ static int virJSONParserHandleString(void * ctx,
+ const unsigned char * stringVal,
+- unsigned int stringLen)
++ size_t stringLen)
+ {
+ virJSONParserPtr parser = ctx;
+ virJSONValuePtr value = virJSONValueNewStringLen((const char *)stringVal,
+@@ -756,7 +756,7 @@
+
+ static int virJSONParserHandleMapKey(void * ctx,
+ const unsigned char * stringVal,
+- unsigned int stringLen)
++ size_t stringLen)
+ {
+ virJSONParserPtr parser = ctx;
+ virJSONParserStatePtr state;
+@@ -894,14 +894,14 @@
+ /* XXX add an incremental streaming parser - yajl trivially supports it */
+ virJSONValuePtr virJSONValueFromString(const char *jsonstring)
+ {
+- yajl_parser_config cfg = { 1, 1 };
+ yajl_handle hand;
+ virJSONParser parser = { NULL, NULL, 0 };
+ virJSONValuePtr ret = NULL;
+
+ VIR_DEBUG("string=%s", jsonstring);
+
+- hand = yajl_alloc(&parserCallbacks, &cfg, NULL, &parser);
++ hand = yajl_alloc(&parserCallbacks, NULL, &parser);
++ yajl_config(hand, yajl_allow_comments, 1);
+
+ if (yajl_parse(hand,
+ (const unsigned char *)jsonstring,
+@@ -1002,15 +1002,16 @@
+
+ char *virJSONValueToString(virJSONValuePtr object)
+ {
+- yajl_gen_config conf = { 0, " " }; /* Turns off pretty printing since QEMU can't cope */
+ yajl_gen g;
+ const unsigned char *str;
+ char *ret = NULL;
+- unsigned int len;
++ size_t len;
+
+ VIR_DEBUG("object=%p", object);
+
+- g = yajl_gen_alloc(&conf, NULL);
++ g = yajl_gen_alloc(NULL);
++ yajl_gen_config(g, yajl_gen_beautify, 0);
++ yajl_gen_config(g, yajl_gen_indent_string, " ");
+
+ if (virJSONValueToStringOne(object, g) < 0) {
+ virReportOOMError();
diff --git a/community-staging/netcf/PKGBUILD b/community-staging/netcf/PKGBUILD
new file mode 100644
index 000000000..cf8d6f053
--- /dev/null
+++ b/community-staging/netcf/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 64466 2012-02-14 06:53:16Z spupykin $
+# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Contributor: Aurélien Wailly <aurelien.wailly@gmail.com>
+
+pkgname=netcf
+pkgver=0.1.7
+pkgrel=3
+pkgdesc="A library for configuring network interfaces"
+arch=('i686' 'x86_64')
+license=('LGPL')
+url="https://fedorahosted.org/netcf/"
+depends=('augeas>=0.7.4' 'netcfg' 'libxslt' 'libxml2' 'libnl1')
+makedepends=('gcc')
+options=(!libtool)
+source=("https://fedorahosted.org/released/netcf/$pkgname-$pkgver.tar.gz"
+ netcf-0.1.7.patch)
+md5sums=('8e313b623c907eb035cf3948b71fecc2'
+ '0e88ee6813219e9e75a943444fe439f5')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ patch -Np1 -i ${srcdir}/netcf-0.1.7.patch
+ ./configure --prefix=/usr --disable-static
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR=${pkgdir} install
+}
diff --git a/community-staging/netcf/netcf-0.1.7.patch b/community-staging/netcf/netcf-0.1.7.patch
new file mode 100644
index 000000000..d4a4d31b7
--- /dev/null
+++ b/community-staging/netcf/netcf-0.1.7.patch
@@ -0,0 +1,426 @@
+diff -ur netcf-0.1.7.ori//data/xml/initscripts-get.xsl netcf-0.1.7/data/xml/initscripts-get.xsl
+--- netcf-0.1.7.ori//data/xml/initscripts-get.xsl 2009-10-04 08:18:41.000000000 +0200
++++ netcf-0.1.7/data/xml/initscripts-get.xsl 2010-12-08 14:54:28.891813397 +0100
+@@ -47,9 +47,12 @@
+ <xsl:template name="vlan-interface-common">
+ <xsl:variable name="iface" select="concat(vlan/interface/@name, '.', vlan/@tag)"/>
+
+- <xsl:attribute name="path">/files/etc/sysconfig/network-scripts/ifcfg-<xsl:value-of select="$iface"/></xsl:attribute>
+- <node label="DEVICE" value="{$iface}"/>
+- <node label="VLAN" value="yes"/>
++ <xsl:attribute name="path">/files/etc/network.d/ifcfg-<xsl:value-of select="$iface"/></xsl:attribute>
++ <node label="INTERFACE" value="{$iface}"/>
++ <node label="PHYS_INTERFACE" value="{vlan/interface/@name}"/>
++ <node label="VLAN" value="{vlan/@tag}"/>
++ <node label="CONNECTION" value="ethernet-iproute-vlan"/>
++ <node label="FLAG" value="false"/>
+ </xsl:template>
+
+ <xsl:template name='bare-vlan-interface'>
+@@ -68,6 +71,7 @@
+ <xsl:call-template name="startmode"/>
+ <xsl:call-template name="mtu"/>
+ <node label="TYPE" value="Bridge"/>
++ <node label="CONNECTION" value="bridge"/>
+ <xsl:call-template name="interface-addressing"/>
+ <xsl:if test="bridge/@stp">
+ <node label="STP" value="{bridge/@stp}"/>
+@@ -75,7 +79,11 @@
+ <xsl:if test="bridge/@delay">
+ <node label="DELAY" value="{bridge/@delay}"/>
+ </xsl:if>
++ <node label="DHCP_TIMEOUT" value="0"/>
++ <!--
++ We don't have to define interfaces separately
+ </tree>
++
+ <xsl:for-each select='bridge/interface'>
+ <tree>
+ <xsl:if test="@type = 'ethernet'">
+@@ -87,12 +95,29 @@
+ <xsl:if test="@type = 'bond'">
+ <xsl:call-template name="bare-bond-interface"/>
+ </xsl:if>
++
++ BRIDGE_INTERFACES= is defined with all interfaces
+ <node label="BRIDGE" value="{../../@name}"/>
++
++ <xsl:variable name="bridgeifaces" select="concat($bridgeifaces, '.', @name)"/>
+ </tree>
+ <xsl:if test="@type = 'bond'">
+ <xsl:call-template name="bond-slaves"/>
+ </xsl:if>
+ </xsl:for-each>
++ -->
++ <!-- <xsl:if test="count(ip) > 1"> -->
++ <node label="BRIDGE_INTERFACES">
++ <xsl:attribute name="value">
++ <xsl:text></xsl:text>
++ <xsl:for-each select="bridge/interface">
++ <xsl:value-of select="@name"/><xsl:value-of select="string(' ')"/>
++ </xsl:for-each>
++ <xsl:text></xsl:text>
++ </xsl:attribute>
++ </node>
++ <!-- </xsl:if> -->
++ </tree>
+ </xsl:template>
+
+ <!--
+@@ -138,8 +163,8 @@
+ Named templates, following the Relax NG syntax
+ -->
+ <xsl:template name="name-attr">
+- <xsl:attribute name="path">/files/etc/sysconfig/network-scripts/ifcfg-<xsl:value-of select="@name"/></xsl:attribute>
+- <node label="DEVICE" value="{@name}"/>
++ <xsl:attribute name="path">/files/etc/network.d/ifcfg-<xsl:value-of select="@name"/></xsl:attribute>
++ <node label="INTERFACE" value="{@name}"/>
+ </xsl:template>
+
+ <xsl:template name="mtu">
+@@ -153,6 +178,7 @@
+ <xsl:if test="mac">
+ <node label="HWADDR" value="{mac/@address}"/>
+ </xsl:if>
++ <node label="CONNECTION" value="{@type}"/>
+ <xsl:call-template name="startmode"/>
+ <xsl:call-template name="mtu"/>
+ </xsl:template>
+@@ -184,14 +210,14 @@
+ <xsl:template name="protocol-ipv4">
+ <xsl:choose>
+ <xsl:when test="dhcp">
+- <node label="BOOTPROTO" value="dhcp"/>
++ <node label="IP" value="dhcp"/>
+ <xsl:if test="dhcp/@peerdns">
+ <node label="PEERDNS" value="{dhcp/@peerdns}"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="ip">
+- <node label="BOOTPROTO" value="none"/>
+- <node label="IPADDR" value="{ip/@address}"/>
++ <node label="IP" value="static"/>
++ <node label="ADDR" value="{ip/@address}"/>
+ <xsl:if test="ip/@prefix">
+ <node label="NETMASK" value="{ipcalc:netmask(ip/@prefix)}"/>
+ </xsl:if>
+diff -ur netcf-0.1.7.ori//data/xml/initscripts-put.xsl netcf-0.1.7/data/xml/initscripts-put.xsl
+--- netcf-0.1.7.ori//data/xml/initscripts-put.xsl 2009-10-04 08:18:41.000000000 +0200
++++ netcf-0.1.7/data/xml/initscripts-put.xsl 2010-11-26 10:44:46.133757628 +0100
+@@ -47,7 +47,7 @@
+ </xsl:template>
+
+ <xsl:template name="bare-vlan-interface">
+- <xsl:variable name="name" select="node[@label = 'DEVICE']/@value"/>
++ <xsl:variable name="name" select="node[@label = 'INTERFACE']/@value"/>
+ <interface type="vlan">
+ <xsl:call-template name="name-attr"/>
+ <xsl:call-template name="vlan-device"/>
+@@ -55,7 +55,7 @@
+ </xsl:template>
+
+ <xsl:template name="vlan-device">
+- <xsl:variable name="name" select="node[@label = 'DEVICE']/@value"/>
++ <xsl:variable name="name" select="node[@label = 'INTERFACE']/@value"/>
+ <xsl:variable name="device" select="substring-before($name, '.')"/>
+ <xsl:variable name="tag" select="substring-after($name, '.')"/>
+ <vlan tag="{$tag}">
+@@ -70,7 +70,7 @@
+ match="tree[node[@label = 'TYPE' and @value = 'Bridge']]">
+ <interface type="bridge">
+ <!-- the bridge node itself -->
+- <xsl:variable name="iface" select="node[@label= 'DEVICE']/@value"/>
++ <xsl:variable name="iface" select="node[@label= 'INTERFACE']/@value"/>
+ <xsl:call-template name="name-attr"/>
+ <xsl:call-template name="startmode"/>
+ <xsl:call-template name="mtu"/>
+@@ -101,17 +101,17 @@
+ Bond
+ -->
+ <xsl:template name="bond-element">
+- <xsl:variable name="iface" select="node[@label= 'DEVICE']/@value"/>
++ <xsl:variable name="iface" select="node[@label= 'INTERFACE']/@value"/>
+ <bond>
+ <xsl:variable name="opts" select="node[@label = 'BONDING_OPTS']/@value"/>
+ <xsl:call-template name="bonding-opts">
+ <xsl:with-param name="opts" select="$opts"/>
+ </xsl:call-template>
+ <xsl:variable name="primary" select="bond:option($opts, 'primary')"/>
+- <xsl:for-each select="/descendant-or-self::*[node[@label = 'MASTER' and @value = $iface]][node[@label = 'DEVICE' and @value = $primary]]">
++ <xsl:for-each select="/descendant-or-self::*[node[@label = 'MASTER' and @value = $iface]][node[@label = 'INTERFACE' and @value = $primary]]">
+ <xsl:call-template name='bare-ethernet-interface'/>
+ </xsl:for-each>
+- <xsl:for-each select="/descendant-or-self::*[node[@label = 'MASTER' and @value = $iface]][node[@label = 'DEVICE' and @value != $primary]]">
++ <xsl:for-each select="/descendant-or-self::*[node[@label = 'MASTER' and @value = $iface]][node[@label = 'INTERFACE' and @value != $primary]]">
+ <xsl:call-template name='bare-ethernet-interface'/>
+ </xsl:for-each>
+ </bond>
+@@ -125,7 +125,7 @@
+ </xsl:template>
+
+ <xsl:template name="bond-interface"
+- match="tree[node[@label = 'DEVICE'][@value = //tree/node[@label = 'MASTER']/@value]][count(node[@label = 'BRIDGE']) = 0]">
++ match="tree[node[@label = 'INTERFACE'][@value = //tree/node[@label = 'MASTER']/@value]][count(node[@label = 'BRIDGE']) = 0]">
+ <interface type="bond">
+ <xsl:call-template name="name-attr"/>
+ <xsl:call-template name="startmode"/>
+@@ -154,7 +154,7 @@
+
+ <xsl:template name="name-attr">
+ <xsl:attribute name="name">
+- <xsl:value-of select="node[@label= 'DEVICE']/@value"/>
++ <xsl:value-of select="node[@label= 'INTERFACE']/@value"/>
+ </xsl:attribute>
+ </xsl:template>
+
+@@ -173,7 +173,7 @@
+ <xsl:variable name="uses_dhcp"
+ select="node[@label = 'BOOTPROTO']/@value = 'dhcp'"/>
+ <xsl:variable name="uses_static"
+- select="count(node[@label = 'IPADDR']) > 0"/>
++ select="count(node[@label = 'ADDR']) > 0"/>
+ <xsl:variable name="uses_ipv4" select="$uses_dhcp or $uses_static"/>
+ <xsl:if test="$uses_ipv4">
+ <protocol family="ipv4">
+@@ -186,7 +186,7 @@
+ </dhcp>
+ </xsl:when>
+ <xsl:when test="$uses_static">
+- <ip address="{node[@label = 'IPADDR']/@value}">
++ <ip address="{node[@label = 'ADDR']/@value}">
+ <xsl:choose>
+ <xsl:when test="node[@label = 'PREFIX']">
+ <xsl:attribute name="prefix"><xsl:value-of select="node[@label = 'PREFIX']/@value"/></xsl:attribute>
+diff -ur netcf-0.1.7.ori//src/drv_initscripts.c netcf-0.1.7/src/drv_initscripts.c
+--- netcf-0.1.7.ori//src/drv_initscripts.c 2010-09-23 14:13:13.000000000 +0200
++++ netcf-0.1.7/src/drv_initscripts.c 2010-12-08 13:57:02.027361706 +0100
+@@ -49,17 +49,20 @@
+ #include <libexslt/exslt.h>
+
+ static const char *const network_scripts_path =
+- "/files/etc/sysconfig/network-scripts";
++ //"/files/etc/sysconfig/network-scripts";
++ "/files/etc/network.d/*";
+
+ static const char *const ifcfg_path =
+- "/files/etc/sysconfig/network-scripts/*";
++ //"/files/etc/sysconfig/network-scripts/*";
++ "/files/etc/network.d/*";
+
+ /* Augeas should only load the files we are interested in */
+ static const struct augeas_pv augeas_xfm_common_pv[] = {
+ /* Ifcfg files */
+ { "/augeas/load/Ifcfg/lens", "Sysconfig.lns" },
+ { "/augeas/load/Ifcfg/incl",
+- "/etc/sysconfig/network-scripts/ifcfg-*" },
++ "/etc/network.d/ifcfg-*" },
++ //"/etc/sysconfig/network-scripts/ifcfg-*" },
+ { "/augeas/load/Ifcfg/excl[1]", "*~" },
+ { "/augeas/load/Ifcfg/excl[2]", "*.bak" },
+ { "/augeas/load/Ifcfg/excl[3]", "*.orig" },
+@@ -107,10 +110,10 @@
+ int nmatches;
+
+ nmatches = aug_fmt_match(ncf, NULL,
+- "%s[ DEVICE = '%s'"
++ "%s[ INTERFACE = '%s'"
+ " or BRIDGE = '%s'"
+ " or MASTER = '%s'"
+- " or MASTER = ../*[BRIDGE = '%s']/DEVICE ]/DEVICE",
++ " or MASTER = ../*[BRIDGE = '%s']/INTERFACE ]/INTERFACE",
+ ifcfg_path, name, name, name, name);
+ return nmatches > 0;
+ }
+@@ -173,7 +176,7 @@
+ aug = get_augeas(ncf);
+ ERR_BAIL(ncf);
+
+- ndevs = aug_fmt_match(ncf, &devs, "%s[DEVICE = '%s']",
++ ndevs = aug_fmt_match(ncf, &devs, "%s[INTERFACE = '%s']",
+ ifcfg_path, name);
+ ERR_COND_BAIL(ndevs < 0, ncf, EOTHER);
+
+@@ -296,7 +299,8 @@
+ int result = 0, ndevs;
+ char **devs = NULL;
+
+- ndevs = aug_fmt_match(ncf, &devs, "%s/DEVICE", ifcfg_path);
++ ndevs = aug_fmt_match(ncf, &devs, "%s/INTERFACE", ifcfg_path);
++ printf("%i\n", ndevs);
+ ERR_COND_BAIL(ndevs < 0, ncf, EOTHER);
+
+ result = uniq_ifcfg_paths(ncf, ndevs, devs, intf);
+@@ -453,11 +457,11 @@
+
+ int drv_list_interfaces(struct netcf *ncf, int maxnames, char **names,
+ unsigned int flags) {
+- return list_interface_ids(ncf, maxnames, names, flags, "DEVICE");
++ return list_interface_ids(ncf, maxnames, names, flags, "INTERFACE");
+ }
+
+ int drv_num_of_interfaces(struct netcf *ncf, unsigned int flags) {
+- return list_interface_ids(ncf, 0, NULL, flags, "DEVICE");
++ return list_interface_ids(ncf, 0, NULL, flags, "INTERFACE");
+ }
+
+ struct netcf_if *drv_lookup_by_name(struct netcf *ncf, const char *name) {
+@@ -599,8 +603,8 @@
+
+ ncf = nif->ncf;
+ ndevs = aug_fmt_match(ncf, &devs,
+- "%s[ DEVICE = '%s' or BRIDGE = '%s' or MASTER = '%s'"
+- " or MASTER = ../*[BRIDGE = '%s']/DEVICE ]/DEVICE",
++ "%s[ INTERFACE = '%s' or BRIDGE = '%s' or MASTER = '%s'"
++ " or MASTER = ../*[BRIDGE = '%s']/INTERFACE ]/INTERFACE",
+ ifcfg_path, nif->name, nif->name, nif->name, nif->name);
+ ERR_BAIL(ncf);
+
+@@ -745,7 +749,7 @@
+ int nmatches = 0;
+
+ nmatches = aug_fmt_match(ncf, NULL,
+- "%s[ DEVICE = '%s' and TYPE = 'Bridge']",
++ "%s[ INTERFACE = '%s' and TYPE = 'Bridge']",
+ ifcfg_path, name);
+ return nmatches > 0;
+ }
+@@ -758,7 +762,7 @@
+ ERR_BAIL(ncf);
+
+ nslaves = aug_fmt_match(ncf, slaves,
+- "%s[ BRIDGE = '%s' ]/DEVICE", ifcfg_path, name);
++ "%s[ BRIDGE = '%s' ]/INTERFACE", ifcfg_path, name);
+ ERR_BAIL(ncf);
+ for (int i=0; i < nslaves; i++) {
+ char *p = (*slaves)[i];
+@@ -790,8 +794,8 @@
+ /* The last or clause catches slaves of a bond that are enslaved to
+ * a bridge NAME */
+ r = xasprintf(&path,
+- "%s[ DEVICE = '%s' or BRIDGE = '%s' or MASTER = '%s' "
+- " or MASTER = ../*[BRIDGE = '%s']/DEVICE ]",
++ "%s[ INTERFACE = '%s' or BRIDGE = '%s' or MASTER = '%s' "
++ " or MASTER = ../*[BRIDGE = '%s']/INTERFACE ]",
+ ifcfg_path, name, name, name, name);
+ ERR_NOMEM(r < 0, ncf);
+
+@@ -967,7 +971,7 @@
+ for (int i = 0; i < nmatches; i++) {
+ if (!has_ifcfg_file(ncf, matches[i]))
+ continue;
+- r = xasprintf(&ifcfg, "%s[DEVICE = '%s']", ifcfg_path, matches[i]);
++ r = xasprintf(&ifcfg, "%s[INTERFACE = '%s']", ifcfg_path, matches[i]);
+ ERR_NOMEM(r < 0, ncf);
+
+ if (! is_slave(ncf, ifcfg))
+@@ -1023,7 +1027,10 @@
+ */
+
+ int drv_if_up(struct netcf_if *nif) {
+- static const char *const ifup = "ifup";
++ //static const char *const ifup = "ifup";
++ static const char *const ifup = "netcfg";
++ static const char *const ifprefix = "ifcfg-";
++ char ifname[strlen(nif->name) + sizeof(ifprefix)];
+ struct netcf *ncf = nif->ncf;
+ char **slaves = NULL;
+ int nslaves = 0;
+@@ -1035,11 +1042,24 @@
+ ERR_BAIL(ncf);
+
+ for (int i=0; i < nslaves; i++) {
+- run1(ncf, ifup, slaves[i]);
++ //run1(ncf, ifup, slaves[i]);
++ const char *const argv[] = {
++ ifup, "-u", slaves[i], NULL
++ };
++
++ run_program(ncf, argv);
+ ERR_BAIL(ncf);
+ }
+ }
+- run1(ncf, ifup, nif->name);
++ //run1(ncf, ifup, nif->name);
++ /* Interfaces name have to be equal to script under /etc/network.d */
++ strcpy(ifname, ifprefix);
++ strcat(ifname, nif->name);
++ const char *const argv[] = {
++ ifup, "-u", ifname, NULL
++ };
++
++ run_program(ncf, argv);
+ ERR_BAIL(ncf);
+ result = 0;
+ error:
+@@ -1048,13 +1068,23 @@
+ }
+
+ int drv_if_down(struct netcf_if *nif) {
+- static const char *const ifdown = "ifdown";
++ //static const char *const ifdown = "ifdown";
++ static const char *const ifdown = "netcfg";
++ static const char *const ifprefix = "ifcfg-";
++ char ifname[strlen(nif->name) + sizeof(ifprefix)];
+ struct netcf *ncf = nif->ncf;
+ char **slaves = NULL;
+ int nslaves = 0;
+ int result = -1;
+
+- run1(ncf, ifdown, nif->name);
++ //run1(ncf, ifdown, nif->name);
++ strcpy(ifname, ifprefix);
++ strcat(ifname, nif->name);
++ const char *const argv[] = {
++ ifdown, "-d", ifname, NULL
++ };
++
++ run_program(ncf, argv);
+ ERR_BAIL(ncf);
+ if (is_bridge(ncf, nif->name)) {
+ /* Bring up bridge slaves after the bridge */
+@@ -1062,7 +1092,12 @@
+ ERR_BAIL(ncf);
+
+ for (int i=0; i < nslaves; i++) {
+- run1(ncf, ifdown, slaves[i]);
++ //run1(ncf, ifdown, slaves[i]);
++ const char *const argvs[] = {
++ ifdown, "-d", slaves[i], NULL
++ };
++
++ run_program(ncf, argvs);
+ ERR_BAIL(ncf);
+ }
+ }
+diff -ur netcf-0.1.7.ori//tests/interface/bridge.xml~ netcf-0.1.7/tests/interface/bridge.xml~
+--- netcf-0.1.7.ori//tests/interface/bridge.xml~ 2009-10-13 19:14:53.000000000 +0200
++++ netcf-0.1.7/tests/interface/bridge.xml~ 2009-10-14 05:09:05.000000000 +0200
+@@ -2,10 +2,12 @@
+ <start mode="onboot"/>
+ <mtu size="1500"/>
+ <protocol family="ipv4">
+- <ip address="192.168.80.5" prefix="24"/>
++ <dhcp/>
+ </protocol>
+ <bridge stp="off" delay="0.01">
+ <interface type="ethernet" name="eth0">
++ <mac address="ab:bb:cc:dd:ee:ff"/>
+ </interface>
++ <interface type="ethernet" name="eth1"/>
+ </bridge>
+ </interface>
+diff -ur netcf-0.1.7.ori//tests/interface/vlan.xml~ netcf-0.1.7/tests/interface/vlan.xml~
+--- netcf-0.1.7.ori//tests/interface/vlan.xml~ 2010-07-30 06:02:39.000000000 +0200
++++ netcf-0.1.7/tests/interface/vlan.xml~ 2010-09-07 18:26:22.000000000 +0200
+@@ -1,9 +1,9 @@
+-<interface type="vlan" name="eth1.42">
++<interface type="vlan" name="eth0.42">
+ <start mode="onboot"/>
+ <protocol family="ipv4">
+ <dhcp peerdns="no"/>
+ </protocol>
+ <vlan tag="42">
+- <interface name="eth1"/>
++ <interface name="eth0"/>
+ </vlan>
+ </interface>