On 04/29/13 14:23, Daniel Baumann wrote:
> On 04/29/2013 02:17 PM, Harald Dunkel wrote:
>> The lxc* scripts don't.
> 
> patches welcome.
> 

See attachment. I tried to match your style on the
scripts in debian.

I have forwarded the patches for -P in upstream's
scripts also to the lxc-devel mailing list. Upstream
refused the patch for lxc-clone, because this script
is going to be replaced by a binary executable, but
the rest has been accepted, afaics.

Hope this helps. Please mail if there is something
weird and should be changed/improved.


Many thanx
Harri


diff -urN lxc-0.9.0.orig/debian/local/lxc-backup lxc-0.9.0/debian/local/lxc-backup
--- lxc-0.9.0.orig/debian/local/lxc-backup	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/local/lxc-backup	2013-04-30 08:24:05.000000000 +0200
@@ -12,14 +12,51 @@
 . /usr/share/lxc/lxc.functions
 
 _LXC_DIRECTORY="${lxc_path}"
-_CONTAINER="${1}"
 
-if [ -n "${_CONTAINER}" ]
+_OPTIONS="$(getopt -o n:,P: -l name:,lxcpath: -- "${@}")"
+
+if [ "${?}" -ne 0 ]
+then
+	echo "Usage: $(basename ${0}) -n|--name CONTAINER [-P|--lxcpath DIRECTORY]" >&2
+	exit 1
+fi
+
+eval set -- "${_OPTIONS}"
+
+while true
+do
+	case "${1}" in
+		-n|--name)
+			_CONTAINER="${2}"
+			shift 2
+			;;
+
+	        -P|--lxcpath)
+			_LXC_DIRECTORY="${2}"
+			shift 2
+			;;
+
+		--)
+			shift
+			break
+			;;
+
+		*)
+			echo "E: $(basename ${0}): internal error ${0}" >&2
+			exit 1
+			;;
+	esac
+done
+
+if [ -z "${_CONTAINER}" ]
+then
+	echo "E: $(basename ${0}): missing container name, use --name option" >&2
+	exit 1
+fi
+
+if [ ! -d "${_LXC_DIRECTORY}" ]
 then
-	shift
-else
-#	echo "Usage: ${0} CONTAINER [BACKUP_NUMBER]"
-	echo "Usage: ${0} CONTAINER"
+	echo "E: ${_LXC_DIRECTORY}: no such directory." >&2
 	exit 1
 fi
 
@@ -35,13 +72,13 @@
 	exit 1
 fi
 
-if ! lxc-info -n ${_CONTAINER} 2>&1 | grep -qs "STOPPED"
+if ! lxc-info -n ${_CONTAINER} -P "${_LXC_DIRECTORY}" 2>&1 | grep -qs "STOPPED"
 then
 	echo "E: ${_CONTAINER} - not stopped" >&2
 	exit 1
 fi
 
-if [ -e "${_LXC_DIRECTORY}/${_CONTAINER}/rootfs" ]
+if [ -d "${_LXC_DIRECTORY}/${_CONTAINER}/rootfs" ]
 then
 #	if [ -n "${2}" ]
 #	then
diff -urN lxc-0.9.0.orig/debian/local/lxc-halt lxc-0.9.0/debian/local/lxc-halt
--- lxc-0.9.0.orig/debian/local/lxc-halt	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/local/lxc-halt	2013-04-30 10:18:41.000000000 +0200
@@ -13,11 +13,11 @@
 
 _LXC_DIRECTORY="${lxc_path}"
 
-_OPTIONS="$(getopt -o n: -l name: -- "${@}")"
+_OPTIONS="$(getopt -o n:,P: -l name:,lxcpath: -- "${@}")"
 
 if [ "${?}" -ne 0 ]
 then
-	echo "Usage: $(basename ${0}) -n|--name CONTAINER" >&2
+	echo "Usage: $(basename ${0}) -n|--name CONTAINER [-P|--lxcpath DIRECTORY]" >&2
 	exit 1
 fi
 
