Diff for "LXC"


Differences between revisions 15 and 16
Revision 15 as of 2010-12-19 13:01:30
Size: 9029
Editor: CPEc03f0ed089ed-CM001ac318e826
Comment: Mention that the current "lxc" package already includes the control script /etc/init.d/lxc.
Revision 16 as of 2011-01-21 01:04:57
Size: 5988
Editor: c-76-100-208-30
Comment:
Deletions are marked like this. Additions are marked like this.
Line 80: Line 80:
== init script ==

create /etc/init.d/lxc (the current "lxc" package for 10.10 already includes this script so it's not clear what the value of this is):
{{{
[HW] # cat << EOF > /etc/init.d/lxc
#! /bin/sh
### BEGIN INIT INFO
# Provides: lxc
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts/stops linux containers
# Description: Provides linux container management: start, stop or
# restart containers.
### END INIT INFO
# Author: Nigel McNie <nigel@mcnie.name>
# Author: Eduard Iskandarov <edikexp@gmail.com>
#set -x
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="linux containers"
NAME=lxc
SCRIPTNAME=/etc/init.d/$NAME
LXCPATH=/var/lib/lxc
# Exit if the package is not installed
[ -x /usr/bin/lxc-start ] || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions
 do_start()
{
    for C in $(ls -1 $LXCPATH); do
        log_progress_msg "$C"
        if lxc-info -n $C | grep STOPPED > /dev/null 2>&1; then
            if [ -x /usr/bin/screen ]; then
                /usr/bin/screen -dmS init-${C} /usr/bin/lxc-start -n $C
            else
                lxc-start -n $C -d
            fi
            lxc-wait -n $C -s RUNNING
            if [ $? -gt 0 ]; then
                return 2
            fi
        fi
    done
}
do_stop()
{
    for C in $(ls -1 $LXCPATH); do
        log_progress_msg "$C"
        if lxc-info -n $C | grep RUNNING > /dev/null 2>&1; then
            /usr/bin/lxc-stop -n $C
            if [ $? -gt 0 ]; then
                return 2
            fi
        fi
    done
}
do_status()
{
    for C in $(ls -1 $LXCPATH); do
        log_progress_msg "$C"
        echo $(lxc-info -n $C)
    done
}
case "$1" in
    start)
    log_daemon_msg "Starting $DESC" #"$NAME"
    do_start
    case "$?" in
        0|1) log_end_msg 0 ;;
        2) log_end_msg 1 ;;
    esac
    ;;
stop)
    log_daemon_msg "Stopping $DESC" #"$NAME"
    do_stop
    case "$?" in
        0|1) log_end_msg 0 ;;
        2) log_end_msg 1 ;;
    esac
    ;;
status)
    log_daemon_msg "Status $DESC" #"$NAME"
    do_status
    ;;
restart|force-reload)
    log_daemon_msg "Restarting $DESC" #"$NAME"
    do_stop
    case "$?" in
        0|1)
            do_start
            case "$?" in
                0) log_end_msg 0 ;;
                1) log_end_msg 1 ;; # Old process is still running
                *) log_end_msg 1 ;; # Failed to start
            esac
            ;;
        *)
            # Failed to stop
            log_end_msg 1
            ;;
        esac
        ;;
*)
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
    exit 3
    ;;
esac
:
EOF
}}}
update rc.d:
{{{
[HW] # update-rc.d lxc defaults
}}}
[[http://ugatu.net/wiki/LXC|source]]

Overview

LinuX Containers (LXC) provide lightweight virtualization that lets you isolate processes and resources without the need to provide instruction interpretation mechanisms and other complexities of full virtualization.

Notes
  • Upstream libvirt support LXC.
  • KVM + LXC can function properly on same host.
  • LXC inside KVM works properly on same host.
  • LXC take advantage of KMS feature of new Kernels.
  • 64bit OS using a 32bit container.
  • LXC works well with btrfs.
  • No special hardware required.
  • No patch is required to the kernel, since LXC is already integrated into the Kernel.
  • OpenVZ Containers run on LXC, only Config modification required.

User case examples

  1. Isolate single processes, (I.E. a webserver).
  2. VPS
  3. LTSP
  4. Software build, testing, upgrading (think sandboxing)

Host configuration

External link - lxc-tools collection of utility scripts which include:

  1. lxc-ubuntu - installs ubuntu container
  2. init - init.d script
  3. lxc-status - lxc-info on all the containers
  4. lxc-halt - stop a linux container SAFELY

External link - How to Ubuntu 10.04 LXC containers

External link - Ubuntu and Fedora Hosts

kernel requirements

The Linux container capabilities are part of the main stream linux kernel and require kernel version >= 2.6.27 (well working as of 2.6.31).

There are no requirements to compile a kernel or apply patches.

User space tools (lxc)

The user space tools, or lxc, are a set of scripts that manage linux containers.

You may install the lxc user space tools from the Ubuntu repositories.

sudo apt-get install lxc vlan bridge-utils python-software-properties screen

Or download the latest stable package from sourceforge and compile them yourself. The lxc project maintains a git repository for a bleeding edge set of tools.

Networking

There are several networking options available, the consensus appears to be that bridging your network card is the best option. As such I will cover bridging your network card here, hopefully this information can be expanded.

Container configuration

options/examples for config files chroot/debootstrap/febootstrap lxc-debian / lxc-fedora lxc-console / ssh into containers

Migrate OpenVZ containers

Application configuration

Issues

“mknod: `/lib/udev/devices/ppp’: Operation not permitted” when updating Ubuntu 10.04 on virtual LXC machine http://www.emanuelis.eu/2010/09/15/mknod-lib-udev-devices-ppp-operation-not-permitted-when-updating-ubuntu-10-04-on-virtual-lxc-machine/

Other

Mini screen how-to

List screen sessions:

[HW] # sudo screen -ls
There are screens on:
        1407.init-ubuntu        (07/10/2010 02:23:42 PM)        (Detached)
        1364.init-test  (07/10/2010 02:23:41 PM)        (Detached)
        1357.init-2www  (07/10/2010 02:23:40 PM)        (Detached)
3 Sockets in /var/run/screen/S-root.

Login screen session:

[HW] # screen -r 1407.init-ubuntu
Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
nginx.

Ubuntu 10.04 LTS ubuntu /dev/console

ubuntu login:

Detach screen: C-a d or C-a C-d

source

lxc.network.type=phys & kernel versions

The problem:

[HW] # lxc-execute --name ubuntu -s lxc.network.type=phys bash
Segmentation fault (core dumped)

or

[HW] # lxc-execute --name net -s lxc.network.type=phys -s lxc.network.link=eth0 bash
lxc-execute: failed to move 'eth0' to the container : Message too long

The kernel before 2.6.35 does not support physical interface moving across namespace. Maybe You can use Maverck 2.6.35 kernel in Lucid, see: PPA for Ubuntu Kernel

source1 source2

See also

LXC (last edited 2014-07-29 22:20:53 by 192)