7 Commits

Author SHA1 Message Date
Steven Stallion
733d1e7316 Merge 09ec0e5b89 into d5b493a53e 2025-02-14 20:02:28 +01:00
Mateusz Kwiatkowski
d5b493a53e Merge pull request #569 from driesmp/patch-1
Update port location of edk2
2025-02-14 09:34:51 +01:00
Mateusz Kwiatkowski
a3eb13ab3b Merge pull request #594 from metalefty/cloud-init/pubkeys
Add support for injecting multiple SSH pubkeys
2025-02-13 13:54:05 +01:00
Koichiro Iwao
dee359d551 Document updates for injecting multiple SSH pubkeys 2025-02-13 09:13:13 +09:00
Koichiro Iwao
a11cc00a48 Add support for injecting multiple SSH pubkeys with cloud-init
Resolves: #354

Example:
    % vm create -t centos7 -i AlmaLinux-9-GenericCloud-latest.x86_64.qcow2 \
      -C -k ~/.ssh/authorized_keys multipubkey
2025-02-13 09:13:04 +09:00
Steven Stallion
09ec0e5b89 Support multiple ZFS properties in zfs_zvol_opts 2025-02-02 15:56:01 -06:00
Dries Michiels
b39734fbc6 Update port location of edk2
This fixes a downstream bug report on FreeBSD.
2024-11-29 17:07:36 +01:00
5 changed files with 21 additions and 12 deletions

View File

@@ -273,10 +273,11 @@ To list downloaded images:
default FreeBSD-14.2-RELEASE-amd64.raw
default xenial-server-cloudimg-amd64-uefi1.img
## Using cloud init
## Using cloud-init
vm-bhyve has basic support for providing cloud-init configuration to the guest. You can enable it with `-C` option
to `vm create` command. You can also pass public SSH key to be injected into the guest with option `-k <file>`.
to `vm create` command. You can also pass public SSH key to be injected into the guest with option `-k <file>`.
The public key file can contain multiple public SSH keys, one per line, in the `authorized_keys` format.
Example:
@@ -292,7 +293,7 @@ Example:
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.91' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-141-generic x86_64)
## Adding custom disks
Scenario: If you have a vm on one zpool and would like to add a new virtual disk to it that resides on a different zpool.

View File

@@ -139,7 +139,7 @@ core::list(){
core::create(){
local _name _opt _size _vmdir _disk _disk_dev _num=0
local _zfs_opts _disk_size _template="default" _ds="default" _ds_path _img _cpu _memory _uuid
local _enable_cloud_init _cloud_init_dir _ssh_public_key _ssh_key_file _network_config _mac
local _enable_cloud_init _cloud_init_dir _ssh_public_keys _ssh_public_key _ssh_key_file _network_config _mac
while getopts d:t:s:i:c:m:Ck:n: _opt ; do
case $_opt in
@@ -185,7 +185,7 @@ core::create(){
[ -z "${_enable_cloud_init}" ] && util::err "cloud-init is required for injecting public key. Use -C to enable it."
[ ! -r "${_ssh_key_file}" ] && util::err "can't read file with public key (${_ssh_key_file})"
_ssh_public_key="$(cat "${_ssh_key_file}")"
_ssh_public_keys="$(sed -e '/^$/d' -e '/^#/d' "${_ssh_key_file}")"
fi
# if we're on zfs, make a new filesystem
@@ -215,11 +215,11 @@ core::create(){
# create each disk
while [ -n "${_disk}" ]; do
case "${_disk_dev}" in
case "${_disk_dev}" in
zvol)
zfs::make_zvol "${VM_DS_ZFS_DATASET}/${_name}/${_disk}" "${_disk_size}" "0" "${_zfs_opts}"
[ $_num -eq 0 ] && [ ! -z "$_img" ] && core::write_img "/dev/zvol/${VM_DS_ZFS_DATASET}/${_name}/${_disk}" "${_img}" "${_disk_dev}" "${_disk_size}"
;;
;;
sparse-zvol)
zfs::make_zvol "${VM_DS_ZFS_DATASET}/${_name}/${_disk}" "${_disk_size}" "1" "${_zfs_opts}"
[ $_num -eq 0 ] && [ ! -z "$_img" ] && core::write_img "/dev/zvol/${VM_DS_ZFS_DATASET}/${_name}/${_disk}" "${_img}" "${_disk_dev}" "${_disk_size}"
@@ -306,11 +306,15 @@ resize_rootfs: True
manage_etc_hosts: localhost
EOF
if [ -n "${_ssh_public_key}" ]; then
if [ -n "${_ssh_public_keys}" ]; then
cat << EOF >> "${_cloud_init_dir}/user-data"
ssh_authorized_keys:
EOF
echo "${_ssh_public_keys}" | while read -r _ssh_public_key; do
cat << EOF >> "${_cloud_init_dir}/user-data"
- ${_ssh_public_key}
EOF
done
fi
makefs -t cd9660 -o R,L=cidata "${VM_DS_PATH}/${_name}/seed.iso" ${_cloud_init_dir} || util::err "Can't write seed.iso for cloud-init"
@@ -342,7 +346,7 @@ core::write_img(){
if [ ! -r "${_disk_dev}" ]; then
sleep 1
i=$(($i+1))
else
else
break
fi
done

View File

@@ -163,7 +163,7 @@ Usage: vm ...
datastore add <name> <path>
list [-r]
info [name] [...]
create [-d datastore] [-t template] [-s size] [-m memory] [-c vCPUs] <name>
create [-d datastore] [-t template] [-s size] [-m memory] [-c vCPUs] [-i vm-image] [-C -k pubkeys] <name>
install [-fi] <name> <iso>
start [-fi] <name> [...]
stop <name> [...]

View File

@@ -140,7 +140,7 @@ zfs::__format_options(){
local _c_opts="$2"
if [ -n "${_c_opts}" ]; then
_c_opts=$(echo "${_c_opts}" |sed -e 's/\ / -o /')
_c_opts=$(echo "${_c_opts}" |sed -e 's/\ / -o /g')
_c_opts="-o ${_c_opts}"
setvar "${_val}" "${_c_opts}"
return 0

6
vm.8
View File

@@ -75,6 +75,10 @@
.Op Fl d Ar datastore
.Op Fl t Ar template
.Op Fl s Ar size
.Op Fl c Ar vCPUs
.Op Fl m Ar memory
.Op Fl i Ar vm-image
.Op Fl C k Ar pubkeys
.Ar name
.Nm
.Cm
@@ -328,7 +332,7 @@ and
.Pp
You will also need a copy of the UEFI firmware.
This can either be installed using the
.Pa sysutils/uefi-edk2-bhyve
.Pa sysutils/edk2
port, or you can manually download a copy (see URL below) to
.Pa $vm_dir/.config/BHYVE_UEFI.fd and configure a guest to use it by setting
.Sy loader="uefi-custom" .