From 92eeb2761b015c6da8a8cdbe9f28484b630b6af9 Mon Sep 17 00:00:00 2001 From: Dave Cottlehuber Date: Tue, 18 Feb 2025 18:17:42 +0000 Subject: [PATCH] sysutils/kleene-daemon: new port for container management PR: 279003 Sponsored by: SkunkWerks, GmbH Differential Revision: https://reviews.freebsd.org/D49018 --- sysutils/Makefile | 1 + sysutils/kleene-daemon/Makefile | 88 +++++++++++++++++++++ sysutils/kleene-daemon/distinfo | 5 ++ sysutils/kleene-daemon/files/kleened.in | 74 +++++++++++++++++ sysutils/kleene-daemon/files/pkg-message.in | 33 ++++++++ sysutils/kleene-daemon/pkg-descr | 3 + sysutils/kleene-daemon/pkg-plist | 27 +++++++ 7 files changed, 231 insertions(+) create mode 100644 sysutils/kleene-daemon/Makefile create mode 100644 sysutils/kleene-daemon/distinfo create mode 100644 sysutils/kleene-daemon/files/kleened.in create mode 100644 sysutils/kleene-daemon/files/pkg-message.in create mode 100644 sysutils/kleene-daemon/pkg-descr create mode 100644 sysutils/kleene-daemon/pkg-plist diff --git a/sysutils/Makefile b/sysutils/Makefile index 2185e5e6b812..e9795cb2f589 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -586,6 +586,7 @@ SUBDIR += kiconvtool SUBDIR += kldfind SUBDIR += kldpatch + SUBDIR += kleene-daemon SUBDIR += kopia SUBDIR += kops SUBDIR += kpmcore diff --git a/sysutils/kleene-daemon/Makefile b/sysutils/kleene-daemon/Makefile new file mode 100644 index 000000000000..4f652086418b --- /dev/null +++ b/sysutils/kleene-daemon/Makefile @@ -0,0 +1,88 @@ +PORTNAME= kleene-daemon +DISTVERSIONPREFIX= v +DISTVERSION= 0.1.0 +DISTVERSIONSUFFIX= -rc.5 +CATEGORIES= sysutils +MASTER_SITES+= https://builds.hex.pm/installs/1.16.0/:hex +DISTFILES+= hex-${_HEXPM_VERSION}.ez:hex + +MAINTAINER= lasse@philomath.dk +COMMENT= Kleene backend daemon for managing containers on FreeBSD +WWW= https://kleene.dev + +LICENSE= APACHE20 BSD2CLAUSE +LICENSE_COMB= multi + +BUILD_DEPENDS= ca_root_nss>0:security/ca_root_nss \ + mix:lang/elixir \ + rebar3:devel/rebar3 + +USES= gmake ssl +USE_GITHUB= yes + +GH_ACCOUNT= kleene-project +GH_PROJECT= kleened +USE_RC_SUBR= kleened + +MAKE_ENV+= ERL_LIBS='' \ + HEX_HOME=${WRKDIR}/.hex \ + HEX_OFFLINE=true \ + LANG=en_US_UTF-8 \ + LC_ALL=en_US.UTF-8 \ + MIX_ARCHIVES=${WRKDIR} \ + MIX_ENV=prod \ + MIX_HOME=${WRKDIR}/.mix \ + MIX_PATH=${WRKDIR}/.mix/archives/hex-${_HEXPM_VERSION}/hex-${_HEXPM_VERSION}/ebin \ + MIX_REBAR3=${LOCALBASE}/bin/rebar3 + +ETCDIR= ${PREFIX}/etc/kleened +SUB_FILES= pkg-message +PLIST_SUB= DISTVERSION=${DISTVERSION} + +_HEXPM_VERSION= 2.1.1 +_HEX_DIR= ${WRKDIR}/.mix/archives/hex-${_HEXPM_VERSION} +_RELEASE_PATH= ${WRKSRC}/_build/prod/rel/kleened +_RELEASE_BINARIES= escript dialyzer erlexec beam.smp heart dyn_erl to_erl \ + erlc epmd run_erl typer inet_gethost erl_child_setup \ + ct_run erl_call yielding_c_fun + +.include + +post-extract: + ${MKDIR} ${_HEX_DIR} + ${MV} ${WRKDIR}/hex-* \ + ${_HEX_DIR}/ + +do-build: + (cd ${WRKSRC} && \ + ${SETENV} ${MAKE_ENV} ${LOCALBASE}/bin/mix do deps.compile, \ + compile, release) + +do-install: +# sample configs + ${MKDIR} ${STAGEDIR}${ETCDIR} + ${INSTALL_DATA} ${WRKSRC}/example/kleened_config.yaml \ + ${STAGEDIR}${ETCDIR}/config.yaml.sample + ${INSTALL_DATA} ${WRKSRC}/example/pf.conf.kleene \ + ${STAGEDIR}${ETCDIR}/pf.conf.kleene.sample +# the release + ${CP} -a ${WRKSRC}/_build/prod/rel/kleened ${STAGEDIR}${PREFIX}/libexec/ + ${INSTALL_PROGRAM} ${WRKSRC}/priv/bin/kleened_pty \ + ${STAGEDIR}${PREFIX}/libexec/kleened/bin/ + ${RM} ${STAGEDIR}${PREFIX}/libexec/kleened/bin/*.src +# strip binaries and objects + ${FIND} ${STAGEDIR}${PREFIX}/libexec/kleened/lib -type f -name \ + *.so -exec ${STRIP_CMD} {} \; +.for bin in ${_RELEASE_BINARIES} + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/libexec/kleened/erts-*/bin/${bin} +.endfor + +post-install: + @cd ${STAGEDIR}${PREFIX} && \ + ${FIND} libexec/kleened/erts-* -type f -o -type l | \ + ${SORT} >> ${TMPPLIST} + @cd ${STAGEDIR}${PREFIX} && \ + ${FIND} libexec/kleened/lib/* -type f -o -type l | \ + ${SORT} >> ${TMPPLIST} + +.include diff --git a/sysutils/kleene-daemon/distinfo b/sysutils/kleene-daemon/distinfo new file mode 100644 index 000000000000..c176dd72276a --- /dev/null +++ b/sysutils/kleene-daemon/distinfo @@ -0,0 +1,5 @@ +TIMESTAMP = 1739837077 +SHA256 (hex-2.1.1.ez) = 59c163c3e4efe4bdbb7029cd494e30c09b87beebc99359c175960cc4101beada +SIZE (hex-2.1.1.ez) = 777696 +SHA256 (kleene-project-kleened-v0.1.0-rc.5_GH0.tar.gz) = 2fa2f9f907c8046a3c67daf100a5d6937f8a8be08865a9fb03c2cb6d31745fb7 +SIZE (kleene-project-kleened-v0.1.0-rc.5_GH0.tar.gz) = 5080006 diff --git a/sysutils/kleene-daemon/files/kleened.in b/sysutils/kleene-daemon/files/kleened.in new file mode 100644 index 000000000000..081380d2f183 --- /dev/null +++ b/sysutils/kleene-daemon/files/kleened.in @@ -0,0 +1,74 @@ +#!/bin/sh +# +# PROVIDE: kleened +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add these lines to /etc/rc.conf.local or /etc/rc.conf +# to enable and configure this service: +# +# kleened_enable (bool): Set to NO by default. +# Set it to YES to enable kleened. +# kleened_user (str): Set to "root" by default. +# kleened_config (str): Path to config file. +# Default: %%PREFIX%%/etc/kleened/config.yaml +# kleened_shutdown_timeout (int): Seconds to wait for graceful shutdown. +# Default: 60 + +. /etc/rc.subr +name=kleened +rcvar=kleened_enable +extra_commands="init dryinit" +# kleened_init: Initialize host configuration +# kleened_dryinit: Test host configuration without applying changes + +required_files="${kleened_config}" + +command="%%PREFIX%%/libexec/kleened/bin/kleened" +pidfile="/var/run/kleened.pid" +procname="$(/usr/bin/find %%PREFIX%%/libexec/kleened -name beam.smp)" + +start_cmd="${command} daemon" +status_cmd="${command} ping" +stop_cmd="kleened_stop" +init_cmd="kleened_init" +dryinit_cmd="kleened_dryinit" + +load_rc_config $name + +: ${kleened_enable:=no} +: ${kleened_user:="root"} +: ${kleened_config:="%%ETCDIR%%/config.yaml"} +: ${kleened_shutdown_timeout:=60} +: ${kleened_env="LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 PATH=%%PREFIX%%/libexec/kleened/bin:${PATH}"} + +kleened_stop() +{ + echo "Stopping ${name}." + ${command} stop + wait_for_pids ${pidfile} ${kleened_shutdown_timeout} +} + +kleened_init() +{ + echo "Initializing kleened host configuration..." + if %%PREFIX%%/libexec/kleened/bin/kleened eval "Kleened.Core.Config.initialize_host(%{dry_run: false})"; then + echo "Host initialization completed successfully" + else + echo "Host initialization failed" + return 1 + fi +} + +kleened_dryinit() +{ + echo "Testing kleened host configuration..." + if %%PREFIX%%/libexec/kleened/bin/kleened eval "Kleened.Core.Config.initialize_host(%{dry_run: true})"; then + echo "Host configuration test completed successfully" + else + echo "Host configuration test failed" + return 1 + fi +} + +run_rc_command "$1" diff --git a/sysutils/kleene-daemon/files/pkg-message.in b/sysutils/kleene-daemon/files/pkg-message.in new file mode 100644 index 000000000000..1cbc258054e2 --- /dev/null +++ b/sysutils/kleene-daemon/files/pkg-message.in @@ -0,0 +1,33 @@ +[ +{ type: install + message: <