Page MenuHomeFreeBSD

D52137.id161701.diff
No OneTemporary

D52137.id161701.diff

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

Mime Type
text/plain
Expires
Mon, Apr 20, 12:19 AM (10 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31811521
Default Alt Text
D52137.id161701.diff (7 KB)

Event Timeline