Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F177510436
D52137.1794590004.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None
D52137.1794590004.diff
View Options
Index: sysutils/Makefile
===================================================================
--- sysutils/Makefile
+++ sysutils/Makefile
@@ -1348,6 +1348,7 @@
SUBDIR += swapusage
SUBDIR += sweeper
SUBDIR += swtpm
+ SUBDIR += sylve
SUBDIR += symlinks
SUBDIR += symon
SUBDIR += synergy
Index: sysutils/sylve/Makefile
===================================================================
--- /dev/null
+++ sysutils/sylve/Makefile
@@ -0,0 +1,75 @@
+PORTNAME= sylve
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.0.1
+CATEGORIES= sysutils
+
+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
+
+BUILD_DEPENDS= npm-node20>0:www/npm-node20
+RUN_DEPENDS= bhyve-firmware>0:sysutils/bhyve-firmware \
+ dnsmasq>0:dns/dnsmasq \
+ samba419>=0:net/samba419 \
+ smartmontools>=0:sysutils/smartmontools \
+ tmux>=0:sysutils/tmux \
+ virsh:devel/libvirt
+
+USES= go:modules nodejs:20,build
+USE_RC_SUBR= ${PORTNAME}
+
+GO_MODULE= github.com/alchemillahq/sylve
+
+GO_TARGET= ./cmd/sylve
+
+NPM_BIN= ${LOCALBASE}/bin/npm
+
+# to rebuild the deps archive:
+# 1. set DEV_UPDATE_MODE=yes
+# 2. make makesum build
+# 3. upload the *-cache archive
+# 4. set DEV_UPDATE_MODE=no
+# 5. make clean makesum
+
+DEV_UPDATE_MODE= no
+DEPS_CACHE_DIR= ${WRKSRC}/web
+
+.if (${DEV_UPDATE_MODE} == "yes")
+NPM_ARGS= install
+post-patch:
+ @${RM} ${WKRSRC}/web/package-lock.json
+
+post-build:
+ @cd ${DEPS_CACHE_DIR} && ${TAR} czf ${DISTDIR}/${DIST_SUBDIR}/${PORTNAME}-cache-${ARCH}-${DISTVERSION}${EXTRACT_SUFX} node_modules
+ @${ECHO} "(!!!) Please upload the cache archive: ${DISTDIR}/${DIST_SUBDIR}/${PORTNAME}-cache-${ARCH}-${DISTVERSION}${EXTRACT_SUFX}"
+.else
+MASTER_SITES+= LOCAL/acm/sylve/:npm_cache
+DISTFILES+= ${PORTNAME}-cache-${ARCH}-${DISTVERSION}${EXTRACT_SUFX}:npm_cache
+NPM_ARGS= run build
+
+post-extract:
+ @${MV} ${WRKDIR}/node_modules ${WRKSRC}/web
+
+post-patch:
+ ${REINPLACE_CMD} -e 's|%%DATADIR%%|${DATADIR}|g' ${WRKSRC}/config.example.json
+.endif
+
+pre-build:
+ @${MKDIR} ${WRKSRC}/web/build
+ @cd ${WRKSRC}/web && \
+ ${NPM_BIN} ${NPM_ARGS}
+ @cd ${WRKSRC}/web/build && \
+ ${COPYTREE_SHARE} . ${WRKSRC}/internal/assets/web-files/
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${ETCDIR}
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_PROGRAM} ${WRKDIR}/bin/${PORTNAME} \
+ ${STAGEDIR}${PREFIX}/sbin/${PORTNAME}
+ ${INSTALL_DATA} ${WRKSRC}/config.example.json ${STAGEDIR}${ETCDIR}/config.json.sample
+
+.include <bsd.port.mk>
Index: sysutils/sylve/distinfo
===================================================================
--- /dev/null
+++ sysutils/sylve/distinfo
@@ -0,0 +1,9 @@
+TIMESTAMP = 1757118755
+SHA256 (go/sysutils_sylve/sylve-v0.0.1/sylve-cache-amd64-0.0.1.tar.gz) = f5694f744a53f49925dc294ccc88165399b0019ee1b7d00139fd6d8dc39f6e0e
+SIZE (go/sysutils_sylve/sylve-v0.0.1/sylve-cache-amd64-0.0.1.tar.gz) = 52038996
+SHA256 (go/sysutils_sylve/sylve-v0.0.1/sylve-cache-aarch64-0.0.1.tar.gz) = f99c32aaac78499e2b6888c64282eb463861bacfc06de4a44f10241fa884428a
+SIZE (go/sysutils_sylve/sylve-v0.0.1/sylve-cache-aarch64-0.0.1.tar.gz) = 48331293
+SHA256 (go/sysutils_sylve/sylve-v0.0.1/v0.0.1.mod) = 4c781a74a960c9621af9542b317e93b34854e48d9d0e84e2015e00a4dceb5d9e
+SIZE (go/sysutils_sylve/sylve-v0.0.1/v0.0.1.mod) = 4391
+SHA256 (go/sysutils_sylve/sylve-v0.0.1/v0.0.1.zip) = f0ef44138c55d8fafebb665860b64a7cfe7b873f8f35ef4209c5dd891065af64
+SIZE (go/sysutils_sylve/sylve-v0.0.1/v0.0.1.zip) = 2286786
Index: sysutils/sylve/files/patch-config.example.json
===================================================================
--- /dev/null
+++ sysutils/sylve/files/patch-config.example.json
@@ -0,0 +1,10 @@
+--- config.example.json.orig 2025-09-06 01:07:24 UTC
++++ config.example.json
+@@ -6,6 +6,7 @@
+ "email": "admin@sylve.local",
+ "password": "admin"
+ },
++ "DataPath":"%%DATADIR%%",
+ "logLevel": 0,
+ "port": 8181
+ }
Index: sysutils/sylve/files/pkg-message.in
===================================================================
--- /dev/null
+++ sysutils/sylve/files/pkg-message.in
@@ -0,0 +1,37 @@
+[
+{ type: install
+ message: <<EOM
+sylve was installed
+
+1) sylve sample config file is located at %%ETCDIR%%/config.json.sample. Make
+ a copy and change it following your own needs.
+
+ # cp %%ETCDIR%%/config.json.sample %%ETCDIR%%/config.json
+
+2) By default, sylve datadir is located at %%DATADIR%% directory. Change it from
+ %%ETCDIR%%/config.json config file.
+
+3) The following is the minimal configuration that you must add to /etc/rc.conf
+
+ ntpd_enable="YES" # Optional
+ ntpd_sync_on_start="YES" # Optional
+ zfs_enable="YES"
+ linux_enable="YES" # Optional
+ libvirtd_enable="YES"
+ dnsmasq_enable="YES"
+ rpcbind_enable="YES"
+ nfs_server_enable="YES"
+ mountd_enable="YES"
+ samba_server_enable="YES"
+
+4) Enable rctl adding the following line to /boot/loader.conf
+
+ kern.racct.enable=1
+
+ Reboot your system after adding those entries to ensure that the services are
+ started correctly and the kernel modules are loaded.
+
+5) Enjoy it ;)
+EOM
+}
+]
Index: sysutils/sylve/files/sylve.in
===================================================================
--- /dev/null
+++ 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 "www" by default.
+# User to run sylve as.
+# sylve_group (group): Set to "www" 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 -R 5 -r -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"
Index: sysutils/sylve/pkg-descr
===================================================================
--- /dev/null
+++ 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.
Index: sysutils/sylve/pkg-plist
===================================================================
--- /dev/null
+++ sysutils/sylve/pkg-plist
@@ -0,0 +1,3 @@
+@sample %%ETCDIR%%/config.json.sample
+sbin/sylve
+@dir %%DATADIR%%
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 13, 5:13 PM (38 m, 40 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41705446
Default Alt Text
D52137.1794590004.diff (7 KB)
Attached To
Mode
D52137: sysutils/sylve: new port, lightweight GUI for managing jails, zfs, net
Attached
Detach File
Event Timeline