@@ -31,6 +31,11 @@
 			shift 2
 			;;
 
+	        -P|--lxcpath)
+			_LXC_DIRECTORY="${2}"
+			shift 2
+			;;
+
 		--)
 			shift
 			break
@@ -49,7 +54,13 @@
 	exit 1
 fi
 
-if lxc-info -n ${_CONTAINER} 2>&1 | grep -qs "STOPPED"
+if [ ! -d "${_LXC_DIRECTORY}" ]
+then
+	echo "E: ${_LXC_DIRECTORY}: no such directory." >&2
+	exit 1
+fi
+
+if lxc-info -n ${_CONTAINER} -P "${_LXC_DIRECTORY}" 2>&1 | grep -qs "STOPPED"
 then
 	echo "P: ${_CONTAINER} - already stopped"
 	exit 0
@@ -57,7 +68,7 @@
 
 if [ -e "${_LXC_DIRECTORY}/${_CONTAINER}/rootfs" ]
 then
-	chroot "${_LXC_DIRECTORY}/{_CONTAINER}/rootfs" telinit 0
+	chroot "${_LXC_DIRECTORY}/${_CONTAINER}/rootfs" telinit 0
 else
 	echo "E: ${_LXC_DIRECTORY}/${_CONTAINER}/rootfs - no such directory"
 	exit 1
diff -urN lxc-0.9.0.orig/debian/local/lxc-list lxc-0.9.0/debian/local/lxc-list
--- lxc-0.9.0.orig/debian/local/lxc-list	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/local/lxc-list	2013-04-29 16:29:54.000000000 +0200
@@ -9,6 +9,40 @@
 
 set -e
 
+. /usr/share/lxc/lxc.functions
+
+_LXC_DIRECTORY="${lxc_path}"
+
+_OPTIONS="$(getopt -o P: -l lxcpath: -- "${@}")"
+
+if [ "${?}" -ne 0 ]
+then
+	echo "Usage: $(basename ${0}) [-P|--lxcpath DIRECTORY]" >&2
+	exit 1
+fi
+
+eval set -- "${_OPTIONS}"
+
+while true
+do
+	case "${1}" in
+	        -P|--lxcpath)
+			_LXC_DIRECTORY="${2}"
+			shift 2
+			;;
+
+		--)
+			shift
+			break
+			;;
+
+		*)
+			echo "E: $(basename ${0}): internal error ${0}" >&2
+			exit 1
+			;;
+	esac
+done
+
 if [ ! -x "$(which lxc-info 2>/dev/null)" ]
 then
 	echo "E: lxc-info - no such file" >&2
@@ -19,9 +53,9 @@
 do
 	echo ${_STATUS}
 
-	for _CONTAINER in $(lxc-ls)
+	for _CONTAINER in $(lxc-ls -P "${_LXC_DIRECTORY}")
 	do
-		if lxc-info -n ${_CONTAINER} 2>&1 | grep -qs "${_STATUS}"
+		if lxc-info -n ${_CONTAINER} -P "${_LXC_DIRECTORY}" 2>&1 | grep -qs "${_STATUS}"
 		then
 			printf "  %-55.50s" "${_CONTAINER}"
 
diff -urN lxc-0.9.0.orig/debian/local/lxc-ls lxc-0.9.0/debian/local/lxc-ls
--- lxc-0.9.0.orig/debian/local/lxc-ls	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/local/lxc-ls	2013-04-30 08:08:08.000000000 +0200
@@ -13,7 +13,37 @@
 
 _LXC_DIRECTORY="${lxc_path}"
 
-if [ ! -e "${_LXC_DIRECTORY}" ]
+_OPTIONS="$(getopt -o P: -l lxcpath: -- "${@}")"
+
+if [ "${?}" -ne 0 ]
+then
+	echo "Usage: $(basename ${0}) [-P|--lxcpath DIRECTORY]" >&2
+	exit 1
+fi
+
+eval set -- "${_OPTIONS}"
+
+while true
+do
+	case "${1}" in
+	        -P|--lxcpath)
+			_LXC_DIRECTORY="${2}"
+			shift 2
+			;;
+
+		--)
+			shift
+			break
+			;;
+
+		*)
+			echo "E: $(basename ${0}): internal error ${0}" >&2
+			exit 1
+			;;
+	esac
+done
+
+if [ ! -d "${_LXC_DIRECTORY}" ]
 then
 	echo "E: ${_LXC_DIRECTORY}: no such directory." >&2
 	exit 1
diff -urN lxc-0.9.0.orig/debian/local/lxc-restore lxc-0.9.0/debian/local/lxc-restore
--- lxc-0.9.0.orig/debian/local/lxc-restore	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/local/lxc-restore	2013-04-30 08:24:05.000000000 +0200
@@ -12,14 +12,51 @@
 . /usr/share/lxc/lxc.functions
 
 _LXC_DIRECTORY="${lxc_path}"
-_CONTAINER="${1}"
 
-if [ -n "${_CONTAINER}" ]
+_OPTIONS="$(getopt -o n:,P: -l name:,lxcpath: -- "${@}")"
+
+if [ "${?}" -ne 0 ]
+then
+	echo "Usage: $(basename ${0}) -n|--name CONTAINER [-P|--lxcpath DIRECTORY]" >&2
+	exit 1
+fi
+
+eval set -- "${_OPTIONS}"
+
+while true
+do
+	case "${1}" in
+		-n|--name)
+			_CONTAINER="${2}"
+			shift 2
+			;;
+
+	        -P|--lxcpath)
+			_LXC_DIRECTORY="${2}"
+			shift 2
+			;;
+
+		--)
+			shift
+			break
+			;;
+
+		*)
+			echo "E: $(basename ${0}): internal error ${0}" >&2
+			exit 1
+			;;
+	esac
+done
+
+if [ -z "${_CONTAINER}" ]
+then
+	echo "E: $(basename ${0}): missing container name, use --name option" >&2
+	exit 1
+fi
+
+if [ ! -d "${_LXC_DIRECTORY}" ]
 then
-	shift
-else
-#	echo "Usage: ${0} CONTAINER [BACKUP_NUMBER]"
-	echo "Usage: ${0} CONTAINER"
+	echo "E: ${_LXC_DIRECTORY}: no such directory." >&2
 	exit 1
 fi
 
@@ -35,7 +72,7 @@
 	exit 1
 fi
 
-if ! lxc-info -n ${_CONTAINER} 2>&1 | grep -qs "STOPPED"
+if ! lxc-info -n ${_CONTAINER} -P "${_LXC_DIRECTORY}" 2>&1 | grep -qs "STOPPED"
 then
 	echo "E: ${_CONTAINER} - not stopped" >&2
 	exit 1
