Spyke

Replies

Comment on

introducing copyparty, the FOSS file server

Reply in thread

SFTP is not currently on the roadmap, but it's not entirely implausible.

FTPS is supported, but it requires an optional dependency to be installed (pyopenssl), so it's not available in the Windows EXE. And I just realized that the dependency is currently not present inside the docker images either, so I'll get that fixed right away.

Comment on

introducing copyparty, the FOSS file server

Reply in thread

BTRFS and ZFS support real deduplication via copy on write, and would eliminate all current disadvantages of symlink and hardlink deduplication. It just works.

yeah that's a good point, I'll add an option to take advantage of this if you know you're running on a filesystem where that works as intended.

Why have it be one huge python source file?

oh don't worry, it's all separate files during development -- there's a build-stage which bundles everything up into a single file for distribution. But thanks for the concern :D

Comment on

Self-hosting is having a moment. Ethan Sholly knows why.

Reply in thread

It depends who you ask (which we can already tell hehe), but I'd say YES, because you're the one running the show -- you're free to grab all of your bits and pieces at any time, and move to a different provider. That flexibility of not being locked into one specific cloud service (which can suddenly take a bad turn) is what's precious to me.

And on a related note, I also make sure that this applies to my software-stack too -- I'm not running anything that would be annoying to swap out if it turns bad.

Comment on

introducing copyparty, the FOSS file server

Reply in thread

No worries, good question :>

The problem with bidirectional filesync is that it's an absolutely massive can of worms, very easy to mess up, and the consequences of messing up are usually the worst kind (loss of data). There's an insane amount of edgecases to keep in mind, and you need to get every edgecase right every single time, otherwise you might wipe someone's vacation photos, or suddenly downgrade someone's keepass database to an older version... And stuff like syncing multiple devices to the same server makes it balloon further.

I've started becoming more confident in copyparty's filesystem-index database, but it's still just a hint/guideline, with the filesystem being the only source of truth -- it's still not something I'd trust with tracking sync-state against one or more clients.

The bigger guys who offer bidirectional sync (nextcloud, syncthing, etc.) have spent years perfecting their logic, so I'd like to leave this in their capable hands.

Comment on

introducing copyparty, the FOSS file server

Reply in thread

sooo this is one of the things that started with someone saying "wouldn't it be funny if..."

if you open copyparty-sfx.py in a text editor, you'll see how -- but please make sure to use an editor which is able to handle about 600 KiB of comments which contain invalid utf8 / binary garbage 😁

I ended up rolling my own packer since I wanted optimal encoding efficiency, and everything I could find would do stuff like base85 or ucs2 tricks, but it turns out python is perfectly happy with binary garbage in comments if you declare that the file is latin-1 so it realizes all hope is lost :D

the only drawback of the sfx.py is that it needs to extract to $TEMP before running, so that's the slight advantage of the zipapp (the .pyz alternative), but that suffers from some performance reduction in return, and is more hermetic (doesn't let you swap out the bundled dependencies with fresh versions as easily if necessary)

Comment on

introducing copyparty, the FOSS file server

Reply in thread

If all you need is basic remote file storage such as a samba server, and especially if you need samba in particular, then your current solution is probably a better fit for you.

Copyparty's main selling points is the large number of features in one package, and being pretty good at receiving file uploads (usually faster than other alternatives), but it does not have good samba support. Instead of samba, copyparty has WebDAV support, so you can still connect to it from your file manager -- but the performance will be different; depending on your access pattern and the type of files, it could be faster or slower than samba.

Comment on

introducing copyparty, the FOSS file server

Reply in thread

Yep! Depending on what your home connection looks like, you have a few options:

if you are lucky enough to have your own private IP-address and are able to open ports, then you're almost done already -- you can put copyparty on some port (or keep the default 3923), and then anyone could connect to it by going to https://your.ip.address:3923/

(with this approach, you will want to create your own HTTPS certificate so the traffic is properly encrypted -- the best option here is to get a domain and get a certificate for the domain)

