Prerequisits (ZFS filesystem)
# ZFS (optional) sudo apt install -y zfsutils-linux sudo lvcreate --name storage --size 100G ubuntu-vg sudo zpool create incus /dev/ubuntu-vg/storage sudo zpool set autotrim=on incus sudo zfs create incus/storage # uninstall LXD snap remove lxd
Incus installation
https://github.com/zabbly/incus
https://linuxcontainers.org/incus/docs/main/installing/
mkdir -p /etc/apt/keyrings/ curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-stable.sources Enabled: yes Types: deb URIs: https://pkgs.zabbly.com/incus/stable Suites: $(. /etc/os-release && echo ${VERSION_CODENAME}) Components: main Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/zabbly.asc EOF' sudo apt update sudo apt install -y incus bash-completion #incus-tools sudo usermod -aG incus-admin ubuntu # fixme # incus completion fish
Install Incus with Ansible
- name: Install Incus from Zabbly repository become: true block: - name: Download Zabbly repository key get_url: url: https://pkgs.zabbly.com/key.asc dest: /etc/apt/keyrings/zabbly.asc mode: '0644' - name: Install missing libs on Ubuntu > 24.04 ansible.builtin.apt: deb: "{{ item }}" loop: - https://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-13build1_amd64.deb - https://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb when: ansible_distribution_major_version | int > 24 - name: Add Zabbly Incus stable repository vars: ubuntu_release: "{{ 'focal' if (ansible_distribution_major_version | int > 24) else ansible_distribution_release | lower }}" ansible.builtin.apt_repository: repo: "deb [signed-by=/etc/apt/keyrings/zabbly.asc] https://pkgs.zabbly.com/incus/stable {{ ubuntu_release }} main" update_cache: yes - name: Install Incus apt: name: incus
Incus configuration
https://linuxcontainers.org/incus/docs/main/howto/initialize/#configuration-format
cat <<EOF | incus admin init --preseed config: core.https_address: 10.0.1.1:9999 images.auto_update_interval: 15 storage_pools: - name: data driver: zfs config: source: incus/storage # Network devices networks: - name: incusbr0 type: bridge config: ipv4.address: auto ipv6.address: none # Profiles profiles: - name: default description: "Default profile" config: limits.memory: 8GiB devices: disk: path: / pool: data type: disk nic: name: eth0 nictype: bridged parent: incusbr0 type: nic EOF incus storage list incus network list incus profile show default incus profile add container_1 profile_1
Proxy
incus config set core.proxy_http socks5://localhost:1080 incus config set core.proxy_https socks5://localhost:1080
Create instance
incus launch images:ubuntu/24.04 u2404 incus launch images:ubuntu/24.04/cloud u2404c < config.yaml incus launch images:alpine/edge alpine1
Enable Incus remote API authentication
https://linuxcontainers.org/incus/docs/main/howto/server_expose/#authenticate-with-the-incus-server
incus config set core.https_address :8443 incus config trust add foo
Terraform
http://www.panticz.de/terraform/incus
Incus under Ubuntu 22.04
https://github.com/zabbly/incus
Migrate LXC to Incus
https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/
https://discussion.scottibyte.com/t/convert-lxd-server-to-incus/357
Terraform provider
https://github.com/lxc/terraform-provider-incus
Images
https://images.linuxcontainers.org/
Incus releases videos
https://www.youtube.com/watch?v=XquQnbf6YmQ&list=PLVhiK8li7a-4wy1qHHafpkKUuM8GchDGj
WebUI
https://blog.simos.info/how-to-install-and-setup-the-incus-web-ui/
Demo
https://linuxcontainers.org/incus/try-it/
CLI
incus storage volume create default my_vol size=10Gib --type block incus config device asdd my_vm my_vol disk pool=default source=my_vol io.bus=nvme incus console v2 --type=vga incus config device add demo etc disk sourdce=/etc path=/mnt/etc readonly=true