From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- net-misc/crossbar/Manifest | 13 + net-misc/crossbar/crossbar-17.6.1_p3-r1.ebuild | 162 +++++++++++++ net-misc/crossbar/crossbar-17.8.1.ebuild | 171 +++++++++++++ net-misc/crossbar/crossbar-17.9.1.ebuild | 171 +++++++++++++ net-misc/crossbar/files/confd | 11 + net-misc/crossbar/files/config.json.sample | 60 +++++ .../files/crossbar-17.8.1-Revert-Torservices.patch | 246 +++++++++++++++++++ .../files/crossbar-17.9.1-Revert-Torservices.patch | 270 +++++++++++++++++++++ net-misc/crossbar/files/crossbar.service | 12 + net-misc/crossbar/files/initd | 35 +++ net-misc/crossbar/metadata.xml | 25 ++ 11 files changed, 1176 insertions(+) create mode 100644 net-misc/crossbar/Manifest create mode 100644 net-misc/crossbar/crossbar-17.6.1_p3-r1.ebuild create mode 100644 net-misc/crossbar/crossbar-17.8.1.ebuild create mode 100644 net-misc/crossbar/crossbar-17.9.1.ebuild create mode 100644 net-misc/crossbar/files/confd create mode 100644 net-misc/crossbar/files/config.json.sample create mode 100644 net-misc/crossbar/files/crossbar-17.8.1-Revert-Torservices.patch create mode 100644 net-misc/crossbar/files/crossbar-17.9.1-Revert-Torservices.patch create mode 100644 net-misc/crossbar/files/crossbar.service create mode 100644 net-misc/crossbar/files/initd create mode 100644 net-misc/crossbar/metadata.xml (limited to 'net-misc/crossbar') diff --git a/net-misc/crossbar/Manifest b/net-misc/crossbar/Manifest new file mode 100644 index 000000000000..d1383dcef3f5 --- /dev/null +++ b/net-misc/crossbar/Manifest @@ -0,0 +1,13 @@ +AUX confd 310 SHA256 381c2cabc2bf2186453abd2aae19fc93b80e3fcb62acb66c8e99fa21f419b207 SHA512 52d0b222101ea129588d8a4721011feeb935784ca2bbe462a808e3b1083405ef9fee852ed7f5f4461c6108b0b2e273c75f2546a9d5cbc32a46a17b8bcf19c5cf WHIRLPOOL cc898562a6f76e0c55935483db21177b02ce83d781204444de5a3c865385cc7afef28399712e6b262fe621264ef1e5aecedf8f63a3f27ddaad3dbac4afc6a254 +AUX config.json.sample 1952 SHA256 94f73275df14ddcd1be7f1da9790428c482d185ff7cead2e3d59ed61b1d1b959 SHA512 fa70eacdfb24842002c4318a12ad25cc413a0f217fb58560f5d9a3d06cc1b175872ae8fc68b0644c97c5fe15446ea847f333527d843022f18fc777b483362e20 WHIRLPOOL 9bdc2573c9289f0e8dfc3dec9dda24faa345004cc1cdb5d3c1ac2f055f28c134452f3edace60e5b6ad6fbf9f66c83a93c916624c5f3ffa0226aca495e145446c +AUX crossbar-17.8.1-Revert-Torservices.patch 9679 SHA256 78065647af4a3c9ab801c62d50a7256183257c1527d84277cb2947558d33a0c0 SHA512 084c7a4f16ebc5e75fd1fca48f9df7edb78f65dd5e1402d993235e491c649f769eb5d26701ba651fb0f7e3b0d3c75fabdf649586bf0542ac890aa2671c6e99ae WHIRLPOOL f38b6ff325ffadf0a414302c9707a334b60b47e2822ed5e9013a8d60b4f82f6fba89e43f5e74a344ec89682891e4c4f8870947223668a7ff4ff33d4d20761f77 +AUX crossbar-17.9.1-Revert-Torservices.patch 10253 SHA256 fe7828a6f2c72acfb1bc486ed950d7f4f7e39ed38828bbe3aa8b79404a53e4b8 SHA512 a550382b89dc7aa673ee1f2d90eda9cbc5006fa6a112aae70dc82863ec248300189a90ce6195b5fea755ad723e8a4a448762813a8e4c9d7d50bac404f72633ed WHIRLPOOL 5b3f2f00badd55401cd899951f60b9c274caeafe252b940992ecd544589d007371a4c6fe3ab1ae9ce073bcbe594ac14b0f2362a9c23e5adb6960376e237009a0 +AUX crossbar.service 265 SHA256 ccadbfab4e751fd98adf6bc41a36694cd39adf2cc15a9a010a6c157e5dda9d12 SHA512 85613679cb8a3e15d4b85283ff34b9de5fcc3abdc80747d9cb5392786935e6c7bbb6f0dca2c7e9cd44ac20f13ef2db218cc1b82a15b2806f7686539b4458d592 WHIRLPOOL d30165246b191c4dacc3759c5615d4b51008223b8c6fb932d1d6b14562915f9c72c22f40fd2e83eb09bf1cd4ef293ea62d92376767eb187b2ada6bdcf6deb393 +AUX initd 788 SHA256 c401f97c941d89bdb41192e9dd1ce6bc5def42e6408fe705f9fbf3ef00495896 SHA512 1675727c294354ccc7e2582ea16be9d1f8b0f9c110a8f8e34aab03e052d54ed9134d801a123b5a82d6b40ec65c47cd925a1f7ef9dd91af75b1b12c4b7c19ad38 WHIRLPOOL 031e44e6bbb98ee68d662247dc634817edff850104f5c413f31e4bf084f42ffda245a9fe5b739b59674d70ad79a4ad1acd4fc744e48dfe7b42ac1e3010ad4168 +DIST crossbar-17.6.1.post3.tar.gz 725054 SHA256 8d023af0a772404f4e57add5888583fc0068d62a7a2249bea4539a6d7b70fbd9 SHA512 c3efac2c7f7a41e6544eb98057afb249908453d6ddfb81c514f0705ed967374d50f844fe1a80395652b81a7c23abc90a03a0d6c88287f10cbfe99e64cb70919d WHIRLPOOL 08555f6cecbc57ab447569864cec75993fb8aea485ce7c85aefb1530b950b5913371e73d384e15ce539445f759c4f74a35457ef4ef2fc8791c0802325cebdc7b +DIST crossbar-17.8.1.tar.gz 1545668 SHA256 ba970b12c7b57c993739088248cf36d74aab12dda87cc906e25da96101344580 SHA512 21ed2031ddebe93fcd4fcd01243b2aa8979444e833386db83b10d032cfc3c3f9d47cf638d4cf26eb2801e91892c85115fec91e0a6f071a619f014132663f6c32 WHIRLPOOL fae59dc7ed9a2baddc203fad8109344d67925ef6c6e4d3751a2389f38b0dc058109f556074e8c25fb528107793e79a4380c121e451f2cb35c48c26d1aef64f58 +DIST crossbar-17.9.1.tar.gz 730753 SHA256 717cdd2177e77eb85e615de2b857ac3dfc0079a10e7a349027aa3a556abb2611 SHA512 fee96e1c900c756536dc9bf6088c512a50accbae0e8010b7e058de8ed2ebb2f366e5d5051ab2f07517dd642f4d65c65e9b701b00d7bca1b9352c58f38f892563 WHIRLPOOL e9f6192aecb9c34e715686b1f7543d4a395bdb06aa48fd914115f32bfb2170830549e418ca256d85e7806550504ab3e35a208bde1e64bfee7ee7393378bd0f7b +EBUILD crossbar-17.6.1_p3-r1.ebuild 6035 SHA256 cca01211087259190fc99999b74a151e934b1a83d87af617c7e5dda88b6277a9 SHA512 1d1b77f2774ce292744ad2475970fc8e14e07e2a8ecf5fe2452af1b59fd40b99a1ff035757435bfd4a192688d7a2005ce1f7e3087e9f7c34a312760a53fcacc3 WHIRLPOOL 75fb12dcefcdbf3d7b946851a08b89476a0e4e760b83302b23868b7bdfed0c41ffc00eb8d0e2055f49ae34ddd8b9e2131fc413c49534862c82f50a06177a73c2 +EBUILD crossbar-17.8.1.ebuild 6442 SHA256 07977e419e1d6d72e7f7975e57d5229bb03ac039955033ad48ffb63916b235b6 SHA512 bcb29637b0171887e4b6088449b7ddc6cb7fdc4f072b9fbe0dbe4fe76b65f5ab87d03def949864650fe7a2397b5f99a0306a13b86e8bd607c3d0a25a77a42a13 WHIRLPOOL ea01e1f104f52c09c380b6b3d93c5aa6e6856967235b7953bfe4bbd94feeb597dba420f07e08f39764b52e26ca249bdc355523699cb25e716752897bc2606e02 +EBUILD crossbar-17.9.1.ebuild 6392 SHA256 e644c41b0e72bc29b2821459e33c705bc0ffadf1a7dda5de974b8def7cc68c5d SHA512 50af397430d523c69880a16ea37ca0c412927109532f04e10c0a7743ad0b06b1200cbc13a33b45f2965c4558539d124c58a12dfda09110ea310de034dd7abd63 WHIRLPOOL 4ee2cad54a5bc3c8bae85b5da07d0cdc067edb0243cb753697ae3eaf992b8e52fb4865f0d1c83a94629c992d6a0d7d8405c718a5eb17c902a020d9c638e16033 +MISC metadata.xml 909 SHA256 be86a4c8962e536282999286568b586ff2aba21f88a77d1de080da08e750a13d SHA512 a1cb6f8d48cc7d0c417894b8f69faad0d896c1288c08932a40a87b8ccca1a0bb1fe5d8f2a8592911870ef5b71aeadc76dd2963238e6e85355f0df11eec0cbf68 WHIRLPOOL c287a1a2c704df42b82c6442d2589526f3fe96c1ee9c38655d3a5f530faa4e02eacdc09c2c019e83d37d24798dd3ea219a18bf3b686b0c1f1839415573b62ed9 diff --git a/net-misc/crossbar/crossbar-17.6.1_p3-r1.ebuild b/net-misc/crossbar/crossbar-17.6.1_p3-r1.ebuild new file mode 100644 index 000000000000..d320ae179088 --- /dev/null +++ b/net-misc/crossbar/crossbar-17.6.1_p3-r1.ebuild @@ -0,0 +1,162 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +# Not quite ready for py3, unconditionally deps on too many backported +# pkgs installed in newer pythons that shouldn't need them. +PYTHON_COMPAT=( python2_7 ) + +inherit user systemd distutils-r1 + +MY_PV="17.6.1.post3" +MY_P="${PN}-${MY_PV}" + +DESCRIPTION="Crossbar.io - The Unified Application Router for the twisted framework" +HOMEPAGE="http://crossbar.io/ https://github.com/crossbario/crossbar https://pypi.python.org/pypi/crossbar" +SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${MY_P}.tar.gz" + +LICENSE="AGPL-3" +SLOT="0" +KEYWORDS="~amd64" +IUSE="test" + +RDEPEND=" + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.1.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/enum34-1.1.6[${PYTHON_USEDEP}]' python2_7) + >=dev-python/txaio-2.8.0[${PYTHON_USEDEP}] + >=dev-python/pyasn1-0.2.3[${PYTHON_USEDEP}] + >=dev-python/pyasn1-modules-0.0.9[${PYTHON_USEDEP}] + >=dev-python/incremental-17.5.0[${PYTHON_USEDEP}] + >=dev-python/zope-interface-4.4.2[${PYTHON_USEDEP}] + =dev-python/priority-1.3.0[${PYTHON_USEDEP}] + >=dev-python/service_identity-17.0.0[${PYTHON_USEDEP}] + >=dev-python/pyopenssl-17.1.0[${PYTHON_USEDEP}] + >=dev-python/cryptography-1.9.0[${PYTHON_USEDEP}] + >=dev-python/autobahn-17.6.2[${PYTHON_USEDEP}] + >=dev-python/jinja-2.9.6[${PYTHON_USEDEP}] + >=dev-python/treq-17.3.1[${PYTHON_USEDEP}] + >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}] + >=dev-python/click-6.7[${PYTHON_USEDEP}] + >=dev-python/attrs-17.2.0[${PYTHON_USEDEP}] + >=dev-python/constantly-15.1.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/ipaddress-1.0.18[${PYTHON_USEDEP}]' python2_7) + >=dev-python/cbor-1.0.0[${PYTHON_USEDEP}] + >=dev-python/bitstring-3.1.5[${PYTHON_USEDEP}] + >=dev-python/pygments-2.2.0[${PYTHON_USEDEP}] + >=dev-python/pytrie-0.3[${PYTHON_USEDEP}] + >=dev-python/psutil-5.2.2[${PYTHON_USEDEP}] + >=dev-python/py-ubjson-0.9.0[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.1.2[${PYTHON_USEDEP}] + >=dev-python/pyqrcode-1.2.1[${PYTHON_USEDEP}] + >=dev-python/lmdb-0.92[${PYTHON_USEDEP}] + >=dev-python/mistune-0.7.4[${PYTHON_USEDEP}] + >=dev-python/netaddr-0.7.19[${PYTHON_USEDEP}] + >=dev-python/setproctitle-1.1.10[${PYTHON_USEDEP}] + >=dev-python/sdnotify-0.3.1[${PYTHON_USEDEP}] + >=dev-python/shutilwhich-1.1.0[${PYTHON_USEDEP}] + >=dev-python/u-msgpack-2.4.1[${PYTHON_USEDEP}] + >=dev-python/watchdog-0.8.3[${PYTHON_USEDEP}] +" +DEPEND=" + !dev-python/crossbar + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.1.0[${PYTHON_USEDEP}] + test? ( + dev-python/mock[${PYTHON_USEDEP}] + ) +" +DOCS=( + README.rst LICENSE-FOR-API LICENSE COPYRIGHT +) + +S="${WORKDIR}"/${MY_P} + +python_prepare_all() { + # don't install the copyright, license... let dodoc do it + sed -e "s/^ data_files=.*//" -i setup.py || die + + distutils-r1_python_prepare_all +} + +pkg_setup() { + enewuser crossbar +} + +python_test() { + pushd "${TEST_DIR}" > /dev/null || die + /usr/bin/trial crossbar || die "Tests failed with ${EPYTHON}" + popd > /dev/null || die +} + +python_install_all() { + distutils-r1_python_install_all + + keepdir /var/lib/crossbar + insinto /var/lib/crossbar + doins "${FILESDIR}/config.json.sample" + + newconfd "${FILESDIR}/confd" crossbar + newinitd "${FILESDIR}/initd" crossbar +} + +pkg_posinst() { + einfo "For exapmle configurations and scripts" + einfo "See: https://github.com/crossbario/crossbar-examples" + + if [[ -n ${REPLACING_VERSIONS} ]]; then + ewarn + ewarn "Starting with net-misc/crossbar-17.6.1_p3-r1, more than one instance of crossbar" + ewarn "can be run simultaneously. Note that \"BASEDIR\" in the crossbar conf.d/crossbar file" + ewarn "is the common base directory for all instances. If you are migrating from an older" + ewarn "version, make sure that you copy the current contents of \"BASEDIR\" to a subdirectory." + ewarn "The name of the subdirectory corresponds to the name of the buildbot_worker instance." + ewarn "In order to start the service running OpenRC-based systems need to link to the init file:" + ewarn " ln --symbolic --relative /etc/init.d/crossbar /etc/init.d/crossbar.myinstance" + ewarn " rc-update add crossbar.myinstance default" + ewarn " /etc/init.d/crossbar.myinstance start" + ewarn "Systems using systemd can do the following:" + ewarn " systemctl enable crossbar@myinstance.service" + ewarn " systemctl enable crossbar.target" + ewarn " systemctl start crossbar.target" + fi +} + +pkg_config() { + local crossbar_path="/var/lib/crossbar" + local log_path="/var/log/crossbar" + einfo "This will prepare a new crossbar instance in ${crossbar_path}." + einfo "Press Control-C to abort." + + einfo "Enter the name for the new instance: " + read instance_name + [[ -z "${instance_name}" ]] && die "Invalid instance name" + + local instance_path="${crossbar_path}/${instance_name}" + local instance_log_path="${log_path}/${instance_name}" + + if [[ -e "${instance_path}" ]]; then + eerror "The instance with the specified name already exists:" + eerror "${instance_path}" + die "Instance already exists" + fi + + if [[ ! -d "${instance_path}" ]]; then + mkdir --parents "${instance_path}" || die "Unable to create directory ${crossbar_path}" + fi + chown --recursive crossbar "${instance_path}" || die "Setting permissions for instance failed" + cp "${crossbar_path}/config.json.sample" "${instance_path}/config.json" \ + || die "Moving sample configuration failed" + ln --symbolic --relative "/etc/init.d/crossbar" "/etc/init.d/crossbar.${instance_name}" \ + || die "Unable to create link to init file" + + if [[ ! -d "${instance_log_path}" ]]; then + mkdir --parents "${instance_log_path}" || die "Unable to create directory ${instance_log_path}" + fi + ln --symbolic --relative "${instance_log_path}/node.log" "${instance_path}/node.log" \ + || die "Unable to create link to log file" + + einfo "Successfully created a crossbar instance at ${instance_path}." + einfo "To change the default settings edit the config.json file in this directory." +} diff --git a/net-misc/crossbar/crossbar-17.8.1.ebuild b/net-misc/crossbar/crossbar-17.8.1.ebuild new file mode 100644 index 000000000000..27ba86e8835c --- /dev/null +++ b/net-misc/crossbar/crossbar-17.8.1.ebuild @@ -0,0 +1,171 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +PYTHON_COMPAT=( python2_7 python3_{4,5,6} ) + +inherit user systemd distutils-r1 + +MY_PV="${PV}" +MY_P="${PN}-${MY_PV}" + +DESCRIPTION="Crossbar.io - The Unified Application Router for the twisted framework" +HOMEPAGE="http://crossbar.io/ https://github.com/crossbario/crossbar https://pypi.python.org/pypi/crossbar" +#SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${MY_P}.tar.gz" +SRC_URI="https://github.com/crossbario/crossbar/archive/v17.8.1.tar.gz -> ${P}.tar.gz" + +LICENSE="AGPL-3" +SLOT="0" +KEYWORDS="~amd64" +IUSE="test tor" + +RDEPEND=" + >=dev-python/attrs-17.2.0[${PYTHON_USEDEP}] + >=dev-python/autobahn-17.7.1[${PYTHON_USEDEP}] + >=dev-python/bitstring-3.1.5[${PYTHON_USEDEP}] + >=dev-python/cbor-1.0.0[${PYTHON_USEDEP}] + >=dev-python/click-6.7[${PYTHON_USEDEP}] + >=dev-python/constantly-15.1.0[${PYTHON_USEDEP}] + >=dev-python/cryptography-1.9.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/enum34-1.1.6[${PYTHON_USEDEP}]' python2_7) + >=dev-python/hyper-h2-3.0.1[${PYTHON_USEDEP}] + >=dev-python/incremental-17.5.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/ipaddress-1.0.18[${PYTHON_USEDEP}]' python2_7) + >=dev-python/jinja-2.9.6[${PYTHON_USEDEP}] + >=dev-python/lmdb-0.92[${PYTHON_USEDEP}] + >=dev-python/mistune-0.7.4[${PYTHON_USEDEP}] + >=dev-python/netaddr-0.7.19[${PYTHON_USEDEP}] + >=dev-python/priority-1.3.0[${PYTHON_USEDEP}] + >=dev-python/psutil-5.2.2[${PYTHON_USEDEP}] + >=dev-python/pyasn1-0.2.3[${PYTHON_USEDEP}] + >=dev-python/pyasn1-modules-0.0.9[${PYTHON_USEDEP}] + >=dev-python/pygments-2.2.0[${PYTHON_USEDEP}] + >=dev-python/pyopenssl-17.1.0[${PYTHON_USEDEP}] + >=dev-python/pytrie-0.3[${PYTHON_USEDEP}] + >=dev-python/py-ubjson-0.9.0[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.1.2[${PYTHON_USEDEP}] + >=dev-python/pyqrcode-1.2.1[${PYTHON_USEDEP}] + >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}] + >=dev-python/sdnotify-0.3.1[${PYTHON_USEDEP}] + >=dev-python/service_identity-17.0.0[${PYTHON_USEDEP}] + >=dev-python/setproctitle-1.1.10[${PYTHON_USEDEP}] + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/shutilwhich-1.1.0[${PYTHON_USEDEP}] + >=dev-python/treq-17.3.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.5.0[${PYTHON_USEDEP}] + >=dev-python/txaio-2.8.1[${PYTHON_USEDEP}] + >=dev-python/u-msgpack-2.4.1[${PYTHON_USEDEP}] + >=dev-python/watchdog-0.8.3[${PYTHON_USEDEP}] + >=dev-python/zope-interface-4.4.2[${PYTHON_USEDEP}] + tor? ( >=dev-python/txtorcon-0.19.3[${PYTHON_USEDEP}] ) +" +DEPEND=" + !dev-python/crossbar + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.5.0[${PYTHON_USEDEP}] + test? ( + dev-python/mock[${PYTHON_USEDEP}] + ) +" +DOCS=( + README.rst LICENSE-FOR-API LICENSE COPYRIGHT +) + +S="${WORKDIR}"/${MY_P} + +python_prepare_all() { + # don't install the copyright, license... let dodoc do it + sed -e "s/^ data_files=.*//" -i setup.py || die + + if ! use tor; then + eapply "${FILESDIR}/${PN}-17.8.1-Revert-Torservices.patch" + sed -e "s/^txtorcon.*//" -i requirements-min.txt || die + fi + # remove these py2 deps from setuptools install_requires + # it is not filtered out for >=py3.4 and results in test fails + sed -e "s/^ipaddress.*//" -i requirements-min.txt || die + sed -e "s/^enum34.*//" -i requirements-min.txt || die + + distutils-r1_python_prepare_all +} + +pkg_setup() { + enewuser crossbar +} + +python_test() { + pushd "${TEST_DIR}" > /dev/null || die + /usr/bin/trial crossbar || die "Tests failed with ${EPYTHON}" + popd > /dev/null || die +} + +python_install_all() { + distutils-r1_python_install_all + + keepdir /var/lib/crossbar + insinto /var/lib/crossbar + doins "${FILESDIR}/config.json.sample" + + newconfd "${FILESDIR}/confd" crossbar + newinitd "${FILESDIR}/initd" crossbar +} + +pkg_posinst() { + einfo "For exapmle configurations and scripts" + einfo "See: https://github.com/crossbario/crossbar-examples" + + if [[ -n ${REPLACING_VERSIONS} ]]; then + ewarn + ewarn "Starting with net-misc/crossbar-17.6.1_p3-r1, more than one instance of crossbar" + ewarn "can be run simultaneously. Note that \"BASEDIR\" in the crossbar conf.d/crossbar file" + ewarn "is the common base directory for all instances. If you are migrating from an older" + ewarn "version, make sure that you copy the current contents of \"BASEDIR\" to a subdirectory." + ewarn "The name of the subdirectory corresponds to the name of the buildbot_worker instance." + ewarn "In order to start the service running OpenRC-based systems need to link to the init file:" + ewarn " ln --symbolic --relative /etc/init.d/crossbar /etc/init.d/crossbar.myinstance" + ewarn " rc-update add crossbar.myinstance default" + ewarn " /etc/init.d/crossbar.myinstance start" + ewarn "Systems using systemd can do the following:" + ewarn " systemctl enable crossbar@myinstance.service" + ewarn " systemctl enable crossbar.target" + ewarn " systemctl start crossbar.target" + fi +} + +pkg_config() { + local crossbar_path="/var/lib/crossbar" + local log_path="/var/log/crossbar" + einfo "This will prepare a new crossbar instance in ${crossbar_path}." + einfo "Press Control-C to abort." + + einfo "Enter the name for the new instance: " + read instance_name + [[ -z "${instance_name}" ]] && die "Invalid instance name" + + local instance_path="${crossbar_path}/${instance_name}" + local instance_log_path="${log_path}/${instance_name}" + + if [[ -e "${instance_path}" ]]; then + eerror "The instance with the specified name already exists:" + eerror "${instance_path}" + die "Instance already exists" + fi + + if [[ ! -d "${instance_path}" ]]; then + mkdir --parents "${instance_path}" || die "Unable to create directory ${crossbar_path}" + fi + chown --recursive crossbar "${instance_path}" || die "Setting permissions for instance failed" + cp "${crossbar_path}/config.json.sample" "${instance_path}/config.json" \ + || die "Moving sample configuration failed" + ln --symbolic --relative "/etc/init.d/crossbar" "/etc/init.d/crossbar.${instance_name}" \ + || die "Unable to create link to init file" + + if [[ ! -d "${instance_log_path}" ]]; then + mkdir --parents "${instance_log_path}" || die "Unable to create directory ${instance_log_path}" + fi + ln --symbolic --relative "${instance_log_path}/node.log" "${instance_path}/node.log" \ + || die "Unable to create link to log file" + + einfo "Successfully created a crossbar instance at ${instance_path}." + einfo "To change the default settings edit the config.json file in this directory." +} diff --git a/net-misc/crossbar/crossbar-17.9.1.ebuild b/net-misc/crossbar/crossbar-17.9.1.ebuild new file mode 100644 index 000000000000..5597bd6ef26d --- /dev/null +++ b/net-misc/crossbar/crossbar-17.9.1.ebuild @@ -0,0 +1,171 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +PYTHON_COMPAT=( python2_7 python3_{4,5,6} ) + +inherit user systemd distutils-r1 + +MY_PV="${PV}" +MY_P="${PN}-${MY_PV}" + +DESCRIPTION="Crossbar.io - The Unified Application Router for the twisted framework" +HOMEPAGE="http://crossbar.io/ https://github.com/crossbario/crossbar https://pypi.python.org/pypi/crossbar" +SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${MY_P}.tar.gz" + +LICENSE="AGPL-3" +SLOT="0" +KEYWORDS="~amd64" +IUSE="test tor" + +RDEPEND=" + >=dev-python/attrs-17.2.0[${PYTHON_USEDEP}] + ~dev-python/autobahn-${PV}[${PYTHON_USEDEP}] + >=dev-python/bitstring-3.1.5[${PYTHON_USEDEP}] + >=dev-python/cbor-1.0.0[${PYTHON_USEDEP}] + >=dev-python/click-6.7[${PYTHON_USEDEP}] + >=dev-python/constantly-15.1.0[${PYTHON_USEDEP}] + >=dev-python/cryptography-1.9.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/enum34-1.1.6[${PYTHON_USEDEP}]' python2_7) + >=dev-python/hyper-h2-3.0.1[${PYTHON_USEDEP}] + =dev-python/idna-2.5[${PYTHON_USEDEP}] + >=dev-python/incremental-17.5.0[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/ipaddress-1.0.18[${PYTHON_USEDEP}]' python2_7) + >=dev-python/jinja-2.9.6[${PYTHON_USEDEP}] + >=dev-python/lmdb-0.92[${PYTHON_USEDEP}] + >=dev-python/mistune-0.7.4[${PYTHON_USEDEP}] + >=dev-python/netaddr-0.7.19[${PYTHON_USEDEP}] + >=dev-python/priority-1.3.0[${PYTHON_USEDEP}] + >=dev-python/psutil-5.2.2[${PYTHON_USEDEP}] + >=dev-python/pyasn1-0.2.3[${PYTHON_USEDEP}] + >=dev-python/pyasn1-modules-0.0.9[${PYTHON_USEDEP}] + >=dev-python/pygments-2.2.0[${PYTHON_USEDEP}] + >=dev-python/pyopenssl-17.1.0[${PYTHON_USEDEP}] + >=dev-python/pytrie-0.3[${PYTHON_USEDEP}] + >=dev-python/py-ubjson-0.9.0[${PYTHON_USEDEP}] + >=dev-python/pynacl-1.1.2[${PYTHON_USEDEP}] + >=dev-python/pyqrcode-1.2.1[${PYTHON_USEDEP}] + >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}] + >=dev-python/sdnotify-0.3.1[${PYTHON_USEDEP}] + >=dev-python/service_identity-17.0.0[${PYTHON_USEDEP}] + >=dev-python/setproctitle-1.1.10[${PYTHON_USEDEP}] + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/shutilwhich-1.1.0[${PYTHON_USEDEP}] + >=dev-python/treq-17.3.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.5.0[${PYTHON_USEDEP}] + >=dev-python/txaio-2.8.2[${PYTHON_USEDEP}] + >=dev-python/u-msgpack-2.4.1[${PYTHON_USEDEP}] + >=dev-python/watchdog-0.8.3[${PYTHON_USEDEP}] + >=dev-python/zope-interface-4.4.2[${PYTHON_USEDEP}] + tor? ( >=dev-python/txtorcon-0.19.3[${PYTHON_USEDEP}] ) +" +DEPEND=" + !dev-python/crossbar + >=dev-python/setuptools-36.0.1[${PYTHON_USEDEP}] + >=dev-python/twisted-17.5.0[${PYTHON_USEDEP}] + test? ( + dev-python/mock[${PYTHON_USEDEP}] + ) +" +DOCS=( + README.rst LICENSE-FOR-API LICENSE COPYRIGHT +) + +S="${WORKDIR}"/${MY_P} + +python_prepare_all() { + # don't install the copyright, license... let dodoc do it + sed -e "s/^ data_files=.*//" -i setup.py || die + + if ! use tor; then + eapply "${FILESDIR}/${PN}-17.9.1-Revert-Torservices.patch" + sed -e "s/^txtorcon.*//" -i requirements-min.txt || die + fi + # remove these py2 deps from setuptools install_requires + # it is not filtered out for >=py3.4 and results in test fails + sed -e "s/^ipaddress.*//" -i requirements-min.txt || die + sed -e "s/^enum34.*//" -i requirements-min.txt || die + + distutils-r1_python_prepare_all +} + +pkg_setup() { + enewuser crossbar +} + +python_test() { + pushd "${TEST_DIR}" > /dev/null || die + /usr/bin/trial crossbar || die "Tests failed with ${EPYTHON}" + popd > /dev/null || die +} + +python_install_all() { + distutils-r1_python_install_all + + keepdir /var/lib/crossbar + insinto /var/lib/crossbar + doins "${FILESDIR}/config.json.sample" + + newconfd "${FILESDIR}/confd" crossbar + newinitd "${FILESDIR}/initd" crossbar +} + +pkg_posinst() { + einfo "For exapmle configurations and scripts" + einfo "See: https://github.com/crossbario/crossbar-examples" + + if [[ -n ${REPLACING_VERSIONS} ]]; then + ewarn + ewarn "Starting with net-misc/crossbar-17.6.1_p3-r1, more than one instance of crossbar" + ewarn "can be run simultaneously. Note that \"BASEDIR\" in the crossbar conf.d/crossbar file" + ewarn "is the common base directory for all instances. If you are migrating from an older" + ewarn "version, make sure that you copy the current contents of \"BASEDIR\" to a subdirectory." + ewarn "The name of the subdirectory corresponds to the name of the buildbot_worker instance." + ewarn "In order to start the service running OpenRC-based systems need to link to the init file:" + ewarn " ln --symbolic --relative /etc/init.d/crossbar /etc/init.d/crossbar.myinstance" + ewarn " rc-update add crossbar.myinstance default" + ewarn " /etc/init.d/crossbar.myinstance start" + ewarn "Systems using systemd can do the following:" + ewarn " systemctl enable crossbar@myinstance.service" + ewarn " systemctl enable crossbar.target" + ewarn " systemctl start crossbar.target" + fi +} + +pkg_config() { + local crossbar_path="/var/lib/crossbar" + local log_path="/var/log/crossbar" + einfo "This will prepare a new crossbar instance in ${crossbar_path}." + einfo "Press Control-C to abort." + + einfo "Enter the name for the new instance: " + read instance_name + [[ -z "${instance_name}" ]] && die "Invalid instance name" + + local instance_path="${crossbar_path}/${instance_name}" + local instance_log_path="${log_path}/${instance_name}" + + if [[ -e "${instance_path}" ]]; then + eerror "The instance with the specified name already exists:" + eerror "${instance_path}" + die "Instance already exists" + fi + + if [[ ! -d "${instance_path}" ]]; then + mkdir --parents "${instance_path}" || die "Unable to create directory ${crossbar_path}" + fi + chown --recursive crossbar "${instance_path}" || die "Setting permissions for instance failed" + cp "${crossbar_path}/config.json.sample" "${instance_path}/config.json" \ + || die "Moving sample configuration failed" + ln --symbolic --relative "/etc/init.d/crossbar" "/etc/init.d/crossbar.${instance_name}" \ + || die "Unable to create link to init file" + + if [[ ! -d "${instance_log_path}" ]]; then + mkdir --parents "${instance_log_path}" || die "Unable to create directory ${instance_log_path}" + fi + ln --symbolic --relative "${instance_log_path}/node.log" "${instance_path}/node.log" \ + || die "Unable to create link to log file" + + einfo "Successfully created a crossbar instance at ${instance_path}." + einfo "To change the default settings edit the config.json file in this directory." +} diff --git a/net-misc/crossbar/files/confd b/net-misc/crossbar/files/confd new file mode 100644 index 000000000000..e4a914f640fd --- /dev/null +++ b/net-misc/crossbar/files/confd @@ -0,0 +1,11 @@ +# Path to the wamp router basedir. +BASEDIR="/var/lib/crossbar" + +# User account for the crossbar router. +# The basedir should be owned by this user. +USERNAME="crossbar" + +# loglevel {none,error,warn,info,debug,trace} +# How much Crossbar.io should log to the terminal, in +# order of verbosity. +LOGLEVEL="info" diff --git a/net-misc/crossbar/files/config.json.sample b/net-misc/crossbar/files/config.json.sample new file mode 100644 index 000000000000..d7b7d6af7300 --- /dev/null +++ b/net-misc/crossbar/files/config.json.sample @@ -0,0 +1,60 @@ +{ + "version": 2, + "controller": {}, + "workers": [ + { + "type": "router", + "realms": [ + { + "name": "realm1", + "roles": [ + { + "name": "anonymous", + "permissions": [ + { + "uri": "", + "match": "prefix", + "allow": { + "call": true, + "register": true, + "publish": true, + "subscribe": true + }, + "disclose": { + "caller": false, + "publisher": false + }, + "cache": true + } + ] + } + ] + } + ], + "transports": [ + { + "type": "universal", + "endpoint": { + "type": "tcp", + "port": 8080 + }, + "rawsocket": { + }, + "websocket": { + "ws": { + "type": "websocket" + } + }, + "web": { + "paths": { + "/": { + "type": "static", + "directory": "../web" + } + } + } + } + ] + } + ] +} diff --git a/net-misc/crossbar/files/crossbar-17.8.1-Revert-Torservices.patch b/net-misc/crossbar/files/crossbar-17.8.1-Revert-Torservices.patch new file mode 100644 index 000000000000..3a83bdf8fc69 --- /dev/null +++ b/net-misc/crossbar/files/crossbar-17.8.1-Revert-Torservices.patch @@ -0,0 +1,246 @@ +From 97a2d923dff32397c9df5adb95ecb84bcd95d83d Mon Sep 17 00:00:00 2001 +From: Brian Dolbec +Date: Tue, 19 Sep 2017 17:44:08 -0700 +Subject: [PATCH] Revert "Add built-in Tor services and connection support" + +This reverts commit f75db17642845f46bebd2f6f1d6a092974b9b390. +--- + crossbar/common/checkconfig.py | 60 +-------------- + crossbar/twisted/endpoint.py | 83 +-------------------- + .../router/transport/Transport-Endpoints.md | 85 +--------------------- + requirements-dev.txt | 1 - + requirements-min.txt | 1 - + 5 files changed, 4 insertions(+), 226 deletions(-) + +diff --git a/crossbar/common/checkconfig.py b/crossbar/common/checkconfig.py +index a8e84d45..1f5d9c91 100644 +--- a/crossbar/common/checkconfig.py ++++ b/crossbar/common/checkconfig.py +@@ -867,31 +867,6 @@ def check_listening_endpoint_twisted(endpoint): + # should/can we ask Twisted to parse it easily? + + +-def check_listening_endpoint_onion(endpoint): +- """ +- :param endpoint: The onion endpoint +- :type endpoint: dict +- """ +- for k in endpoint: +- if k not in ['type', 'port', 'private_key_file', 'tor_control_endpoint']: +- raise InvalidConfigException( +- "encountered unknown attribute '{}' in onion endpoint".format(k) +- ) +- +- check_dict_args( +- { +- u"type": (True, [six.text_type]), +- u"port": (True, [int, long]), +- u"private_key_file": (True, [six.text_type]), +- u"tor_control_endpoint": (True, [Mapping]) +- }, +- endpoint, +- "onion endpoint config", +- ) +- +- check_connecting_endpoint(endpoint[u"tor_control_endpoint"]) +- +- + def check_connecting_endpoint_tcp(endpoint): + """ + Check a TCP connecting endpoint configuration. +@@ -978,33 +953,6 @@ def check_connecting_endpoint_twisted(endpoint): + check_endpoint_timeout(endpoint['timeout']) + + +-def check_connecting_endpoint_tor(endpoint): +- """ +- :param endpoint: The Tor connecting endpoint to check. +- :type endpoint: dict +- """ +- for k in endpoint: +- if k not in ['type', 'host', 'port', 'tor_socks_port', 'tls']: +- raise InvalidConfigException( +- "encountered unknown attribute '{}' in connecting endpoint".format(k) +- ) +- +- if 'host' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'host' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- if 'port' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'port' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- if 'tor_socks_port' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'tor_socks_port' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- check_endpoint_port(endpoint['port']) +- check_endpoint_port(endpoint['tor_socks_port']) +- +- if 'tls' in endpoint: +- check_connecting_endpoint_tls(endpoint['tls']) +- +- + def check_listening_endpoint(endpoint): + """ + Check a listening endpoint configuration. +@@ -1022,7 +970,7 @@ def check_listening_endpoint(endpoint): + raise InvalidConfigException("missing mandatory attribute 'type' in endpoint item\n\n{}".format(pformat(endpoint))) + + etype = endpoint['type'] +- if etype not in ['tcp', 'unix', 'twisted', 'onion']: ++ if etype not in ['tcp', 'unix', 'twisted']: + raise InvalidConfigException("invalid attribute value '{}' for attribute 'type' in endpoint item\n\n{}".format(etype, pformat(endpoint))) + + if etype == 'tcp': +@@ -1031,8 +979,6 @@ def check_listening_endpoint(endpoint): + check_listening_endpoint_unix(endpoint) + elif etype == 'twisted': + check_listening_endpoint_twisted(endpoint) +- elif etype == 'onion': +- check_listening_endpoint_onion(endpoint) + else: + raise InvalidConfigException('logic error') + +@@ -1054,7 +1000,7 @@ def check_connecting_endpoint(endpoint): + raise InvalidConfigException("missing mandatory attribute 'type' in endpoint item\n\n{}".format(pformat(endpoint))) + + etype = endpoint['type'] +- if etype not in ['tcp', 'unix', 'twisted', 'tor']: ++ if etype not in ['tcp', 'unix', 'twisted']: + raise InvalidConfigException("invalid attribute value '{}' for attribute 'type' in endpoint item\n\n{}".format(etype, pformat(endpoint))) + + if etype == 'tcp': +@@ -1063,8 +1009,6 @@ def check_connecting_endpoint(endpoint): + check_connecting_endpoint_unix(endpoint) + elif etype == 'twisted': + check_connecting_endpoint_twisted(endpoint) +- elif etype == 'tor': +- check_connecting_endpoint_tor(endpoint) + else: + raise InvalidConfigException('logic error') + +diff --git a/crossbar/twisted/endpoint.py b/crossbar/twisted/endpoint.py +index 483e5a39..251bfa5c 100644 +--- a/crossbar/twisted/endpoint.py ++++ b/crossbar/twisted/endpoint.py +@@ -33,7 +33,7 @@ from __future__ import absolute_import, division + import six + import os + from os import environ +-from os.path import join, abspath, isabs, exists ++from os.path import join, abspath + + from twisted.internet import defer + from twisted.internet._sslverify import OpenSSLCertificateAuthorities +@@ -48,11 +48,7 @@ from twisted.internet.endpoints import TCP4ServerEndpoint, \ + UNIXClientEndpoint, \ + serverFromString, \ + clientFromString +-from twisted.internet.interfaces import IStreamServerEndpoint + from twisted.python.filepath import FilePath +-from zope.interface import implementer +- +-import txtorcon + + from crossbar.twisted.sharedport import SharedPort, SharedTLSPort + +@@ -318,12 +314,6 @@ def _create_tls_client_context(config, cbdir, log): + return ctx + + +-def _ensure_absolute(fname, cbdir): +- if isabs(fname): +- return fname +- return abspath(join(cbdir, fname)) +- +- + def create_listening_endpoint_from_config(config, cbdir, reactor, log): + """ + Create a Twisted stream server endpoint from a Crossbar.io transport configuration. +@@ -431,59 +421,6 @@ def create_listening_endpoint_from_config(config, cbdir, reactor, log): + elif config['type'] == 'twisted': + endpoint = serverFromString(reactor, config['server_string']) + +- # tor endpoint +- elif config['type'] == 'onion': # or "tor"? r "tor_onion"? +- port = config['port'] +- private_key_fname = _ensure_absolute(config[u'private_key_file'], cbdir) +- tor_control_ep = create_connecting_endpoint_from_config( +- config[u'tor_control_endpoint'], cbdir, reactor, log +- ) +- +- try: +- with open(private_key_fname, 'r') as f: +- private_key = f.read().strip() +- except (IOError, OSError): +- private_key = None +- +- @implementer(IStreamServerEndpoint) +- class _EphemeralOnion(object): +- +- @defer.inlineCallbacks +- def listen(self, proto_factory): +- # we don't care which local TCP port we listen on, but +- # we do need to know it +- local_ep = TCP4ServerEndpoint(reactor, 0, interface=u"127.0.0.1") +- target_port = yield local_ep.listen(proto_factory) +- tor = yield txtorcon.connect( +- reactor, +- tor_control_ep, +- ) +- +- # create and add the service +- hs = txtorcon.EphemeralHiddenService( +- ports=["{} 127.0.0.1:{}".format(port, target_port.getHost().port)], +- key_blob_or_type=private_key if private_key else "NEW:BEST", +- ) +- log.info("Uploading descriptors can take more than 30s") +- yield hs.add_to_tor(tor.protocol) +- +- # if it's new, store our private key +- # XXX better "if private_key is None"? +- if not exists(private_key_fname): +- with open(private_key_fname, 'w') as f: +- f.write(hs.private_key) +- log.info("Wrote private key to '{fname}'", fname=private_key_fname) +- +- addr = txtorcon.TorOnionAddress(hs.hostname, port) +- log.info( +- "Listening on Tor onion service {addr.onion_uri}:{addr.onion_port}" +- " with local port {local_port}", +- addr=addr, +- local_port=target_port.getHost().port, +- ) +- defer.returnValue(addr) +- endpoint = _EphemeralOnion() +- + else: + raise Exception("invalid endpoint type '{}'".format(config['type'])) + +@@ -656,24 +593,6 @@ def create_connecting_endpoint_from_config(config, cbdir, reactor, log): + elif config['type'] == 'twisted': + endpoint = clientFromString(reactor, config['client_string']) + +- elif config['type'] == 'tor': +- host = config['host'] +- port = config['port'] +- socks_port = config['tor_socks_port'] +- tls = config.get('tls', False) +- if not tls and not host.endswith(u'.onion'): +- log.warn("Non-TLS connection traversing Tor network; end-to-end encryption advised") +- +- socks_endpoint = TCP4ClientEndpoint( +- reactor, "127.0.0.1", socks_port, +- ) +- endpoint = txtorcon.TorClientEndpoint( +- host, port, +- socks_endpoint=socks_endpoint, +- reactor=reactor, +- use_tls=tls, +- ) +- + else: + raise Exception("invalid endpoint type '{}'".format(config['type'])) + +-- +2.14.1 + diff --git a/net-misc/crossbar/files/crossbar-17.9.1-Revert-Torservices.patch b/net-misc/crossbar/files/crossbar-17.9.1-Revert-Torservices.patch new file mode 100644 index 000000000000..dd4b2b58e455 --- /dev/null +++ b/net-misc/crossbar/files/crossbar-17.9.1-Revert-Torservices.patch @@ -0,0 +1,270 @@ +From 97a2d923dff32397c9df5adb95ecb84bcd95d83d Mon Sep 17 00:00:00 2001 +From: Brian Dolbec +Date: Tue, 19 Sep 2017 17:44:08 -0700 +Subject: [PATCH] Revert "Add built-in Tor services and connection support" + +This reverts commit f75db17642845f46bebd2f6f1d6a092974b9b390. +--- + crossbar/common/checkconfig.py | 60 +-------------- + crossbar/twisted/endpoint.py | 83 +-------------------- + .../router/transport/Transport-Endpoints.md | 85 +--------------------- + requirements-dev.txt | 1 - + requirements-min.txt | 1 - + 5 files changed, 4 insertions(+), 226 deletions(-) + +diff --git a/crossbar/common/checkconfig.py b/crossbar/common/checkconfig.py +index a8e84d45..1f5d9c91 100644 +--- a/crossbar/common/checkconfig.py ++++ b/crossbar/common/checkconfig.py +@@ -867,31 +867,6 @@ def check_listening_endpoint_twisted(endpoint): + # should/can we ask Twisted to parse it easily? + + +-def check_listening_endpoint_onion(endpoint): +- """ +- :param endpoint: The onion endpoint +- :type endpoint: dict +- """ +- for k in endpoint: +- if k not in ['type', 'port', 'private_key_file', 'tor_control_endpoint']: +- raise InvalidConfigException( +- "encountered unknown attribute '{}' in onion endpoint".format(k) +- ) +- +- check_dict_args( +- { +- u"type": (True, [six.text_type]), +- u"port": (True, six.integer_types), +- u"private_key_file": (True, [six.text_type]), +- u"tor_control_endpoint": (True, [Mapping]) +- }, +- endpoint, +- "onion endpoint config", +- ) +- check_endpoint_port(u"port") +- check_connecting_endpoint(endpoint[u"tor_control_endpoint"]) +- +- + def check_connecting_endpoint_tcp(endpoint): + """ + Check a TCP connecting endpoint configuration. +@@ -978,33 +953,6 @@ def check_connecting_endpoint_twisted(endpoint): + check_endpoint_timeout(endpoint['timeout']) + + +-def check_connecting_endpoint_tor(endpoint): +- """ +- :param endpoint: The Tor connecting endpoint to check. +- :type endpoint: dict +- """ +- for k in endpoint: +- if k not in ['type', 'host', 'port', 'tor_socks_port', 'tls']: +- raise InvalidConfigException( +- "encountered unknown attribute '{}' in connecting endpoint".format(k) +- ) +- +- if 'host' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'host' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- if 'port' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'port' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- if 'tor_socks_port' not in endpoint: +- raise InvalidConfigException("missing mandatory attribute 'tor_socks_port' in connecting endpoint item\n\n{}".format(pformat(endpoint))) +- +- check_endpoint_port(endpoint['port']) +- check_endpoint_port(endpoint['tor_socks_port']) +- +- if 'tls' in endpoint: +- check_connecting_endpoint_tls(endpoint['tls']) +- +- + def check_listening_endpoint(endpoint): + """ + Check a listening endpoint configuration. +@@ -1022,7 +970,7 @@ def check_listening_endpoint(endpoint): + raise InvalidConfigException("missing mandatory attribute 'type' in endpoint item\n\n{}".format(pformat(endpoint))) + + etype = endpoint['type'] +- if etype not in ['tcp', 'unix', 'twisted', 'onion']: ++ if etype not in ['tcp', 'unix', 'twisted']: + raise InvalidConfigException("invalid attribute value '{}' for attribute 'type' in endpoint item\n\n{}".format(etype, pformat(endpoint))) + + if etype == 'tcp': +@@ -1031,8 +979,6 @@ def check_listening_endpoint(endpoint): + check_listening_endpoint_unix(endpoint) + elif etype == 'twisted': + check_listening_endpoint_twisted(endpoint) +- elif etype == 'onion': +- check_listening_endpoint_onion(endpoint) + else: + raise InvalidConfigException('logic error') + +@@ -1054,7 +1000,7 @@ def check_connecting_endpoint(endpoint): + raise InvalidConfigException("missing mandatory attribute 'type' in endpoint item\n\n{}".format(pformat(endpoint))) + + etype = endpoint['type'] +- if etype not in ['tcp', 'unix', 'twisted', 'tor']: ++ if etype not in ['tcp', 'unix', 'twisted']: + raise InvalidConfigException("invalid attribute value '{}' for attribute 'type' in endpoint item\n\n{}".format(etype, pformat(endpoint))) + + if etype == 'tcp': +@@ -1063,8 +1009,6 @@ def check_connecting_endpoint(endpoint): + check_connecting_endpoint_unix(endpoint) + elif etype == 'twisted': + check_connecting_endpoint_twisted(endpoint) +- elif etype == 'tor': +- check_connecting_endpoint_tor(endpoint) + else: + raise InvalidConfigException('logic error') + +diff --git a/crossbar/twisted/endpoint.py b/crossbar/twisted/endpoint.py +index 483e5a39..251bfa5c 100644 +--- a/crossbar/twisted/endpoint.py ++++ b/crossbar/twisted/endpoint.py +@@ -33,7 +33,7 @@ from __future__ import absolute_import, division + import six + import os + from os import environ +-from os.path import join, abspath, isabs, exists ++from os.path import join, abspath + + from twisted.internet import defer + from twisted.internet._sslverify import OpenSSLCertificateAuthorities +@@ -48,11 +48,7 @@ from twisted.internet.endpoints import TCP4ServerEndpoint, \ + UNIXClientEndpoint, \ + serverFromString, \ + clientFromString +-from twisted.internet.interfaces import IStreamServerEndpoint + from twisted.python.filepath import FilePath +-from zope.interface import implementer +- +-import txtorcon + + from crossbar.twisted.sharedport import SharedPort, SharedTLSPort + +@@ -318,12 +314,6 @@ def _create_tls_client_context(config, cbdir, log): + return ctx + + +-def _ensure_absolute(fname, cbdir): +- if isabs(fname): +- return fname +- return abspath(join(cbdir, fname)) +- +- + def create_listening_endpoint_from_config(config, cbdir, reactor, log): + """ + Create a Twisted stream server endpoint from a Crossbar.io transport configuration. +@@ -431,59 +421,6 @@ def create_listening_endpoint_from_config(config, cbdir, reactor, log): + elif config['type'] == 'twisted': + endpoint = serverFromString(reactor, config['server_string']) + +- # tor endpoint +- elif config['type'] == 'onion': # or "tor"? r "tor_onion"? +- port = config['port'] +- private_key_fname = _ensure_absolute(config[u'private_key_file'], cbdir) +- tor_control_ep = create_connecting_endpoint_from_config( +- config[u'tor_control_endpoint'], cbdir, reactor, log +- ) +- +- try: +- with open(private_key_fname, 'r') as f: +- private_key = f.read().strip() +- except (IOError, OSError): +- private_key = None +- +- @implementer(IStreamServerEndpoint) +- class _EphemeralOnion(object): +- +- @defer.inlineCallbacks +- def listen(self, proto_factory): +- # we don't care which local TCP port we listen on, but +- # we do need to know it +- local_ep = TCP4ServerEndpoint(reactor, 0, interface=u"127.0.0.1") +- target_port = yield local_ep.listen(proto_factory) +- tor = yield txtorcon.connect( +- reactor, +- tor_control_ep, +- ) +- +- # create and add the service +- hs = txtorcon.EphemeralHiddenService( +- ports=["{} 127.0.0.1:{}".format(port, target_port.getHost().port)], +- key_blob_or_type=private_key if private_key else "NEW:BEST", +- ) +- log.info("Uploading descriptors can take more than 30s") +- yield hs.add_to_tor(tor.protocol) +- +- # if it's new, store our private key +- # XXX better "if private_key is None"? +- if not exists(private_key_fname): +- with open(private_key_fname, 'w') as f: +- f.write(hs.private_key) +- log.info("Wrote private key to '{fname}'", fname=private_key_fname) +- +- addr = txtorcon.TorOnionAddress(hs.hostname, port) +- log.info( +- "Listening on Tor onion service {addr.onion_uri}:{addr.onion_port}" +- " with local port {local_port}", +- addr=addr, +- local_port=target_port.getHost().port, +- ) +- defer.returnValue(addr) +- endpoint = _EphemeralOnion() +- + else: + raise Exception("invalid endpoint type '{}'".format(config['type'])) + +@@ -656,24 +593,6 @@ def create_connecting_endpoint_from_config(config, cbdir, reactor, log): + elif config['type'] == 'twisted': + endpoint = clientFromString(reactor, config['client_string']) + +- elif config['type'] == 'tor': +- host = config['host'] +- port = config['port'] +- socks_port = config['tor_socks_port'] +- tls = config.get('tls', False) +- if not tls and not host.endswith(u'.onion'): +- log.warn("Non-TLS connection traversing Tor network; end-to-end encryption advised") +- +- socks_endpoint = TCP4ClientEndpoint( +- reactor, "127.0.0.1", socks_port, +- ) +- endpoint = txtorcon.TorClientEndpoint( +- host, port, +- socks_endpoint=socks_endpoint, +- reactor=reactor, +- use_tls=tls, +- ) +- + else: + raise Exception("invalid endpoint type '{}'".format(config['type'])) + +diff --git a/requirements-dev.txt b/requirements-dev.txt +index fa75074a..d68d1e89 100644 +--- a/requirements-dev.txt ++++ b/requirements-dev.txt +@@ -4,7 +4,6 @@ colorama>=0.3.3 + mock>=1.3.0 + wheel>=0.26.0 + hashin>=0.4.1 +-txtorcon>=0.19.3 + + # docs + flask +diff --git a/requirements-min.txt b/requirements-min.txt +index 38ee5a71..83c8d802 100644 +--- a/requirements-min.txt ++++ b/requirements-min.txt +@@ -6,7 +6,6 @@ Twisted>=17.5.0 + h2>=3.0.1 + priority>=1.3.0 + txaio>=2.8.2 +-txtorcon>=0.19.3 + autobahn>=17.9.1 + netaddr>=0.7.19 + PyTrie>=0.3 +-- +2.14.1 + diff --git a/net-misc/crossbar/files/crossbar.service b/net-misc/crossbar/files/crossbar.service new file mode 100644 index 000000000000..915974751f8e --- /dev/null +++ b/net-misc/crossbar/files/crossbar.service @@ -0,0 +1,12 @@ +[Unit] +Description=crossbar wamp router instances +After=local-fs.target network.target + +[Service] +Type=forking +User=crossbar +ExecStart=/usr/bin/crossbar start /var/lib/crossbar +ExecStop=/usr/bin/crossbar stop /var/lib/crossbar + +[Install] +WantedBy=multi-user.target diff --git a/net-misc/crossbar/files/initd b/net-misc/crossbar/files/initd new file mode 100644 index 000000000000..565dfb304aea --- /dev/null +++ b/net-misc/crossbar/files/initd @@ -0,0 +1,35 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +NODE=${RC_SVCNAME:9} + +command=/usr/bin/crossbar +command_args="start --cbdir=${BASEDIR}/${NODE} --logtofile --colour=false --loglevel=${LOGLEVEL}" +command_background=true +description="start crossbar wamp router for ${NODE}" +pidfile="${BASEDIR}/${NODE}/crossbar.pid" + + +depend() { + need net +} + +checkconfig() { + if [ -z "${BASEDIR}" ]; then + eerror "BASEDIR not set" + return 1 + fi + if [ -z "${USERNAME}" ]; then + eerror "USERNAME not set" + return 1 + fi + if [ ! -d "${BASEDIR}" ]; then + eerror "${BASEDIR} is not a directory" + return 1 + fi + if [ ! -e "${BASEDIR}/${NODE}" ]; then + eerror "${BASEDIR} does not contain a ${NODE} sub directory" + return 1 + fi +} diff --git a/net-misc/crossbar/metadata.xml b/net-misc/crossbar/metadata.xml new file mode 100644 index 000000000000..54a0a68272dc --- /dev/null +++ b/net-misc/crossbar/metadata.xml @@ -0,0 +1,25 @@ + + + + + dolsen@gentoo.org + Primary maintainer + + + + Crossbar.io Technologies GmbH + + crossbar + crossbariocrossbar + + + Crossbar.io is an open source networking platform + for distributed and microservice applications. It implements the + open Web Application Messaging Protocol (WAMP), is feature rich, + scalable, robust and secure. Let Crossbar.io take care of the + hard parts of messaging so you can focus on your app's features. + + + include tor services connections support + + -- cgit v1.2.3