Como configurar o AppArmor para que o KVM possa iniciar o convidado que possui uma cadeia de arquivos de apoio

2

Estou brincando com o uso de instantâneos externos do QVM para o KVM (porque eles são tão rápidos!) no Ubuntu 16.04 e tenho a seguinte configuração:

  • Todos os arquivos da VM estão em um único diretório (nomeado após o convidado).
  • Existe um link simbólico head.qcow2 que sempre aponta para a imagem qcow2 "head" superior. Dessa forma, não preciso continuar atualizando a configuração da VM. (edição virsh).
  • A imagem original / inferior é chamada base.qcow2

Eu uso o seguinte script para tirar um instantâneo (criar uma nova imagem qcow2 e torná-la a cabeça). O script só é executado quando o convidado não está em execução.

#!/bin/bash
UNIX_TIMESTAMP=$(date +%s)
CURRENT_BACKING_FILE='readlink head.qcow2'
NEW_HEAD_FILE="'pwd'/'echo $UNIX_TIMESTAMP'.qcow2"

# Create the new "head" disk image where all future changes are made.
sudo qemu-img create \
  -f qcow2 \
  -b $CURRENT_BACKING_FILE \
  $NEW_HEAD_FILE

# Update the symlink
rm head.qcow2
ln -s $NEW_HEAD_FILE head.qcow2

Isso funcionará bem quando head.qcow2 apontar para base.qcow2 ou eu executar o script uma vez para que haja apenas um único arquivo de apoio. No entanto, se houver uma cadeia de arquivos de apoio (por exemplo, um arquivo de apoio também tem um arquivo de apoio), então receberei o seguinte erro:

error: Failed to start domain template-ubuntu-docker2
error: internal error: early end of file from monitor, possible problem: 2018-04-05T19:04:55.597373Z qemu-system-x86_64: -drive file=/media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/head.qcow2,format=qcow2,if=none,id=drive-virtio-disk0: Could not open backing file: Could not open backing file: Could not open '/media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2': Permission denied

A saída de qemu-img --backing-chain head.qcow2 é:

image: head.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
backing file: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/1522954330.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

image: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/1522954330.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 4.1M
cluster_size: 65536
backing file: base.qcow2 (actual path: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2)
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

image: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 8.8G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false

Eu brinquei com a exclusão de imagens ou usando o qemu-img commit para mesclá-las, e assim que eu fosse para apenas uma ou duas imagens, o convidado começaria.

Como parecia um erro de permissão com "não foi possível abrir", tentei definir permissões para o 777 e ainda recebo a mesma mensagem de erro. Por isso, não deve haver um problema de permissão.

O que preciso fazer?

    
por Programster 05.04.2018 / 21:14

1 resposta

2

Parece que está relacionado ao AppArmor novamente (eu tinha um problema similar alguns anos atrás no Ubuntu 14.04 que eu esqueci). Consegui que funcionasse:

Instalando o apparmor-utils

sudo apt-get install apparmor-utils

Em seguida, encontre o ID do libvirt nos syslogs mais recentes:

sudo cat /var/log/syslog | grep "apparmor" | grep "DENIED" | grep libvirt-

Em seguida, use esse ID com o caminho completo para defini-lo como "modo de reclamação".

sudo aa-complain \
/etc/apparmor.d/libvirt/libvirt-b0cd5bdf-6dfc-4f75-bc0f-e38adff1cdd2

Em seguida, inicie seu convidado.

Isso parece uma solução alternativa na melhor das hipóteses e chato se eu tiver que fazer isso para cada convidado individualmente. Eu ficaria mais feliz se alguém fornecesse uma solução melhor.

    
por 05.04.2018 / 21:50