The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/1235
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Requires `xbps-query` and `xbps-install` Signed-off-by: Gregor Reitzenstein <dean4de...@paranoidlabs.org>
From f6bd219e6b4e373ab4bfb7624ab9d9a50abdeeff Mon Sep 17 00:00:00 2001 From: Gregor Reitzenstein <dean4de...@paranoidlabs.org> Date: Fri, 14 Oct 2016 13:06:29 +0200 Subject: [PATCH] Add voidlinux distribution Signed-off-by: Gregor Reitzenstein <dean4de...@paranoidlabs.org> --- config/templates/Makefile.am | 2 + config/templates/voidlinux.common.conf.in | 35 ++++++ config/templates/voidlinux.userns.conf.in | 8 ++ configure.ac | 3 + templates/Makefile.am | 3 +- templates/lxc-voidlinux.in | 199 ++++++++++++++++++++++++++++++ 6 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 config/templates/voidlinux.common.conf.in create mode 100644 config/templates/voidlinux.userns.conf.in create mode 100644 templates/lxc-voidlinux.in diff --git a/config/templates/Makefile.am b/config/templates/Makefile.am index 1a50f62..86b47d6 100644 --- a/config/templates/Makefile.am +++ b/config/templates/Makefile.am @@ -38,4 +38,6 @@ templatesconfig_DATA = \ openwrt.common.conf \ sparclinux.common.conf \ sparclinux.userns.conf \ + voidlinux.common.conf \ + voidlinux.userns.conf \ userns.conf diff --git a/config/templates/voidlinux.common.conf.in b/config/templates/voidlinux.common.conf.in new file mode 100644 index 0000000..d5d2ee8 --- /dev/null +++ b/config/templates/voidlinux.common.conf.in @@ -0,0 +1,35 @@ +# This derives from the global common config +lxc.include = @LXCTEMPLATECONFIG@/common.conf + +# Allow for 6 tty devices by default +lxc.tty = 6 + +# Set $VIRTUALIZATION so runit doesn't try to mount filesystems or start udevd +lxc.environment=VIRTUALIZATION=lxc + +# Set the halt/stop signals +lxc.haltsignal=SIGCONT + + +# Uncomment to disable creating tty devices subdirectory in /dev +# lxc.devttydir = + +# Capabilities +# Uncomment these if you don't run anything that needs the capability, and +# would like the container to run with less privilege. +# +# Dropping sys_admin disables container root from doing a lot of things +# that could be bad like re-mounting lxc fstab entries rw for example, +# but also disables some useful things like being able to nfs mount, and +# things that are already namespaced with ns_capable() kernel checks, like +# hostname(1). +# lxc.cap.drop = sys_admin +# lxc.cap.drop = net_raw # breaks dhcp/ping +# lxc.cap.drop = setgid # breaks login (initgroups/setgroups) +# lxc.cap.drop = dac_read_search # breaks login (pam unix_chkpwd) +# lxc.cap.drop = setuid # breaks sshd,nfs statd +# lxc.cap.drop = audit_control # breaks sshd (set_loginuid failed) +# lxc.cap.drop = audit_write +# lxc.cap.drop = setpcap # big big login delays in Fedora 20 systemd +# +lxc.cap.drop = setfcap sys_nice sys_pacct sys_rawio diff --git a/config/templates/voidlinux.userns.conf.in b/config/templates/voidlinux.userns.conf.in new file mode 100644 index 0000000..5e346b7 --- /dev/null +++ b/config/templates/voidlinux.userns.conf.in @@ -0,0 +1,8 @@ +# This derives from the global userns config +lxc.include = @LXCTEMPLATECONFIG@/userns.conf + +# Set $VIRTUALIZATION so runit doesn't try to mount filesystems or start udevd +lxc.environment=VIRTUALIZATION=lxc + +# Set the halt/stop signals +lxc.haltsignal=SIGCONT diff --git a/configure.ac b/configure.ac index 2f0137b..5985578 100644 --- a/configure.ac +++ b/configure.ac @@ -707,6 +707,8 @@ AC_CONFIG_FILES([ config/templates/openwrt.common.conf config/templates/sparclinux.common.conf config/templates/sparclinux.userns.conf + config/templates/voidlinux.common.conf + config/templates/voidlinux.userns.conf config/templates/userns.conf config/yum/Makefile config/sysconfig/Makefile @@ -858,6 +860,7 @@ AC_CONFIG_FILES([ templates/lxc-ubuntu templates/lxc-ubuntu-cloud templates/lxc-sparclinux + templates/lxc-voidlinux src/Makefile src/lxc/Makefile diff --git a/templates/Makefile.am b/templates/Makefile.am index b2ca8f5..c6c5ea5 100644 --- a/templates/Makefile.am +++ b/templates/Makefile.am @@ -20,4 +20,5 @@ templates_SCRIPTS = \ lxc-sshd \ lxc-ubuntu \ lxc-ubuntu-cloud \ - lxc-sparclinux + lxc-sparclinux \ + lxc-voidlinux diff --git a/templates/lxc-voidlinux.in b/templates/lxc-voidlinux.in new file mode 100644 index 0000000..83214fb --- /dev/null +++ b/templates/lxc-voidlinux.in @@ -0,0 +1,199 @@ +#!/usr/bin/bash + +# +# template script for generating Void Linux container for LXC +# + +# +# lxc: linux Container library + +# Authors: +# Gregor Reitzenstein <dean4de...@paranoidlabs.org> + +# Based on lxc-archlinux template by: +# Alexander Vladimirov <alexander.idkfa.vladimi...@gmail.com> +# John Lane <l...@jelmail.com> + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# Utility functions + +# Check if array $2 contains item $1 +containsElement() { + local e + for e in "${@:2}"; do [[ "$1" == "$e" ]] && return 0; done + return 1 +} + +# split comma-separated string into an array +# ${1} - string to split +# ${2} - separator (default is ",") +# ${result} - result value on success +split_string() { + local ifs=${IFS} + IFS="${2:-,}" + read -ra result < <(echo "${1}") + IFS=${ifs} + return 0 +} + +# Make sure the usual locations are in PATH +export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin + +# defaults +default_path="/var/lib/lxc" +default_path="@LXCPATH@" +shared_config="@LXCTEMPLATECONFIG@/voidlinux.common.conf" +userns_config="@LXCTEMPLATECONFIG@/voidlinux.userns.conf" + +pkg_blacklist=("linux>=0" "e2fsprogs>=0" "btrfs-progs>=0" "xfsprogs>=0" "f2fs-tools>=0" "dosfstools>=0") +base_packages=() +for pkg in $(xbps-query -Mv --repository="http://repo2.voidlinux.eu/current/" -x base-system); do + containsElement "$pkg" "${pkg_blacklist[@]}" || base_packages+=($pkg) +done +declare -a additional_packages + +copy_configuration() { + mkdir -p "${config_path}" + local config="${config_path}/config" + echo "lxc.utsname = ${name}" >> "${config}" + grep -q "^lxc.rootfs" "${config}" 2>/dev/null \ + || echo "lxc.rootfs = ${rootfs_path}" >> "${config}" + + # Detect if were in a UserNS and include the right config + if [ -z "${LXC_MAPPED_GID+x}" ] || [ -z "${LXC_MAPPED_UID+x}" ]; then + echo "lxc.include = ${userns_config}" >> "${config}" + else + echo "lxc.include = ${shared_config}" >> "${config}" + fi + + if [ $? -ne 0 ]; then + echo "Failed to configure container" + return 1 + fi + return 0 +} + +install_void() { + if ! yes | xbps-install -Sy -R http://repo2.voidlinux.eu/current -r "${rootfs_path}" "${base_packages[@]}" + then + echo "Failed to install container packages" + return 1 + fi +} + +usage() { + cat <<EOF +usage: + ${1} -n|--name=<container_name> [-p|--path=<path>] [-a|--arch=<arch of the container>] + [-r|--root_password=<root password>] [-P|--packages=<pkg1,pkg2,...>] [-h|--help] + +Mandatory args: + -n,--name container name, used to as an identifier for that container from now on +Optional args: + -p,--path path to where the container rootfs will be created (${default_path}) + --rootfs path for actual container rootfs, (${default_path}/rootfs) + -P,--packages preinstall additional packages, comma-separated list + -c,--config use specified pacman config when installing container packages + -a,--arch use specified architecture instead of host's architecture + -r,--root_password set container root password + -h,--help print this help +EOF + return 0 +} + +options=$(getopt -o hp:P:n:c:r: -l help,rootfs:,path:,packages:,name:,config:,root_password:,mapped-uid:,mapped-gid: -- "${@}") +if [ ${?} -ne 0 ]; then + usage "$(basename "${0}")" + exit 1 +fi +eval set -- "${options}" + +while true +do + case "${1}" in + -h|--help) usage "${0}" && exit 0;; + -p|--path) path=${2}; shift 2;; + -n|--name) name=${2}; shift 2;; + -c|--config) config_path=${2}; shift 2;; + --rootfs) rootfs_path=${2}; shift 2;; + -P|--packages) additional_packages=${2}; shift 2;; + -r|--root_password) root_passwd=${2}; shift 2;; + --mapped-uid) LXC_MAPPED_UID=$2; shift 2;; + --mapped-gid) LXC_MAPPED_GID=$2; shift 2;; + --) shift 1; break ;; + *) break ;; + esac +done + +if [ -z "${name}" ]; then + echo "missing required 'name' parameter" + exit 1 +fi + +type xbps-install >/dev/null 2>&1 +if [ ${?} -ne 0 ]; then + echo "'xbps-install' command is missing." +fi +type xbps-query >/dev/null 2>&1 +if [ ${?} -ne 0 ]; then + echo "'xbps-query' command is missing." +fi + +if [ -z "${rootfs_path}" ]; then + rootfs_path="${path}/rootfs" +fi +config_path="${path}" + +revert() { + echo "Interrupted, cleaning up" + lxc-destroy -n "${name}" + rm -rf "${path:?}/${name}" + rm -rf "${default_path:?}/${name}" + exit 1 +} +trap revert SIGHUP SIGINT SIGTERM + +copy_configuration +if [ $? -ne 0 ]; then + echo "Failed to write configuration file" + rm -rf "${config_path}" + exit 1 +fi + +if [ ${#additional_packages[@]} -gt 0 ]; then + split_string "${additional_packages}" + base_packages+=(${result[@]}) +fi + +mkdir -p "${rootfs_path}" +install_void +if [ ${?} -ne 0 ]; then + echo "Failed to install Void Linux" + rm -rf "${config_path}" "${path}" + exit 1 +fi + + + +if [ -n "${root_passwd}" ]; then + echo "root:${root_passwd}" | chroot "${rootfs_path}" chpasswd +fi + +cat << EOF +Void Linux Container ${name} has been successfully created. The configuration is +stored in ${config_path}/config. Please refer to https://wiki.voidlinux.eu for +information regarding Void Linux. +EOF
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel