OPTINAL: Uninstall LXD
snap remove lxd
Incus installation
https://github.com/zabbly/incus
https://linuxcontainers.org/incus/docs/main/installing/
curl -fsSL https://pkgs.zabbly.com/key.asc | gpg --show-keys --fingerprint
mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc
# Add incus stable repository
sh -c 'cat < /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'
apt-get update
apt-get install -y incus bash-completion #incus-tools
# OPTIONAL: add default ubuntu user to incus group
sudo usermod -aG incus-admin ubuntu
newgrp incus-admin
# fixme
# incus completion fishPrerequisits (ZFS filesystem)
# ZFS (optional)
sudo apt install -y zfsutils-linux
sudo lvcreate --name storage --size 100G ubuntu-vg
sudo zpool create rpool /dev/ubuntu-vg/storage
sudo zpool set autotrim=on rpool
sudo zfs create rpool/incusInstall 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
sudo incus storage create data zfs source=rpool/incus
incus profile device add default disk disk path=/ pool=data
incus network create incusbr0 --type=bridge ipv4.address=auto ipv6.address=auto
incus profile device add default nic nic name=eth0 nictype=bridged parent=incusbr0cat <
<strong>Proxy</strong>
<code>
incus config set core.proxy_http socks5://localhost:1080
incus config set core.proxy_https socks5://localhost:1080Proxy
lxc config set mycontainer environment.http_proxy http://[fe80::1%eth0]:13128
echo "export http_proxy=${http_proxy}" | incus shell u2604 -- tee -a /etc/environment
echo "export https_proxy=${https_proxy}" | incus shell u2604 -- tee -a /etc/environment
echo "export no_proxy=${no_proxy}" | incus shell u2604 -- tee -a /etc/environmentCreate 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=trueBackup container
CONTAINERS=$(incus list -c n --format csv)
for CONTAINER in ${CONTAINERS}; do
echo ${CONTAINER}
#CONTAINER=my-container1
# get profiles on previous incus server (at source server)
incus config show ${CONTAINER}| grep -A10 profiles
incus file pull ${CONTAINER}/etc/netplan/50-cloud-init.yaml ${CONTAINER}.50-cloud-init.yaml
incus stop ${CONTAINER}
incus publish ${CONTAINER} --alias ${CONTAINER} --reuse
incus start ${CONTAINER}
incus image export ${CONTAINER} ${CONTAINER}
incus image delete ${CONTAINER}
done
# incus delete ${CONTAINER}Import container from image
CONTAINER=my-container1
incus image import ${CONTAINER}.tar.gz --alias ${CONTAINER}
incus launch ${CONTAINER} ${CONTAINER} #-p storage-zfs -p nic-mgmt-dev -c boot.autostart=true
incus image delete ${CONTAINER}Update APT inside of all running incus containers
for CONTAINER in $(incus list -c n --format csv volatile.last_state.power=RUNNING); do
echo ${CONTAINER}
incus exec ${CONTAINER} -- bash -c "apt update -qq && apt dist-upgrade -y && apt clean && apt autoremove -y" | tee ${CONTAINER}.dist-upgrade.$(date -I).log
doneSnippets
incus config device override alpine eth0 ipv4.address=10.10.10.200
# disable container autostart
incus config set ${CONTAINER} boot.autostart=false