[lxc-devel] [distrobuilder/master] generators: Add virtio-fs to lxd-agent init scripts

monstermunchkin on Github lxc-bot at linuxcontainers.org
Fri Oct 30 14:03:34 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 310 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20201030/c0e18d27/attachment.bin>
-------------- next part --------------
From 76a4b2fd347afe795df3263f2ee0fd188495b665 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Fri, 30 Oct 2020 15:00:46 +0100
Subject: [PATCH] generators: Add virtio-fs to lxd-agent init scripts

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 generators/lxd-agent.go | 122 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 107 insertions(+), 15 deletions(-)

diff --git a/generators/lxd-agent.go b/generators/lxd-agent.go
index 88f1e3e..afa49bc 100644
--- a/generators/lxd-agent.go
+++ b/generators/lxd-agent.go
@@ -66,15 +66,18 @@ func (g LXDAgentGenerator) handleSystemd(sourceDir string) error {
 Description=LXD - agent
 Documentation=https://linuxcontainers.org/lxd
 ConditionPathExists=/dev/virtio-ports/org.linuxcontainers.lxd
-Requires=lxd-agent-9p.service
+Wants=lxd-agent-virtiofs.service
+After=lxd-agent-virtiofs.service
+Wants=lxd-agent-9p.service
 After=lxd-agent-9p.service
+
 Before=cloud-init.target cloud-init.service cloud-init-local.service
 DefaultDependencies=no
 
 [Service]
 Type=notify
-WorkingDirectory=/run/lxd_config/9p
-ExecStart=/run/lxd_config/9p/lxd-agent
+WorkingDirectory=/run/lxd_config/drive
+ExecStart=/run/lxd_config/drive/lxd-agent
 Restart=on-failure
 RestartSec=5s
 StartLimitInterval=60
@@ -103,16 +106,17 @@ WantedBy=multi-user.target
 Description=LXD - agent - 9p mount
 Documentation=https://linuxcontainers.org/lxd
 ConditionPathExists=/dev/virtio-ports/org.linuxcontainers.lxd
-After=local-fs.target
+After=local-fs.target lxd-agent-virtiofs.service
 DefaultDependencies=no
+ConditionPathIsMountPoint=!/run/lxd_config/drive
 
 [Service]
 Type=oneshot
 RemainAfterExit=yes
 ExecStartPre=-/sbin/modprobe 9pnet_virtio
-ExecStartPre=/bin/mkdir -p /run/lxd_config/9p
+ExecStartPre=/bin/mkdir -p /run/lxd_config/drive
 ExecStartPre=/bin/chmod 0700 /run/lxd_config/
-ExecStart=/bin/mount -t 9p config /run/lxd_config/9p -o access=0,trans=virtio
+ExecStart=/bin/mount -t 9p config /run/lxd_config/drive -o access=0,trans=virtio
 
 [Install]
 WantedBy=multi-user.target
@@ -128,6 +132,36 @@ WantedBy=multi-user.target
 		return err
 	}
 
+	lxdConfigShareMountVirtioFSUnit := `[Unit]
+Description=LXD - agent - virtio-fs mount
+Documentation=https://linuxcontainers.org/lxd
+ConditionPathExists=/dev/virtio-ports/org.linuxcontainers.lxd
+After=local-fs.target
+Before=lxd-agent-9p.service
+DefaultDependencies=no
+ConditionPathIsMountPoint=!/run/lxd_config/drive
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStartPre=/bin/mkdir -p /run/lxd_config/drive
+ExecStartPre=/bin/chmod 0700 /run/lxd_config/
+ExecStart=/bin/mount -t virtiofs config /run/lxd_config/drive
+
+[Install]
+WantedBy=multi-user.target
+`
+
+	err = ioutil.WriteFile(filepath.Join(sourceDir, systemdPath, "lxd-agent-virtiofs.service"), []byte(lxdConfigShareMountVirtioFSUnit), 0644)
+	if err != nil {
+		return err
+	}
+
+	err = os.Symlink(filepath.Join(sourceDir, systemdPath, "lxd-agent-virtiofs.service"), filepath.Join(sourceDir, "/etc/systemd/system/multi-user.target.wants/lxd-agent-virtiofs.service"))
+	if err != nil {
+		return err
+	}
+
 	udevPath := filepath.Join("/", "lib", "udev", "rules.d")
 
 	stat, err := os.Lstat(filepath.Join(sourceDir, "lib", "udev"))
