From f37ccdf7d18edce66f5a4972266649be53b61350 Mon Sep 17 00:00:00 2001 From: Esteve Varela Colominas Date: Mon, 23 Mar 2026 22:14:01 +0100 Subject: [PATCH] www-servers/copyparty: Bump to 1.20.13 Signed-off-by: Esteve Varela Colominas --- www-servers/copyparty/Manifest | 1 + .../copyparty/copyparty-1.20.13.ebuild | 173 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 www-servers/copyparty/copyparty-1.20.13.ebuild diff --git a/www-servers/copyparty/Manifest b/www-servers/copyparty/Manifest index 8cec588703..f1412292c7 100644 --- a/www-servers/copyparty/Manifest +++ b/www-servers/copyparty/Manifest @@ -1 +1,2 @@ DIST copyparty-1.20.12.tar.gz 1748018 BLAKE2B fc0dac05462ebd502b3056904ee1ad79f996206350e15a42705cfed63a090a9acd49ffb81c68389df25c56d4632031733bb14706a96e404b3f218018c40219b3 SHA512 8668ff9333f83589d307f6cfd9e620a5ab66b8a989eeba1aa60c02fea9b657f01fd9e1919ef3a5c06eda8ebc3641629c7a86edb8fd7bc5d36b624e967c749507 +DIST copyparty-1.20.13.tar.gz 1754176 BLAKE2B b9349a1e849eb72eec61130eeb7ca1b4b7f2e6b0e5991030c3583cba5e62274f4cbbd84c9771f97d9b05c82bdf179e56a6f396596c322d417336744f5a53a727 SHA512 72324c6806d336daff21858821111ddcadd64ba0edbc715ffa56e21a76277de887f11b322a60cfc72aeed539b2e85a05f14f22ef78915f52c8c724596cf65b47 diff --git a/www-servers/copyparty/copyparty-1.20.13.ebuild b/www-servers/copyparty/copyparty-1.20.13.ebuild new file mode 100644 index 0000000000..ca98828558 --- /dev/null +++ b/www-servers/copyparty/copyparty-1.20.13.ebuild @@ -0,0 +1,173 @@ +# Copyright 2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{12..14} ) +DISTUTILS_USE_PEP517=setuptools +inherit distutils-r1 optfeature edo readme.gentoo-r1 + +DESCRIPTION="Easy-to-use, feature-packed, protable file server" +HOMEPAGE="https://github.com/9001/copyparty" + +SRC_URI="https://github.com/9001/copyparty/releases/download/v${PV}/copyparty-${PV}.tar.gz" + +LICENSE="MIT" # TODO: licenses of copyparty/web/deps +SLOT="0" +KEYWORDS="~amd64" +IUSE="test" +RESTRICT="!test? ( test )" + +RDEPEND=" + dev-python/jinja2[${PYTHON_USEDEP}] +" +BDEPEND=" + test? ( + dev-python/jinja2[${PYTHON_USEDEP}] + dev-python/strip-hints + ) +" + +DISABLE_AUTOFORMATTING=y +DOC_CONTENTS="\ +# TODO: This package is unfinished and lacks some features + +- Missing service scripts: +-- OpenRC system service running as different user/group (default to copyparty) +-- Systemd system service running as different user/group (default to copyparty) +-- Systemd user service + +- Existing upstream service scripts: +-- contrib/openrc/copyparty: Hardcodes /usr/local/bin, runs as root, exposes /mnt as RW (!?) +-- contrib/systemd/copyparty.service: Hardcodes /usr/local/bin, runs as root, in /var/lib/copyparty +-- contrib/systemd/copyparty@.service: Runs as an arbitrary user, in /var/lib/copyparty-jail, at boot +-- contrib/systemd/copyparty-user.service: User service, runs in /var/lib/copyparty-jail + +- Default configuration: There's a bunch of examples, find them using: +\`find docs contrib -name '*.conf'\`. +Ideally one of these would be installed as /etc/copyparty.conf, and an +/etc/copyparty.d directory would be created. I'm not sure what would be +acceptable defaults. + +- Jailing the service with prisonparty/bubbleparty: This program is very +feature-packed, and has a decent security track record, but just has a +massive attack surface with serious repercussions. Some packages provide a +'prisonparty' service, which runs the program in a chroot. This script +hardcodes a lot of things that I'm not sure will work on gentoo, and would +need matching openrc/systemd services as well. + +# Note about TLS and certificates + +This program implements TLS natively, in order to be able to access the +WebCrypto API in browsers[1]. + +If you intend to expose it to the internet, it's advised to run it through a +reverse proxy[2], like nginx, in order to have a proper TLS implementation, and +more modern transport features. + +If that's not an option, by default, the https:// URL will use a builtin, +insecure certificate. Install app-crypt/cfssl in order to have it generate a +custom certificate. + +[1]: https://github.com/9001/copyparty/blob/2c26aecd878c185ce358f661d57612f91c21d4b1/copyparty/cert.py#L37-L43 +[2]: https://github.com/9001/copyparty#reverse-proxy + +# Bundled dependency notice + +A few 'web dependencies' are supplied in the copyparty/web/deps directory. +These are mostly things that run in the web browser, such as javascript +libraries, markdown editors, some assets such as fonts, and a sha512 function +implemented in webassembly. + +An attempt at rebuilding these was made, but the scripts required too much +patching and should be adapted upstream to be more easily buildable without +docker. Additionally, it's difficult to package npm dependencies in gentoo. +https://gist.github.com/mid-kid/cc7c0c2e1c188c8b135663d547e3dd35" + +src_prepare() { + # Use a $TMPDIR for testing, not /dev/shm + sed -e 's/\["\/dev\/shm"[^]]*\]/[]/' \ + -i tests/util.py || die + + distutils-r1_src_prepare +} + +python_test() { + edo bash scripts/run-tests.sh python3 +} + +python_install() { + distutils-r1_python_install + + # Reuse the bundled copy of fusepy for partyfuse + # patched in scripts/deps-docker/Dockerfile (under "build fusepy") + sed -e "1a$(printf '%s\\n' \ + 'import copyparty.web.deps.fuse as fuse,sys,os' \ + 'sys.path.append(os.path.dirname(fuse.__file__))' \ + )" -i "${D}$(python_get_scriptdir)/partyfuse" || die + + # Useful utilities listed in bin/README.md + # These need to be executed inside the server's data directory + # Installed into /usr/libexec as not a single other package installs them + python_scriptinto /usr/libexec/copyparty + python_doscript bin/partyjournal.py bin/dbtool.py +} + +src_install() { + distutils-r1_src_install + readme.gentoo_create_doc + + exeinto /etc/user/init.d + newexe "${FILESDIR}/copyparty-user.initd" copyparty + + # Not all of the documentation is useful, but it's hard to filter, + # and plenty of it is quite useful. + dodoc -r docs contrib + + # These additional scripts can be used through command-line flags or + # configuration files, so it makes sense to put them in a predictable + # location. A few of these will require customization, the user should + # copy them to /etc. + insinto /usr/share/copyparty + doins -r bin/handlers bin/hooks bin/mtag + + # Every other package seems to install this, but it needs a service script, + # as well as proper creation of the jail + testing. + #newbin bin/prisonparty.sh prisonparty + + # Bubbleparty seems more reasonable, yet I don't see this included in other + # packages. Would need an optional sys-apps/bubblewrap dependency. + #newbin bin/bubbleparty.sh bubbleparty + + # Skipped tools: + # - bin/partyfuse-streaming.py: Doc tells me this doesn't exist + # - bin/partyfuse2.py: The regular partyfuse.py is better supported + # - bin/unforget.py: Not listed in README.md, questionable utility + # - bin/zmq-recv.py: Not listed in README.md, questionable utility +} + +pkg_postinst() { + # Optfeature descriptions from copyparty/svchub.py:SvcHub._feature_test() + optfeature "sessions and file/media indexing" dev-lang/python[sqlite] + optfeature "image thumbnails (plenty fast)" dev-python/pillow + #optfeature "image thumbnails (faster, eats more ram)" vips # pyvips not packaged (yet) + optfeature "create thumbnails as webp files" dev-python/pillow[webp] + optfeature "transcode audio, create spectrograms, video thumbnails, \ +good-but-slow image thumbnails, read audio/media tags" media-video/ffmpeg + optfeature "read audio tags (ffprobe is better but slower)" media-libs/mutagen + optfeature "secure password hashing (advanced users only)" dev-python/argon2-cffi + optfeature "send zeromq messages from event-hooks" dev-python/pyzmq + optfeature "read .heif images with pillow (rarely useful)" dev-python/pillow-heif + optfeature "read .avif images with pillow (rarely useful)" dev-python/pillow[avif] + #optfeature "read RAW images" rawpy # rawpy not packaged (yet) + + # Optfeatures from pyproject.toml:project.optional-dependencies not listed above + optfeature "sftp protocol support" dev-python/paramiko + optfeature "ftp protocol support" dev-python/pyftpdlib + optfeature "ftps protocol support" "dev-python/pyftpdlib dev-python/pyopenssl" + #optfeature "tftp protocol support" partftpy # partftpy not packaged (yet) + + # Additional programs not detected above + optfeature "automatically generate SSL certificate at startup" app-crypt/cfssl + optfeature "scrypt password hashing" dev-lang/python[ssl] # hashlib.scrypt() +}