+++ /dev/null
-/*
- * lxc: linux Container library
- *
- * (C) Copyright IBM Corp. 2007, 2008
- *
- * Authors:
- * Daniel Lezcano <daniel.lezcano at free.fr>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <list.h>
+++ /dev/null
-#!/bin/sh
-
-#
-# lxc: linux Container library
-
-# Authors:
-# Daniel Lezcano <daniel.lezcano@free.fr>
-
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-#
-# This script allows to set or remove the capabilities on the lxc tools.
-# When the capabilities are set, a non root user can manage the containers.
-#
-
-usage() {
- echo "usage: $(basename $0) -n NAME [-f] [-P lxcpath]" >&2
-}
-
-help() {
- usage
- echo >&2
- echo "Remove an existing container on the system." >&2
- echo >&2
- echo "Options:" >&2
- echo " -n NAME specify the name of the container" >&2
- echo " -f stop the container if it is running (rather than abort)" >&2
- echo " -P lxcpath container is in specified lxcpath" >&2
-}
-
-. @DATADIR@/lxc/lxc.functions
-
-usage_err() {
- [ -n "$1" ] && echo "$1" >&2
- usage
- exit 1
-}
-
-verify_zfs() {
- local path=$1
- which zfs > /dev/null 2>&1 || { echo no; return; }
- if zfs list -H $path >/dev/null 2>&1; then
- echo zfs
- else
- echo no
- fi
-}
-
-busy_zfs() {
- local path=$1
- local dev
- dev=`zfs list -H $path 2>/dev/null | awk '{ print $1 }'`
- if zfs list -t snapshot | grep -q "$dev"; then
- echo busy
- else
- echo zfs
- fi
-}
-
-verify_lvm() {
- local path=$1
- if [ -b $path -o -h $path ]; then
- lvdisplay $path > /dev/null 2>&1 && { echo lvm; return; }
- fi
- echo no
-}
-
-busy_lvm() {
- local path=$1
- lvdisplay $path | grep -q "LV snapshot status.*source of" && { echo busy; return; }
- echo lvm
-}
-
-optarg_check() {
- if [ -z "$2" ]; then
- usage_err "option '$1' requires an argument"
- fi
-}
-
-force=0
-
-while [ $# -gt 0 ]; do
- opt="$1"
- shift
- case "$opt" in
- -h|--help)
- help
- exit 1
- ;;
- -n|--name)
- optarg_check "$opt" "$1"
- lxc_name=$1
- shift
- ;;
- -P|--lxcpath)
- optarg_check "$opt" "$1"
- lxc_path=$1
- shift
- ;;
- -f)
- force=1
- ;;
- --)
- break
- ;;
- -?)
- usage_err "unknown option '$opt'"
- ;;
- -*)
- # split opts -abc into -a -b -c
- set -- $(echo "${opt#-}" | sed 's/\(.\)/ -\1/g') "$@"
- ;;
- *)
- usage
- exit 1
- ;;
- esac
-done
-
-if [ -z "$lxc_name" ]; then
- echo "$(basename $0): no container name specified" >&2
- usage $0
- exit 1
-fi
-
-if [ "$(id -u)" != "0" ]; then
- echo "$(basename $0): must be run as root" >&2
- exit 1
-fi
-
-if [ ! -d "$lxc_path/$lxc_name" ]; then
- echo "$(basename $0): '$lxc_name' does not exist" >&2
- exit 1
-fi
-
-# make sure the container is stopped
-if ! lxc-info -n $lxc_name -P $lxc_path --state-is "STOPPED"; then
- if [ $force -eq 1 ]; then
- lxc-stop -P $lxc_path -n $lxc_name
- lxc-wait -P $lxc_path -n $lxc_name -s STOPPED
- else
- echo "$(basename $0): '$lxc_name' $(lxc-info -P $lxc_path -n $lxc_name -s); aborted" >&2
- exit 1
- fi
-fi
-
-# Deduce the type of rootfs
-# If LVM partition, destroy it. For btrfs, we delete the subvolume. If anything
-# else, ignore it. We'll support deletion of others later.
-rootdev=`grep '^\s*lxc\.rootfs' $lxc_path/$lxc_name/config 2>/dev/null | sed -e 's/^[^/]*//'`
-if [ -n "$rootdev" ]; then
- if [ `verify_lvm $rootdev` = "lvm" ]; then
- if [ `busy_lvm $rootdev` = "busy" ]; then
- echo "$rootdev has lvm snapshots - not deleting"
- exit 1
- else
- echo "removing backing store: $rootdev"
- lvremove -f $rootdev
- fi
- elif [ `verify_zfs $rootdev` = "zfs" ]; then
- if [ `busy_zfs $rootdev` = "busy" ]; then
- echo "$rootdev has zfs snapshots - not deleting"
- exit 1
- else
- zfs destroy $(zfs list | grep $rootdev | awk '{ print $1 }')
- if [ $? -ne 0 ]; then
- echo "zfs destroy failed - please wait a bit and try again"
- exit 1
- fi
- fi
- elif [ -h "$rootdev" -o -d "$rootdev" ]; then
- if which btrfs >/dev/null 2>&1 &&
- btrfs subvolume list "$rootdev" >/dev/null 2>&1; then
- btrfs subvolume delete "$rootdev"
- else
- # In case rootfs is not under $lxc_path/$lxc_name, remove it
- rm -rf --one-file-system --preserve-root $rootdev
- fi
- fi
-fi
-
-# recursively remove the container to remove old container configuration
-rm -rf --one-file-system --preserve-root $lxc_path/$lxc_name