{"id":21140247,"url":"https://github.com/kurosaki1976/archlinux-lxc","last_synced_at":"2025-10-19T01:45:19.566Z","repository":{"id":197259488,"uuid":"202140121","full_name":"kurosaki1976/archlinux-lxc","owner":"kurosaki1976","description":"Contenedores LXC en Arch Linux","archived":false,"fork":false,"pushed_at":"2021-02-27T16:00:48.000Z","size":172,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-09-29T20:24:54.532Z","etag":null,"topics":["arch","arch-linux","arch-linux-distro","arch-linux-lxc","archlinux","archlinux-lxc","bridge","container","contenedores","debian","linux","lxc","lxc-containers","lxc-templates","lxcfs","ubuntu"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kurosaki1976.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-08-13T12:31:34.000Z","updated_at":"2023-09-29T20:26:04.459Z","dependencies_parsed_at":"2023-09-29T21:31:30.371Z","dependency_job_id":null,"html_url":"https://github.com/kurosaki1976/archlinux-lxc","commit_stats":null,"previous_names":["kurosaki1976/archlinux-lxc"],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurosaki1976%2Farchlinux-lxc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurosaki1976%2Farchlinux-lxc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurosaki1976%2Farchlinux-lxc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurosaki1976%2Farchlinux-lxc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kurosaki1976","download_url":"https://codeload.github.com/kurosaki1976/archlinux-lxc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225482624,"owners_count":17481227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arch","arch-linux","arch-linux-distro","arch-linux-lxc","archlinux","archlinux-lxc","bridge","container","contenedores","debian","linux","lxc","lxc-containers","lxc-templates","lxcfs","ubuntu"],"created_at":"2024-11-20T07:13:27.834Z","updated_at":"2025-10-19T01:45:14.528Z","avatar_url":"https://github.com/kurosaki1976.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Instalación y configuración de LXC en Arch Linux\n\n## Autores\n\n- [Ixen Rodríguez Pérez - kurosaki1976](ixenrp1976@gmail.com)\n- [Yoel Torres Vázquez - oneohthree](https://github.com/oneohthree)\n\n## Breve introducción a LXC\n\nLXC es una interface de espacio de usuario para el soporte de contenedores sobre el kernel de Linux. Permite crear y administrar contenedores de sistemas o aplicaciones a través de herramientas sencillas y una potente API.\n\nLos contenedores LXC frecuentemente son considerados como algo entre chroot y una máquina virtual. El objetivo fundamental de LXC es crear un entorno lo más cercano posible a una instalación estándar de Linux, pero sin la necesidad de un kernel independiente.\n\nLXC actualmente se compone de varios componentes individuales: la biblioteca `liblxc`, varios bindings de lenguajes de programación para la API, tales como: Python 2 y 3, Lua, Go, Ruby y Haskell, un conjunto de heramientas estándar para controlar los contenedores, además de plantillas de contenedores de distribución.\n\nLXC 2.0 y 3.0 son versiones LTS (soporte extendido), la primera tendrá soporte hasta junio de 2021 y la última hasta junio de 2023. La versión 3.2 está disponible en Arch Linux.\n\n## Instalación de paquetes necesarios\n\n```bash\npacman -S lxc lxcfs\n```\n\nEl paquete `lxc` sugiere la instalación de `dnsmasq`, necesario para el correcto funcionamiento de la herramienta `lxc-net`, que permite configurar un bridge simple para los contenedores. Sin embargo, podemos prescindir de esta herramienta como se verá más adelante. Esta guía utiliza el modelo de red en el que se usa un bridge compartido entre el host y los guests.\nPor otro lado, el paquete `lxcfs` permite definir los parámetros de límite de memoria RAM, swap y cpu que utilizarán los contenedores.\n\nUn ejemplo de configuración con estos parámetros definidos, luciría así:\n\n```bash\nlxc.cgroup.cpuset.cpus = 1-2\nlxc.cgroup.cpu.shares = 1024\nlxc.cgroup.memory.limit_in_bytes = 768M\nlxc.cgroup.memory.memsw.limit_in_bytes = 1G\n```\n\nActivar el servicio `lxcfs`.\n\n```bash\nsystemctl start lxcfs\nsystemctl enable lxcfs\n\n```\n\nPara poder crear contenedores de Debian/Ubuntu, debemos instalar además:\n\n```bash\npacman -S debootstrap debian-archive-keyring ubuntu-keyring\n```\n\n## Configuración de la red\n\nEl paquete de Arch Linux no incluye ninguna configuración de red por defecto para los contenedores. El archivo `/etc/lxc/default.conf` contiene solamente el valor `lxc.network.type = empty`.\n\nA un contenedor típico se le puede asignar su propia interface de red física (**phys**) o puede tener un dispositivo virtual (**veth**) el que puede ser puesto directamente en un dispositivo de red con bridge compartido con el host. También puede ser colocado en un dispositivo de red con bridge al que se le asigna una red interna y se enmascara para acceder hacia redes externas.\n\nEn este caso se hará uso de `veth` con `host-shared bridge`. Suponiendo que la interfaz de red se llama `enp2s0`, se debe crear los archivos `/etc/netctl/enp2s0` y `/etc/netctl/vmbr0` como sigue:\n\n```bash\nDescription='Ethernet Interface'\nInterface=enp2s0\nConnection=ethernet\nIP=no\n```\n\n```bash\nDescription='Bridge Interface'\nInterface=vmbr0\nConnection=bridge\nBindsToInterfaces=enp2s0\nIP=static\nAddress=('192.168.0.1/24')\nGateway='192.168.0.254'\nDNS=('8.8.8.8 8.8.4.4')\nHostname=\"host.dominio.tld\"\nDNSDomain=\"dominio.tld\"\nDNSSearch=\"dominio.tld\"\nSkipNoCarrier=yes\nSkipForwardingDelay=yes\n```\n\nEn la configuración anterior se hace uso de una dirección de red estática en el `bridge`, de existir un servidor DHCP se debe configurar como sigue:\n\n```bash\nDescription='Bridge Interface'\nInterface=vmbr0\nConnection=bridge\nBindsToInterfaces=enp2s0\nIP=dhcp\nSkipNoCarrier=yes\nSkipForwardingDelay=yes\n```\n\nActivar las interfaces de red.\n\n```bash\nsystemctl stop lxc-net\nsystemctl disable lxc-net\nnetctl stop-all\nnetctl enable enp2s0 vmbr0\n```\n\nReiniciar el host.\n\nLa sección `network` en la configuración del contenedor, almacenada en el host en `/var/lib/lxc/\u003cnombre-del-contenedor\u003e/config` luciría como sigue:\n\n```bash\nlxc.net.0.type = veth\nlxc.net.0.hwaddr = 00:16:3e:c6:64:cc\nlxc.net.0.ipv4.address = 192.168.0.1/24\nlxc.net.0.ipv4.gateway = 192.168.0.254\nlxc.net.0.link = vmbr0\nlxc.net.0.flags = up\n```\n\nEs posible también utilizar una plantilla para los nuevos contenedores. Editar el archivo `/etc/lxc/default.conf` como sigue:\n\n```bash\nlxc.net.0.type = veth\nlxc.net.0.link = vmbr0\nlxc.net.0.flags = up\nlxc.net.0.hwaddr = 00:16:3e:xx:xx:xx\n```\n\n## Administración de contenedores\n\nA diferencia del paquete LXC en Debian/Ubuntu, el disponible en Arch Linux no contiene las plantillas de creación y configuración de contenedores distintos de la propia distribución; sin embargo, es posible agregarlos. Para ello, se debe extraer el contenido del paquete `lxc-templates` de Debian/Ubuntu en los subdirectorios existentes en `/usr/share/lxc/config` y `/usr/share/lxc/templates`.\n\nOtra opción es descargar los fuentes del sitio oficial [LXC Downloads](https://linuxcontainers.org/lxc/downloads/), compilarlos e instalarlos en el sistema.\n\n### Crear contenedores\n\nLos contenedores se descargan utilizando `debootstrap`, posteriormente un sistema Debian mínimo se instala en `/var/lib/lxc/\u003cnombre-del-contenedor\u003e/rootfs` listo para ejecutarse y ser usado.\n\n```bash\nlxc-create -n \u003cnombre-del-contenedor\u003e -t debian -- -r buster\n```\n\nSi se accede a Internet a través de un proxy, es posible especificarlo en variables de entorno para descargar los archivos del contenedor.\n\n```bash\nexport http_proxy=http://usuario:contraseña@proxy:puerto/\nexport https_proxy=http://usuario:contraseña@proxy:puerto/\n```\n\nSi se tiene un mirror del repositorio de paquetes de Debian/Ubuntu también es posible pasar los parámetros `--mirror=MIRROR` y `--security-mirror=MIRROR` quedando así:\n\n```bash\nlxc-create -n \u003cnombre-del-contenedor\u003e -t debian -- -r buster --mirror=http//debian.dominio.tld/buster --security-mirror=http//debian.dominio.tld/buster-security\n```\n\nSi se desea crear el contenedor con un tamaño específico de dispositivo de bloques, es decir emulando un disco duro.\n\n```bash\nlxc-create -n \u003cnombre-del-contenedor\u003e -t debian -B loop --fstype ext4 --fssize 5G -- -r buster --mirror=http//debian.dominio.tld/buster --security-mirror=http//debian.dominio.tld/buster-security\n```\n\n### Operaciones básicas con contenedores\n\nIniciar un contenedor en primer plano\n\n```bash\nlxc-start -n \u003cnombre-del-contenedor\u003e -F\n```\n\nIniciar un contenedor en segundo plano\n\n```bash\nlxc-start -n \u003cnombre-del-contenedor\u003e\n```\n\nPara iniciar automáticamente durante el arranque del host, editar la configuración del contenedor añadiendo `lxc.start.auto = 1`.\n\nEjecutar una consola en el contenedor\n\n```bash\nlxc-console -n \u003cnombre-del-contenedor\u003e -t 0\n```\n\nDetener un contenedor enviando un apagado limpio\n\n```bash\nlxc-stop -n \u003cnombre-del-contenedor\u003e\n```\n\nDetener un contenedor terminando todos los procesos activos\n\n```bash\nlxc-stop -k -n \u003cnombre-del-contenedor\u003e\n```\n\n### Clonar un contenedor\n\n```bash\nlxc-copy -n \u003cnombre-del-contenedor\u003e -N \u003cnombre-nuevo-contenedor\u003e -s\n```\n\n### Eliminar un contenedor\n\n```bash\nlxc-destroy -n \u003cnombre-del-contenedor\u003e -f\n```\n\n### Listar contenedores\n\n```bash\nlxc-ls --fancy\n```\n\n### Cambiar contraseña de root\n\n```bash\nlxc-attach -n \u003cnombre-del-contenedor\u003e passwd\n```\n\n### TIP\n\nLos contenedores que se creen usando las plantillas predefinidas en el paquete `lxc-templates` son muy básicos, de hecho se reducen a la instalación de los siguientes paquetes:\n\nExtracto de fichero plantilla `/usr/share/lxc/templates/lxc-debian`.\n\n```bash\n    packages=\\\n$init,\\\nifupdown,\\\nlocales,\\\ndialog,\\\nisc-dhcp-client,\\\nnetbase,\\\nnet-tools,\\\n$iproute,\\\nopenssh-server\n```\n\nEsto puede ocasionar molestias a la hora de la instalación y configuración de servicios dentro de los contenedores, porque como se puede observar no se instala ningún editor de texto.\n\nUna opción sería modificar el fichero plantilla de la distribución a utilizar agregando paquetes al listado predefindo. Sin embargo, esta solución no es idónea para usuarios noveles quienes por lo general desconocen qué paquetes son los encargados de hacer funcionar muchos de los comandos que se ejecutan en la consola; para ellos, la solución ideal sería solo agregar al listado, el paquete `aptitude` y una vez creado y teniendo funcionando el contenedor, ejecutar la selección de tareas de instalación de paquetes que dejarían el sistema con una configuración mínima completamente operativa.\n\n```bash\naptitude install -y ~pstandard ~prequired ~pimportant\n```\n\n## Conclusiones\n\nEl objetivo de esta sencilla guía es proporcionar un entorno LXC funcional sobre Arch Linux para ejecutar contenedores con distribuciones de Debian/Ubuntu con fines educativos; para entornos productivos, se deberían realizar configuraciones más avanzadas. Se recomienda consultar el manual de cada una de las herramientas disponibles en LXC.\n\n## Referencias\n\n* [Linux Containers](https://linuxcontainers.org/)\n* [Linux Containers - LXC - Introduction](https://linuxcontainers.org/lxc/introduction/)\n* [Instalación y configuración de LXC en Debian Stretch](https://www.sysadminsdecuba.com/2019/08/instalacion-y-configuracion-de-lxc-en-debian-stretch/)\n* [Linux Containers - ArchWiki](https://wiki.archlinux.org/index.php/Linux_Containers)\n* [Network configuration - ArchWiki](https://wiki.archlinux.org/index.php/Network_configuration)\n* [Network bridge - ArchWiki](https://wiki.archlinux.org/index.php/Network_bridge)\n* [LXC 2.0 container not starting on Debian 9 Stretch when using cgroup limits](https://www.claudiokuenzler.com/blog/832/lxc-2.0-container-debian-9-stretch-not-starting-using-cgroup-limits)\n* [man 5 lxc.container.conf]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurosaki1976%2Farchlinux-lxc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkurosaki1976%2Farchlinux-lxc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurosaki1976%2Farchlinux-lxc/lists"}