lxc-3.0.0/0000755061062106075000000000000013256572302007316 500000000000000lxc-3.0.0/AUTHORS0000644061062106075000000000002113256572152010302 00000000000000IBM Corporation. lxc-3.0.0/CONTRIBUTING0000644061062106075000000000765613256572152011111 00000000000000Contributing to this project ---------------------------- This project accepts contributions. In order to contribute, you should pay attention to a few things: 1 - your code must follow the coding style rules 2 - the format of the submission must Github pull requests 3 - your work must be signed Coding Style: ------------- The coding style follows the Linux kernel coding style. The coding style is defined in the 'CodingStyle' file, available in the directory 'Documentation' of the Linux kernel source tree. It can be accessed online too: https://www.kernel.org/doc/html/v4.10/process/coding-style.html Submitting Modifications: ------------------------- The contributions must be Github pull requests. Licensing for new files: ------------------------ LXC is made of files shipped under a few different licenses. Anything that ends up being part of the LXC library needs to be released under LGPLv2.1+ or a license compatible with it (though the latter will only be accepted for cases where the code originated elsewhere and was imported into LXC). Language bindings for the libraries need to be released under LGPLv2.1+. Anything else (non-libaries) needs to be Free Software and needs to be allowed to link with LGPLv2.1+ code (if needed). LXC upstream prefers LGPLv2.1+ or GPLv2 for those. When introducing a new file into the project, please make sure it has a copyright header making clear under which license it's being released and if it doesn't match the criteria described above, please explain your decision on the lxc-devel mailing-list when submitting your patch. Developer Certificate of Origin: -------------------------------- To improve tracking of contributions to this project we will use a process modeled on the modified DCO 1.1 and use a "sign-off" procedure. The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below: By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source License and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) The contribution is made free of any other party's intellectual property claims or rights. (e) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. then you just add a line saying Signed-off-by: Random J Developer You can do it by using option -s or --signoff when you commit git commit --signoff ... using your real name (sorry, no pseudonyms or anonymous contributions.) In addition we support the following DCOs which maintainers can use to indicate that a patch is acceptable: Acked-by: Random J Developer Reviewed-by: Random J Developer If you are contributing as a group who is implementing a feature together such that it cannot be reasonably attributed to a single developer please use: Co-developed-by: Random J Developer 1 Co-developed-by: Random J Developer 2 lxc-3.0.0/doc/0000755061062106075000000000000013256572302010063 500000000000000lxc-3.0.0/doc/lxc-freeze.sgml.in0000644061062106075000000000527213256572152013351 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-freeze 1 lxc-freeze freeze all the container's processes lxc-freeze -n name Description lxc-freeze freezes all the processes running inside the container. The processes will be blocked until they are explicitly thawed by the lxc-unfreeze command. This command is useful for batch managers to schedule a group of processes. &commonoptions; Diagnostic The container was not found The specified container was not created before with the lxc-create command. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-ls.sgml.in0000644061062106075000000001535113256572152012506 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-ls 1 lxc-ls list the containers existing on the system lxc-ls -1 --active --frozen --running --stopped --defined -f -F format -g groups --nesting=NUM --filter=regex Description lxc-ls list the containers existing on the system. Options Show one entry per line. (default when /dev/stdout isn't a tty) List only active containers (same as --frozen --running). List only frozen containers. List only running containers. List only stopped containers. List only defined containers. Use a fancy, column-based output. Comma separated list of columns to show in the fancy output. The list of accepted and default fields is listed in --help. Comma separated list of groups the container must have to be displayed. The parameter may be passed multiple times. Show nested containers. The number of nesting levels to be shown can be specified by passing a number as argument. The regular expression passed to lxc-ls will be applied to the container name. The format is a POSIX extended regular expression. It can also be given as additional argument without explicitly using . Examples lxc-ls --fancy list all the containers, listing one per line along with its name, state, ipv4 and ipv6 addresses. lxc-ls --active -1 list active containers and display the list in one column. &commonoptions; &seealso; History Written originally as a shell script by Daniel Lezcano and Serge Hallyn. Later reimplemented and extended in Python by Stéphane Graber and then reimplemented and extended in C by Christian Brauner. Author Christian Brauner christian.brauner@mailbox.org, Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/see_also.sgml.in0000644061062106075000000000613413256572152013075 00000000000000 See Also lxc 7 , lxc-create 1 , lxc-copy 1 , lxc-destroy 1 , lxc-start 1 , lxc-stop 1 , lxc-execute 1 , lxc-console 1 , lxc-monitor 1 , lxc-wait 1 , lxc-cgroup 1 , lxc-ls 1 , lxc-info 1 , lxc-freeze 1 , lxc-unfreeze 1 , lxc-attach 1 , lxc.conf 5 lxc-3.0.0/doc/lxc-usernet.sgml.in0000644061062106075000000001072713256572152013557 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernet 5 lxc-usernet unprivileged user network administration file. Description @LXC_USERNIC_CONF@ controls the limits which the program lxc-user-nic places on network interfaces which an unprivileged user may create. Configuration This file consists of multiple entries, one per line, of the form: user type bridge number or @group type bridge number Where is the username to whom this entry applies. is the groupname to which this entry applies. is the type of network interface being allowed. Only veth is currently supported. is the bridge to which the network interfaces may be attached, for instance lxcbr0. is the number or quota of network interfaces of the given type which the given user or group may attach to the given bridge, for instance 2. Since a user can be specified both by username as well as one or more usergroups, it is possible that several configuration lines enable that user to create network interfaces. In such cases, any interfaces create are counted towards the quotas of the user or group in the order in which they appear in the file. If the quota of one line is full, the rest will be parsed until one is found or the end of the file. See Also lxc 1 , lxc-user-nic 1 Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-console.sgml.in0000644061062106075000000001075013256572152013530 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-console 1 lxc-console Launch a console for the specified container lxc-console -n name -e escape character -t ttynum Description If the tty service has been configured and is available for the container specified as parameter, this command will launch a console allowing to log on the container. The available tty are free slots taken by this command. That means if the container has four ttys available and the command has been launched four times each taking a different tty, the fifth command will fail because no console will be available. The command will connect to a tty. If the connection is lost or broken, the command can be launched again and regain the tty at the state it was before the disconnection. A ttynum of 0 may be given to attach to the container's /dev/console instead of its dev/tty<ttynum>. A keyboard escape sequence may be used to disconnect from the tty and quit lxc-console. The default escape sequence is <Ctrl+a q>. Options Specify the escape sequence prefix to use instead of <Ctrl a>. This may be given as '^letter' or just 'letter'. For example to use <Ctrl+b q> as the escape sequence use -e '^b'. Specify the tty number to connect to or 0 for the console. If not specified the next available tty number will be automatically chosen by the container. &commonoptions; Diagnostic tty service denied No tty is available or there is not enough privilege to use the console. For example, the container belongs to user "foo" and "bar" is trying to open a console to it. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/Makefile.in0000644061062106075000000010551313256572256012065 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @USE_DOCBOOK2X_TRUE@am__append_1 = ja ko @ENABLE_API_DOCS_TRUE@am__append_2 = api @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@am__append_3 = lxc-attach.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-autostart.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-cgroup.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-checkconfig.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-checkpoint.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-config.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-console.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-copy.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-create.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-destroy.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-device.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-execute.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-freeze.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-info.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-ls.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-monitor.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-snapshot.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-start.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-stop.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-top.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-unfreeze.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-unshare.1 \ @ENABLE_DOCBOOK_TRUE@@ENABLE_TOOLS_TRUE@ lxc-wait.1 @ENABLE_COMMANDS_TRUE@@ENABLE_DOCBOOK_TRUE@am__append_4 = lxc-update-config.1 \ @ENABLE_COMMANDS_TRUE@@ENABLE_DOCBOOK_TRUE@ lxc-user-nic.1 \ @ENABLE_COMMANDS_TRUE@@ENABLE_DOCBOOK_TRUE@ lxc-usernsexec.1 subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/tls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = lxc-attach.sgml lxc-autostart.sgml \ lxc-cgroup.sgml lxc-checkconfig.sgml lxc-checkpoint.sgml \ lxc-config.sgml lxc-console.sgml lxc-copy.sgml lxc-create.sgml \ lxc-destroy.sgml lxc-device.sgml lxc-execute.sgml \ lxc-freeze.sgml lxc-info.sgml lxc-ls.sgml lxc-monitor.sgml \ lxc-snapshot.sgml lxc-start.sgml lxc-stop.sgml lxc-top.sgml \ lxc-unfreeze.sgml lxc-unshare.sgml lxc-update-config.sgml \ lxc-user-nic.sgml lxc-usernsexec.sgml lxc-wait.sgml \ lxc.conf.sgml lxc.container.conf.sgml lxc.system.conf.sgml \ lxc-usernet.sgml lxc.sgml common_options.sgml see_also.sgml CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man7dir)" man5dir = $(mandir)/man5 man7dir = $(mandir)/man7 NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(srcdir)/common_options.sgml.in $(srcdir)/lxc-attach.sgml.in \ $(srcdir)/lxc-autostart.sgml.in $(srcdir)/lxc-cgroup.sgml.in \ $(srcdir)/lxc-checkconfig.sgml.in \ $(srcdir)/lxc-checkpoint.sgml.in $(srcdir)/lxc-config.sgml.in \ $(srcdir)/lxc-console.sgml.in $(srcdir)/lxc-copy.sgml.in \ $(srcdir)/lxc-create.sgml.in $(srcdir)/lxc-destroy.sgml.in \ $(srcdir)/lxc-device.sgml.in $(srcdir)/lxc-execute.sgml.in \ $(srcdir)/lxc-freeze.sgml.in $(srcdir)/lxc-info.sgml.in \ $(srcdir)/lxc-ls.sgml.in $(srcdir)/lxc-monitor.sgml.in \ $(srcdir)/lxc-snapshot.sgml.in $(srcdir)/lxc-start.sgml.in \ $(srcdir)/lxc-stop.sgml.in $(srcdir)/lxc-top.sgml.in \ $(srcdir)/lxc-unfreeze.sgml.in $(srcdir)/lxc-unshare.sgml.in \ $(srcdir)/lxc-update-config.sgml.in \ $(srcdir)/lxc-user-nic.sgml.in $(srcdir)/lxc-usernet.sgml.in \ $(srcdir)/lxc-usernsexec.sgml.in $(srcdir)/lxc-wait.sgml.in \ $(srcdir)/lxc.conf.sgml.in \ $(srcdir)/lxc.container.conf.sgml.in $(srcdir)/lxc.sgml.in \ $(srcdir)/lxc.system.conf.sgml.in $(srcdir)/see_also.sgml.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ CAP_LIBS = @CAP_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFAULT_CGROUP_PATTERN = @DEFAULT_CGROUP_PATTERN@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCDIR = @DOCDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GNUTLS_LIBS = @GNUTLS_LIBS@ GREP = @GREP@ HAVE_DOXYGEN = @HAVE_DOXYGEN@ INCLUDEDIR = @INCLUDEDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBEXECDIR = @LIBEXECDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALSTATEDIR = @LOCALSTATEDIR@ LOGPATH = @LOGPATH@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ LXCBINHOOKDIR = @LXCBINHOOKDIR@ LXCHOOKDIR = @LXCHOOKDIR@ LXCINITDIR = @LXCINITDIR@ LXCPATH = @LXCPATH@ LXCROOTFSMOUNT = @LXCROOTFSMOUNT@ LXCTEMPLATECONFIG = @LXCTEMPLATECONFIG@ LXCTEMPLATEDIR = @LXCTEMPLATEDIR@ LXC_ABI = @LXC_ABI@ LXC_ABI_MAJOR = @LXC_ABI_MAJOR@ LXC_ABI_MICRO = @LXC_ABI_MICRO@ LXC_ABI_MINOR = @LXC_ABI_MINOR@ LXC_DEFAULT_CONFIG = @LXC_DEFAULT_CONFIG@ LXC_DEVEL = @LXC_DEVEL@ LXC_DISTRO_SYSCONF = @LXC_DISTRO_SYSCONF@ LXC_GENERATE_DATE = @LXC_GENERATE_DATE@ LXC_GLOBAL_CONF = @LXC_GLOBAL_CONF@ LXC_USERNIC_CONF = @LXC_USERNIC_CONF@ LXC_USERNIC_DB = @LXC_USERNIC_DB@ LXC_VERSION = @LXC_VERSION@ LXC_VERSION_BASE = @LXC_VERSION_BASE@ LXC_VERSION_BETA = @LXC_VERSION_BETA@ LXC_VERSION_MAJOR = @LXC_VERSION_MAJOR@ LXC_VERSION_MICRO = @LXC_VERSION_MICRO@ LXC_VERSION_MINOR = @LXC_VERSION_MINOR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RUNTIME_PATH = @RUNTIME_PATH@ SBINDIR = @SBINDIR@ SECCOMP_CFLAGS = @SECCOMP_CFLAGS@ SECCOMP_LIBS = @SECCOMP_LIBS@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SYSCONFDIR = @SYSCONFDIR@ SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bashcompdir = @bashcompdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ db2xman = @db2xman@ docdir = @docdir@ docdtd = @docdtd@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pamdir = @pamdir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = examples rootfs $(am__append_1) $(am__append_2) DIST_SUBDIRS = examples rootfs ja ko api EXTRA_DIST = \ lxc.container.conf \ lxc.system.conf \ FAQ.txt @ENABLE_DOCBOOK_TRUE@man_MANS = lxc.conf.5 lxc.container.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc.system.conf.5 lxc-usernet.5 lxc.7 \ @ENABLE_DOCBOOK_TRUE@ $(am__append_3) $(am__append_4) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lxc-attach.sgml: $(top_builddir)/config.status $(srcdir)/lxc-attach.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-autostart.sgml: $(top_builddir)/config.status $(srcdir)/lxc-autostart.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-cgroup.sgml: $(top_builddir)/config.status $(srcdir)/lxc-cgroup.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkconfig.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkconfig.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkpoint.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkpoint.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-config.sgml: $(top_builddir)/config.status $(srcdir)/lxc-config.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-console.sgml: $(top_builddir)/config.status $(srcdir)/lxc-console.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-copy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-copy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-create.sgml: $(top_builddir)/config.status $(srcdir)/lxc-create.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-destroy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-destroy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-device.sgml: $(top_builddir)/config.status $(srcdir)/lxc-device.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-execute.sgml: $(top_builddir)/config.status $(srcdir)/lxc-execute.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-freeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-freeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-info.sgml: $(top_builddir)/config.status $(srcdir)/lxc-info.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-ls.sgml: $(top_builddir)/config.status $(srcdir)/lxc-ls.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-monitor.sgml: $(top_builddir)/config.status $(srcdir)/lxc-monitor.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-snapshot.sgml: $(top_builddir)/config.status $(srcdir)/lxc-snapshot.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-start.sgml: $(top_builddir)/config.status $(srcdir)/lxc-start.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-stop.sgml: $(top_builddir)/config.status $(srcdir)/lxc-stop.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-top.sgml: $(top_builddir)/config.status $(srcdir)/lxc-top.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unfreeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unfreeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unshare.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unshare.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-update-config.sgml: $(top_builddir)/config.status $(srcdir)/lxc-update-config.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-user-nic.sgml: $(top_builddir)/config.status $(srcdir)/lxc-user-nic.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernsexec.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernsexec.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-wait.sgml: $(top_builddir)/config.status $(srcdir)/lxc-wait.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.container.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.container.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.system.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.system.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernet.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernet.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.sgml: $(top_builddir)/config.status $(srcdir)/lxc.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ common_options.sgml: $(top_builddir)/config.status $(srcdir)/common_options.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ see_also.sgml: $(top_builddir)/config.status $(srcdir)/see_also.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man7dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.7[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_DOCBOOK_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man5 install-man7 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 uninstall-man5 uninstall-man7 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-man5 \ install-man7 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \ uninstall-man7 .PRECIOUS: Makefile @ENABLE_DOCBOOK_TRUE@%.1 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.5 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.7 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@lxc-%.sgml : common_options.sgml see_also.sgml @ENABLE_DOCBOOK_TRUE@clean-local: @ENABLE_DOCBOOK_TRUE@ $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lxc-3.0.0/doc/common_options.sgml.in0000644061062106075000000000756713256572152014361 00000000000000 Common Options These options are common to most of lxc commands. Print a longer usage message than normal. Give the usage message mute on Use an alternate container path. The default is @LXCPATH@. Output to an alternate log FILE. The default is no log. Set log priority to LEVEL. The default log priority is ERROR. Possible values are : FATAL, CRIT, WARN, ERROR, NOTICE, INFO, DEBUG. Note that this option is setting the priority of the events log in the alternate log file. It do not have effect on the ERROR events log on stderr. Use container identifier NAME. The container identifier format is an alphanumeric string. Specify the configuration file to configure the virtualization and isolation functionalities for the container. This configuration file if present will be used even if there is already a configuration file present in the previously created container (via lxc-create). Show the version number. lxc-3.0.0/doc/examples/0000755061062106075000000000000013256572301011700 500000000000000lxc-3.0.0/doc/examples/lxc-no-netns.conf.in0000644061062106075000000000012413256572152015422 00000000000000# Container with non-virtualized network lxc.net.0.type = none lxc.uts.name = delta lxc-3.0.0/doc/examples/lxc-phys.conf.in0000644061062106075000000000046113256572152014650 00000000000000# Container with network virtualized using a physical network device with name # 'eth0' lxc.uts.name = gamma lxc.net.0.type = phys lxc.net.0.flags = up lxc.net.0.link = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:ff lxc.net.0.ipv4.address = 10.2.3.6/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3297 lxc-3.0.0/doc/examples/seccomp-v2-blacklist.conf0000644061062106075000000000051613256572152016421 000000000000002 blacklist # v2 allows comments after the second line, with '#' in first column, # blacklist will allow syscalls by default # if 'errno 0' was not appended to 'mknod' below, then the task would # simply be killed when it tried to mknod. 'errno 0' means do not allow # the container to mknod, but immediately return 0. mknod errno 0 lxc-3.0.0/doc/examples/Makefile.in0000644061062106075000000004355013256572256013705 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/tls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = lxc-macvlan.conf lxc-vlan.conf lxc-no-netns.conf \ lxc-empty-netns.conf lxc-phys.conf lxc-veth.conf \ lxc-complex.conf CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgexamplesdir)" DATA = $(noinst_DATA) $(pkgexamples_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lxc-complex.conf.in \ $(srcdir)/lxc-empty-netns.conf.in \ $(srcdir)/lxc-macvlan.conf.in $(srcdir)/lxc-no-netns.conf.in \ $(srcdir)/lxc-phys.conf.in $(srcdir)/lxc-veth.conf.in \ $(srcdir)/lxc-vlan.conf.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ CAP_LIBS = @CAP_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFAULT_CGROUP_PATTERN = @DEFAULT_CGROUP_PATTERN@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCDIR = @DOCDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GNUTLS_LIBS = @GNUTLS_LIBS@ GREP = @GREP@ HAVE_DOXYGEN = @HAVE_DOXYGEN@ INCLUDEDIR = @INCLUDEDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBEXECDIR = @LIBEXECDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALSTATEDIR = @LOCALSTATEDIR@ LOGPATH = @LOGPATH@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ LXCBINHOOKDIR = @LXCBINHOOKDIR@ LXCHOOKDIR = @LXCHOOKDIR@ LXCINITDIR = @LXCINITDIR@ LXCPATH = @LXCPATH@ LXCROOTFSMOUNT = @LXCROOTFSMOUNT@ LXCTEMPLATECONFIG = @LXCTEMPLATECONFIG@ LXCTEMPLATEDIR = @LXCTEMPLATEDIR@ LXC_ABI = @LXC_ABI@ LXC_ABI_MAJOR = @LXC_ABI_MAJOR@ LXC_ABI_MICRO = @LXC_ABI_MICRO@ LXC_ABI_MINOR = @LXC_ABI_MINOR@ LXC_DEFAULT_CONFIG = @LXC_DEFAULT_CONFIG@ LXC_DEVEL = @LXC_DEVEL@ LXC_DISTRO_SYSCONF = @LXC_DISTRO_SYSCONF@ LXC_GENERATE_DATE = @LXC_GENERATE_DATE@ LXC_GLOBAL_CONF = @LXC_GLOBAL_CONF@ LXC_USERNIC_CONF = @LXC_USERNIC_CONF@ LXC_USERNIC_DB = @LXC_USERNIC_DB@ LXC_VERSION = @LXC_VERSION@ LXC_VERSION_BASE = @LXC_VERSION_BASE@ LXC_VERSION_BETA = @LXC_VERSION_BETA@ LXC_VERSION_MAJOR = @LXC_VERSION_MAJOR@ LXC_VERSION_MICRO = @LXC_VERSION_MICRO@ LXC_VERSION_MINOR = @LXC_VERSION_MINOR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RUNTIME_PATH = @RUNTIME_PATH@ SBINDIR = @SBINDIR@ SECCOMP_CFLAGS = @SECCOMP_CFLAGS@ SECCOMP_LIBS = @SECCOMP_LIBS@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SYSCONFDIR = @SYSCONFDIR@ SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bashcompdir = @bashcompdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ db2xman = @db2xman@ docdir = @docdir@ docdtd = @docdtd@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pamdir = @pamdir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @ENABLE_EXAMPLES_TRUE@pkgexamplesdir = $(docdir)/examples @ENABLE_EXAMPLES_TRUE@pkgexamples_DATA = \ @ENABLE_EXAMPLES_TRUE@ lxc-macvlan.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-vlan.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-no-netns.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-empty-netns.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-phys.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-veth.conf \ @ENABLE_EXAMPLES_TRUE@ lxc-complex.conf \ @ENABLE_EXAMPLES_TRUE@ seccomp-v1.conf \ @ENABLE_EXAMPLES_TRUE@ seccomp-v2-blacklist.conf \ @ENABLE_EXAMPLES_TRUE@ seccomp-v2.conf noinst_DATA = \ lxc-macvlan.conf.in \ lxc-vlan.conf.in \ lxc-empty-netns.conf.in \ lxc-no-netns.conf.in \ lxc-phys.conf.in \ lxc-veth.conf.in \ lxc-complex.conf.in \ seccomp-v1.conf \ seccomp-v2-blacklist.conf \ seccomp-v2.conf EXTRA_DIST = \ seccomp-v1.conf \ seccomp-v2-blacklist.conf \ seccomp-v2.conf all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lxc-macvlan.conf: $(top_builddir)/config.status $(srcdir)/lxc-macvlan.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-vlan.conf: $(top_builddir)/config.status $(srcdir)/lxc-vlan.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-no-netns.conf: $(top_builddir)/config.status $(srcdir)/lxc-no-netns.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-empty-netns.conf: $(top_builddir)/config.status $(srcdir)/lxc-empty-netns.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-phys.conf: $(top_builddir)/config.status $(srcdir)/lxc-phys.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-veth.conf: $(top_builddir)/config.status $(srcdir)/lxc-veth.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-complex.conf: $(top_builddir)/config.status $(srcdir)/lxc-complex.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgexamplesDATA: $(pkgexamples_DATA) @$(NORMAL_INSTALL) @list='$(pkgexamples_DATA)'; test -n "$(pkgexamplesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgexamplesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgexamplesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgexamplesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgexamplesdir)" || exit $$?; \ done uninstall-pkgexamplesDATA: @$(NORMAL_UNINSTALL) @list='$(pkgexamples_DATA)'; test -n "$(pkgexamplesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgexamplesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgexamplesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgexamplesDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgexamplesDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgexamplesDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am \ uninstall-pkgexamplesDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lxc-3.0.0/doc/examples/lxc-macvlan.conf.in0000644061062106075000000000044113256572152015304 00000000000000# Container with network virtualized using the macvlan device driver lxc.uts.name = alpha lxc.net.0.type = macvlan lxc.net.0.flags = up lxc.net.0.link = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bd lxc.net.0.ipv4.address = 10.2.3.4/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc-3.0.0/doc/examples/Makefile.am0000644061062106075000000000113213256572152013655 00000000000000if ENABLE_EXAMPLES pkgexamplesdir=$(docdir)/examples pkgexamples_DATA = \ lxc-macvlan.conf \ lxc-vlan.conf \ lxc-no-netns.conf \ lxc-empty-netns.conf \ lxc-phys.conf \ lxc-veth.conf \ lxc-complex.conf \ seccomp-v1.conf \ seccomp-v2-blacklist.conf \ seccomp-v2.conf endif noinst_DATA = \ lxc-macvlan.conf.in \ lxc-vlan.conf.in \ lxc-empty-netns.conf.in \ lxc-no-netns.conf.in \ lxc-phys.conf.in \ lxc-veth.conf.in \ lxc-complex.conf.in \ seccomp-v1.conf \ seccomp-v2-blacklist.conf \ seccomp-v2.conf EXTRA_DIST = \ seccomp-v1.conf \ seccomp-v2-blacklist.conf \ seccomp-v2.conf lxc-3.0.0/doc/examples/seccomp-v1.conf0000644061062106075000000000255213256572152014454 000000000000001 whitelist 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 lxc-3.0.0/doc/examples/lxc-veth.conf.in0000644061062106075000000000051413256572152014632 00000000000000# Container with network virtualized using a pre-configured bridge named br0 and # veth pair virtual network devices lxc.uts.name = beta lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 lxc-3.0.0/doc/examples/lxc-complex.conf.in0000644061062106075000000000131013256572152015326 00000000000000# Container with network a complex network mixing macvlan, veth and # physical network devices lxc.uts.name = complex lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 lxc.net.0.type = macvlan lxc.net.0.flags = up lxc.net.0.link = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bd lxc.net.0.ipv4.address = 10.2.3.4/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc.net.0.type = phys lxc.net.0.flags = up lxc.net.0.link = dummy0 lxc.net.0.hwaddr = 4a:49:43:49:79:ff lxc.net.0.ipv4.address = 10.2.3.6/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3297 lxc-3.0.0/doc/examples/lxc-empty-netns.conf.in0000644061062106075000000000016713256572152016153 00000000000000# Container with new network withtout network devices lxc.uts.name = omega lxc.net.0.type = empty lxc.net.0.flags = up lxc-3.0.0/doc/examples/lxc-vlan.conf.in0000644061062106075000000000046413256572152014630 00000000000000# Container with network virtualized using the vlan device driver lxc.uts.name = alpha lxc.net.0.type = vlan lxc.net.0.vlan.id = 1234 lxc.net.0.flags = up lxc.net.0.link = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bd lxc.net.0.ipv4.address = 10.2.3.4/24 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc-3.0.0/doc/examples/seccomp-v2.conf0000644061062106075000000000122313256572152014447 000000000000002 whitelist trap # 'whitelist' would normally mean kill a task doing any syscall which is not # whitelisted below. By appending 'trap' to the line, we will cause a SIGSYS # to be sent to the task instead. 'errno 0' would mean don't allow the system # call but immediately return 0. 'errno 22' would mean return EINVAL immediately. [x86_64] open close read write mount umount2 # Since we are listing system calls by name, we can also ask to have them resolved # for another arch, i.e. for 32/64-bit versions. [x86] open close read write mount umount2 # Do note that this policy does not whitelist enough system calls to allow a # system container to boot. lxc-3.0.0/doc/rootfs/0000755061062106075000000000000013256572301011376 500000000000000lxc-3.0.0/doc/rootfs/Makefile.in0000644061062106075000000003731213256572256013402 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/rootfs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/tls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(READMEdir)" DATA = $(README_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ CAP_LIBS = @CAP_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFAULT_CGROUP_PATTERN = @DEFAULT_CGROUP_PATTERN@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCDIR = @DOCDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GNUTLS_LIBS = @GNUTLS_LIBS@ GREP = @GREP@ HAVE_DOXYGEN = @HAVE_DOXYGEN@ INCLUDEDIR = @INCLUDEDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBEXECDIR = @LIBEXECDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALSTATEDIR = @LOCALSTATEDIR@ LOGPATH = @LOGPATH@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ LXCBINHOOKDIR = @LXCBINHOOKDIR@ LXCHOOKDIR = @LXCHOOKDIR@ LXCINITDIR = @LXCINITDIR@ LXCPATH = @LXCPATH@ LXCROOTFSMOUNT = @LXCROOTFSMOUNT@ LXCTEMPLATECONFIG = @LXCTEMPLATECONFIG@ LXCTEMPLATEDIR = @LXCTEMPLATEDIR@ LXC_ABI = @LXC_ABI@ LXC_ABI_MAJOR = @LXC_ABI_MAJOR@ LXC_ABI_MICRO = @LXC_ABI_MICRO@ LXC_ABI_MINOR = @LXC_ABI_MINOR@ LXC_DEFAULT_CONFIG = @LXC_DEFAULT_CONFIG@ LXC_DEVEL = @LXC_DEVEL@ LXC_DISTRO_SYSCONF = @LXC_DISTRO_SYSCONF@ LXC_GENERATE_DATE = @LXC_GENERATE_DATE@ LXC_GLOBAL_CONF = @LXC_GLOBAL_CONF@ LXC_USERNIC_CONF = @LXC_USERNIC_CONF@ LXC_USERNIC_DB = @LXC_USERNIC_DB@ LXC_VERSION = @LXC_VERSION@ LXC_VERSION_BASE = @LXC_VERSION_BASE@ LXC_VERSION_BETA = @LXC_VERSION_BETA@ LXC_VERSION_MAJOR = @LXC_VERSION_MAJOR@ LXC_VERSION_MICRO = @LXC_VERSION_MICRO@ LXC_VERSION_MINOR = @LXC_VERSION_MINOR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RUNTIME_PATH = @RUNTIME_PATH@ SBINDIR = @SBINDIR@ SECCOMP_CFLAGS = @SECCOMP_CFLAGS@ SECCOMP_LIBS = @SECCOMP_LIBS@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SYSCONFDIR = @SYSCONFDIR@ SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bashcompdir = @bashcompdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ db2xman = @db2xman@ docdir = @docdir@ docdtd = @docdtd@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pamdir = @pamdir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ READMEdir = @LXCROOTFSMOUNT@ README_DATA = README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/rootfs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/rootfs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-READMEDATA: $(README_DATA) @$(NORMAL_INSTALL) @list='$(README_DATA)'; test -n "$(READMEdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(READMEdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(READMEdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(READMEdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(READMEdir)" || exit $$?; \ done uninstall-READMEDATA: @$(NORMAL_UNINSTALL) @list='$(README_DATA)'; test -n "$(READMEdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(READMEdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(READMEdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-READMEDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-READMEDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-READMEDATA install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-READMEDATA uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lxc-3.0.0/doc/rootfs/Makefile.am0000644061062106075000000000005713256572152013360 00000000000000READMEdir=@LXCROOTFSMOUNT@ README_DATA=README lxc-3.0.0/doc/rootfs/README0000644061062106075000000000027513256572152012206 00000000000000This directory must exist, even though it may be empty. It is used to temporary mount the rootfs of lxc in a private mount namespace only visible by the processes running in the container. lxc-3.0.0/doc/lxc-attach.sgml.in0000644061062106075000000003544013256572152013335 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-attach 1 lxc-attach start a process inside a running container. lxc-attach -n, --name name -f, --rcfile config_file -a, --arch arch -e, --elevated-privileges privileges -s, --namespaces namespaces -R, --remount-sys-proc --keep-env --clear-env -v, --set-var variable --keep-var variable -- command Description lxc-attach runs the specified command inside the container specified by name. The container has to be running already. If no command is specified, the current default shell of the user running lxc-attach will be looked up inside the container and executed. This will fail if no such user exists inside the container or the container does not have a working nsswitch mechanism. Previous versions of lxc-attach simply attached to the specified namespaces of a container and ran a shell or the specified command without first allocating a pseudo terminal. This made them vulnerable to input faking via a TIOCSTI ioctl call after switching between userspace execution contexts with different privilege levels. Newer versions of lxc-attach will try to allocate a pseudo terminal master/slave pair on the host and attach any standard file descriptors which refer to a terminal to the slave side of the pseudo terminal before executing a shell or command. Note, that if none of the standard file descriptors refer to a terminal lxc-attach will not try to allocate a pseudo terminal. Instead it will simply attach to the containers namespaces and run a shell or the specified command. Options Specify the configuration file to configure the virtualization and isolation functionalities for the container. This configuration file if present will be used even if there is already a configuration file present in the previously created container (via lxc-create). Specify the architecture which the kernel should appear to be running as to the command executed. This option will accept the same settings as the option in container configuration files, see lxc.conf 5 . By default, the current archictecture of the running container will be used. Do not drop privileges when running command inside the container. If this option is specified, the new process will not be added to the container's cgroup(s) and it will not drop its capabilities before executing. You may specify privileges, in case you do not want to elevate all of them, as a pipe-separated list, e.g. CGROUP|LSM. Allowed values are CGROUP, CAP and LSM representing cgroup, capabilities and restriction privileges respectively. (The pipe symbol needs to be escaped, e.g. CGROUP\|LSM or quoted, e.g. "CGROUP|LSM".) Warning: This may leak privileges into the container if the command starts subprocesses that remain active after the main process that was attached is terminated. The (re-)starting of daemons inside the container is problematic, especially if the daemon starts a lot of subprocesses such as cron or sshd. Use with great care. Specify the namespaces to attach to, as a pipe-separated list, e.g. NETWORK|IPC. Allowed values are MOUNT, PID, UTSNAME, IPC, USER and NETWORK. This allows one to change the context of the process to e.g. the network namespace of the container while retaining the other namespaces as those of the host. (The pipe symbol needs to be escaped, e.g. MOUNT\|PID or quoted, e.g. "MOUNT|PID".) Important: This option implies . When using and the mount namespace is not included, this flag will cause lxc-attach to remount /proc and /sys to reflect the current other namespace contexts. Please see the Notes section for more details. This option will be ignored if one tries to attach to the mount namespace anyway. Keep the current environment for attached programs. This is the current default behaviour (as of version 0.9), but is is likely to change in the future, since this may leak undesirable information into the container. If you rely on the environment being available for the attached program, please use this option to be future-proof. In addition to current environment variables, container=lxc will be set. Clear the environment before attaching, so no undesired environment variables leak into the container. The variable container=lxc will be the only environment with which the attached program starts. Set an additional environment variable that is seen by the attached program in the container. It is specified in the form of "VAR=VALUE", and can be specified multiple times. Keep a specified environment variable. It can only be specified in conjunction with --clear-env, and can be specified multiple times. &commonoptions; Examples To spawn a new shell running inside an existing container, use lxc-attach -n container To restart the cron service of a running Debian container, use lxc-attach -n container -- /etc/init.d/cron restart To deactivate the network link eth1 of a running container that does not have the NET_ADMIN capability, use either the option to use increased capabilities, assuming the ip tool is installed: lxc-attach -n container -e -- /sbin/ip link delete eth1 Or, alternatively, use the to use the tools installed on the host outside the container: lxc-attach -n container -s NETWORK -- /sbin/ip link delete eth1 Compatibility Attaching completely (including the pid and mount namespaces) to a container requires a kernel of version 3.8 or higher, or a patched kernel, please see the lxc website for details. lxc-attach will fail in that case if used with an unpatched kernel of version 3.7 and prior. Nevertheless, it will succeed on an unpatched kernel of version 3.0 or higher if the option is used to restrict the namespaces that the process is to be attached to to one or more of NETWORK, IPC and UTSNAME. Attaching to user namespaces is supported by kernel 3.8 or higher with enabling user namespace. Notes The Linux /proc and /sys filesystems contain information about some quantities that are affected by namespaces, such as the directories named after process ids in /proc or the network interface information in /sys/class/net. The namespace of the process mounting the pseudo-filesystems determines what information is shown, not the namespace of the process accessing /proc or /sys. If one uses the option to only attach to the pid namespace of a container, but not its mount namespace (which will contain the /proc of the container and not the host), the contents of will reflect that of the host and not the container. Analogously, the same issue occurs when reading the contents of /sys/class/net and attaching to just the network namespace. To work around this problem, the flag provides the option to remount /proc and /sys in order for them to reflect the network/pid namespace context of the attached process. In order not to interfere with the host's actual filesystem, the mount namespace will be unshared (like lxc-unshare does) before this is done, essentially giving the process a new mount namespace, which is identical to the hosts's mount namespace except for the /proc and /sys filesystems. Previous versions of lxc-attach suffered a bug whereby a user could attach to a containers namespace without being placed in a writeable cgroup for some critical subsystems. Newer versions of lxc-attach will check whether a user is in a writeable cgroup for those critical subsystems. lxc-attach might thus fail unexpectedly for some users (E.g. on systems where an unprivileged user is not placed in a writeable cgroup in critical subsystems on login.). However, this behavior is correct and more secure. Security The and options should be used with care, as it may break the isolation of the containers if used improperly. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-unshare.sgml.in0000644061062106075000000001425313256572152013535 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unshare 1 lxc-unshare Run a task in a new set of namespaces. lxc-unshare -s namespaces -u user -H hostname -i ifname -d -M command Description lxc-unshare can be used to run a task in a cloned set of namespaces. This command is mainly provided for testing purposes. Despite its name, it always uses clone rather than unshare to create the new task with fresh namespaces. Apart from testing kernel regressions this should make no difference. Options Specify the namespaces to attach to, as a pipe-separated list, e.g. NETWORK|IPC. Allowed values are MOUNT, PID, UTSNAME, IPC, USER and NETWORK. This allows one to change the context of the process to e.g. the network namespace of the container while retaining the other namespaces as those of the host. (The pipe symbol needs to be escaped, e.g. MOUNT\|PID or quoted, e.g. "MOUNT|PID".) Specify a userid which the new task should become. Set the hostname in the new container. Only allowed if the UTSNAME namespace is set. Move the named interface into the container. Only allowed if the NETWORK namespace is set. You may specify this argument multiple times to move multiple interfaces into container. Daemonize (do not wait for the container to exit before exiting) Mount default filesystems (/proc /dev/shm and /dev/mqueue) in the container. Only allowed if MOUNT namespace is set. Examples To spawn a new shell with its own UTS (hostname) namespace, lxc-unshare -s UTSNAME /bin/bash If the hostname is changed in that shell, the change will not be reflected on the host. To spawn a shell in a new network, pid, and mount namespace, lxc-unshare -s "NETWORK|PID|MOUNT" /bin/bash The resulting shell will have pid 1 and will see no network interfaces. After re-mounting /proc in that shell, mount -t proc proc /proc ps output will show there are no other processes in the namespace. To spawn a shell in a new network, pid, mount, and hostname namespace. lxc-unshare -s "NETWORK|PID|MOUNT|UTSNAME" -M -H slave -i veth1 /bin/bash The resulting shell will have pid 1 and will see two network interfaces (lo and veth1). The hostname will be "slave" and /proc will have been remounted. ps output will show there are no other processes in the namespace. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-snapshot.sgml.in0000644061062106075000000001235513256572152013730 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-snapshot 1 lxc-snapshot Snapshot an existing container. lxc-snapshot -n, --name name -c, --comment file lxc-snapshot -n, --name name -d, -destroy snapshot-name lxc-snapshot -n, --name name -L, --list -C, --showcomments lxc-snapshot -n, --name name -r, -restore snapshot-name -N, --newname newname Description lxc-snapshot creates, lists, and restores container snapshots. Snapshots are stored as snapshotted containers under the container's configuration path. For instance, if the container's configuration path is /var/lib/lxc and the container is c1, then the first snapshot will be stored as container snap0 under the path /var/lib/lxc/c1/snaps. If /var/lib/lxcsnaps, as used by LXC 1.0, already exists, then it will continue to be used. Options Associate the comment in comment_file with the newly created snapshot. Destroy the named snapshot. If the named snapshot is ALL, then all snapshots will be destroyed. List existing snapshots. Show snapshot comments in the snapshots listings. Restore the named snapshot, meaning a full new container is created which is a copy of the snapshot. When restoring a snapshot, the last optional argument if not given explicitly via --newname is the name to use for the restored container. If the newname is identical to the original name of the container, then the original container will be destroyed and the restored container will take its place. Note that deleting the original snapshot is not possible in the case of overlayfs or zfs backed snapshots. &commonoptions; &seealso; Author Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/Makefile.am0000644061062106075000000000251413256572152012044 00000000000000SUBDIRS = examples rootfs DIST_SUBDIRS = examples rootfs ja ko api if USE_DOCBOOK2X SUBDIRS += ja ko endif if ENABLE_API_DOCS SUBDIRS += api endif EXTRA_DIST = \ lxc.container.conf \ lxc.system.conf \ FAQ.txt if ENABLE_DOCBOOK man_MANS = lxc.conf.5 \ lxc.container.conf.5 \ lxc.system.conf.5 \ lxc-usernet.5 \ lxc.7 if ENABLE_TOOLS man_MANS += lxc-attach.1 \ lxc-autostart.1 \ lxc-cgroup.1 \ lxc-checkconfig.1 \ lxc-checkpoint.1 \ lxc-config.1 \ lxc-console.1 \ lxc-copy.1 \ lxc-create.1 \ lxc-destroy.1 \ lxc-device.1 \ lxc-execute.1 \ lxc-freeze.1 \ lxc-info.1 \ lxc-ls.1 \ lxc-monitor.1 \ lxc-snapshot.1 \ lxc-start.1 \ lxc-stop.1 \ lxc-top.1 \ lxc-unfreeze.1 \ lxc-unshare.1 \ lxc-wait.1 endif if ENABLE_COMMANDS man_MANS += lxc-update-config.1 \ lxc-user-nic.1 \ lxc-usernsexec.1 endif %.1 : %.sgml $(db2xman) $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.5 : %.sgml $(db2xman) $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.7 : %.sgml $(db2xman) $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true lxc-%.sgml : common_options.sgml see_also.sgml clean-local: $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) endif lxc-3.0.0/doc/lxc-create.sgml.in0000644061062106075000000001745413256572152013341 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-create 1 lxc-create creates a container lxc-create -n name -f config_file -t template -B backingstore -- template-options Description lxc-create creates a system object where is stored the configuration information and where can be stored user information. The identifier name is used to specify the container to be used with the different lxc commands. The object is a directory created in @LXCPATH@ and identified by its name. The object is the definition of the different resources an application can use or can see. The more the configuration file contains information, the more the container is isolated and the more the application is jailed. If the configuration file config_file is not specified, the container will be created with the default isolation: processes, sysv ipc and mount points. Options Specify the configuration file to configure the virtualization and isolation functionalities for the container. 'template' is the short name of an existing 'lxc-template' script that is called by lxc-create, eg. busybox, debian, fedora, ubuntu or sshd. Refer to the examples in @LXCTEMPLATEDIR@ for details of the expected script structure. Alternatively, the full path to an executable template script can also be passed as a parameter. "none" can be used to force lxc-create to skip rootfs creation. 'backingstore' is one of 'dir', 'lvm', 'loop', 'btrfs', 'zfs', 'rbd', or 'best'. The default is 'dir', meaning that the container root filesystem will be a directory under @LXCPATH@/container/rootfs. This backing store type allows the optional --dir ROOTFS to be specified, meaning that the container rootfs should be placed under the specified path, rather than the default. (The 'none' backingstore type is an alias for 'dir'.) If 'btrfs' is specified, then the target filesystem must be btrfs, and the container rootfs will be created as a new subvolume. This allows snapshotted clones to be created, but also causes rsync --one-filesystem to treat it as a separate filesystem. If backingstore is 'lvm', then an lvm block device will be used and the following further options are available: --lvname lvname1 will create an LV named lvname1 rather than the default, which is the container name. --vgname vgname1 will create the LV in volume group vgname1 rather than the default, lxc. --thinpool thinpool1 will create the LV as a thin-provisioned volume in the pool named thinpool1 rather than the default, lxc. --fstype FSTYPE will create an FSTYPE filesystem on the LV, rather than the default, which is ext4. --fssize SIZE will create a LV (and filesystem) of size SIZE rather than the default, which is 1G. If backingstore is 'loop', you can use --fstype FSTYPE and --fssize SIZE as 'lvm'. The default values for these options are the same as 'lvm'. If backingstore is 'rbd', then you will need to have a valid configuration in ceph.conf and a ceph.client.admin.keyring defined. You can specify the following options : --rbdname RBDNAME will create a blockdevice named RBDNAME rather than the default, which is the container name. --rbdpool POOL will create the blockdevice in the pool named POOL, rather than the default, which is 'lxc'. If backingstore is 'best', then lxc will try, in order, btrfs, zfs, lvm, and finally a directory backing store. This will pass template-options to the template as arguments. To see the list of options supported by the template, you can run lxc-create -t TEMPLATE -h. &commonoptions; Diagnostic The container already exists As the message mention it, you try to create a container but there is a container with the same name. You can use the lxc-ls command to list the available containers on the system. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-checkpoint.sgml.in0000644061062106075000000001142213256572152014212 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-checkpoint 1 lxc-checkpoint checkpoint a container lxc-checkpoint -n name -D PATH -r -s -v -d -F Description lxc-checkpoint checkpoints and restores containers. Options Restore the checkpoint for the container, instead of dumping it. This option is incompatible with . The directory to dump the checkpoint metadata. Optionally stop the container after dumping. This option is incompatible with . Enable verbose criu logging. Restore the container in the background (this is the default). Only available when providing . Restore the container in the foreground. Only available when providing . &commonoptions; Examples lxc-checkpoint -n foo -D /tmp/checkpoint Checkpoint the container foo into the directory /tmp/checkpoint. lxc-checkpoint -r -n foo -D /tmp/checkpoint Restore the checkpoint from the directory /tmp/checkpoint. &seealso; Author Tycho Andersen tycho.andersen@canonical.com lxc-3.0.0/doc/ja/0000755061062106075000000000000013256572302010455 500000000000000lxc-3.0.0/doc/ja/lxc-monitor.sgml.in0000644061062106075000000001616113256572152014151 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-monitor 1 lxc-monitor コンテナの状態の監視 lxc-monitor -n name -Q name <!-- Description -->説明 lxc-monitor はコンテナの状態を監視します。 name をモニタ対象のコンテナを指定するために使うことも可能です。 これは posix2 準拠の正規表現であり、全てのコンテナの監視を行ったり、いくつかのコンテナの監視を行ったり、1 つだけのコンテナの監視を行ったりすることが可能です。 name を指定しない場合、デフォルトで '.*' となり、lxcpath 以下の全てのコンテナの監視を行います。 1 つ以上のコンテナパスをモニタリングするために、複数回の =PATH オプションを指定することが可能です。 しかし、複数のパスに同じ名前のコンテナが存在する場合は、出力の見分けがつかない事に注意が必要です。 <!-- Options -->オプション 指定したそれぞれの lxcpath に対する lxc-monitord デーモンを終了させる要求を行います。 lxc-monitord は通常は新しいクライアントを 30 秒待ちますが、このコマンドを受け取ると、クライアントがいなくなるとすぐに終了します。 このオプションは、lxcpath のファイルシステムをアンマウントする必要があるときに役に立ちます。 &commonoptions; <!-- Examples -->例 lxc-monitor -n foo foo という名前のコンテナの様々な状態を監視します。 lxc-monitor -n 'foo|bar' foo と bar という名前のコンテナの様々な状態を監視します。 lxc-monitor -n '[fb].*' 'f' もしくは 'b' という文字で始まるコンテナの様々な状態を監視します。 lxc-monitor -n '.*' 全てのコンテナの様々な状態を監視します。 <!-- Diagnostic -->診断 The container was not found 指定したコンテナが lxc-create で作成されておらず存在しません。 See Also regex 7 , &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-unshare.sgml.in0000644061062106075000000002474213256572152014133 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unshare 1 lxc-unshare タスクの新しい名前空間の組の中ので実行 lxc-unshare -s namespaces -u user -H hostname -i ifname -d -M command <!-- Description -->説明 lxc-unshare はクローンされた名前空間の組の中でタスクを実行するのに使います。 このコマンドは主にテスト目的で使います。 このような名前であるにもかかわらず、このコマンドは常に、新しい名前空間で新しいタスクを作成するために unshare ではなく clone を使います。 テスト中のカーネルの退行は別として、これで違いは生じないはずです。 <!-- Options -->オプション アタッチする名前空間を、パイプでつなげたリストで指定します。 例えば NETWORK|IPC のようにです。 指定できる値は MOUNTPIDUTSNAMEIPCUSER NETWORK です。 これにより、プロセスのコンテキストを変更することができます。 例えば、コンテナのネットワーク名前空間だけを変更し、他の名前空間をホストのものと同じものに保ったままにするというようなことです。 (パイプ記号を MOUNT\|PID のようにエスケー プするか、"MOUNT|PID" のように引用符号を付ける必要が>あります。) 新しいタスクを実行するユーザを指定します。 新しいコンテナ内でのホスト名を設定します。UTSNAME 名前空間を指定している時のみ有効です。 指定したインターフェースをコンテナ内に移動させます。ネットワーク (NETWORK) 名前空間を指定している時のみ有効です。複数のインターフェースをコンテナに移動させるために複数回指定することも可能です。 デーモンにします (コマンドはコンテナの終了を待ちません)。 コンテナ内でデフォルトのファイルシステム (/proc, /dev/shm, /dev/mqueue) をマウントします。マウント (MOUNT) 名前空間を指定している時のみ有効です。 <!-- Examples -->例 自身の UTS(hostname)名前空間でシェルを起動するには以下のように実行します。 lxc-unshare -s UTSNAME /bin/bash もし、そのシェル上でホスト名を変更しても、その変更はホストには反映されません。 新しいネットワーク、pid、マウント名前空間でシェルを起動するには以下のように実行します。 lxc-unshare -s "NETWORK|PID|MOUNT" /bin/bash その結果起動するシェルは pid が 1 となり、ネットワークインターフェースがないでしょう。 そのシェル上で /proc を再マウントした後 mount -t proc proc /proc ps の出力は、その名前空間内には他のプロセスが存在しない事を表示するでしょう。 新しいネットワーク、PID、マウント、ホスト名 (UTS) 名前空間でシェルを起動するには、 lxc-unshare -s "NETWORK|PID|MOUNT|UTSNAME" -M -H slave -i veth1 /bin/bash 起動したシェルは PID 1 を持ち、2 つのネットワークインターフェース (lo と veth1) を持ちます。 ホスト名は "slave" となり、/proc は再マウントされます。ps コマンドは、名前空間内には他のプロセスがない状態を表示するでしょう。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-usernsexec.sgml.in0000644061062106075000000001574013256572152014650 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernsexec 1 lxc-usernsexec 新しいユーザ名前空間内で root としてタスクを実行する lxc-usernsexec -m uid-map -- command <!-- Description -->説明 lxc-usernsexec は、新しいユーザ名前空間内で root としてタスクを実行するのに使います。 <!-- Options -->オプション ユーザ名前空間内で使うための uid のマッピング。マッピングは、コロンで分けられた 4 つの値から構成されます。 最初の文字は 'u', 'g', 'b' のどれかで、マッピングが UID, GID, UID と GID の両方のうちのどれに関するものなのかを指定します。 次はユーザ名前空間内の最初の ID を指定します。その次はホスト上での最初の ID を指定します。最後はマッピングされる ID の数を指定します。 複数回のマッピングを指定することも可能です。もしマッピングを指定しない場合、デフォルトでは /etc/subuid, /etc/subgid で許可された全ての範囲の UID, GID が、コンテナ内の 0 から始まる UID, GID にマッピングされます。 lxc-usernsexec は、常に名前空間内の 0 に setuid, setgid しようとしますので、名前空間内の UID 0 は必ずマッピングしなければいけないことに注意してください。 <!-- Examples -->例 割り当てられた subuid の全てをコンテナ内にマッピングしてシェルを起動するには、 lxc-usernsexec のようにしてください。/bin/sh とは違うシェルを起動する場合、 lxc-usernsexec -- /bin/bash のようにしてください。 あなたの UID が 1000 で、コンテナ内の root を 190000 にマッピングする場合で、あなたの所有するファイルをコンテナ内の root に chown したい場合は、以下のように実行します。 lxc-usernsexec -m b:0:1000:1 -m b:1:190000:1 -- /bin/chown 1:1 $file これはあなたの UID をユーザ名前空間の root に、190000 を uid 1 にマッピングしています。 ユーザ名前空間内の root は、名前空間内の全ての ID に対して特権があるため、ホスト上で単純に chown を使えない場合でも、あなたはファイルのオーナーを変更する事が可能です。 &seealso; <!-- Author -->作者 Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/ja/lxc-wait.sgml.in0000644061062106075000000001133213256572152013421 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-wait 1 lxc-wait 指定したコンテナ状態への遷移への待機 lxc-wait -n name -s states <!-- Description -->説明 lxc-wait は、コンテナが指定した状態になるのを待って終了します。 スクリプトで使用するときに役に立ちます。 <!-- Options -->オプション 待つ対象のコンテナの状態を指定します。 コンテナの状態として、いくつかの状態を OR で指定することが可能です。 期待した状態になるまで timeout 秒待ちます。 &commonoptions; <!-- Examples -->例 lxc-wait -n foo -s RUNNING 状態が 'RUNNING' になった時点で終了します。 lxc-wait -n foo -s 'RUNNING|STOPPED' 状態が 'RUNNING' もしくは 'STOPPED' になった時点で終了します。 <!-- Diagnostic -->診断 The container was not found 指定したコンテナが lxc-create で作成されておらず存在しません。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-execute.sgml.in0000644061062106075000000002045113256572152014121 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-execute 1 lxc-execute コンテナ内でのアプリケーションの実行 lxc-execute -n name -f config_file -s KEY=VAL -- command <!-- Description -->説明 lxc-execute は指定した command を、name で指定したコンテナ内で実行します。 このコマンドは、lxc-create コマンドであらかじめ定義した設定、もしくはパラメータとして与えた設定ファイルを元にコンテナをセットアップします。 もし設定が定義されていない場合、デフォルトの隔離を使用します。 このコマンドは主に、素早く単一のアプリケーションを隔離された環境で動作させたい時に使います。 lxc-execute は、lxc-init を間にはさんで、コンテナ内で特定のコマンドを実行します。 lxc-init は、指定されたコマンドが実行された後は、そのコマンドの終了と、そのコマンドから生成された全てのプロセスの終了を待ちます (これにより、コンテナ内でデーモンのサポートが可能になります)。 言いかえると、コンテナ内では lxc-init が pid 1 となり、アプリケーションの最初のプロセスの pid が 2 となります。 前述の lxc-init は、受け取ったシグナルを開始したコマンドに送るように設計されています。 <!-- Options -->オプション コンテナに設定したい仮想化および隔離機能の設定を行う設定ファイルを指定します。 もしコンテナ作成前に (lxc-create によって) あらかじめ設定ファイルが指定されている場合であっても、指定した設定ファイルが使われます。 設定変数 KEY の値を VAL に設定します。この設定は config_file で設定された値を上書きします。 オプション指定の最後の印で、それ以上のオプションの処理を止めます。 -- の後の引数は実行する command の引数として扱われます。 このオプションは、command にオプションを指定したいときに、lxc-execute がそのオプションを読み取ってほしくないときに役に立ちます。 &commonoptions; <!-- Diagnostic -->診断 The container is busy 指定したコンテナが既にアプリケーションを実行中の場合。コンテナを再使用したり、新しく作成する前にコンテナを止める必要があります。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/Makefile.am0000644061062106075000000000211313256572152012431 00000000000000mandir = @mandir@/ja SUBDIRS = DIST_SUBDIRS = EXTRA_DIST = \ FAQ.txt if ENABLE_DOCBOOK man_MANS = \ lxc-attach.1 \ lxc-autostart.1 \ lxc-cgroup.1 \ lxc-checkconfig.1 \ lxc-checkpoint.1 \ lxc-config.1 \ lxc-console.1 \ lxc-copy.1 \ lxc-create.1 \ lxc-destroy.1 \ lxc-device.1 \ lxc-execute.1 \ lxc-freeze.1 \ lxc-info.1 \ lxc-ls.1 \ lxc-monitor.1 \ lxc-snapshot.1 \ lxc-start.1 \ lxc-stop.1 \ lxc-top.1 \ lxc-unfreeze.1 \ lxc-unshare.1 \ lxc-update-config.1 \ lxc-user-nic.1 \ lxc-usernsexec.1 \ lxc-wait.1 \ \ lxc.conf.5 \ lxc.container.conf.5 \ lxc.system.conf.5 \ lxc-usernet.5 \ \ lxc.7 %.1 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.5 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.7 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true lxc-%.sgml : common_options.sgml see_also.sgml clean-local: $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) endif lxc-3.0.0/doc/ja/lxc.conf.sgml.in0000644061062106075000000001423013256572152013403 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.conf 5 lxc.conf LXC の設定ファイル <!-- Description -->説明 LXC の設定は 2 つのパートに分かれます。コンテナの設定とシステムの設定です。 <!-- Container configuration -->コンテナの設定 コンテナの設定は、コンテナのディレクトリ内の config に設定します。 必要最小限の設定は、コンテナの作成時に選択したテンプレートの推奨するデフォルトと、default.conf ファイルに記載されているデフォルトに追加する設定から生成されます。 default.conf ファイルは @LXC_DEFAULT_CONFIG@ に置かれます。 非特権コンテナの場合には ~/.config/lxc/default.conf を使用します。 このファイルの書式は以下を参照してください。 lxc.container.conf 5 <!-- System configuration -->システム設定 システムの設定には @LXC_GLOBAL_CONF@ を使用します。非特権コンテナの場合は ~/.config/lxc/lxc.conf を使用します。 この設定ファイルは LXC のデフォルトパスやストレージバックエンドの設定のような値を設定する時に使用します。 このファイルの書式は以下を参照してください。 lxc.system.conf 5 See Also lxc 1 , lxc.container.conf 5 , lxc.system.conf 5 , lxc-usernet 5 <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-usernet.sgml.in0000644061062106075000000001537513256572152014155 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernet 5 lxc-usernet 非特権ユーザのネットワーク管理用の設定ファイル <!-- Description -->説明 @LXC_USERNIC_CONF@ は、非特権ユーザが作成する可能性のあるネットワークインターフェースを lxc-user-nic プログラムが割り当てる際の制限を制御します。 <!-- Configuration -->設定 このファイルは、一行が以下のような形式の複数のエントリを持つ行から構成されます。 user type bridge number もしくは @group type bridge number ここでそれぞれのエントリは以下のような意味を持ちます。 このエントリを適用するユーザ名 このエントリを適用するグループ名 許可されるネットワークインターフェースのタイプ。現時点では veth のみサポートされます。 ネットワークインターフェースが接続されるブリッジ。 例えば lxcbr0 のように指定します。 指定したユーザもしくはグループが、指定したブリッジに接続できる、指定した形式のネットワークインターフェースの数。 例えば 2 のように指定します。 あるユーザに対する指定が、ユーザ名とひとつ以上のユーザグループの両方で指定される可能性があるので、そのユーザがネットワークインターフェースを作れるようにする設定が複数行にわたる可能性があります。 このような場合、あるインターフェースの作成は、設定ファイルに現れた順にユーザもしくはグループの割り当てをカウントします。 もしある行の設定に対する割り当てが一杯の場合、他の割り当て行が現れるかファイルの最後に達するまで、残りの行を読み込んでチェックします。 See Also lxc 1 , lxc-user-nic 1 <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-console.sgml.in0000644061062106075000000001557113256572152014130 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-console 1 lxc-console 指定したコンテナのコンソールの起動 lxc-console -n name -e escape character -t ttynum <!-- Description -->説明 パラメータで指定したコンテナで tty サービスが設定され、利用可能である場合、このコマンドはコンテナにログイン出来るコンソールを起動します。 利用可能な tty は、このコマンドが取得した空いている tty です。 これは、コンテナに 4 つの利用可能な tty がある場合、コマンドは 4 個までそれぞれ異なる tty を取得して開きます。5 回目のコマンドは利用可能なコンソールがないため、失敗します。 コマンドは tty に接続します。 もし、接続が失われたり、切断された場合、コマンドは再度起動し、切断前の状態で tty の再取得をしようとします。 ttynum を 0 に設定すると、dev/tty<ttynum>の代わりにコンテナの /dev/console に接続します。 tty からの接続を切断し、lxc-console を抜ける時に、キーボードのエスケープシーケンスを使います。 デフォルトのエスケープシーケンスは <Ctrl+a q> です。 <!-- Options -->オプション <Ctrl a> の代わりに使用するエスケープシーケンスのプレフィックスを指定します。 これは '^文字' または単なる '文字' で指定します。 例えば、<Ctrl+b q> をエスケープシーケンスとして使うには -e '^b' とします。 接続する tty の番号か、コンソールに接続するために 0 を指定します。 指定しない場合は、次に利用可能な tty 番号を自動的にコンテナが選択します。 &commonoptions; <!-- Diagnostic -->診断 tty service denied 利用可能な tty がないか、コンソールを使うのに十分な権限がありません。 例えば、コンテナが "foo" ユーザの所有であるのに、"bar" ユーザがコンソールを開こうとしている場合などです。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-user-nic.sgml.in0000644061062106075000000001523613256572152014211 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-user-nic 1 lxc-user-nic NIC を作成し、他のネットワーク名前空間に割り当てる lxc-user-nic pid type bridge nicname <!-- Description -->説明 lxc-user-nic は root に setuid されたプログラムで、lxc コンテナが使うネットワークインターフェースを、特権を持たないユーザが作成できます。 このプログラムは、@LXC_USERNIC_CONF@ という設定ファイルを参照して、呼び出したユーザが作成することができるインターフェースの数と、どのブリッジに接続するかを決定します。 また、ユーザが作成したインターフェースの数を @LXC_USERNIC_DB@ を使ってチェックします。 これにより、呼び出したユーザが、インターフェースを割り当てるネットワーク名前空間上で特権を持つことが保証されます。 <!-- Options -->オプション インターフェースを割り当てたいネットワーク名前空間を持つタスクのプロセス ID。 割り当てるネットワークインターフェースのタイプ。現時点では、veth のみサポートされます。 このタイプを指定すると、それぞれがトンネルのエンドポイントとなる 2 つのインターフェースが作成されます。 一方のエンドポイントは指定したブリッジに接続され、もう一方はコンテナに割り当てられます。 ネットワークインターフェースを接続するブリッジ。 例えば lxcbr0 のように指定します。 コンテナ内に作られるインターフェースの名前。 もし指定しない場合、eth0 となります。 See Also lxc 1 , lxc-start 1 , lxc-usernet 5 <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-config.sgml.in0000644061062106075000000000732513256572152013731 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-config 1 lxc-config LXC のシステム設定の問い合わせ lxc-config -l item <!-- Description -->説明 lxc-config は LXC のシステム設定の有効な設定項目名を一覧表示したり、個々の設定項目に設定されている値を表示したりします。 <!-- Options -->オプション サポートされている全ての設定項目を表示します。 指定した設定項目に設定されている値を表示します。 &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-copy.sgml.in0000644061062106075000000005345213256572152013440 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-copy 1 lxc-copy 既存のコンテナのコピー lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -B, --backingstorage backingstorage -s, --snapshot -K, --keepname -D, --keepdata -M, --keepmac -L, --fssize size [unit] -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -e, --ephemeral -B, --backingstorage backingstorage -s, --snapshot -K, --keepname -D, --keepdata -M, --keepmac -L, --fssize size [unit] -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -e, --ephemeral -B, --backingstorage backingstorage -s, --snapshot -t, --tmpfs -K, --keepname -M, --keepmac -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -R, --rename <!-- Description -->説明 lxc-copy は、すでに存在するコンテナのコピーを作成します。オプションを指定することで、作成後にそのコピーを起動できます (コピーは一時的なコピーまたは永続的なコピーのどちらも可能です)。 このコマンドは lxc-clonelxc-start-ephemeral の置き換えのコマンドです。 lxc-copy は、既存のコンテナのコピーを作成します。 コピーは元のコンテナの完全なクローンにできます。この場合、単にコンテナのルートファイルシステムのすべてが、新しいコンテナにコピーされます。 また、スナップショットを取得することも可能です。すなわち、元のコンテナの小さなコピーオンライトのコピーにするということです。この場合、コピーで指定するバッキングストレージがスナップショットをサポートしている必要があります。 スナップショットをサポートしているバッキングストレージは、現時点では btrfs、lvm (lvm デバイスはスナップショットのスナップショットはサポートしていません)、overlay、zfs です。 コピー先のバッキングストレージは、元のコンテナと同じタイプになるでしょう。ただし、ディレクトリバックエンドのコンテナのスナップショットは overlay で取得できますので例外です。 -e オプションを指定した場合は、元のコンテナの一時的なスナップショットを作成し、起動します。一時的なコンテナの場合、設定ファイルに lxc.ephemeral = 1 がセットされ、シャットダウン後に削除されます。 -e-D を同時に指定すると、元のコンテナの一時的ではないスナップショットを作成し、起動します。 -t オプションを指定して、一時的なコンテナを tmpfs 上に置くことができます。 注意: tmpfs 上に置いた一時的なコンテナをリブートすると、コンテナに対して行ったすべての変更は失われます! -e を指定した場合で、-N でコンテナの名前を指定しない場合は、スナップショットの名前はランダムで命名されます。 -e で作成し、起動したコンテナは、コンテナ独自のマウントを行えます。現時点では bindoverlay という 2 つのタイプのマウントがサポートされています。 マウントタイプは -m オプションのサブオプションとして指定します。この指定はカンマ区切りで複数回指定できます。 overlay マウントの場合は、現時点では -m overlay=/src:/dest のように指定します。マウント先の dest を指定しない場合は、destsrc と同じになります。 読み込み専用の bind マウントは -m bind=/src:/dest:ro のように指定します。読み書き可能な bind マウントは -m bind=/src:/dest:rw のように指定します。bind マウントのデフォルトは読み書き可能ですので、読み書き可能なマウントを行う場合は省略できます。マウント先の dest を指定しない場合は、destsrc と同じになります。 複数のマウントを行う場合の例を示すと、-m bind=/src1:/dest1:ro,bind=/src2:ro,overlay=/src3:/dest3 のようになります。 -m オプションで指定するマウント、オプション、指定フォーマットは変更される可能性があります。 <!-- Options -->オプション コピー先のコンテナの名前。 コピー先のパス。 元のコンテナをリネームします。 元のコンテナのスナップショットを作成します。コピー先のバッキングストレージがスナップショットをサポートしている必要があります。現時点では btrfs、lvm、overlay、zfs が対象となります。 スナップショットしたコンテナをフォアグラウンドで起動します。スナップショットしたコンテナのコンソールは現在の tty にアタッチされます。(このオプションは -e と同時の場合のみ指定できます。) スナップショットしたコンテナをデーモンで起動します (一時的なコンテナではこのモードがデフォルトです)。 コンテナは tty を持ちませんので、エラーが発生しても何も表示されません。エラーをチェックするにはログファイルを使います。(このオプションは -e と同時の場合のみ指定できます。) スナップショットするコンテナで行うマウントを指定します。マウントタイプは {bind, overlay} のどれかで指定します。例えば のようになります。(このオプションは -e と同時の場合のみ指定できます。) このオプションを指定すると、一時的なコンテナを tmpfs 上に置きます。 注意: tmpfs 上に置かれた一時的なコンテナをリブートすると、コンテナに対して行ったすべての変更が失われます。 このフラグは -e オプションを指定して作成した一時的なコンテナに対してのみ有効です。一時的なスナップショットを作成する元のコンテナは、ディレクトリバックエンド上に存在しなければなりません。 コピー先コンテナのバッキングストレージのタイプを指定します。ここで 'backingsotrage' は 'btrfs'、'dir'、'lvm'、'loop'、'overlay'、'zfs' のどれかです。 'lvm' ファイルシステムのサイズを指定します。 このオプションを指定すると、元のコンテナのホスト名をコピー先でもそのまま使います。 -e オプションと同時にこのオプションを使うと、一時的でないコンテナを作成し、起動します。 このオプションを指定すると、元のコンテナの MAC アドレスをコピー先でもそのまま使います。 <!-- Copy hook -->コピー時のフック コピーされるコンテナに 1 つ以上の lxc.hook.clone の指定が存在する場合、指定されたフックは新しいコンテナに対して呼ばれます。 クローンフックに渡される最初の 3 つの引数は、コンテナ名、セクション ('lxc')、フックタイプ ('clone') となります。 lxc-copy に渡される追加の引数は、フックプログラムに渡される引数の 4 番目以降となります。 LXC_ROOTFS_MOUNT 環境変数には、コンテナの root ファイルシステムがマウントされるパスが与えられます。 設定ファイルのパス名は LXC_CONFIG_FILE に、新しいコンテナ名は LXC_NAME、古いコンテナ名は LXC_SRC_NAME に、rootfs のあるパスまたはデバイスは LXC_ROOTFS_PATH に保存されます。 &commonoptions; &seealso; Author Christian Brauner christian.brauner@mailbox.org lxc-3.0.0/doc/ja/lxc-cgroup.sgml.in0000644061062106075000000001313613256572152013760 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-cgroup 1 lxc-cgroup コンテナに関係する control group の管理 lxc-cgroup -n name state-object value <!-- Description -->説明 lxc-cgroup は、コンテナの cgroup の一致するサブシステム (例えば 'cpuset') の state-object (例えば 'cpuset.cpus') の値を取得したり、値を設定したりします。 value が指定されないときは、state-object の値を表示します。指定されている場合は値を設定します。 lxc-cgroupstate-object が実行中のカーネルで有効かどうかのチェックを行いません。 また、指定したサブシステムがマウントされた cgroup の階層構造に含まれているかどうかのチェックを行いません。 <!-- Options -->オプション (cgroup の) 状態オブジェクト (state object) 名を指定します。 (cgroup の) 状態オブジェクト (state object) に設定する値を指定します。 &commonoptions; <!-- Examples -->例 lxc-cgroup -n foo devices.list 使用が許可されているデバイスを表示します。 lxc-cgroup -n foo cpuset.cpus "0,3" コンテナにプロセッサ番号 0 と 3 のプロセッサを割り当てます。 <!-- Diagnostic -->診断 The container was not found コンテナが実行されていません。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-stop.sgml.in0000644061062106075000000002233513256572152013447 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-stop 1 lxc-stop コンテナ内で動作しているアプリケーションの停止 lxc-stop -n name -W -r -t timeout -k --nokill --nolock <!-- Description -->説明 lxc-stop は、リブート、クリーンシャットダウン、コンテナ内の全てのプロセスの kill のどれかを行います。 デフォルトでは、コンテナのクリーンなシャットダウンを lxc.signal.halt (デフォルトでは SIGPWR) をコンテナの init プロセスに送ることでリクエストし、コンテナの終了を 60 秒待ち、return します。 コンテナが 60 秒の間にクリーンに終了するのに失敗した場合、lxc.signal.stop (デフォルトは SIGKILL です) を送り、強制的にシャットダウンします。 リブートのリクエストは lxc.signal.reboot に設定されたシグナルをコンテナの init プロセスに送ります (デフォルトは SIGINT です)。 -W, -r, -s, -k, --nokill オプションは実行する際のアクションを指定します。 -W は、指定したアクションの後に、lxc-stop は速やかに終了します。 一方、-t TIMEOUT はコンテナが完全にシャットダウンやリブートするのを待つ時間の最大値を設定します。 <!-- Options -->オプション コンテナのリブートをリクエストします。 コンテナのクリーンシャットダウンをリクエストするのでなく、明確にコンテナ内の全てのタスクを kill します。 これは、以前の lxc-stop の動作です。 クリーンなシャットダウンのみをリクエストします。 クリーンなシャットダウンに失敗した場合でも、コンテナのタスクを kill しません。 このオプションはいかなる場合でも API の lxc のロックの使用を回避します。 システム状態が不良な場合に lxc-stop の応答がない状態の場合のみ使用すべきです。 リクエストされたアクション (reboot, shutdown, 強制的な kill) を実行するだけで (すぐに) 終了 (exit) します。 コンテナの強制停止まで TIMEOUT 秒待ちます。 <!-- Exit value -->終了ステータス 0 コンテナの停止が成功しました。 1 コンテナの停止中にエラーが発生しました。 2 指定のコンテナは存在しますが、実行中ではありません。 <!-- Diagnostic -->診断 The container was not found 指定したコンテナが lxc-create で作成されておらず存在しません。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-autostart.sgml.in0000644061062106075000000004124513256572152014511 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-autostart 1 lxc-autostart 自動起動の設定がされたコンテナの開始/停止/kill lxc-autostart -k -L -r -s -a -A -g groups -t timeout <!-- Description -->説明 lxc-autostart は lxc.start.auto が設定されたコンテナの処理を行います。 ユーザがコンテナの開始、シャットダウン、kill、再起動を、設定した時間間隔で、設定した順番で行えるようにします。 lxc.group でのフィルタリングによって、もしくは定義された全てのコンテナを実行します。 何の動作も行わず、対象のコンテナ (とコンテナに設定された起動待機時間) のリストを表示するリストモードを外部ツールから使用することも可能です。 -r, -s, -k オプションは実行する動作を指定します。何も指定しない場合は、コンテナを起動します。 -a, -g は、どのコンテナを対象にするかを指定するのに使います。デフォルトでは、lxc.group が指定されていないコンテナにだけが対象となります。 -t TIMEOUT はコンテナが完全にシャットダウンもしくはリブートを待つ最大時間を指定します。 <!-- Options -->オプション コンテナのリブートを要求します。 クリーンなシャットダウンを要求します。もし、-t timeout が 0 より大きい場合で、コンテナがこの時間内にシャットダウンしない場合は、コンテナは -k kill オプションを指定した時のように kill されます。 コンテナのクリーンなシャットダウンを要求するのではなく、明確にコンテナの全てのタスクを kill します。 実際の動作は行わず、コンテナ名と次のコンテナを開始するまでの間隔の表示だけを行います。 コンテナの強制停止まで TIMEOUT 秒待ちます。 対象にするコンテナのグループのカンマ区切りのリスト (デフォルトでは lxc.group 指定のないコンテナ、つまり NULL グループが対象になります)。 このオプションは複数回指定することができ、オプションは連結されます。NULL もしくは空のグループは、NULL グループを処理すべき場所に指定された先頭のカンマ、末尾のカンマ、途中に現れる 2 つ続きのカンマ、空のオプション引数で指定することができます。 グループはコマンドラインで指定された順番に処理されます。-g オプションの複数回の呼び出しはカンマ区切りのリストと自由に混ぜることができ、指定した順番に連結されます。 lxc.group の指定を無視して、自動起動が設定されているコンテナを全て選択します。 lxc.start.auto で設定されているフラグを無視します。-a と組み合わせることにより、システム上の全てのコンテナを選択します。 <!-- Autostart and System Boot -->自動起動とシステムブート lxc-autostart コマンドは、LXC システムサービスがホストシステムのブートおよびシャットダウン時に実行するように有効化されているとき、LXC システムサービスの一部として使用されます。 このコマンドはホストシステムのブート時に、どのコンテナをどういう順番で、それぞれのコンテナの起動間隔をどれくらい開けるかを選択するのに使います。 コンテナはいくつでもグループに属することができ、全く属さないことも可能です。特別なグループが 2 つ存在します。1 つは NULL グループです。これはどのグループにも属さないコンテナです。もう 1 つは "onboot" グループです。 LXC サービスが有効になった状態でシステムがブートすると、最初に "onboot" グループのメンバーである lxc.start.auto == 1 が設定されたコンテナを起動しようとします。起動は lxc.start.order の順に起動します。 lxc.start.delay が指定されている場合、現在対象となっているコンテナに初期化の時間を与え、ホストシステムの負荷を低減するために、次のコンテナを開始させるまでに遅延時間を与えます。 "onboot" グループのメンバーが開始した後、LXC システムは lxc.start.auto == 1 が設定された、どのグループのメンバーでもない (NULL グループの) コンテナのブートを onboot グループのコンテナと同様に開始します。 <!-- Startup Group Examples -->スタートアップグループの例 まず最初に "onboot" グループの処理を開始し、その後 NULL グループの処理を開始します。 これは以下と等価です: まず最初に "dns" グループの処理を開始し、2 番目に "web" グループ、その後 NULL グループ、"onboot" グループの順に処理を開始します。 これは以下と等価です: もしくは &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/Makefile.in0000644061062106075000000010425713256572256012463 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/ja ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/tls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = lxc-attach.sgml lxc-autostart.sgml \ lxc-cgroup.sgml lxc-checkconfig.sgml lxc-checkpoint.sgml \ lxc-config.sgml lxc-console.sgml lxc-copy.sgml lxc-create.sgml \ lxc-destroy.sgml lxc-device.sgml lxc-execute.sgml \ lxc-freeze.sgml lxc-info.sgml lxc-ls.sgml lxc-monitor.sgml \ lxc-snapshot.sgml lxc-start.sgml lxc-stop.sgml lxc-top.sgml \ lxc-unfreeze.sgml lxc-unshare.sgml lxc-update-config.sgml \ lxc-user-nic.sgml lxc-usernsexec.sgml lxc-wait.sgml \ lxc.conf.sgml lxc.container.conf.sgml lxc.system.conf.sgml \ lxc-usernet.sgml lxc.sgml common_options.sgml see_also.sgml CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man7dir)" man5dir = $(mandir)/man5 man7dir = $(mandir)/man7 NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(srcdir)/common_options.sgml.in $(srcdir)/lxc-attach.sgml.in \ $(srcdir)/lxc-autostart.sgml.in $(srcdir)/lxc-cgroup.sgml.in \ $(srcdir)/lxc-checkconfig.sgml.in \ $(srcdir)/lxc-checkpoint.sgml.in $(srcdir)/lxc-config.sgml.in \ $(srcdir)/lxc-console.sgml.in $(srcdir)/lxc-copy.sgml.in \ $(srcdir)/lxc-create.sgml.in $(srcdir)/lxc-destroy.sgml.in \ $(srcdir)/lxc-device.sgml.in $(srcdir)/lxc-execute.sgml.in \ $(srcdir)/lxc-freeze.sgml.in $(srcdir)/lxc-info.sgml.in \ $(srcdir)/lxc-ls.sgml.in $(srcdir)/lxc-monitor.sgml.in \ $(srcdir)/lxc-snapshot.sgml.in $(srcdir)/lxc-start.sgml.in \ $(srcdir)/lxc-stop.sgml.in $(srcdir)/lxc-top.sgml.in \ $(srcdir)/lxc-unfreeze.sgml.in $(srcdir)/lxc-unshare.sgml.in \ $(srcdir)/lxc-update-config.sgml.in \ $(srcdir)/lxc-user-nic.sgml.in $(srcdir)/lxc-usernet.sgml.in \ $(srcdir)/lxc-usernsexec.sgml.in $(srcdir)/lxc-wait.sgml.in \ $(srcdir)/lxc.conf.sgml.in \ $(srcdir)/lxc.container.conf.sgml.in $(srcdir)/lxc.sgml.in \ $(srcdir)/lxc.system.conf.sgml.in $(srcdir)/see_also.sgml.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ CAP_LIBS = @CAP_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFAULT_CGROUP_PATTERN = @DEFAULT_CGROUP_PATTERN@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCDIR = @DOCDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GNUTLS_LIBS = @GNUTLS_LIBS@ GREP = @GREP@ HAVE_DOXYGEN = @HAVE_DOXYGEN@ INCLUDEDIR = @INCLUDEDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBEXECDIR = @LIBEXECDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALSTATEDIR = @LOCALSTATEDIR@ LOGPATH = @LOGPATH@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ LXCBINHOOKDIR = @LXCBINHOOKDIR@ LXCHOOKDIR = @LXCHOOKDIR@ LXCINITDIR = @LXCINITDIR@ LXCPATH = @LXCPATH@ LXCROOTFSMOUNT = @LXCROOTFSMOUNT@ LXCTEMPLATECONFIG = @LXCTEMPLATECONFIG@ LXCTEMPLATEDIR = @LXCTEMPLATEDIR@ LXC_ABI = @LXC_ABI@ LXC_ABI_MAJOR = @LXC_ABI_MAJOR@ LXC_ABI_MICRO = @LXC_ABI_MICRO@ LXC_ABI_MINOR = @LXC_ABI_MINOR@ LXC_DEFAULT_CONFIG = @LXC_DEFAULT_CONFIG@ LXC_DEVEL = @LXC_DEVEL@ LXC_DISTRO_SYSCONF = @LXC_DISTRO_SYSCONF@ LXC_GENERATE_DATE = @LXC_GENERATE_DATE@ LXC_GLOBAL_CONF = @LXC_GLOBAL_CONF@ LXC_USERNIC_CONF = @LXC_USERNIC_CONF@ LXC_USERNIC_DB = @LXC_USERNIC_DB@ LXC_VERSION = @LXC_VERSION@ LXC_VERSION_BASE = @LXC_VERSION_BASE@ LXC_VERSION_BETA = @LXC_VERSION_BETA@ LXC_VERSION_MAJOR = @LXC_VERSION_MAJOR@ LXC_VERSION_MICRO = @LXC_VERSION_MICRO@ LXC_VERSION_MINOR = @LXC_VERSION_MINOR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RUNTIME_PATH = @RUNTIME_PATH@ SBINDIR = @SBINDIR@ SECCOMP_CFLAGS = @SECCOMP_CFLAGS@ SECCOMP_LIBS = @SECCOMP_LIBS@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SYSCONFDIR = @SYSCONFDIR@ SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bashcompdir = @bashcompdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ db2xman = @db2xman@ docdir = @docdir@ docdtd = @docdtd@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@/ja mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pamdir = @pamdir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = DIST_SUBDIRS = EXTRA_DIST = \ FAQ.txt @ENABLE_DOCBOOK_TRUE@man_MANS = \ @ENABLE_DOCBOOK_TRUE@ lxc-attach.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-autostart.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-cgroup.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-checkconfig.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-checkpoint.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-config.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-console.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-copy.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-create.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-destroy.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-device.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-execute.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-freeze.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-info.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-ls.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-monitor.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-snapshot.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-start.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-stop.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-top.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-unfreeze.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-unshare.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-update-config.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-user-nic.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-usernsexec.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-wait.1 \ @ENABLE_DOCBOOK_TRUE@ \ @ENABLE_DOCBOOK_TRUE@ lxc.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc.container.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc.system.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc-usernet.5 \ @ENABLE_DOCBOOK_TRUE@ \ @ENABLE_DOCBOOK_TRUE@ lxc.7 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/ja/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/ja/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lxc-attach.sgml: $(top_builddir)/config.status $(srcdir)/lxc-attach.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-autostart.sgml: $(top_builddir)/config.status $(srcdir)/lxc-autostart.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-cgroup.sgml: $(top_builddir)/config.status $(srcdir)/lxc-cgroup.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkconfig.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkconfig.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkpoint.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkpoint.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-config.sgml: $(top_builddir)/config.status $(srcdir)/lxc-config.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-console.sgml: $(top_builddir)/config.status $(srcdir)/lxc-console.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-copy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-copy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-create.sgml: $(top_builddir)/config.status $(srcdir)/lxc-create.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-destroy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-destroy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-device.sgml: $(top_builddir)/config.status $(srcdir)/lxc-device.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-execute.sgml: $(top_builddir)/config.status $(srcdir)/lxc-execute.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-freeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-freeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-info.sgml: $(top_builddir)/config.status $(srcdir)/lxc-info.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-ls.sgml: $(top_builddir)/config.status $(srcdir)/lxc-ls.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-monitor.sgml: $(top_builddir)/config.status $(srcdir)/lxc-monitor.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-snapshot.sgml: $(top_builddir)/config.status $(srcdir)/lxc-snapshot.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-start.sgml: $(top_builddir)/config.status $(srcdir)/lxc-start.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-stop.sgml: $(top_builddir)/config.status $(srcdir)/lxc-stop.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-top.sgml: $(top_builddir)/config.status $(srcdir)/lxc-top.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unfreeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unfreeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unshare.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unshare.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-update-config.sgml: $(top_builddir)/config.status $(srcdir)/lxc-update-config.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-user-nic.sgml: $(top_builddir)/config.status $(srcdir)/lxc-user-nic.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernsexec.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernsexec.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-wait.sgml: $(top_builddir)/config.status $(srcdir)/lxc-wait.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.container.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.container.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.system.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.system.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernet.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernet.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.sgml: $(top_builddir)/config.status $(srcdir)/lxc.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ common_options.sgml: $(top_builddir)/config.status $(srcdir)/common_options.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ see_also.sgml: $(top_builddir)/config.status $(srcdir)/see_also.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man7dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.7[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_DOCBOOK_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man5 install-man7 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 uninstall-man5 uninstall-man7 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-man5 \ install-man7 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \ uninstall-man7 .PRECIOUS: Makefile @ENABLE_DOCBOOK_TRUE@%.1 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.5 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.7 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@lxc-%.sgml : common_options.sgml see_also.sgml @ENABLE_DOCBOOK_TRUE@clean-local: @ENABLE_DOCBOOK_TRUE@ $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lxc-3.0.0/doc/ja/lxc-info.sgml.in0000644061062106075000000001717313256572152013421 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-info 1 lxc-info コンテナに関する情報の問い合わせ lxc-info -n name -c KEY -s -p -i -S -H <!-- Description -->説明 lxc-info は、コンテナに関する情報を問い合わせ、表示します。 <!-- Options --> コンテナの設定値を表示します。このオプションは複数の key = value のペアを表示したい場合には複数回指定することも可能です。 コンテナの状態のみを表示します。 コンテナの pid を表示します。 コンテナの IP アドレスを表示します。 コンテナの統計情報を表示します。 パフォーマンスへの影響を考慮して、カーネルメモリの使用量は、カーネルメモリの制限値が設定されない限りはカウントされません。 もし、制限が設定されていない場合、lxc-info はカーネルメモリの使用量を 0 と表示します。制限は lxc.cgroup.memory.kmem.limit_in_bytes = number のように、コンテナの設定ファイルで指定することができます。詳しくは、 lxc.conf 5 を参照してください。 コンテナの統計情報を人間が読みやすい形に加工しないでそのまま表示します。 デフォルトは人間が読みやすい形の統計情報を表示します。 &commonoptions; <!-- Examples -->例 lxc-info -n foo foo という名前のコンテナの情報を表示します。 lxc-info -n 'ubuntu.*' ubuntu という文字列で始まる名前の全てのコンテナの情報を表示します。 lxc-info -n foo -c lxc.net.0.veth.pair コンテナ foo の veth pair を表示します。 &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-snapshot.sgml.in0000644061062106075000000001764313256572152014327 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-snapshot 1 lxc-snapshot 存在するコンテナのスナップショットの取得 lxc-snapshot -n, --name name -c, --comment file lxc-snapshot -n, --name name -d, -destroy snapshot-name lxc-snapshot -n, --name name -L, --list -C, --showcomments lxc-snapshot -n, --name name -r, -restore snapshot-name -N, --newname newname <!-- Description -->説明 lxc-snapshot はコンテナのスナップショットの作製、スナップショットのリスト表示、スナップショットからのリストアを行います。 スナップショットはコンテナパス以下にスナップショット化されたコンテナとして保存されます。 例えば、もしコンテナパスが /var/lib/lxc で、コンテナが c1 である場合、最初に取得するスナップショットは、パス /var/lib/lxc/c1/snaps の下の snap0 として保存されます。 LXC 1.0 で使われていた /var/lib/lxcsnaps が存在する場合には、このディレクトリが引き続き使われます。 <!-- Options -->オプション 新しく作製するスナップショットに comment_file ファイル内のコメントを関連付ける。 指定した名前のスナップショットを破壊します。ALL という名前が指定された場合、すべてのスナップショットが破壊されます。 存在するスナップショットをリスト表示します。 スナップショットのリスト表示でスナップショットに対するコメントを表示します。 指定のスナップショットをリストアします。 これはスナップショットのコピーである完全に新しいコンテナが作製されるということです。 スナップショットをリストアする際、--newname の値として明示的に指定しない場合でも、最後のオプション引数はリストアするコンテナの名前として使用します。 もし newname が元のコンテナの名前と同じ場合、元のコンテナが削除され、リストアされるコンテナに置き換えられます。 スナップショット元を削除することは、overlayfs, zfs がバックエンドのスナップショットではできないことに注意が必要です。 &commonoptions; &seealso; <!-- Author -->作者 Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/ja/common_options.sgml.in0000644061062106075000000001356613256572152014747 00000000000000 <!-- Common Options -->共通オプション ここで紹介するオプションは lxc コマンドの大部分で共通のものです。 通常より長い使い方のメッセージを表示します。 使い方を表示します。 出力を抑制します。 デフォルトと別のコンテナパスを使用します。デフォルトは @LXCPATH@ です。 追加のログを FILE に出力します。デフォルトは出力しません。 ログの優先度を LEVEL に設定します。デフォルトの優先度は ERROR です。以下の値を設定可能です: FATAL, CRIT, WARN, ERROR, NOTICE, INFO, DEBUG このオプションは追加のログファイルへのイベントログの優先度の設定である事に注意してください。stderr への ERROR イベントのログには影響しません。 NAME という名前でコンテナを識別します。コンテナ識別子のフォーマットは英数字の文字列です。 コンテナの仮想化、隔離機能の設定のための設定ファイルを指定します。 (lxc-create 経由で) 前もってコンテナが作られた際の設定ファイルが既にあった場合でも、このオプションが指定された場合は、指定した設定ファイルが使用されます。 バージョン番号を表示します。 lxc-3.0.0/doc/ja/lxc-device.sgml.in0000644061062106075000000001234513256572152013721 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-device 1 lxc-device 実行中のコンテナのデバイスの管理 lxc-device -h -n name add DEVICE NAME <!-- Description -->説明 lxc-device は実行中のコンテナのデバイスを管理します。 <!-- Options -->オプション コマンドのヘルプを表示します。 対象のコンテナの名前 実行するアクション。現時点では 'add' のみ指定できます。 コンテナに追加するデバイス。 /dev 以下のデバイスのパスかネットワークインターフェース名を指定できます。 コンテナ内でのデバイスの名前 <!-- Examples -->例 lxc-device -n p1 add /dev/video0 コンテナ p1 内に、ホスト上でマッチするデバイスに基づいて /dev/video0 デバイスを作製します。 lxc-device -n p1 add eth0 eth1 eth0 をホストから p1 内の eth1 に移動します。 &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-unfreeze.sgml.in0000644061062106075000000000602613256572152014304 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unfreeze 1 lxc-unfreeze 全てのコンテナのプロセスの解凍 lxc-unfreeze -n name <!-- Description -->説明 lxc-unfreeze は、先に lxc-freeze を使って凍結した全てのプロセスを解凍します。 &commonoptions; <!-- Diagnostic -->診断 The container was not found 指定したコンテナが lxc-create で作成されておらず存在しません。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-destroy.sgml.in0000644061062106075000000001073113256572152014150 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-destroy 1 lxc-destroy コンテナの削除 lxc-destroy -n name -f -s <!-- Description -->説明 lxc-destroy は、lxc-create で以前に作成したシステムオブジェクトを削除します。 <!-- Options -->オプション コンテナが実行中の場合、まずコンテナを停止させます。 このオプションが指定されていない場合、コンテナが実行中のときは lxc-destroy コマンドは実行を中断します。 指定したコンテナとそのスナップショットをすべて削除します。 &commonoptions; <!-- Diagnostic -->診断 The container was not found 削除する対象のコンテナが見つかりません。 おそらくそのコンテナが存在しないのか、既に削除された後なのでしょう。 lxc-ls コマンドを使って、システム上に存在するコンテナのリストを得ることができます。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-ls.sgml.in0000644061062106075000000002262613256572152013103 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-ls 1 lxc-ls システム上に存在するコンテナのリスト表示 lxc-ls -1 --active --frozen --running --stopped --defined -f -F format -g groups --nesting=NUM --filter=regex <!-- Description -->説明 lxc-ls はシステム上に存在するコンテナをリスト表示します。 <!-- Options -->オプション 1 行に 1 エントリ表示します。(/dev/stdout が tty でない場合のデフォルト) アクティブなコンテナのみリスト表示します。(--frozen --running と同じです) 凍結 (frozen) 状態のコンテナのみをリスト表示します。 実行 (running) 状態のコンテナのみをリスト表示します。 停止状態のコンテナのみをリスト表示します。 定義済みのコンテナ (設定ファイルが存在するコンテナ) のみを表示します。 装飾付きのカラムベースの出力を使用します。 装飾付き出力で表示するカラムのコンマ区切りのリスト。デフォルトで表示される項目と指定可能な項目名は --help オプションで確認してください。 表示させるコンテナグループのコンマ区切りのリスト。このオプションは複数回指定することもできます。 ネストしたコンテナを表示します。引数として数字を指定することで、表示するネストのレベルを指定できます。 lxc-ls に与える、コンテナ名に対して適用する正規表現です。フォーマットは POSIX 拡張正規表現です。 を明示的に使わずに、追加の引数として与えることもできます。 <!-- Examples -->例 lxc-ls --fancy 全てのコンテナをリスト表示します。 一行にはコンテナの名前、状態、IPv4 アドレス、IPv6 アドレスが表示されます。 lxc-ls --active -1 稼働中のコンテナを一列にリスト表示します。 &commonoptions; &seealso; <!-- History -->履歴 元は Daniel Lezcano と Serge Hallyn によりシェルスクリプトとして書かれていました。のちに、Stéphane Graber が Python で再実装し、拡張しました。その後、Christian Brauner が C で再実装し、拡張しました。 <!-- Author -->作者 Christian Brauner christian.brauner@mailbox.org, Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-create.sgml.in0000644061062106075000000003410613256572152013724 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-create 1 lxc-create コンテナの作成 lxc-create -n name -f config_file -t template -B backingstore -- template-options <!-- Description -->説明 lxc-create は、設定情報とユーザ情報が保存されているシステムオブジェクトを作成します。 name で指定された名前が、他の lxc コマンドで、コンテナを特定する名前として使われます。 オブジェクトは @LXCPATH@ 内に作られる、自身の名前がついたディレクトリです。 オブジェクトは、アプリケーションが使用したり、参照したりする様々なリソースの定義です。 設定ファイルがより多くの情報を持つほど、コンテナやアプリケーションはより隔離されたものになります。 設定ファイルが config_file で指定されない場合、コンテナはデフォルトの隔離状態で作られます: プロセス、sysv ipc、マウントポイントです。 <!-- Options -->オプション コンテナの仮想化と隔離機能を設定するための設定ファイルを指定します。 template は lxc-create コマンドが呼び出す、存在する 'lxc-template' スクリプトの短い名前です。 例えば、busybox, debian, fedora, ubuntu, sshd があります。 期待されるスクリプトの構造の詳細は、@LXCTEMPLATEDIR@ 内の例を参照してください。 加えて、実行可能なテンプレートスクリプトへのフルパスも指定することが可能です。rootfs の作成を行わないように "none" を指定することも可能です。 'backingstore' には 'dir', 'lvm', 'loop', 'btrfs', 'zfs', 'rbd', 'best' のいずれかを指定します。 デフォルトは 'dir' で、コンテナのルートファイルシステムが @LXCPATH@/container/rootfs 以下のディレクトリであることを意味します。 'dir' にはオプションとして --dir ROOTFS を指定することも可能です。 このオプションは、デフォルトの代わりに特定のパス以下にコンテナの rootfs を置くということになります。 ('none' は 'dir' のエイリアスです。) 'btrfs' が指定された場合、ターゲットのファイルシステムは btrfs でなければいけません。 そして、コンテナの rootfs は新しい subvolume として作製されます。 このことにより、スナップショットによるクローンが作製可能になりますが、結果として rsync --one-filesystem が、別々のファイルシステムとして取り扱ってしまうことにもなります。 backingstore が 'lvm' である場合、lvm ブロックデバイスを使用します。 この時、以下のオプションが有効になります: --lvname lvname1 はデフォルト値のコンテナ名の LV の代わりに lvname1 という名前の LV を作成します。 --vgname vgname1 は、デフォルト値である lxc という volume group の代わりに vgname1 という名前の volume group 内に LV を作成します。 --thinpool thinpool1 は、デフォルトである lxc のという名前のプールの代わりに thinpool1 という名前のプール内にシンプロビジョニングされたボリュームとして LV を作成します。 --fstype FSTYPE は LV 上のファイルシステムをデフォルト値である ext4 の代わりに FSTYPE で指定したもので作成します。 --fssize SIZE はデフォルト値である 1G の代わりに SIZE で指定したサイズで LV を作成します。 backingstore が 'loop' の場合、'lvm' と同様に --fstype FSTYPE--fssize SIZE が使えます。これらの値のデフォルト値は 'lvm' の場合と同じです。 backingstore が 'rbd' の場合、ceph.conf に有効な設定がされており、ceph.client.admin.keyring が定義されている必要があります。 --rbdname RBDNAME を指定すると、RBDNAME という名前のブロックデバイスを作成します。このオプションを指定しない場合のデフォルトのブロックデバイス名はコンテナ名です。 --rbdpool POOL を指定すると、POOL という名前のプール内にブロックデバイスを作成します。このオプションを指定しない場合のデフォルトのプール名は 'lxc' です。 backingstore が 'best' の時、lxc は btrfs, zfs, lvm, dir の順に試行します。 これは template-options で指定したものをオプションとしてテンプレートへ渡します。 テンプレートでサポートされているオプションを調べるには、lxc-create -t TEMPLATE -h というコマンドが使えます。 &commonoptions; <!-- Diagnostic -->診断 The container already exists メッセージの通り、コンテナを作成しようとしたけれども、同じ名前のコンテナが存在しています。 lxc-ls コマンドを使って、システム上に存在する利用可能なコンテナのリストが表示できます。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/see_also.sgml.in0000644061062106075000000000626013256572152013467 00000000000000 See Also lxc 7 , lxc-create 1 , lxc-copy 1 , lxc-destroy 1 , lxc-start 1 , lxc-stop 1 , lxc-execute 1 , lxc-console 1 , lxc-monitor 1 , lxc-wait 1 , lxc-cgroup 1 , lxc-ls 1 , lxc-info 1 , lxc-freeze 1 , lxc-unfreeze 1 , lxc-attach 1 , lxc.conf 5 lxc-3.0.0/doc/ja/lxc-top.sgml.in0000644061062106075000000001655313256572152013271 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-top 1 lxc-top コンテナの統計情報の表示 lxc-top --help --delay delay --sort sortby --reverse <!-- Description -->説明 lxc-top はコンテナの統計情報を表示します。出力は delay 秒ごとに更新されます。 そして、sortby の指定に従ってソートされます。lxc-top は使用しているターミナルに収まるようにできるだけ多くの数のコンテナを表示します。'q' を入力すると終了します。ソートのキーとなる文字を入力するとその統計値でソートします。ソートのキーとなる文字を 2 度入力するとソート順が逆になります。 <!-- Options -->オプション 表示を更新する間隔を秒で指定します。デフォルトは 3 秒です。 名前、CPU 使用量、メモリ使用量でコンテナをソートします。sortby で指定する引数は n,c,b,m,k のどれかでなければなりません。 これはそれぞれ名前、CPU 使用量、ブロック I/O、メモリ使用量、カーネルメモリ使用量を表します。デフォルトは 'n' です。 デフォルトのソート順を逆転させます。デフォルトでは、名前のソートはアルファベットの昇順、値のソートは量の降順 (最も大きい数が最初) です。 <!-- Example -->例 lxc-top --delay 1 --sort m コンテナを 1 秒ごとに更新し、メモリ使用量でソートして表示します。 <!-- Notes -->注意 パフォーマンスへの影響を考慮して、カーネルメモリの使用量は、カーネルメモリの制限値が設定されない限りはカウントされません。 もし、制限が設定されていない場合、lxc-top はカーネルメモリの使用量を 0 と表示します。 もし、カウントされているコンテナが存在しない場合、KMem カラムは表示されません。制限は lxc.cgroup.memory.kmem.limit_in_bytes = number のように、コンテナの設定ファイルで指定することができます。詳しくは、 lxc.conf 5 を参照してください。 &seealso; <!-- Author -->作者 Dwight Engen dwight.engen@oracle.com lxc-3.0.0/doc/ja/FAQ.txt0000644061062106075000000000300613256572152011547 00000000000000 Troubleshooting: =============== Error: ------ error while loading shared libraries reported after sudo make install and when trying to run lxc-execute. "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" /usr/local/bin/lxc-execute: error while loading shared libraries: liblxc-0.5.0.so: cannot open shared object file: No such file or directory Answer: ------- update the ld cache by running ldconfig. Error: ------ error when starting a container. "lxc-start Invalid argument" "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" "[syserr] lxc_start:96: Invalid argument - failed to fork into a new namespace" Answer: ------- read the lxc man page about kernel version prereq :) most probably your kernel is not configured to support the container options you want to use. Error: ------ On Ubuntu 8.10, if using the cvs source code rather than the provided tarball. Then make is failing with many errors similar to the line below: ========== ../../libtool: line 810: X--tag=CC: command not found ========== Answer: ------- This is related to a compatibility problem between the shipped config/ltmain.sh and the libtool version installed on your Ubuntu 8.10 machine. You have to replace the config/ltmain.sh from cvs head by the one from your libtool package, make some cleaning and reissue all the build process: ========== cd cp -f /usr/share/libtool/config/ltmain.sh config/ rm -f libtool ./bootstrap && ./configure && make && sudo make install ========== lxc-3.0.0/doc/ja/lxc-attach.sgml.in0000644061062106075000000007017613256572152013734 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-attach 1 lxc-attach 実行中のコンテナ内でプロセスの開始 lxc-attach -n, --name name -f, --rcfile config_file -a, --arch arch -e, --elevated-privileges privileges -s, --namespaces namespaces -R, --remount-sys-proc --keep-env --clear-env -v, --set-var variable --keep-var variable -- command <!-- Description -->説明 lxc-attachname で指定したコンテナ内で指定した command を実行します。 実行する時点でコンテナが実行中でなければなりません。 もし command が指定されていない場合、lxc-attach コマンドを実行したユーザのデフォルトシェルをコンテナ内で調べて実行します。 もしコンテナ内にユーザが存在しない場合や、コンテナで nsswitch 機構が働いていない場合はこの動作は失敗します。 前のバージョンの lxc-attach は、単に指定したコンテナの名前空間にアタッチし、最初に擬似端末 (pseudo terminal) を割り当てないで、シェルもしくは指定したコマンドを実行しました。 これは、異なる特権レベルを持つユーザ空間の実行コンテキストを切り替えた後に、TIOCSTI ioctl の呼び出し経由で擬似入力を行うことに対して脆弱となります。 新しいバージョンの lxc-attach は、ホスト上の擬似端末のマスター/スレーブのペアを割り当てようとします。そしてシェルやコマンドを実行する前に、擬似端末のスレーブ側に対して、ターミナルを参照する標準ファイルディスクリプタをアタッチします。 ターミナルを参照する標準ファイルディスクリプタがない場合は、lxc-attach は擬似端末の割り当てを行わないことに注意してください。代わりに、単にコンテナの名前空間にアタッチし、シェルや指定したコマンドを実行します。 <!-- Options -->オプション コンテナの仮想化、隔離機能の設定のための設定ファイルを指定します。 (lxc-create 経由で) 前もってコンテナが作られた際の設定ファイルが既にあった場合でも、このオプションが指定された場合は、指定した設定ファイルが使用されます。 コマンドを実行するコンテナのアーキテクチャを指定します。 このオプションは、コンテナの設定ファイルで指定する オプションと同じものが使用可能です。 lxc.conf 5 を参照してください。デフォルトでは、実行しているコンテナのアーキテクチャになります。 コンテナの内部で command を実行する時に特権を削除しません。 もしこのオプションが指定された場合、新しいプロセスはコンテナの cgroup に追加 されず、実行する前にケーパビリティ (capability) も削除しません。 全ての特権の取得したくない場合は、パイプで連結したリストとして、例えば CGROUP|LSM のように、特権を指定することが可能です。 指定できる値は、それぞれ cgroup、ケーパビリティ、特権の制限を表す CGROUPCAPLSM です。 (パイプ記号を CGROUP\|LSM のようにエスケープするか、"CGROUP|LSM" のように引用符号を付ける必要があります。) 警告: もし実行するコマンドが、アタッチするメインプロセスが終了した後も実行されたままのサブプロセスを開始するような場合、このオプションの指定はコンテナ内への特権のリークとなる可能性があります。 コンテナ内でのデーモンの開始(もしくは再起動)は問題となります。 デーモンが多数のサブプロセスを開始する cronsshd のような場合は特に問題となります。 充分な注意を払って使用してください。 アタッチする名前空間をパイプで連結したリストで指定します。 例えば NETWORK|IPC のようにです。 ここで使用可能な値は MOUNT, PID, UTSNAME, IPC, USER , NETWORK です。 これにより指定した名前空間にプロセスのコンテキストを変更できます。 例えばコンテナのネットワーク名前空間に変更する一方で、他の名前空間はホストの名前空間のままにするというような事が可能です。 (パイプ記号を MOUNT\|PID のようにエスケープするか、"MOUNT|PID" のように引用符号を付ける必要があります。) 重要: このオプションは オプションを指定しなくても指定している場合と同様の動作をします。 を指定し、そこにマウント名前空間が含まれない時、このオプションにより lxc-attach/proc/sys をリマウントします。 これは現在の他の名前空間のコンテキストを反映させるためです。 もっと詳細な説明は 注意 を参照してください。 このオプションは、マウント名前空間へのアタッチが行われる場合は無視されます。 アタッチされるプログラムに対して現在の環境を保持したままにします。 これは現在 (バージョン 0.9 時点) のデフォルトの動作ですが、将来は変更される予定です。 この動作がコンテナ内への望ましくない情報の漏洩につながる可能性があるためです。 アタッチするプログラムで環境変数が利用可能であることを期待している場合、将来的にもそれが保証されるようにこのオプションを使用するようにしてください。 現在の環境変数に加えて、container=lxc が設定されます。 アタッチする前に環境変数をクリアします。 これによりコンテナへの不要な環境変数の漏洩が起こらなくなります。 変数 container=lxc のみがアタッチするプログラムの開始の時の環境変数となります。 コンテナにアタッチしたプログラムから見える環境変数を追加します。このオプションは "VAR=VALUE" の形式で指定し、複数回指定できます。 --clear-env を指定した際に、クリアせずに保持したままにしたい環境変数を指定します。--clear-env と同時にしか使えません。複数回指定できます。 &commonoptions; <!-- Examples -->例 存在するコンテナ内で新しいシェルを生成するには、以下のようにします。 lxc-attach -n container 実行中の Debian コンテナの cron サービスを再起動するには、以下のように実行します。 lxc-attach -n container -- /etc/init.d/cron restart NET_ADMIN ケーパビリティを持たない実行中のコンテナのネットワークインターフェース eth1 の動作を停止させるには、ケーパビリティを増加させるために オプションを指定し、ip ツールがインストールされていることを前提に、以下のように実行します。 lxc-attach -n container -e -- /sbin/ip link delete eth1 <!-- Compatibility -->互換性 (pid とマウント名前空間を含む) コンテナに対する完全なアタッチを行うには 3.8 以上、もしくはパッチを適用したカーネルが必要となります。 詳しくは lxc のウェブサイトを参照してください。 パッチが当たっていない 3.8 より小さなバージョンのカーネルを使った場合は、lxc-attach の実行は失敗するでしょう。 しかし、もし を使用して、アタッチするものを NETWORK, IPC, UTSNAME の 1 つか複数の名前空間に限定して使用すれば、バージョン 3.0 以上のパッチを適用していないカーネルでもアタッチが成功するでしょう。 ユーザ名前空間へのアタッチは、ユーザ名前空間機能を有効にした 3.8 以上のカーネルでサポートされます。 <!-- Notes -->注意 Linux の /proc/sys ファイルシステムは名前空間によって影響を受けるある程度の情報を持っています。 これは /proc 内のプロセス ID の名前のディレクトリや、/sys/class/net 内のネットワークインターフェース名のディレクトリなどです。 擬似ファイルシステムをマウントしているプロセスの名前空間が、どのような情報を表示するかを決定します。 /proc/sys にアクセスしているプロセスの名前空間が決定するのではありません。 を使ってコンテナの pid 名前空間のみをアタッチし、マウント名前空間 (これはコンテナの /proc を含み、ホストのは含まないでしょう) はアタッチしない場合、 のコンテンツはコンテナのものではなく、ホストのものとなります。 似たような事例として、ネットワーク名前空間のみをアタッチして、/sys/class/net のコンテンツを読んだ場合も同じような事が起こるでしょう。 この問題への対処のために、 オプションが /proc/sys が提供されています。 これにより、アタッチするプロセスのネットワーク/pid 名前空間のコンテキストを反映させることができます。ホストの実際のファイルシステムに影響を与えないために、実行前にはマウント名前空間は unshare されます (lxc-unshare のように)。 これは、/proc/sys ファイルシステム以外はホストのマウント名前空間と同じである、新しいマウント名前空間がプロセスに与えられるということです。 以前のバージョンの lxc-attach は、いくつかの重要なサブシステムに対して、書き込み可能な cgroup 内に配置することなしに、ユーザがコンテナの名前空間にアタッチできたバグがありました。 新しいバージョンの lxc-attach は、このような重要なサブシステムに対して、ユーザが書き込み可能な cgroup 内にいるかどうかをチェックします。 したがって、ユーザによっては lxc-attach は不意に失敗するかもしれません (例えば、非特権ユーザが、ログイン時に重要であるサブシステムの書き込み可能な cgroup に配置されていないようなシステムで)。しかし、この振る舞いは正しく、よりセキュアです。 <!-- Security -->セキュリティ オプションの使用には注意を払うべきです。 不適切に使用した場合、コンテナの隔離を破壊してしまう可能性があります。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc.container.conf.sgml.in0000644061062106075000000055011713256572152015375 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.container.conf 5 lxc.container.conf LXC コンテナ設定ファイル <!-- Description -->説明 LXC は良く知られた、多くのテストが行われた Linux コンテナのランタイムです。LXC は、2008 年以来アクティブに開発されており、世界中の重要な本番環境で実証されています。開発への貢献者の中には、Linux カーネル内の良く知られた様々なコンテナ機能の実装に貢献した人と同じ人もいます。 LXC は主にシステムコンテナにフォーカスを当てています。つまり、VM で得られる環境と可能な限り近い環境を提供を提供するにも関わらず、別々のカーネルを実行したり、ハードウェアをすべてシミュレートしたりすることによるオーバーヘッドがないコンテナのことです。 このような環境は、名前空間 (namespace)、強制アクセスコントロール、cgroup といったカーネルのセキュリティ機能の組み合わせで実現しています。 LXC は非特権コンテナをサポートしています。非特権コンテナは、いかなる特権も持たずに実行するコンテナです。非特権コンテナの実行には、コンテナを実行しているカーネルにユーザ名前空間 (user namespace) のサポートが必要です。LXC は、ユーザ名前空間がメインラインカーネルにマージされてから、初めて非特権コンテナをサポートしたランタイムです。 本質的には、ユーザ名前空間は与えられた UID、GID の組を隔離します。ユーザ名前空間は、ホスト上の UID、GID のある範囲を、それとは異なるコンテナ上の UID、GID の範囲へマッピングすることで実現します。カーネルは、ホスト上では実際には UID、GID は特権を持たないにも関わらず、コンテナ内ではすべての UID、GID が期待されるように見えるように変換を行います。 例えば、コンテナ内では UID、GID が 0 として実行中のプロセスは、ホスト上では UID、GID が 100000 として見えるでしょう。実装と動作の詳細は、ユーザ名前空間の man ページから得られます。UID と GID のマッピングは を使って定義できます。 Linux コンテナは、簡単な設定ファイルで定義します。設定ファイル中のオプションは key = value の形で一行で表します。'#' は、その行はコメントであることを示します。ケーパビリティや cgroup のオプションのような、リスト形式で指定するオプションでは、value がない形式で指定でき、そのように使うと、それ以前に定義した値をすべてクリアします。 LXC は、シングルドットを使って設定キーの名前空間を表します。 のような複雑な設定キーは、 や、さらに細分化された設定向けの色々なサブキーを持つことを意味します。 <!-- Configuration -->設定 複数の関係するコンテナの管理を容易にするために、コンテナの設定ファイルに別のファイルをロードすることが可能です。 例えば、ネットワークの設定を、複数のコンテナから include させるように 1 つのファイルに定義することが可能です。 その場合、コンテナが他のホストに移動すると、そのファイルだけを更新する必要があるかもしれません。 include させたいファイルを指定します。 include するファイルは、lxc 設定ファイルのフォーマットとして有効でなければいけません。 <!-- Architecture -->アーキテクチャ コンテナに対してアーキテクチャを設定することが可能です。 例えば、64 ビットのホスト上で 32 ビットのバイナリを動かすために 32 ビットアーキテクチャを設定することが可能です。 この設定を行うことにより、パッケージのダウンロードを行うなどの作業のうち、アーキテクチャ名に依存するような作業を行うコンテナスクリプトの修正を行います。 コンテナに設定するアーキテクチャを指定します。 有効なオプションには以下のようなものがあります。 , , , <!-- Hostname -->ホスト名 utsname セクションは、コンテナに設定されるホスト名を定義します。 コンテナは、システムのホスト名を変えることなく、自身のホスト名を持つ事が可能です。 このことにより、ホスト名はコンテナ専用となります。 コンテナのホスト名を指定します。 <!-- Halt signal -->クリーンなシャットダウン時のシグナル コンテナをクリーンにシャットダウンするためにコンテナの init プロセスに送るシグナル名か番号を指定できます。init システムによって、クリーンなシャットダウンを行うために使うシグナルは異なります。このオプションではシグナルとして kill(1) で使う形式を指定できます。 例えば SIGKILL, SIGRTMIN+14, SIGRTMAX-10 のような形式、もしくは数字を指定します。デフォルトのシグナルは SIGPWR です。 コンテナをシャットダウンするために使うシグナルを指定します。 リブート時のシグナル <!-- Reboot signal --> コンテナをリブートするために送るシグナル名か番号を指定できます。このオプションではシグナルとして kill(1) で使う形式を指定できます。 例えば SIGKILL, SIGRTMIN+14, SIGRTMAX-10 のような形式、もしくは数字を指定します。デフォルトのシグナルは SIGINT です。 コンテナをリブートするために使うシグナルを指定します。 <!-- Stop signal -->強制停止時のシグナル コンテナを強制的にシャットダウンするために送るシグナル名か番号を指定できます。このオプションではシグナルとして kill(1) で使う形式を指定できます。 例えば SIGKILL, SIGRTMIN+14, SIGRTMAX-10 のような形式、もしくは数字を指定します。デフォルトのシグナルは SIGKILL です。 コンテナを停止するのに使用するシグナルを指定します。 <!-- Init command -->Init コマンド コンテナの init として使うコマンドを設定します。 デフォルトで実行するバイナリのコンテナの root からの絶対パスを指定します。これは lxc-execute のための設定です。 init として使うバイナリの、コンテナの root からの絶対パスを指定します。これは lxc-start のための設定です。デフォルトは /sbin/init です。 Init のワーキングディレクトリ <!-- Init working directory --> コンテナのワーキングディレクトリとして、コンテナ内の絶対パスを設定します。LXC は init を実行する前に、このディレクトリに移動します。 ワーキングディレクトリとして使うコンテナ内の絶対パス <!-- Init ID -->Init が使う ID init と後続のコマンドが使う UID/GID を設定します。システムコンテナを起動するのに非 root な UID を使うと、特権がないために動作しないでしょう。UID/GID の指定は、通常はアプリケーションコンテナの動作の際に役に立ちます。 デフォルト値: UID(0)、GID(0) init が使う UID です。 init が使う GID です。 Proc コンテナ内の proc ファイルシステムで設定できるパラメータを設定します。 設定したい proc ファイルシステムのファイル名を指定します。指定できるファイル名は /proc/PID/ 以下に存在するものです。 例: lxc.proc.oom_score_adj = 10 <!-- Ephemeral -->一時的なコンテナ シャットダウン後にコンテナを削除するかどうかを指定できます。 指定できる値は 0 または 1 のみです。この値を 1 に設定すると、シャットダウン後にコンテナを削除します。 <!-- Network -->ネットワーク ネットワークセクションは、コンテナ内でどのようにネットワークを仮想化するかを定義します。 ネットワークの仮想化はレイヤー 2 で作動します。 ネットワークの仮想化を使用するためには、コンテナのネットワークインターフェースを定義しなければなりません。 いくつかの仮想インターフェースをアサインすることができます。 そして、仮に物理ネットワークインターフェースが一つしかなくても、コンテナ内でいくつもの仮想インターフェースを使うことができます。 値を指定せずに使い、それ以前に定義されたすべてのネットワークオプションをクリアできます。 コンテナがどの種類のネットワーク仮想化を使うかを指定します。すべての キーに、追加のインデックス を使うと、複数のネットワークを指定できます。例えば、 は、同じタイプの異なるネットワークを 2 つ指定します。 同じインデックスを指定したキーはすべて同じネットワークの指定になります。例えば、 と同じネットワークの設定になります。 現時点では、以下のネットワーク仮想化のタイプが使えます: ホストのネットワーク名前空間を共有します。 これにより、ホストのネットワークデバイスをコンテナ内で使うことが可能になります。 もしコンテナもホストも init として upstart を使っている場合、(例えば) コンテナ内で 'halt' を実行すると、ホストがシャットダウンしてしまうことにもなります。 ループバックインターフェースだけを作成します。 一方がコンテナに、もう一方が オプションで指定されたブリッジに接続されるペアの仮想イーサネットデバイスを作成します。 もし、ブリッジが指定されていない場合、veth ペアデバイスは作成されますが、ブリッジには接続されません。 ブリッジはコンテナが開始する前にシステムで事前に設定しておく必要があります。 lxc はコンテナ外の設定を扱うことはありません。 デフォルトでは、lxc がコンテナの外部に属するネットワークデバイスに対する名前を決定します。 しかし、もしこの名前を自分で指定したい場合、 オプションを使って名前を設定し、lxc に対して指定をすることができます (非特権コンテナの場合をのぞきます。セキュリティ上の理由からこのオプションは無視されます)。 vlan インターフェースは で指定されたインターフェースとリンクし、コンテナに割り当てられます。 vlan の指定は オプションで指定します。 macvlan インターフェースは により指定されるインターフェースとリンクし、コンテナに割り当てられます。 でモードを指定すると、その macvlan の指定を、同じ上位デバイスで異なる macvlan の間の通信をする時に使います。 指定できるモードは のいずれかです。 モードの場合、デバイスは同じ上位デバイスの他のデバイスとの通信を行いません (デフォルト)。 新しい仮想イーサネットポート集約モード (Virtual Ethernet Port Aggregator (VEPA)) である モードの場合、隣接したポートが、ソースとデスティネーションの両方が macvlan ポートに対してローカルであるフレームを全て返すと仮定します。 すなわち、ブリッジが reflective relay として設定されているということです。 上位デバイスから入ってくるブロードキャストフレームは、VEPA モードである全ての macvlan インターフェースに送りつけられます。 ローカルのフレームはローカルには配送されません。 モードの場合、同じポートの異なる macvlan インターフェースの間のシンプルなブリッジとして動作します。 あるインターフェースから他のインターフェースへのフレームは、直接配送され、外部には送出されません。 ブロードキャストフレームは、全ての他のブリッジと外部のインターフェースに対して送られます。 しかし、reflective relay からフレームが返ってきたときは、再度それを配送することはしません。 全ての MAC アドレスを知っているので、ブリッジモジュールのように、macvlan ブリッジモードは学習や STP の必要はありません。 モードの場合、物理インターフェースで受け取った全てのフレームは macvlan インターフェースに転送されます。 モードの場合、ひとつの macvlan インターフェースだけが、ひとつの物理インターフェースに対して設定できます。 で指定された、すでに存在しているインターフェースがコンテナに割り当てられます。 ネットワークに対して行うアクションを指定します。 インターフェースを起動させます。 実際のネットワークトラフィックに使うインターフェースを指定します。 インターフェースに対する MTU を指定します。 インターフェース名は動的に割り当てられます。しかし、もしコンテナが使用する設定ファイルが一般的な名前を使用するために、他の特定の名前が必要であれば (例えば eth0 など)、コンテナ内のインターフェースは、このオプションで指定した名前にリネームされます。 仮想インターフェースの MAC アドレスは、デフォルトでは動的に割り当てられます。しかし、MAC アドレスの衝突や、リンクローカルIPv6 アドレスを常に同じにした場合などは、このオプションが必要です。アドレス中の "x" という文字は、ランダムな値に置き換えられます。これによりテンプレートに hwaddr を設定することが可能になります。 仮想インターフェースに割り当てる ipv4 アドレスを指定します。複数行により複数の ipv4 アドレスを指定します。このアドレスは x.y.z.t/m というフォーマットで指定します。例) 192.168.1.123/24 コンテナでゲートウェイとして使う IPv4 アドレスを指定します。アドレスは x.y.z.t というフォーマットです。例) 192.168.1.123 という特別な値を指定できます。これは ( で指定した) ブリッジインターフェースの最初のアドレスを使用し、それをゲートウェイに使うという意味になります。 はネットワークタイプとして を指定している時だけ有効となります。 仮想インターフェースに割り当てる ipv6 アドレスを指定します。複数行により複数の ipv6 アドレスを指定します。このアドレスは x::y/m というフォーマットで指定します。例) 2003:db8:1:0:214:1234:fe0b:3596/64 コンテナでゲートウェイとして使う IPv6 アドレスを指定します。アドレスは x::y というフォーマットです。例) 2003:db8:1:0::1 という特別な値を記述する事も可能です。これは ( で指定した) ブリッジインターフェースの最初のアドレスを使用し、それをゲートウェイに使うという意味になります。 はネットワークタイプとして を指定している時だけ有効となります。 ホスト側から使われる、ネットワークの作成と設定が済んだ後に実行するスクリプトを指定します。 すべてのフックで追加の情報が使えます。以下の情報がスクリプトに提供されます: LXC_HOOK_TYPE: フックタイプ。'up' か 'down' のいずれかです LXC_HOOK_SECTION: セクションタイプとして 'net' が設定されます LXC_NET_TYPE: ネットワークタイプ。有効なネットワークタイプのうちのひとつです (例: 'macvlan', 'veth') LXC_NET_PARENT: ホスト上の親デバイス名。これはネットワークタイプが 'macvlan'、'veth'、'phys' のどれかのときだけ設定されます LXC_NET_PEER: ホスト上のピアデバイス名。これはネットワークタイプが 'veth' の場合のみ設定されます。この情報は が 1 に設定されている場合のみ設定されます この情報が環境変数の形で提供されるか、スクリプトへの引数の形で提供されるかは の値によって決まります。もし が 1 に設定されている場合は、環境変数の形で提供されます。もし 0 が設定されている場合は、スクリプトへの引数として提供されます。 スクリプトからの標準出力は debug レベルでロギングされます。標準エラー出力はロギングされません。しかし、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。 ホスト側から使われる、ネットワークを破壊する前に実行するスクリプトを指定します。 すべてのフックで追加の情報が使えます。以下の情報がスクリプトに提供されます: LXC_HOOK_TYPE: フックタイプ。'up' か 'down' のいずれかです LXC_HOOK_SECTION: セクションタイプとして 'net' が設定されます LXC_NET_TYPE: ネットワークタイプ。有効なネットワークタイプのうちのひとつです (例: 'macvlan', 'veth') LXC_NET_PARENT: ホスト上の親デバイス名。これはネットワークタイプが 'macvlan'、'veth'、'phys' のどれかのときだけ設定されます LXC_NET_PEER: ホスト上のピアデバイス名。これはネットワークタイプが 'veth' の場合のみ設定されます。この情報は が 1 に設定されている場合のみ設定されます この情報が環境変数の形で提供されるか、スクリプトへの引数の形で提供されるかは の値によって決まります。もし が 1 に設定されている場合は、環境変数の形で提供されます。もし 0 が設定されている場合は、スクリプトへの引数として提供されます。 スクリプトからの標準出力は debug レベルでロギングされます。標準エラー出力はロギングされません。しかし、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。 <!-- New pseudo tty instance (devpts) -->新しい擬似端末のインスタンス (devpts) さらに厳しい隔離のために、コンテナは自身のプライベートな pseudo tty (擬似端末) を持つことが可能です。 もし設定された場合、コンテナは新しい pseudo tty インスタンスを持ち、それを自身のプライベートとします。 この値は pts インスタンスに許可される pseudo tty の最大数を指定します (この制限はまだ実装されていません)。 <!-- Container system console -->コンテナのシステムコンソール コンテナでルートファイルシステムを持つように設定されており、inittab ファイルでコンソールの使用が設定されている場合、このコンソールの出力がどこになされるのかを指定したいと思うでしょう。 このオプションを設定すると、liblxc はインメモリのリングバッファを割り当てます。コンテナのコンソールはリングバッファに出力されます。リングバッファは少なくとも標準ページサイズの大きさでなければなりません。ページサイズより小さい値を与えた場合は、liblxc はページサイズのリングバッファを割り当てます。ページサイズは通常は 4kB です。 'auto' を指定すると、liblxc は 128kB のリングバッファを割り当てます。 リングバッファサイズを数値指定する場合、値がバイトに変換されるときに 2 の累乗になります。サイズ接頭辞付きの単位として 'kB'、'MB'、'GB' が使えます。(この場合の変換は 1024 の倍数に基づいています。つまり 'kB' == 'KiB'、'MB' == 'MiB'、'GB' == 'GiB' という意味です。) liblxc は で指定したコンソールログのサイズを、このオプションで設定した値に制限します。ログファイルのサイズは少なくとも標準ページサイズでなければなりません。ページサイズ以下の値を設定した場合は、liblxc はログファイルのサイズをページサイズに設定します。ページサイズは通常は 4kB です。 'auto' を指定すると、liblxc はログファイルのサイズを 128kB に制限します。 ログファイルサイズの値を数値指定する場合、値がバイトに変換されるときに 2 の累乗になります。サイズ接頭辞付きの単位として 'kB'、'MB'、'GB' が使えます。(この場合の変換は 1024 の倍数に基づいています。つまり 'kB' == 'KiB'、'MB' == 'MiB'、'GB' == 'GiB' という意味です。) ディスク上のコンソールリングバッファとミラーになるようにしたい場合は、 の値を同じ値に設定します。 コンソール出力を書き込むファイルのパスを指定します。ディスクに保存されるリングバッファログと異なり、このファイルはサイズが大きくなり続けるので、ファイルがローテートや削除されない限りは、ユーザのディスクをいっぱいにしてしまう可能性があります。この問題は、インメモリのリングバッファオプションである、 を使うことでも回避できます。 で指定したコンソールログファイルをローテートするかどうかを指定します。ユーザはログファイルをローテートするように API リクエストを送ることができます。古いログファイルは、元のファイル名と同じ名前のファイルに ".1" というサフィックスが付け加わります。 ユーザがコンソールログでディスクがいっぱいになるのを防ぐには、ログファイルをローテートし、不要なログファイルを削除してください。この問題はインメモリのリングバッファオプションである を使うことでも防げます。 コンソールを割り当てるデバイスのパスを指定します。'none' というキーワードは、単純にコンソールを無効にします。 'none' を指定し、コンテナ内のコンソールに対するデバイスノードを /dev/console に作成するか、もしくはホストの /dev/console をコンテナ内の /dev/console に bind mount する場合、そのコンテナはホストの /dev/console へ直接アクセスを行うことに注意が必要です。 そのコンテナがデバイスへの書き込み権を持っている場合は危険ですので、注意してこの指定を使用する必要があります。 <!-- Console through the ttys -->tty を通したコンソール このオプションはコンテナが root ファイルシステムを持つように設定されており、inittab ファイルで tty 上に getty の起動が設定されている場合に役に立ちます。 このオプションはコンテナで利用できる tty の数を指定します。 inittab ファイルに設定する getty の数は、このオプションの指定する tty の数より大きくしてはいけません。 さもなければ、超過した分の getty セッションはコンソールか /var/log/messages にうっとうしいメッセージを生死を表示しながら、永久に生死を繰り返すでしょう。 コンテナに作成出来る tty の数を指定します。 <!-- Console devices location -->コンソールデバイスの位置 LXC のコンソールはホストによって作られ、コンテナ内で要求されたデバイスに bind マウントされた Unix98 PTY 経由で提供されます。 デフォルトでは /dev/console/dev/ttyN に bind マウントされます。 これはゲスト内でのパッケージのアップグレードを妨げる可能性があります。 なので /dev 以下のディレクトリを指定することができます。 LXC はこのディレクトリ以下にファイルを作成し、これらのファイルを bind マウントします。 そして、これらの (作成された) ファイルは /dev/console/dev/ttyN にシンボリックリンクされます。 シンボリックリンクを消去したり置き換えたりすることは可能ですから、パッケージのアップグレードは成功します。 コンテナのコンソールデバイスを作成するための /dev 以下のディレクトリを指定します。 LXC は /dev/console に対する bind mount や /dev/console デバイスノードをこのディレクトリ以下に移動することに注意が必要です。 <!-- /dev directory -->/dev ディレクトリ デフォルトでは、lxc はコンテナの /dev 以下に fd, stdin, stdout, stderr のシンボリックリンクを作成しますが、自動的にはデバイスノードのエントリは作成しません。 これは、コンテナの rootfs で必要な設定を行えるようにするものです。 lxc.autodev が 1 に設定されている場合、コンテナの rootfs をマウントした後、LXC は新しい tmpfs を /dev 以下にマウントします (500k 制限の)。 そして初期デバイスの最小限のセットを作成します。 これは、"systemd" ベースの "init" 環境のコンテナを起動する時に通常必要ですが、他の環境の場合はオプショナルなものです。 コンテナの /dev ディレクトリ内の追加デバイスは フックを使用して作成されます。 コンテナの起動時に LXC が /dev をマウントして最小限の /dev を作成するのを止めるには、この値を 0 に設定してください。 <!-- Mount points -->マウントポイント マウントポイントセクションは、マウントするための区別された場所を指定します。 これらのマウントポイントは、コンテナだけに見え、コンテナ外で実行されるプロセスから見えることはありません。 例えば、/etc や /var や /home をマウントするときに役に立つでしょう。 注意: 通常 LXC は、マウント対象と相対パス指定のバインドマウントを、適切にコンテナルート以下に閉じ込めます。 これは、ホストのディレクトリやファイルに対して重ね合わせを行うようなマウントによる攻撃を防ぎます。(絶対パス指定のマウントソース中の各パスがシンボリックリンクである場合は無視されます。) しかし、もしコンテナの設定が最初に、/home/joe のようなコンテナユーザのコントロール配下にあるディレクトリを、コンテナ中のある path にマウントし、その後 path 以下でマウントが行われるような場合、コンテナユーザがタイミングを見計らって自身のホームディレクトリ以下でシンボリックリンクを操作するような TOCTTOU 攻撃が成立する可能性があります。 マウント情報の書かれた fstab フォーマットで書かれたファイルの場所を指定します。 マウントする場所は相対バスで書くことができます。そして、ほとんどの場合にコンテナの root からの相対パスとなるはずです。例えば、以下のように書きます。 proc proc proc nodev,noexec,nosuid 0 0 この例は、root ファイルシステムがどこにあっても、コンテナの /proc 以下に proc ファイルシステムをマウントします。これは、ブロックデバイスがバックエンドのファイルシステムだけでなく、コンテナのクローンにも柔軟に対応できます。 ファイルシステムがイメージファイルやブロックデバイスからマウントされている場合、3 つ目のフィールド (fs_vfstype) は mount 8 のように auto を指定することはできず、明確に指定しなければいけません。 fstab フォーマットの一行と同じフォーマットのマウントポイントの指定をします。 加えて、LXC では rslave や rprivate といったマウント・プロパゲーションオプションと、独自の 3 つのマウントオプションが使えます。 は、マウントが失敗しても失敗を返さずに無視します。 は、マウントポイントをマウントする際にディレクトリもしくはファイルを作成します。 を指定すると、マウントされたコンテナルートからの相対パスとして取得されます。 dev/null proc/kcore none bind,relative 0 0 は dev/null を ${}/dev/null と展開し、コンテナ内の proc/kcore にマウントします。 標準のカーネルファイルシステムで自動的にマウントするものを指定します。 これは劇的に設定を容易にする可能性があります。 (or ): /proc を読み書き可能でマウントします。 ただし、/proc/sys/proc/sysrq-trigger は、セキュリティとコンテナの隔離の目的でリードオンリーで再マウントされます。 : /proc を読み書き可能でマウントします。 (or ): /sys/devices/virtual/net のみ書き込み可能で、その他の /sys はリードオンリーでマウントします。 : /sys を、セキュリティとコンテナの隔離の目的でリードオンリーでマウントします。 : /sys を読み書き可能でマウントします。 : /sys/fs/cgroup を tmpfs でマウントし、そのコンテナの追加が行われた全ての階層に対するディレクトリを作成し、それらの階層内に cgroup 名でサブディレクトリを作成し、そのコンテナ自身の cgroup をそのディレクトリにバインドマウントします。コンテナは自身の cgroup ディレクトリに書き込みが可能ですが、親ディレクトリはリードオンリーで再マウントされているため書き込めません。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 : と同様にマウントされますが、全てリードオンリーでマウントされます。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 : と同様にマウントされますが、全て読み書き可能でマウントされます。 コンテナ自身の cgroup に至るまでのパスも書き込み可能になることに注意が必要ですが、cgroup ファイルシステムにはならず、 /sys/fs/cgroup の tmpfs の一部分になるでしょう。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 (マウントオプションなしの場合): コンテナが CAP_SYS_ADMIN ケーパビリティを保持している場合、 となります。保持していない場合、 となります。 : /sys/fs/cgroup を tmpfs でマウントし、そのコンテナの追加が行われた全ての階層構造に対するディレクトリを作製し、ホストからコンテナまでの階層構造を全てバインドマウントし、コンテナ自身の cgroup を除いてリードオンリーにします。 と比べると、コンテナ自身の cgroup に至るまでの全てのパスが tmpfs の下層のシンプルなディレクトリとなり、コンテナ自身の cgroup の外ではリードオンリーになりますが、/sys/fs/cgroup/$hierarchy はホストの全ての cgroup 階層構造を含みます。 これにより、コンテナにはかなりの情報が漏洩します。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 : と同様にマウントされますが、全てリードオンリーでマウントされます。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 : と同様にマウントされますが、全て読み書き可能でマウントされます。 この場合、コンテナは自身の cgroup から脱出する可能性があることに注意してください (コンテナが CAP_SYS_ADMIN を持ち、自身で cgroup ファイルシステムをマウント可能なら、いずれにせよそのようにするかもしれないことにも注意してください)。 : を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。 (マウントオプションなしの場合): コンテナが CAP_SYS_ADMIN ケーパビリティを保持している場合、 となります。保持していない場合、 となります。 cgroup 名前空間が有効の場合、 の自動マウントの指定はどれも無視されます。これは、コンテナが自身でファイルシステムをマウントするため、自動マウントがコンテナの init を混乱させる可能性があるためです。 cgroup ファイルシステムの自動マウントが有効の場合、/sys/fs/cgroup 以下の tmpfs は常に読み書き可能でマウントされることに注意が必要です (しかし の場合は、個々の階層の /sys/fs/cgroup/$hierarchy は読み込み専用となるでしょう)。これは Ubuntu の mountall 8 コマンドの特異な動きに対処するためのものです。特異な動きとは、/sys/fs/cgroup が読み込み専用でマウントされた状態で、コンテナが CAP_SYS_ADMIN を持たない場合、/sys/fs/cgroup を読み書き可能で再マウントしようとしてできないため、コンテナのブート時にユーザからの入力を待ってしまうというものです。 例: lxc.mount.auto = proc sys cgroup lxc.mount.auto = proc:rw sys:rw cgroup-full:rw <!-- Root file system -->ルートファイルシステム コンテナのルートファイルシステムは、ホストのルートファイルシステムと異なるようにすることも可能です。 コンテナのルートファイルシステムを指定します。 この値はイメージファイル、ディレクトリ、ブロックデバイスのどれかを取ることができます。 もし指定されない場合、コンテナはホストとルートファイルシステムを共有します。 ディレクトリ、単純なブロックデバイスのバックエンドを持つコンテナの場合、パス名を使うことができます。 もし rootfs が nbd デバイスの場合、nbd:file:1 という指定は file を nbd デバイスとして使用し、その 1 番目のパーティションが rootfs としてマウントされます。 nbd:file という指定は、nbd デバイス自身をマウントします。 overlayfs:/lower:/upper という指定は、rootfs は /lower という読み込み専用でマウントされるディレクトリの上に、/upper というディレクトリを読み書き可能で重ね合わせてマウントします。 overlayfs は、複数の /lower ディレクトリを指定できます。 loop:/file/file を loop デバイスとして使用し、loop デバイスをマウントします。 root ファイルシステムの変更の前に、 を再帰的にどこにバインドするのかを指定します。これは pivot_root 8 システムコールが確実に成功する事を保証します。 どんなディレクトリでも良く、デフォルトでも通常は動くはずです。 rootfs をマウントするときに追加したいマウントオプション。 Control group CONTROL GROUP セクションは、(lxc とは) 別のサブシステムの設定を含みます。 lxc は、このサブシステム名の正しさはチェックしません。 実行時のエラーを検出するのに不便ですが、別の将来のサブシステムをサポート出来るという有利な点もあります。 legacy な cgroup 階層 (cgroup v1) に設定する値を指定します。コントローラー名は control group そのままの名前です。 許される名前や値の書式は LXC が指定することはなく、コンテナが実行された時に実行されている Linux カーネルの機能に依存します。 例えば のようになります。 単一の cgroup 階層 (cgroup v2) に設定する値を指定します。 許される名前や値の書式は LXC が指定することはなく、コンテナが実行された時に実行されている Linux カーネルの機能に依存します。 例えば のようになります。 コンテナの cgroup を作成するパスやディレクトリを指定します。 例えば、"c1" という名前のコンテナで のように設定すると、"my-cgroup" のサブ cgroup のようにコンテナの cgroup を作成します。 例えば、ユーザのカレントの cgroup である "my-user" が cgroup v1 階層にある cpuset コントローラの root cgroup 内に存在する場合、この設定は "/sys/fs/cgroup/cpuset/my-user/my-cgroup/first/c1" という cgroup をこのコンテナ向けに作成します。 存在しない cgroup は LXC が作成しますが、ユーザがカレントの cgroup に書き込み権を持っていることが前提となります。 <!-- Capabilities -->ケーパビリティ コンテナが root 権限で実行されていても、コンテナ内ではケーパビリティ (capabilities) を削除する事は可能です。 コンテナ内で削除するケーパビリティ (capability) を指定します。 一行でスペース区切りで複数のケーパビリティを指定することも可能です。 指定は、"CAP_" というプレフィックスなしで、小文字でケーパビリティを指定します。 例えば、CAP_SYS_MODULE というケーパビリティは sys_module と指定する必要があります。 詳しくは以下を参照してください。 capabilities 7 この設定を、値を指定しない状態で使った場合、それ以前に指定された削除対象のケーパビリティの指定をすべてクリアします (lxc.cap.drop に何も指定しない状態になります)。 コンテナ内で維持するケーパビリティを指定します。指定した以外の全てのケーパビリティはドロップされます。 特別な値 "none" が指定されている時点で、lxc はこの時点で保持することになっている全てのケーパビリティをクリアします。"none" を単独で使用するとすべてのケーパビリティを削除できます。 名前空間 <!-- Namespace --> 名前空間は clone したり ()、keep したり ()、share したり () できます。 コンテナ作成時に作成する名前空間を指定します。作成する名前空間はスペース区切りのリストで指定します。指定する名前空間名は、/proc/PID/ns ディレクトリ内に存在する標準の名前空間指示子でなければなりません。 を明示的に設定していない場合は、カーネルがサポートするすべての名前空間と現在の設定が使われます。 新しいマウント、ネット、IPC 名前空間を作る場合は と指定します。 コンテナが、作成元のプロセスから継承する (新しい名前空間を作らずに元のプロセスの名前空間のまま実行する) 名前空間を指定します。継承する名前空間はスペース区切りのリストで指定します。指定する名前空間名は、/proc/PID/ns ディレクトリ内に存在する標準の名前空間指示子でなければなりません。 はブラックリストを指定するオプションです。つまり、コンテナに特定の名前空間を使い続けることを強制したい場合に便利です。 ネットワーク、ユーザ、IPC 名前空間を元のプロセスの名前空間のままで実行したい場合は と指定します。 PID 名前空間を共有すると、ほとんどの init で動作しない可能性があることに注意してください。 コンテナが新しいユーザ名前空間をリクエストし、そのコンテナがネットワーク名前空間は継承したい場合は、ユーザ名前空間は継承する必要があることに注意してください。 他のコンテナやプロセスから継承する名前空間を指定します。 には、/proc/PID/ns ディレクトリ内に現れる名前空間のひとつが入ります。 他のプロセスから名前空間を継承するには、 の値をプロセスの PID に設定します。例えば のようになります。 他のコンテナから名前空間を継承するには、 の値をコンテナ名に設定します。例えば のようになります。 標準の liblxc のパスとは異なるコンテナパスに存在する他のコンテナから名前空間を継承するには、 をそのコンテナのフルパスで指定します。例えば のようになります。 名前空間を継承するためには、呼び出し元が継承元のプロセスまたはコンテナに対して十分な権限を持っている必要があります。 システムコンテナ間での PID 名前空間の共有は、ほとんどの init システムではうまく動作しない可能性があることに注意が必要です。 ふたつのプロセスが異なるユーザ名前空間に存在し、そのうちのひとつが他のネットワーク名前空間を継承したい場合、通常はユーザ名前空間も同様に継承する必要があることに注意が必要です。 リソース制限 <!-- Resource limits --> コンテナに対するソフトもしくはハードリミットを変更できます。非特権コンテナでは、制限を下げることしかできません。明示的に指定されていないリソースは継承されます。 設定したいリソースと制限値を指定します。制限値はコロンで区切られた 2 つの値で指定します。値は数値もしくは 'unlimited' で指定します。ソフトもハードも同じ値を指定する場合は単一の値を指定できます。指定できる名前は、"RLIMIT_" 接頭辞がなく小文字で書かれた、"RLIMIT_" リソース名です。例えば、RLIMIT_NOFILE は "nofile" と指定します。詳しくは setrlimit 2 を参照してください。 値を指定せずに使用した場合、lxc はこの指定以前に設定されたリソース制限をクリアします。明示的に制限が設定されていないリソースについては、コンテナを起動したプロセスから継承します。 Sysctl コンテナ用のカーネルパラメータを設定します。 設定したいカーネルパラメータを指定します。指定できるパラメータは /proc/sys 以下に存在するものです。 すべての sysctl パラメータが仮想化(名前空間化)されているわけではないことに注意してください。仮想化されていない sysctl を設定すると、システムワイドで設定が変更されてしまいます。 sysctl 8 . 値を指定しないでこの設定を指定した場合は、この設定より前に設定されたパラメータをクリアします。 <!-- Apparmor profile -->Apparmor プロファイル lxc が apparmor サポートでコンパイルされ、インストールされている場合で、ホストで apparmor が有効な場合、コンテナが従って動くべき apparmor プロファイルは、コンテナの設定で指定することが可能です。 デフォルトは、ホストのカーネルで cgroup 名前空間が使える場合は lxc-container-default-cgnsです。使えない場合は lxc-container-default です。 コンテナが従うべき apparmor プロファイルを指定します。 コンテナが apparmor による制限を受けないように設定するには、以下のように設定します。 lxc.apparmor.profile = unconfined もし apparmor プロファイルが変更されないままでなくてはならない場合 (ネストしたコンテナである場合や、すでに confined されている場合) は以下のように設定します。 lxc.apparmor.profile = unchanged apparmor プロファイルはパス名ベースですので、多数のファイルの制限を行う際、執念深い攻撃者に対して効果的であるためにはマウントの制限が必要です。 しかし、これらのマウントの制限は upstream のカーネルではまだ実装されていません。マウントの制限なしでも、apparmor プロファイルによって予想外のダメージに対する保護が可能です。 このフラグが 0 の場合 (デフォルト)、カーネルが apparmor のマウント機能をサポートしていない場合にコンテナが起動しません。これはカーネルを更新した後に機能が退行したことが検出できるようにするためです。 不完全な apparmor の保護の下でコンテナを起動するためには、このフラグを 1 に設定してください。 <!-- SELinux context -->SELinux コンテキスト lxc が SELinux サポートでコンパイルされ、インストールされている場合で、ホストで SELinux が有効な場合、コンテナが従って動くべき SELinux コンテキストは、コンテナの設定で指定することが可能です。 デフォルトは unconfined_t であり、これは lxc がコンテキストを変えないという意味になります。 ポリシーの例と追加の情報は @DATADIR@/lxc/selinux/lxc.te ファイルを参照してください。 コンテナが従うべき SELinux コンテキストを指定するか、unconfined_t を指定します。例えば以下のように設定します。 lxc.selinux.context = system_u:system_r:lxc_t:s0:c22 <!-- Seccomp configuration -->Seccomp の設定 コンテナは、起動時に seccomp プロファイルをロードすることで、利用可能なシステムコールを減らして起動することが可能です。 seccomp の設定ファイルは、1 行目がバージョン番号、2 行目がポリシーのタイプで始まる必要があり、その後に設定を書きます。 現時点では、バージョン番号は 1 と 2 をサポートしています。バージョン 1 では、ポリシーはシンプルなホワイトリストですので、2 行目は "whitelist" でなければなりません。 そして残りの行には 1 行に 1 つずつ、システムコール番号を書きます。各行のシステムコール番号がホワイトリスト化され、リストにない番号は、そのコンテナではブラックリストに入ります。 バージョン 2 では、ポリシーはブラックリストもしくはホワイトリストで表され、ルールごとのアクションと、ポリシーごとのデフォルトのアクションを設定できます。そして、アーキテクチャごとの設定と、テキストで書かれたシステムコール名での設定が可能です。 以下にブラックリストのポリシーの例を示します。これは mknod 以外の全てのシステムコールが許可され、mknod が呼ばれると、何もせずに単に 0(成功) を返します。 2 blacklist mknod errno 0 コンテナがスタートする前にロードする seccomp の設定を含むファイルを指定します。 PR_SET_NO_NEW_PRIVS PR_SET_NO_NEW_PRIVS を付与すると、対象の execve() は、execve() の呼び出しなしでは実行できなかったことに対する特権を許可しなくなります (例えば、set-user-ID、set-group-ID 許可ビットや、ファイルケーパビリティが動作しなくなります)。 一度設定されると、このビットは解除できません。このビットの設定は fork() や clone() で生成される子プロセスにも継承され、execve() の前後で保持されます。 PR_SET_NO_NEW_PRIVS は、コンテナに適用しようとする AppArmor プロファイルもしくは SELinux コンテキストへの変更がなされたあとに適用されます。 コンテナに対して PR_SET_NO_NEW_PRIVS ビットを設定するかどうかを指定します。1 に設定すると有効になります。 <!-- UID mappings -->UID のマッピング コンテナは、ユーザとグループの id のマッピングを持った専用のユーザ名前空間で起動することが可能です。 たとえば、コンテナ内のユーザ id 0 を、ホストのユーザ id 200000 にマッピングすることが可能です。 コンテナの root ユーザはコンテナ内では特権を持ちますが、ホストでは特権を持ちません。 通常は、システムコンテナは id の範囲を要求し、それをマッピングします。 例えば、コンテナ内のユーザとグループの id 0 から 20,000 を 200,000 から 220,000 にマッピングします。 4 つの値を記述する必要があります。 最初の文字は 'u' か 'g' のどちらかで、ユーザかグループの ID のどちらをマッピングするかを指定します。 次はコンテナのユーザ名前空間内に現れる最初のユーザ ID です。 その次は、そのユーザ ID のホスト上での値です。 最後は、ID のマッピングをいくつ連続して行うかの数を指定します。 <!-- Container hooks -->コンテナのフック コンテナのフックは、コンテナの存続期間の色々な場面で実行することのできるプログラムやスクリプトです。 コンテナフックが実行されるとき、追加の情報が渡されます。追加の引数がコマンドライン引数で渡されるか、環境変数経由で渡されるかを判断するのに、 が使えます。引数は: コンテナ名 セクション (常に 'lxc') フックのタイプ ('clone' や 'pre-mount' など) 追加の引数。clone フックの場合、lxc-clone に渡される追加の引数は、フックへの引数として追加されます。stop フックの場合は、コンテナの名前空間のそれぞれに対するファイルディスクリプタへのパスが、名前空間名とともに渡されます。 次の環境変数がセットされます。 LXC_CGNS_AWARE: コンテナで cgroup namespace が使えるかどうか LXC_CONFIG_FILE: コンテナの設定ファイルのパス LXC_HOOK_TYPE: フックのタイプ (例えば 'clone'、'mount'、'pre-mount')。この環境変数が存在するかどうかは の値次第です。この値が 1 なら、LXC_HOOK_TYPE が設定されています。 LXC_HOOK_SECTION: セクションタイプ (例えば 'lxc'、'net')。この環境変数が存在するかどうかは の値次第です。この値が 1 なら、LXC_HOOK_TYPE が設定されています。 LXC_HOOK_VERSION: フックのバージョン。この値は、コンテナの の値と同じです。もし、この値が 0 に設定されているなら、古いスタイルのフックが使われます。もし 1 に設定されているなら、新しいスタイルのフックが使われます。 LXC_LOG_LEVEL: コンテナのログレベル LXC_NAME: コンテナ名 LXC_[NAMESPACE IDENTIFIER]_NS: コンテナの名前空間が参照する /proc/PID/fd/ 以下のファイルディスクリプタのパス。それぞれの名前空間ごとに別々の環境変数になります。これらの環境変数は が 1 に設定されてる場合のみ設定されます。 LXC_ROOTFS_MOUNT: マウントされた root ファイルシステムへのパス LXC_ROOTFS_PATH: コンテナの lxc.rootfs.path エントリ。これはマウントされた rootfs が存在する場所にはならないでしょう。それには LXC_ROOTFS_MOUNT を使用してください。 LXC_SRC_NAME: clone フックの場合、元のコンテナの名前 スクリプトからの標準出力は debug レベルでロギングされます。 標準エラー出力はロギングされません。 しかし、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。 環境変数経由の新しいスタイルで引数を渡すには 1 に設定します。そうでなく、引数として渡すには 0 に設定します。この設定は、古い方法でスクリプトに引数として渡されているすべてのフック引数に影響します。特に、コンテナ名のセクション (例: 'lxc', 'net') とフックタイプ (例: 'clone', 'mount', 'pre-mount') 引数に影響します。新しいスタイルのフックが使われる場合、引数は環境変数として利用できます。 コンテナ名は LXC_NAME に設定されます(これはこの設定項目に設定されている値とは関係なく設定されます)。セクションは LXC_HOOK_SECTION に設定されます。そしてフックタイプは LXC_HOOK_TYPE に設定されます。 この設定は、コンテナの名前空間を参照するファイルディスクリプタのパスをどのように渡すかにも影響します。1 に設定した場合、名前空間ごとに別の環境変数 LXC_[NAMESPACE IDENTIFIER]_NS に設定されます。0 に設定すると、パスは stop フックの引数として渡されます。 コンテナの tty、コンソールの作成、マウントが実行される前に、ホストの名前空間内で実行するフック。 コンテナのファイルシステムの名前空間で実行されますが、rootfs が設定される前に実行するフック。 これにより rootfs の操作が可能になります。 例えば、暗号化されたファイルシステムのマウントなどです。 このフック内でなされるマウントはホストには影響しません (mounts propagation を除いて)。 なので、それらはコンテナがシャットダウンする時に自動的にクリーンアップされます。 マウントが完了した後ですが、pivot_root の前にコンテナの名前空間で実行されるフック。 == 1 が設定されている場合で、マウントが完了し、マウント時のフックも実行された後ですが、pivot_root の前にコンテナの名前空間で実行するフック。 このフックの目的は、systemd ベースのコンテナ向けの autodev オプションが設定されている時に、コンテナの /dev ディレクトリを設定するのを支援することです。コンテナの /dev ディレクトリは、このフックが実行される時有効な ${} 環境変数からの相対パスとなります。 コンテナのセットアップが済んだあと、コンテナの init を実行する直前に、ホストの名前空間で実行するためのフックです。 コンテナの init が実行される直前にコンテナの名前空間で実行されるフック。 コンテナ内で利用可能なプログラムである必要があります。 コンテナのシャットダウン後、コンテナの名前空間への参照とともに、ホストの名前空間で実行されるフックです。 それぞれの名前空間に対応する追加の引数がフックに渡されます。その引数にはコロンで区切られた名前空間のタイプ名とファイル名が含まれており、ファイル名は名前空間に対するファイルディスクリプタを取得するのに使えます。 タイプ名は /proc/PID/ns ディレクトリ内のファイル名です。 例えば、マウント名前空間に対応する引数は通常は mnt:/proc/PID/fd/12 のようになります。 コンテナがシャットダウンされた後にホストの名前空間で実行するフック。 コンテナが新しいコンテナにクローンされる際に実行されるフック。詳しくは lxc-clone 1 を参照してください。 コンテナを破壊する際に実行されるフックです。 <!-- Container hooks Environment Variables -->コンテナのフックで使える環境変数 起動時のフックに設定情報を提供し、フックの機能を助けるための環境変数がいくつか利用可能です。 全ての変数が全てのコンテキストで利用可能なわけではありません。 具体的には、全てのパスはホストシステム上のパスであり、そのため、 フックの時点では使用できません。 LXC コンテナの名前。共通のログ環境内でのログメッセージに使うときに便利です。[] コンテナの設定ファイルのホスト上でのパス。 これは、他の方法では得られない追加の設定情報を見つけるために、コンテナに、元の、トップレベルの設定ファイルの位置を与えるものです。 [] 設定されている場合のコンテナのコンソール出力のパス。 [] [] 設定されている場合のコンテナのコンソールログ出力のパス。 [] 初期にコンテナがマウントされる場所。 これは、コンテナインスタンスが起動するためのコンテナの rootfs へのホスト上のパスであり、インスタンスのための移行が行われる場所です。 [] rootfs.mount へマウントされるコンテナのルートへのホスト上のパスです。 [] clone フックの場合のみ使われます。クローン元のコンテナ名が設定されます。 stop フックの場合のみ使われます。コンテナのシャットダウンの場合は "stop"、リブートの場合は "reboot" が設定されます。 この変数が設定されていない場合、お使いのバージョンの LXC は cgroup 名前空間を扱えません。設定されている場合、この値は 1 に設定されています。そして、cgroup 名前空間を扱えます。 この変数はカーネルで cgroup 名前空間が有効であることは保証しません。この変数は lxcfs のマウントフックが使います。 <!-- Logging -->ロギング ロギングはコンテナごとに設定することが可能です。 デフォルトでは、lxc パッケージのコンパイル条件に依存し、コンテナのスタートアップは ERROR レベルでのみロギングされ、コンテナのパス以下か、@LOGPATH@ 以下のどちらかにコンテナ名 (の後に '.log' が付与される) をもとにした名前でロギングされます。 デフォルトのログレベルとログファイルは両方とも、コンテナの設定ファイル内で指定され、デフォルトの値を上書きします。 同様に、設定ファイルのエントリは lxc-start のコマンドラインオプションで上書きすることも可能です。 ログを取得するレベル。 ログレベルは 0..8 の範囲の整数です。 数字が小さいほど冗長なデバッグを意味します。 具体的には、0 = trace, 1 = debug, 2 = info, 3 = notice, 4 = warn, 5 = error, 6 = critical, 7 = alert, and 8 = fatal です。 指定されない場合、レベルのデフォルトは 5 (error) で、それ以上のエラーがロギングされます。 (フックスクリプトやネットワークインターフェースの起動、停止時のスクリプトのような) スクリプトが呼ばれた時、スクリプトの標準出力は level 1 の debug でロギングされます。 ログ情報を書き込むファイル。 ログ情報を syslog に送ります。ログレベルとして lxc.log.level の値を使用します。指定する値は使用する syslog の facility です。有効な値は daemon, local0, local1, local2, local3, local4, local5, local5, local6, local7 のいずれかです。 <!-- Autostart -->自動起動 自動起動オプションでは、自動起動させるコンテナと順番の設定が可能です。 このオプションは LXC ツールが直接使用するか、ディストリビューションが提供する外部ツールが使用するかもしれません。 コンテナを自動起動させるかどうかを設定します。 有効な値は 0(オフ) か 1(オン) です。 コンテナを起動させた後、次のコンテナを起動させるまでにどれくらい (秒) 待つかを設定します。 多数の自動起動させるコンテナがある場合のコンテナの起動順を決めるのに使う整数を指定します。 この値が 0 でない場合、コンテナが初期化される前 (pre-start フックが実行される前) にマウント名前空間がホストから unshare されます。この機能を使う場合、スタート時に CAP_SYS_ADMIN ケーパビリティが必要です。デフォルト値は 0 です。 コンテナを追加したいコンテナグループ名を指定します。 複数の値を設定でき、複数回指定することもできます。 設定されたグループは、関連する一連のコンテナを起動させるために使われます。 <!-- Autostart and System Boot -->自動起動とシステムブート コンテナはいくつでもグループに属することができ、全く属さないことも可能です。特別なグループが 2 つ存在します。1 つは NULL グループです。これはどのグループにも属さないコンテナです。もう 1 つは "onboot" グループです。 LXC サービスが有効になった状態でシステムがブートすると、最初に "onboot" グループのメンバーである lxc.start.auto == 1 が設定されたコンテナを起動しようとします。起動は lxc.start.order の順に起動します。 lxc.start.delay が指定されている場合、現在対象となっているコンテナに初期化の時間を与え、ホストシステムの負荷を低減するために、次のコンテナを開始させるまでに遅延時間を与えます。 "onboot" グループのメンバーが開始した後、LXC システムは lxc.start.auto == 1 が設定された、どのグループのメンバーでもない (NULL グループの) コンテナのブートを onboot グループのコンテナと同様に開始します。 <!-- Container Environment -->コンテナの環境変数 コンテナに環境変数を渡したい場合 (環境変数はコンテナの init とその子孫全てで利用可能です)、lxc.environment パラメータがその用途に使えます。 機微 (センシティブ) な情報を渡さないように注意が必要です。そのような情報を持たないコンテナ内のプロセスでこれらの環境変数が利用可能になってしまいます。環境変数は常に /proc/PID/environ 経由で利用可能になります。 この設定項目は、設定したい環境変数ごとに 1 度ずつ、何度でも指定できます。 コンテナに渡したい環境変数を指定します。 例: lxc.environment = APP_ENV=production lxc.environment = SYSLOG_SERVER=192.0.2.42 <!-- Examples -->例 以下に紹介するいくつかの例に加えて、他の設定例が @DOCDIR@/examples にあります。 <!-- Network -->ネットワーク この設定は、片方をブリッジである br0 と接続される veth ペアデバイスを使うコンテナを設定します (ブリッジは管理者によりあらかじめシステム上に設定済みである必要があります)。 仮想ネットワークデバイスは、コンテナ内では eth0 とリネームされます。 lxc.uts.name = myhostname lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.name = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 1.2.3.5/24 1.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 <!-- UID/GID mapping -->UID/GID のマッピング この設定は、コンテナ内のユーザとグループ両方の id 0-9999 の範囲を、ホスト上の 100000-109999 へマッピングします。 lxc.idmap = u 0 100000 10000 lxc.idmap = g 0 100000 10000 Control group この設定は、アプリケーションのための control group をいくつか設定します。 cpuset.cpus は定義された cpu のみ使用できるように制限します。 cpus.share は、control group の (cpu) 優先度を指定します。 devices.allow は、特定のデバイスを使用可能にします。 lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw <!-- Complex configuration -->複雑な設定 この例は、control group を使って、複雑なネットワークスタックを作成し、新しいホスト名を指定し、いくつかの場所をマウントし、ルートファイルシステムを変更するような複雑な設定を示します。 lxc.uts.name = complex lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 10.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 lxc.net.0.ipv6.address = 2003:db8:1:0:214:5432:feab:3588 lxc.net.1.type = macvlan lxc.net.1.flags = up lxc.net.1.link = eth0 lxc.net.1.hwaddr = 4a:49:43:49:79:bd lxc.net.1.ipv4.address = 10.2.3.4/24 lxc.net.1.ipv4.address = 192.168.10.125/24 lxc.net.1.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc.net.2.type = phys lxc.net.2.flags = up lxc.net.2.link = dummy0 lxc.net.2.hwaddr = 4a:49:43:49:79:ff lxc.net.2.ipv4.address = 10.2.3.6/24 lxc.net.2.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3297 lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw lxc.mount.fstab = /etc/fstab.complex lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0 lxc.rootfs.path = dir:/mnt/rootfs.complex lxc.cap.drop = sys_module mknod setuid net_raw lxc.cap.drop = mac_override See Also chroot 1 , pivot_root 8 , fstab 5 capabilities 7 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc-start.sgml.in0000644061062106075000000003066213256572152013621 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-start 1 lxc-start コンテナ内でのアプリケーションの実行 lxc-start -n name -f config_file -c console_device -L console_logfile -d -F -p pid_file -s KEY=VAL -C --share-[net|ipc|uts] name|pid command <!-- Description -->説明 lxc-startcommand で指定されたコマンドを、name で指定されたコンテナ内で実行します。 このコマンドは、lxc-create コマンドもしくは設定ファイルのパラメータであらかじめ定義された設定に従ってコンテナをセットアップします。 もし設定が定義されていない場合は、デフォルトの隔離状態を使用します。 もし command が指定されない場合は、lxc-start はシステムコンテナを実行するためのコマンドとして、lxc.init.cmd で設定されたコマンドを使用します。 もし lxc.init.cmd が設定されていない場合は、デフォルトで "/sbin/init" を使用します。 <!-- Options -->オプション コンテナをデーモンとして実行します。 コンテナはそれ以上の tty を持ちませんので、もしエラーが起きても何も表示されません。 エラーのチェックにはログファイルを使用することができます。(これがデフォルトのモードです) コンテナをフォアグラウンドで実行します。このモードでは、コンテナコンソールは現在使用中の tty に割り当てられ、シグナルはコンテナに直接送られます。 プロセス ID を含むファイルを作製します。 コンテナの仮想化、隔離機能の設定のための設定ファイルを指定します。 (lxc-create 経由で) 前もってコンテナが作られた際の設定ファイルが既にあった場合でも、このオプションが指定された場合は、指定した設定ファイルが使用されます。 コンテナのコンソールに使用するデバイスを指定します。例えば /dev/tty8 のように指定します。 このオプションが指定されない時は、 が指定されない限りは、現在のターミナルを使用します。 コンテナのコンソール出力のログを出力するファイルを指定します。 設定変数 KEY に対する設定値として VAL を設定します。 この設定は、config_file で既に設定されている値も上書きします。 継承しているファイルディスクリプタが存在する場合、それをクローズします。 このオプションが指定されない場合、lxc-start の実行は失敗して終了します。 注意: --daemon オプションは、--close-all-fds オプションを指定しなくても指定している場合と同様の動きをします。 名前が name である、もしくは PID が pid であるコンテナとネットワーク名前空間を共有します。 ネットワーク名前空間は引き続き元の所有者が管理します。 開始するコンテナのネットワーク設定は無視され、up/down のスクリプトは実行されません。 名前が name である、もしくは PID が pid であるコンテナと IPC 名前空間を共有します。 名前が name である、もしくは PID が pid であるコンテナと UTS 名前空間を共有します。 LXC は開始するときににはホスト名を設定しませんが、コンテナ内の OS が何らかの方法でホスト名を設定するかもしれません。 &commonoptions; <!-- Diagnostic -->診断 The container is busy 指定したコンテナは既に実行済みです。 このコンテナを使用する前に既に起動しているコンテナを停止するか、新しいものを作成する必要があります。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ja/lxc.system.conf.sgml.in0000644061062106075000000001475713256572152014744 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.system.conf 5 lxc.system.conf LXC のシステム設定ファイル <!-- Description -->説明 システム設定ファイルは @LXC_GLOBAL_CONF@ を使用します。 非特権コンテナの場合には ~/.config/lxc/lxc.conf を使用します。 この設定ファイルは LXC のデフォルトパスやストレージバックエンドの設定のような値を設定する時に使用します。 <!-- Configuration paths -->パスの設定 全てのコンテナが保存される場所。 コンテナのデフォルト設定ファイルのパス。 Control Groups 使用する cgroup コントローラのコンマ区切りのリスト。 何も指定されていない場合、全ての利用可能なコントローラが使われます。 コンテナ用の cgroup を生成する際に使うフォーマット文字列 (例. lxc/%n)。 LVM デフォルトの LVM の volume group 名。 デフォルトの LVM の thin pool 名。 ZFS デフォルトの ZFS root 名。 lxc 1 , lxc.container.conf 5 , lxc.system.conf 5 , lxc-usernet 5 &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-checkpoint.sgml.in0000644061062106075000000001474713256572152014621 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-checkpoint 1 lxc-checkpoint コンテナのチェックポイントとリストア lxc-checkpoint -n name -D PATH -r -s -v -d -F <!-- Description -->説明 lxc-checkpoint はコンテナのチェックポイント処理による状態保存とリストアを行います。 <!-- Options -->オプション コンテナの状態を保存するのでなく、チェックポイントからのリストアを行います。 チェックポイントのメタデータを保存するディレクトリを指定します。 コンテナの状態を保存した後にコンテナを停止します。このオプションは と同時に指定できません。 CRIU のログ出力を冗長モードにします。 コンテナをバックグラウンドで起動した状態でリストアします (これがデフォルトです)。 を指定したときだけ使用できます。 コンテナなフォアグラウンドで起動した状態でリストアします。 を指定したときだけ使用できます。 &commonoptions; <!-- Examples -->例 lxc-checkpoint -n foo -D /tmp/checkpoint foo という名前のコンテナのチェックポイント処理を実行し、データを /tmp/checkpoint に保存します。 lxc-checkpoint -r -n foo -D /tmp/checkpoint /tmp/checkpoint に保存されたチェックポイントデータからリストアを行います。 &seealso; <!-- Author -->作者 Tycho Andersen tycho.andersen@canonical.com lxc-3.0.0/doc/ja/lxc.sgml.in0000644061062106075000000007400513256572152012465 00000000000000 ]> @LXC_GENERATE_DATE@ lxc 7 Version @PACKAGE_VERSION@ lxc Linux コンテナ <!-- Overview -->概要 コンテナ技術は、メインストリームの Linux Kernel で活発に開発が進んでいる技術です。コンテナ技術は、cgroup によりリソースを管理する機能を提供し、名前空間によりリソースを隔離する機能を提供します。 lxc は、アプリケーションまたはシステムのために完全なリソースの隔離やコントロールを提供する、ユーザースペースのコンテナオブジェクトを提供するためのこれらの新しい機能を使う事を目指しています。 lxc は、シンプルなコマンドラインでコンテナを簡単に管理できるほど軽量で、他の用途に使うのにも十分に機能がそろっています。 <!-- Requirements -->動作条件 カーネルのバージョンが 3.10 以上のディストリビューションであれば、lxc が動作するでしょう。このバージョンは機能は少ないですが、それでも十分楽しめるでしょう。 lxc はカーネルが提供する様々な機能に依存します。lxc-checkconfig がカーネルの設定や、必要な機能、足りない機能についての情報を提供してくれるでしょう。 <!-- Functional specification -->機能仕様 コンテナは、ホストのリソースのいくつかを隔離して、内部でアプリケーションやシステムを実行します。 アプリケーションやシステムは、あらかじめ作成した設定や、コマンドへのパラメータで与えた設定で、コンテナ内で実行されます。 コンテナ内でアプリケーションを実行する方法 アプリケーションを実行する前に、隔離したいリソースについて知っておくべきです。デフォルトの設定では、PID、sysv IPC、マウントポイントが隔離されます。コンテナ内でシンプルなシェルを実行したい場合で、特に rootfs を共有したい場合、基本的な設定が必要です。 もし、sshd のようなアプリケーションを実行したい場合、新しいネットワークスタックと、新しいホスト名を準備しなくてはなりません。もし、同じファイル (/var/run/httpd.pid 等) の衝突を避けたい場合、空の /var/run/ を再度マウントしなければなりません。 どんな場合でも衝突を避けたい場合、コンテナ専用の rootfs を指定することができます。rootfs はディレクトリツリーとする事も可能で、前もって元の rootfs を bind マウントし、/etc/homeだけは自身のディレクトリを使って、自身のディストリビューションを使えます。 ここで、sshd のためのディレクトリツリーのサンプルを示しましょう。 [root@lxc sshd]$ tree -d rootfs rootfs |-- bin |-- dev | |-- pts | `-- shm | `-- network |-- etc | `-- ssh |-- lib |-- proc |-- root |-- sbin |-- sys |-- usr `-- var |-- empty | `-- sshd |-- lib | `-- empty | `-- sshd `-- run `-- sshd そして、それに対応するマウントポイントのファイルは以下のようになります。 [root@lxc sshd]$ cat fstab /lib /home/root/sshd/rootfs/lib none ro,bind 0 0 /bin /home/root/sshd/rootfs/bin none ro,bind 0 0 /usr /home/root/sshd/rootfs/usr none ro,bind 0 0 /sbin /home/root/sshd/rootfs/sbin none ro,bind 0 0 コンテナ内でシステムを実行する方法 コンテナ内でシステムを実行するのは、逆説的ではありますが、アプリケーションを実行するよりも簡単です。 それは、隔離するリソースについて考える必要がないからで、全てを隔離する必要があるからです。 他のリソースは、コンテナが設定を行うので、設定なしで隔離されるように指定されます。 例えば、IPv4 アドレスはコンテナの init スクリプトでシステムによってセットアップされるでしょう。 以下に、(システムを実行するときの) マウントポイントファイルを示します。 [root@lxc debian]$ cat fstab /dev /home/root/debian/rootfs/dev none bind 0 0 /dev/pts /home/root/debian/rootfs/dev/pts none bind 0 0 <!-- Container life cycle -->コンテナのライフサイクル コンテナが作成されるとき、コンテナは設定情報を含みます。プロセスが生成されるとき、コンテナは開始し、実行されるでしょう。コンテナ内で実行されている最後のプロセスが終了したとき、コンテナは停止します。 コンテナの初期化時の失敗の場合は、(以下の図の) 中断の状態を通ります。 <!-- Configuration -->設定 コンテナは設定ファイル経由で設定します。設定の書式は lxc.conf 5 で説明しています。 <!-- Creating / Destroying containers -->コンテナの作成と削除 持続性のコンテナオブジェクトは lxc-create コマンドで作成できます。コマンドにはコンテナ名をパラメータとして与え、オプションで設定ファイルとテンプレートを指定します。ここで指定する名前は、他のコマンドからこのコンテナを参照する際に使います。 lxc-destroy コマンドはコンテナオブジェクトを削除します。 lxc-create -n foo lxc-destroy -n foo <!-- Volatile container -->一時的な (揮発性の) コンテナ コンテナを開始する前にコンテナオブジェクトを作成する必要はありません。パラメータとして設定ファイルを指定して、コンテナを直接起動できます。 <!-- Starting / Stopping container -->コンテナの起動と停止 コンテナが作成されると、アプリケーションもしくはシステムを実行できます。このために使用するのが lxc-executelxc-start コマンドです。 アプリケーションを開始する前にコンテナを作成しなかった場合、コンテナはコマンドにパラメータとして渡した設定ファイルを使用します。もし、このようなパラメータもない場合は、デフォルトで指定されている通りに隔離されます。 アプリケーションが終了した場合、コンテナも停止します。lxc-stop コマンドを使って、実行中のアプリケーションを停止することもできます。 コンテナ内でアプリケーションを実行することは、正確にはシステムとして実行するのとは異なります。このため、コンテナ内でアプリケーションを実行するためのコマンドには、2 種類の違ったものがあります。 lxc-execute -n foo [-f config] /bin/bash lxc-start -n foo [-f config] [/bin/bash] lxc-execute コマンドは、間に lxc-init プロセスを介して、コンテナ内で指定したコマンドを実行します。 lxc-init はコマンドを実行した後、(コンテナ内でのデーモンの実行をサポートするために) 実行したコマンドと生成された全てのプロセスが終了するのを待ちます。 言いかえると、コンテナ内では lxc-init は PID 1 を持ち、アプリケーションの最初のプロセスは PID 2 をもちます。 lxc-start コマンドは、コンテナ内の特定のコマンドを直接実行します。最初のプロセスの PID が 1 となります。 もし、実行するコマンドが指定されていない場合は、lxc-start は lxc.init.cmd で設定されたコマンドを実行します。もし lxc.init.cmd が設定されていない場合は /sbin/init を実行します。 まとめると、lxc-execute はアプリケーションを実行するためのコマンドであり、lxc-start はシステムを実行するのにより適したコマンドです。 もしアプリケーションの反応がなくなった場合や、アクセスできなくなった場合、自分で終了できない場合は、荒っぽいですが、lxc-stop コマンドがコンテナ内の全てのプロセスを容赦なく停止させてくれるでしょう。 lxc-stop -n foo -k <!-- Connect to an available tty -->利用可能な tty への接続 コンテナが tty を持つように設定されているならば、tty を通してコンテナにアクセスすることができます。 アクセスできるかどうかは、以下のコマンドが使う tty がコンテナで利用できるように設定されているか次第です。 tty が失われたとき、再度のログインなしでその tty に再接続することが可能です。 lxc-console -n foo -t 3 <!-- Freeze / Unfreeze container -->コンテナの凍結と解凍 ジョブスケジューリングなどで、コンテナに属する全てのプロセスを停止する事が役に立つときがあります。 コマンド lxc-freeze -n foo は、全てのプロセスを中断不可能な状態に置きます。そして、 lxc-unfreeze -n foo その全てのプロセスを再開します。 この機能は、カーネルで cgroup v1 の freezer コントローラが有効になっている場合に使用できます。 <!-- Getting information about container --> コンテナに関する情報の取得 多数のコンテナが存在する場合、それらが実行されたり削除されたりすること、何が実行されていて、特定のコンテナ内で実行されている PID が何であるかをフォローするのは大変です。このような時には、以下のようなコマンドが役に立つかもしれません。 lxc-ls -f lxc-info -n foo lxc-ls はコンテナをリスト表示します。 lxc-info は、指定したコンテナに関する情報を表示します。 ここで、以上のコマンドを組み合わせて、どのようにしたら全てのコンテナのリストと、それぞれの状態が得られるかの例を示します。 for i in $(lxc-ls -1); do lxc-info -n $i done <!-- Monitoring container -->コンテナのモニタリング 時々、コンテナの状態を追跡することが出来ると便利な事があります。例えば、状態をモニタリングしたり、スクリプト内で特定の状態を待ったりするような場合です。 lxc-monitor コマンドは、一つもしくは複数のコンテナをモニタリングします。このコマンドのパラメータは、正規表現を受け付けます。例えば lxc-monitor -n "foo|bar" は 'foo' と 'bar' という名前のコンテナの状態をモニタリングします。そして、 lxc-monitor -n ".*" は全てのコンテナの状態をモニタリングします。 コンテナ 'foo' が開始され、いくつか処理を行い、終了した場合、出力は以下のようになります。 'foo' changed state to [STARTING] 'foo' changed state to [RUNNING] 'foo' changed state to [STOPPING] 'foo' changed state to [STOPPED] lxc-wait コマンドは指定した状態を待って終了します。これは、コンテナの開始や終了に同期したいスクリプトで役に立ちます。パラメータは、異なった状態の論理和 (OR) を指定します。 以下の例は、バックグラウンドで実行されたコンテナをどのようにして待つかを示します。 <!-- cgroup settings for containers -->コンテナの cgroup の設定 コンテナは control group と結合しています。コンテナを開始すると cgroup が生成され、結びつけられます。 cgroup のプロパティは、lxc-cgroup コマンドを使って、コンテナが実行中に読み取ったり変更したりできます。 lxc-cgroup コマンドは、コンテナと結びつけられている control group サブシステムを設定したり、取得したりするのに使います。サブシステム名の指定はユーザが行ない、このコマンドはサブシステム名の文法チェックは一切行ないません。もし、指定したサブシステム名が存在しない場合は、コマンドの実行は失敗します。 lxc-cgroup -n foo cpuset.cpus は、このサブシステムの内容を表示します。 lxc-cgroup -n foo cpu.shares 512 は、このサブシステムに指定した値を設定します。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr Christian Brauner christian.brauner@ubuntu.com Serge Hallyn serge@hallyn.com Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-checkconfig.sgml.in0000644061062106075000000000601113256572152014716 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-checkconfig 1 lxc-checkconfig 現在のカーネルが lxc に必要な機能をサポートしているかのチェック lxc-checkconfig <!-- Description -->説明 lxc-checkconfig は、現在のカーネルが lxc に必要な機能をサポートしているかをチェックします。 <!-- Examples -->例 lxc-checkconfig 現在のカーネルをチェックします。 CONFIG 環境変数に別の場所を設定することも可能です。 (訳注: カーネルビルド時の設定オプションのファイルの位置を指定します。デフォルトは /proc/config.gz です。) &seealso; <!-- Author -->作者 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ja/lxc-update-config.sgml.in0000644061062106075000000001342213256572152015204 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-update-config 1 lxc-update-config LXC 2.1 より前の古い形式の設定ファイルを新しい形式に更新する lxc-update-config -c config <!-- Description -->説明 lxc-update-config は、config で指定したファイルの古い形式の設定項目を検出し、適切な新しい設定項目に置き換えます。 lxc-update-config はまず、古い config ファイルのバックアップを config.backup という名前で同じディレクトリに作成します。そして、元の config ファイルを更新します。 更新が失敗した場合や、コンテナの起動ができない無効な config ファイルである場合は、ユーザが configconfig.backup を比較して、手動で無効な設定項目を修正するか、config.backupconfig にコピーして以前の設定ファイルに戻せます。 lxc-update-config が使えない config ファイルを生成した場合はバグですので、開発元に報告してください。 <!-- Options -->オプション 更新したい設定ファイルのパス &seealso; <!-- Author -->作者 Christian Brauner christian.brauner@ubuntu.com lxc-3.0.0/doc/ja/lxc-freeze.sgml.in0000644061062106075000000000666413256572152013751 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-freeze 1 lxc-freeze コンテナ内のプロセス全ての凍結 lxc-freeze -n name <!-- Description -->説明 lxc-freeze は、コンテナ内部で実行中のプロセスを全て凍結します。 プロセスは lxc-unfreeze コマンドによって明示的に解凍されるまでブロックされます。 このコマンドはプロセスのグループをスケジューリングするバッチマネージャに便利なコマンドです。 &commonoptions; <!-- Diagnostic -->診断 The container was not found 指定したコンテナが lxc-create で作成されておらず存在しません。 &seealso; <!-- Author -->作者 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-unfreeze.sgml.in0000644061062106075000000000502713256572152013712 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unfreeze 1 lxc-unfreeze thaw all the container's processes lxc-unfreeze -n name Description lxc-unfreeze will thaw all the processes previously frozen by the lxc-freeze command. &commonoptions; Diagnostic The container was not found The specified container was not created before with the lxc-create command. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-monitor.sgml.in0000644061062106075000000001141713256572152013556 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-monitor 1 lxc-monitor monitor the container state lxc-monitor -n name -Q name Description lxc-monitor monitors the state of containers. The name argument may be used to specify which containers to monitor. It is a regular expression, conforming with posix2, so it is possible to monitor all the containers, several of them or just one. If not specified, name will default to '.*' which will monitor all containers in lxcpath. The =PATH option may be specified multiple times to monitor more than one container path. Note however that containers with the same name in multiple paths will be indistinguishable in the output. Options Ask the lxc-monitord daemon on each given lxcpath to quit. After receiving this command, lxc-monitord will exit immediately as soon as it has no clients instead of waiting the normal 30 seconds for new clients. This is useful if you need to unmount the filesystem lxcpath is on. &commonoptions; Examples lxc-monitor -n foo will monitor the different states for container foo. lxc-monitor -n 'foo|bar' will monitor the different states for container foo and bar. lxc-monitor -n '[fb].*' will monitor the different states for container with the name beginning with letter 'f' or 'b'. lxc-monitor -n '.*' will monitor the different states for all containers. Diagnostic The container was not found The specified container was not created before with the lxc-create command. See Also regex 7 , &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-device.sgml.in0000644061062106075000000001007413256572152013324 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-device 1 lxc-device manage devices of running containers lxc-device -h -n name add DEVICE NAME Description lxc-device manages devices in running container. Options The full command help message. The name of the target container. What action to perform. Only 'add' is supported at this point. The device to add to the container. It can either be the path to a device under /dev or a network interface name. Name for the device within the container. Examples lxc-device -n p1 add /dev/video0 Creates a /dev/video0 device in container p1 based on the matching device on the host. lxc-device -n p1 add eth0 eth1 Moves eth0 from the host as eth1 in p1. &seealso; Author Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/lxc-autostart.sgml.in0000644061062106075000000002423713256572152014121 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-autostart 1 lxc-autostart start/stop/kill auto-started containers lxc-autostart -k -L -r -s -a -A -g groups -t timeout Description lxc-autostart processes containers with lxc.start.auto set. It lets the user start, shutdown, kill, restart containers in the right order, waiting the right time. Supports filtering by lxc.group or just run against all defined containers. It can also be used by external tools in list mode where no action will be performed and the list of affected containers (and if relevant, delays) will be shown. The -r, -s and -k options specify the action to perform. If none is specified, then the containers will be started. -a and -g are used to specify which containers will be affected. By default only containers without a lxc.group set will be affected. -t TIMEOUT specifies the maximum amount of time to wait for the container to complete the shutdown or reboot. Options Request a reboot of the container. Request a clean shutdown. If a -t timeout greater than 0 is given and the container has not shut down within this period, it will be killed as with the -k kill option. Rather than requesting a clean shutdown of the container, explicitly kill all tasks in the container. Rather than performing the action, just print the container name and wait delays until starting the next container. Wait TIMEOUT seconds before hard-stopping the container. Comma separated list of groups to select (defaults to those without a lxc.group - the NULL group). This option may be specified multiple times and the arguments concatenated. The NULL or empty group may be specified as a leading comma, trailing comma, embedded double comma, or empty argument where the NULL group should be processed. Groups are processed in the order specified on the command line. Multiple invocations of the -g option may be freely intermixed with the comma separated lists and will be combined in specified order. Ignore lxc.group and select all auto-started containers. Ignore the lxc.start.auto flag. Combined with -a, will select all containers on the system. Autostart and System Boot The lxc-autostart command is used as part of the LXC system service, when enabled to run on host system at bootup and at shutdown. It's used to select which containers to start in what order and how much to delay between each startup when the host system boots. Each container can be part of any number of groups or no group at all. Two groups are special. One is the NULL group, i.e. the container does not belong to any group. The other group is the "onboot" group. When the system boots with the LXC service enabled, it will first attempt to boot any containers with lxc.start.auto == 1 that is a member of the "onboot" group. The startup will be in order of lxc.start.order. If an lxc.start.delay has been specified, that delay will be honored before attempting to start the next container to give the current container time to begin initialization and reduce overloading the host system. After starting the members of the "onboot" group, the LXC system will proceed to boot containers with lxc.start.auto == 1 which are not members of any group (the NULL group) and proceed as with the onboot group. Startup Group Examples Start the "onboot" group first then the NULL group. This is the equivalent of: . Starts the "dns" group first, the "web" group second, then the NULL group followed by the "onboot" group. This is the equivalent of: or . &seealso; Author Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/lxc-start.sgml.in0000644061062106075000000001720313256572152013223 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-start 1 lxc-start run an application inside a container. lxc-start -n name -f config_file -c console_device -L console_logfile -d -F -p pid_file -s KEY=VAL -C --share-[net|ipc|uts] name|pid command Description lxc-start runs the specified command inside the container specified by name. It will setup the container according to the configuration previously defined with the lxc-create command or with the configuration file parameter. If no configuration is defined, the default isolation is used. If no command is specified, lxc-start will use the command defined in lxc.init.cmd or if not set, the default "/sbin/init" command to run a system container. Options Run the container as a daemon. As the container has no more tty, if an error occurs nothing will be displayed, the log file can be used to check the error. (This is the default mode) Run the container in the foreground. In this mode, the container console will be attached to the current tty and signals will be routed directly to the container. Create a file with the process id. Specify the configuration file to configure the virtualization and isolation functionalities for the container. This configuration file if present will be used even if there is already a configuration file present in the previously created container (via lxc-create). Specify a device to use for the container's console, for example /dev/tty8. If this option is not specified the current terminal will be used unless is specified. Specify a file to log the container's console output to. Assign value VAL to configuration variable KEY. This overrides any assignment done in config_file. If any file descriptors are inherited, close them. If this option is not specified, then lxc-start will exit with failure instead. Note: --daemon implies --close-all-fds. Inherit a network namespace from a name container or a pid. The network namespace will continue to be managed by the original owner. The network configuration of the starting container is ignored and the up/down scripts won't be executed. Inherit an IPC namespace from a name container or a pid. Inherit a UTS namespace from a name container or a pid. The starting LXC will not set the hostname, but the container OS may do it anyway. &commonoptions; Diagnostic The container is busy The specified container is already running an application. You should stop it before reuse this container or create a new one. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-execute.sgml.in0000644061062106075000000001230613256572152013527 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-execute 1 lxc-execute run an application inside a container. lxc-execute -n name -f config_file -s KEY=VAL -- command Description lxc-execute runs the specified command inside the container specified by name. It will setup the container according to the configuration previously defined with the lxc-create command or with the configuration file parameter. If no configuration is defined, the default isolation is used. This command is mainly used when you want to quickly launch an application in an isolated environment. lxc-execute command will run the specified command into the container via an intermediate process, lxc-init. This lxc-init after launching the specified command, will wait for its end and all other reparented processes. (to support daemons in the container). In other words, in the container, lxc-init has the pid 1 and the first process of the application has the pid 2. The above lxc-init is designed to forward received signals to the started command. Options Specify the configuration file to configure the virtualization and isolation functionalities for the container. This configuration file if present will be used even if there is already a configuration file present in the previously created container (via lxc-create). Assign value VAL to configuration variable KEY. This overrides any assignment done in config_file. Signal the end of options and disables further option processing. Any arguments after the -- are treated as arguments to command. This option is useful when you want specify options to command and don't want lxc-execute to interpret them. &commonoptions; Diagnostic The container is busy The specified container is already running an application. You should stop it before reuse this container or create a new one. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/0000755061062106075000000000000013256572302010474 500000000000000lxc-3.0.0/doc/ko/Makefile.am0000644061062106075000000000206413256572152012455 00000000000000mandir = @mandir@/ko SUBDIRS = DIST_SUBDIRS = EXTRA_DIST = \ FAQ.txt if ENABLE_DOCBOOK man_MANS = \ lxc-attach.1 \ lxc-autostart.1 \ lxc-cgroup.1 \ lxc-checkconfig.1 \ lxc-checkpoint.1 \ lxc-config.1 \ lxc-console.1 \ lxc-copy.1 \ lxc-create.1 \ lxc-destroy.1 \ lxc-device.1 \ lxc-execute.1 \ lxc-freeze.1 \ lxc-info.1 \ lxc-ls.1 \ lxc-monitor.1 \ lxc-snapshot.1 \ lxc-start.1 \ lxc-stop.1 \ lxc-top.1 \ lxc-unfreeze.1 \ lxc-unshare.1 \ lxc-user-nic.1 \ lxc-usernsexec.1 \ lxc-wait.1 \ \ lxc.conf.5 \ lxc.container.conf.5 \ lxc.system.conf.5 \ lxc-usernet.5 \ \ lxc.7 %.1 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.5 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true %.7 : %.sgml $(db2xman) --encoding=UTF-8 $< test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true lxc-%.sgml : common_options.sgml see_also.sgml clean-local: $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) endif lxc-3.0.0/doc/ko/lxc-freeze.sgml.in0000644061062106075000000000665613256572152013771 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-freeze 1 lxc-freeze 컨테이너의 모든 프로세스를 동결 lxc-freeze -n name <!-- Description -->설명 lxc-freeze는 컨테이너 내부에서 실행되는 모든 프로세스를 동결시킨다. 프로세스는 lxc-unfreeze 명령어를 이용하여 명시적으로 동결 해제시킬 때까지 블로킹 된다. 이 명령어는 프로세스 그룹들을 스케줄링하여 일괄처리하는 데 유용하다. &commonoptions; <!-- Diagnostic -->진단 The container was not found 지정한 컨테이너가 lxc-create로 생성된 적이 없다. 컨테이너가 존재하지 않는다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/see_also.sgml.in0000644061062106075000000000627113256572152013510 00000000000000 <!--See Also-->참조 lxc 7 , lxc-create 1 , lxc-copy 1 , lxc-destroy 1 , lxc-start 1 , lxc-stop 1 , lxc-execute 1 , lxc-console 1 , lxc-monitor 1 , lxc-wait 1 , lxc-cgroup 1 , lxc-ls 1 , lxc-info 1 , lxc-freeze 1 , lxc-unfreeze 1 , lxc-attach 1 , lxc.conf 5 lxc-3.0.0/doc/ko/lxc-start.sgml.in0000644061062106075000000002732613256572152013643 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-start 1 lxc-start 컨테이너 시작(실행) lxc-start -n name -f config_file -c console_device -L console_logfile -d -F -p pid_file -s KEY=VAL -C --share-[net|ipc|uts] name|pid command <!-- Description -->설명 lxc-start는 지정된 commandname이라는 이름의 컨테이너 내에서 실행한다. (역주 : 컨테이너를 시작한다) 이 명령어는 lxc-create 정의했던 설정을 토대로 또는 인수를 통해 넘긴 설정파일을 토대로 컨테이너를 세팅한다. 만약 정의된 설정이 없다면, 기본 고립 환경을 사용한다. 만약 명령어가 지정되지 않았다면, lxc-start는 lxc.init.cmd에 정의된 명령어를 사용한다. 만약 그마저도 없다면 "/sbin/init"명령어를 사용한다. <!-- Options -->옵션 컨테이너를 데몬으로 실행한다. 에러가 발생하더라도 컨테이너가 tty를 가지지 않기 때문에 에러는 표시되지 않는다. 대신 로그 파일을 에러를 확인하는데 사용할 수 있다. 컨테이너를 포그라운드로 실행한다. 이 모드에서는 컨테이너의 콘솔은 현재 tty에 붙는다. 그리고 시그널들은 컨테이너로 직접 보내지게 된다. 프로세스 ID를 넣은 파일을 생성한다. (역주 : systemd의 PIDFile= 옵션 등에 유용하게 사용가능하다) 컨테이너의 가상화나 고립 기능을 설정할 때 쓰일 설정파일을 지정한다. 지정한 설정파일이 존재한다면, 이전에 생성된(lxc-create를 통해) 컨테 이너에 설정파일이 이미 존재한다고 하더라도 지정한 설정파일을 사용한다. 컨테이너의 콘솔로 사용할 디바이스를 지정한다. 예를 들어 /dev/tty8과 같이 지정가능하다. 만약 이 옵션이 지정되지 않았고 가 지정되이 않았다면, 현재 터미널이 사용된다. 컨테이너의 콘솔 출력을 기록할 파일을 지정한다. 지정한 설정 변수 KEYVAL값을 지정한다. 이 것은 이전에 config_file에서 지정했던 값들을 덮어쓴다. 상속 받는 파일 디스크립터가 있다면, 전부 닫는다. 만약 이 옵션이 지정되지 않았을 경우 lxc-start는 실패와 함께 종료된다. 주의 : --daemon--close-all-fds를 포함하고 있다. name 컨테이너 또는 pid로부터 네트워크 네임스페이스를 상속받는다. 네트워크 네임스페이스는 원래 소유자가 계속 관리하게 된다. 시작하는 컨테이너의 네트워크 설정은 무시되고 up/down 스크립트는 실행되지 않는다. name 컨테이너 또는 pid로부터 IPC 네임스페이스를 상속받는다. name 컨테이너 또는 pid로부터 UTS 네임스페이스를 상속받는다. LXC는 시작할 때 호스트이름을 설정하지 않는다. 다만, 컨테이너 OS가 설정할 수 있다. &commonoptions; <!-- Diagnostic -->진단 The container is busy 지정한 컨테이너가 이미 실행중인 경우이다. 컨테이너를 사용하고 싶다면 컨테이너를 중지시켜야 한다. 또는 새로운 컨테이너를 만들 수도 있다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-destroy.sgml.in0000644061062106075000000001045113256572152014166 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-destroy 1 lxc-destroy 컨테이너 제거 lxc-destroy -n name -f -s <!--Description-->설명 lxc-destroylxc-create로 이전에 생성했던 시스템 객체를 제거한다. <!-- Options -->옵션 만약 컨테이너가 실행중이라면, 컨테이너를 종료시킨다. 이 옵션이 지정되지 않았을 때 컨테이너가 실행중이라면, lxc-destroy는 중지될 것이다. 해당 컨테이너의 모든 스냅샷까지 제거한다. &commonoptions; <!-- Diagnostic -->진단 The container was not found 제거하려는 컨테이너를 찾을 수 없는 경우이다. 아마도 존재하지 않았거나 이미 제거되었을 경우일 것이다. lxc-ls 명령어를 사용하여 시스템에 존재하는 컨테이너를 확인해볼 수 있다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/common_options.sgml.in0000644061062106075000000001313213256572152014753 00000000000000 <!-- Common Options -->공통 옵션 이 옵션들은 대부분의 lxc 명령어들에서 공통으로 쓰인다. 사용법을 기존 출력하는 것보다 길게 출력한다. 사용법을 표시한다. 결과를 표시하지 않는다. 컨테이너 경로를 직접 지정한다. 기본값은 @LXCPATH@이다. 로그의 경로를 FILE로 지정한다. 기본값은 로그를 출력하지 않는 것이다. 로그 수준을 LEVEL로 지정한다. 기본값은 ERROR이다. 사용 가능한 값 : FATAL, CRIT, WARN, ERROR, NOTICE, INFO, DEBUG. 이 옵션은 로그 파일에만 적용된다는 사실을 주의해야 한다. stderr로 출력되는 ERROR 로그에는 영향을 끼치지 않는다. 컨테이너 식별자로 NAME을 사용한다. 컨테이너 식별자의 형식은 알파벳-숫자 문자열이다. 컨테이너의 가상화 및 고립 기능들을 설정할 파일을 지정한다. 이전에 만들어졌던 컨테이너에 설정 파일이 이미 있더라도, 이 옵션이 지정되어 있다면 해당 파일을 사용한다. 버전 정보를 표시한다. lxc-3.0.0/doc/ko/lxc-attach.sgml.in0000644061062106075000000006575313256572152013760 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-attach 1 lxc-attach 실행 중인 컨테이너 내에 프로세스를 실행 lxc-attach -n, --name name -f, --rcfile config_file -a, --arch arch -e, --elevated-privileges privileges -s, --namespaces namespaces -R, --remount-sys-proc --keep-env --clear-env -L, --pty-log file -v, --set-var variable --keep-var variable -- command <!-- Description -->설명 lxc-attachname으로 지정한 컨테이너 내에 command를 실행한다. 해당 컨테이너는 실행중이어야 한다. 만약 command가 지정되지 않았다면, lxc-attach가 현재 실행 중인 쉘이 컨테이너 안에도 있는지 검사하고 이를 실행한다. 만약 컨테이너 안에 사용자가 존재하지 않거나, nsswitch가 제대로 동작하지 않는 경우에는 이 명령이 실패하게 된다. 이전 버전의 lxc-attach는 단순히 컨테이너의 특정 네임스페이스 내에서 쉘이나 명령어를 pseudo 터미널 할당 없이 실행하였다. 이는 다른 특권 수준을 갖는 사용자 영역 컨텍스트 간의 전환후 TIOCSTI ioctl를 호출하여 입력을 가로챌 수 있는 취약점이 있다. 새로운 버전의 lxc-attach는 쉘이나 명령어를 실행하기 전, 호스트에서 pseudo 터미널 마스터/슬레이브 쌍을 할당하고, 터미널을 가리키고 있던 표준 입출력 파일 디스크립터들을 pseudo 터미널의 슬레이브로 연결한다. 터미널을 가리키고 있던 표준 입출력 파일 디스크립터가 아예 없었다면, lxc-attach는 pseudo 터미널 할당을 시도하지 않음에 주의해야 한다. 단순히 컨테이너 네임스페이스 내부에서 쉘이나 지정한 명령어를 실행할 뿐이다. <!-- Options -->옵션 컨테이너의 가상화 및 고립 기능들을 설정할 파일을 지정한다. 이전에 만들어졌던 컨테이너에 설정 파일이 이미 있더라도, 이 옵션이 지정되어 있다면 해당 파일을 사용한다. 명령어를 실행하는 컨테이너의 아키텍처를 지정한다. 이 옵션은 컨테이너의 설정파일에서 지정한 옵션과 같은 것만 사용할 수 있다. lxc.conf 5 를 참조 바란다. 기본값은 실행 중인 컨테이너의 아키텍처이다. 컨테이너 내부에서 command를 실행할 때 privilege를 제거하지 않는다. 만약 이 옵션이 지정되었다면, 새로운 프로세스는 컨테이너의 cgroup에 추가되지 않는다. 그리고 실행 전 capability도 제거하지 않는다. 만약 모든 privilege를 얻고 싶지 않을 경우에는 CGROUP|LSM와 같이 파이프(|)로 구분된 리스트를 사용할 수 있다. 허용되는 값은 CGROUPCAPLSM이다. 각각 cgroup, capability, MAC label을 나타낸다. (파이프 기호는 CGROUP\|LSM처럼 \로 처리를 해주거나, "CGROUP|LSM"처럼 따옴표를 붙여야 한다.) 경고 : 만약 명령어가 attach된 메인프로세스가 종료된 후에, 실행 상태로 남아있는 서브프로세스를 시작하려고 한다면, 컨테이너 내부로 privilege 누수가 발생할 수 있다. 컨테이너 내에서 데몬을 시작(또는 재시작)하는 것은 문제가 될 수 있다. 특히 만약 데몬이 많은 서브프로세스 를 실행하는 경우라면, 예를 들어 cronsshd와 같은 경우는 문제가 될 수 있다. 충분한 주의를 기울여서 사용하여야 한다. 컨테이너의 어떤 네임스페이스와 연결할지 지정한다. NETWORK|IPC와 같이 파이프(|)로 구분된 리스트를 사용할 수 있다. 허용되는 값은 MOUNT, PID, UTSNAME, IPC, USER , NETWORK이다. 이를 사용하여, 컨테이너의 네트워크 네임스페이스를 사용하면서도 다른 네임스페이스는 호스트의 것을 그대로 사용하는 등의 조작이 가능하다. (파이프 기호는 MOUNT\|PID처럼 \로 처리를 해주거나, "MOUNT|PID"처럼 따옴표를 붙여야 한다.) 중요 : 이 옵션은 옵션을 포함하고 있다. 를 사용하여 마운트 네임스페이스를 포함하지 않았을 때, 이 플래그는 lxc-attach/proc/sys를 remount 하게 만든다. 이는 현재와 다른 네임스페이스 컨텍스트를 반영시키기 위함이다. 좀더 자세한 설명은 주의섹션을 참고하면 된다. 만약 마운트 네임스페이스에 연결하려고 한다면, 이 옵션은 무시된다. 현재의 환경변수를 실행할 프로그램에도 그대로 적용한다. 이것은 현재 기본 동작이지만 (버전 0.9에서), 향후에 충분히 바뀔 수도 있다. 왜냐하면, 이것은 컨테이너에게 바람직하지 않은 정보를 넘겨줄 수 있는 위험성이 있기 때문이다. 따라서 이 기능에 의존하고 있다면, 향후에도 이를 보장할 수 있도록 이 옵션을 사용하는 것이 좋다. 또한 현재 환경 변수와 더불어, container=lxc도 설정된다. 프로그램을 실행하기 전에 모든 환경변수를 지운다. 이를 통해 바람직하지 않은 환경변수 누출을 막을 수 있다. container=lxc 만이 프로그램이 실행되기 전에 설정되는 유일한 환경변수이다. lxc-attach의 출력을 기록할 파일을 지정한다. 중요: 표준 입출력 파일 디스크립터가 pty를 참조하지 않으면, 기록되지 않는다. 컨테이너 내에서 실행되는 프로그램이 볼 수 있는 환경변수를 추가한다. 이는 "VAR=VALUE" 형태로 지정되며, 여러 번 지정할 수 있다. \-\-clear-env와 함께 사용되며, 지정한 환경변수를 지우지 않고 그대로 유지한다. 여러 번 지정할 수 있다. &commonoptions; <!-- Examples -->예제 존재하는 컨테이너의 내부에 새로운 쉘을 실행한다. lxc-attach -n container 실행중인 Debian 컨테이너의 cron 서비스를 재시작한다. lxc-attach -n container -- /etc/init.d/cron restart NET_ADMIN capability없이 실행중인 컨테이너의 네트워크 링크 eth1을 비활성화하였다. 옵션을 사용하여 capability를 높였고, ip 툴이 설치되어있다고 가정하였다. lxc-attach -n container -e -- /sbin/ip link delete eth1 <!-- Compatibility -->호환성 (pid와 마운트 네임스페이스를 포함한) attach가 동작하기 위해서는 커널의 버전이 3.8 이상이거나 패치가 적용된 커널이어야 한다. 좀더 자세히 보려면 lxc 웹사이트를 참고하면 된다. lxc-attach는 패치되지 않은 커널 버전 3.7 이하면 실패된다. 그러나 를 사용하여 NETWORK, IPC, UTSNAME 네임스페이스 들만 지정한다면, 패치되지 않은 커널 3.0 이상에서도 성공적으로 동작한다. 사용자 네임스페이스와 연결되기 위해서는 커널 버전이 3.8 이상이어야 하고 사용자 네임스페이스가 활성화되어야 한다. <!-- Notes -->주의 리눅스의 /proc/sys 파일시스템은 네임스페이스의해 영향받는 몇가지 정보들을 포함하고 있다. 예를 들어 /proc의 프로세스 id로 된 폴더들이나 /sys/class/net의 네트워크 인터페이스 정보 등이다. pseudo 파일시스템을 마운트하는 프로세스의 네임스페이스가 여기에 어떤 정보를 표시할지 결정하는 것이지, /proc 또는 /sys에 접근하는 프로세스의 네임스페이스가 결정하는 것은 아니다. 를 사용하여 컨테이너의 pid 네임스페이스에만 attach 시키고 마운트 네임스페이스(컨테이너의 /proc는 포함하고, 호스트의 것은 포함하지 않는)는 attach 시키지 않는 경우, 의 내용은 컨테이너의 것이 아닌 호스트의 것이 된다. 네트워크 네임스페이스만을 연결하고 /sys/class/net의 내용을 읽을 때도 같은 현상이 있다. 이러한 문제를 해결하기 위해, 옵션이 제공된다. 해당 옵션은 attach되는 프로세스의 네트워크/pid 네임스페이스를 반영하기 위해 /proc/sys를 다시 마운트한다. 호스트의 실제 파일시스템에 방해가 되지 않기 위해 마운트 네임스페이스는 공유되지 않는다(lxc-unshare의 동작과 비슷). /proc/sys 파일시스템을 제외하고 호스트 마운트 네임스페이스와 동일한 새로운 마운트 네임스페이스가 주어지게 된다. 이전 버전의 lxc-attach는 몇몇 중요한 서브시스템에 쓰기가 가능한 cgroup 내에 없더라도, 사용자가 컨테이너의 네임스페이스에 연결할 수 있는 버그가 있었다. 새로운 버전의 lxc-attach는 현재 사용자가 몇몇 중요한 서브시스템에 쓰기 권한이 있는 cgroup에 속하는지 여부를 검사한다. 그러므로 lxc-attach는 사용자에 따라 실패하는 경우도 있다. (예를 들어, 로그인 시 비특권 사용자가 중요 서브시스템에 쓰기가 가능한 cgroup에 위치하지 않은 경우) 하지만 이러한 동작은 정확한 것이고 더 안전한 것이다. <!-- Security -->보안 옵션을 사용할때는 주의해야 한다. 잘못 사용하게 하면 컨테이너들 간의 고립(isolation)을 깨트릴 수 있다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-checkpoint.sgml.in0000644061062106075000000001507413256572152014632 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-checkpoint 1 lxc-checkpoint 컨테이너의 체크포인트 생성 및 복원 lxc-checkpoint -n name -D PATH -r -s -v -d -F <!-- Description -->설명 lxc-checkpoint 는 컨테이너의 체크포인트를 생성 및 복원을 수행한다. (역주 : 이 명령어를 사용하기 위해서는 CRIU(Checkpoint/Restore In Userspace)라는 툴이 반드시 필요하다, 컨테이너의 실행상태를 대상으로 한다는 점에서 lxc-snapshot와는 다르다) <!-- Options -->옵션 컨테이너의 상태를 저장하는 것 대신에 체크포인트로 복원을 수행한다. 이 옵션은 과 같이 사용될 수 없다. 체크포인트 메타데이터를 저장할 디렉토리를 지정한다. 컨테이너의 상태를 저장한 후 컨테이너를 중지한다. 이 옵션은 과 같이 사용될 수 없다. CRIU 로그 기록을 자세하게 한다. 컨테이너 복원을 백그라운드에서 수행한다. (이것이 기본으로 되어있다) 옵션이랑만 사용가능하다. 컨테이너 복원을 포그라운드에서 수행한다. 옵션이랑만 사용가능하다. &commonoptions; <!-- Examples -->예제 lxc-checkpoint -n foo -D /tmp/checkpoint foo 컨테이너의 체크포인트를 /tmp/checkpoint 디렉토리에 생성한다. lxc-checkpoint -r -n foo -D /tmp/checkpoint foo 컨테이너를 /tmp/checkpoint 디렉토리에 있는 체크포인트로 복원한다. &seealso; <!-- Author -->저자 Tycho Andersen tycho.andersen@canonical.com lxc-3.0.0/doc/ko/lxc-create.sgml.in0000644061062106075000000003171113256572152013742 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-create 1 lxc-create 컨테이너 생성 lxc-create -n name -f config_file -t template -B backingstore -- template-options <!-- Description -->설명 lxc-create는 설정정보와 사용자 정보가 저장되는 시스템 객체를 생성한다. name은 다른 lxc 명령어들에서 특정 컨테이너를 지정하는데 사용된다. 객체는 @LXCPATH@에 작성되는 디렉토리이며, 자신의 name으로 구분되어 진다. 객체는 응용 프로그램이 사용할 수 있고 볼 수 있는 여러 자원들의 정의이다. 설정파일이 많은 정보를 담고 있을수록 컨테이너는 더욱더 고립될 수 있고, 응용 프로그램은 더욱더 격리될 수 있다. 만약 설정파일 config_file가 지정되지 않았다면, 컨테이너는 프로세스, sysv ipc, 마운트 포인트에 대한 기본적인 고립 상태로 만들어진다. <!-- Options -->옵션 컨테이너 가상화 및 고립 기능을 설정하는 설정파일을 지정한다. lxc-create 명령어는 'lxc-template' 스크립트를 호출한다. template은 'lxc-template' 스크립트의 짧은 이름으로, busybox, debian, fedora, ubuntu, sshd 등이 있다. 스크립트의 구조에 대해 궁금할 때는 @LXCTEMPLATEDIR@에 있는 예제들을 참고하면 된다. template 대신 스크립트의 전체 경로를 지정할 수도 있다. "none"으로 지정하면 루트파일시스템 생성을 강제로 건너뛸 수 있다. 'backingstore'는 'dir', 'lvm', 'loop', 'btrfs', 'zfs', 'rbd', 'best'를 지정할 수 있다. 기본 값은 'dir'로 컨테이너 루트 파일시스템을 의미하며 @LXCPATH@/container/rootfs이하 디렉토리를 가리킨다. 'dir'은 옵션으로 컨테이너 루트 파일시스템이 어느 경로에 위치할지 지정할 수 있으며, --dir ROOTFS로 가능하다. ('none'은 'dir'과 동일하다) 'btrfs'가 지정되어 있다면, 타겍 파일시스템은 반드시 btrfs여야 한다. 그리고 컨테이너 루트 파일시스템은 새로운 서브볼륨으로 생성된다. 이는 스냅샷된 복제물을 만들지만, rsync --one-filesystem는 분리된 파일시스템으로 취급하게 된다. 'lvm'으로 지정되있다면, lvm 블록 디바이스가 사용되며, 이때 사용가능한 옵션은 다음과 같다 : --lvname lvname1는 이름이 lvname1인 LV를 만든다(기본값은 컨테이너 이름). --vgname vgname1는 이름이 vgname1인 볼륨그룹 안에 LV를 만든다(기본값은 lxc). --thinpool thinpool1thinpool1라는 풀 안에 있는 thin-provisioned 볼륨으로 LV를 만든다(기본값은 lxc). --fstype FSTYPE는 LV의 파일시스템을 FSTYPE으로 지정한다(기본값은 ext4). --fssize SIZE는 LV의 크기를 지정한다(기본값은 1G). 'loop'로 지정되어 있다면, 'lvm'과 비슷하게 --fstype FSTYPE--fssize SIZE를 사용할 수 있다(기본값은 'lvm'과 동일). 'rbd'로 지정되어 있다면, ceph.conf내 적절하게 설정사항이 있어야 하고 ceph.client.admin.keyring가 정의되어 있어야 한다. 아래 옵션을 지정할 수 있다 : --rbdname RBDNAME는 생성하는 블록 장치의 이름을 RBDNAME로 지정한다(기본값은 컨테이너의 이름). --rbdpool POOL는 블록 장치를 넣을 풀을 POOL로 지정한다(기본값은 'lxc'). 'best'로 지정되어 있다면, lxc는 btrfs, zfs, lvm, dir의 순서대로 시도해본다. 이것은 template-options를 템플릿에게 인수로 넘긴다. 만약 어떤 인수를 템플릿에서 지원하는지 보고 싶다면, lxc-create -t TEMPLATE -h를 사용하면 된다. &commonoptions; <!-- Diagnostic -->진단 The container already exists 메시지에 나와있는 대로, 이미 같은 이름의 컨테이너가 존재하는 경우이다. lxc-ls 명령어를 사용하여 시스템에 이미 존재하는 컨테이너를 확인해볼 수 있다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/Makefile.in0000644061062106075000000010365613256572256012504 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/ko ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \ $(top_srcdir)/config/ax_pthread.m4 \ $(top_srcdir)/config/libtool.m4 \ $(top_srcdir)/config/ltoptions.m4 \ $(top_srcdir)/config/ltsugar.m4 \ $(top_srcdir)/config/ltversion.m4 \ $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/tls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = lxc-attach.sgml lxc-autostart.sgml \ lxc-cgroup.sgml lxc-checkconfig.sgml lxc-checkpoint.sgml \ lxc-config.sgml lxc-console.sgml lxc-copy.sgml lxc-create.sgml \ lxc-destroy.sgml lxc-device.sgml lxc-execute.sgml \ lxc-freeze.sgml lxc-info.sgml lxc-ls.sgml lxc-monitor.sgml \ lxc-snapshot.sgml lxc-start.sgml lxc-stop.sgml lxc-top.sgml \ lxc-unfreeze.sgml lxc-unshare.sgml lxc-user-nic.sgml \ lxc-usernsexec.sgml lxc-wait.sgml lxc.conf.sgml \ lxc.container.conf.sgml lxc.system.conf.sgml lxc-usernet.sgml \ lxc.sgml common_options.sgml see_also.sgml CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man7dir)" man5dir = $(mandir)/man5 man7dir = $(mandir)/man7 NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(srcdir)/common_options.sgml.in $(srcdir)/lxc-attach.sgml.in \ $(srcdir)/lxc-autostart.sgml.in $(srcdir)/lxc-cgroup.sgml.in \ $(srcdir)/lxc-checkconfig.sgml.in \ $(srcdir)/lxc-checkpoint.sgml.in $(srcdir)/lxc-config.sgml.in \ $(srcdir)/lxc-console.sgml.in $(srcdir)/lxc-copy.sgml.in \ $(srcdir)/lxc-create.sgml.in $(srcdir)/lxc-destroy.sgml.in \ $(srcdir)/lxc-device.sgml.in $(srcdir)/lxc-execute.sgml.in \ $(srcdir)/lxc-freeze.sgml.in $(srcdir)/lxc-info.sgml.in \ $(srcdir)/lxc-ls.sgml.in $(srcdir)/lxc-monitor.sgml.in \ $(srcdir)/lxc-snapshot.sgml.in $(srcdir)/lxc-start.sgml.in \ $(srcdir)/lxc-stop.sgml.in $(srcdir)/lxc-top.sgml.in \ $(srcdir)/lxc-unfreeze.sgml.in $(srcdir)/lxc-unshare.sgml.in \ $(srcdir)/lxc-user-nic.sgml.in $(srcdir)/lxc-usernet.sgml.in \ $(srcdir)/lxc-usernsexec.sgml.in $(srcdir)/lxc-wait.sgml.in \ $(srcdir)/lxc.conf.sgml.in \ $(srcdir)/lxc.container.conf.sgml.in $(srcdir)/lxc.sgml.in \ $(srcdir)/lxc.system.conf.sgml.in $(srcdir)/see_also.sgml.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINDIR = @BINDIR@ CAP_LIBS = @CAP_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIR = @DATADIR@ DEFAULT_CGROUP_PATTERN = @DEFAULT_CGROUP_PATTERN@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCDIR = @DOCDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GNUTLS_LIBS = @GNUTLS_LIBS@ GREP = @GREP@ HAVE_DOXYGEN = @HAVE_DOXYGEN@ INCLUDEDIR = @INCLUDEDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDIR = @LIBDIR@ LIBEXECDIR = @LIBEXECDIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALSTATEDIR = @LOCALSTATEDIR@ LOGPATH = @LOGPATH@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ LXCBINHOOKDIR = @LXCBINHOOKDIR@ LXCHOOKDIR = @LXCHOOKDIR@ LXCINITDIR = @LXCINITDIR@ LXCPATH = @LXCPATH@ LXCROOTFSMOUNT = @LXCROOTFSMOUNT@ LXCTEMPLATECONFIG = @LXCTEMPLATECONFIG@ LXCTEMPLATEDIR = @LXCTEMPLATEDIR@ LXC_ABI = @LXC_ABI@ LXC_ABI_MAJOR = @LXC_ABI_MAJOR@ LXC_ABI_MICRO = @LXC_ABI_MICRO@ LXC_ABI_MINOR = @LXC_ABI_MINOR@ LXC_DEFAULT_CONFIG = @LXC_DEFAULT_CONFIG@ LXC_DEVEL = @LXC_DEVEL@ LXC_DISTRO_SYSCONF = @LXC_DISTRO_SYSCONF@ LXC_GENERATE_DATE = @LXC_GENERATE_DATE@ LXC_GLOBAL_CONF = @LXC_GLOBAL_CONF@ LXC_USERNIC_CONF = @LXC_USERNIC_CONF@ LXC_USERNIC_DB = @LXC_USERNIC_DB@ LXC_VERSION = @LXC_VERSION@ LXC_VERSION_BASE = @LXC_VERSION_BASE@ LXC_VERSION_BETA = @LXC_VERSION_BETA@ LXC_VERSION_MAJOR = @LXC_VERSION_MAJOR@ LXC_VERSION_MICRO = @LXC_VERSION_MICRO@ LXC_VERSION_MINOR = @LXC_VERSION_MINOR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PREFIX = @PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ RUNTIME_PATH = @RUNTIME_PATH@ SBINDIR = @SBINDIR@ SECCOMP_CFLAGS = @SECCOMP_CFLAGS@ SECCOMP_LIBS = @SECCOMP_LIBS@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SYSCONFDIR = @SYSCONFDIR@ SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bashcompdir = @bashcompdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ db2xman = @db2xman@ docdir = @docdir@ docdtd = @docdtd@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@/ko mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pamdir = @pamdir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = DIST_SUBDIRS = EXTRA_DIST = \ FAQ.txt @ENABLE_DOCBOOK_TRUE@man_MANS = \ @ENABLE_DOCBOOK_TRUE@ lxc-attach.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-autostart.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-cgroup.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-checkconfig.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-checkpoint.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-config.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-console.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-copy.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-create.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-destroy.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-device.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-execute.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-freeze.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-info.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-ls.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-monitor.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-snapshot.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-start.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-stop.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-top.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-unfreeze.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-unshare.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-user-nic.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-usernsexec.1 \ @ENABLE_DOCBOOK_TRUE@ lxc-wait.1 \ @ENABLE_DOCBOOK_TRUE@ \ @ENABLE_DOCBOOK_TRUE@ lxc.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc.container.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc.system.conf.5 \ @ENABLE_DOCBOOK_TRUE@ lxc-usernet.5 \ @ENABLE_DOCBOOK_TRUE@ \ @ENABLE_DOCBOOK_TRUE@ lxc.7 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/ko/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/ko/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lxc-attach.sgml: $(top_builddir)/config.status $(srcdir)/lxc-attach.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-autostart.sgml: $(top_builddir)/config.status $(srcdir)/lxc-autostart.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-cgroup.sgml: $(top_builddir)/config.status $(srcdir)/lxc-cgroup.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkconfig.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkconfig.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-checkpoint.sgml: $(top_builddir)/config.status $(srcdir)/lxc-checkpoint.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-config.sgml: $(top_builddir)/config.status $(srcdir)/lxc-config.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-console.sgml: $(top_builddir)/config.status $(srcdir)/lxc-console.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-copy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-copy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-create.sgml: $(top_builddir)/config.status $(srcdir)/lxc-create.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-destroy.sgml: $(top_builddir)/config.status $(srcdir)/lxc-destroy.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-device.sgml: $(top_builddir)/config.status $(srcdir)/lxc-device.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-execute.sgml: $(top_builddir)/config.status $(srcdir)/lxc-execute.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-freeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-freeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-info.sgml: $(top_builddir)/config.status $(srcdir)/lxc-info.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-ls.sgml: $(top_builddir)/config.status $(srcdir)/lxc-ls.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-monitor.sgml: $(top_builddir)/config.status $(srcdir)/lxc-monitor.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-snapshot.sgml: $(top_builddir)/config.status $(srcdir)/lxc-snapshot.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-start.sgml: $(top_builddir)/config.status $(srcdir)/lxc-start.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-stop.sgml: $(top_builddir)/config.status $(srcdir)/lxc-stop.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-top.sgml: $(top_builddir)/config.status $(srcdir)/lxc-top.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unfreeze.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unfreeze.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-unshare.sgml: $(top_builddir)/config.status $(srcdir)/lxc-unshare.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-user-nic.sgml: $(top_builddir)/config.status $(srcdir)/lxc-user-nic.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernsexec.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernsexec.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-wait.sgml: $(top_builddir)/config.status $(srcdir)/lxc-wait.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.container.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.container.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.system.conf.sgml: $(top_builddir)/config.status $(srcdir)/lxc.system.conf.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc-usernet.sgml: $(top_builddir)/config.status $(srcdir)/lxc-usernet.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ lxc.sgml: $(top_builddir)/config.status $(srcdir)/lxc.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ common_options.sgml: $(top_builddir)/config.status $(srcdir)/common_options.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ see_also.sgml: $(top_builddir)/config.status $(srcdir)/see_also.sgml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man7dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.7[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_DOCBOOK_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man5 install-man7 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 uninstall-man5 uninstall-man7 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-man5 \ install-man7 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \ uninstall-man7 .PRECIOUS: Makefile @ENABLE_DOCBOOK_TRUE@%.1 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.5 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@%.7 : %.sgml @ENABLE_DOCBOOK_TRUE@ $(db2xman) --encoding=UTF-8 $< @ENABLE_DOCBOOK_TRUE@ test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true @ENABLE_DOCBOOK_TRUE@lxc-%.sgml : common_options.sgml see_also.sgml @ENABLE_DOCBOOK_TRUE@clean-local: @ENABLE_DOCBOOK_TRUE@ $(RM) manpage.* *.7 *.5 *.1 $(man_MANS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lxc-3.0.0/doc/ko/lxc-device.sgml.in0000644061062106075000000001227313256572152013740 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-device 1 lxc-device 실행 중인 컨테이너의 디바이스 관리 lxc-device -h -n name add DEVICE NAME <!-- Description -->설명 lxc-device는 실행중인 컨테이너의 디바이스를 관리한다. <!-- Options -->옵션 명령어의 전체 도움말을 표시한다. 대상으로 하는 컨테이너의 이름. 수행할 동작. 현재는 'add'만 지원된다. 컨테이너에 추가할 디바이스. 장치의 경로를 /dev 밑으로 지정하거나 네트워크 인터페이스 이름이 지정 가능하다. 컨테이너 내부에서 쓰일 디바이스의 이름 <!-- Examples -->예제 lxc-device -n p1 add /dev/video0 컨테이너 p1 내부에 호스트의 것과 같은 /dev/video0 장치를 생성한다. lxc-device -n p1 add eth0 eth1 호스트의 eth0를 컨테이너 p1에 eth1의 이름으로 옮긴다. &seealso; <!-- Author -->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-user-nic.sgml.in0000644061062106075000000001436613256572152014233 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-user-nic 1 lxc-user-nic NIC 를 생성하여 다른 네임스페이스에 붙이기 lxc-user-nic pid type bridge nicname <!-- Description -->설명 lxc-user-nic는 root로 setuid한 프로그램이므로, 특권이 없는 사용자들도 lxc 컨테이너가 사용할 네트워크 인터페이스를 생성할 수 있다. 이 명령어는 @LXC_USERNIC_CONF@을 읽어, 호출한 사용자가 만들수 있는 인터페이스의 수와 어느 브리지에 붙일지 결정한다. 각 사용자가 생성한 인터페이스의 수를 @LXC_USERNIC_DB@ 파일에 기록한다. 그리고 호출한 사용자가 인터페이스를 붙인 네트워크 네임스페이스에 특권을 갖게 한다. <!-- Options -->옵션 인터페이스가 붙어야하는 네트워크 네임스페이스에 속해있는 프로세스 ID. 붙일 네트워크 인터페이스의 형태. 현재는 veth만 지원가능하다. 이 형태에서는 두개의 인터페이스가 각각 터널의 끝지점으로 생성된다. 하나의 끝지점이 특정 브리지에 붙고, 다른 하나는 컨테이너 내부로 넘겨지게 된다. 네트워크 인터페이스를 붙일 프리지. 예를 들어, lxcbr0 같이 지정 가능하다. 컨테이너내에서 사용할 인터페이스 이름. 지정하지 않는다면 eth0로 된다. <!-- See Also -->참조 lxc 1 , lxc-start 1 , lxc-usernet 5 <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-ls.sgml.in0000644061062106075000000002043013256572152013111 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-ls 1 lxc-ls 시스템 내에 존재하는 컨테이너들의 리스트 표시 lxc-ls -1 --active --frozen --running --stopped -f -F format -g groups --nesting=NUM --filter=regex <!-- Description -->설명 lxc-ls는 시스템 내에 존재하는 컨테이너들의 리스트를 표시한다. <!-- Options -->옵션 1개의 항목를 한 줄에 표시한다. (/dev/stdout이 tty가 아닌 경우 기본) 동작 중인 컨테이너들의 리스트를 표시한다. (--frozen --running과 동일) 동결된 컨테이너들의 리스트를 표시한다. 실행 중인 컨테이너들의 리스트를 표시한다. 종료되어 있는 컨테이너들의 리스트를 표시한다. 예쁘게, 컬럼 기반으로 출력해준다. --fancy로 출력할때 어떤 컬럼을 보여줄지 쉼표(,)로 구분된 리스트. 기본으로 표시되는 항목 및 선택할 수 있는 항목을 확인하려면 --help를 사용하면 된다. 표시하고자하는 컨테이너 그룹의 쉼표로 구분된 리스트. 이 인수는 여러번 사용될 수 있다. 중첩된(nested) 컨테이너들의 리스트를 표시한다. 몇번 중첩된(nested) 컨테이너를 보여줄지 숫자로 지정할 수 있다. lxc-ls 명령어 사용시 컨테이너 이름에 적용할 정규표현식이다. 형식은 POSIX 확장 정규표현식이다. 명시적으로 을 사용하지 않고도 사용할 수 있다. <!-- Examples -->예제 lxc-ls --fancy 모든 컨테이너를 표시한다. 1개의 행에 컨테이너의 이름, 상태, ipv4 및 ipv6 주소가 들어있다. lxc-ls --active -1 동작 중인 컨테이너들의 리스트를 1열로 표시한다. &commonoptions; &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-cgroup.sgml.in0000644061062106075000000001262613256572152014002 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-cgroup 1 lxc-cgroup 컨테이너와 관련된 컨트롤 그룹 관리 lxc-cgroup -n name state-object value <!-- Description -->설명 lxc-cgroup는 지정한 서브시스템(예를 들어 'cpuset')의 컨테이너 cgroup의 state-object (예를들어 'cpuset.cpus')의 값을 얻어오거나 설정한다. 만약 value가 지정되지 않았다면, state-object의 현재 값을 표시한다. 지정한 경우에는 해당 값으로 설정한다. lxc-cgroupstate-object가 실행중인 커널에서 사용가능한지 검사하지 않는 것을 주의해야 한다. 또한 지정한 서브시스템이 마운트된 cgroup에 포함이 되어 있는지도 검사하지 않는다. <!-- Options -->옵션 cgroup의 state object 이름을 지정한다. cgroup의 state object에 설정할 값을 지정한다. &commonoptions; <!-- Examples -->예제 lxc-cgroup -n foo devices.list 허용된 디바이스를 표시한다. lxc-cgroup -n foo cpuset.cpus "0,3" 프로세서 0과 3을 컨테이너에게 할당한다. <!-- Diagnostic -->진단 The container was not found 컨테이너가 실행중이 아니다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-usernsexec.sgml.in0000644061062106075000000001510713256572152014664 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernsexec 1 lxc-usernsexec 새로운 사용자 네임스페이스에서 root로 태스크를 실행 lxc-usernsexec -m uid-map -- command <!-- Description -->설명 lxc-usernsexec는 새로운 사용자 네임스페이스에서 루트로 태스크를 실행한다. <!-- Options -->옵션 사용자 네임스페이스에서 사용될 uid 맵. 각각의 맵은 4개의 콜론(:)으로 구분된 값들로 구성되어 있다. 첫 번째는 'u', 'g', 'b' 문자로 각각 UID, GID, 또는 UID 및 GID 를 가리킨다. 그 다음은 사용자 네임스페이스 내에서의 UID, 그다음은 호스트의 UID, 그리고 마지막으로 매핑할 ID의 수를 지정한다. 맵은 1개 이상도 지정가능하다. 만약 맵이 지정되지 않았다면, 기본값은 /etc/subuid와 /etc/subgid에서 허용된 모든 범위의 uid, gid가 컨테이너 내에서 0번부터 매핑된다. lxc-usernsexec는 언제나 0번 setuid와 setgid를 시도한 다는 것에 주의해야 한다. 그러므로 네임스페이스 내에서 uid 0은 매핑이 되어있어야 한다. <!-- Examples -->예제 할당된 모든 subuid를 컨테이너에 매핑해서 쉘을 실행하려면, lxc-usernsexec 를 사용하면 된다. /bin/sh대신 다른 쉘을 실행하려면, lxc-usernsexec -- /bin/bash 를 사용하면 된다. 만약 현재 UID가 1000이고, 컨테이너의 root가 190000으로 매핑되어 있으며, 현재 사용자가 소유하고 있는 파일을 컨테이너의 root가 소유하도록 하려면, 아래처럼 하면 된다. lxc-usernsexec -m b:0:1000:1 -m b:1:190000:1 -- /bin/chown 1:1 $file 이것은 현재 UID를 사용자 네임스페이스 내에서 root로 하고, 190000을 uid 1로 매핑한다. 사용자 네임스페이스의 root는 네임스페이스의 모든 UID에 권한이 있기 때문에, 호스트에서 chown을 사용할 수 없더라도 파일의 소유자를 변경할 수 있다. &seealso; <!-- Author -->저자 Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/ko/lxc-wait.sgml.in0000644061062106075000000001134313256572152013442 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-wait 1 lxc-wait 지정한 컨테이너 상태로 변할 때까지 대기 lxc-wait -n name -s states <!-- Description -->설명 lxc-wait는 컨테이너가 지정한 상태로 변할때 까지 대기한다. 이는 스크립트를 위해 유용하다. <!-- Options -->옵션 기다릴 컨테이너 상태를 지정한다. 컨테이너 상태들은 OR 기호를 사용하여 여러개를 지정 가능하다. 원하는 상태로 변할 때까지 대기할 최대시간을 timeout 초로 지정한다. &commonoptions; <!-- Examples -->예제 lxc-wait -n foo -s RUNNING foo 컨테이너의 상태가 'RUNNING'일 때까지 대기한다. lxc-wait -n foo -s 'RUNNING|STOPPED' foo 컨테이너의 상태가 'RUNNING' 또는 'STOPPED'으로 변할때까지 대기한다. <!-- Diagnostic -->진단 The container was not found 지정한 컨테이너가 lxc-create로 생성된 적이 없다. 컨테이너가 존재하지 않는다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-execute.sgml.in0000644061062106075000000002001413256572152014133 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-execute 1 lxc-execute 컨테이너 내부로 응용 프로그램 실행 lxc-execute -n name -f config_file -s KEY=VAL -- command <!-- Description -->설명 lxc-execute는 지정한 commandname라는 이름의 컨테이너 내부에서 실행한다. 이 명령어는 lxc-create 정의했던 설정을 토대로 또는 인수 를 통해 넘긴 설정파일을 토대로 컨테이너를 세팅한다. 만약 정의된 설정이 없다면, 기본 고립 환경을 사용한다. 이 명령어들은 고립된 환경에서 응용 프로그램을 빠르게 실행해보고 싶을 때, 주로 사용한다. lxc-execute명령어는 컨테이너 내부에서 lxc-init 프로세스를 통해 지정한 명령어를 실행한다. lxc-init은 지정한 명령어를 실행한 뒤에, 해당 명령어 및 그 명령어에서 실행된 모든 프로세스들을 기다린다(컨테이너 내에서 데몬을 지원하기 위한 것). 즉, 컨테이너내에서 lxc-init는 pid는 1이 되고, 그 다음으로 실행되는 응용 프로그램은 pid가 2가 된다. lxc-init는 시그널들을 받아서 시작한 명령어에게 보내주도록 되어 있다. <!-- Options -->옵션 컨테이너의 가상화나 고립 기능을 설정할 때 쓰일 설정파일을 지정한다. 지정한 설정파일이 존재한다면, 이전에 생성된(lxc-create를 통해) 컨테이너에 설정파일이 이미 존재한다고 하더라도 지정한 설정파일을 사용한다. VAL 값을 KEY 설정변수에 넣는다. 이는 config_file에서의 설정을 덮어쓴다. 옵션이 끝임을 지정하고 더이상 옵션에 대한 처리를 하지 않는다. -- 이후에 오는 모든 인수는 command의 인수로서 처리된다. 이것은 command에게 옵션을 지정하고, lxc-execute가 그 옵션을 처리하지 않게 하는데 유용하게 사용된다. &commonoptions; <!-- Diagnostic -->진단 The container is busy 지정한 컨테이너가 이미 실행중인 경우이다. 컨테이너를 사용하고 싶다면 컨테이너를 중지시켜야 한다. 또는 새로운 컨테이너를 만들 수도 있다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc.system.conf.sgml.in0000644061062106075000000001455213256572152014754 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.system.conf 5 lxc.system.conf LXC 시스템 설정파일 <!-- Description -->설명 시스템 설정은 @LXC_GLOBAL_CONF@에 위치하고 있다. 비 특권 컨테이너의 경우는 ~/.config/lxc/lxc.conf에 위치하고 있 다. 이 설정파일은 LXC 기본 경로 및 저장소 백엔드 설정과 같은 값들을 설정할 때 사용한다. <!-- Configuration paths -->경로 설정 모든 컨테이너들이 저장되는 장소. 컨테이너의 기본 설정파일 경로. <!-- Control Groups -->컨트롤 그룹 사용할 cgroup 컨트롤러의 쉼표(,)로 구분된 목록. 아무것도 지정하지 않았다면, 사용가능한 컨트롤러 전체를 사용될 것이다. 컨테이너용 cgroup을 생성할 때 사용하는 포맷 문자열 (예 : lxc/%n). LVM 기본 LVM 볼륨 그룹 이름 기본 LVM thin pool 이름 ZFS 기본 ZFS root 이름. lxc 1 , lxc.container.conf 5 , lxc.system.conf 5 , lxc-usernet 5 &seealso; <!-- Author -->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc.conf.sgml.in0000644061062106075000000001376113256572152013432 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.conf 5 lxc.conf LXC 설정파일 <!-- Description -->설명 LXC 설정파일은 컨테이너 설정과 시스템 설정의 2부분으로 나뉜다. <!-- Container configuration -->컨테이너 설정 컨테이너 설정은 컨테이너 디렉토리의 config로 설정한다. 기본 설정은 컨테이너 생성 시간에 템플릿이 제공해 주는 설정과 default.conf 파일에 있는 추가 설정들로 생성된다. default.conf 파일은 @LXC_DEFAULT_CONFIG@에 위치하고 있다. 비특권 컨테이너의 경우에는 ~/.config/lxc/default.conf에 위치하고 있다. 이 파일의 자세한 사용법은 아래를 참고하면 된다. lxc.container.conf 5 <!-- System configuration -->시스템 설정 시스템 설정은 @LXC_GLOBAL_CONF@에 위치하고 있다. 비특권 컨테이너의 경우는 ~/.config/lxc/lxc.conf에 위치하고 있다. 이 설정파일은 LXC 기본 경로 및 저장소 백엔드 설정과 같은 값들을 설정할 때 사용한다. 이 파일의 자세한 사용법은 아래를 참고하면 된다. lxc.system.conf 5 <!-- See Also -->참조 lxc 1 , lxc.container.conf 5 , lxc.system.conf 5 , lxc-usernet 5 <!-- Author -->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-unshare.sgml.in0000644061062106075000000002417013256572152014145 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unshare 1 lxc-unshare 새로운 네임스페이스 내에서 태스크 실행 lxc-unshare -s namespaces -u user -H hostname -i ifname -d -M command <!-- Description -->설명 lxc-unshare는 복제된 네임스페이스 내에서 태스크를 실행한다. 이 명령어는 주로 테스트 목적으로 사용된다. 이러한 이름에도 불구하고, 새 네임스페이스에 새로운 태스크를 생성하기 위해 unshare 대신 clone을 사용한다. 테스트 중인 커널 버전이 낮아지지 않는다면, 별 차이는 없다. <!-- Options -->옵션 붙일 네임스페이스를 지정한다. NETWORK|IPC와 같이 파이프(|)로 구분된 리스트를 사용할 수 있다. 허용되는 값은 MOUNT, PID, UTSNAME, IPC, USER , NETWORK이다. 이를 사용하여, 컨테이너의 네트워크 네임스페이스를 사용하면서도 다른 네임스페이스는 호스트의 것을 그대로 사용하는 등의 조작이 가능하다. (파이프 기호는 MOUNT\|PID처럼 \로 처리를 해주거나, "MOUNT|PID"처럼 따옴표를 붙여야 한다.) 새로운 태스크를 실행할 사용자를 지정한다. 새로운 컨테이너의 호스트이름을 지정한다. UTS 네임스페이스가 설정되었을 때만 가능하다. 지정한 이름의 네트워크 인터페이스를 컨테이너 내부로 옮긴다. NETWORK 네임스페이스가 설정되었을 때만 가능하다. 여러개의 인터페이스를 옮기기 위해 여러번 이 인수를 지정하는 것도 가능하다. 데몬화 한다. (컨테이너가 종료되기 전까지 기다리지 않는다) 컨테이너 내부에 (/proc /dev/shm and /dev/mqueue)같은 기본 파일 시스템들을 마운트 한다. MOUNT 네임스페이스가 설정되었을 때만 가능하다. <!-- Examples -->예제 자신만의 UTS(hostname) 네임스페이스를 갖는 새로운 쉘을 실행하려면 아래처럼 하면 된다. lxc-unshare -s UTSNAME /bin/bash 만약, 그 쉘에서 호스트이름이 변경되어도 호스트에는 영향을 끼치지 않는다. 새로운 네트워크, PID, 마운트 네임스페이스 내에 쉘을 실행하려면, 아래처럼 하면 된다. lxc-unshare -s "NETWORK|PID|MOUNT" /bin/bash 그 결과 생긴 쉘은 1번 pid를 갖는다. 그리고 네트워크 인터페이스는 없다. 이 쉘에서 아래처럼 /proc을 다시 마운트하고 mount -t proc proc /proc ps 명령어를 입력하면, 네임스페이스 내에서 다른 프로세스들은 보이지 않을 것이다. 새로운 네트워크, PID, 마운트 그리고 호스트 이름(UTS) 네임스페이스 내에 쉘을 실행하려면, 아래처럼 하면 된다. lxc-unshare -s "NETWORK|PID|MOUNT|UTSNAME" -M -H slave -i veth1 /bin/bash 그 결과 생긴 쉘은 1번 pid를 갖는다. 그리고 2개의 네트워크 인터페이스(lo와 veth1)를 갖는다. 호스트 이름은 "slave"이고, /proc은 다시 마운트 된다. ps 명령어를 입력하면, 네임스페이스 내에서 다른 프로세스들은 보이지 않을 것이다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-unfreeze.sgml.in0000644061062106075000000000606513256572152014326 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-unfreeze 1 lxc-unfreeze 컨테이너의 모든 프로세스를 동결해제 lxc-unfreeze -n name <!-- Description -->설명 lxc-unfreeze는 이전에 lxc-freeze로 동결 시켰던 모든 프로세스들을 동결해제한다. &commonoptions; <!-- Diagnostic -->진단 The container was not found 지정한 컨테이너가 lxc-create로 생성된 적이 없다. 컨테이너가 존재하지 않는다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc.container.conf.sgml.in0000644061062106075000000035435713256572152015424 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.container.conf 5 lxc.container.conf LXC 컨테이너 설정파일 <!-- Description -->설명 linux 컨테이너(lxc)는 항상 사용하기 전에 생성된다. 생성 작업은 가상화할 자원 및 컨테이너 내에서 실행되는 프로세스로부터 고립할 시스템 자원들을 정의하는 것이다. 기본적으로 pid, sysv ipc, 마운트 포인트가 가상화되고 고립된다. 명시적으로 설정파일에서 정의되기 전까지, 다른 시스템 자원들은 컨테이너 간에 공유된다. 예를 들어, 네트워크 설정이 되어 있지 않다면, 컨테이너 생성한 쪽과 컨테이너 간에 네트워크를 서로 공유할 것이다. 그러나 네트워크가 지정이되었다면, 컨테이너를 위해 새로운 네트워크 스택이 생성된다. 그리고 컨테이너는 더이상 그를 생성한 쪽과 네트워크를 공유하지 않는다. 설정파일은 컨테이너에 할당될 시스템 자원들을 정의한다. 현재는 utsname, 네트워크, 마운트포인트, 루트 파일시스템, 사용자 네임스페이스 그리고 컨트롤 그룹이 지원된다. 설정파일의 옵션은 key = value의 한 줄로 이루어져 있다. '#' 문자를 앞에 붙여 주석임을 나타낼 수 있다. capability와 cgroup 옵션과 같은 리스트 옵션들은, 값을 지정하지 않고 사용할 수 있다. 값이 지정되지 않은 경우 이전에 설정했던 모든 값들을 지운다. <!-- Configuration -->설정 연관된 컨테이너들을 쉽게 관리하기 위해서, 컨테이너 설정파일은 다른 파일을 불러올 수 있다. 예를 들어서, 네트워크 설정은 여러 컨테이너들을 위해 공통된 하나의 파일로 정의될 수 있다. 그리고 만약 컨테이너들이 다른 호스트로 이동된다면, 해당 파일 하나만 수정하면 된다. include할 파일을 지정한다. include할 파일은 lxc 설정파일의 형식에 부합하여야 한다. <!-- Architecture -->아키텍처 컨테이너에 아키텍처를 지정할 수 있다. 예를 들어, 64비트 호스트에서 32비트 바이너리를 실행하는 컨테이너라면 32비트 아키텍처로 지정할 수 있다. 패키지를 다운로드 받는 등의 작업을 수행하는 아키텍처에 의존적인 컨테이너 스크립트가 잘 동작할 수 있도록 해준다. 컨테이너의 아키텍처를 지정한다. 가능한 옵션은 아래와 같다. , , , <!-- Hostname -->호스트 이름 utsname 섹션은 컨테이너 내에서 설정할 호스트 이름을 정의한다. 컨테이너는 시스템의 호스트 이름을 변경하지 않고도 자신의 호스트 이름을 변경할 수 있다. 즉, 컨테이너마다 호스트 이름을 설정할 수 있다. 컨테이너의 호스트 이름을 지정한다. <!-- Halt signal -->종료 시그널 lxc-stop이 컨테이너를 깨끗이 종료를 시키기 위해서 보낼 시그널의 이름이나 숫자를 지정할 수 있다. init 시스템마다 깨끗한 종료를 위해 각기 다른 시그널을 사용할 수 있다. 이 옵션은 kill(1)에서 사용하는 것 처럼 시그널을 지정할 수 있다. 예를 들어 SIGPWR, SIGRTMIN+14, SIGRTMAX-10 또는 숫자를 지정할 수 있다. 기본 시그널은 SIGPWR이다. 컨테이너를 종료할 때 사용할 시그널을 지정한다. <!-- Reboot signal -->재부팅 시그널 lxc-stop이 컨테이너를 재부팅하기 위해 보낼 시그널의 이름이나 숫자를 지정할 수 있다. 이 옵션은 kill(1)에서 사용하는 것 처럼 시그널을 지정할 수 있다. 예를 들어 SIGINT, SIGRTMIN+14, SIGRTMAX-10 또는 숫자를 지정할 수 있다. 기본 시그널은 SIGINT이다. 컨테이너를 재부팅할 때 사용할 시그널을 지정한다. <!-- Stop signal -->강제종료 시그널 lxc-stop이 컨테이너를 강제종료하기 위해 보낼 시그널의 이름이나 숫자를 지정할 수 있다. 이 옵션은 kill(1)에서 사용하는 것 처럼 시그널을 지정할 수 있다. 예를 들>어 SIGKILL, SIGRTMIN+14, SIGRTMAX-10 또는 숫자를 지정할 수 있다. 기본 시그널은 SIGKILL이다. 컨테이너를 강제종료할 때 사용할 시그널을 지정한다. <!-- Init command -->Init 명령어 컨테이너의 init으로 사용할 명령어를 설정한다. 이 옵션은 lxc-execute을 사용할 때는 무시된다. 기본값은 /sbin/init이다. init으로 사용할 바이저리의 컨테이너 루트 파일시스템에서의 절대 경로. <!-- Init ID -->Init이 사용할 ID lxc-execute가 실행하는 컨테이너의 init 및 명령어가 사용할 UID/GID를 지정한다. 이 옵션들은 lxc-execute가 사용자 네임스페이스 안에서 실행될 때만 적용된다. 기본 값: UID(0), GID(0) init이 사용자 네임스페이스 안에서 사용할 UID. init이 사용자 네임스페이스 안에서 사용할 GID. <!-- Ephemeral -->임시 컨테이너 컨테이너가 종료될 때, 해당 컨테이너를 제거할지 여부를 지정할 수 있다. 지정 가능한 값은 0 또는 1이다. 1로 설정하면, 컨테이너를 종료할 때 해당 컨테이너를 제거한다. <!-- Network -->네트워크 네트워크 섹션은 어떻게 네트워크를 컨테이너 내에서 가상화할지를 정의한다. 네트워크 가상화는 2개의 계층으로 동작한다. 네트워크 가상화를 위해서, 컨테이너의 네트워크 인터페이스가 인수로 지정되어야 한다. 시스템이 하나의 물리적인 네트워크 인터페이스를 갖고 있어도, 컨테이너 내에서 여러개의 가상화 인터페이스들을 사용할 수 있다. 값을 지정하지 않고 사용하여 이전에 설정했던 모든 네트워크 옵션들을 초기화할 수 있다. 컨테이너가 어떤 종류의 네트워크 가상화를 사용할지 지정한다. 필드부터 새로운 네트워크 설정이 시작된다. 이 방법으로 여러개의 네트워크 가상화 형태를 같은 컨테이너에 지정할 수 있다. 그리고 여러개의 네트워크 인터페이스를 하나의 컨테이너에 지정할 수도 있다. 지정 가능한 형태는 아래와 같다. 호스트의 네트워크 네임스페이스를 공유한다. 이렇게 하면 호스트의 네트워크 장치를 컨테이너 내에서 사용가능하다. 컨테이너와 호스트 둘다 init에서 upstart를 사용하는 경우, (예를 들어) 컨테이너에서 'halt'를 하면, 호스트의 것도 종료된다. 는 루프백 인터페이스만 생성한다. 한 쪽은 컨테이너로, 다른 한쪽은 옵션으로 지정한 브리지로 붙은 가상 이더넷(veth) 장치 쌍을 생성한다. 만약 브리지가 지정되지 않았다면, 어떤 브리지에도 붙지 않은 veth 장치 쌍을 만든다. 브리지는 컨테이너 시작전에 시스템에서 생성해야 한다. lxc는 컨테이너 이외의 설정에 대해서는 다루지 않는다. 기본값으로 lxc는 컨테이너 바깥에 속할 네트워크 디바이스의 이름을 정해준다. 이름을 변경하기 원한다면, lxc가 지정한 이름으로 설정하도록 옵션을 사용하여야 한다. (비특권 컨테이너는 불가능하다. 이 옵션은 보안상의 이유로 무시될 것이다) vlan 인터페이스는 로 지정한 인터페이스에 연결되고, 컨테이너로 할당된다. vlan의 식별자는 옵션으로 지정한다. macvlan 인터페이스는 로 지정한 인터페이스에 연결되고, 컨테이너로 할당된다. 은 같은 상위 디바이스에 있는 다른 macvlan과 통신할 때 사용하는 모드를 지정한다. 지정할 수 있는 모드는 이다. 모드는 디바이스가 같은 상위디바이스의 어떤 장치와도 통신하지 않는다. (기본값) 새로운 가상 이더넷 포트 통합모드(Virtual Ethernet Port Aggregator), 즉 모드는 인접한 브리지가 소스와 목적지가 로컬인 모든 프레임들을 macvlan 포트로 반환한다고 가정한다. 즉, 브리지가 reflective relay로 설정되어 있다는 것이다. 상위장치에서 들어오는 브로드캐스트 프레임들은 모든 macvlan 인터페이스에게 보내져버린다. 로컬 프레임들은 로컬로 보내지지 않는다. 모드는 같은 포트의 다른 macvlan 인터페이스 사이에 간단한 브리지를 제공한다. 어떤 인터페이스에서 다른 인터페이스로 프레임은 직접 전달된다. 하지만 외부로는 보내지지 않는다. 브로드캐스트 프레임들은 모든 다른 브리지 포트들과 외부 인터페이스에 전달된다. 그러나 reflective relay로 다시 돌아왔을 때는, 그것들을 다시 전송하지 않는다. 모든 MAC 주소를 알기 때문에, macvlan 브리지모드는 브리지 모듈처럼 학습이나 STP를 요구하지 않는다. 모드는 물리 인터페이스로 부터 받은 모든 프레임들을 macvlan 인터페이스로 포워딩한다. 모드만이 하나의 물리 인터페이스를 설정하는게 가능하다. 로 지정한 이미 존재하는 인터페이스를 컨테이너로 할당된다. 네트워크에 수행할 작업을 지정한다. 인터페이스를 활성화시킨다. 실제 네트워크 트래픽에 사용할 인터페이스를 지정한다. 해당 인터페이스의 최대 전송 단위(MTU)를 지정한다. 인터페이스 이름은 동적으로 할당된다. 그러나, 컨테이너가 일반적으로 사용하는 이름과 다른 이름이 필요하다면, (예: eth0) 이 옵션은 컨테이너 내에 있는 인터페이스의 이름을 지정한 것으로 변경할 수 있다. 가상 인터페이스의 MAC 주소는 기본적으로 동적 할당된다. 그러나 몇몇가지 이유로 MAC 주소 충돌 문제를 해결하거나, 언제나 같은 링크 로컬 IPv6 주소가 필요하다면, 이 옵션이 필요하다. 주소의 "x"는 무작위한 값으로 바뀐다. 템플릿에서 하드웨어 주소를 설정하는데 유용하다. 가상 인터페이스에서 사용할 IPv4 주소를 지정한다. 여러 행으로 여러개의 IPv4 주소를 지정할 수 있다. 주소의 형식은 x.y.z.t/m으로, 예를 들어 192.168.1.123/24이다. 브로드 캐스트 주소는 같은 행의 주소 바로 오른쪽에 지정하면 된다. 컨테이너 내부에서 게이트웨이로 사용할 IPv4 주소를 지정한다. 주소 형식은 x.y.z.t로, 예를 들면 192.168.1.123이다. 라는 특별한 값을 지정할 수있다. 이것은 ( 에서 지정된) 브리지 인터페이스의 첫번째 주소를 가져와 게이트 주소로 사용한다. 는 네트워크 형태가 일 때만 지정 가능하다. 가상 인터페이스에서 사용할 IPv6 주소를 지정한다. 여러 행으로 여러개의 IPv6 주소를 지정할 수 있다. 주소의 형식은 x::y/m으로, 예를 들어 2003:db8:1:0:214:1234:fe0b:3596/64이다. 컨테이너 내부에서 게이트웨이로 사용할 IPv4 주소를 지정한다. 주소 형식은 x::y로, 예를 들면 2003:db8:1:0::1이다. 라는 특별한 값을 지정할 수있다. 이것은 ( 에서 지정된) 브리지 인터페이스의 첫번째 주소를 가져와 게이트 주소로 사용한다. 는 네트워크 형태가 일 때만 지정 가능하다. 네트워크를 설정하고 생성한 후에 호스트 쪽에서 실행되는 스크립트를 지정한다. 다음 인수들이 스크립트에 넘겨진다 : 컨테이너 이름, 설정 섹션 이름(net). 그 후 인수는 훅 스크립트을 사용하는 설정 섹션에 달려있다. 다음 인수들은 네트워크 시스템에 의해 사용되어진다 : 실행 컨텍스트(up), 네트워크 형태(empty/veth/macvlan/phys). 네트워크 형태에 따라서 다음 인수들이 넘겨진다 : veth/macvlan/phys의 경우, (호스트 쪽의) 장치 이름. 스크립트의 표준출력은 debug 수준 로그로 납겨진다. 표준 에러는 로그로 남겨지지는 않지만, 표준 에러를 표준 출력으로 리다이렉션하여 로그로 남길 수 있다. 네트워크를 제거한 후에 호스트 쪽에서 실행되는 스크립트를 지정한다. 다음 인수들이 스크립트에 넘겨진다 : 컨테이너 이름, 설정 섹션 이름(net). 그 후 인수는 훅 스크립트을 사용하는 설정 섹션에 달려있다. 다음 인수들은 네트워크 시스템에 의해 사용되어진다 : 실행 컨텍스트(down), 네트워크 형태(empty/veth/macvlan/phys). 네트워크 형태에 따라서 다음 인수들이 넘겨진다 : veth/macvlan/phys의 경우, (호스트 쪽의) 장치 이름. 스크립트의 표준출력은 debug 수준 로그로 납겨진다. 표준 에러는 로그로 남겨지지는 않지만, 표준 에러를 표준 출력으로 리다이렉션하여 로그로 남길 수 있다. <!-- New pseudo tty instance (devpts) -->새로운 pseudo tty 인스턴스(devpts) 강한 고립을 위해 컨테이너는 자기자신만의 pseudo tty를 가질 수 있다. 만약 지정되었다면, 컨테이너는 새 pseudo tty 인스턴스를 갖는다. 그리고 이것을 자기자신 전용으로 만든다. 지정하는 값은 pseudo tty의 최대 개수를 지정한다. (이 제한은 아직 구현되지 않았다) <!-- Container system console -->컨테이너 시스템 콘솔 컨테이너에 루트 파일시스템이 설정되어 있고 inittab 파일에 콘솔을 사용하는 것이 설정되어 있다면, 콘솔의 출력을 어디로 할지 지정할 수 있다. 콘솔의 출력을 쓸 파일의 경로를 지정한다. 콘솔을 붙일 장치의 경로를 지정한다. 'none'이라는 값은 단순히 콘솔을 비활성화 시킨다. 만약 응용 프로그램이 쓸 수 있는 콘솔 장치 파일이 루트 파일시스템에 있으면, 메시지가 호스트 쪽에 출력되므로 이 설정은 위험할 수 있다. <!-- Console through the ttys -->tty를 통한 콘솔 컨테이너에 루트 파일시스템이 설정되어 있고 inittab 파일에 tty에서 getty를 실행하는 것이 설정되어 있다면, 이 옵션은 유용하다. 이 옵션은 컨테이너에서 사용가능한 tty의 개수를 지정한다. 컨테이너의 inittab 파일에 설정된 getty의 개수는 이 옵션에서 정한 tty의 개수보다 크면 안된다. 그렇지 않으면 초과된 getty 세션은 무한히 죽고 다시 살아나기를 반복하며 콘솔이나 /var/log/messages에 계속 메시지를 띄울 것이다. 컨테이너가 만들 수 있는 tty의 개수를 지정한다. <!-- Console devices location -->콘솔 장치 위치 LXC 콘솔은 호스트에서 생성된 Unix98 PTY와 컨테이너 내에 바인드 마운트될 장치들을 통해 제공된다. 기본적으로 /dev/console/dev/ttyN를 바인드 마운트 한다. 이것은 게스트에서 패키지 업그레이드를 방해하는 요인이 된다. 그래서 /dev 밑에 LXC가 파일을 생성하고 바인드 마운트할 디렉토리의 위치를 따로 지정해 줄 수 있다. 그리고 만들어진 파일들은 /dev/console/dev/ttyN에 심볼릭 링크된다. 심볼릭 링크들은 삭제하거나 대체하는 것이 가능하므로 패키지 업그레이드는 성공적으로 이루어질 수 있다. 컨테이너 콘솔 장치를 생성할 /dev 밑의 디렉토리를 지정한다. <!-- /dev directory -->/dev 디렉토리 기본적으로 lxc는 약간의 심볼릭 링크(fd, stdin, stdout, stderr)를 컨테이너의 /dev 디렉토리에 생성한다. 그러나 자동으로 장치 노드 항목들을 생성해주지 않는다. 컨테이너의 루트 파일시스템에서 필요로하는 /dev를 생성할 수 있게 하는 것이다. lxc.autodev가 1로 지정되었다면, 컨테이너 루트 파일시스템을 마운트 한 후, LXC가 /dev 밑에 새로운 tmpfs(최대 500k)를 마운트 해준다. 그리고 최소한의 장치만을 채워준다. 이것은 "systemd" 기반의 "init" 환경의 컨테이너를 시작할 때 일반적으로 필요하지만, 다른 환경의 경우는 선택적인 요소이다. 컨테이너의 부가적인 장치들은 훅 스크립트를 사용하여 /dev 디렉토리에 생성할 수 있다. 컨테이너 시작시 /dev을 마운트하고 최소한으로 /dev를 구성할지 지정한다. 0이면 해당 동작을 수행하지 않는다. <!-- Enable kmsg symlink -->kmsg 심볼릭링크 사용 /dev/console에 대한 심볼릭 링크로 /dev/kmsg를 생성한다. 이것을 1로 지정하면 /dev/kmsg 심볼릭링크를 사용한다. <!-- Mount points -->마운트 포인트 마운트 포인트 섹션은 마운트가 될 각각의 장소를 지정한다. 이 마운트 포인트들은 컨테이너에서만 보이고 외부에서 실행하는 프로세스들에겐 보이지 않는다. 이는 예를 들어 /etc, /var, /home을 마운트할 때 유용하다. 주의 - 보통 LXC는 마운트 대상과 상대 경로로 된 바인드 마운트 소스들이 컨테이너의 루트 아래에 있도록 보장할 것이다. 이는 호스트 디렉토리와 파일들을 겹쳐서 마운트하는 유형의 공격을 피하기 위한 것이다. (절대 경로로 된 마운트 소스 내에 존재하는 심볼릭 링크들은 무시될 것이다.) 하지만, 만약 컨테이너 설정에서 컨테이너 사용자가 제어할 수 있는, 예를 들어 /home/joe와 같은 디렉토리를 컨테이너 내의 path에 먼저 마운트 하고 나서, path 내에 또 마운트를 하는 경우가 있다면, 컨테이너 사용자가 자신의 home 디렉토리에 있는 심볼릭링크를 정확한 시간에 조작하여, TOCTTOU (역주 : Time of check to time of use) 공격이 가능할 것이다. 마운트 정보를 담은 fstab 형식으로 된 파일의 위치를 지정한다. 이 마운트 대상 위치들은 대부분 상대경로로 되어 있으며, 이는 마운트된 컨테이너 루트에서의 상대경로를 의미한다. proc proc proc nodev,noexec,nosuid 0 0 위의 예는 proc 파일시스템을 컨테이너 루트 파일시스템의 위치와 상관없이 컨테이너의 /proc에 마운트시키는 예제이다. 이는 백엔드 파일시스템 블록 장치뿐만 아니라 컨테이너의 복제에도 유연하게 대처할 수 있다. 이미지 파일이나 블록 장치에서 마운트된 파일시스템의 경우, 3번째 필드 (fs_vfstype)는 mount 8 와 같이 auto를 지정할수 없으며, 명시적으로 지정해야 한다. fstab의 형식으로, 한 줄당 마운트 포인트 하나를 지정한다. 또한 마운트 옵션에 아래 2가지 옵션을 추가적으로 사용할 수 있다. 이는 LXC 자체적으로 사용하는 옵션이다. 은 마운트를 못하더라도, 실패로 처리하지 않게 한다. 는 마운트할 때, 디렉토리(dir) 또는 파일(file)을 생성한다. 일반적인 커널의 파일시스템을 자동으로 마운트할지 지정한다. 이 옵션을 사용하면 설정을 매우 편하게 할 수 있다. 사용할 수 있는 파일시스템들은 아래와 같다. (or ): /proc 을 읽기/쓰기 가능으로 마운트, 그러나 /proc/sys/proc/sysrq-trigger는 읽기 전용으로 다시 마운트 (보안상의 이유 및 컨테이너 고립을 위해) : /proc 전체를 읽기/쓰기 가능으로 마운트 (or ): /sys/devices/virtual/net는 쓰기 가능으로, /sys는 읽기 전용으로 마운트. : /sys를 읽기 전용으로 마운트 (보안상의 이유 및 컨테이너 고립을 위해) : /sys를 읽기/쓰기 가능으로 마운트 : /sys/fs/cgroup를 tmpfs로 마운트. 컨테이너가 추가될 모든 계층의 디렉토리 생성. cgroup 이름의 하위 디렉토리 생성. 컨테이너 자신의 cgroup을 해당 디렉토리에 마운트. 컨테이너는 자신의 cgroup 디렉토리에는 쓰기가 가능하지만 부모의 디렉토리는 읽기전용으로 마운트 하므로 쓰기가 불가능하다. : 와 유사, 단, 전부 읽기 전용으로 마운트 : 와 유사, 단, 전부 읽기/쓰기 가능으로 마운트. 컨테이너 자신의 cgroup에 이르기까지의 경로가 모두 쓰기 가능이 되지만, cgroup 파일시스템이 아닌 /sys/fs/cgroup의 tmpfs의 일부로써 존재하게 되는 것에 주의해야 한다. (별다른 옵션 없이): 컨테이너가 CAP_SYS_ADMIN capability를 유지하고 있는 경우 을 기본으로 사용한다. 그렇지 않다면 를 사용한다. : /sys/fs/cgroup을 tmpfs로 마운트. 컨테이너가 추가될 모든 계층의 디렉토리 생성. 호스트의 디렉토리들을 컨테이너로 바인드 마운트하고 컨테이너 자신의 cgroup을 제외한 모든 디렉토리는 읽기 전용으로 변경. 비교하자면, 의 경우에는 컨테이너 자신의 cgroup에 이르기까지 모든 경로는 단순하게 tmpfs 아래에 있는 디렉토리에 불과하다. 하지만, 여기서는 비록 컨테이너 자신의 cgroup 이외에는 모두 읽기 전용이긴 하나 /sys/fs/cgroup/$hierarchy이 호스트의 모든 cgroup 계층구조를 포함하고 있다. 이는 컨테이너에게 너무 많은 정보를 노출시킬 수 있다. : 와 유사, 단, 전부 읽기 전용으로 마운트 : 와 유사, 단, 전부 읽기/쓰기 가능으로 마운트. 이 경우는 컨테이너가 자기자신의 cgroup을 벗어날 수 있다. (만약 컨테이너가 CAP_SYS_ADMIN을 갖고 있다면, cgroup 파일시스템 자체를 마운트할 수 있음을 주의해야 한다. 이렇게 하면 같은 결과를 가져올 수 있다) (별다른 옵션 없이): 컨테이너가 CAP_SYS_ADMIN capability를 유지하고 있는 경우 을 기본으로 사용한다. 그렇지 않다면 를 사용한다. cgroup 네임스페이스가 사용 가능한 경우, 마운트 옵션들은 전부 무시될 것이다. 컨테이너가 직접 파일시스템을 마운트하기 때문이며, 컨테이너 초기화시 해당 옵션이 혼란을 줄 수 있기 때문이다. cgroup 파일시스템이 자동으로 마운트되는게 활성화되어 있다면, /sys/fs/cgroup 밑의 tmpfs는 언제나 읽기/쓰기 가능으로 마운트 된다.(단, 의 경우에는 각각 계층 /sys/fs/cgroup/$hierarchy이 읽기전용이 될 수는 있다) 아래의 Ubuntu 명령어에 대응하기 위함이다. mountall 8 해당 명령어는 컨테이너 부팅시에 /sys/fs/cgroup가 읽기전용으로 마운트되어 있고, 컨테이너가 CAP_SYS_ADMIN을 갖고 있지 않아 이를 읽기/쓰기 전용으로 다시 마운트 못할 경우, 부팅시에 사용자의 입력을 기다리게 만들기 때문이다. 예제: lxc.mount.auto = proc sys cgroup lxc.mount.auto = proc:rw sys:rw cgroup-full:rw <!-- Root file system -->루트 파일시스템 컨테이너의 루트 파일시스템은 호스트 시스템과 다르게 구성할 수 있다. 컨테이너의 루트 파일시스템을 지정한다. 이미지 파일 또는 블록 장치의 디렉토리가 될 수도 있다. 만약 지정되지 않으면 컨테이너는 자신의 루트 파일시스템을 호스트와 공유한다. 디렉토리 또는 간단한 블록 장치로 구성된 컨테이너를 위해서 경로이름이 사용될 수 있다. 만약 루트 파일시스템이 nbd 장치의 경우, nbd:file:1file을 nbd 장치로 사용하고 1번 파티션이 루트 파일시스템으로 마운트되도록 지정한다. nbd:file는 nbd 장치 자체가 마운트되어야 한다고 지정한다. overlayfs:/lower:/upper는 루트 파일시스템이 읽기전용으로 마운트된 /lower/upper가 읽기/쓰기 가능으로 오버레이 마운트되도록 지정한다. aufs:/lower:/upper는 aufs에서 위와같이 지정한다. overlayfsaufs는 여러개의 /lower 디렉토리를 지정할 수 있다. loop:/file는 lxc가 /file을 loop 장치로 사용하고 loop 장치를 마운트하도록 지정한다. 루트 파일시스템을 변경하기 전에, 을 어디에 재귀적으로 바인드할지 정한다. 이는 pivot_root 8 시스템 콜의 성공을 보장한다. 어떤 디렉토리도 좋으며, 기본값으로도 보통 동작할 것이다. 루트 파일시스템을 마운트 할때 사용할 부가적인 마운트 옵션. <!-- Control group -->컨트롤 그룹 컨트롤 그룹 섹션은 (lxc와는) 다른 서브시스템의 설정을 포함한다. lxc는 서브시스템의 이름을 정확히 체크하지 않는다. 이는 컨테이너를 시작할 때까지는 설정 상의 에러를 잡아내기 힘들게 한다. 그러나 다른 차후에 들어올 수 있는 서브시스템을 지원할 수 있는 장점도 있다. 지정한 컨트롤 그룹의 값을 지정한다. 서브시스템의 이름은 컨트롤 그룹에서의 이름이다. 사용가능한 이름이나 값의 문법에 대해서는 LXC에서 따로 신경쓰지 않으며, 컨테이너가 시작하는 시점에 리눅스 커널이 해당 기능을 지원하는지에 달려있다. 예를 들면 이다. Capabilities 컨테이너가 root로 실행된다면, 컨테이너 내에서 capability를 제거할 수 있다. 컨테이너에서 제거할 capability를 지정한다. 한 줄에 여러개의 capability를 공백(space)으로 구분하여 정의할 수 있다. 형식은 capability 정의에서 "CAP_" 접두사를 빼고 소문자로 작성하는 것이다. 예를들어 CAP_SYS_MODULE의 경우는 sys_module이다. 아래를 참조할 수 있다. capabilities 7 값을 공백으로 지정하면, 해당 설정 이전에 지정했던 capability를 모두 취소한다. (lxc.cap.drop에 아무 것도 지정하지 않은 상태가 된다.) 컨테이너에서 유지할 capability를 지정한다. 다른 capability는 모두 제거될 것이다. "none"이라는 값을 지정하면, lxc는 해당 시점에서 갖고 있던 모든 capability를 제거한다. 모든 capability를 제거하기 위해서는 "none" 하나만 사용하면 된다. <!-- Apparmor profile -->Apparmor 프로파일 lxc가 apparmor를 지원하도록 컴파일된 후 설치되었고, 호스트 시스템에서 apparmor가 활성화되었다면, 컨테이너에서 따라야할 apparmor 프로파일을 컨테이너 설정에서 지정할 수 있다. 기본값은 호스트 커널이 cgroup 네임스페이스를 지원하면 lxc-container-default-cgns이고, 그렇지 않다면 lxc-container-default이다. 컨테이너가 따라야할 apparmor 프로파일을 지정한다. 컨테이너가 apparmor로 인한 제한을 받지 않도록 하려면, 아래와 같이 지정하면 된다. lxc.apparmor.profile = unconfined apparmor 프로파일이 변경되지 않아야 한다면(중첩 컨테이너 안에 있고, 이미 confined된 경우), 아래와 같이 지정하면 된다. lxc.apparmor.profile = unchanged apparmor 프로파일은 경로이름 기반이므로, 공격자로부터 효과적으로 파일 제한을 하기위해서는 마운트 제한이 요구된다. 하지만 이 마운트 제한들은 upstream 커널에서는 구현되어 있지 않다. 마운트 제한 없이도, apparmor 프로파일은 우연한 손상에 대해서 보호가 가능하다. 만약 이 플래그가 0(기본값)이라면, 커널에 apparmor의 마운트 기능이 부족했을때 컨테이너가 시작되지 않는다. 커널을 업그레이드한 후에 해당 기능이 빠졌는지 여부를 검사하기 위함이다. 부분적인 apparmor 보호 하에서도 컨테이너를 시작하려면, 플래그를 1로 지정하면 된다. <!-- SELinux context -->SELinux 컨텍스트 lxc가 SELinux를 지원하도록 컴파일된 후 설치되었고, 호스트 시스템에서 SELinux 컨텍스트가 활성화되었다면, 컨테이너에서 따라야할 SELinux 컨텍스트를 컨테이너 설정에서 지정할 수 있다. 기본값은 unconfined_t이다. 이는 lxc는 컨텍스트를 변경하지않음을 의미한다. 정책 예제와 추가적인 정보를 원한다면 @DATADIR@/lxc/selinux/lxc.te를 참고하면 된다. 컨테이너가 따라야할 SELinux 컨텍스트를 지정하거나, unconfined_t를 지정할 수 있다. 예를 들어 아래와 같이 지정 가능하다. lxc.selinux.context = system_u:system_r:lxc_t:s0:c22 <!-- Seccomp configuration -->Seccomp 설정 컨테이너는 seccomp 프로파일을 로드하여 사용가능한 시스템콜의 수를 줄인 체로 실행할 수 있다. seccomp 설정파일은 첫번째 행이 버전번호, 두번째 행이 정책 타입, 시작하며 그 이후에 설정 사항들이 포함되어야 한다. 현재는 버전1과 2만 지원된다. 버전 1에서는 정책은 단순한 화이트리스트이다. 그러므로 두번째 라인은 반드시 "whitelist"여야 한다. 파일의 나머지 내용은 한 줄에 하나의 시스템콜 번호로 채워진다. 화이트리스트에 없는 번호는 컨테이너에서 블랙리스트로 들어간다. 버전 2에서는 폴리시는 블랙리스트 또는 화이트리스트가 될 수 있다. 그리고 각 규칙와 각 정책의 기본 동작, 아키텍쳐별 시스템콜 설정, 텍스트로된 이름을 지원한다. 아래는 블랙리스트 정책 예제이다. 아래 정책에서는 mknod를 제외한 모든 시스템콜이 허용된다. mknod시에는 아무것도 수행하지 않고 0(성공)을 반환한다. 2 blacklist mknod errno 0 컨테이너가 시작되기전에 읽어올 seccomp 설정이 담긴 파일을 지정한다. PR_SET_NO_NEW_PRIVS PR_SET_NO_NEW_PRIVS가 적용되면, execve()는, execve()를 호출되기 전에는 실행하지 못했던 것을 수행하기 위해 권한을 부여하는 류의 동작을 하지 않게 된다. (예를 들어, set-user-ID와 set-group-ID 모드, 파일 캐퍼빌리티가 동작하지 않는 것이다.) 일단 적용되면 이 비트는 해제할 수 없다. 이 비트는 fork()와 clone()으로 생성된 자식에게도 상속되며, execve() 이후에도 그대로 적용된다. PR_SET_NO_NEW_PRIVS는 컨테이너의 AppArmor 프로필 또는 SELinux 문맥이 변경된 이후에 적용된다. PR_SET_NO_NEW_PRIVS가 컨테이너에 적용되어야 하는지 여부를 지정한다. 1을 지정하면 적용된다. <!-- UID mappings -->UID 매핑 컨테이너는 사용자와 그룹 ID 매핑을 통해 자신만의 사용자 네임스페이스 내에서 실행될수 있다. 예를 들어서 컨테이너의 UID 0번을 호스트의 UID 200000으로 매핑할 수 있다. 컨테이너의 루트 사용자는 컨테이너에서는 특권을 가지고 있지만, 호스트에서는 특권을 가지고 있지 않게 된다. 보통 시스템 컨테이너는 ID들의 범위를 지정하려 할텐데 그 역시도 지정 가능하다. 예를 들어서, 컨테이너의 UID와 GID를 0 ~ 20,000를 호스트의 200,000 ~ 220,000로 설정 가능하다. 4개의 값이 제공되어야 한다. 첫 번째는 'u', 'g', 'b' 문자로 각각 UID, GID, 또는 UID 및 GID 를 가리킨다. 그 다음은 사용자 네임스페이스내에서의 UID, 그다음은 호스트의 UID, 그리고 마지막으로 매핑할 ID의 범위를 지정한다. <!-- Container hooks -->컨테이너 훅 컨테이너 훅은 컨테이너의 생명주기 내에서 다양한 상황에 실행되는 프로그램 또는 스크립트이다. 컨테이너 훅이 실행될 때, 정보는 명령어 인수나 환경 변수를 통해 넘겨진다. 인수 : 컨테이너 이름 섹션 (보통 'lxc') 훅 종류 ('clone', 'pre-mount' 등) 추가 인수. clone 훅일 경우, lxc-clone에게 넘였던 추가 인수들이 넘어온다. stop 훅일 경우, 컨테이너의 네임스페이스 각각에 대한 이름과 파일 디스크립터의 경로가 넘어온다. 환경 변수 : LXC_NAME: 컨테이너 이름 LXC_ROOTFS_MOUNT: 마운트될 루트 파일시스템의 경로 LXC_CONFIG_FILE: 컨테이너 설정파일의 경로 LXC_SRC_NAME: clone 훅의 경우, 원본 컨테이너의 이름 LXC_ROOTFS_PATH: 컨테이너의 lxc.rootfs.path 항목. 이 것은 마운트된 루트 파일시스템을 가리키는 것이 아님에 주의해야한다. 그 목적을 위해서는 LXC_ROOTFS_MOUNT를 사용해야 한다. 훅의 표준출력은 debug 수준 로그로 납겨진다. 표준 에러는 로그로 남겨지지는 않지만, 표준 에러를 표준 출력으로 리 다이렉션하여 로그로 남길 수 있다. 컨테이너의 tty, 콘솔의 생성 및 마운트가 되기 전에, 호스트의 네임스페이스에서 실행되는 훅. 컨테이너의 마운트 네임스페이스 안에서 루트 파일시스템이 세팅되기 전에 실행되는 훅. 예를 들어 암호화 파일시스템을 마운트 하는 등의 루트 파일시스템을 조작할 수 있게 해준다. 이 훅에서 마운트를 하더라도 호스트에는 반영되지 않는다. (mounts propagation은 제외) 그래서 컨테이너가 종료되면 자동적으로 정리된다. 마운트가 완료된 후 pivot_root 전에, 컨테이너의 마운트 네임스페이스에서 실행되는 훅. == 1가 지정되어 있는 경우에 마운트 완료시 마운트 훅도 실행 된 후 pivot_root전에, 컨테이너의 마운트 네임스페이스에서 실행되는 훅. 이 훅의 목적은 systemd 기반의 컨테이너에서 autodev 옵션을 사용하는 경우 /dev 디렉토리를 구성할 때 도움을 주기위한 것이다. 훅이 실행될 때, 컨테이너의 /dev 경로는 ${} 환경변수에 대한 경로이다. 컨테이너의 init이 실행되기 직전에 컨테이너의 네임스페이스에서 실행되는 훅. 컨테이너 내에서 해당 프로그램이 실행될 수 있는 상태여야 한다. 컨테이너가 종료된 후 컨테이너 네임스페이스에 대한 참조를 넘겨받는 호스트의 네임스페이스에서 실행되는 훅. 각각의 네임스페이스들은 훅에 추가인수로 넘겨진다. 해당 인수는 네임스페이스의 이름과 네임스페이스의 파일 디스크립터를 얻어올 수 있는 파일이름을 가지고 있으며, 콜론으로 구분된다. 네임스페이스 이름은 /proc/PID/ns 디렉토리 내의 파일 이름이다. 예를 들어 마운트 네임스페이스에 대응하는 인수는 일반적으로 mnt:/proc/PID/fd/12와 같이 된다. 컨테이너가 종료된 후 호스트의 네임스페이스에서 실행되는 훅. 컨테이너가 새로운 컨테이너로 복제되었을 경우 실행되는 훅. 아래를 참조하면 더 자세한 정보를 얻을 수 있다. lxc-clone 1 컨테이너가 제거될 때 실행되는 훅. <!-- Container hooks Environment Variables -->컨테이너 훅 환경 변수 훅이 시작될때 설정 정보를 제공하고 훅의 기능을 돕기 위해 몇가지 환경 변수가 사용 가능하다. 모든 컨텍스트에서 모든 변수가 사용 가능하진 않다. 특히, 모든 경로는 호스트 시스템에서의 경로이며, 훅에서는 유효하지 않다. LXC 컨테이너의 이름. 일반적인 로그 환경에서 로그메시지에 유용하게 사용할 수 있다. [] 컨테이너 설정파일의 호스트에서의 경로. 이것은 다른 방법으로는 얻을 수 없는 추가적인 정보룰 찾을 수 있도록, 컨테이너가 참조하는 원래의 최상위 설정파일의 경로를 제공한다. [] NULL이 아니라면, 컨테이너의 콘솔의 출력이 저장될 경로. [] [] NULL이 아니라면, 컨테이너의 콘솔의 로그 출력이 저장될 경로. [] 처음에 컨테이너가 마운트 되는 장소. 이것은 시작되는 컨테이너 인스턴스를 위한 루트 파일시스템의 호스트에서의 경로이다. 해당 인스턴스에 대한 변경이 이루어져야 하는 장소이다. [] rootfs.mount에 마운트된 컨테이너 루트의 호스트에서의 경로이다. [] clone 훅에서만 사용된다. 원본 컨테이너의 이름을 지정한다. stop 훅에서만 사용된다. 값이 "stop"이면 컨테이너가 종료되는 것을, "reboot"이면 컨테이너가 재부팅되는 것을 의미한다. 이 변수가 지정되지 않았다면, 현재 버전의 lxc는 cgroup 네임스페이스를 지원하지 않는다. 만약 지정되었고 값이 1이라면, lxc는 cgroup 네임스페이스를 지원하는 것이다. 단, kernel에서의 cgroup 네임스페이스 지원을 보장하는 것이 아님에 주의해야 한다. lxcfs 마운트 훅에서 사용된다. <!-- Logging -->로그 로그는 각 컨테이너마다 설정할 수 있다. 기본적으로 lxc 패키지가 어떻게 컴파일되었는지에 달려있지만, 컨테이너 시작시에는 error 수준 로그만 기록된다. 컨테이너 경로나 @LOGPATH@ 밑에 컨테이너의 이름을 따서(뒤에 '.log'를 붙여서) 로그 파일을 생성한다. 기본 로그 수준과 로그파일은 컨테이너 설정파일로 지정 가능하며, 기본 동작을 덮어버린다. 마찬가지로 설 정파일 항목들은 lxc-start 명령어의 옵션으로 덮어쓸 수 있다. 기록할 로그 수준. 로그 수준은 0 ~ 8 사이의 정수이다. 숫자가 작을수록 더 자세히 로그를 기록한다. 구체적으로는 0 = trace, 1 = debug, 2 = info, 3 = notice, 4 = warn, 5 = error, 6 = critical, 7 = alert, 8 = fatal이다. 지정하지 않은 경우, 기본값은 5 (error)로, 에러 이거나 그보다 심각한 상황의 로그를 기록한다. (훅 스크립트 및 네트워크 인터페이스 up/down 스크립트 같은) 스크립트가 호출이되면, 스크립트의 표준 입출력은 1 번, debug 수준으로 기록된다. 로그 정보를 쓸 파일. 로그정보를 syslog에 보낸다. 로그 수준은 lxc.log.level로 지정할 수 있다. 인자는 syslog에 정의된 값으로만 지정할 수 있다. 사용 가능한 값은 다음과 같다 : daemon, local0, local1, local2, local3, local4, local5, local5, local7 <!-- Autostart -->자동시작 자동시작 옵션들은 자동시작할 컨테이너 지정 및 순서 설정이 가능하다. 이 옵션들은 LXC 도구로 직접 사용하거나 배포판들이 제공하는 외부 도구에 의해 사용될 수도 있다. 컨테이너가 자동으로 시작될지 여부. 유효한 값은 0 (off) 또는 1 (on)이다. 컨테이너가 시작된 후 다음 컨테이너가 시작되기 전까지 기다릴 시간(초). 다수의 컨테이너를 한번에 자동시작할 때, 컨테이너의 부팅 순서를 결정할 때 사용하는 정수를 지정한다. 값이 0이 아니라면, 컨테이너가 초기화되기 전 (pre-start 훅이 실행 되기 전) 호스트로부터 마운트 네임스페이스를 unshare 한다. 시작시에 CAP_SYS_ADMIN 캐퍼빌리티가 요구된다. 기본값은 0이다. 컨테이너를 추가할 컨테이너 그룹을 지정한다. 여러값을 설정할 수 있으며, 여러번 지정 가능하다. 설정된 그룹은 연관된 컨테이너들을 시작할 때 사용된다. <!-- Autostart and System Boot -->자동시작과 시스템 부팅 각각의 컨테이너는 여러 그룹에 속할수도 있고 아무그룹에도 속하지 않을 수 있다. 두개의 그룹은 특수한데, 하나는 NULL 그룹이고 컨테이너가 아무그룹에도 속하지 않을때 사용된다. 그리고 나머지 하나는 "onboot" 그룹이다. LXC 서비스가 활성화된 상태로 시스템이 부팅될 때, 먼저 lxc.start.auto == 1이고 "onboot" 그룹인 컨테이너들을 시작하려고 시도한다. 시작과정은 lxc.start.order의 순서대로 이루어진다. 만약 lxc.start.delay가 지정 되었다면, 다음 컨테이너를 시작하려고 시도>하기 전, 현재 컨테이너의 초기화 및 호스트 시스템의 부하를 줄이기 위해서 지연시간을 준다. "onboot" 그룹의 멤버들을 시작시킨 후, LXC 시스템은 lxc.start.auto == 1이고 어떤 그룹에도 속하지 않은(NULL 그룹) 컨테이너들을 시작한다. <!-- Container Environment -->컨테이너 환경변수 컨테이너에 환경변수를 념겨주고 싶다면(환경변수를 컨테이너의 init과 그 자손 전체가 사용할 수 있다), lxc.environment를 사용할 수 있다. 민감한 정보를 넘기지 않도록 주의해야 한다. 왜냐면 컨테이너의 모든 프로세스가 이 환경변수를 획득할 수 있기 때문이다. 환경변수는 항상 /proc/PID/environ를 통해 획득할 수 있다. 이 설정항목은 여러번을 지정할 수 있으며, 설정하려는 환경변수마다 한번씩 지정한다. 컨테이너로 전달될 환경변수를 지정한다. 예제: lxc.environment = APP_ENV=production lxc.environment = SYSLOG_SERVER=192.0.2.42 <!-- Examples -->예제 아래에 소개하는 몇가지 예제말고도 다른 예제들이 @DOCDIR@/examples에 위치하고 있다. <!-- Network -->네트워크 이 설정은 컨테이너가 한 쪽은 (이전에 시스템에 이미 생성된) br0 브리지에 연결되어 있는 veth 장치 쌍을 사용하도록 세팅한다. 가상 네트워크 장치는 컨테이너 내에서 eth0라는 이름을 갖는다. lxc.uts.name = myhostname lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.name = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 1.2.3.5/24 1.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 <!-- UID/GID mapping -->UID/GID 매핑 이 설정은 UID와 GID 둘다를 컨테이너의 0 ~ 9999를 호스트의 100000 ~ 109999로 매핑한다. lxc.idmap = u 0 100000 10000 lxc.idmap = g 0 100000 10000 <!-- Control group -->컨트롤 그룹 이 설정은 어플리케이션을 위해 몇가지 컨트롤 그룹을 설정한다. cpuset.cpus는 정의된 cpu만 사용하도록 제한한다. cpus.share은 컨트롤 그룹(cpu) 우선순위를 지정한다. devices.allow는 특정 장치를 사용 가능하게 한다. lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw <!-- Complex configuration -->복잡한 설정 아래의 예제는 복잡한 네트워크 스택, 컨트롤 그룹 사용, 호스트 이름 설정, 몇몇 장소 마운트, 루트 파일시스템 변경 등의 복잡한 설정을 보여준다. lxc.uts.name = complex lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 10.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 lxc.net.0.ipv6.address = 2003:db8:1:0:214:5432:feab:3588 lxc.net.1.type = macvlan lxc.net.1.flags = up lxc.net.1.link = eth0 lxc.net.1.hwaddr = 4a:49:43:49:79:bd lxc.net.1.ipv4.address = 10.2.3.4/24 lxc.net.1.ipv4.address = 192.168.10.125/24 lxc.net.1.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc.net.2.type = phys lxc.net.2.flags = up lxc.net.2.link = dummy0 lxc.net.2.hwaddr = 4a:49:43:49:79:ff lxc.net.2.ipv4.address = 10.2.3.6/24 lxc.net.2.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3297 lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw lxc.mount.fstab = /etc/fstab.complex lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0 lxc.rootfs.path = dir:/mnt/rootfs.complex lxc.cap.drop = sys_module mknod setuid net_raw lxc.cap.drop = mac_override <!-- See Also -->참조 chroot 1 , pivot_root 8 , fstab 5 capabilities 7 &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-config.sgml.in0000644061062106075000000000725513256572152013752 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-config 1 lxc-config LXC 시스템 설정 얻어오기 lxc-config -l item <!-- Description -->설명 lxc-config는 lxc 시스템 설정을 보여준다. 가능한 모든 항목의 이름을 나열하기도 하고 각각의 항목들에 설정되어 잇는 값을 보여주기도 한다. <!-- Options -->옵션 지원되는 모든 항목의 이름을 나열한다. 지정한 항목에 설정되어 있는 값을 표시한다. &seealso; <!--Author-->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-checkconfig.sgml.in0000644061062106075000000000562213256572152014744 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-checkconfig 1 lxc-checkconfig 현재 커널의 lxc 지원 여부 검사 lxc-checkconfig <!-- Description -->설명 lxc-checkconfig는 현재 커널이 lxc를 지원하는지 검사한다. <!-- Examples -->예제 lxc-checkconfig 현재 커널을 검사한다. CONFIG 환경 변수를 이용하여 다른 위치를 설정할 수 있다. (역주 : 기본값은 /proc/config.gz 이다. Kernel compile option에서 Enable access to .config through /proc/config.gz를 체크하여야 한다) &seealso; <!-- Author -->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-monitor.sgml.in0000644061062106075000000001575613256572152014201 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-monitor 1 lxc-monitor 컨테이너의 상태 모니터링 lxc-monitor -n name -Q <!-- Description -->설명 lxc-monitor는 컨테이너의 상태를 주시한다. name 인수는 어떤 컨테이너를 모니터링할지 지정한다. 이 인수는 POSIX 호환 정규 표현식으로 지정할 수 있다. 따라서 모든 컨테이너를 또는 그 중 몇몇만 또는 한 개의 컨테이너만 모니터링하는 것이 가능하다. 만약 인수가 지정되지 않았다면 name는 기본값으로 '.*'가 사용된다. 이 값은 lxcpath에 있는 모든 컨테이너들을 모니터링 할 수 있다. =PATH 옵션을 사용하여 컨테이너 경로를 지정할 수 있으며, 1개 이상도 가능하다. 하지만 각각 다른 경로에 있는 이름이 같은 컨테이너는 출력에서 구분되지 않는다. <!-- Options -->옵션 지정한 lxcpath 각각에 대한 lxc-monitord 데몬을 종료하도록 요청한다. lxc-monitord는 일반적으로 클라이언트가 없으면, 새로운 클라이언트를 를 30초 동안 기다린 후 종료된다. 하지만 이 명령어를 실행한 후에는 클라이언트가 없으면 바로 종료된다. 이 옵션은 lxcpath의 파일시스템을 바로 unmount할 필요가 있을때, 유용하다. &commonoptions; <!-- Examples -->예제 lxc-monitor -n foo foo 컨테이너의 상태 변화를 모니터링한다. lxc-monitor -n 'foo|bar' 컨테이너 foo와 bar의 상태 변화를 모니터링 한다. lxc-monitor -n '[fb].*' 이름이 'f' 또는 'b'로 시작하는 컨테이너의 상태 변화를 모니터링한다. lxc-monitor -n '.*' 모든 컨테이너들의 상태 변화를 모니터링한다. <!-- Diagnostic -->진단 The container was not found 지정한 컨테이너가 lxc-create로 생성된 적이 없다. 컨테이너가 존재하지 않는다. <!-- See Also -->참조 regex 7 , &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-snapshot.sgml.in0000644061062106075000000001710113256572152014333 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-snapshot 1 lxc-snapshot 존재하는 컨테이너의 스냅샷 생성 및 복원 lxc-snapshot -n, --name name -c, --comment file lxc-snapshot -n, --name name -d, -destroy snapshot-name lxc-snapshot -n, --name name -L, --list -C, --showcomments lxc-snapshot -n, --name name -r, -restore snapshot-name -N, --newname newname <!-- Description -->설명 lxc-snapshot는 컨테이너의 스냅샷을 생성, 복원 그리고 리스트를 표시한다. (역주 : 컨테이너 파일시스템을 대상으로 한다는 점에서 lxc-checkpoint와는 다르다) 스냅샷은 컨테이너 설정 경로 밑에 스냅샷된 컨테이너처럼 저장된다. 예를 들어, 만약 컨테이너 설정 경로가 /var/lib/lxc이고 컨테이너 이름이 c1라면, 첫번째 스냅샷은 /var/lib/lxc/c1/snaps 밑에 snap0라는 이름의 컨테이너로 저장 된다. LXC 1.0 때 사용됬던 /var/lib/lxcsnaps가 존재하는 경우라면, 해당 경로가 계속 쓰이게 된다. <!-- Options -->옵션 새로 생성되는 스냅샷에 comment_file에 있는 주석을 단다. 지정한 스냅샷을 제거한다. 스냅샷의 이름이 ALL인 경우, 모든 스냅샷을 제거한다. 존재하는 스냅샷의 리스트를 표시한다. 스냅샷의 리스트를 표시할때 스냅샷의 주석도 함께 표시한다. 지정한 스냅샷을 복원한다, 즉, 스냅샷을 복사하여 완전히 새로운 컨테이너가 생성된다는 것을 의미한다. 스냅샷을 복원할 때, 복원된 컨테이너의 이름을 --newname로 명시적으로 지정하지 않았다면 마지막 인자를 이름으로 사용한다. 만약 newname이 원래 컨테이너의 이름과 같다면, 원래 컨테이너는 제거되고 복원되는 컨테이너로 교체된다. aufs, overlayfs, zfs의 경우에는 원본 스냅샷의 제거가 불가능하다는 것에 주의해야 한다. &commonoptions; &seealso; <!-- Author -->저자 Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/ko/lxc-copy.sgml.in0000644061062106075000000005124213256572152013452 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-copy 1 lxc-copy 존재하는 컨테이너 복사 lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -B, --backingstorage backingstorage -s, --snapshot -K, --keepname -D, --keepdata -M, --keepmac -L, --fssize size [unit] -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -e, --ephemeral -B, --backingstorage backingstorage -s, --snapshot -K, --keepname -D, --keepdata -M, --keepmac -L, --fssize size [unit] -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -e, --ephemeral -B, --backingstorage backingstorage -s, --snapshot -t, --tmpfs -K, --keepname -M, --keepmac -- hook arguments lxc-copy -n, --name name -P, --lxcpath path -N, --newname newname -p, --newpath newpath -R, --rename <!-- Description -->설명 lxc-copy는 존재하는 컨테이너의 (임시적 또는 영구적) 복사본을 생성하고, 옵션에 따라 시작하기도 한다. lxc-clonelxc-start-ephemeral를 대체한다. lxc-copy는 존재하는 컨테이너의 복사본을 생성한다. 복사본은 원본 컨테이너를 말그대로 복사한 것일 수 있다. 이 경우 컨테이너의 전체 루트 파일시스템은 단순히 새로운 컨테이너로 복사된다. 또는, 원본 컨테이너를 copy-on-write한 것과 같이 스냅샷이 될 수 있다. 이 경우 복사본을 위해 지정한 저장소는 스냅샷을 지원하여야 한다. 이러한 저장소에는 현재 aufs, btrfs, lvm (lvm 장치는 스냅샷의 스냅샷은 지원하지 않음), overlay, zfs가 있다. 복사본의 저장소는 원본 컨테이너와 같은 종류가 된다. 단, aufs나 디렉토리로 구성된 컨테이너의 overayfs 스냅샷은 예외이다. -e가 지정되면, 원본 컨테이너의 임시 스냅샷이 생성되고 시작된다. 임시 컨테이너는 자신의 설정파일 안에 lxc.ephemeral = 1를 가지게 되며, 종료시에 제거된다. -e와 함께 -D를 같이 지정하면 원본 컨테이너의 영구적인 스냅샷이 생성되고 실행된다. -t를 지정하면, 임시 컨테이너는 tmpfs 상에 놓이게 된다. 주의: tmpfs 상에 놓인 임시 컨테이너는 재부팅시 모든 변경 사항이 사라진다. -e는 지정하고 -N으로 새이름을 지정하지 않으면, 무작위로 이름을 정한다. -e로 생성되고 실행되는 컨테이너들은 자신만의 마운트를 가질 수 있다. 이는 -m으로 지정된다. 현재 지원하는 마운트의 형식은 aufs, bind, overlay의 세 종류이다. 마운트 형식은 -m의 추가 인수로 지정된다. 그리고 쉼표(,)로 구분하여 여러번 지정할 수 있다. aufsoverlay 마운트는 현재 -m overlay=/src:/dest와 같이 지정한다. dest의 대상이 지정되지 않았다면 destsrc와 동일한 값을 가진다. 읽기 전용 bind 마운트는 -m bind=/src:/dest:ro로 읽기쓰기 가능 bind마운트는 -m bind=/src:/dest:rw로 지정한다. 읽기쓰기 가능 bind 마운트가 기본값이므로, 읽기쓰기 가능을 원한다면 rw은 빼도 무관하다. dest를 생략했다면 마찬가지로 destsrc와 같다. 여러번 마운트는 -m bind=/src1:/dest1:ro,bind=/src2:ro,overlay=/src3:/dest3와 같이 가능하다. -m를 통해 지원되는 마운트, 옵션, 형식은 변경될 수 있다. <!-- Options -->옵션 복사본의 이름 복사본의 경로 원본 컨테이너의 이름 변경 원본 컨테이너의 스냅샷을 생성한다. 복사본의 저장소는 반드시 스냅샷을 지원해야 한다. 현재 aufs, btrfs, lvm, overlay, zfs가 가능하다. 스냅샷을 포그라운드로 실행한다. 스냅샷 콘솔은 현재 tty에 붙게 된다. (이 옵션은 -e 옵션이랑만 사용 가능하다.) 데몬으로 스냅샷을 실행한다. (이는 임시 컨테이너의 기본 모드이다.) 오류가 발생하더라도 컨테이너가 tty를 가지지 않기 때문에 오류는 표시되지 않는다. 대신 로그 파일을 사용해 로그를 확인할 수 있다. 이 옵션은 -e 옵션이랑만 사용 가능하다.) 스냅샷의 마운트를 지정한다. 마운트 형식을 위한 opts 인자는 aufs, bind, overlay를 사용 가능하다. 예를 들면 이다. 이 옵션은 -e 옵션이랑만 사용 가능하다.) 이 옵션이 지정되면 임시 컨테이너는 tmpfs 상에 놓이게 된다. 주의: tmpfs 상에 놓인 임시 컨테이너는 재부팅시 모든 변경 사항이 사라진다. 이 옵션은 -e를 지정하여 임시 컨테이너를 생성할 때만 사용이 가능하다. 임시 스냅샷을 생성한 원본 컨테이너는 반드시 일반적인 디렉토리에 위치하고 있어야 한다. 복사본이 사용할 저장소의 형식을 지정한다. 'backingstorage'에는 'aufs', 'btrfs', 'dir', 'lvm', 'loop', 'overlay','zfs'이 사용 가능하다. 'lvm' 파일시스템의 크기를 지정한다. 이 옵션이 지정되면 원본 컨테이너의 호스트이름이 복사본에서도 그대로 유지된다. 이 옵션을 -e와 지정하면 영구적인 컨테이너가 생성되고 시작된다. 이 옵션이 지정되면 원본 컨테이너의 MAC 주소가 복사본에서도 그대로 유지된다. <!-- Copy hook -->복사 훅 복사되는 컨테이너에 lxc.hook.clone가 하나 이상 지정되어 있다면, 지정한 훅들은 새로운 컨테이너를 위해 실핼될 것이다. clone 훅에게 넘겨지는 처음 3개 인자들은 컨테이너 이름, 섹션 ('lxc'), 훅의 종류 ('clone')이 될 것이다. lxc-copy에 넘겨지는 추가 인자들은 훅 프로그램에 4번째 인자부터 넘겨지기 시작한다. LXC_ROOTFS_MOUNT 환경 변수는 컨테이너의 루트 파일시스템이 마운트되어 있는 경로를 담고 있다. 설정 파일의 경로 이름은 LXC_CONFIG_FILE에, 새 컨테이너의 이름은 LXC_NAME에, 원본 컨테이너의 이름은 LXC_SRC_NAME에, 그리고 루트 파일시스템이 위치하고 있는 경로나 디바이스는 LXC_ROOTFS_PATH에 각각 담겨 있다. &commonoptions; &seealso; <!-- Author -->저자 Christian Brauner christian.brauner@mailbox.org lxc-3.0.0/doc/ko/lxc-stop.sgml.in0000644061062106075000000002132513256572152013464 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-stop 1 lxc-stop 컨테이너 종료 lxc-stop -n name -W -r -t timeout -k --nokill --nolock <!-- Description -->설명 lxc-stop 는 재뷰탕, 종료, 또는 컨테이너 내의 모든 프로세스를 강제종료 시킨다. 기본 동작은 컨테이너에게 lxc.signal.halt 시그널(기본값은 SIGPWR)을 컨테이너 init 프로세스에게 날려, 컨테이너가 종료되게 요청하는 것이다. 60초 동안 컨테이너가 종료되는 것을 기다리고 리턴된다. 만약 컨테이너가 60초안에 종료되지 않는다면 lxc.signal.stop 시그널(기본값은 SIGKILL)을 날려 강제로 종료시킨다. 재부팅 요청시에는 lxc.signal.reboot 시그널(기본값은 SIGINT)를 컨테이너 init 프로세스에게 날린다. -W, -r, -s, -k, --nokill 옵션은 어떤 동작을 수행할지 지정한다. -Wlxc-stop가 동작 수행후 즉각적으로 종료되게 지정한다. -t TIMEOUT는 동작이 완료되기까지 기다릴 최대 시간을 지정한다. <!-- Options -->옵션 컨테이너 재부팅을 요청한다. 컨테이너가 깨끗이 종료되는 것 대신 명시적으로 컨테이너 내의 모든 작업들을 강제종료 시킨다. 이것은 이전 lxc-stop의 동작이다. 깨끗이 종료되도록 요청한다. 만약 종료가 실패하더라도 컨테이너 작업을 강제로 종료시키지 않는다. 이 옵션은 lxc API에서 락킹을 사용하지 않는다. lxc-stop이 잘못된 시스템 상태로 인해, 응답이 없게 되었을 경우에만 사용된다. 동작 수행(재부팅, 종료, 강제종료)을 요청하고 바로 죵료한다. 컨테이너를 강제종료 하기 전에 TIMEOUT 초 만큼 기다린다. <!-- Exit value -->종료 0 컨테이너가 성공적으로 종료됬다. 1 컨테이너를 종료하던 도중 오류가 발생하였다. 2 지정한 컨테이너가 있지만 실행되 있지는 않다. <!-- Diagnostic -->진단 The container was not found 지정한 컨테이너가 lxc-create로 생성된 적이 없다. 컨테이너가 존재하지 않는다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc.sgml.in0000644061062106075000000010217613256572152012505 00000000000000 ]> @LXC_GENERATE_DATE@ lxc 7 Version @PACKAGE_VERSION@ lxc Linux 컨테이너 <!-- Quick start -->빠른 도움말 man 페이지를 읽고 싶지는 않지만 서둘러서 해보고 싶다면, 된다고 보장할 수는 없지만, 미리정의된 설정파일로 컨테이너 내에서 쉘을 실행하는 아래 명령어를 소개하고자 한다. @BINDIR@/lxc-execute -n foo -f @DOCDIR@/examples/lxc-macvlan.conf /bin/bash <!-- Overview -->개요 컨테이너 기술은 리눅스 커널의 메인스트림에서 활발하게 개발이 진행되고 있다. 컨트롤 그룹(aka. 프로세스 컨테이너)을 통한 자원 관리와 네임스페이슬 통한 자원의 고립 기능을 제공한다. linux 컨테이너 (lxc)는 사용자영역 컨테이너 개체를 제공하는 새로운 기능을 사용하는 것을 목표로 하고 있다. 이 새로운 기능은 응용 프로그램이나 시스템에서 모든 자원의 격리와 제어를 제공한다. 이 프로젝트의 첫번째 목적은 컨테이너 프로젝트에 속해있는 커널 개발자들의 작업을 편하게 하며, 특히 새로운 기능인 Checkpoing/Restart에 대해 계속 작업을 진행해 나가는 것이다. lxc는 작지만, 컨테이너를 간단한 명령어를 통해 쉽게 관리할 수 있고, 다목적으로 사용되기에도 충분하다. <!-- Requirements -->요구사항 lxc는 커널이 제공하는 몇가지 기능들에 의존적이며, 해당 기능이 활성화되어 있어야 한다. 부족한 기능에 따라, 제한된 기능만이 동작하거나, 아예 동작을 안 할 수 있다. 아래 리스트는 컨테이너의 모든 기능을 사용하기 위해 활성화되어야 하는 커널 기능들이다. * General setup * Control Group support -> Namespace cgroup subsystem -> Freezer cgroup subsystem -> Cpuset support -> Simple CPU accounting cgroup subsystem -> Resource counters -> Memory resource controllers for Control Groups * Group CPU scheduler -> Basis for grouping tasks (Control Groups) * Namespaces support -> UTS namespace -> IPC namespace -> User namespace -> Pid namespace -> Network namespace * Device Drivers * Character devices -> Support multiple instances of devpts * Network device support -> MAC-VLAN support -> Virtual ethernet pair device * Networking * Networking options -> 802.1d Ethernet Bridging * Security options -> File POSIX Capabilities 배포판들에 포함된 3.10 이상의 커널에서는 lxc가 동작한다. 매우 작은 기능만 있지만 충분히 사용할 수 있다. lxc-checkconfig 스크립트를 사용하면 현재 커널 설정에 대한 정보를 얻을 수 있다. 컨트롤 그룹은 어디에든지 마운트될 수 있다. 예를 들어 mount -t cgroup cgroup /cgroup도 가능하다. 그러나 cgmanager, cgroup-lite 또는 systemd를 사용하여, /sys/fs/cgroup에 cgroup 계층구조를 마운트하는 것이 좋다. <!-- Functional specification -->기능 사양 컨테이너는 응용프로그램이나 시스템을 내부에서 실행시키기 위해, 호스트의 몇몇 자원들을 격리시키는 객체이다. 어플리케이션/시스템은 처음 생성될때 또는 시작 명령어의 인자로 넘겨주었던 설정을 기반으로 한 컨테이너 안에서 실행된다. 어떻게 컨테이너 내부에서 응용 프로그램을 실행하는가? 어플리케이션을 실행하기에 앞서, 고립시키고 싶은 자원을 먼저 알아야 한다. 기본 설정은 pid와 sysv ipc 그리고 마운트 포인트들을 고립시킨다. 만약에 간단한 쉘을 컨테이너 내부에서 실행시키기 원한다면, 특히 rootfs를 공유하고 싶다면 매우 기초적인 설정이 요구된다. sshd 같은 응용 프로그램을 실행시키고 싶다면, 새로운 네트워크 스택과 호스트네임을 제공해 주어야 한다. 만약 몇몇 파일들, 예를 들어, /var/run/httpd.pid이 충돌나는것을 막고 싶다면, /var/run를 빈 디렉토리로 다시 마운트하는 것이 필요하다. 모든 경우의 파일 충돌을 피하고 싶다면, 컨테이너를 위한 루트 파일시스템를 따로 지정해 줄 수도 있다. 루트 파일시스템은 미리 원래의 루트 파일시스템을 바인드 마운트한 디렉토리가 될 수도 있다. 이렇게 되면 자신만의 /etc, /home을 사용하면서도 배포판을 그대로 사용할 수 있다. 아래는 sshd를 사용하기 위한 디렉토리 트리 예제이다. [root@lxc sshd]$ tree -d rootfs rootfs |-- bin |-- dev | |-- pts | `-- shm | `-- network |-- etc | `-- ssh |-- lib |-- proc |-- root |-- sbin |-- sys |-- usr `-- var |-- empty | `-- sshd |-- lib | `-- empty | `-- sshd `-- run `-- sshd 그리고, 해당 마운트 포인트 파일의 내용은 아래와 같다. [root@lxc sshd]$ cat fstab /lib /home/root/sshd/rootfs/lib none ro,bind 0 0 /bin /home/root/sshd/rootfs/bin none ro,bind 0 0 /usr /home/root/sshd/rootfs/usr none ro,bind 0 0 /sbin /home/root/sshd/rootfs/sbin none ro,bind 0 0 어떻게 컨테이너 내에서 시스템을 실행하는가? 컨테이너 내에서 시스템을 실행하는 것은 역설적으로 어플리케이션을 실행하는 것보다 쉽다. 왜 그럴까? 왜냐하면, 어떤 자원이 고립되어야 하는지 고려할 필요가 없다. 모든 자원이 고립되면 된다. 자원들은 별다른 설정없이 고립된다고 지정만 해도 된다. 왜냐하면 컨테이너가 그 자원들을 세팅할 것이기 때문이다. 예를 들어 ipv4 주소는 시스템 컨테이너의 init 스크립트들을 통해 세팅된다. 아래는 마운트 포인트 파일의 예제이다. [root@lxc debian]$ cat fstab /dev /home/root/debian/rootfs/dev none bind 0 0 /dev/pts /home/root/debian/rootfs/dev/pts none bind 0 0 설정을 돕기 위해서 컨테이너에 부가 정보를 추가할 수 있다. 아래와 같이 호스트에 있는 resolv.conf를 컨테이너 안에서 접근할 수 있다. /etc/resolv.conf /home/root/debian/rootfs/etc/resolv.conf none bind 0 0 <!-- Container life cycle -->컨테이너의 생명주기 컨테이너가 생성될때, 컨테이너는 설정정보를 포함하게 된다. 프로세스가 실행될때, 컨테이너는 시작되고 실행된다. 컨테이너 내에서 실행되던 마지막 프로세스가 종료되면, 컨테이너는 종료된다. 컨테이너의 초기화가 실패했을 경우, (아래 그림처럼)중단 상태로 바뀌게 된다. <!-- Configuration -->설정 컨테이너는 설정파일에 의해서 설정된다. 설정파일의 형식은 다음을 참조하면 된다. lxc.conf 5 <!--Creating / Destroying container (persistent container) -->컨테이너의 생성/제거 (지속 컨테이너) 지속성 컨테이너 객체는 lxc-create 명령어로 생성된다. 컨테이너이름을 인수로 받으며, 부가적인 설정파일과 템플릿을 지정한다. 여기서 지정하는 이름은 다른 명령어들을 사용할 때 해당 컨테이너를 참조하기 위해 사용된다. lxc-destroy 명령어는 컨테이너 객체를 제거한다. lxc-create -n foo lxc-destroy -n foo <!-- Volatile container -->휘발성 컨테이너 컨테이너 시작전에 컨테이너 오브젝트를 생성하는 것이 의무는 아니다. 컨테이너는 설정파일을 파라미터로 넣어서 바로 시작할 수도 있다. <!-- Starting / Stopping container -->컨테이너의 시작과 종료 컨테이너가 생성하면 응용 프로그램/시스템이 실행될 준비를 마친 것이다. 실행하는 것이 바로 lxc-executelxc-start 명령어의 목적이다. 응용프로그램 시작전에 컨테이너가 생성되어 있지 않다면, 컨테이너는 명령어의 인수로 넘겼던 설정파일을 사용한다. 그런 인수마저 없다면, 기본 고립 환경을 사용한다. 만약 응용프로그램이 종료되면, 컨테이너도 역시 종료된다. 실행중인 응용프로그램을 종료시키고 싶다면 lxc-stop를 사용하면 된다. 컨테이너 내부에서 응용프로그램을 실행하는 것은 시스템을 실행하는 것과는 차이가 있다. 이런 이유로 아래의 두가지 명령어가 사용된다. lxc-execute -n foo [-f config] /bin/bash lxc-start -n foo [-f config] [/bin/bash] lxc-execute 명령어는 컨테이너 내부에서 lxc-init 프로세스를 통해 실행할 명령어를 지정할 수 있다. lxc-init는 지정한 명령어를 실행한 후, 그 명령어로 실행된 모든 프로세스들이 종료되기를 기다린다. (컨테이너 내부에서 데몬을 지원하기 위해서이다) 다시 말해서, 컨테이너 내부에서 lxc-init는 1번 pid를 갖고, 응용프로그램의 첫번째 프로세스는 2번 pid를 가진다. lxc-start 명령어는 지정한 명령어를 컨테이너 내에서 직접 실행한다. 첫 프로세스의 pid는 1번이다. 만약 어떤 명령어도 지정되지 않으면, lxc.init.cmd에 지정된 명령어를 실행한다. 이마저도 지정되있지 않으면, /sbin/init를 실행한다. 요약하자면, lxc-execute는 응용 프로그램 실행을 위해서, lxc-start는 시스템 실행을 위해 적합하다. 만약 어플리케이션이 더이상 응답하지 않거나, 접근이 불가능하거나, 스스로 종료되지 못할 경우, lxc-stop 명령어는 컨테이너 내의 모든 프로세스들을 가차없이 종료시킬 것이다. lxc-stop -n foo <!-- Connect to an available tty -->사용가능한 tty 접속 컨테이너에 tty가 설정되어 있다면, tty를 통해 컨테이너에 접근할 수 있다. 아래 명령어를 통해 사용될 가능한 tty를 제공하는 것은 컨테이너에 달려있다. tty가 종료되었을 때는 다시 로그인하지 않고도 재접속할 수 있다. lxc-console -n foo -t 3 <!-- Freeze / Unfreeze container -->컨테이너 동결/동결 해제 스케줄링 등을 위해 컨테이너에 속해있는 모든 프로세스를 정지 시키는 것은 때로 유용할 수 있다. 아래 명령어들을 사용하면 된다. lxc-freeze -n foo 는 모든 프로세스들을 인터럽트 불가능한 상태로 만든다. lxc-unfreeze -n foo 는 모든 프로세스를 정지 해제 시킨다. 이 기능은 커널에서 cgroup freezer 기능이 활성화 되어 있어야 사용 가능하다. <!-- Getting information about container --> 컨테이너 관련 정보 얻어오기 컨테이너가 많이 존재하는 경우, 어떤 것이 생성되고 제거됬는지, 어떤 것이 실행 중인지 또는 어떤 프로세스들이 특정 컨테이너 내에서 실행되는지를 따라가기 힘들다. 이를 위해 다음과 같은 명령어들이 유용하게 사용될 수 있다. lxc-ls lxc-info -n foo lxc-ls는 시스템의 컨테이너들의 리스트를 표시한다. lxc-info는 지정한 컨테이너의 정보를 얻어온다. 아래는 명령어들을 조합하여 컨테이너들의 리스트를 얻어오고 상태를 출력하는 예제이다. for i in $(lxc-ls -1); do lxc-info -n $i done <!-- Monitoring container -->컨테이너 모니터링 컨테이너의 상태를 추적하는 것은 때때로 매우 유용하다. 예를 들어, 상태를 모니터링하거나, 스크립트에서 특정상태를 기다리는 경우이다. lxc-monitor 명령어는 하나 또는 여러개의 컨테이너들을 모니터링한다. 이 명령어의 인수로 정규표현식을 넘길 수도 있다. 예를 들면, lxc-monitor -n "foo|bar" 는 'foo'와 'bar'라는 이름의 컨테이너의 상태 변화를 모니터링한다. 그리고, lxc-monitor -n ".*" 는 모든 컨테이너를 모니터링한다. 'foo' 컨테이너가 시작되고 몇 가지 작업을 수행하고 종료된 경우, 출력은 다음과 같다. 'foo' changed state to [STARTING] 'foo' changed state to [RUNNING] 'foo' changed state to [STOPPING] 'foo' changed state to [STOPPED] lxc-wait 명령어는 지정한 상태로 변화되는 것을 기다린다. 이 명령어는 컨테이너의 시작이나 종료와 동기화되는 스크립트를 작성할 때 유용하다. 인수는 다른 상태들을 OR로 묶어서 지정해 줄 수 있다. 아래 예제는 백그라운드에서 어떻게 컨테이너의 상태 변화를 기다리는지 보여준다. <!-- Setting the control group for container --> 컨테이너 컨트롤 그룹 설정 컨테이너는 컨트롤 그룹과 결합되어 있다. 컨테이너가 시작되면 컨트롤그룹이 만들어지고 해당 컨트롤 그룹과 연결된다. 컨테이너가 실행중일 때, lxc-cgroup 명령어를 이용해 컨트롤 그룹 속성은 읽거나 수정될 수 있다. lxc-cgroup 명령어는 컨테이너와 연결된 컨트롤 그룹 서브시스템의 값을 얻어오거나 설정한다. 서브시스템의 이름은 사용자가 결정하며, 이 명령어는 이름이 적합한지 여부를 검사하지 않는다. 만약 서브시스템의 이름이 없다면 명령어는 실패할 것이다. lxc-cgroup -n foo cpuset.cpus 는 해당 서브시스템의 내용을 표시한다. lxc-cgroup -n foo cpu.shares 512 는 해당 서브시스템의 값을 설정한다. <!-- Bugs -->버그 lxc는 아직 개발중이다. 그래서 명령어 사용법이나, API가 변경될 수 있다. 버전 1.0.0은 변경되지 않는 고정된 버전이다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-info.sgml.in0000644061062106075000000001667713256572152013450 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-info 1 lxc-info 컨테이너의 정보 조회 lxc-info -n name -c KEY -s -p -i -S -H <!-- Description -->설명 lxc-info는 컨테이너에 대한 정보를 조회하고 표시한다. <!-- Options --> 컨테이너의 설정값을 표시한다. 이 옵션은 1개 이상의 key = value 쌍을 표시할 수 있다. 컨테이너의 상태를 표시한다. 컨테이너의 pid를 표시한다. (역주 : 컨테이너 내의 init 프로세스를 의미한다) 컨테이너의 IP 주소를 표시한다. 컨테이너의 통계정보를 표시한다. 성능상의 이유로, 커널 메모리 제한이 걸려있지 않다면 커널의 메모리 사용량은 집계되지 않는다. 만약 제한되어 있지 않다면, lxc-info는 커널 메모리 사용량을 0으로 표시한다. 메모리 제한은 lxc.cgroup.memory.kmem.limit_in_bytes = number 를 컨테이너 설정파일에 넣음으로써 지정할 수 있다. lxc.conf 5 를 참고 바란다. 컨테이너의 통계값을 사람이 읽기 쉬운 형태로 변환하지 않고 그대로 표시한다. 기본값은 사람이 읽기 쉬운 형태로 변환하는 것이다. &commonoptions; <!-- Examples -->예제 lxc-info -n foo foo 라는 이름의 컨테이너 정보를 표시한다. lxc-info -n 'ubuntu.*' ubuntu 라는 문자열로 시작하는 이름의 컨테이너들의 정보를 표시한다. lxc-info -n foo -c lxc.net.0.veth.pair foo 컨테이너의 veth pair 이름을 표시한다. &seealso; <!-- Author -->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-top.sgml.in0000644061062106075000000001613013256572152013277 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-top 1 lxc-top 컨테이너의 통계정보 표시 lxc-top --help --delay delay --sort sortby --reverse <!-- Description -->설명 lxc-top는 컨테이너의 통계정보를 표시한다. 출력은 매 delay초마다 갱신된다. 그리고 sortby로 지정한 항목에 대하여 정렬을 수행한다. lxc-top명령어는 현재 터미널의 크기에 맞게 가능한 많은 컨테이너를 표시한다. 'q'를 누르면 나갈 수 있다. 정렬 항목의 문자를 입력하면 그 항목에 대해 정렬한다. 해당 문자를 두번 입력하면 정렬 순서가 바뀐다. <!-- Options -->옵션 화면을 갱신하는 시간을 초단위로 지정한다. 기본값은 3초이다. 이름, CPU 사용량, 메모리 사용량에 대해 정렬한다. sortby 인수에는 최소한 한개의 n, c, b, m, k 문자가 있어야 하며, 각각 CPU 사용량, 블록 I/O, 메모리 사용량, 커널 메모리 사용량을 가리킨다. 기본값은 'n'이다. 정렬 순서를 바꾼다. 기본 동작은, 이름은 오름차순 알파벳 정렬이고 값은 내림차순 정렬(큰 값이 먼저)이다. <!-- Example -->예제 lxc-top --delay 1 --sort m 컨테이너를 1초마다 갱신하면서, 메모리 사용량으로 정렬해서 표시한다. <!-- Notes -->주의 성능상의 이유로, 커널 메모리 제한이 걸려있지 않다면 커널 메모리 사용량을 집계하지 않는다. 메모리 제한이 걸려있지 않다면, lxc-top는 커널 메모리 사용량을 0으로 표시한다. 만약 집계되는 컨테이너가 하나도 없다면, KMem 열은 표시되지 않는다. 메모리 제한은 lxc.cgroup.memory.kmem.limit_in_bytes = number 으로 컨테이너 설정파일에서 지정할 수 있다. lxc.conf 5 를 참고하면 된다. &seealso; <!-- Author -->저자 Dwight Engen dwight.engen@oracle.com lxc-3.0.0/doc/ko/FAQ.txt0000644061062106075000000000300613256572152011566 00000000000000 Troubleshooting: =============== Error: ------ error while loading shared libraries reported after sudo make install and when trying to run lxc-execute. "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" /usr/local/bin/lxc-execute: error while loading shared libraries: liblxc-0.5.0.so: cannot open shared object file: No such file or directory Answer: ------- update the ld cache by running ldconfig. Error: ------ error when starting a container. "lxc-start Invalid argument" "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" "[syserr] lxc_start:96: Invalid argument - failed to fork into a new namespace" Answer: ------- read the lxc man page about kernel version prereq :) most probably your kernel is not configured to support the container options you want to use. Error: ------ On Ubuntu 8.10, if using the cvs source code rather than the provided tarball. Then make is failing with many errors similar to the line below: ========== ../../libtool: line 810: X--tag=CC: command not found ========== Answer: ------- This is related to a compatibility problem between the shipped config/ltmain.sh and the libtool version installed on your Ubuntu 8.10 machine. You have to replace the config/ltmain.sh from cvs head by the one from your libtool package, make some cleaning and reissue all the build process: ========== cd cp -f /usr/share/libtool/config/ltmain.sh config/ rm -f libtool ./bootstrap && ./configure && make && sudo make install ========== lxc-3.0.0/doc/ko/lxc-autostart.sgml.in0000644061062106075000000003705013256572152014527 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-autostart 1 lxc-autostart 자동시작하게 설정된 컨테이너의 시작/종료/강제종료 lxc-autostart -k -L -r -s -a -A -g groups -t timeout <!-- Description -->설명 lxc-autostart는 lxc.start.auto가 설정되어 있는 컨테이너들을 다룬다. 사용자가 컨테이너의 시작, 종료, 강제종료, 재시작의 순서와 대기 시간을 정할 수 있게 해준다. lxc.group으로 필터링하거나 모든 정의된 컨테이너를 실행하는 등의 동작을 지원한다. 또한 리스트 모드를 통해 외부 툴이 이를 사용할 수 있고, 대상 컨테이너의 리스트와 대기시간 등을 얻어올 수 있다. -r, -s, -k 옵션은 어떤 동작을 수행할지 지정해 줄 수 있다. 만약 아무것도 지정하지 않았다면, 컨테이너를 시작한다. -a, -g는 어떤 컨테이너를 대상으로 할지 지정한다. 기본적으로 lxc.group가 지정되지 않은 컨테이너들이 대상이 된다. -t TIMEOUT은 컨테이너가 종료나 재부팅을 마칠 때까지 기다릴 최대 시간을 지정한다. <!-- Options -->옵션 컨테이너가 재부팅하도록 요청한다. 깔끔한 종료를 요청한다. 만약 -t timeout가 0보다 크고 컨테이너가 그 기간안에 종료되지 않는다면 -k kill 옵션과 같은 동작을 수행하여 강제종료 한다. 깔끔한 종료를 요청하는 것이 아니라 컨테이너의 모든 태스크들을 명시적으로 강제종료 시킨다. 실제 동작은 수행하지 않고, 단지 컨테이너의 이름과 다음 컨테이너를 시작할 때까지의 대기시간들을 표시한다. 컨테이너가 강제종료되기 전까지 TIMEOUT 초만큼 기다린다. 쉼표(,)로 구분된 선택할 그룹의 리스트. (기본값은 lxc.group이 없는 것이다 - NULL 그룹) 이 옵션은 여러번 지정될 수 있으며, 각 옵션들은 연결될 수 있다. NULL 또는 빈 그룹은 첫번째 쉼표, 맨 뒤의 쉼표, 두개의 쉼표 등으로 지정할 수 있다. 그룹들은 지정한 순서대로 처리된다. 여러번 호출된 -g 옵션과 콤마로 구분된 목록들은 자유롭게 혼용하여 사용 할 수 있다. lxc.group를 무시하고 모든 자동 시작하게 설정된 컨테이너들을 선택한다. lxc.start.auto 옵션을 무시하고 시스템의 모든 컨테이너를 선택한다. <!-- Autostart and System Boot -->자동시작과 시스템 부팅 부팅과 종료시 호스트의 시스>템에서 실행되도록 활성화 되어있을 때, lxc-autostart 명령어는 LXC 시스템 서비스의 일부로 사용된다. 어떤 컨테이너를 어떤 순서로 얼마만큼 간격을 두어 시작할지 선택하는데 사용된다. 각각의 컨테이너는 여러 그룹에 속할수도 있고 아무그룹에도 속하지 않을 수 있다. 두개의 그룹은 특수한데, 하나는 NULL 그룹이고 컨테이너가 아무그룹에도 속하지 않을때 사용된다. 그리고 나머지 하나는 "onboot" 그룹이다. LXC 서비스가 활성화된 상태로 시스템이 부팅될 때, 먼저 lxc.start.auto == 1이고 "onboot" 그룹인 컨테이너들을 시작하려고 시도한다. 시작과정은 lxc.start.order의 순서대로 이루어진다. 만약 lxc.start.delay가 지정 되었다면, 다음 컨테이너를 시작하려고 시도하기 전, 현재 컨테이너의 초기화 및 호스트 시스템의 부하를 줄이기 위해서 지연시간을 준다. "onboot" 그룹의 멤버들을 시작시킨 후, LXC 시스템은 lxc.start.auto == 1이고 어떤 그룹에도 속하지 않은(NULL 그룹) 컨테이너들을 시작한다. <!-- Startup Group Examples -->시작 그룹 예제 먼저 "onboot" 그룹을 실행하고 NULL 그룹을 실행한다. 이것은 다음과 같다 : 첫번째로 dns 그룹을 실행하고, web 그룹을 두번째로 실행하고, NULL그룹을 실행한 뒤, "onboot" 그룹을 실행한다. 이것은 다음과 같다 : 또는 &seealso; <!--Author-->저자 Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/ko/lxc-usernet.sgml.in0000644061062106075000000001515613256572152014171 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernet 5 lxc-usernet 비특권 사용자의 네트워크 관리용 설정파일 <!-- Description -->설명 @LXC_USERNIC_CONF@로 비특권 사용자가 lxc-user-nic 명령어로 네트워크 인터페이스를 만들 때, 제한을 걸 수 있다. <!-- Configuration -->설정 이 파일은 아래와 같은 형식의 한 줄로 이루어진 여러 항목들로 구성되어 있다. user type bridge number 또는 아래의 형식을 사용할 수 있다. @group type bridge number 여기서 각 항목들은 다음과 같은 의미를 가진다. 이 항목이 적용될 사용자 이름을 가리킨다. 이 항목이 적용될 그룹 이름을 가리킨다. 허용되는 네트워크 인터페이스 형태를 가리킨다. veth만 지원된다. 네트워크 인터페이스들을 붙일 수 있는 브리지를 가리킨다. 예를 들어 lxcbr0로 지정 가능하다. 지정한 사용자 또는 그룹이 지정된 브리지에 붙일 수 있는 지정된 형태의 네트워크 인터페이스 개수를 가리킨다. 예를 들어 2로 지정 가능하다. 사용자는 사용자 이름이나 하나 이상의 사용자 그룹을 통해 지정될 수 있으므로, 여러 줄의 설정을 통해 사용자가 네트워크 인터페이스들을 생성할 수 있도록 하는 것이 가능하다. 이러한 경우, 인터페이스 생성은 파일 상의 순서대로 사용자 또는 그룹의 사용량에 집계된다. 만약 해당 줄에서 할당한 개수가 가득차면, 또다른 설정이 발견되거나 파일의 끝에 도달할 때까지 행을 계속 읽어들인다. <!-- See Also -->참조 lxc 1 , lxc-user-nic 1 <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/ko/lxc-console.sgml.in0000644061062106075000000001516413256572152014145 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-console 1 lxc-console 지정한 컨테이너의 콘솔 실행 lxc-console -n name -e escape character -t ttynum <!-- Description -->설명 만약 파라미터로 지정한 컨테이너의 tty 서비스가 제대로 설정되어 있고 사용가능한 상태라면, 이 명령어는 컨테이너에 로그인 할 수 있는 콘솔을 실행한다. 사용가능한 tty는 이 명령어로 얻어올 수 있는 빈 슬롯을 의미한다. 즉, 만약 컨테이너가 4개의 tty가 사용가능하고 명령어가 4번 실행하여 각각 다른 tty를 얻어왔다면, 다섯번째 명령은 실패할 것이다. 왜냐하면 가능한 콘솔이 없기 때문이다. 명령어는 tty에 연결한다. 연결이 끊어지면, 명령어는 다시 실행되어 연결 끊기기 이전 상태에서 tty를 얻어오려고 시도한다. ttynum가 0으로 지정되어 있으면, 컨테이너의 /dev/console에 연결한다. 그렇지 않으면 dev/tty<ttynum>에 연결한다. tty 접속을 끊고 lxc-console을 나가고 싶다면 키보드 이스케이프 키를 이용하면 된다. 기본키는 <Ctrl+a q>이다. <!-- Options -->옵션 <Ctrl a> 대신에 사용할 이스케이프 키 prefix를 지정한다. '^문자' 또는 '문자'로 지정 가능하다. 예를 들어 <Ctrl+b q>를 사용하고 싶다면, -e '^b'와 같이 지정하면 된다. 연결하고자 하는 tty의 번호 또는 콘솔 연결을 위해 0을 지정한다. 지정하지 않으면, 다음으로 사용가능한 tty 번호를 컨테이너가 자동으로 선택한다. &commonoptions; <!-- Diagnostic -->진단 tty service denied 사용가능한 tty가 없거나 콘솔을 사용하기에 충분한 privilege가 없다. 예를 들면, 컨테이너가 "foo" 사용자 소유인데 "bar"가 콘솔을 열려고 하는 경우이다. &seealso; <!-- Author -->저자 Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-wait.sgml.in0000644061062106075000000000715513256572152013037 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-wait 1 lxc-wait wait for a specific container state lxc-wait -n name -s states Description lxc-wait waits for a specific container state before exiting, this is useful for scripting. Options Specify the container state(s) to wait for. The container states can be ORed to specify several states. Wait timeout seconds for desired state to be reached. &commonoptions; Examples lxc-wait -n foo -s RUNNING exits when 'RUNNING' is reached. lxc-wait -n foo -s 'RUNNING|STOPPED' exits when 'RUNNING' or 'STOPPED' state is reached. Diagnostic The container was not found The specified container was not created before with the lxc-create command. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-cgroup.sgml.in0000644061062106075000000001000713256572152013360 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-cgroup 1 lxc-cgroup manage the control group associated with a container lxc-cgroup -n name state-object value Description lxc-cgroup gets or sets the value of a state-object (e.g., 'cpuset.cpus') in the container's cgroup for the corresponding subsystem (e.g., 'cpuset'). If no value is specified, the current value of the state-object is displayed; otherwise it is set. Note that lxc-cgroup does not check that the state-object is valid for the running kernel, or that the corresponding subsystem is contained in any mounted cgroup hierarchy. Options Specify the state object name. Specify the value to assign to the state object. &commonoptions; Examples lxc-cgroup -n foo devices.list display the allowed devices to be used. lxc-cgroup -n foo cpuset.cpus "0,3" assign the processors 0 and 3 to the container. Diagnostic The container was not found The container is not running. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc.container.conf.sgml.in0000644061062106075000000030302513256572152014775 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.container.conf 5 lxc.container.conf LXC container configuration file Description LXC is the well-known and heavily tested low-level Linux container runtime. It is in active development since 2008 and has proven itself in critical production environments world-wide. Some of its core contributors are the same people that helped to implement various well-known containerization features inside the Linux kernel. LXC's main focus is system containers. That is, containers which offer an environment as close as possible as the one you'd get from a VM but without the overhead that comes with running a separate kernel and simulating all the hardware. This is achieved through a combination of kernel security features such as namespaces, mandatory access control and control groups. LXC has supports unprivileged containers. Unprivileged containers are containers that are run without any privilege. This requires support for user namespaces in the kernel that the container is run on. LXC was the first runtime to support unprivileged containers after user namespaces were merged into the mainline kernel. In essence, user namespaces isolate given sets of UIDs and GIDs. This is achieved by establishing a mapping between a range of UIDs and GIDs on the host to a different (unprivileged) range of UIDs and GIDs in the container. The kernel will translate this mapping in such a way that inside the container all UIDs and GIDs appear as you would expect from the host whereas on the host these UIDs and GIDs are in fact unprivileged. For example, a process running as UID and GID 0 inside the container might appear as UID and GID 100000 on the host. The implementation and working details can be gathered from the corresponding user namespace man page. UID and GID mappings can be defined with the key. Linux containers are defined with a simple configuration file. Each option in the configuration file has the form key = value fitting in one line. The "#" character means the line is a comment. List options, like capabilities and cgroups options, can be used with no value to clear any previously defined values of that option. LXC namespaces configuration keys by using single dots. This means complex configuration keys such as expose various subkeys such as , , , and others for even more fine-grained configuration. Configuration In order to ease administration of multiple related containers, it is possible to have a container configuration file cause another file to be loaded. For instance, network configuration can be defined in one common file which is included by multiple containers. Then, if the containers are moved to another host, only one file may need to be updated. Specify the file to be included. The included file must be in the same valid lxc configuration file format. Architecture Allows one to set the architecture for the container. For example, set a 32bits architecture for a container running 32bits binaries on a 64bits host. This fixes the container scripts which rely on the architecture to do some work like downloading the packages. Specify the architecture for the container. Some valid options are , , , Hostname The utsname section defines the hostname to be set for the container. That means the container can set its own hostname without changing the one from the system. That makes the hostname private for the container. specify the hostname for the container Halt signal Allows one to specify signal name or number sent to the container's init process to cleanly shutdown the container. Different init systems could use different signals to perform clean shutdown sequence. This option allows the signal to be specified in kill(1) fashion, e.g. SIGPWR, SIGRTMIN+14, SIGRTMAX-10 or plain number. The default signal is SIGPWR. specify the signal used to halt the container Reboot signal Allows one to specify signal name or number to reboot the container. This option allows signal to be specified in kill(1) fashion, e.g. SIGTERM, SIGRTMIN+14, SIGRTMAX-10 or plain number. The default signal is SIGINT. specify the signal used to reboot the container Stop signal Allows one to specify signal name or number to forcibly shutdown the container. This option allows signal to be specified in kill(1) fashion, e.g. SIGKILL, SIGRTMIN+14, SIGRTMAX-10 or plain number. The default signal is SIGKILL. specify the signal used to stop the container Init command Sets the command to use as the init system for the containers. Absolute path from container rootfs to the binary to run by default. This mostly makes sense for lxc-execute. Absolute path from container rootfs to the binary to use as init. This mostly makes sense for lxc-start. Default is /sbin/init. Init working directory Sets the absolute path inside the container as the working directory for the containers. LXC will switch to this directory before executing init. Absolute path inside the container to use as the working directory. Init ID Sets the UID/GID to use for the init system, and subsequent commands. Note that using a non-root UID when booting a system container will likely not work due to missing privileges. Setting the UID/GID is mostly useful when running application containers. Defaults to: UID(0), GID(0) UID to use for init. GID to use for init. Proc Configure proc filesystem for the container. Specify the proc file name to be set. The file name available are those listed under /proc/PID/. Example: lxc.proc.oom_score_adj = 10 Ephemeral Allows one to specify whether a container will be destroyed on shutdown. The only allowed values are 0 and 1. Set this to 1 to destroy a container on shutdown. Network The network section defines how the network is virtualized in the container. The network virtualization acts at layer two. In order to use the network virtualization, parameters must be specified to define the network interfaces of the container. Several virtual interfaces can be assigned and used in a container even if the system has only one physical network interface. may be used without a value to clear all previous network options. specify what kind of network virtualization to be used for the container. Multiple networks can be specified by using an additional index after all keys. For example, and specify two different networks of the same type. All keys sharing the same index will be treated as belonging to the same network. For example, will belong to . Currently, the different virtualization types can be: will cause the container to share the host's network namespace. This means the host network devices are usable in the container. It also means that if both the container and host have upstart as init, 'halt' in a container (for instance) will shut down the host. will create only the loopback interface. a virtual ethernet pair device is created with one side assigned to the container and the other side attached to a bridge specified by the option. If the bridge is not specified, then the veth pair device will be created but not attached to any bridge. Otherwise, the bridge has to be created on the system before starting the container. lxc won't handle any configuration outside of the container. By default, lxc chooses a name for the network device belonging to the outside of the container, but if you wish to handle this name yourselves, you can tell lxc to set a specific name with the option (except for unprivileged containers where this option is ignored for security reasons). a vlan interface is linked with the interface specified by the and assigned to the container. The vlan identifier is specified with the option . a macvlan interface is linked with the interface specified by the and assigned to the container. specifies the mode the macvlan will use to communicate between different macvlan on the same upper device. The accepted modes are , , and . In mode, the device never communicates with any other device on the same upper_dev (default). In mode, the new Virtual Ethernet Port Aggregator (VEPA) mode, it assumes that the adjacent bridge returns all frames where both source and destination are local to the macvlan port, i.e. the bridge is set up as a reflective relay. Broadcast frames coming in from the upper_dev get flooded to all macvlan interfaces in VEPA mode, local frames are not delivered locally. In mode, it provides the behavior of a simple bridge between different macvlan interfaces on the same port. Frames from one interface to another one get delivered directly and are not sent out externally. Broadcast frames get flooded to all other bridge ports and to the external interface, but when they come back from a reflective relay, we don't deliver them again. Since we know all the MAC addresses, the macvlan bridge mode does not require learning or STP like the bridge module does. In mode, all frames received by the physical interface are forwarded to the macvlan interface. Only one macvlan interface in mode is possible for one physical interface. an already existing interface specified by the is assigned to the container. Specify an action to do for the network. activates the interface. Specify the interface to be used for real network traffic. Specify the maximum transfer unit for this interface. The interface name is dynamically allocated, but if another name is needed because the configuration files being used by the container use a generic name, eg. eth0, this option will rename the interface in the container. The interface mac address is dynamically allocated by default to the virtual interface, but in some cases, this is needed to resolve a mac address conflict or to always have the same link-local ipv6 address. Any "x" in address will be replaced by random value, this allows setting hwaddr templates. Specify the ipv4 address to assign to the virtualized interface. Several lines specify several ipv4 addresses. The address is in format x.y.z.t/m, eg. 192.168.1.123/24. Specify the ipv4 address to use as the gateway inside the container. The address is in format x.y.z.t, eg. 192.168.1.123. Can also have the special value , which means to take the primary address from the bridge interface (as specified by the option) and use that as the gateway. is only available when using the and network types. Specify the ipv6 address to assign to the virtualized interface. Several lines specify several ipv6 addresses. The address is in format x::y/m, eg. 2003:db8:1:0:214:1234:fe0b:3596/64 Specify the ipv6 address to use as the gateway inside the container. The address is in format x::y, eg. 2003:db8:1:0::1 Can also have the special value , which means to take the primary address from the bridge interface (as specified by the option) and use that as the gateway. is only available when using the and network types. Add a configuration option to specify a script to be executed after creating and configuring the network used from the host side. In addition to the information available to all hooks. The following information is provided to the script: LXC_HOOK_TYPE: the hook type. This is either 'up' or 'down'. LXC_HOOK_SECTION: the section type 'net'. LXC_NET_TYPE: the network type. This is one of the valid network types listed here (e.g. 'macvlan', 'veth'). LXC_NET_PARENT: the parent device on the host. This is only set for network types 'mavclan', 'veth', 'phys'. LXC_NET_PEER: the name of the peer device on the host. This is only set for 'veth' network types. Note that this information is only available when is set to 1. Whether this information is provided in the form of environment variables or as arguments to the script depends on the value of . If set to 1 then information is provided in the form of environment variables. If set to 0 information is provided as arguments to the script. Standard output from the script is logged at debug level. Standard error is not logged, but can be captured by the hook redirecting its standard error to standard output. Add a configuration option to specify a script to be executed before destroying the network used from the host side. In addition to the information available to all hooks. The following information is provided to the script: LXC_HOOK_TYPE: the hook type. This is either 'up' or 'down'. LXC_HOOK_SECTION: the section type 'net'. LXC_NET_TYPE: the network type. This is one of the valid network types listed here (e.g. 'macvlan', 'veth'). LXC_NET_PARENT: the parent device on the host. This is only set for network types 'mavclan', 'veth', 'phys'. LXC_NET_PEER: the name of the peer device on the host. This is only set for 'veth' network types. Note that this information is only available when is set to 1. Whether this information is provided in the form of environment variables or as arguments to the script depends on the value of . If set to 1 then information is provided in the form of environment variables. If set to 0 information is provided as arguments to the script. Standard output from the script is logged at debug level. Standard error is not logged, but can be captured by the hook redirecting its standard error to standard output. New pseudo tty instance (devpts) For stricter isolation the container can have its own private instance of the pseudo tty. If set, the container will have a new pseudo tty instance, making this private to it. The value specifies the maximum number of pseudo ttys allowed for a pts instance (this limitation is not implemented yet). Container system console If the container is configured with a root filesystem and the inittab file is setup to use the console, you may want to specify where the output of this console goes. Setting this option instructs liblxc to allocate an in-memory ringbuffer. The container's console output will be written to the ringbuffer. Note that ringbuffer must be at least as big as a standard page size. When passed a value smaller than a single page size liblxc will allocate a ringbuffer of a single page size. A page size is usually 4kB. The keyword 'auto' will cause liblxc to allocate a ringbuffer of 128kB. When manually specifying a size for the ringbuffer the value should be a power of 2 when converted to bytes. Valid size prefixes are 'kB', 'MB', 'GB'. (Note that all conversions are based on multiples of 1024. That means 'kb' == 'KiB', 'MB' == 'MiB', 'GB' == 'GiB'.) Setting this option instructs liblxc to place a limit on the size of the console log file specified in . Note that size of the log file must be at least as big as a standard page size. When passed a value smaller than a single page size liblxc will set the size of log file to a single page size. A page size is usually 4kB. The keyword 'auto' will cause liblxc to place a limit of 128kB on the log file. When manually specifying a size for the log file the value should be a power of 2 when converted to bytes. Valid size prefixes are 'kB', 'MB', 'GB'. (Note that all conversions are based on multiples of 1024. That means 'kb' == 'KiB', 'MB' == 'MiB', 'GB' == 'GiB'.) If users want to mirror the console ringbuffer on disk they should set equal to . Specify a path to a file where the console output will be written. Note that in contrast to the on-disk ringbuffer logfile this file will keep growing potentially filling up the users disks if not rotated and deleted. This problem can also be avoided by using the in-memory ringbuffer options and . Whether to rotate the console logfile specified in . Users can send an API request to rotate the logfile. Note that the old logfile will have the same name as the original with the suffix ".1" appended. Users wishing to prevent the console log file from filling the disk should rotate the logfile and delete it if unneeded. This problem can also be avoided by using the in-memory ringbuffer options and . Specify a path to a device to which the console will be attached. The keyword 'none' will simply disable the console. Note, when specifying 'none' and creating a device node for the console in the container at /dev/console or bind-mounting the hosts's /dev/console into the container at /dev/console the container will have direct access to the hosts's /dev/console. This is dangerous when the container has write access to the device and should thus be used with caution. Console through the ttys This option is useful if the container is configured with a root filesystem and the inittab file is setup to launch a getty on the ttys. The option specifies the number of ttys to be available for the container. The number of gettys in the inittab file of the container should not be greater than the number of ttys specified in this option, otherwise the excess getty sessions will die and respawn indefinitely giving annoying messages on the console or in /var/log/messages. Specify the number of tty to make available to the container. Console devices location LXC consoles are provided through Unix98 PTYs created on the host and bind-mounted over the expected devices in the container. By default, they are bind-mounted over /dev/console and /dev/ttyN. This can prevent package upgrades in the guest. Therefore you can specify a directory location (under /dev under which LXC will create the files and bind-mount over them. These will then be symbolically linked to /dev/console and /dev/ttyN. A package upgrade can then succeed as it is able to remove and replace the symbolic links. Specify a directory under /dev under which to create the container console devices. Note that LXC will move any bind-mounts or device nodes for /dev/console into this directory. /dev directory By default, lxc creates a few symbolic links (fd,stdin,stdout,stderr) in the container's /dev directory but does not automatically create device node entries. This allows the container's /dev to be set up as needed in the container rootfs. If lxc.autodev is set to 1, then after mounting the container's rootfs LXC will mount a fresh tmpfs under /dev (limited to 500k) and fill in a minimal set of initial devices. This is generally required when starting a container containing a "systemd" based "init" but may be optional at other times. Additional devices in the containers /dev directory may be created through the use of the hook. Set this to 0 to stop LXC from mounting and populating a minimal /dev when starting the container. Mount points The mount points section specifies the different places to be mounted. These mount points will be private to the container and won't be visible by the processes running outside of the container. This is useful to mount /etc, /var or /home for examples. NOTE - LXC will generally ensure that mount targets and relative bind-mount sources are properly confined under the container root, to avoid attacks involving over-mounting host directories and files. (Symbolic links in absolute mount sources are ignored) However, if the container configuration first mounts a directory which is under the control of the container user, such as /home/joe, into the container at some path, and then mounts under path, then a TOCTTOU attack would be possible where the container user modifies a symbolic link under his home directory at just the right time. specify a file location in the fstab format, containing the mount information. The mount target location can and in most cases should be a relative path, which will become relative to the mounted container root. For instance, proc proc proc nodev,noexec,nosuid 0 0 Will mount a proc filesystem under the container's /proc, regardless of where the root filesystem comes from. This is resilient to block device backed filesystems as well as container cloning. Note that when mounting a filesystem from an image file or block device the third field (fs_vfstype) cannot be auto as with mount 8 but must be explicitly specified. Specify a mount point corresponding to a line in the fstab format. Moreover lxc supports mount propagation, such as rslave or rprivate, and adds three additional mount options. don't fail if mount does not work. or to create dir (or file) when the point will be mounted. source path is taken to be relative to the mounted container root. For instance, dev/null proc/kcore none bind,relative 0 0 Will expand dev/null to ${}/dev/null, and mount it to proc/kcore inside the container. specify which standard kernel file systems should be automatically mounted. This may dramatically simplify the configuration. The file systems are: (or ): mount /proc as read-write, but remount /proc/sys and /proc/sysrq-trigger read-only for security / container isolation purposes. : mount /proc as read-write (or ): mount /sys as read-only but with /sys/devices/virtual/net writable. : mount /sys as read-only for security / container isolation purposes. : mount /sys as read-write : Mount a tmpfs to /sys/fs/cgroup, create directories for all hierarchies to which the container is added, create subdirectories in those hierarchies with the name of the cgroup, and bind-mount the container's own cgroup into that directory. The container will be able to write to its own cgroup directory, but not the parents, since they will be remounted read-only. : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. : similar to , but everything will be mounted read-only. : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. : similar to , but everything will be mounted read-write. Note that the paths leading up to the container's own cgroup will be writable, but will not be a cgroup filesystem but just part of the tmpfs of /sys/fs/cgroup : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. (without specifier): defaults to if the container retains the CAP_SYS_ADMIN capability, otherwise. : mount a tmpfs to /sys/fs/cgroup, create directories for all hierarchies to which the container is added, bind-mount the hierarchies from the host to the container and make everything read-only except the container's own cgroup. Note that compared to , where all paths leading up to the container's own cgroup are just simple directories in the underlying tmpfs, here /sys/fs/cgroup/$hierarchy will contain the host's full cgroup hierarchy, albeit read-only outside the container's own cgroup. This may leak quite a bit of information into the container. : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. : similar to , but everything will be mounted read-only. : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. : similar to , but everything will be mounted read-write. Note that in this case, the container may escape its own cgroup. (Note also that if the container has CAP_SYS_ADMIN support and can mount the cgroup filesystem itself, it may do so anyway.) : The option will cause LXC to perform the cgroup mounts for the container under all circumstances. Otherwise it is similar to . This is mainly useful when the cgroup namespaces are enabled where LXC will normally leave mounting cgroups to the init binary of the container since it is perfectly safe to do so. (without specifier): defaults to if the container retains the CAP_SYS_ADMIN capability, otherwise. If cgroup namespaces are enabled, then any auto-mounting request will be ignored, since the container can mount the filesystems itself, and automounting can confuse the container init. Note that if automatic mounting of the cgroup filesystem is enabled, the tmpfs under /sys/fs/cgroup will always be mounted read-write (but for the and cases, the individual hierarchies, /sys/fs/cgroup/$hierarchy, will be read-only). This is in order to work around a quirk in Ubuntu's mountall 8 command that will cause containers to wait for user input at boot if /sys/fs/cgroup is mounted read-only and the container can't remount it read-write due to a lack of CAP_SYS_ADMIN. Examples: lxc.mount.auto = proc sys cgroup lxc.mount.auto = proc:rw sys:rw cgroup-full:rw Root file system The root file system of the container can be different than that of the host system. specify the root file system for the container. It can be an image file, a directory or a block device. If not specified, the container shares its root file system with the host. For directory or simple block-device backed containers, a pathname can be used. If the rootfs is backed by a nbd device, then nbd:file:1 specifies that file should be attached to a nbd device, and partition 1 should be mounted as the rootfs. nbd:file specifies that the nbd device itself should be mounted. overlayfs:/lower:/upper specifies that the rootfs should be an overlay with /upper being mounted read-write over a read-only mount of /lower. For overlay multiple /lower directories can be specified. loop:/file tells lxc to attach /file to a loop device and mount the loop device. where to recursively bind before pivoting. This is to ensure success of the pivot_root 8 syscall. Any directory suffices, the default should generally work. extra mount options to use when mounting the rootfs. Control group The control group section contains the configuration for the different subsystem. lxc does not check the correctness of the subsystem name. This has the disadvantage of not detecting configuration errors until the container is started, but has the advantage of permitting any future subsystem. Specify the control group value to be set on a legacy cgroup hierarchy. The controller name is the literal name of the control group. The permitted names and the syntax of their values is not dictated by LXC, instead it depends on the features of the Linux kernel running at the time the container is started, eg. Specify the control group value to be set on the unified cgroup shierarchy. The controller name is the literal name of the control group. The permitted names and the syntax of their values is not dictated by LXC, instead it depends on the features of the Linux kernel running at the time the container is started, eg. specify a directory or path in which the container's cgroup will be created. For example, setting for a container named "c1" will create the container's cgroup as a sub-cgroup of "my-cgroup". For example, if the user's current cgroup "my-user" is located in the root cgroup of the cpuset controller in a cgroup v1 hierarchy this would create the cgroup "/sys/fs/cgroup/cpuset/my-user/my-cgroup/first/c1" for the container. Any missing cgroups will be created by LXC. This presupposes that the user has write access to its current cgroup. Capabilities The capabilities can be dropped in the container if this one is run as root. Specify the capability to be dropped in the container. A single line defining several capabilities with a space separation is allowed. The format is the lower case of the capability definition without the "CAP_" prefix, eg. CAP_SYS_MODULE should be specified as sys_module. See capabilities 7 . If used with no value, lxc will clear any drop capabilities specified up to this point. Specify the capability to be kept in the container. All other capabilities will be dropped. When a special value of "none" is encountered, lxc will clear any keep capabilities specified up to this point. A value of "none" alone can be used to drop all capabilities. Namespaces A namespace can be cloned (), kept () or shared (). Specify namespaces which the container is supposed to be created with. The namespaces to create are specified as a space separated list. Each namespace must correspond to one of the standard namespace identifiers as seen in the /proc/PID/ns directory. When is not explicitly set all namespaces supported by the kernel and the current configuration will be used. To create a new mount, net and ipc namespace set . Specify namespaces which the container is supposed to inherit from the process that created it. The namespaces to keep are specified as a space separated list. Each namespace must correspond to one of the standard namespace identifiers as seen in the /proc/PID/ns directory. The is a blacklist option, i.e. it is useful when enforcing that containers must keep a specific set of namespaces. To keep the network, user and ipc namespace set . Note that sharing pid namespaces will likely not work with most init systems. Note that if the container requests a new user namespace and the container wants to inherit the network namespace it needs to inherit the user namespace as well. Specify a namespace to inherit from another container or process. The suffix needs to be replaced with one of the namespaces that appear in the /proc/PID/ns directory. To inherit the namespace from another process set the to the PID of the process, e.g. . To inherit the namespace from another container set the to the name of the container, e.g. . To inherit the namespace from another container located in a different path than the standard liblxc path set the to the full path to the container, e.g. . In order to inherit namespaces the caller needs to have sufficient privilege over the process or container. Note that sharing pid namespaces between system containers will likely not work with most init systems. Note that if two processes are in different user namespaces and one process wants to inherit the other's network namespace it usually needs to inherit the user namespace as well. Resource limits The soft and hard resource limits for the container can be changed. Unprivileged containers can only lower them. Resources which are not explicitly specified will be inherited. Specify the resource limit to be set. A limit is specified as two colon separated values which are either numeric or the word 'unlimited'. A single value can be used as a shortcut to set both soft and hard limit to the same value. The permitted names the "RLIMIT_" resource names in lowercase without the "RLIMIT_" prefix, eg. RLIMIT_NOFILE should be specified as "nofile". See setrlimit 2 . If used with no value, lxc will clear the resource limit specified up to this point. A resource with no explicitly configured limitation will be inherited from the process starting up the container. Sysctl Configure kernel parameters for the container. Specify the kernel parameters to be set. The parameters available are those listed under /proc/sys/. Note that not all sysctls are namespaced. Changing Non-namespaced sysctls will cause the system-wide setting to be modified. sysctl 8 . If used with no value, lxc will clear the parameters specified up to this point. Apparmor profile If lxc was compiled and installed with apparmor support, and the host system has apparmor enabled, then the apparmor profile under which the container should be run can be specified in the container configuration. The default is lxc-container-default-cgns if the host kernel is cgroup namespace aware, or lxc-container-default othewise. Specify the apparmor profile under which the container should be run. To specify that the container should be unconfined, use lxc.apparmor.profile = unconfined If the apparmor profile should remain unchanged (i.e. if you are nesting containers and are already confined), then use lxc.apparmor.profile = unchanged Apparmor profiles are pathname based. Therefore many file restrictions require mount restrictions to be effective against a determined attacker. However, these mount restrictions are not yet implemented in the upstream kernel. Without the mount restrictions, the apparmor profiles still protect against accidental damager. If this flag is 0 (default), then the container will not be started if the kernel lacks the apparmor mount features, so that a regression after a kernel upgrade will be detected. To start the container under partial apparmor protection, set this flag to 1. SELinux context If lxc was compiled and installed with SELinux support, and the host system has SELinux enabled, then the SELinux context under which the container should be run can be specified in the container configuration. The default is unconfined_t, which means that lxc will not attempt to change contexts. See @DATADIR@/lxc/selinux/lxc.te for an example policy and more information. Specify the SELinux context under which the container should be run or unconfined_t. For example lxc.selinux.context = system_u:system_r:lxc_t:s0:c22 Seccomp configuration A container can be started with a reduced set of available system calls by loading a seccomp profile at startup. The seccomp configuration file must begin with a version number on the first line, a policy type on the second line, followed by the configuration. Versions 1 and 2 are currently supported. In version 1, the policy is a simple whitelist. The second line therefore must read "whitelist", with the rest of the file containing one (numeric) sycall number per line. Each syscall number is whitelisted, while every unlisted number is blacklisted for use in the container In version 2, the policy may be blacklist or whitelist, supports per-rule and per-policy default actions, and supports per-architecture system call resolution from textual names. An example blacklist policy, in which all system calls are allowed except for mknod, which will simply do nothing and return 0 (success), looks like: 2 blacklist mknod errno 0 Specify a file containing the seccomp configuration to load before the container starts. PR_SET_NO_NEW_PRIVS With PR_SET_NO_NEW_PRIVS active execve() promises not to grant privileges to do anything that could not have been done without the execve() call (for example, rendering the set-user-ID and set-group-ID mode bits, and file capabilities non-functional). Once set, this bit cannot be unset. The setting of this bit is inherited by children created by fork() and clone(), and preserved across execve(). Note that PR_SET_NO_NEW_PRIVS is applied after the container has changed into its intended AppArmor profile or SElinux context. Specify whether the PR_SET_NO_NEW_PRIVS flag should be set for the container. Set to 1 to activate. UID mappings A container can be started in a private user namespace with user and group id mappings. For instance, you can map userid 0 in the container to userid 200000 on the host. The root user in the container will be privileged in the container, but unprivileged on the host. Normally a system container will want a range of ids, so you would map, for instance, user and group ids 0 through 20,000 in the container to the ids 200,000 through 220,000. Four values must be provided. First a character, either 'u', or 'g', to specify whether user or group ids are being mapped. Next is the first userid as seen in the user namespace of the container. Next is the userid as seen on the host. Finally, a range indicating the number of consecutive ids to map. Container hooks Container hooks are programs or scripts which can be executed at various times in a container's lifetime. When a container hook is executed, additional information is passed along. The argument can be used to determine if the following arguments are passed as command line arguments or through environment variables. The arguments are: Container name. Section (always 'lxc'). The hook type (i.e. 'clone' or 'pre-mount'). Additional arguments. In the case of the clone hook, any extra arguments passed will appear as further arguments to the hook. In the case of the stop hook, paths to filedescriptors for each of the container's namespaces along with their types are passed. The following environment variables are set: LXC_CGNS_AWARE: indicator whether the container is cgroup namespace aware. LXC_CONFIG_FILE: the path to the container configuration file. LXC_HOOK_TYPE: the hook type (e.g. 'clone', 'mount', 'pre-mount'). Note that the existence of this environment variable is conditional on the value of . If it is set to 1 then LXC_HOOK_TYPE will be set. LXC_HOOK_SECTION: the section type (e.g. 'lxc', 'net'). Note that the existence of this environment variable is conditional on the value of . If it is set to 1 then LXC_HOOK_SECTION will be set. LXC_HOOK_VERSION: the version of the hooks. This value is identical to the value of the container's config item. If it is set to 0 then old-style hooks are used. If it is set to 1 then new-style hooks are used. LXC_LOG_LEVEL: the container's log level. LXC_NAME: is the container's name. LXC_[NAMESPACE IDENTIFIER]_NS: path under /proc/PID/fd/ to a file descriptor referring to the container's namespace. For each preserved namespace type there will be a separate environment variable. These environment variables will only be set if is set to 1. LXC_ROOTFS_MOUNT: the path to the mounted root filesystem. LXC_ROOTFS_PATH: this is the lxc.rootfs.path entry for the container. Note this is likely not where the mounted rootfs is to be found, use LXC_ROOTFS_MOUNT for that. LXC_SRC_NAME: in the case of the clone hook, this is the original container's name. Standard output from the hooks is logged at debug level. Standard error is not logged, but can be captured by the hook redirecting its standard error to standard output. To pass the arguments in new style via environment variables set to 1 otherwise set to 0 to pass them as arguments. This setting affects all hooks arguments that were traditionally passed as arguments to the script. Specifically, it affects the container name, section (e.g. 'lxc', 'net') and hook type (e.g. 'clone', 'mount', 'pre-mount') arguments. If new-style hooks are used then the arguments will be available as environment variables. The container name will be set in LXC_NAME. (This is set independently of the value used for this config item.) The section will be set in LXC_HOOK_SECTION and the hook type will be set in LXC_HOOK_TYPE. It also affects how the paths to file descriptors referring to the container's namespaces are passed. If set to 1 then for each namespace a separate environment variable LXC_[NAMESPACE IDENTIFIER]_NS will be set. If set to 0 then the paths will be passed as arguments to the stop hook. A hook to be run in the host's namespace before the container ttys, consoles, or mounts are up. A hook to be run in the container's fs namespace but before the rootfs has been set up. This allows for manipulation of the rootfs, i.e. to mount an encrypted filesystem. Mounts done in this hook will not be reflected on the host (apart from mounts propagation), so they will be automatically cleaned up when the container shuts down. A hook to be run in the container's namespace after mounting has been done, but before the pivot_root. A hook to be run in the container's namespace after mounting has been done and after any mount hooks have run, but before the pivot_root, if == 1. The purpose of this hook is to assist in populating the /dev directory of the container when using the autodev option for systemd based containers. The container's /dev directory is relative to the ${} environment variable available when the hook is run. A hook to be run in the host's namespace after the container has been setup, and immediately before starting the container init. A hook to be run in the container's namespace immediately before executing the container's init. This requires the program to be available in the container. A hook to be run in the host's namespace with references to the container's namespaces after the container has been shut down. For each namespace an extra argument is passed to the hook containing the namespace's type and a filename that can be used to obtain a file descriptor to the corresponding namespace, separated by a colon. The type is the name as it would appear in the /proc/PID/ns directory. For instance for the mount namespace the argument usually looks like mnt:/proc/PID/fd/12. A hook to be run in the host's namespace after the container has been shut down. A hook to be run when the container is cloned to a new one. See lxc-clone 1 for more information. A hook to be run when the container is destroyed. Container hooks Environment Variables A number of environment variables are made available to the startup hooks to provide configuration information and assist in the functioning of the hooks. Not all variables are valid in all contexts. In particular, all paths are relative to the host system and, as such, not valid during the hook. The LXC name of the container. Useful for logging messages in common log environments. [] Host relative path to the container configuration file. This gives the container to reference the original, top level, configuration file for the container in order to locate any additional configuration information not otherwise made available. [] The path to the console output of the container if not NULL. [] [] The path to the console log output of the container if not NULL. [] The mount location to which the container is initially bound. This will be the host relative path to the container rootfs for the container instance being started and is where changes should be made for that instance. [] The host relative path to the container root which has been mounted to the rootfs.mount location. [] Only for the clone hook. Is set to the original container name. Only for the stop hook. Is set to "stop" for a container shutdown or "reboot" for a container reboot. If unset, then this version of lxc is not aware of cgroup namespaces. If set, it will be set to 1, and lxc is aware of cgroup namespaces. Note this does not guarantee that cgroup namespaces are enabled in the kernel. This is used by the lxcfs mount hook. Logging Logging can be configured on a per-container basis. By default, depending upon how the lxc package was compiled, container startup is logged only at the ERROR level, and logged to a file named after the container (with '.log' appended) either under the container path, or under @LOGPATH@. Both the default log level and the log file can be specified in the container configuration file, overriding the default behavior. Note that the configuration file entries can in turn be overridden by the command line options to lxc-start. The level at which to log. The log level is an integer in the range of 0..8 inclusive, where a lower number means more verbose debugging. In particular 0 = trace, 1 = debug, 2 = info, 3 = notice, 4 = warn, 5 = error, 6 = critical, 7 = alert, and 8 = fatal. If unspecified, the level defaults to 5 (error), so that only errors and above are logged. Note that when a script (such as either a hook script or a network interface up or down script) is called, the script's standard output is logged at level 1, debug. The file to which logging info should be written. Send logging info to syslog. It respects the log level defined in lxc.log.level. The argument should be the syslog facility to use, valid ones are: daemon, local0, local1, local2, local3, local4, local5, local5, local6, local7. Autostart The autostart options support marking which containers should be auto-started and in what order. These options may be used by LXC tools directly or by external tooling provided by the distributions. Whether the container should be auto-started. Valid values are 0 (off) and 1 (on). How long to wait (in seconds) after the container is started before starting the next one. An integer used to sort the containers when auto-starting a series of containers at once. If not zero the mount namespace will be unshared from the host before initializing the container (before running any pre-start hooks). This requires the CAP_SYS_ADMIN capability at startup. Default is 0. A multi-value key (can be used multiple times) to put the container in a container group. Those groups can then be used (amongst other things) to start a series of related containers. Autostart and System Boot Each container can be part of any number of groups or no group at all. Two groups are special. One is the NULL group, i.e. the container does not belong to any group. The other group is the "onboot" group. When the system boots with the LXC service enabled, it will first attempt to boot any containers with lxc.start.auto == 1 that is a member of the "onboot" group. The startup will be in order of lxc.start.order. If an lxc.start.delay has been specified, that delay will be honored before attempting to start the next container to give the current container time to begin initialization and reduce overloading the host system. After starting the members of the "onboot" group, the LXC system will proceed to boot containers with lxc.start.auto == 1 which are not members of any group (the NULL group) and proceed as with the onboot group. Container Environment If you want to pass environment variables into the container (that is, environment variables which will be available to init and all of its descendents), you can use lxc.environment parameters to do so. Be careful that you do not pass in anything sensitive; any process in the container which doesn't have its environment scrubbed will have these variables available to it, and environment variables are always available via /proc/PID/environ. This configuration parameter can be specified multiple times; once for each environment variable you wish to configure. Specify an environment variable to pass into the container. Example: lxc.environment = APP_ENV=production lxc.environment = SYSLOG_SERVER=192.0.2.42 Examples In addition to the few examples given below, you will find some other examples of configuration file in @DOCDIR@/examples Network This configuration sets up a container to use a veth pair device with one side plugged to a bridge br0 (which has been configured before on the system by the administrator). The virtual network device visible in the container is renamed to eth0. lxc.uts.name = myhostname lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.name = eth0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 10.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 UID/GID mapping This configuration will map both user and group ids in the range 0-9999 in the container to the ids 100000-109999 on the host. lxc.idmap = u 0 100000 10000 lxc.idmap = g 0 100000 10000 Control group This configuration will setup several control groups for the application, cpuset.cpus restricts usage of the defined cpu, cpus.share prioritize the control group, devices.allow makes usable the specified devices. lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw Complex configuration This example show a complex configuration making a complex network stack, using the control groups, setting a new hostname, mounting some locations and a changing root file system. lxc.uts.name = complex lxc.net.0.type = veth lxc.net.0.flags = up lxc.net.0.link = br0 lxc.net.0.hwaddr = 4a:49:43:49:79:bf lxc.net.0.ipv4.address = 10.2.3.5/24 10.2.3.255 lxc.net.0.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3597 lxc.net.0.ipv6.address = 2003:db8:1:0:214:5432:feab:3588 lxc.net.1.type = macvlan lxc.net.1.flags = up lxc.net.1.link = eth0 lxc.net.1.hwaddr = 4a:49:43:49:79:bd lxc.net.1.ipv4.address = 10.2.3.4/24 lxc.net.1.ipv4.address = 192.168.10.125/24 lxc.net.1.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3596 lxc.net.2.type = phys lxc.net.2.flags = up lxc.net.2.link = dummy0 lxc.net.2.hwaddr = 4a:49:43:49:79:ff lxc.net.2.ipv4.address = 10.2.3.6/24 lxc.net.2.ipv6.address = 2003:db8:1:0:214:1234:fe0b:3297 lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw lxc.mount.fstab = /etc/fstab.complex lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0 lxc.rootfs.path = dir:/mnt/rootfs.complex lxc.cap.drop = sys_module mknod setuid net_raw lxc.cap.drop = mac_override See Also chroot 1 , pivot_root 8 , fstab 5 , capabilities 7 &seealso; Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc.conf.sgml.in0000644061062106075000000001031613256572152013012 00000000000000 ]> @LXC_GENERATE_DATE@ lxc.conf 5 lxc.conf Configuration files for LXC. Description LXC configuration is split in two parts. Container configuration and system configuration. Container configuration The container configuration is held in the config stored in the container's directory. A basic configuration is generated at container creation time with the default's recommended for the chosen template as well as extra default keys coming from the default.conf file. That default.conf file is either located at @LXC_DEFAULT_CONFIG@ or for unprivileged containers at ~/.config/lxc/default.conf. Details about the syntax of this file can be found in: lxc.container.conf 5 System configuration The system configuration is located at @LXC_GLOBAL_CONF@ or ~/.config/lxc/lxc.conf for unprivileged containers. This configuration file is used to set values such as default lookup paths and storage backend settings for LXC. Details about the syntax of this file can be found in: lxc.system.conf 5 See Also lxc 1 , lxc.container.conf 5 , lxc.system.conf 5 , lxc-usernet 5 Author Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/lxc-user-nic.sgml.in0000644061062106075000000001111713256572152013611 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-user-nic 1 lxc-user-nic Create and attach a nic to another network namespace. lxc-user-nic pid type bridge nicname Description lxc-user-nic is a setuid-root program with which unprivileged users may create network interfaces for use by a lxc container. It will consult the configuration file @LXC_USERNIC_CONF@ to determine the number of interfaces which the calling user is allowed to create, and which bridge he may attach them to. It tracks the number of interfaces each user has created using the file @LXC_USERNIC_DB@. It ensures that the calling user is privileged over the network namespace to which the interface will be attached. Options The process id for the task to whose network namespace the interface should be attached. The network interface type to attach. Currently only veth is supported. With this type, two interfaces representing each tunnel endpoint are created. One endpoint will be attached to the specified bridge, while the other will be passed into the container. The bridge to which to attach the network interface, for instance lxcbr0. The desired interface name in the container. This will be eth0 if unspecified. See Also lxc 1 , lxc-start 1 , lxc-usernet 5 Author Daniel Lezcano daniel.lezcano@free.fr lxc-3.0.0/doc/lxc-usernsexec.sgml.in0000644061062106075000000001025213256572152014247 00000000000000 ]> @LXC_GENERATE_DATE@ lxc-usernsexec 1 lxc-usernsexec Run a task as root in a new user namespace. lxc-usernsexec -m uid-map -- command Description lxc-usernsexec can be used to run a task as root in a new user namespace. Options The uid map to use in the user namespace. Each map consists of four colon-separate values. First a character 'u', 'g' or 'b' to specify whether this map pertains to user ids, group ids, or both; next the first userid in the user namespace; next the first userid as seen on the host; and finally the number of ids to be mapped. More than one map can be specified. If no map is specified, then by default the full uid and gid ranges granted by /etc/subuid and /etc/subgid will be mapped to the uids and gids starting at 0 in the container. Note that lxc-usernsexec always tries to setuid and setgid to 0 in the namespace. Therefore uid 0 in the namespace must be mapped. Examples To spawn a shell with the full allotted subuids mapped into the container, use lxc-usernsexec To run a different shell than /bin/sh, use lxc-usernsexec -- /bin/bash If your user id is 1000, root in a container is mapped to 190000, and you wish to chown a file you own to root in the container, you can use: lxc-usernsexec -m b:0:1000:1 -m b:1:190000:1 -- /bin/chown 1:1 $file This maps your userid to root in the user namespace, and 190000 to uid 1. Since root in the user namespace is privileged over all userids mapped into the namespace, you are allowed to change the file ownership, which you could not do on the host using a simple chown. &seealso; Author Serge Hallyn serge.hallyn@ubuntu.com lxc-3.0.0/doc/FAQ.txt0000644061062106075000000000300613256572152011155 00000000000000 Troubleshooting: =============== Error: ------ error while loading shared libraries reported after sudo make install and when trying to run lxc-execute. "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" /usr/local/bin/lxc-execute: error while loading shared libraries: liblxc-0.5.0.so: cannot open shared object file: No such file or directory Answer: ------- update the ld cache by running ldconfig. Error: ------ error when starting a container. "lxc-start Invalid argument" "lxc-execute -n foo -f /usr/local/etc/lxc/lxc-macvlan.conf /bin/bash" "[syserr] lxc_start:96: Invalid argument - failed to fork into a new namespace" Answer: ------- read the lxc man page about kernel version prereq :) most probably your kernel is not configured to support the container options you want to use. Error: ------ On Ubuntu 8.10, if using the cvs source code rather than the provided tarball. Then make is failing with many errors similar to the line below: ========== ../../libtool: line 810: X--tag=CC: command not found ========== Answer: ------- This is related to a compatibility problem between the shipped config/ltmain.sh and the libtool version installed on your Ubuntu 8.10 machine. You have to replace the config/ltmain.sh from cvs head by the one from your libtool package, make some cleaning and reissue all the build process: ========== cd cp -f /usr/share/libtool/config/ltmain.sh config/ rm -f libtool ./bootstrap && ./configure && make && sudo make install ========== lxc-3.0.0/doc/lxc.sgml.in0000644061062106075000000003555213256572152012077 00000000000000 ]> @LXC_GENERATE_DATE@ lxc 7 Version @PACKAGE_VERSION@ lxc linux containers Overview The container technology is actively being pushed into the mainstream Linux kernel. It provides resource management through control groups and resource isolation via namespaces. lxc, aims to use these new functionalities to provide a userspace container object which provides full resource isolation and resource control for an applications or a full system. lxc is small enough to easily manage a container with simple command lines and complete enough to be used for other purposes. Requirements The kernel version >= 3.10 shipped with the distros, will work with lxc, this one will have less functionalities but enough to be interesting. lxc relies on a set of functionalities provided by the kernel. The helper script lxc-checkconfig will give you information about your kernel configuration, required, and missing features. Functional specification A container is an object isolating some resources of the host, for the application or system running in it. The application / system will be launched inside a container specified by a configuration that is either initially created or passed as a parameter of the commands. How to run an application in a container Before running an application, you should know what are the resources you want to isolate. The default configuration is to isolate PIDs, the sysv IPC and mount points. If you want to run a simple shell inside a container, a basic configuration is needed, especially if you want to share the rootfs. If you want to run an application like sshd, you should provide a new network stack and a new hostname. If you want to avoid conflicts with some files eg. /var/run/httpd.pid, you should remount /var/run with an empty directory. If you want to avoid the conflicts in all the cases, you can specify a rootfs for the container. The rootfs can be a directory tree, previously bind mounted with the initial rootfs, so you can still use your distro but with your own /etc and /home Here is an example of directory tree for sshd: [root@lxc sshd]$ tree -d rootfs rootfs |-- bin |-- dev | |-- pts | `-- shm | `-- network |-- etc | `-- ssh |-- lib |-- proc |-- root |-- sbin |-- sys |-- usr `-- var |-- empty | `-- sshd |-- lib | `-- empty | `-- sshd `-- run `-- sshd and the mount points file associated with it: [root@lxc sshd]$ cat fstab /lib /home/root/sshd/rootfs/lib none ro,bind 0 0 /bin /home/root/sshd/rootfs/bin none ro,bind 0 0 /usr /home/root/sshd/rootfs/usr none ro,bind 0 0 /sbin /home/root/sshd/rootfs/sbin none ro,bind 0 0 How to run a system in a container Running a system inside a container is paradoxically easier than running an application. Why? Because you don't have to care about the resources to be isolated, everything needs to be isolated, the other resources are specified as being isolated but without configuration because the container will set them up. eg. the ipv4 address will be setup by the system container init scripts. Here is an example of the mount points file: [root@lxc debian]$ cat fstab /dev /home/root/debian/rootfs/dev none bind 0 0 /dev/pts /home/root/debian/rootfs/dev/pts none bind 0 0 Container life cycle When the container is created, it contains the configuration information. When a process is launched, the container will be starting and running. When the last process running inside the container exits, the container is stopped. In case of failure when the container is initialized, it will pass through the aborting state. Configuration The container is configured through a configuration file, the format of the configuration file is described in lxc.conf 5 Creating / Destroying containers A persistent container object can be created via the lxc-create command. It takes a container name as parameter and optional configuration file and template. The name is used by the different commands to refer to this container. The lxc-destroy command will destroy the container object. lxc-create -n foo lxc-destroy -n foo Volatile container It is not mandatory to create a container object before starting it. The container can be directly started with a configuration file as parameter. Starting / Stopping container When the container has been created, it is ready to run an application / system. This is the purpose of the lxc-execute and lxc-start commands. If the container was not created before starting the application, the container will use the configuration file passed as parameter to the command, and if there is no such parameter either, then it will use a default isolation. If the application ended, the container will be stopped, but if needed the lxc-stop command can be used to stop the container. Running an application inside a container is not exactly the same thing as running a system. For this reason, there are two different commands to run an application into a container: lxc-execute -n foo [-f config] /bin/bash lxc-start -n foo [-f config] [/bin/bash] The lxc-execute command will run the specified command into a container via an intermediate process, lxc-init. This lxc-init after launching the specified command, will wait for its end and all other reparented processes. (to support daemons in the container). In other words, in the container, lxc-init has PID 1 and the first process of the application has PID 2. The lxc-start command will directly run the specified command in the container. The PID of the first process is 1. If no command is specified lxc-start will run the command defined in lxc.init.cmd or if not set, /sbin/init . To summarize, lxc-execute is for running an application and lxc-start is better suited for running a system. If the application is no longer responding, is inaccessible or is not able to finish by itself, a wild lxc-stop command will kill all the processes in the container without pity. lxc-stop -n foo -k Connect to an available tty If the container is configured with ttys, it is possible to access it through them. It is up to the container to provide a set of available ttys to be used by the following command. When the tty is lost, it is possible to reconnect to it without login again. lxc-console -n foo -t 3 Freeze / Unfreeze container Sometime, it is useful to stop all the processes belonging to a container, eg. for job scheduling. The commands: lxc-freeze -n foo will put all the processes in an uninteruptible state and lxc-unfreeze -n foo will resume them. This feature is enabled if the freezer cgroup v1 controller is enabled in the kernel. Getting information about container When there are a lot of containers, it is hard to follow what has been created or destroyed, what is running or what are the PIDs running in a specific container. For this reason, the following commands may be useful: lxc-ls -f lxc-info -n foo lxc-ls lists containers. lxc-info gives information for a specific container. Here is an example on how the combination of these commands allows one to list all the containers and retrieve their state. for i in $(lxc-ls -1); do lxc-info -n $i done Monitoring container It is sometime useful to track the states of a container, for example to monitor it or just to wait for a specific state in a script. lxc-monitor command will monitor one or several containers. The parameter of this command accepts a regular expression for example: lxc-monitor -n "foo|bar" will monitor the states of containers named 'foo' and 'bar', and: lxc-monitor -n ".*" will monitor all the containers. For a container 'foo' starting, doing some work and exiting, the output will be in the form: 'foo' changed state to [STARTING] 'foo' changed state to [RUNNING] 'foo' changed state to [STOPPING] 'foo' changed state to [STOPPED] lxc-wait command will wait for a specific state change and exit. This is useful for scripting to synchronize the launch of a container or the end. The parameter is an ORed combination of different states. The following example shows how to wait for a container if it successfully started as a daemon. cgroup settings for containers The container is tied with the control groups, when a container is started a control group is created and associated with it. The control group properties can be read and modified when the container is running by using the lxc-cgroup command. lxc-cgroup command is used to set or get a control group subsystem which is associated with a container. The subsystem name is handled by the user, the command won't do any syntax checking on the subsystem name, if the subsystem name does not exists, the command will fail. lxc-cgroup -n foo cpuset.cpus will display the content of this subsystem. lxc-cgroup -n foo cpu.shares 512 will set the subsystem to the specified value. &seealso; Author Daniel Lezcano daniel.lezcano@free.fr Christian Brauner christian.brauner@ubuntu.com Serge Hallyn serge@hallyn.com Stéphane Graber stgraber@ubuntu.com lxc-3.0.0/doc/api/0000755061062106075000000000000013256572302010634 500000000000000lxc-3.0.0/doc/api/Makefile.am0000644061062106075000000000020513256572152012610 00000000000000EXTRA_DIST = Doxyfile if ENABLE_API_DOCS html: Doxyfile doxygen endif .PHONY: html all-local: html clean-local: $(RM) -rf html lxc-3.0.0/doc/api/Doxyfile0000644061062106075000000030211213256572152012264 00000000000000# Doxyfile 1.8.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "LXC" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = . # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese- # Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en, # Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO these classes will be included in the various overviews. This option has # no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. Do not use file names with spaces, bibtex cannot handle them. See # also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO doxygen will only warn about wrong or incomplete parameter # documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. # Note: If this tag is empty the current directory is searched. INPUT = \ ../../src/lxc/lxccontainer.h \ ../../src/lxc/lxclock.h \ ../../src/lxc/attach_options.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank the # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. FILE_PATTERNS = *.h # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- # defined cascading style sheet that is included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. # Doxygen will copy the style sheet file to the output directory. For an example # see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using prerendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /