net-p2p/c-lightning: hook dependencies for the clnrest plugin

The clnrest plugin is already installed but it depends on a bunch of
Python packages. Add an option to net-p2p/c-lightning to install and
depend on those packages.

Further, 3 of those packages were not in the FreeBSD ports. Add them:
* net-p2p/pyln-bolt7 Lightning Network BOLT7 implementation
* net-p2p/pyln-client Python client library for lightningd (net-p2p/c-lightning)
* net-p2p/pyln-proto Lightning Network protocol implementation

To enable the plugin, add
clnrest-port=
clnrest-protocol=
clnrest-host=
to /usr/local/etc/lightningd-bitcoin.conf, see
https://docs.corelightning.org/docs/rest

Differential Revision:	https://reviews.freebsd.org/D43863
This commit is contained in:
Vasil Dimov 2024-02-13 12:01:45 +01:00
parent 8425efbefa
commit 50d1b70610
No known key found for this signature in database
GPG key ID: 54DF06F64B55CBBF
12 changed files with 143 additions and 1 deletions

View file

@ -83,6 +83,9 @@
SUBDIR += py-transmission-rpc
SUBDIR += py-tremc
SUBDIR += py-vertex
SUBDIR += pyln-bolt7
SUBDIR += pyln-client
SUBDIR += pyln-proto
SUBDIR += qbittorrent
SUBDIR += radarr
SUBDIR += readarr

View file

@ -2,6 +2,7 @@ PORTNAME= c-lightning
# To build from an arbitrary git commit comment PORTVERSION and PORTREVISION (if present)
PORTVERSION= 23.11.2
DISTVERSIONPREFIX= v
PORTREVISION= 1
# and uncomment the following two lines (use for example -git-HEAD or -git-f8d8348c)
#PORTVERSION= 0
#PKGNAMESUFFIX= -git-f8d8348c
@ -38,12 +39,58 @@ SHEBANG_FILES= plugins/clnrest/clnrest.py \
EXTRA_PATCHES_aarch64= ${FILESDIR}/extra-patch-external_libwally-core_src_ccan_ccan_base64_base64.c
EXTRA_PATCHES= ${EXTRA_PATCHES_${ARCH}}
OPTIONS_DEFINE= COMPATIBILITY DEBUG
OPTIONS_DEFINE= CLNRESTDEPS COMPATIBILITY DEBUG
OPTIONS_MULTI= STORAGE
OPTIONS_MULTI_STORAGE= POSTGRESQL SQLITE
OPTIONS_RADIO= TESTING
OPTIONS_RADIO_TESTING= ASAN VALGRIND
CLNRESTDEPS_DESC= Install and depend on packages required by the clnrest plugin
# for d in `grep -E '^[^[:space:]]' work/lightning-23.11.2/plugins/clnrest/requirements.txt |cut -f 1 -d =` ; do echo "=== $d ===" ; portsearch -n "py.*$d" -o path ; done
CLNRESTDEPS_RUN_DEPENDS=\
${PYTHON_PKGNAMEPREFIX}Flask-Cors>0:www/py-flask-cors@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}aniso8601>0:devel/py-aniso8601@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}asn1crypto>0:devel/py-asn1crypto@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}attrs>0:devel/py-attrs@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}base58>0:security/py-base58@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}bidict>0:devel/py-bidict@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}bitstring>0:devel/py-bitstring@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}blinker>0:devel/py-blinker@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}cffi>0:devel/py-cffi@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}click>0:devel/py-click@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}coincurve>0:security/py-coincurve@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}colorama>0:devel/py-colorama@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}flask-restx>0:www/py-flask-restx@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}flask-socketio>0:www/py-flask-socketio@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}flask>0:www/py-flask@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gevent-websocket>0:www/py-gevent-websocket@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gevent>0:devel/py-gevent@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}greenlet>0:devel/py-greenlet@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gunicorn>0:www/py-gunicorn@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}importlib-metadata>0:devel/py-importlib-metadata@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}importlib-resources>0:devel/py-importlib-resources@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}itsdangerous>0:security/py-itsdangerous@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}json5>0:devel/py-json5@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}jsonschema-specifications>0:devel/py-jsonschema-specifications@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}jsonschema>0:devel/py-jsonschema@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}markupsafe>0:textproc/py-markupsafe@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}packaging>0:devel/py-packaging@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pycparser>0:devel/py-pycparser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyln-bolt7>0:net-p2p/pyln-bolt7@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyln-client>0:net-p2p/pyln-client@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyln-proto>0:net-p2p/pyln-proto@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pysocks>0:net/py-pysocks@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}python-engineio>0:devel/py-python-engineio@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}python-socketio>0:devel/py-python-socketio@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pytz>0:devel/py-pytz@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}referencing>0:devel/py-referencing@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}rpds-py>0:devel/py-rpds-py@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}werkzeug>0:www/py-werkzeug@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}zipp>0:devel/py-zipp@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}zope.event>0:devel/py-zope.event@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}zope.interface>0:devel/py-zope.interface@${PY_FLAVOR}
COMPATIBILITY_CONFIGURE_ENABLE= compat
COMPATIBILITY_DESC= Compatibility mode, good to disable to see if your software breaks
DEBUG_CONFIGURE_ENABLE= debugbuild
@ -60,6 +107,12 @@ VALGRIND_DESC= Run tests with Valgrind
OPTIONS_DEFAULT=COMPATIBILITY SQLITE
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MCLNRESTDEPS}
USE_PYTHON+= cryptography
.endif
HAS_CONFIGURE= yes
CONFIGURE_ARGS= --disable-rust

