Skip to content

Commit e773db0

Browse files
authored
Merge pull request #1655 from afbjorklund/prefix
Allow changing prefix for the installations
2 parents 5a35044 + b4e7045 commit e773db0

File tree

10 files changed

+67
-42
lines changed

10 files changed

+67
-42
lines changed

examples/default.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,10 @@ hostResolver:
430430
# - 1.1.1.1
431431
# - 1.0.0.1
432432

433+
# Prefix to use for installing guest agent, and containerd with dependencies (if configured)
434+
# 🟢 Builtin default: /usr/local
435+
guestInstallPrefix: null
436+
433437
# ===================================================================== #
434438
# GLOBAL DEFAULTS AND OVERRIDES
435439
# ===================================================================== #

pkg/cidata/cidata.TEMPLATE.d/boot/25-guestagent-base.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ if [ "${LIMA_CIDATA_MOUNTTYPE}" = "reverse-sshfs" ]; then
1515
fi
1616

1717
# Install or update the guestagent binary
18-
install -m 755 "${LIMA_CIDATA_MNT}"/lima-guestagent /usr/local/bin/lima-guestagent
18+
install -m 755 "${LIMA_CIDATA_MNT}"/lima-guestagent "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/lima-guestagent
1919

2020
# Launch the guestagent service
2121
if [ -f /sbin/openrc-run ]; then
@@ -27,7 +27,7 @@ supervisor=supervise-daemon
2727
name="lima-guestagent"
2828
description="Forward ports to the lima-hostagent"
2929
30-
command=/usr/local/bin/lima-guestagent
30+
command=${LIMA_CIDATA_GUEST_INSTALL_PREFIX}/bin/lima-guestagent
3131
command_args="daemon"
3232
command_background=true
3333
pidfile="/run/lima-guestagent.pid"
@@ -40,5 +40,5 @@ else
4040
# Remove legacy systemd service
4141
rm -f "/home/${LIMA_CIDATA_USER}.linux/.config/systemd/user/lima-guestagent.service"
4242

43-
sudo /usr/local/bin/lima-guestagent install-systemd
43+
sudo "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/lima-guestagent install-systemd
4444
fi

pkg/cidata/cidata.TEMPLATE.d/boot/40-install-containerd.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ command -v systemctl >/dev/null 2>&1 || exit 0
1313
tmp_extract_nerdctl="$(mktemp -d)"
1414
tar Cxzf "${tmp_extract_nerdctl}" "${LIMA_CIDATA_MNT}"/nerdctl-full.tgz bin/nerdctl
1515

16-
if [ ! -f /usr/local/bin/nerdctl ] || [[ "${tmp_extract_nerdctl}"/bin/nerdctl -nt /usr/local/bin/nerdctl ]]; then
17-
if [ -f /usr/local/bin/nerdctl ]; then
16+
if [ ! -f "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ] || [[ "${tmp_extract_nerdctl}"/bin/nerdctl -nt "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ]]; then
17+
if [ -f "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ]; then
1818
(
1919
set +e
2020
echo "Upgrading existing nerdctl"
21-
echo "- Old: $(/usr/local/bin/nerdctl --version)"
21+
echo "- Old: $("${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl --version)"
2222
echo "- New: $("${tmp_extract_nerdctl}"/bin/nerdctl --version)"
2323
systemctl disable --now containerd buildkit stargz-snapshotter
2424
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh uninstall
2525
)
2626
fi
27-
tar Cxzf /usr/local "${LIMA_CIDATA_MNT}"/nerdctl-full.tgz
27+
tar Cxzf "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}" "${LIMA_CIDATA_MNT}"/nerdctl-full.tgz
2828

2929
mkdir -p /etc/bash_completion.d
3030
nerdctl completion bash >/etc/bash_completion.d/nerdctl

pkg/cidata/cidata.TEMPLATE.d/lima.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ LIMA_CIDATA_DISKS={{ len .Disks }}
1212
LIMA_CIDATA_DISK_{{$i}}_NAME={{$disk.Name}}
1313
LIMA_CIDATA_DISK_{{$i}}_DEVICE={{$disk.Device}}
1414
{{- end}}
15+
LIMA_CIDATA_GUEST_INSTALL_PREFIX={{ .GuestInstallPrefix }}
1516
{{- if .Containerd.User}}
1617
LIMA_CIDATA_CONTAINERD_USER=1
1718
{{- else}}

pkg/cidata/cidata.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,17 @@ func GenerateISO9660(instDir, name string, y *limayaml.LimaYAML, udpDNSLocalPort
118118
return err
119119
}
120120
args := TemplateArgs{
121-
Name: name,
122-
User: u.Username,
123-
UID: uid,
124-
Containerd: Containerd{System: *y.Containerd.System, User: *y.Containerd.User},
125-
SlirpNICName: networks.SlirpNICName,
126-
SlirpGateway: networks.SlirpGateway,
127-
SlirpDNS: networks.SlirpDNS,
128-
SlirpIPAddress: networks.SlirpIPAddress,
129-
RosettaEnabled: *y.Rosetta.Enabled,
130-
RosettaBinFmt: *y.Rosetta.BinFmt,
121+
Name: name,
122+
User: u.Username,
123+
UID: uid,
124+
GuestInstallPrefix: *y.GuestInstallPrefix,
125+
Containerd: Containerd{System: *y.Containerd.System, User: *y.Containerd.User},
126+
SlirpNICName: networks.SlirpNICName,
127+
SlirpGateway: networks.SlirpGateway,
128+
SlirpDNS: networks.SlirpDNS,
129+
SlirpIPAddress: networks.SlirpIPAddress,
130+
RosettaEnabled: *y.Rosetta.Enabled,
131+
RosettaBinFmt: *y.Rosetta.BinFmt,
131132
}
132133

133134
// change instance id on every boot so network config will be processed again

pkg/cidata/template.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type TemplateArgs struct {
5858
Mounts []Mount
5959
MountType string
6060
Disks []Disk
61+
GuestInstallPrefix string
6162
Containerd Containerd
6263
Networks []Network
6364
SlirpNICName string

pkg/hostagent/requirements.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ are set to 'false' in the config file.
158158
description: "containerd binaries to be installed",
159159
script: `#!/bin/bash
160160
set -eux -o pipefail
161-
if ! timeout 30s bash -c "until command -v nerdctl; do sleep 3; done"; then
161+
if ! timeout 30s bash -c "until command -v nerdctl || test -x ` + *a.y.GuestInstallPrefix + `/bin/nerdctl; do sleep 3; done"; then
162162
echo >&2 "nerdctl is not installed yet"
163163
exit 1
164164
fi

pkg/limayaml/defaults.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ func defaultDiskSizeAsString() string {
108108
return "100GiB"
109109
}
110110

111+
func defaultGuestInstallPrefix() string {
112+
return "/usr/local"
113+
}
114+
111115
// FillDefault updates undefined fields in y with defaults from d (or built-in default), and overwrites with values from o.
112116
// Both d and o may be empty.
113117
//
@@ -346,6 +350,16 @@ func FillDefault(y, d, o *LimaYAML, filePath string) {
346350
}
347351
}
348352

353+
if y.GuestInstallPrefix == nil {
354+
y.GuestInstallPrefix = d.GuestInstallPrefix
355+
}
356+
if o.GuestInstallPrefix != nil {
357+
y.GuestInstallPrefix = o.GuestInstallPrefix
358+
}
359+
if y.GuestInstallPrefix == nil {
360+
y.GuestInstallPrefix = pointer.String(defaultGuestInstallPrefix())
361+
}
362+
349363
if y.Containerd.System == nil {
350364
y.Containerd.System = d.Containerd.System
351365
}

pkg/limayaml/defaults_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ func TestFillDefault(t *testing.T) {
6868
X8664: "qemu64",
6969
RISCV64: "rv64",
7070
},
71-
CPUs: pointer.Int(defaultCPUs()),
72-
Memory: pointer.String(defaultMemoryAsString()),
73-
Disk: pointer.String(defaultDiskSizeAsString()),
71+
CPUs: pointer.Int(defaultCPUs()),
72+
Memory: pointer.String(defaultMemoryAsString()),
73+
Disk: pointer.String(defaultDiskSizeAsString()),
74+
GuestInstallPrefix: pointer.String(defaultGuestInstallPrefix()),
7475
Containerd: Containerd{
7576
System: pointer.Bool(false),
7677
User: pointer.Bool(true),
@@ -278,6 +279,7 @@ func TestFillDefault(t *testing.T) {
278279
AdditionalDisks: []Disk{
279280
"data",
280281
},
282+
GuestInstallPrefix: pointer.String("/opt"),
281283
Containerd: Containerd{
282284
System: pointer.Bool(true),
283285
User: pointer.Bool(false),
@@ -454,6 +456,7 @@ func TestFillDefault(t *testing.T) {
454456
AdditionalDisks: []Disk{
455457
"test",
456458
},
459+
GuestInstallPrefix: pointer.String("/usr"),
457460
Containerd: Containerd{
458461
System: pointer.Bool(true),
459462
User: pointer.Bool(false),

pkg/limayaml/limayaml.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,28 @@ import (
77
)
88

99
type LimaYAML struct {
10-
VMType *VMType `yaml:"vmType,omitempty" json:"vmType,omitempty"`
11-
Arch *Arch `yaml:"arch,omitempty" json:"arch,omitempty"`
12-
Images []Image `yaml:"images" json:"images"` // REQUIRED
13-
CPUType map[Arch]string `yaml:"cpuType,omitempty" json:"cpuType,omitempty"`
14-
CPUs *int `yaml:"cpus,omitempty" json:"cpus,omitempty"`
15-
Memory *string `yaml:"memory,omitempty" json:"memory,omitempty"` // go-units.RAMInBytes
16-
Disk *string `yaml:"disk,omitempty" json:"disk,omitempty"` // go-units.RAMInBytes
17-
AdditionalDisks []Disk `yaml:"additionalDisks,omitempty" json:"additionalDisks,omitempty"`
18-
Mounts []Mount `yaml:"mounts,omitempty" json:"mounts,omitempty"`
19-
MountType *MountType `yaml:"mountType,omitempty" json:"mountType,omitempty"`
20-
SSH SSH `yaml:"ssh,omitempty" json:"ssh,omitempty"` // REQUIRED (FIXME)
21-
Firmware Firmware `yaml:"firmware,omitempty" json:"firmware,omitempty"`
22-
Audio Audio `yaml:"audio,omitempty" json:"audio,omitempty"`
23-
Video Video `yaml:"video,omitempty" json:"video,omitempty"`
24-
Provision []Provision `yaml:"provision,omitempty" json:"provision,omitempty"`
25-
Containerd Containerd `yaml:"containerd,omitempty" json:"containerd,omitempty"`
26-
Probes []Probe `yaml:"probes,omitempty" json:"probes,omitempty"`
27-
PortForwards []PortForward `yaml:"portForwards,omitempty" json:"portForwards,omitempty"`
28-
CopyToHost []CopyToHost `yaml:"copyToHost,omitempty" json:"copyToHost,omitempty"`
29-
Message string `yaml:"message,omitempty" json:"message,omitempty"`
30-
Networks []Network `yaml:"networks,omitempty" json:"networks,omitempty"`
10+
VMType *VMType `yaml:"vmType,omitempty" json:"vmType,omitempty"`
11+
Arch *Arch `yaml:"arch,omitempty" json:"arch,omitempty"`
12+
Images []Image `yaml:"images" json:"images"` // REQUIRED
13+
CPUType map[Arch]string `yaml:"cpuType,omitempty" json:"cpuType,omitempty"`
14+
CPUs *int `yaml:"cpus,omitempty" json:"cpus,omitempty"`
15+
Memory *string `yaml:"memory,omitempty" json:"memory,omitempty"` // go-units.RAMInBytes
16+
Disk *string `yaml:"disk,omitempty" json:"disk,omitempty"` // go-units.RAMInBytes
17+
AdditionalDisks []Disk `yaml:"additionalDisks,omitempty" json:"additionalDisks,omitempty"`
18+
Mounts []Mount `yaml:"mounts,omitempty" json:"mounts,omitempty"`
19+
MountType *MountType `yaml:"mountType,omitempty" json:"mountType,omitempty"`
20+
SSH SSH `yaml:"ssh,omitempty" json:"ssh,omitempty"` // REQUIRED (FIXME)
21+
Firmware Firmware `yaml:"firmware,omitempty" json:"firmware,omitempty"`
22+
Audio Audio `yaml:"audio,omitempty" json:"audio,omitempty"`
23+
Video Video `yaml:"video,omitempty" json:"video,omitempty"`
24+
Provision []Provision `yaml:"provision,omitempty" json:"provision,omitempty"`
25+
Containerd Containerd `yaml:"containerd,omitempty" json:"containerd,omitempty"`
26+
GuestInstallPrefix *string `yaml:"guestInstallPrefix,omitempty" json:"guestInstallPrefix,omitempty"`
27+
Probes []Probe `yaml:"probes,omitempty" json:"probes,omitempty"`
28+
PortForwards []PortForward `yaml:"portForwards,omitempty" json:"portForwards,omitempty"`
29+
CopyToHost []CopyToHost `yaml:"copyToHost,omitempty" json:"copyToHost,omitempty"`
30+
Message string `yaml:"message,omitempty" json:"message,omitempty"`
31+
Networks []Network `yaml:"networks,omitempty" json:"networks,omitempty"`
3132
// `network` was deprecated in Lima v0.7.0, removed in Lima v0.14.0. Use `networks` instead.
3233
Env map[string]string `yaml:"env,omitempty" json:"env,omitempty"`
3334
DNS []net.IP `yaml:"dns,omitempty" json:"dns,omitempty"`

0 commit comments

Comments
 (0)