lxc-archlinux.in revision 4852d800d11740225072579e8bd8c4b56df581ee
70N/A# template script for generating Arch linux container for LXC 70N/A# lxc: linux Container library 70N/A# Alexander Vladimirov <idkfa@vlan1.ru> 70N/A# This library is free software; you can redistribute it and/or 70N/A# modify it under the terms of the GNU Lesser General Public 70N/A# License as published by the Free Software Foundation; either 70N/A# version 2.1 of the License, or (at your option) any later version. 70N/A# This library is distributed in the hope that it will be useful, 70N/A# but WITHOUT ANY WARRANTY; without even the implied warranty of 70N/A# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 70N/A# Lesser General Public License for more details. 70N/A# You should have received a copy of the GNU Lesser General Public 70N/A# License along with this library; if not, write to the Free Software 70N/A# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 359N/A# sort of minimal package set 347N/A# split comma-separated string into an array 310N/A# ${1} - string to split 316N/A# ${2} - separator (default is ",") 474N/A# ${result} - result value on success 484N/A# Arch-specific preconfiguration for container 493N/A # read locale and timezone defaults from system rc.conf if running on Arch 335N/A if [ "${is_arch}" ]; then 469N/A127.0.0.1 localhost.localdomain localhost ${name} 290N/A::1 localhost.localdomain localhost 299N/Aln -s /usr/share/zoneinfo/${default_timezone} /etc/localtime 262N/A# disable services unavailable for container 455N/Aln -s /dev/null /etc/systemd/system/systemd-udevd.service 277N/Aln -s /dev/null /etc/systemd/system/systemd-udevd-control.socket 332N/Aln -s /dev/null /etc/systemd/system/systemd-udevd-kernel.socket 332N/Aln -s /dev/null /etc/systemd/system/proc-sys-fs-binfmt_misc.automount 493N/A# set default systemd target 70N/Aln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target 359N/A# write container configuration files 98N/A cat > "${config_path}/config" << EOF 493N/Alxc.rootfs=${rootfs_path} 70N/Alxc.mount=${config_path}/fstab 493N/Alxc.cap.drop = mknod sys_module mac_admin mac_override 493N/Alxc.network.type=${lxc_network_type} lxc.network.link=${lxc_network_link} lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c *:* m lxc.cgroup.devices.allow = b *:* m lxc.cgroup.devices.allow = c 1:3 rwm lxc.cgroup.devices.allow = c 1:5 rwm lxc.cgroup.devices.allow = c 1:7 rwm lxc.cgroup.devices.allow = c 1:8 rwm lxc.cgroup.devices.allow = c 1:9 rwm lxc.cgroup.devices.allow = c 1:9 rwm lxc.cgroup.devices.allow = c 4:1 rwm lxc.cgroup.devices.allow = c 5:0 rwm lxc.cgroup.devices.allow = c 5:1 rwm lxc.cgroup.devices.allow = c 5:2 rwm lxc.cgroup.devices.allow = c 136:* rwm cat > "${config_path}/fstab" << EOF sysfs sys sysfs ro,defaults 0 0 proc proc proc nodev,noexec,nosuid 0 0 /proc/sys ${rootfs_path}/proc/sys none ro,bind 0 0 #/var/log/journal ${rootfs_path}/var/log/journal none bind 0 0 # install packages within container chroot echo "Failed to install container packages" ${1} -n|--name=<container_name> [-P|--packages=<pkg1,pkg2,...>] [-p|--path=<path>] [-t|--network_type=<type>] [-l|--network_link=<link>] [-h|--help] -n,--name container name, used to as an identifier for that container from now on -p,--path path to where the container rootfs will be created, defaults to ${default_path}/rootfs. The container config will go under ${default_path} in that case -P,--packages preinstall additional packages, comma-separated list -c,--config use specified pacman config when installing container packages -t,--network_type set container network interface type (${lxc_network_type}) -l,--network_link set network link device (${lxc_network_link}) -h,--help print this help if [ -z
"${name}" ];
then echo "missing required 'name' parameter" echo "network link interface does not exist" echo "'pacman' command is missing, refer to wiki.archlinux.org for information about installing pacman" if [ -z
"${path}" ];
then path=
"${default_path}/${name}" if [
"${EUID}" !=
"0" ];
then echo "This script should be run as 'root'" echo "Interrupted, cleaning up" rm -rf "${default_path}/${name}" echo "failed to write configuration file" if [ ${
#additional_packages[@]} -gt 0 ]; then mkdir -p
"${rootfs_path}" echo "failed to install Arch Linux" rm -
rf "${config_path}" "${path}" echo "failed to configure Arch Linux for a container" rm -
rf "${config_path}" "${path}" echo "container config is ${config_path}/config"