Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
  • Hardware
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
    • Cluster
    • Container
      • LXD: Create X11 container
      • OpenStack CLI (OSC)
      • Wireguard
      • proxy
      • router / dnsmasq
      • tftp
    • Migrate LXC to LXD
    • Network
    • Profile
    • Terraform
    • VMs (QEMU)
    • nesting
    • storage
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid
  • lxd

Create Ubuntu minimal image container

lxc remote add --protocol simplestreams ubuntu-minimal https://cloud-images.ubuntu.com/minimal/releases/
lxc launch ubuntu-minimal:lts ults
lxc launch ubuntu-minimal:jammy u2204m
# lxc exec u2004m -- apt install -y dnsutils vim inetutils-ping
#!/bin/bash

if [ $# -lt 1 ]; then
  echo "Usage $0 "
  exit 1
else
  CONTAINER=$1
fi

OS_VERSION=${2-lts}

# create container
lxc launch ubuntu:${OS_VERSION} ${CONTAINER}
sleep 10

# deploy SSH key
lxc file push --uid 0 --gid 0 --mode 600 ~/.ssh/id_rsa.pub ${CONTAINER}/root/.ssh/authorized_keys

# configure http(s) proxy inside of container (if set on host)
[ -z ${http_proxy} ] || echo "export http_proxy=$http_proxy" | lxc shell ${CONTAINER} -- tee -a /etc/environment
[ -z ${https_proxy} ] || echo "export https_proxy=$https_proxy" | lxc shell ${CONTAINER} -- tee -a /etc/environment

# update APT repository
lxc exec ${CONTAINER} -- bash -c ". /etc/environment && apt update -qq && apt -qqq -y dist-upgrade"

# Optional: install applications
#lxc exec ${CONTAINER} -- bash -c ". /etc/environment && apt install -y haproxy"

Create default container

# launch from image
lxc launch images:grafana-usage-dev grafana-usage-dev -p storage-zfs -p nic-mgmt-dev -p nic-mgmt-stage -c boot.autostart=true

CONTAINER_NAME=www1-dev

lxc launch ubuntu:20.04 ${CONTAINER_NAME} -c boot.autostart=true -p disk-zfs -p nic-dev-mgmt
# -c security.privileged=true

# lxc exec ${CONTAINER_NAME} -- rm /etc/netplan/50-cloud-init.yaml
# lxc exec ${CONTAINER_NAME} -- bash -c "cat < /etc/netplan/dev-mgmt.yaml
# network:
#   version: 2
#   ethernets:
#     dev-mgmt:
#       dhcp4: no
#       addresses: [10.33.0.131/24]
#       gateway4: 10.33.0.1
#       routes:
#         - to: 10.33.0.0/16
#           via: 10.33.0.1
#       nameservers:
#         addresses: [10.0.0.111, 10.0.2.222]
#         search: [dev.example.com]
# EOF
# "

lxc file push /root/.ssh/authorized_keys ${CONTAINER_NAME}/root/.ssh/authorized_keys

lxc exec ${CONTAINER_NAME} -- apt update
lxc exec ${CONTAINER_NAME} -- apt dist-upgrade -y
lxc exec ${CONTAINER_NAME} -- apt purge -y lxd lxd-client unattended-upgrades packagekit linux-image-unsigned-5.6.0-1026-oem
lxc exec ${CONTAINER_NAME} -- systemctl disable snapd.service && umount  /snap && apt purge -y snapd
lxc exec ${CONTAINER_NAME} -- apt autoremove -y
lxc exec ${CONTAINER_NAME} -- apt clean

lxc exec ${CONTAINER_NAME} -- locale-gen en_US.UTF-8

Create container with Ansible

- name: Create container
  hosts: lxd.example.com
  tasks:
    - name: Create LXD container
      lxd_container:
        name: www1-dev
        source:
          type: image
          mode: pull
          server: https://cloud-images.ubuntu.com/minimal/releases
          # server: https://images.linuxcontainers.org
          alias: "lts"
          # alias: ubuntu/focal/cloud
          protocol: simplestreams
        config:
          limits.cpu: "2"
          boot.autostart: "true"
          volatile.eth0.hwaddr: "00:16:3e:aa:bb:cc"
          user.user-data: |
            #cloud-config
            locale: en_US.UTF-8
            timezone: Europe/Berlin
            apt:
              sources_list: |
                deb [arch=amd64] http://mirror.example.com/current/ubuntu $RELEASE main restricted universe multiverse
                deb [arch=amd64] http://mirror.example.com/current/ubuntu $RELEASE-updates main restricted universe multiverse
                deb [arch=amd64] http://mirror.example.com/current/ubuntu $RELEASE-security main restricted universe multiverse
                deb [arch=amd64] http://mirror.example.com/current/ubuntu $RELEASE-backports main restricted universe multiverse
            apt_upgrade: true
            package_upgrade: true
            packages:
              - openssh-server
            disable_root: false
            ssh_authorized_keys:
              - "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
          user.network-config: |
            version: 1
            config:
              - type: physical
                name: dev-mgmt
                subnets:
                  - type: static
                    address: 10.3.161.44/20
                    gateway: 10.3.160.1
                    routes:
                    - gateway: 10.4.16.1
                      network: 10.4.0.0/16
                    dns_nameservers:
                      - 10.88.2.74
                      - 10.88.2.174
                    dns_search:
                      - dev.example.com
        profiles: ["disk-zfs", "nic-dev-mgmt"]
Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung