diff --git a/roles/lmn_vm/files/run-vm.sh b/roles/lmn_vm/files/run-vm.sh index 45f5685..c3f649d 100755 --- a/roles/lmn_vm/files/run-vm.sh +++ b/roles/lmn_vm/files/run-vm.sh @@ -96,7 +96,7 @@ create-clone() { # and actually rename the vm (this also updates part of the storage path): sed -i "s/${VM_NAME}/${VM_NAME}-clone/" "${VM_XML}" # set virtiofs-Socket - sed -i "s:VIRTIOFSSOCKET:/run/virtiofs/${VM_NAME}-clone.sock:" "${VM_XML}" + sed -i "s:VIRTIOFSSOCKET:/run/user/${UID}/virtiofs-${VM_NAME}.sock:" "${VM_XML}" } QEMU='qemu:///session' diff --git a/roles/lmn_vm/files/start-virtiofsd.sh b/roles/lmn_vm/files/start-virtiofsd.sh index 32dfae1..9326a5f 100755 --- a/roles/lmn_vm/files/start-virtiofsd.sh +++ b/roles/lmn_vm/files/start-virtiofsd.sh @@ -15,4 +15,36 @@ VM_NAME="$1" chgrp 1010 "/lmn/media/${SUDO_USER}" chmod 0775 "/lmn/media/${SUDO_USER}" -systemctl start virtiofs@${VM_NAME}-clone:${SUDO_USER}.service +socket="/run/user/$(id -u $SUDO_USER)/virtiofs-${VM_NAME}.sock" + +# FIXME: This does not work. In windows, there is no virtiofs device. +# In GNU/Linux it's only readable. +# +#if ! systemctl -q is-active virtiofs-${VM_NAME}.socket ; then +# systemd-run --unit=virtiofs-${VM_NAME} \ +# --slice=system-virtiofs \ +# --collect \ +# --socket-property=ListenStream="$socket" \ +# --socket-property=Accept=no \ +# --socket-property=SocketMode=0700 \ +# --socket-property=SocketUser=${SUDO_USER} \ +# --property=Type=exec \ +# --property=StandardInput=socket \ +# /usr/local/bin/virtiofsd --log-level debug --sandbox none \ +# --syslog --fd=0 --shared-dir "/lmn/media/${SUDO_USER}" +#else +# systemctl restart virtiofs-${VM_NAME}.socket +#fi + +if [[ ! -S "$socket" ]] ; then + systemd-run --unit=virtiofs-${VM_NAME} \ + --slice=system-virtiofs \ + --collect \ + --property=Type=exec \ + --property=SuccessExitStatus=1 \ + --property="ExecStopPost=rm $socket" \ + /usr/local/bin/virtiofsd --socket-path "$socket" \ + --shared-dir "/lmn/media/${SUDO_USER}" +fi +sleep 1 +chown "${SUDO_USER}" "$socket" diff --git a/roles/lmn_vm/files/virtiofs@.service b/roles/lmn_vm/files/virtiofs@.service deleted file mode 100644 index 070bd0b..0000000 --- a/roles/lmn_vm/files/virtiofs@.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=share home folders via virtiofsd -## $I is split into two parameters: VM:USER - -[Service] -Type=exec -ExecStartPre=/usr/bin/mkdir -p /run/virtiofs/ -ExecStart=/usr/bin/sh -c 'v="%i"; soc="$${v%%:*}"; usr="$${v##*:}"; exec /usr/local/bin/virtiofsd --announce-submounts --socket-path="/run/virtiofs/$${soc}.sock" --shared-dir "/lmn/media/$${usr}"' -ExecStartPost=/usr/bin/sleep 1 -ExecStartPost=/usr/bin/chmod 755 /run/virtiofs/ -ExecStartPost=/usr/bin/sh -c 'v="%i"; soc="$${v%%:*}"; usr="$${v##*:}"; chown "$$usr" "/run/virtiofs/$${soc}.sock"' -ExecStopPost=/usr/bin/sh -c 'v="%i"; soc="$${v%%:*}"; rm "/run/virtiofs/$${soc}.sock"' -SuccessExitStatus=1 - -[Install] -WantedBy=multi-user.target diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index 20e4437..7d92502 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -152,10 +152,10 @@ mode: '0644' notify: "enable vmimage-torrent.service" -- name: Deploy virtiofs service - copy: - src: virtiofs@.service - dest: /etc/systemd/system/ +- name: Remove virtiofs service + file: + path: /etc/systemd/system/virtiofs@.service + state: absent - name: Deploy bridge.conf needed for qemu session mode lineinfile: