Installation on Raspberry pi


#1

Hello all, I have just discovered funkwhale and I have to say that it look really promising.
After reading in the documentation about some users running it on RPi I have spent a few hours trying to make it work - following the debian instructions and I have overcome a few pip dependency issues but I’m getting blocked at the migration step.
At this point I’d like to ask if there are specific instructions for RPi (I haven’t been able to find anything) and if any of the docker images would work for me (I presume it won’t!)

Cheers!


#2

Hello @parpel!

As you guessed, there is no docker image available for ARM platforms yet. We have an open issue with instructions on how to build your own if you want to give it a try: https://code.eliotberriot.com/funkwhale/funkwhale/issues/568. Otherwise, you can still use the non-docker installation instruction.

Don’t hesitate to share specific error logs for your migration issue, it will be easier to help you :slight_smile:


#3

hi @eliotberriot

I have managed to install it with no issues :slight_smile:
My current plan is to play around with funkwhale being available in my local network and it doesn’t seem to be working for now.
Could you point me to the settings to for serving it to the local network only?

thanks!


#4

It’s all up and running and I can access it now, I have even set it up to be accessed from my own domain. However I have a few questions:

  • I am not sure how to add users. The closest info in the documentation is about user permissions. The funkwhale’s login/register UI could be what I’m looking for but there is this default message “Registration are closed on this instance, you will need an invitation code to signup.”
    update: I can actually login with a user I created during the install (otherwise it would not allow me to access the “browse library” section) though the login/create account options are still there.
  • Adding music via cli following the example with the symlink in the documentation throws a “manage.py import_files: error: the following arguments are required: path”
  • The interface work flawlessly but the artist, playlists and radios tab there are elements that keep loading with the loading animation. What can I do to investigate / fix this?

thanks!
Update: I’ve been checking the logs and the frontend gets a bunch of 500 responses from the API


#5

Cool, it’s great to know that there is progress on your side!

Yeah, this is a setting you can enable in your instance settings (there is a link for that in the sidebar, the url is /manage/settings), it’s named “Open registration to new users” which is disabled by default. If you do that, registrations will be open to anyone, which may or may not be what you want. The other alternative is to leave the registration closed, but to provide invitation code (in /manage/users/invitations) to specific users so they can register :slight_smile:

Are you providing the library ID as the first argument for that command, as described here? You’ll have to create a library first ine the web UI (/content/libraries/).

Feel free to share the error logs so we can troubleshot that :slight_smile:


#6

here’s what I get from the API and what it’s likely causing the issue:
Nov 18 10:18:13 raspberrypi daphne[596]: backend=crypto_default_backend(), public_exponent=65537, key_size=size
Nov 18 10:18:13 raspberrypi daphne[596]: File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py”, line 119, in generate_pri
Nov 18 10:18:13 raspberrypi daphne[596]: return backend.generate_rsa_private_key(public_exponent, key_size)
Nov 18 10:18:13 raspberrypi daphne[596]: File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py”, line 374, in generate_rsa_
Nov 18 10:18:13 raspberrypi daphne[596]: self.openssl_assert(res == 1)
Nov 18 10:18:13 raspberrypi daphne[596]: File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py”, line 115, in openssl_asser
Nov 18 10:18:13 raspberrypi daphne[596]: return binding._openssl_assert(self._lib, ok)
Nov 18 10:18:13 raspberrypi daphne[596]: File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/cryptography/hazmat/bindings/openssl/binding.py”, line 77, in _openssl_asser
Nov 18 10:18:13 raspberrypi daphne[596]: errors_with_text
Nov 18 10:18:13 raspberrypi daphne[596]: cryptography.exceptions.InternalError: Unknown OpenSSL error. This error is commonly encountered when another library is not cleaning up t
lines 1-11/11 (END)

The frontend gets a bunch of error responses from the api, here’s what it logs when I load the library page:
GET https://host.info/api/v1/users/users/me/ 500
[default] Error while fetching user profile
GET https://host.info/api/v1/artists/?ordering=-creation_date&playable=true 500
Uncaught (in promise) Error: Request failed with status code 500
GET https://host.info/api/v1/history/listenings/?scope=user&ordering=-creation_date&page_size=5 500
GET https://host.info/api/v1/favorites/tracks/?scope=user&ordering=-creation_date&page_size=5 500
GET https://host.info/api/v1/playlists/?scope=user&playable=true&ordering=-creation_date&page_size=3 500
GET https://host.info/api/v1/albums/?playable=true&ordering=-creation_date&page_size=12 500

Another update:
I’ve been trying to find out what’s wrong with no luck though I’ve changed the FUNKWHALE_PROTOCOL env from https to http and it seems to be fine now - no API errors and no more error responses from the API.


#7

Looking for help…think it maybe a permissions issue.

I am folllwing the instructions on howto install funkwhale using the debian method. I am using a rpi zero with raspbian stretch.

Installed dependencies…ok (reddis, postgres)

Under Python dependencies…

when i execute the following - ‘pip install -r api/requirements.txt’

I get this error…

Collecting olefile (from Pillow<4.4,>=4.3->-r api/requirements/base.txt (line 9))
Exception:
Traceback (most recent call last):
File “/srv/funkwhale/virtualenv/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py”, line 594, in urlopen
chunked=chunked)
File “/srv/funkwhale/virtualenv/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py”, line 391, in _make_request
six.raise_from(e, None)
File “”, line 2, in raise_from
File “/srv/funkwhale/virtualenv/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py”, line 387, in _make_request
httplib_response = conn.getresponse()
File “/usr/lib/python3.5/http/client.py”, line 1198, in getresponse
response.begin()
File “/usr/lib/python3.5/http/client.py”, line 297, in begin
version, status, reason = self._read_status()
File “/usr/lib/python3.5/http/client.py”, line 266, in _read_status
raise RemoteDisconnected(“Remote end closed connection without”
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/basecommand.py”, line 215, in main
status = self.run(options, args)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/commands/install.py”, line 353, in run
wb.build(autobuilding=True)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/wheel.py”, line 749, in build
self.requirement_set.prepare_files(self.finder)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/req/req_set.py”, line 380, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/req/req_set.py”, line 554, in _prepare_file
require_hashes
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/req/req_install.py”, line 278, in populate_link
self.link = finder.find_requirement(self, upgrade)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/index.py”, line 465, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/index.py”, line 423, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/index.py”, line 568, in _get_pages
page = self._get_page(location)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/index.py”, line 683, in _get_page
return HTMLPage.get_page(link, session=self.session)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/index.py”, line 792, in get_page
“Cache-Control”: “max-age=600”,
File “/srv/funkwhale/virtualenv/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py”, line 501, in get
return self.request(‘GET’, url, **kwargs)
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/pip/download.py”, line 386, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File “/srv/funkwhale/virtualenv/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py”, line 488, in request
resp = self.send(prep, **send_kwargs)
File “/srv/funkwhale/virtualenv/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py”, line 609, in send
r = adapter.send(request, **kwargs)
File “/srv/funkwhale/virtualenv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py”, line 47, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File “/srv/funkwhale/virtualenv/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/adapters.py”, line 423, in send
timeout=timeout
File “/srv/funkwhale/virtualenv/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py”, line 643, in urlopen
_stacktrace=sys.exc_info()[2])
File “/srv/funkwhale/virtualenv/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py”, line 315, in increment
total -= 1
TypeError: unsupported operand type(s) for -=: ‘Retry’ and ‘int’


#8

Ok, thank you for the update!


#9

It looks very much like a network error, does it happens again if you retry?


#10

Eliot,

Ran it again and completed ok…

When i run

python api/manage.py migrate

I get this error…

(virtualenv) [email protected]_196:~ $ python api/manage.py migrate
Operations to perform:
Apply all migrations: account, admin, auth, authtoken, common, contenttypes, dynamic_preferences, favorites, federation, history, music, playlists, radios, requests, sessions, sites, socialaccount, taggit, users
Running migrations:
Applying contenttypes.0001_initial… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0001_initial… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying users.0001_initial… OK
Applying account.0001_initial… OK
Applying account.0002_email_max_length… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying authtoken.0001_initial… OK
Applying authtoken.0002_auto_20160226_1747… OK
Applying common.0001_initial…Traceback (most recent call last):
File “/srv/funkwhale/virtualenv/lib/python3.5/site-packages/django/db/backends/utils.py”, line 85, in _execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: permission denied to create extension “unaccent”
HINT: Must be superuser to create this extension.

I have completed the Database setup (PostgreSQL) …


#11

I notice when I run this command

sudo -u postgres psql funkwhale -c ‘CREATE EXTENSION “unaccent”;’
it leaves me in this psql prompt “funkwhale->”
I executed “/q” to quit psql


#12

I got over this problem by logging into psql as postgres and giving funkwhale SUPERUSER permissions

sudo -u postgres -H psql

ALTER ROLE funkwhale SUPERUSER;

Did I miss that in the documentation? Or did I stuff up some step?


#13

yes it does. No idea of how to fix it though.
What are the implications of running it with http? I understand nginx is actually serving it via https?


#18

Hey @dmurphydrtc , I’d recommend opening separate threads for your issues, as it become quite unreadable here: we have 2 different problems and conversations mixed together which make it impossible to follow them properly.

I’ll answer to @parpel in this thread, can you please open a separate one for yours?


#19

Sorry for the delay. Running in HTTP mode is indeed not recommended and will likely cause issues. I still don’t understand what caused the original stack trace though.

Can you please share the content of your .env file (minus the secrets)?


#20

Hey @eliotberriot thanks for your you support, I seem to be rubberducking every time I post here haha
The error seems to be fixed, I have connected the RPi to another network, set the settings back to https and it was fine, I reconnected it to my network while keeping the settings and it’s running fine!

I have found a couple of issues when importing music though:

  • When I run the import command through the root of my music folder (>50gb!) and there seems to be a number of folders and songs (about 200) that always get scanned through and imported. New music is detected, but even if I’ve added a singe song the files I mentioned before will be processed.
  • A few times the importing process has suddenly stopped with a ‘killed’ message. When this happens it stops at the exact same point and it’s happened when importing a big number of files in mp3 and a single folder with ogg files.

Perhaps I should add these as issues in the project’s repo.

PD. I’ll be setting up the dev environment soon to see if I can contribute :slight_smile:


#21

Rubberducking is great :slight_smile:

Do you mean the CLI is not considering the files as already processed and launching imports for those? If yes, it is indeed a bug.

Interesting! You can probably open an issue for this one as well, Id be interested in the logs, and also of the memory usage of your machine during the process (is it killed because OOM?)

Wonderful, let me know if you need any help!