====== LXC - Linux Containers ====== ===== Basic setup to get started ===== - Install requirements and templates \\ ''apt install lxc libvirt0 libpam-cgfs bridge-utils uidmap lxc-templates debootstrap apparmor dnsmasq'' - Configure cgroups and set up ranges in ''/etc/subuid'' and ''/etc/subgid'': \\ MYUSERNAME:296608:65536 root:362144:65536 - Edit ''/etc/lxc/lxc-usernet'', e.g.: \\ MYUSERNAME veth virbr0 10 - Edit ''/etc/default/lxc-net'', e.g.: \\ USE_LXC_BRIDGE="true" LXC_BRIDGE="virbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" LXC_DHCP_CONFILE="" LXC_DOMAIN="" - Edit ''/etc/lxc/default.conf'': \\ lxc.net.0.type = veth lxc.net.0.link = virbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx lxc.idmap = u 0 362144 65536 lxc.idmap = g 0 362144 65536 lxc.apparmor.profile = lxc-container-default \\ Note: //use the user's subuid/subguid range as above// \\ Note: //in the MAC address line, you can leave the x's as is; maybe change the first 6 digits// - ''systemctl stop dnsmasq'' - ''systemctl disable dnsmasq'' - ''systemctl enable lxc-net'' - ''systemctl restart lxc-net'' ==== User specific configuration ==== If you want another user to create and run (unprivileged) containers, copy ''/etc/lxc/default.conf'' to ''$HOME/.config/lxc/default.conf'' and set the subuid/subgid range accordingly. ==== Change where containers will be stored ==== One way to do this is replace ''/var/lib/lxc'' with a symbolic link to the intended storage location. There is probably a smarter way to do this with an option, but it works. ===== Creating a container ===== ==== Example ==== * ''lxc-create -t download -n somecontainer'' \\ There will be a selection of distros and releases to choose from. ===== Example projects ===== * [[lxcopenvpntransmission|Creating a Transmission instance behind a VPN in an LXC container]] * [[muninserver|Setting up a Munin server and nodes]] ===== Troubleshooting ===== | ERROR: Unable to fetch GPG key from keyserver | Use a different keyserver, e.g.: \\ ''DOWNLOAD_KEYSERVER=keyserver.ubuntu.com lxc-create -t download -n sowieso'' \\ alternatively, skip verification (noooot recommended): \\ ''%%lxc-create -n container1 -t download -- --no-validate%%'' | | ''lxc-create: maps: conf.c: chown_mapped_root: 3250 lxc-usernsexec failed: No such file or directory Failed to open ttyNo such file or directory Failed to open ttyOperation not permitted Failed to unshare mount and user namespac lxc-create: maps: tools/lxc_create.c: main: 327 Failed to create container maps'' | 1. unprivileged users can't work with subuid 100000-165536 \\ 2. ''sysctl kernel.unprivileged_userns_clone=1'' \\ ''echo "kernel.unprivileged_userns_clone = 1" >> /etc/sysctl.d/lxc-unprivileged_userns.conf'' | ===== Links ===== * [[https://linuxcontainers.org/lxc/getting-started/|linuxcontainers.org - Getting Started]] * [[https://wiki.debian.org/LXC|Debian Wiki - LXC]] * [[https://pve.proxmox.com/wiki/Unprivileged_LXC_containers|Unprivileged LXC containers]]