sysutils/sylve: new port: lightweight GUI for managing jails & bhyve

Sponsored by:	SkunkWerks, GmbH
Sponsored by:	Alchemilla
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D52137
This commit is contained in:
Dave Cottlehuber
2026-03-30 22:03:00 +00:00
parent 54e992befa
commit a5575ead15
7 changed files with 147 additions and 0 deletions
+1
View File
@@ -1390,6 +1390,7 @@
SUBDIR += swapusage
SUBDIR += sweeper
SUBDIR += swtpm
SUBDIR += sylve
SUBDIR += symlinks
SUBDIR += symon
SUBDIR += synergy
+46
View File
@@ -0,0 +1,46 @@
PORTNAME= sylve
DISTVERSIONPREFIX= v
DISTVERSION= 0.2.2
CATEGORIES= sysutils
MASTER_SITES+= https://github.com/AlchemillaHQ/Sylve/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/:web_assets
DISTFILES+= sylve-web-assets.tar.gz:web_assets
MAINTAINER= hayzam@alchemilla.io
COMMENT= Lightweight GUI for managing Bhyve, Jails, ZFS, networking
WWW= https://github.com/alchemillahq/sylve
LICENSE= BSD2CLAUSE
ONLY_FOR_ARCHS= aarch64 amd64
RUN_DEPENDS= dnsmasq>0:dns/dnsmasq \
qemu-img:emulators/qemu@tools \
samba423>0:net/samba423 \
swtpm>0:sysutils/swtpm \
virsh:devel/libvirt
.if ${ARCH} == amd64
RUN_DEPENDS+= bhyve-firmware>0:sysutils/bhyve-firmware
.elif ${ARCH} == aarch64
RUN_DEPENDS+= u-boot-bhyve-arm64>0:sysutils/u-boot-bhyve-arm64
.endif
USES= go:modules
USE_RC_SUBR= ${PORTNAME}
GO_MODULE= github.com/alchemillahq/sylve
GO_TARGET= ./cmd/sylve
post-extract:
@${MKDIR} ${WRKSRC}/internal/assets/web-files
@${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/sylve-web-assets.tar.gz \
-C ${WRKSRC}/internal/assets/
do-install:
${MKDIR} ${STAGEDIR}${ETCDIR}
${MKDIR} ${STAGEDIR}/var/db/sylve
${INSTALL_PROGRAM} ${WRKDIR}/bin/${PORTNAME} \
${STAGEDIR}${PREFIX}/sbin/${PORTNAME}
${INSTALL_DATA} ${WRKSRC}/config.example.json ${STAGEDIR}${ETCDIR}/config.json.sample
.include <bsd.port.mk>
+7
View File
@@ -0,0 +1,7 @@
TIMESTAMP = 1774805985
SHA256 (go/sysutils_sylve/sylve-v0.2.2/sylve-web-assets.tar.gz) = d8d4dc99723d9352f1af6330ac8a8eb1a8cfddbd91d8e8c0d4b11663a3be5278
SIZE (go/sysutils_sylve/sylve-v0.2.2/sylve-web-assets.tar.gz) = 2929354
SHA256 (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.mod) = 5dfaadfaf24023652042afbc41d496ea4d4fcf4972c32b3f760c9f1f291f7587
SIZE (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.mod) = 5823
SHA256 (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.zip) = c64813343c99b41b60d68576d9559a934303d1709a49296647a5d746a1f96b40
SIZE (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.zip) = 34832987
+24
View File
@@ -0,0 +1,24 @@
[
{ type: install
message: <<EOM
Sylve was installed!
1) The default config file is located at %%ETCDIR%%/config.json. PLEASE
change your password in this file before starting the service for the
first time. The default username is "admin" and the default password is
"admin".
2) By default, Sylve datadir is located at %%DATADIR%% directory, this can
be modified in %%ETCDIR%%/config.json. This directory can become quite
large, with downloaded image files.
3) Enable Sylve by using the command `sysrc sylve_enable=YES` and start
the service with `service sylve start`.
4) You should now be able to visit https://IP:8181 to access the web
interface!
5) Enjoy!
EOM
}
]
+61
View File
@@ -0,0 +1,61 @@
#!/bin/sh
#
# PROVIDE: sylve
# REQUIRE: DAEMON NETWORKING
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable sylve:
#
# sylve_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable sylve.
# sylve_user (user): Set to "root" by default.
# User to run sylve as.
# sylve_group (group): Set to "wheel" by default.
# Group to run sylve as.
# sylve_args (str): Set to "-config %%ETCDIR%%/config.json" by default.
# Extra flags passed to sylve.
. /etc/rc.subr
name=sylve
rcvar=sylve_enable
load_rc_config $name
: ${sylve_enable:="NO"}
: ${sylve_user:="root"}
: ${sylve_group:="wheel"}
: ${sylve_args:="-config %%ETCDIR%%/config.json"}
export PATH="${PATH}:/usr/local/bin:/usr/local/sbin"
pidfile="/var/run/${name}.pid"
daemon_pidfile="/var/run/${name}-daemon.pid"
procname="%%PREFIX%%/sbin/sylve"
command="/usr/sbin/daemon"
command_args="-f -c -T ${name} -p ${pidfile} -P ${daemon_pidfile} ${procname} ${sylve_args}"
start_precmd=sylve_startprecmd
stop_postcmd=sylve_stoppostcmd
sylve_startprecmd()
{
if [ ! -e ${daemon_pidfile} ]; then
install -o ${sylve_user} -g ${sylve_group} /dev/null ${daemon_pidfile};
fi
if [ ! -e ${pidfile} ]; then
install -o ${sylve_user} -g ${sylve_group} /dev/null ${pidfile};
fi
}
sylve_stoppostcmd()
{
if [ -f "${daemon_pidfile}" ]; then
pids=$( pgrep -F ${daemon_pidfile} 2>&1 )
_err=$?
[ ${_err} -eq 0 ] && kill -9 ${pids}
fi
}
run_rc_command "$1"
+5
View File
@@ -0,0 +1,5 @@
Sylve is a lightweight, open-source virtualization platform for FreeBSD,
leveraging Bhyve for VMs and Jails for containerization, with deep ZFS
integration. It provides a streamlined, Proxmox-like experience tailored for
FreeBSD environments. Its backend is written in Go, and the frontend is written
in Svelte (with Kit), integrated into a single binary for easy deployment.
+3
View File
@@ -0,0 +1,3 @@
@sample %%ETCDIR%%/config.json.sample
sbin/sylve
@dir(root,wheel,0700) /var/db/sylve