Diumenge, febrer 8, 2026
VIRTUALITZACIÓ

Instal·lar LXC en un servidor Linux i aixecar contenidors lleugers

Treballar amb contenidors LXC (Linux Containers) pot estalviar-te temps i recursos quan necessites entorns aïllats, ràpids d’aixecar i amb accés complet a un espai de sistema d’arxius tipus Linux, sense la sobrecàrrega de les màquines virtuals completes. A diferència de Docker, LXC no abstreu el sistema operatiu en capes ni oculta els processos del host. Si vols fer servir contenidors com petits sistemes Linux, amb systemd, processos persistents, i configuració similar a un servidor tradicional, LXC és el que probablement estàs buscant.

Per què LXC i no Docker?

Si vens de Docker, notaràs diferències importants. Docker gestiona contenidors com si fossin aplicacions: encapsulats, autocontinguts, i generalment d’un sol ús. LXC, en canvi, es comporta més com un sistema operatiu dins d’ un altre. Pots iniciar sessió al contenidor, instal·lar serveis, modificar el sistema d’arxius com en una instal·lació estàndard, i fins i tot executar sense trucs.

LXC és més proper a una virtualització lleugera. És útil si vols executar serveis persistents sense recórrer a KVM o VMware, o si treballes en entorns on Docker complica més del que ajuda.

Requisits i preparació inicial

Abans d’instal·lar LXC, necessites tenir un entorn base estable. Això inclou:

  • Un servidor Linux actualitzat.
  • Accés com a root o un usuari amb privilegis sudo.
  • Connexió a Internet (per descarregar plantilles i paquets).
  • Un kernel modern (4.9+), tot i que versions posteriors a 5.4 són recomanables per estabilitat i compatibilitat.

Revisar ràpidament:

uname -r

Instalar LXC

A Debian, Ubuntu i derivats:

sudo apt update
sudo apt install lxc lxc-templates uidmap bridge-utils

A CentOS/RHEL 8 o Rocky Linux 9:

sudo dnf install epel-release
sudo dnf install lxc lxc-templates

Nota: En algunes distribucions, el paquet lxc-templates pot estar a EPEL o a repositoris addicionals. Sense això, no podràs crear contenidors des de plantilles.

Comprovació ràpida de l’ entorn

Després d’instal·lar, verifica que LXC funcioni:

lxc-checkconfig

Aquest comandament et diu si el kernel suporta totes les funcions necessàries. Presta atenció a línies com cgroup, namespaces, networking, user namespace.

Si alguna cosa apareix com a “missing”, revisa si pots carregar el mòdul (modprobe) o si necessites recompilar el kernel o habilitar flags en l’arrencada. Això és estrany, però pot passar en kernels custom o VPS molt retallats.

Crear un contenidor bàsic

La forma més directa és fer servir lxc-create amb una plantilla.

sudo lxc-create -n contenedor1 -t download

Això fa servir la plantilla download, que ofereix imatges pre-construïdes per a diverses distribucions.

Durant l’execució, et demanarà:

  • Distribució (ex. ubuntu, debian, centos)
  • Versió (ex. 20.04, 12, 7)
  • Arquitectura (amd64 és el comú)

Això descarrega i configura el rootfs en /var/lib/lxc/contenidor1/rootfs/.

Consell: Si el sistema d’arxius està muntat amb noexec (freqüent a particions separades com /var), els scripts de creació poden fallar. Solució temporal: munta amb exec o canvia el directori base de LXC (lxc.lxcpath a /etc/lxc/lxc.conf).

Aixecar el contenidor

sudo lxc-start -n contenedor1 -d

El flag -d és per iniciar en segon pla. Per veure si va arrencar:

sudo lxc-ls --fancy

Accedir a la consola del contenidor:

sudo lxc-attach -n contenedor1

O, si prefereixes la consola tty:

sudo lxc-console -n contenedor1

Per sortir de la consola tty: Ctrl+a q

Connectivitat de xarxa

Per defecte, LXC crea un entorn en xarxa NAT fent servir un pont (lxcbr0). El contenidor tindrà accés a Internet, però no serà accessible directament des del host (tret de lxc-attach). Si necessites connectivitat real, tens dos camins:

Opció 1: NAT (default)

Funciona per a la majoria de casos. Si necessites només accés a Internet des del contenidor, no canviïs res.

Opció 2: Bridge amb IP del host

Això és més proper a una màquina virtual en xarxa. El contenidor pot tenir una IP a la teva LAN o a la mateixa xarxa que el host.

Primer, crea un bridge:

sudo apt install bridge-utils

