Date: Mon, 30 Mar 2026 22:07:34 +0000 From: Dave Cottlehuber <dch@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: a5575ead15e2 - main - sysutils/sylve: new port: lightweight GUI for managing jails & bhyve Message-ID: <69caf426.39b82.797c1972@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by dch: URL: https://cgit.FreeBSD.org/ports/commit/?id=a5575ead15e221d83fb130d0ec6ff20bf3873f44 commit a5575ead15e221d83fb130d0ec6ff20bf3873f44 Author: Dave Cottlehuber <dch@FreeBSD.org> AuthorDate: 2026-03-30 22:03:00 +0000 Commit: Dave Cottlehuber <dch@FreeBSD.org> CommitDate: 2026-03-30 22:07:05 +0000 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 --- sysutils/Makefile | 1 + sysutils/sylve/Makefile | 46 ++++++++++++++++++++++++++++ sysutils/sylve/distinfo | 7 +++++ sysutils/sylve/files/pkg-message.in | 24 +++++++++++++++ sysutils/sylve/files/sylve.in | 61 +++++++++++++++++++++++++++++++++++++ sysutils/sylve/pkg-descr | 5 +++ sysutils/sylve/pkg-plist | 3 ++ 7 files changed, 147 insertions(+) diff --git a/sysutils/Makefile b/sysutils/Makefile index ec10837486e1..80eaa94cf62e 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -1390,6 +1390,7 @@ SUBDIR += swapusage SUBDIR += sweeper SUBDIR += swtpm + SUBDIR += sylve SUBDIR += symlinks SUBDIR += symon SUBDIR += synergy diff --git a/sysutils/sylve/Makefile b/sysutils/sylve/Makefile new file mode 100644 index 000000000000..66cf333011aa --- /dev/null +++ b/sysutils/sylve/Makefile @@ -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> diff --git a/sysutils/sylve/distinfo b/sysutils/sylve/distinfo new file mode 100644 index 000000000000..5abaf1a4dee2 --- /dev/null +++ b/sysutils/sylve/distinfo @@ -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 diff --git a/sysutils/sylve/files/pkg-message.in b/sysutils/sylve/files/pkg-message.in new file mode 100644 index 000000000000..5df054a1058b --- /dev/null +++ b/sysutils/sylve/files/pkg-message.in @@ -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 +} +] diff --git a/sysutils/sylve/files/sylve.in b/sysutils/sylve/files/sylve.in new file mode 100644 index 000000000000..f854f3684105 --- /dev/null +++ b/sysutils/sylve/files/sylve.in @@ -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" diff --git a/sysutils/sylve/pkg-descr b/sysutils/sylve/pkg-descr new file mode 100644 index 000000000000..e97d487cef06 --- /dev/null +++ b/sysutils/sylve/pkg-descr @@ -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. diff --git a/sysutils/sylve/pkg-plist b/sysutils/sylve/pkg-plist new file mode 100644 index 000000000000..a591cf664880 --- /dev/null +++ b/sysutils/sylve/pkg-plist @@ -0,0 +1,3 @@ +@sample %%ETCDIR%%/config.json.sample +sbin/sylve +@dir(root,wheel,0700) /var/db/sylvehome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69caf426.39b82.797c1972>