diff -urN lxc-0.9.0.orig/debian/lxc.init lxc-0.9.0/debian/lxc.init
--- lxc-0.9.0.orig/debian/lxc.init	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/lxc.init	2013-04-30 14:41:53.000000000 +0200
@@ -26,9 +26,9 @@
 
 for _CONFFILE in /etc/default/lxc /etc/default/lxc.d/*
 do
-	if [ -e /etc/default/lxc ]
+	if [ -e ${_CONFFILE} ]
 	then
-		. /etc/default/lxc || true
+		. ${_CONFFILE} || true
 	fi
 done
 
@@ -87,7 +87,7 @@
 			*)
 				log_progress_msg "${_CONTAINER}"
 
-				lxc ${_PROGRAM} ${_CONTAINER} ${_OPTIONS}
+				lxc-${_PROGRAM} -n ${_CONTAINER} ${_OPTIONS}
 				;;
 		esac
 	done
diff -urN lxc-0.9.0.orig/debian/patches/0008-lxc-shutdown.patch lxc-0.9.0/debian/patches/0008-lxc-shutdown.patch
--- lxc-0.9.0.orig/debian/patches/0008-lxc-shutdown.patch	1970-01-01 01:00:00.000000000 +0100
+++ lxc-0.9.0/debian/patches/0008-lxc-shutdown.patch	2013-05-06 11:00:44.620443837 +0200
@@ -0,0 +1,73 @@
+--- a/src/lxc/lxc-shutdown.in
++++ b/src/lxc/lxc-shutdown.in
+@@ -18,13 +18,17 @@
+ 
+ set -e
+ 
++lxcpath=/var/lib/lxc
++test ! -f @DATADIR@/lxc/lxc.conf || . @DATADIR@/lxc/lxc.conf
++
+ usage() {
+-    echo "usage: lxc-shutdown -n name [-w] [-r]"
++    echo "usage: lxc-shutdown -n name [-w] [-r] [-P lxcpath]"
+     echo "  Cleanly shut down a container."
+     echo "  -w: wait for shutdown to complete."
+     echo "  -r: reboot (ignore -w)."
+     echo "  -t timeout: wait at most timeout seconds (implies -w), then kill"
+     echo "              the container."
++    echo "  -P lxcpath: path to the lxc container directories."
+ }
+ 
+ alarm() {
+@@ -38,7 +42,7 @@
+ dolxcstop()
+ {
+     echo "Calling lxc-stop on $lxc_name"
+-    lxc-stop -n $lxc_name
++    lxc-stop -n $lxc_name -P "$lxcpath"
+     exit 0
+ }
+ 
+@@ -82,6 +86,12 @@
+         dowait=1
+         shift
+         ;;
++    -P|--lxcpath)
++        optarg_check $opt "$1"
++        lxcpath=$1
++        dowait=1
++        shift
++        ;;
+     --)
+         break;;
+     -?)
+@@ -104,6 +114,11 @@
+     exit 1
+ fi
+ 
++if [ ! -d "$lxcpath" ]; then
++    echo "$lxcpath: no such directory"
++    exit 1
++fi
++
+ if [ "$(id -u)" != "0" ]; then
+    echo "This command has to be run as root"
+    exit 1
+@@ -112,7 +127,7 @@
+ which lxc-info > /dev/null 2>&1 || { echo "lxc-info not found."; exit 1; }
+ which lxc-wait > /dev/null 2>&1 || { echo "lxc-wait not found."; exit 1; }
+ 
+-pid=`lxc-info -n $lxc_name -p 2>/dev/null | awk '{ print $2 }'`
++pid=`lxc-info -n $lxc_name  -P "$lxcpath" -p 2>/dev/null | awk '{ print $2 }'`
+ if [ "$pid" = "-1" ]; then
+     echo "$lxc_name is not running"
+     exit 1
+@@ -135,7 +150,7 @@
+     alarmpid=$!
+ fi
+ 
+-while ! lxc-info -n $lxc_name --state-is STOPPED; do
++while ! lxc-info -n $lxc_name -P "$lxcpath" --state-is STOPPED; do
+     sleep 1
+ done
+ 
diff -urN lxc-0.9.0.orig/debian/patches/0009-lxc-clone.patch lxc-0.9.0/debian/patches/0009-lxc-clone.patch
--- lxc-0.9.0.orig/debian/patches/0009-lxc-clone.patch	1970-01-01 01:00:00.000000000 +0100
+++ lxc-0.9.0/debian/patches/0009-lxc-clone.patch	2013-05-02 08:40:32.000000000 +0200
@@ -0,0 +1,87 @@
+--- a/src/lxc/lxc-clone.in
++++ b/src/lxc/lxc-clone.in
+@@ -25,7 +25,7 @@
+ 
+ usage() {
+     echo "usage: $(basename $0) -o ORIG_NAME -n NEW_NAME [-s] [-h] [-L FS_SIZE]" >&2
+-    echo "        [-v VG_NAME] [-p LV_PREFIX] [-t FS_TYPE]" >&2
++    echo "        [-P LXC_PATH] [-v VG_NAME] [-p LV_PREFIX] [-t FS_TYPE]" >&2
+ }
+ 
+ help() {
+@@ -38,6 +38,7 @@
+     echo "  -n NEW_NAME    specify the name of the new container" >&2
+     echo "  -s             make the new rootfs a snapshot of the original" >&2
+     echo "  -L FS_SIZE     specify the new filesystem size (default: same as original)" >&2
++    echo "  -P LXC_PATH    use an alternate container path (default: @LXCPATH@)" >&2
+     echo "  -v VG_NAME     specify the new LVM volume group name (default: lxc)" >&2
+     echo "  -p LV_PREFIX   add a prefix to new LVM logical volume names" >&2
+     echo "  -t FS_TYPE     specify the new filesystem type (default: ext3;" >&2
+@@ -83,6 +84,11 @@
+             lxc_size=$1
+             shift
+             ;;
++        -P|--lxcpath)
++            optarg_check $opt $1
++            lxc_path="$1"
++            shift
++            ;;
+         -t|--fstype)
+             optarg_check $opt $1
+             fstype=$1
+@@ -167,9 +173,9 @@
+         fi
+         lvremove -f $rootdev || true
+     fi
+-    ${bindir}/lxc-destroy -n $lxc_new || true
++    ${bindir}/lxc-destroy -n $lxc_new -P "$lxc_path" || true
+     if [ $frozen -eq 1 ]; then
+-        lxc-unfreeze -n $lxc_orig
++        lxc-unfreeze -n $lxc_orig -P "$lxc_path"
+     fi
+     echo "$(basename $0): aborted" >&2
+     exit 1
+@@ -196,7 +202,7 @@
+ rootfs=`echo $oldroot |sed "s/$lxc_orig/$lxc_new/"`
+ 
+ container_running=True
+-lxc-info -n $lxc_orig --state-is RUNNING || container_running=False
++lxc-info -n $lxc_orig -P "$lxc_path" --state-is RUNNING || container_running=False
+ 
+ sed -i '/lxc.rootfs/d' $lxc_path/$lxc_new/config
+ if [ -b $oldroot ]; then
+@@ -205,7 +211,7 @@
+     lvm=TRUE
+     # ok, create a snapshot of the lvm device
+     if [ $container_running = "True" ]; then
+-        lxc-freeze -n $lxc_orig
++        lxc-freeze -n $lxc_orig -P "$lxc_path"
+         frozen=1
+     fi
+     if [ $lxc_size = "_unset" ]; then
+@@ -219,7 +225,7 @@
+     }
+ 
+     if [ $container_running = "True" ]; then
+-        lxc-unfreeze -n $lxc_orig
++        lxc-unfreeze -n $lxc_orig -P "$lxc_path"
+         frozen=0
+     fi
+     if [ $snapshot = "no" ]; then
+@@ -274,14 +280,14 @@
+         cleanup
+     fi
+     if [ $container_running = "True" ]; then
+-        lxc-freeze -n $lxc_orig
++        lxc-freeze -n $lxc_orig -P "$lxc_path"
+         frozen=1
+     fi
+     mkdir -p $rootfs/
+     rsync -Hax $oldroot/ $rootfs/
+     echo "lxc.rootfs = $rootfs" >> $lxc_path/$lxc_new/config
+     if [ $container_running = "True" ]; then
+-        lxc-unfreeze -n $lxc_orig
++        lxc-unfreeze -n $lxc_orig -P "$lxc_path"
+         frozen=0
+     fi
+ fi
diff -urN lxc-0.9.0.orig/debian/patches/0010-lxc-create.patch lxc-0.9.0/debian/patches/0010-lxc-create.patch
--- lxc-0.9.0.orig/debian/patches/0010-lxc-create.patch	1970-01-01 01:00:00.000000000 +0100
+++ lxc-0.9.0/debian/patches/0010-lxc-create.patch	2013-05-02 08:48:33.000000000 +0200
@@ -0,0 +1,11 @@
+--- a/src/lxc/lxc-create.in
++++ b/src/lxc/lxc-create.in
+@@ -264,7 +264,7 @@
+         btrfs subvolume delete "$rootfs"
+     fi
+ 
+-    ${bindir}/lxc-destroy -n $lxc_name
++    ${bindir}/lxc-destroy -n $lxc_name -P "$lxc_path"
+     echo "$(basename $0): aborted" >&2
+     exit 1
+ }
diff -urN lxc-0.9.0.orig/debian/patches/0011-lxc-netstat.patch lxc-0.9.0/debian/patches/0011-lxc-netstat.patch
--- lxc-0.9.0.orig/debian/patches/0011-lxc-netstat.patch	1970-01-01 01:00:00.000000000 +0100
+++ lxc-0.9.0/debian/patches/0011-lxc-netstat.patch	2013-05-02 09:01:48.000000000 +0200
@@ -0,0 +1,55 @@
+--- a/src/lxc/lxc-netstat.in
++++ b/src/lxc/lxc-netstat.in
+@@ -17,8 +17,10 @@
+ # License along with this library; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++. @DATADIR@/lxc/lxc.functions
++
+ usage() {
+-    echo "usage: $(basename $0) -n|--name <name> -- [netstat_options]" >&2
++    echo "usage: $(basename $0) -n|--name <name> [-P|--lxcpath <lxc_path>] -- [netstat_options]" >&2
+ }
+ 
+ help() {
+@@ -26,8 +28,9 @@
+     echo >&2
+     echo "Execute 'netstat' for the specified container." >&2
+     echo >&2
+-    echo "  --name NAME       specify the container name" >&2
+-    echo "  NETSTAT_OPTIONS   netstat command options (see \`netstat --help')" >&2
++    echo "  --name NAME               specify the container name" >&2
++    echo "  --lxcpath LXC_PATH        use an alternate container path" >&2
++    echo "  NETSTAT_OPTIONS           netstat command options (see \`netstat --help')" >&2
+ }
+ 
+ get_parent_cgroup()
+@@ -73,6 +76,8 @@
+             help; exit 1;;
+         -n|--name)
+             name=$2; shift 2;;
++	-P|--lxcpath)
++            lxc_path="$2"; shift 2;;
+         --exec)
+             exec="exec"; shift;;
+         --)
+@@ -92,11 +97,17 @@
+     exit 1
+ fi
+ 
++if [ -z "$lxc_path" ]; then
++    echo "$(basename $0): no configuration path defined" >&2
++    usage
++    exit 1
++fi
++
+ if [ -z "$exec" ]; then
+-    exec @BINDIR@/lxc-unshare -s MOUNT -- $0 -n $name --exec "$@"
++    exec @BINDIR@/lxc-unshare -s MOUNT -- $0 -n $name -P "$lxc_path" --exec "$@"
+ fi
+ 
+-if lxc-info -n $name --state-is 'STOPPED'; then
++if lxc-info -n $name -P "$lxc_path" --state-is 'STOPPED'; then
+     echo "$(basename $0): container '$name' is not running" >&2
+     exit 1
+ fi
diff -urN lxc-0.9.0.orig/debian/patches/series lxc-0.9.0/debian/patches/series
--- lxc-0.9.0.orig/debian/patches/series	2013-04-19 14:23:08.000000000 +0200
+++ lxc-0.9.0/debian/patches/series	2013-05-02 08:51:54.000000000 +0200
@@ -5,3 +5,7 @@
 0005-lxc-init-path.patch
 0006-lxc-quote-arguments.patch
 0007-lxc-unshare-manpage.patch
+0008-lxc-shutdown.patch
+0009-lxc-clone.patch
+0010-lxc-create.patch
+0011-lxc-netstat.patch

Reply via email to