however, if you are behind CGNAT, meaning your internet provider has given you a shared IP-address, then people cannot connect directly to your home-PC. One way around that issue is by setting up a machine somewhere on the internet which bridges the gap back home to your PC. Cloudflare offers this as service, and this is explained in the copyparty readme -- see the "at home" section for one way to do that.

if you are against using Cloudflare for idealistic reasons (they are becoming quite powerful since they run a whole lot of the internet), then you can set up a cheap VPS which serves the same purpose. That's my setup, and how you are accessing the copyparty demo server right now -- I have the cheapest VPS you can get from Hetzner. The VPS is running nginx, and it forwards the traffic to my homeserver through an SSH tunnel. I haven't documented this approach in the copyparty readme, but I have a feeling a lot of other people have :>

Comment on

Suggestions - App to Transfer Files Between Mobile Devices

I've been making copyparty, and one of the initial inspirations/usecases was exactly this one -- bunch of internet-friends meeting in meatspace for some event, and needing to stream across pics/vids before we split up and maybe never meet again :-)

You can run the server on android using termux; see the instructions in the readme for the installation part, and then run the server like so: copyparty -e2ds --qr -v /storage/emulated/0/Pictures/from-family/::w

it will show a QR-code which you can scan from the other device to start uploading, and the folder is shared write-only (:w instead of :rw), so nobody can download anything. And it keeps track of which files have already been transferred, so the client will skip across dupes without reuploading them, and also resume interrupted uploads automatically.

Tried sending 340 photos (1.21 GiB) from an old iPhone to an android hotspot just now; I turned off the iPhone screen as soon as it started sending, and it finished in 41 seconds, so around 30 MiB/s? Maybe there are faster alternatives... But my javascript should be fairly resilient and recover from network glitches and such, so uploading from safari like this should be fine.

Comment on

Suggestion request: Self-hosted app for shared directories like google drive

Mind if I suggest my own software, copyparty?

Regarding authentication, someone who has an account (in this case just yourself) can create password-protected shares which other people can browse, or upload, or browse+upload to (configurable when creating the share).

There is WebDAV support, and it should integrate well enough with shares, but I haven't tested that specifically.

It has photo and video thumbnails, and a basic image-viewer, and with some elbow-grease it can also show exif-tags (gps-coordinates etc).

There is also optional file dedup, so if two people upload the same file, it'll detect and skip that during the 2nd upload (doesn't waste any bandwidth) and swap out the new file with a symlink to the existing one. Default disabled to avoid surprising someone with symlinks.

I think the following command would be enough to get you started:

wget https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py
python3 copyparty-sfx.py -a sintan:yourpassword -v .::A,sintan --shr=/shr -e2dsa -e2ts

but since that's entirely unreadable, you can do it with a config file instead,

[global]
  e2dsa  # enable filesystem indexing 
  e2ts  # enable media indexing (music tags)
  shr: /shr  # enable shares under this url

[accounts]
  sintan: yourpassword 

[/]  # create a volume at this url
  /srv/share/partypics  # the filesystem path to share
  accs:
    sintan: A  # give sintan read-write-move-delete-admin

and use it like this:

python3 copyparty-sfx.py -c the.conf

there's another example here and here for inspiration.

Comment on

introducing copyparty, the FOSS file server

Reply in thread

so uhh, sorry for the late response to this -- was going to reply much earlier, but then suddenly it became more timely than ever...

the good news is, I'm fairly confident in how it handles the filesystem and permissions, preventing unauthorized access to files.

but the part I'm a bit less sure about is sanitizing user data; the kind of vulnerabilities where someone uploads a malicious file and bad stuff happens if you then open that file in a certain way, or someone sends you a malicious link and trick you into clicking it -- in other words, the kind of vulnerabilities which require the attacker to have a certain level of access already, or that requires tricking you into doing something.

...and with version 1.18.5 released just now, we got a prime example of exactly one of those. Really unfortunate timing, but it's a blessing to have so many new and curious eyes on it to spot these sooner rather than later. It is what it is.