Edita /etc/netplan/01-netcfg.yaml o l’equivalent segons la teva distro:

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: no
  bridges:
    br0:
      interfaces: [enp3s0]
      dhcp4: yes

Aplica els canvis:

sudo netplan apply

Després, edita la config del contenidor:

sudo nano /var/lib/lxc/contenedor1/config

Afegeix o modifica:

lxc.net.0.type = veth
lxc.net.0.link = br0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx

Aixeca el contenidor i verifica la IP:

sudo lxc-start -n contenedor1
sudo lxc-info -n contenedor1

Pots ara connectar-te per SSH si has configurat el servidor dins del contenidor.

Contenidors amb systemd

Moltes distribucions modernes fan servir systemd com a init. LXC pot tenir problemes per arrencar si no s’especifiquen alguns flags.

Assegura’t de tenir això a la config:

lxc.init.cmd = /sbin/init
lxc.apparmor.profile = unconfined
lxc.cap.drop =
lxc.cgroup2.devices.allow = a

Això li dona al contenidor permisos més amplis. No és l’ideal en entorns multiusuari o productius, però evita errors comuns amb l’arrencada.

Si vols més seguretat, pots ajustar això per contenidor, i fer servir perfils AppArmor o seccomp més estrictes.

Crear plantilles personalitzades

En producció, no voldràs passar per tot això cada vegada. Un enfocament útil és crear un contenidor base, instal·lar el necessari (SSH, actualitzacions, les teves eines habituals), i després clonar-lo:

sudo lxc-clone -o contenedor1 -n nuevo1

Això és ràpid i evita repetir passos. També pots fer servir lxc-copy amb –snapshot si el teu filesystem el suporta.

Logs i errors

LXC no sempre dona missatges clars quan alguna cosa falla. Si un contenidor no arrenca, consulta:

sudo lxc-start -n contenedor1 -F

Això mostra els logs directament a la terminal.

També pots veure el log persistent:

sudo cat /var/log/lxc/contenedor1.log

Problemes comuns:

  • AppArmor bloquejant accés (solució: unconfined a la config).
  • Sistema d’ arxius sense exec.
  • Xarxa mal configurada (per exemple, pont inexistent).
  • Kernel sense namespaces necessaris.

Què tenir en compte en producció

  • Persistència: Els contenidors viuen a /var/lib/lxc. Si aquest directori està en un disc amb poc espai o sense recolzament, és un risc.
  • Snapshots: LXC soporta snapshots si el teu FS ho permet (btrfs, LVM, ZFS).
  • Usuaris sense privilegis: LXC permet crear contenidors com a usuari normal amb unprivileged containers, fent servir subuid i subgid. És més segur, però pot ser complex si no ho configures bé. Si treballes en un entorn multiusuari, val la pena revisar aquesta opció.
  • Integració amb systemd del host: Pots integrar contenidors com a serveis de systemd amb arxius .service, permetent que arrenquin a l’inici del sistema.

Contenidors sense privilegis

Què són i per què importen

Els contenidors sense privilegis permeten que un usuari normal creï i executi contenidors sense requerir privilegis de root sobre el host. Internament, LXC fa servir un mapatge d’IDs (UID i GID) perquè el root del contenidor no sigui el root del host.

Això no és només una recomanació de seguretat: en entorns multiusuari, proves automatitzades o servidors accessibles per a diverses persones, executar contenidors sense privilegis evita problemes greus si algú trenca l’aïllament.

Configuració pas a pas

1. Edita els arxius d’IDs subordinats

El sistema necessita saber quins rangs d’UID i GID pot fer servir el teu usuari dins del contenidor. Edita o afegeix aquestes línies:

sudo nano /etc/subuid
sudo nano /etc/subgid

Exemple per a l’usuari:

joan:100000:65536

Això significa que es podrà mapejar 65536 UIDs a partir del 100000.

2. Configura els permisos de LXC per al teu usuari

Edita (o crea) l’arxiu:

~/.config/lxc/default.conf

Amb aquest contingut:

lxc.include = /etc/lxc/default.conf
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536

Assegura’t també que ~/.local/share/lxc/ existeixi:

mkdir -p ~/.local/share/lxc

3. Crear el contenidor com a usuari

lxc-create -n cont1 -t download

Durant la creació, si veus errors relacionats amb permisos, assegura’t que el backend d’emmagatzematge fet servir (per defecte dir) permet operacions amb IDs no reals. Si fas servir ZFS o LVM, pot requerir ajustos addicionals.

4. Arrencar el contenidor

lxc-start -n cont1 -F

Per a veure la llista de contenidors creats pel teu usuari:

lxc-ls --fancy -P ~/.local/share/lxc/

5. Problemes comuns

  • El root del contenidor no podrà accedir a arxius fora del mapping permès.
  • Alguns serveis (com els kernel) poden fallar dins del contenidor si el kernel o la configuració de namespaces no ho permet.
  • Si el contenidor no arrenca, activa els logs detallats:
lxc-start -n cont1 -F -l DEBUG -o cont1.log

Avantatges reals

  • Redueixes el risc que un contenidor accedeixi o danyi el host.
  • Pots delegar proves o entorns aïllats sense donar accés a root.
  • Pots executar entorns múltiples amb més seguretat si tens diversos usuaris en el sistema.

Integrar contenidors LXC amb systemd al host

Per què fer-ho

Això et permet que els contenidors arrenquin amb el sistema operatiu i que puguis gestionar-los com qualsevol altre servei:

sudo systemctl start lxc@contenidor1
sudo systemctl enable lxc@contenidor1

Ideal per a producció, desenvolupament local persistent, o entorns on s’ espera que els contenidors estiguin disponibles després d’ un reboot.

Com configurar-lo

1. Habilitar el servei lxc@

LXC ja instal·la un servei anomenat lxc@.service. Pots usar-lo directament:

sudo systemctl enable lxc@contenidor1

Aquest servei fa servir lxc-start -n contenidor1 per aixecar-lo en mode background en arrencar el sistema.

2. Verifica que lxc.autostart estigui configurat

Alternativament, pots fer servir el sistema intern d’autostart de LXC:

# A /var/lib/lxc/contenidor1/config
lxc.start.auto = 1
lxc.start.delay = 5

I després habilitar el servei general:

sudo systemctl enable lxc

Això arrenca tots els contenidors amb lxc.start.auto = 1.

Diferències entre ambdós enfocaments

  1. lxc@.service per contenidor: més controlat, pots veure logs per unitat.
  2. lxc.service + lxc.start.auto: més simple si tens molts contenidors similars.

Tots dos funcionen bé; l’elecció depèn de la teva preferència per la teva preferència o configuració centralitzada.

Scripts i configuracions reutilitzables

Script per a crear contenidor base

#!/bin/bash
# crear_lxc.sh

set -e

CONT_NAME=$1
DIST=${2:-debian}
RELEASE=${3:-bookworm}
ARCH=${4:-amd64}
 
if [ -z "$CONT_NAME" ]; then
    echo "Ús: $0 nom_contenidor [distro] [release] [arch]"
    exit 1
fi
 
sudo lxc-create -n "$CONT_NAME" -t download -- \
    --dist "$DIST" --release "$RELEASE" --arch "$ARCH"
 
echo "Contenidor $CONT_NAME creat amb $DIST $RELEASE ($ARCH)"

Ús:

./crear_lxc.sh contenedor1 ubuntu 22.04 amd64

Script per a clonar i arrencar

#!/bin/bash
# clonar_i_arrencar.sh
 
BASE=$1
NUEVO=$2
 
if [ -z "$BASE" ] || [ -z "$NUEVO" ]; then
    echo "Ús: $0 contenidor_base contenidor_nou"
    exit 1
fi
 
sudo lxc-copy -n "$BASE" -N "$NOU" --snapshot
sudo lxc-start -n "$NOU" -d
 
echo "Clonat i arrencat: $NOU"

Àlies útils

Pots afegir això al teu .bashrc o .zshrc:

alias lxcls='lxc-ls --fancy'
alias lxcup='sudo lxc-start -n'
alias lxcdown='sudo lxc-stop -n'
alias lxcin='sudo lxc-attach -n'

Xequejar IP d’ un contenidor

lxc-info -n contenidor1 | grep IP

O des de dins del contenidor:

lxc-attach -n contenidor1 -- ip a

Et convé fer servir LXD?

LXD és una capa sobre LXC, amb API REST, interfície en línia de comandaments més senzilla, clustering i emmagatzematge en xarxa. Pot ser útil, però si vols control total i no depens d’aquesta API, LXC a seques és més directe. També evita dependre de dimonis extra o de Snap (que és com es distribueix LXD a Ubuntu).

Checklist tècnica per aixecar un contenidor LXC bàsic

  • Instal·lar paquetes: lxc, lxc-templates, uidmap, bridge-utils.
  • Verificar kernel i namespaces amb lxc-checkconfig.
  • Crear contenidor: lxc-create -n nom -t download.
  • Configurar xarxa segons necessitat (lxcbr0 o bridge manual).
  • Arrencar: lxc-start -n número -d.
  • Accedir: lxc-attach -n nom.
  • Ajustar systemd si cal.
  • Cloneu la instantània per a reutilitzar-la.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *