-
Notifications
You must be signed in to change notification settings - Fork 700
External/SSH internal driver for all OS #2000
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
64ec4ff
to
b865895
Compare
The probes are somewhat annoying when not using cidata, but that was the same story on FreeBSD and others. Maybe there should be some fallback implementation, at least for ssh-ready/guestagent install/boot-done ?
Like copying the And keeping the instance |
Added support for hostnames, so that you can use nice features like
anders@raspberrypi:~ $ sudo mkdir /mnt/lima-cidata
anders@raspberrypi:~ $ sudo touch /mnt/lima-cidata/meta-data
anders@raspberrypi:~ $ sudo touch /run/lima-ssh-ready
anders@raspberrypi:~ $ sudo touch /run/lima-boot-done Previously I was assuming IP. Now, to have a nice way to install the |
ea5255d
to
9cea961
Compare
9cea961
to
dcdb6f8
Compare
dcdb6f8
to
5b84678
Compare
Added host key checking:
And shortened the timeout, for when the device is not connected. Resolves in 10ms, when cached (or ~250ms).
|
0ab8193
to
b91338b
Compare
Added provision scripts. Using |
pkg/limayaml/limayaml.go
Outdated
QEMU VMType = "qemu" | ||
VZ VMType = "vz" | ||
WSL2 VMType = "wsl2" | ||
EXT VMType = "ext" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe this should be called "external" to avoid confusion with "extended"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In minikube we ended up calling the driver "ssh", but I don't think it's great
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ping @lima-vm/maintainers @lima-vm/reviewers RFC
I still feel "ext" is confusing.
Sounds like some sort of ext2/ext3/ext4 stuff.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think external
is fine. unmanaged
or raw
could be alternatives, but I prefer external
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ping @afbjorklund WDYT?
ssh: | ||
# Address for the host. | ||
# 🟢 Builtin default: "127.0.0.1" (localhost) | ||
address: null |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does localPort
mean now for non-local address
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It used as "port", but the old name is kept for compatibility.
If the port is zero, then for non-localhost it will be set to 22.
For localhost (127.0.0.1), it is still assigned to a random port.
Normally it is not set, and only the IP address is used for SSH.
7b2e56d
to
a18e091
Compare
Rebased to lima v0.21.0 [RPi runs Debian GNU/Linux 12 (bookworm)] $ _output/bin/limactl shell raspberrypi nerdctl version
Client:
Version: v1.7.5
OS/Arch: linux/arm64
Git commit: cffed372371dcbea3dc9a646ce5a913fc1c09513
buildctl:
Version: v0.12.5
GitCommit: bac3f2b673f3f9d33e79046008e7a38e856b3dc6
Server:
containerd:
Version: v1.7.14
GitCommit: dcf2847247e18caba8dce86522029642f60fe96b
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e946 Quite svelte, without the cidata etc:
|
Would it be possible to test this on CI? |
As long as it is possible to supply a VM, with access through host keys and authorized keys, that should be possible. I should detail the required steps (with example log), especially now with the addition of the cloud-config generation. |
4a9f4a3
to
1a79286
Compare
a30bbb9
to
d16ab68
Compare
Rebased to v2.0.0-alpha.0, only thing left to do is to find a driver name that is acceptable. |
d16ab68
to
77ff3e6
Compare
These patches should be converted to driver features:
|
77ff3e6
to
4e73d5a
Compare
> **Warning** | ||
> "ext" mode is experimental | ||
"ext" option makes use of an external machine, either a virtual machine or a physical machine. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The idea of "external machines" can be easily confused with "external drivers", so this driver should not be called "ext" ("external").
Let's call this either "generic" or "ssh"
writable: true | ||
|
||
ssh: | ||
address: raspberrypi.local |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you want to put raspberrypi-specific config here, the file name should be probably "raspberrypi.yaml"
package main | ||
|
||
// Import ext driver to register it in the registry on all platforms. | ||
import _ "github.com/lima-vm/lima/v2/pkg/driver/ext" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be compiled as an external driver? (w/ docs)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Currently that is not possible, but might be an option (like the other built-in ones)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not possible?
|
||
if _, ok := mountTypesUnsupported[*cfg.MountType]; ok { | ||
return fmt.Errorf("mount type %q is explicitly unsupported", *cfg.MountType) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any mount type other than REVSSHFS should result in an error
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we have a smoke test ?
Maybe using an LXD/Incus instance on GHA
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried that, but it didn't work out... Help needed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What was the error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/canonical/setup-lxd may work
I guess there is an equivalent of this for Incus too
I think we will throw this one out of 2.0 as well (like with 1.0) |
Verify ssh host keys, when connecting to a remote server. The first connection will prompt, if not in known_hosts. Print IP instead of Port (when it is 22) for non-local SSH. The field is still called LocalPort, even if is now remote. Signed-off-by: Anders F Björklund <[email protected]>
Don't show log for already cached archive, don't generate cidata.iso for external vm. It is not using cloud-init anyway, and does not need another copy of lima-guestagent and nerdctl-full.tgz Signed-off-by: Anders F Björklund <[email protected]>
Add a shorter timeout for mDNS IP lookup Allow .local hosts to be offline or slow Signed-off-by: Anders F Björklund <[email protected]>
The provision scripts are run with ssh, instead of being started by cloud-init like other drivers. The ExecuteScript was duplicated from sshocker, since it needs support for running with "sudo". Signed-off-by: Anders F Björklund <[email protected]>
4e73d5a
to
61a5132
Compare
Similar to the docker-machine "generic" driver, bring your own virtual machine (or physical server)
Not so useful in itself, but not so bad when made into a real driver or wrapped with helper scripts...
Requires:
Installed lima-guestagent, and nerdctl from tarballs/binaries.
limactl guest-install beaglebone
Hardware
https://www.beagleboard.org/boards/beaglebone-black
You could also use a Raspberry Pi Zero*, or a cloud droplet.
* need the Zero 2, for arm-v7 (previous model was arm-v6)
https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/
Discussion