summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2013-04-19 10:56:11 +0200
committerThomas Haller <thaller@redhat.com>2014-06-30 17:42:08 +0200
commit39fdae3799744eb64a40616b02ffac89f7391161 (patch)
treea553b93b7bcfe5d818562d47bbaf9acfa799407b /contrib
parent2469601a0ef9a158ad1363044ca5e558169ab86c (diff)
downloadNetworkManager-39fdae3799744eb64a40616b02ffac89f7391161.tar.gz
contrib/nm-live-vm: set of scripts for building a live initramfs for NM testing
The scripts use Fedora to build a Fedora 18 (i386) live image, and pack it into a single self-extracting script, that can be easily distributed. $ sudo ./build [-n name] [-b branch/commit] will create name-bundle.sh with NM built of a specified NM branch(commit). (defaults are: name="nm-live-vm"; branch="master") Resulting nm-live-vm-bundle.sh can be run with almost any distro. The only requirement is qemu-kvm (and VNC (tigervnc) on RHEL).
Diffstat (limited to 'contrib')
-rw-r--r--contrib/fedora/nm-live-vm/README20
-rwxr-xr-xcontrib/fedora/nm-live-vm/build.sh88
-rwxr-xr-xcontrib/fedora/nm-live-vm/nm-make-script.sh17
-rwxr-xr-xcontrib/fedora/nm-live-vm/run.sh33
-rw-r--r--contrib/fedora/nm-live-vm/self-extract.sh19
5 files changed, 177 insertions, 0 deletions
diff --git a/contrib/fedora/nm-live-vm/README b/contrib/fedora/nm-live-vm/README
new file mode 100644
index 0000000000..c0da9e35be
--- /dev/null
+++ b/contrib/fedora/nm-live-vm/README
@@ -0,0 +1,20 @@
+NetworkManager live VM scripts
+------------------------------
+
+This set of scripts can be used to build a live initramfs image suitable
+for testing NetworkManager in a virtual environment. The scripts themselves
+are intended to be used by a power user who can adapt them to their needs.
+The result, on the contrary, is intended to be used by anyone who wants to
+play with NetworkManager on the command line.
+
+Building the initramfs image:
+
+sudo ./build.sh [-n name] [-b branch/commit]
+
+You may have to update ./build.sh to suit your distribution. The included
+is prepared for Fedora 18 and the image is also build using Fedora 18
+repositories.
+
+Then you can distribute the self-extracting archive and run in on other machines:
+
+./nm-live-vm-bundle.sh
diff --git a/contrib/fedora/nm-live-vm/build.sh b/contrib/fedora/nm-live-vm/build.sh
new file mode 100755
index 0000000000..ee8f6a551c
--- /dev/null
+++ b/contrib/fedora/nm-live-vm/build.sh
@@ -0,0 +1,88 @@
+#!/bin/bash
+
+NAME="nm-live-vm"
+NM_BRANCH="master"
+BUILD_PACKAGES="qemu febootstrap mock rpmdevtools"
+ARCH=i386
+ROOT="fedora-18-$ARCH"
+TREE="/var/lib/mock/$ROOT/root"
+PACKAGES="kernel passwd git autoconf automake libtool intltool gtk-doc libnl3-devel
+ dbus-glib-devel libgudev1-devel libuuid-devel nss-devel ppp-devel dhclient
+ bash-completion man-db man-pages vim-minimal"
+KERNEL_URL=http://kojipkgs.fedoraproject.org/packages/kernel/3.8.5/201.fc18/i686/kernel-3.8.5-201.fc18.i686.rpm
+KERNEL=`basename "${KERNEL_URL%.rpm}"`
+#RELEASE="http://kojipkgs.fedoraproject.org/packages/fedora-release/18/1/noarch/fedora-release-18-1.noarch.rpm"
+#PACKAGES="systemd bash"
+
+test "$EUID" -eq 0 || { echo "$0 must be run as root"; exit 1; }
+
+do_prepare() {
+ echo "Installing build packages..."
+ rpm -q $BUILD_PACKAGES || yum install $BUILD_PACKAGES || exit 1
+ echo
+}
+
+do_chroot() {
+ echo "Building the chroot..."
+ mock -r "$ROOT" --init || exit 1
+ mock -r "$ROOT" --install $PACKAGES || exit 1
+ #mock -r "$ROOT" --installdeps NetworkManager || exit 1
+ mock -r "$ROOT" --chroot cp /sbin/init /init || exit 1
+ echo
+}
+
+do_build() {
+ echo "Building NetworkManager..."
+ cp nm-make-script.sh $TREE/usr/local/sbin/nm-make-script || exit 1
+ mock -r "$ROOT" --chroot "/usr/local/sbin/nm-make-script $NM_BRANCH" || exit 1
+ test -f "$TREE/usr/sbin/NetworkManager" || ( echo "NetworkManager binary not found"; exit 1; )
+ echo
+}
+
+do_live_vm() {
+ echo "Preparing kernel and initrd..." || exit 1
+ mkdir -p $NAME || exit 1
+ cp $TREE/boot/vmlinuz* $NAME/vmlinuz || exit 1
+ { ( cd "$TREE" && find -print0 | cpio -o0c ) || exit 1; } | gzip > $NAME/initramfs.img || exit 1
+ cp run.sh $NAME/run.sh
+}
+
+do_archive() {
+ echo "Creating the archive..."
+ tar -czvf $NAME.tar.gz $NAME || exit 1
+ cat self-extract.sh ${NAME}.tar.gz > ${NAME}-bundle.sh || exit 1
+ chmod +x ${NAME}-bundle.sh || exit 1
+ echo "Successfully completed"
+ echo
+ echo "Now you can run and/or distribute: ${NAME}-bundle.sh"
+}
+
+
+if [ "$1" = "-n" ]; then
+ test -n "$2" || { echo "Name for initramfs is expected"; exit 1; }
+ NAME=$2
+ shift 2
+fi
+
+if [ "$1" = "-b" ]; then
+ test -n "$2" || { echo "NM branch (commit) is expected"; exit 1; }
+ NM_BRANCH=$2
+ shift 2
+fi
+
+if [ $# -eq 0 ]; then
+ do_prepare
+ do_chroot
+ do_build
+ do_live_vm
+ do_archive
+ exit 0
+fi
+
+while [ $# -gt 0 ]; do
+ do_$1; shift
+ exit 0
+done
+
+echo "Wrong number of arguments."
+exit 1
diff --git a/contrib/fedora/nm-live-vm/nm-make-script.sh b/contrib/fedora/nm-live-vm/nm-make-script.sh
new file mode 100755
index 0000000000..39d53f6cfc
--- /dev/null
+++ b/contrib/fedora/nm-live-vm/nm-make-script.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+BRANCH=${1:-"master"}
+COMMIT=origin/$BRANCH
+
+cd /
+passwd -d root
+test -d NetworkManager || git clone git://anongit.freedesktop.org/NetworkManager/NetworkManager || exit 1
+cd NetworkManager/ || exit 1
+git fetch
+git checkout -f $COMMIT || exit 1
+./autogen.sh --prefix=/ --exec-prefix=/usr --libdir=/usr/lib --datadir=/usr/share --mandir=/usr/share/man --enable-doc || exit 1
+make || exit 1
+#make check || exit 1
+make install || exit 1
+echo -e "[main]\nplugins=ifcfg-rh\n" > /etc/NetworkManager/NetworkManager.conf
+/bin/systemctl enable NetworkManager.service || exit 1
diff --git a/contrib/fedora/nm-live-vm/run.sh b/contrib/fedora/nm-live-vm/run.sh
new file mode 100755
index 0000000000..827cd0c1c1
--- /dev/null
+++ b/contrib/fedora/nm-live-vm/run.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+OS="Linux"
+if [ -f /etc/redhat-release ]; then
+ OS=`cat /etc/redhat-release | cut -d" " -f1,2,3,4`
+fi
+
+if [ "$OS" == "Red Hat Enterprise Linux" ]; then
+ # qemu-kvm is installed in /usr/libexec on RHEL6
+ # and redirects its output to VNC server
+
+ rpm -q qemu-kvm tigervnc >&2 || exit 1
+
+ PATH=$PATH:/usr/libexec
+
+ qemu-kvm -vnc :0 -m 2048 -net nic -net user -net nic -net user -net nic -net user -kernel vmlinuz -append video='1024x768' -initrd initramfs.img &
+
+ sleep 1
+ vncviewer localhost
+
+else
+ # all other distros
+
+ QEMU="qemu-kvm"
+ which $QEMU &>2 || {
+ ARCH=`uname -m`
+ which qemu-system-$ARCH &>2 || { echo "Neither '$QEMU' nor 'qemu-system-$ARCH' available"; exit 1; }
+ QEMU="qemu-system-$ARCH -enable-kvm"
+ }
+
+ $QEMU -m 2048 -net nic -net user -net nic -net user -net nic -net user -kernel vmlinuz -append video='1024x768' -initrd initramfs.img
+
+fi
diff --git a/contrib/fedora/nm-live-vm/self-extract.sh b/contrib/fedora/nm-live-vm/self-extract.sh
new file mode 100644
index 0000000000..ac84da53df
--- /dev/null
+++ b/contrib/fedora/nm-live-vm/self-extract.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+SCRIPT_NAME=`basename $0`
+NAME=${SCRIPT_NAME%%-bundle.sh}
+[ $SCRIPT_NAME = $NAME ] && NAME=nm-live-vm
+BUNDLE=`readlink -f "$0"` || exit 1
+TEMP=`mktemp -d "$PWD/$NAME.XXXXXXXXXX"` || exit 1
+
+echo "Extracting to: $TEMP"
+cd "$TEMP" || exit 1
+sed '1,/^__MARK__$/d' "$BUNDLE" > $NAME.tar.gz || exit 1
+tar -xvf $NAME.tar.gz || exit 1
+cd $NAME || exit 1
+
+./run.sh || exit 1
+
+rm -rf "$TEMP"
+exit 0
+__MARK__