View file

@ -22,6 +22,9 @@ rcvar=lightningd_enable
load_rc_config ${name}
# If clnrest plugin is enabled it fails to load with OpenSSL 3.0: RuntimeError: OpenSSL 3.0's legacy provider failed to load. This is a fatal error by default, but cryptography supports running without legacy algorithms by setting the environment variable CRYPTOGRAPHY_OPENSSL_NO_LEGACY. If you did not expect this error, you have likely made a mistake with your OpenSSL configuration.
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
: ${lightningd_enable:="NO"}
: ${lightningd_user:="%%U%%"}
: ${lightningd_group:="%%G%%"}

View file

@ -0,0 +1,20 @@
PORTNAME= pyln-bolt7
PORTVERSION= 1.0.246
CATEGORIES= net-p2p python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
MAINTAINER= vd@FreeBSD.org
COMMENT= Lightning Network BOLT7 implementation
WWW= https://github.com/ElementsProject/lightning/tree/master/contrib/pyln-spec/bolt7
LICENSE= MIT
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}poetry-core>=0:devel/py-poetry-core@${PY_FLAVOR}
USES= python
USE_PYTHON= autoplist pep517
NO_ARCH= yes
.include <bsd.port.mk>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1707742564
SHA256 (pyln-bolt7-1.0.246.tar.gz) = 2b53744fa21c1b12d2c9c9df153651b122e38fa65d4a5c3f2957317ee148e089
SIZE (pyln-bolt7-1.0.246.tar.gz) = 17905

View file

@ -0,0 +1 @@
Lightning Network BOLT7 implementation

View file

@ -0,0 +1,22 @@
PORTNAME= pyln-client
PORTVERSION= 23.11
CATEGORIES= net-p2p python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
DISTNAME= ${PORTNAME:S/-/_/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}
MAINTAINER= vd@FreeBSD.org
COMMENT= Python client library for lightningd (net-p2p/c-lightning)
WWW= https://github.com/ElementsProject/lightning/tree/master/contrib/pyln-client
LICENSE= MIT
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}poetry-core>=0:devel/py-poetry-core@${PY_FLAVOR}
USES= python shebangfix
USE_PYTHON= autoplist pep517
SHEBANG_FILES= pyln/client/gossmap.py
NO_ARCH= yes
.include <bsd.port.mk>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1707743561
SHA256 (pyln_client-23.11.tar.gz) = 4102792bbdca545d5fbfa1fb1371222744e7157ec3d2c162edb03e8786db9823
SIZE (pyln_client-23.11.tar.gz) = 35134

View file

@ -0,0 +1,5 @@
A python client library for lightningd (net-p2p/c-lightning)
This package implements the Unix socket based JSON-RPC protocol that lightningd
exposes to the rest of the world. It can be used to call arbitrary functions on
the RPC interface, and serves as a basis for plugins written in python.

View file

@ -0,0 +1,21 @@
PORTNAME= pyln-proto
PORTVERSION= 23.11
CATEGORIES= net-p2p python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
DISTNAME= ${PORTNAME:S/-/_/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}
MAINTAINER= vd@FreeBSD.org
COMMENT= Lightning Network protocol implementation
WWW= https://github.com/ElementsProject/lightning/tree/master/contrib/pyln-proto
LICENSE= MIT
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}poetry-core>=0:devel/py-poetry-core@${PY_FLAVOR}
USES= python
USE_PYTHON= autoplist pep517
NO_ARCH= yes
.include <bsd.port.mk>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1707744598
SHA256 (pyln_proto-23.11.tar.gz) = e7056386be1527fd2c49a3db9228a9f5fd44cd5cdc9b1d431b21112137dd5957
SIZE (pyln_proto-23.11.tar.gz) = 27810

View file

@ -0,0 +1,5 @@
Lightning Network protocol implementation
This package implements some of the Lightning Network protocol in pure python.
It is intended for protocol testing and some minor tooling only. It is not
deemed secure enough to handle any amount of real funds.