@@ -148,14 +182,16 @@ func (g LXDAgentGenerator) handleOpenRC(sourceDir string) error {
 	lxdAgentScript := `#!/sbin/openrc-run
 
 description="LXD - agent"
-command=/run/lxd_config/9p/lxd-agent
+command=/run/lxd_config/drive/lxd-agent
 command_background=true
 pidfile=/run/lxd-agent.pid
-start_stop_daemon_args="--chdir /run/lxd_config/9p"
-required_dirs=/run/lxd_config/9p
+start_stop_daemon_args="--chdir /run/lxd_config/drive"
+required_dirs=/run/lxd_config/drive
 
 depend() {
-	need lxd-agent-9p
+	want lxd-agent-virtiofs
+	after lxd-agent-virtiofs
+	want lxd-agent-9p
 	after lxd-agent-9p
 	before cloud-init
 	before cloud-init-local
@@ -176,13 +212,15 @@ depend() {
 
 description="LXD - agent - 9p mount"
 command=/bin/mount
-command_args="-t 9p config /run/lxd_config/9p -o access=0,trans=virtio"
+command_args="-t 9p config /run/lxd_config/drive -o access=0,trans=virtio"
 required_files=/dev/virtio-ports/org.linuxcontainers.lxd
 
 start_pre() {
 	/sbin/modprobe 9pnet_virtio || true
+	# Don't proceed if the config drive is mounted already
+	mount | grep -q /run/lxd_config/drive && false
 	checkpath -d /run/lxd_config -m 0700
-	checkpath -d /run/lxd_config/9p
+	checkpath -d /run/lxd_config/drive
 }
 `
 
@@ -196,6 +234,31 @@ start_pre() {
 		return err
 	}
 
+	lxdConfigShareMountVirtioFSScript := `#!/sbin/openrc-run
+
+	description="LXD - agent - virtio-fs mount"
+	command=/bin/mount
+	command_args="-t virtiofs config /run/lxd_config/drive"
+	required_files=/dev/virtio-ports/org.linuxcontainers.lxd
+
+	start_pre() {
+		# Don't proceed if the config drive is mounted already
+		mount | grep -q /run/lxd_config/drive && false
+		checkpath -d /run/lxd_config -m 0700
+		checkpath -d /run/lxd_config/drive
+	}
+	`
+
+	err = ioutil.WriteFile(filepath.Join(sourceDir, "/etc/init.d/lxd-agent-virtiofs"), []byte(lxdConfigShareMountVirtioFSScript), 0755)
+	if err != nil {
+		return err
+	}
+
+	err = os.Symlink("/etc/init.d/lxd-agent-virtiofs", filepath.Join(sourceDir, "/etc/runlevels/default/lxd-agent-virtiofs"))
+	if err != nil {
+		return err
+	}
+
 	return nil
 }
 
@@ -218,21 +281,26 @@ exec lxd-agent
 
 	lxdConfigShareMountScript := `Description "LXD agent 9p mount"
 
-start on runlevel filesystem
+start on stopped lxd-agent-virtiofs
 
 pre-start script
+	if mount | grep -q /run/lxd_config/drive; then
+		stop
+		exit 0
+	fi
+
 	if ! modprobe 9pnet_virtio; then
 		stop
 		exit 0
 	fi
 
-	mkdir -p /run/lxd_config/9p
+	mkdir -p /run/lxd_config/drive
 	chmod 0700 /run/lxd_config
 end script
 
 task
 
-exec mount -t 9p config /run/lxd_config/9p -o access=0,trans=virtio
+exec mount -t 9p config /run/lxd_config/drive -o access=0,trans=virtio
 `
 
 	err = ioutil.WriteFile(filepath.Join(sourceDir, "/etc/init/lxd-agent-9p"), []byte(lxdConfigShareMountScript), 0755)
@@ -240,6 +308,30 @@ exec mount -t 9p config /run/lxd_config/9p -o access=0,trans=virtio
 		return err
 	}
 
+	lxdConfigShareMountVirtioFSScript := `Description "LXD agent virtio-fs mount"
+
+start on runlevel filesystem
+
+pre-start script
+	if mount | grep -q /run/lxd_config/drive; then
+		stop
+		exit 0
+	fi
+
+	mkdir -p /run/lxd_config/drive
+	chmod 0700 /run/lxd_config
+end script
+
+task
+
+exec mount -t virtiofs config /run/lxd_config/drive
+`
+
+	err = ioutil.WriteFile(filepath.Join(sourceDir, "/etc/init/lxd-agent-virtiofs"), []byte(lxdConfigShareMountVirtioFSScript), 0755)
+	if err != nil {
+		return err
+	}
+
 	return nil
 }
 


More information about the lxc-devel mailing list