From a2e43778b8b37bed96e8a9f7948810c7fb089211 Mon Sep 17 00:00:00 2001 From: Xavier Beaudouin Date: Mon, 26 May 2025 09:46:51 +0200 Subject: [PATCH] Testing py-salt --- sysutils/py-salt/Makefile | 131 ++++++++++++++++++ sysutils/py-salt/distinfo | 3 + .../py-salt/files/patch-requirements_base.txt | 8 ++ .../files/patch-salt_ext_tornado_iostream.py | 10 ++ .../py-salt/files/patch-salt_loader_lazy.py | 11 ++ .../files/patch-salt_modules_config.py | 17 +++ .../py-salt/files/patch-salt_utils_process.py | 14 ++ sysutils/py-salt/files/pkg-message.in | 36 +++++ sysutils/py-salt/files/salt_api.in | 29 ++++ sysutils/py-salt/files/salt_master.in | 42 ++++++ sysutils/py-salt/files/salt_minion.in | 42 ++++++ sysutils/py-salt/files/salt_proxy.in | 57 ++++++++ sysutils/py-salt/files/salt_syndic.in | 29 ++++ sysutils/py-salt/pkg-descr | 7 + sysutils/py-salt/pkg-plist | 7 + 15 files changed, 443 insertions(+) create mode 100644 sysutils/py-salt/Makefile create mode 100644 sysutils/py-salt/distinfo create mode 100644 sysutils/py-salt/files/patch-requirements_base.txt create mode 100644 sysutils/py-salt/files/patch-salt_ext_tornado_iostream.py create mode 100644 sysutils/py-salt/files/patch-salt_loader_lazy.py create mode 100644 sysutils/py-salt/files/patch-salt_modules_config.py create mode 100644 sysutils/py-salt/files/patch-salt_utils_process.py create mode 100644 sysutils/py-salt/files/pkg-message.in create mode 100644 sysutils/py-salt/files/salt_api.in create mode 100644 sysutils/py-salt/files/salt_master.in create mode 100644 sysutils/py-salt/files/salt_minion.in create mode 100644 sysutils/py-salt/files/salt_proxy.in create mode 100644 sysutils/py-salt/files/salt_syndic.in create mode 100644 sysutils/py-salt/pkg-descr create mode 100644 sysutils/py-salt/pkg-plist diff --git a/sysutils/py-salt/Makefile b/sysutils/py-salt/Makefile new file mode 100644 index 0000000..45103b5 --- /dev/null +++ b/sysutils/py-salt/Makefile @@ -0,0 +1,131 @@ +PORTNAME= salt +PORTVERSION= 3006.9 +PORTREVISION= 6 +PORTEPOCH= 1 +CATEGORIES= sysutils python +MASTER_SITES= PYPI +PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} + +MAINTAINER= krion@FreeBSD.org +COMMENT= Distributed remote execution and configuration management system +WWW= https://pypi.org/project/salt/ + +LICENSE= APACHE20 +LICENSE_FILE= ${WRKSRC}/LICENSE + +RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}markupsafe>0:textproc/py-markupsafe@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}distro>=1.5.0:sysutils/py-distro@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}libcloud>=0.14.0:net/py-libcloud@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}msgpack>=0.3:devel/py-msgpack@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}progressbar>0:misc/py-progressbar@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}psutil>=0.3.0:sysutils/py-psutil@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}requests>=1.0.0:www/py-requests@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyyaml>=0:devel/py-pyyaml@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}jmespath>0:devel/py-jmespath@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pyinotify>0:devel/py-pyinotify@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}looseversion>0:devel/py-looseversion@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}packaging>0:devel/py-packaging@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}croniter>0:sysutils/py-croniter@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}setproctitle>0:devel/py-setproctitle@${PY_FLAVOR} + +USES= cpe python + +CPE_VENDOR= saltstack +CPE_PRODUCT= salt +USE_PYTHON= autoplist cryptography distutils +NO_ARCH= yes + +CONFLICTS= py[0-9]*-salt-2019* + +# we must pass these options before the target name, and python.mk has no +# early-arguments variable, so we have to manipulate the target +PYDISTUTILS_INSTALL_TARGET=\ + --salt-root-dir=/ \ + --salt-config-dir=${ETCDIR} \ + --salt-cache-dir=/var/cache/salt \ + --salt-sock-dir=/var/run/salt \ + --salt-srv-root-dir=${ETCDIR} \ + --salt-base-file-roots-dir=${ETCDIR}/states \ + --salt-base-pillar-roots-dir=${ETCDIR}/pillar \ + --salt-base-master-roots-dir=${ETCDIR}/salt-master \ + --salt-logs-dir=/var/log/salt \ + --salt-pidfile-dir=/var/run \ + install + +USE_RC_SUBR= salt_api \ + salt_master \ + salt_minion \ + salt_proxy \ + salt_syndic + +SUB_LIST+= PYTHON_CMD=${PYTHON_CMD} + +SUB_FILES= pkg-message + +# Upstream archive contains files with UTF-8 names +EXTRACT_CMD= ${SETENV} LC_ALL=en_US.UTF-8 /usr/bin/bsdtar + +OPTIONS_DEFINE= AWS BASH FISH TCP ZEROMQ ZSH +OPTIONS_DEFAULT= BASH FISH ZEROMQ ZSH + +AWS_DESC= Install dependencies required for Amazon Web Services +TCP_DESC= Install dependencies required for TCP transport +ZEROMQ_DESC= Install dependencies required for ZeroMQ transport + +# AWS dependencies (Note: the devel/py-botocore port is updated very frequently) +AWS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}boto3>0:www/py-boto3@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}boto>=2.32.1:devel/py-boto@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}botocore>0:devel/py-botocore@${PY_FLAVOR} + +TCP_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pycryptodomex>=3.9.7:security/py-pycryptodomex@${PY_FLAVOR} + +ZEROMQ_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pyzmq>=2.2.0:net/py-pyzmq@${PY_FLAVOR} +ZEROMQ_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pyzmq>=2.2.0:net/py-pyzmq@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pycryptodomex>=3.9.7:security/py-pycryptodomex@${PY_FLAVOR} + +BASH_PLIST_FILES= share/bash-completion/completions/salt +FISH_PLIST_FILES= share/fish/completions/salt-call.fish \ + share/fish/completions/salt-cp.fish \ + share/fish/completions/salt-key.fish \ + share/fish/completions/salt-master.fish \ + share/fish/completions/salt-minion.fish \ + share/fish/completions/salt-run.fish \ + share/fish/completions/salt-syndic.fish \ + share/fish/completions/salt.fish \ + share/fish/completions/salt_common.fish +ZSH_PLIST_FILES= share/zsh/site-functions/_salt + +post-patch: +.for file in conf/minion conf/master doc/man/salt-key.1 \ + doc/man/salt-cp.1 doc/man/salt-minion.1 doc/man/salt-syndic.1 \ + doc/man/salt-master.1 doc/man/salt-run.1 doc/man/salt.7 doc/man/salt.1 \ + doc/man/salt-call.1 salt/modules/mysql.py salt/modules/tls.py salt/modules/postgres.py + @${REINPLACE_CMD} -e 's|/etc/salt|${ETCDIR}|' \ + -e 's|/srv/salt|${ETCDIR}/states|' \ + -e 's|/srv/pillar|${ETCDIR}/pillar|' ${WRKSRC}/${file} +.endfor + @${REINPLACE_CMD} -e 's|yumpkg5|pkgng|' ${WRKSRC}/conf/minion + @${REINPLACE_CMD} -e 's|"/usr/bin/python3"|"${PYTHON_CMD}"|' ${WRKSRC}/salt/auth/pam.py + +do-install-BASH-on: + @${MKDIR} ${STAGEDIR}${PREFIX}/share/bash-completion/completions/ + ${INSTALL_DATA} ${WRKSRC}/pkg/common/salt.bash \ + ${STAGEDIR}${PREFIX}/share/bash-completion/completions/salt + +do-install-FISH-on: + @${MKDIR} ${STAGEDIR}${PREFIX}/share/fish/completions/ + ${INSTALL_DATA} ${WRKSRC}/pkg/common/fish-completions/*.fish \ + ${STAGEDIR}${PREFIX}/share/fish/completions + +do-install-ZSH-on: + @${MKDIR} ${STAGEDIR}${PREFIX}/share/zsh/site-functions + ${INSTALL_DATA} ${WRKSRC}/pkg/common/salt.zsh \ + ${STAGEDIR}${PREFIX}/share/zsh/site-functions/_salt + +post-install: + @${MKDIR} ${STAGEDIR}${ETCDIR} + ${INSTALL_DATA} ${WRKSRC}/conf/master ${STAGEDIR}${ETCDIR}/master.sample + ${INSTALL_DATA} ${WRKSRC}/conf/minion ${STAGEDIR}${ETCDIR}/minion.sample + +.include diff --git a/sysutils/py-salt/distinfo b/sysutils/py-salt/distinfo new file mode 100644 index 0000000..690dd1c --- /dev/null +++ b/sysutils/py-salt/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1737023351 +SHA256 (salt-3006.9.tar.gz) = 7703c73a71c67327d48b2893ce9cf031ee52e2816df0daf78d6fe18a99b353e3 +SIZE (salt-3006.9.tar.gz) = 19691113 diff --git a/sysutils/py-salt/files/patch-requirements_base.txt b/sysutils/py-salt/files/patch-requirements_base.txt new file mode 100644 index 0000000..3b1985d --- /dev/null +++ b/sysutils/py-salt/files/patch-requirements_base.txt @@ -0,0 +1,8 @@ +--- requirements/base.txt.orig 2025-01-16 10:30:29 UTC ++++ requirements/base.txt +@@ -14,5 +14,3 @@ croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' + packaging>=21.3 + looseversion + croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' +-# We need contextvars for salt-ssh +-contextvars diff --git a/sysutils/py-salt/files/patch-salt_ext_tornado_iostream.py b/sysutils/py-salt/files/patch-salt_ext_tornado_iostream.py new file mode 100644 index 0000000..4a163d2 --- /dev/null +++ b/sysutils/py-salt/files/patch-salt_ext_tornado_iostream.py @@ -0,0 +1,10 @@ +--- salt/ext/tornado/iostream.py.orig 2023-05-16 11:50:28 UTC ++++ salt/ext/tornado/iostream.py +@@ -1116,6 +1116,7 @@ class IOStream(BaseIOStream): + future = self._connect_future = TracebackFuture() + try: + self.socket.connect(address) ++ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 524288) + except socket.error as e: + # In non-blocking mode we expect connect() to raise an + # exception with EINPROGRESS or EWOULDBLOCK. diff --git a/sysutils/py-salt/files/patch-salt_loader_lazy.py b/sysutils/py-salt/files/patch-salt_loader_lazy.py new file mode 100644 index 0000000..f5d66af --- /dev/null +++ b/sysutils/py-salt/files/patch-salt_loader_lazy.py @@ -0,0 +1,11 @@ +--- salt/loader/lazy.py.orig 2021-09-27 17:31:38 UTC ++++ salt/loader/lazy.py +@@ -447,7 +447,7 @@ class LazyLoader(salt.utils.lazy.LazyDict): + try: + pycache_files = [ + os.path.join("__pycache__", x) +- for x in sorted(os.listdir(os.path.join(mod_dir, "__pycache__"))) ++ for x in sorted(os.listdir(os.path.join(mod_dir, '__pycache__'))) if not x.endswith('opt-1.pyc') and not x.endswith('opt-2.pyc') + ] + except OSError: + pass diff --git a/sysutils/py-salt/files/patch-salt_modules_config.py b/sysutils/py-salt/files/patch-salt_modules_config.py new file mode 100644 index 0000000..197f64d --- /dev/null +++ b/sysutils/py-salt/files/patch-salt_modules_config.py @@ -0,0 +1,17 @@ +--- salt/modules/config.py.orig 2025-01-17 15:15:13 UTC ++++ salt/modules/config.py +@@ -17,13 +17,7 @@ from salt.loader.context import LoaderContext + import salt.utils.sdb as sdb + from salt.loader.context import LoaderContext + +-try: +- # Gated for salt-ssh (salt.utils.cloud imports msgpack) +- import salt.utils.cloud +- +- HAS_CLOUD = True +-except ImportError: +- HAS_CLOUD = False ++HAS_CLOUD = False + + + if salt.utils.platform.is_windows(): diff --git a/sysutils/py-salt/files/patch-salt_utils_process.py b/sysutils/py-salt/files/patch-salt_utils_process.py new file mode 100644 index 0000000..b12e599 --- /dev/null +++ b/sysutils/py-salt/files/patch-salt_utils_process.py @@ -0,0 +1,14 @@ +--- salt/utils/process.py.orig 2024-07-29 07:51:58 UTC ++++ salt/utils/process.py +@@ -59,7 +59,10 @@ def appendproctitle(name): + current = setproctitle.getproctitle() + if current.strip().endswith("MainProcess"): + current, _ = current.rsplit("MainProcess", 1) +- setproctitle.setproctitle(f"{current.rstrip()} {name}") ++ if len(current) > 0: ++ setproctitle.setproctitle(f"{current.rstrip()} {name}") ++ else: ++ setproctitle.setproctitle(name) + + + def daemonize(redirect_out=True): diff --git a/sysutils/py-salt/files/pkg-message.in b/sysutils/py-salt/files/pkg-message.in new file mode 100644 index 0000000..49e8d12 --- /dev/null +++ b/sysutils/py-salt/files/pkg-message.in @@ -0,0 +1,36 @@ +[ +{ type: install + message: <