sweisgerber / mopiroom

Mopidy Multiroom Setup that just works
1 stars 1 forks source link

PIP Installation fails "externally managed-environment #1

Open hackbardc opened 2 months ago

hackbardc commented 2 months ago

Heyho!

I'm using the mopiroom setup with the latest images and have some problems installing PIP extensions. Using the docker-compose and updating to the latest tag I get an error

error: externally-managed-environment

× This environment is externally managed

I checked the dockerfile and saw "Forced pip install into system folders as quickfix"

I guess the pip install (with pip_install env and in dockerfile) is not working anymore

Any workarround or info I'm missing?

I know arround the pip situation are different solutions but I couldn't figure it out.

Kind Regards and thx for any hints,

hb

sweisgerber commented 2 months ago

Does mopidy or snapcast use issue this error? Did you try the env variable: INSTALL_PIP_PACKAGES= as documented here:

https://github.com/linuxserver/docker-mods/tree/universal-package-install

and used in the docker compose here:

https://github.com/sweisgerber/mopiroom/blob/53969ff9b32d24767d66a7cd4603d10438cbaad0/docker-compose.yml#L16

sweisgerber commented 2 months ago

I updated with the current upstream base images from linuxserver.io, could you try again?

hackbardc commented 2 months ago

Hey, thanks for coming back so quickly. I think I got some configuration errors in my first try. I started again and added my changes in the configs but the Packages from INSTALL_PIP_PACKAGES are not installed Hope I'm not missing something, also tried the docker-compose without unneeded changes with the same result.

docker-compose

services:
  mopidy:
    container_name: mopidy
    image: docker.io/sweisgerber/mopidy:latest
    hostname: mopidy
    environment:
      - TZ=Europe/Berlin
      - DOCKER_MODS=linuxserver/mods:universal-package-install
      - INSTALL_PIP_PACKAGES=Mopidy-YTMusic|Mopidy-YouTube|yt-dlp|Mopidy-SoundCloud|Mopidy-ALSAMixer
    restart: "unless-stopped"
    ports:
    devices:
    volumes:
      - ./config/mopidy/:/config/
      - ./data/mopidy/:/data/
      - /var/media/sda1-usb-USB_SanDisk_3.2G:/music:ro
  snapcast:
    container_name: snapcast
    image: docker.io/sweisgerber/snapcast:latest
    hostname: snapcast
    environment:
      - TZ=Europe/Berlin
    restart: "unless-stopped"
    ports:
    devices:
    volumes:
      - ./config/snapcast/:/config/
      - ./data/snapcast/:/data/
      - ./data/audio/:/audio/

mopidy.conf

[core]
cache_dir = /data/cache
config_dir = /config
data_dir = /data/mopidy
max_tracklist_length = 10000
restore_state = true
[logging]
verbosity = 0
format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n  %(message)s
color = true
config_file =
[audio]
output = alsasink device=hw:2,0
[m3u]
enabled = true
base_dir = /music
default_encoding = utf-8
default_extension = .m3u
playlists_dir = /data/playlists
[proxy]
scheme =
hostname =
port =
username =
password =
[softwaremixer]
enabled = true
[http]
enabled = true
hostname = 0.0.0.0
port = 6680
csrf_protection = false
allowed_origins=192.168.1.9,room5
default_app = iris
[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
max_connections = 20
connection_timeout = 60
[scrobbler]
enabled = false
username =
password =
[bandcamp]
enabled = false
identity =
[file]
enabled = true
media_dirs = /music
excluded_file_extensions =
  .directory
  .html
  .jpeg
  .jpg
  .log
  .nfo
  .pdf
  .png
  .txt
  .zip
show_dotfiles = false
follow_symlinks = false
metadata_timeout = 1000
[jellyfin]
enabled = false
hostname =
username =
libraries =
albumartistsort = True
[local]
enabled = true
media_dir = /music
directories =
    Albums                  local:directory?type=album
    Artists                 local:directory?type=artist
    Composers               local:directory?type=artist&role=composer
    Genres                  local:directory?type=genre
    Performers              local:directory?type=artist&role=performer
    Release Years           local:directory?type=date&format=%25Y
    Tracks                  local:directory?type=track
    Last Week Updates       local:directory?max-age=604800
    Last Month Updates      local:directory?max-age=2592000
    Last Month Albums       local:directory?type=album&max-age=2592000
max_search_results = 100
scan_timeout = 1000
scan_flush_threshold = 1000
album_art_files = *.jpg, *.jpeg, *.png
excluded_file_extensions =
  .bak
  .backup
  .cue
  .db
  .directory
  .html
  .gif
  .ini
  .jpeg
  .jpg
  .log
  .m3u
  .m3u8
  .md
  .nfo
  .old
  .pdf
  .png
  .sfv
  .srt
  .txt
  .zip
[podcast]
enabled = false
browse_root = https://news.bbc.co.uk/rss/newsonline_world_edition/feeds.opml
browse_order = desc
lookup_order = asc
cache_size = 64
cache_ttl = 86400
timeout = 10
[somafm]
enabled = false
dj_as_artist = false
encoding = aac
quality = highest
[spotify]
enabled = false
username =
password =
client_id =
client_secret =
bitrate = 160
timeout = 10
cache_dir = /data/spotify
[subidy]
enabled = false
url =
username =
password =
[youtube]
enabled = true
youtube_dl_package = yt_dlp
[soundcloud]
auth_token = ********
[iris]
enabled = true
country = de
locale = en_US
data_dir = /data/iris
snapcast_enabled = true
snapcast_host = snapcast
snapcast_port = 1780
snapcast_stream = Mopidy

mopidy logs

[mod-init] Running Docker Modification Logic
[mod-init] Adding linuxserver/mods:universal-package-install to container
[mod-init] (ERROR) linuxserver/mods:universal-package-install digest could not be fetched from lscr.io
[migrations] started
[migrations] no migrations found
usermod: no changes
───────────────────────────────────────
  _____ __ __ _____ _____ _____ _____ 
 |     |  |  |   __|_   _|     |     |
 |   --|  |  |__   | | | |  |  | | | |
 |_____|_____|_____| |_| |_____|_|_|_|
       _____ __ __ _ __    ____  
      | __  |  |  | |  |  |    \ 
      | __ -|  |  | |  |__|  |  |
      |_____|_____|_|_____|____/ 

  Based on images from linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    911
User GID:    911
───────────────────────────────────────
find: ‘/root/.cache/dconf’: No such file or directory
**** Permissions could not be set. This is probably because your volume mounts are remote or read-only. ****
**** The app may not work properly and we will not provide support for it. ****
[custom-init] No custom files found, skipping...
INFO     2024-09-11 17:34:27,521 [163:MainThread] mopidy.__main__
  Starting Mopidy 3.4.2
INFO     2024-09-11 17:34:27,580 [163:MainThread] mopidy.config
  Loading config from builtin defaults
INFO     2024-09-11 17:34:27,586 [163:MainThread] mopidy.config
  Loading config from file:///config/mopidy.conf
INFO     2024-09-11 17:34:27,589 [163:MainThread] mopidy.config
  Loading config from command line options
WARNING  2024-09-11 17:34:27,601 [163:MainThread] mopidy.config
  Ignoring config section 'soundcloud' because no matching extension was found
WARNING  2024-09-11 17:34:27,601 [163:MainThread] mopidy.config
  Ignoring config section 'youtube' because no matching extension was found
INFO     2024-09-11 17:34:27,987 [163:MainThread] mopidy.__main__
  Enabled extensions: local, iris, mpd, http, softwaremixer, file, stream, m3u
INFO     2024-09-11 17:34:27,987 [163:MainThread] mopidy.__main__
  Disabled extensions: subidy, spotify, jellyfin, somafm, bandcamp, podcast, scrobbler
INFO     2024-09-11 17:34:28,246 [163:MainThread] mopidy.commands
  Starting Mopidy mixer: SoftwareMixer
INFO     2024-09-11 17:34:28,250 [163:MainThread] mopidy.commands
  Starting Mopidy audio
INFO     2024-09-11 17:34:28,253 [163:MainThread] mopidy.commands
  Starting Mopidy backends: FileBackend, M3UBackend, StreamBackend, LocalBackend
INFO     2024-09-11 17:34:28,285 [163:Audio-2 (_actor_loop)] mopidy.audio.actor
  Audio output set to "alsasink device=hw:2,0"
INFO     2024-09-11 17:34:28,302 [163:MainThread] mopidy.commands
  Starting Mopidy core
INFO     2024-09-11 17:34:28,316 [163:Core-7 (_actor_loop)] mopidy.core.actor
  Loading state from /data/mopidy/core/state.json.gz
INFO     2024-09-11 17:34:28,321 [163:MainThread] mopidy.commands
  Starting Mopidy frontends: HttpFrontend, IrisFrontend, MpdFrontend
INFO     2024-09-11 17:34:28,324 [163:HttpFrontend-9 (_actor_loop)] mopidy.http.actor
  HTTP server running at [::ffff:0.0.0.0]:6680
INFO     2024-09-11 17:34:28,325 [163:IrisFrontend-10 (_actor_loop)] mopidy_iris.core
  Starting Iris 3.69.3
WARNING  2024-09-11 17:34:28,328 [163:HttpServer] mopidy.http.handlers
  HTTP Cross-Site Request Forgery protection is disabled
INFO     2024-09-11 17:34:28,330 [163:MainThread] mopidy_mpd.actor
  MPD server running at [::ffff:0.0.0.0]:6600
INFO     2024-09-11 17:34:28,334 [163:MainThread] mopidy.commands
  Starting GLib mainloop
INFO     2024-09-11 17:34:28,637 [163:MpdSession-12 (_actor_loop)] mopidy_mpd.session
  New MPD connection from [::ffff:172.23.0.1]:37098
Connection to localhost (127.0.0.1) 6680 port [tcp/*] succeeded!
[ls.io-init] done.

I'm still not sure if its only a me (config) error O_o

Kind Regards, hb

hackbardc commented 2 months ago

I added

DOCKER_MODS_DEBUG=true

not much more infos

room5:~/docker/snapidy # docker logs mopidy -f
[mod-init] Running Docker Modification Logic
[mod-init] (DEBUG) Running in debug mode
[mod-init] (DEBUG) Mod script version 3.20240626
[mod-init] (DEBUG) Registry='lscr.io', Repository='linuxserver', Image='linuxserver/mods', Tag='universal-package-install'
[mod-init] Adding linuxserver/mods:universal-package-install to container
[mod-init] (DEBUG) Using https://ghcr.io/token?scope=repository%3Alinuxserver%2Fmods%3Apull as auth endpoint
[mod-init] (DEBUG) Arch detected as arm64
[mod-init] (DEBUG) Mod only has a single arch manifest
[mod-init] (ERROR) linuxserver/mods:universal-package-install digest could not be fetched from lscr.io
[migrations] started
[migrations] no migrations found
usermod: no changes
───────────────────────────────────────
  _____ __ __ _____ _____ _____ _____ 
 |     |  |  |   __|_   _|     |     |
 |   --|  |  |__   | | | |  |  | | | |
 |_____|_____|_____| |_| |_____|_|_|_|
       _____ __ __ _ __    ____  
      | __  |  |  | |  |  |    \ 
      | __ -|  |  | |  |__|  |  |
      |_____|_____|_|_____|____/ 

  Based on images from linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    911
User GID:    911
───────────────────────────────────────
[pkg-install-init] (DEBUG) Package install script version 1.20240608
[pkg-install-init] (DEBUG) No pip packages defined for install, skipping.
[pkg-install-init] (DEBUG) No os packages defined for install, skipping.
[pkg-install-init] (DEBUG) Deleting temporary install lists for os and pip packages.
find: ‘/root/.cache/dconf’: No such file or directory
**** Permissions could not be set. This is probably because your volume mounts are remote or read-only. ****
sweisgerber commented 2 months ago

When executing your started compose.yml, it worked flawlessly for me after removing your undefined ports & devices lines. Be sure to pull the lastest images from my repo.

[+] Running 12/12
 ✔ snapcast Pulled                                                                                                                                                                                              5.5s 
   ✔ 7bca1d11437f Pull complete                                                                                                                                                                                 0.9s 
   ✔ df25a931801a Pull complete                                                                                                                                                                                 1.0s 
   ✔ 5dbb5cc4e4d2 Pull complete                                                                                                                                                                                 1.2s 
   ✔ e145bc685c96 Pull complete                                                                                                                                                                                 1.3s 
   ✔ 7031fa13443e Pull complete                                                                                                                                                                                 1.7s 
   ✔ 726f26e54d0f Pull complete                                                                                                                                                                                 1.9s 
   ✔ 95258b662306 Pull complete                                                                                                                                                                                 3.4s 
   ✔ 16a7801c5903 Pull complete                                                                                                                                                                                 3.5s 
 ✔ mopidy Pulled                                                                                                                                                                                               16.3s 
   ✔ 4447e30a3c45 Pull complete                                                                                                                                                                                14.0s 
   ✔ b410d5d03d48 Pull complete                                                                                                                                                                                14.2s 
[+] Running 3/3
 ✔ Network mopidy-github_default  Created                                                                                                                                                                       0.1s 
 ✔ Container snapcast             Created                                                                                                                                                                       0.2s 
 ✔ Container mopidy               Created                                                                                                                                                                       0.2s 
Attaching to mopidy, snapcast
mopidy    | [mod-init] Running Docker Modification Logic
snapcast  | [migrations] started
snapcast  | [migrations] no migrations found
snapcast  | usermod: no changes
snapcast  | ───────────────────────────────────────
snapcast  |   _____ __ __ _____ _____ _____ _____ 
snapcast  |  |     |  |  |   __|_   _|     |     |
snapcast  |  |   --|  |  |__   | | | |  |  | | | |
snapcast  |  |_____|_____|_____| |_| |_____|_|_|_|
snapcast  |        _____ __ __ _ __    ____  
snapcast  |       | __  |  |  | |  |  |    \ 
snapcast  |       | __ -|  |  | |  |__|  |  |
snapcast  |       |_____|_____|_|_____|____/ 
snapcast  | 
snapcast  |   Based on images from linuxserver.io
snapcast  | ───────────────────────────────────────
snapcast  | 
snapcast  | To support LSIO projects visit:
snapcast  | https://www.linuxserver.io/donate/
snapcast  | 
snapcast  | ───────────────────────────────────────
snapcast  | GID/UID
snapcast  | ───────────────────────────────────────
snapcast  | 
snapcast  | User UID:    911
snapcast  | User GID:    911
snapcast  | ───────────────────────────────────────
snapcast  | Not starting snapclient. Set 'START_SNAPCLIENT=true' to start it.
snapcast  | [custom-init] No custom files found, skipping...
snapcast  | 2024-09-17 09-50-07.371 [Info] (Snapserver) Version 0.29.0
snapcast  | 2024-09-17 09-50-07.371 [Info] (Snapserver) Adding source: librespot://librespot?name=LibreSpot&bitrate=320&sampleformat=44100:16:2
snapcast  | 2024-09-17 09-50-07.371 [Info] (Snapserver) Adding source: pipe:////audio/snapcast_fifo?name=Mopidy
snapcast  | 2024-09-17 09-50-07.371 [Notice] (init) Settings file: "/data/server.json"
snapcast  | 2024-09-17 09-50-07.371 [Error] (Avahi) Failed to create client: Daemon not running
snapcast  | 2024-09-17 09-50-07.371 [Info] (Snapserver) Using HTTP host name: snapcast
snapcast  | 2024-09-17 09-50-07.371 [Info] (PcmStream) PcmStream: LibreSpot, sampleFormat: 44100:16:2
snapcast  | 2024-09-17 09-50-07.372 [Info] (Server) Stream: {"fragment":"","host":"librespot","path":"","query":{"bitrate":"320","chunk_ms":"20","codec":"pcm","name":"LibreSpot","sampleformat":"44100:16:2"},"raw":"librespot://librespot/?bitrate=320&chunk_ms=20&codec=pcm&name=LibreSpot&sampleformat=44100:16:2","scheme":"librespot"}
snapcast  | 2024-09-17 09-50-07.372 [Info] (PcmStream) PcmStream: Mopidy, sampleFormat: 48000:16:2
snapcast  | 2024-09-17 09-50-07.372 [Info] (PipeStream) PipeStream mode: create
snapcast  | 2024-09-17 09-50-07.372 [Info] (Server) Stream: {"fragment":"","host":"","path":"//audio/snapcast_fifo","query":{"chunk_ms":"20","codec":"pcm","name":"Mopidy","sampleformat":"48000:16:2"},"raw":"pipe://///audio/snapcast_fifo?chunk_ms=20&codec=pcm&name=Mopidy&sampleformat=48000:16:2","scheme":"pipe"}
snapcast  | 2024-09-17 09-50-07.372 [Info] (PcmEnc) Init
snapcast  | 2024-09-17 09-50-07.377 [Info] (Watchdog) Starting watchdog, timeout: 7800s
snapcast  | 2024-09-17 09-50-07.377 [Info] (PcmEnc) Init
snapcast  | 2024-09-17 09-50-07.377 [Info] (ControlServer) Creating TCP acceptor for address: 0.0.0.0, port: 1705
snapcast  | 2024-09-17 09-50-07.377 [Info] (ControlServer) Creating HTTP acceptor for address: 0.0.0.0, port: 1780
snapcast  | 2024-09-17 09-50-07.377 [Info] (StreamServer) Creating stream acceptor for address: 0.0.0.0, port: 1704
snapcast  | 2024-09-17 09-50-07.377 [Info] (Snapserver) Number of threads: 4, hw threads: 12
snapcast  | 2024-09-17 09-50-07.377 [Error] (AsioStream) Error reading message: End of file, length: 0, ec: asio.misc:2
snapcast  | 2024-09-17 09-50-07.378 [Notice] (ControlServer) ControlServer::NewConnection: 127.0.0.1
snapcast  | Connection to localhost (127.0.0.1) 1780 port [tcp/*] succeeded!
snapcast  | 2024-09-17 09-50-07.378 [Info] (librespot) librespot 0.4.2 UNKNOWN (Built on 2023-08-01, Build ID: 1690865570, Profile: release)
snapcast  | 2024-09-17 09-50-07.379 [Warn] (libmdns) Failed to register IPv6 receiver: Os { code: 19, kind: Uncategorized, message: "No such device" }
mopidy    | [mod-init] Adding linuxserver/mods:universal-package-install to container
snapcast  | 2024-09-17 09-50-07.498 [Info] (AsioStream) No data since 120 ms, switching to idle
mopidy    | [mod-init] Downloading linuxserver/mods:universal-package-install from lscr.io
mopidy    | [mod-init] Installing linuxserver/mods:universal-package-install
mopidy    | [mod-init] linuxserver/mods:universal-package-install applied to container
mopidy    | [migrations] started
mopidy    | [migrations] no migrations found
mopidy    | usermod: no changes
mopidy    | ───────────────────────────────────────
mopidy    |   _____ __ __ _____ _____ _____ _____ 
mopidy    |  |     |  |  |   __|_   _|     |     |
mopidy    |  |   --|  |  |__   | | | |  |  | | | |
mopidy    |  |_____|_____|_____| |_| |_____|_|_|_|
mopidy    |        _____ __ __ _ __    ____  
mopidy    |       | __  |  |  | |  |  |    \ 
mopidy    |       | __ -|  |  | |  |__|  |  |
mopidy    |       |_____|_____|_|_____|____/ 
mopidy    | 
mopidy    |   Based on images from linuxserver.io
mopidy    | ───────────────────────────────────────
mopidy    | 
mopidy    | To support LSIO projects visit:
mopidy    | https://www.linuxserver.io/donate/
mopidy    | 
mopidy    | ───────────────────────────────────────
mopidy    | GID/UID
mopidy    | ───────────────────────────────────────
mopidy    | 
mopidy    | User UID:    911
mopidy    | User GID:    911
mopidy    | ───────────────────────────────────────
mopidy    | **** Adding Mopidy-YTMusic to pip install list ****
mopidy    | **** Adding Mopidy-YouTube to pip install list ****
mopidy    | **** Adding yt-dlp to pip install list ****
mopidy    | **** Adding Mopidy-SoundCloud to pip install list ****
mopidy    | **** Adding Mopidy-ALSAMixer to pip install list ****
mopidy    | find: ‘/root/.cache/dconf’: No such file or directory
mopidy    | **** Permissions could not be set. This is probably because your volume mounts are remote or read-only. ****
mopidy    | **** The app may not work properly and we will not provide support for it. ****
mopidy    | [pkg-install-init] **** Installing all mod packages ****
mopidy    | fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
mopidy    | fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
mopidy    | fetch http://nl.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
mopidy    | WARNING: Permanently redirected to https://nl.alpinelinux.org:443/alpine/edge/testing/x86_64/APKINDEX.tar.gz
mopidy    | (1/1) Installing python3-dev (3.12.6-r0)
mopidy    | Executing busybox-1.36.1-r31.trigger
mopidy    | OK: 602 MiB in 278 packages
mopidy    | [pkg-install-init] **** Installing all pip packages ****
mopidy    | [pkg-install-init] **** Creating venv ****
mopidy    | Requirement already satisfied: pip in /lsiopy/lib/python3.12/site-packages (24.2)
mopidy    | Collecting wheel
mopidy    |   Downloading wheel-0.44.0-py3-none-any.whl.metadata (2.3 kB)
mopidy    | Collecting setuptools
mopidy    |   Downloading setuptools-75.1.0-py3-none-any.whl.metadata (6.9 kB)
mopidy    | Downloading wheel-0.44.0-py3-none-any.whl (67 kB)
mopidy    | Downloading setuptools-75.1.0-py3-none-any.whl (1.2 MB)
mopidy    |    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 15.5 MB/s eta 0:00:00
mopidy    | Installing collected packages: wheel, setuptools
mopidy    | Successfully installed setuptools-75.1.0 wheel-0.44.0
mopidy    | Looking in links: https://wheel-index.linuxserver.io/alpine-http://dl-cdn.alpinelinux.org/alpine/edge/
mopidy    | Collecting Mopidy-YTMusic
mopidy    |   Downloading mopidy_ytmusic-0.3.8-py3-none-any.whl.metadata (738 bytes)
mopidy    | Collecting Mopidy-YouTube
mopidy    |   Downloading Mopidy_YouTube-3.7-py3-none-any.whl.metadata (10 kB)
mopidy    | Collecting yt-dlp
mopidy    |   Downloading yt_dlp-2024.8.6-py3-none-any.whl.metadata (170 kB)
mopidy    | Collecting Mopidy-SoundCloud
mopidy    |   Downloading Mopidy_SoundCloud-3.0.2-py3-none-any.whl.metadata (4.7 kB)
mopidy    | Collecting Mopidy-ALSAMixer
mopidy    |   Downloading Mopidy_ALSAMixer-2.0.1-py3-none-any.whl.metadata (4.8 kB)
mopidy    | Collecting Mopidy<4,>=3 (from Mopidy-YTMusic)
mopidy    |   Downloading Mopidy-3.4.2-py3-none-any.whl.metadata (6.9 kB)
mopidy    | Collecting pytube<13.0.0,>=12.1.0 (from Mopidy-YTMusic)
mopidy    |   Downloading pytube-12.1.3-py3-none-any.whl.metadata (4.9 kB)
mopidy    | Collecting ytmusicapi<0.30.0,>=0.22.0 (from Mopidy-YTMusic)
mopidy    |   Downloading ytmusicapi-0.25.2-py3-none-any.whl.metadata (5.2 kB)
mopidy    | Collecting beautifulsoup4 (from Mopidy-YouTube)
mopidy    |   Downloading beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
mopidy    | Collecting cachetools (from Mopidy-YouTube)
mopidy    |   Downloading cachetools-5.5.0-py3-none-any.whl.metadata (5.3 kB)
mopidy    | Collecting Pykka>=2.0.1 (from Mopidy-YouTube)
mopidy    |   Downloading pykka-4.0.2-py3-none-any.whl.metadata (2.6 kB)
mopidy    | Collecting requests (from Mopidy-YouTube)
mopidy    |   Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
mopidy    | Requirement already satisfied: setuptools in /lsiopy/lib/python3.12/site-packages (from Mopidy-YouTube) (75.1.0)
mopidy    | Collecting brotli (from yt-dlp)
mopidy    |   Downloading Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl.metadata (5.5 kB)
mopidy    | Collecting certifi (from yt-dlp)
mopidy    |   Downloading certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
mopidy    | Collecting mutagen (from yt-dlp)
mopidy    |   Downloading mutagen-1.47.0-py3-none-any.whl.metadata (1.7 kB)
mopidy    | Collecting pycryptodomex (from yt-dlp)
mopidy    |   Downloading pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl.metadata (3.4 kB)
mopidy    | Collecting urllib3<3,>=1.26.17 (from yt-dlp)
mopidy    |   Downloading urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
mopidy    | Collecting websockets>=12.0 (from yt-dlp)
mopidy    |   Downloading websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl.metadata (6.7 kB)
mopidy    | Collecting pyalsaaudio (from Mopidy-ALSAMixer)
mopidy    |   Downloading pyalsaaudio-0.11.0.tar.gz (311 kB)
mopidy    |   Preparing metadata (setup.py): started
mopidy    |   Preparing metadata (setup.py): finished with status 'done'
mopidy    | Collecting soupsieve>1.2 (from beautifulsoup4->Mopidy-YouTube)
mopidy    |   Downloading soupsieve-2.6-py3-none-any.whl.metadata (4.6 kB)
mopidy    | Collecting tornado>=4.4 (from Mopidy<4,>=3->Mopidy-YTMusic)
mopidy    |   Downloading tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl.metadata (2.5 kB)
mopidy    | Collecting charset-normalizer<4,>=2 (from requests->Mopidy-YouTube)
mopidy    |   Downloading charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl.metadata (33 kB)
mopidy    | Collecting idna<4,>=2.5 (from requests->Mopidy-YouTube)
mopidy    |   Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
mopidy    | Downloading mopidy_ytmusic-0.3.8-py3-none-any.whl (21 kB)
mopidy    | Downloading Mopidy_YouTube-3.7-py3-none-any.whl (49 kB)
mopidy    | Downloading yt_dlp-2024.8.6-py3-none-any.whl (3.1 MB)
mopidy    |    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 17.5 MB/s eta 0:00:00
mopidy    | Downloading Mopidy_SoundCloud-3.0.2-py3-none-any.whl (11 kB)
mopidy    | Downloading Mopidy_ALSAMixer-2.0.1-py3-none-any.whl (9.9 kB)
mopidy    | Downloading beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
mopidy    | Downloading Mopidy-3.4.2-py3-none-any.whl (128 kB)
mopidy    | Downloading pykka-4.0.2-py3-none-any.whl (27 kB)
mopidy    | Downloading pytube-12.1.3-py3-none-any.whl (57 kB)
mopidy    | Downloading requests-2.32.3-py3-none-any.whl (64 kB)
mopidy    | Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
mopidy    | Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
mopidy    | Downloading websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (157 kB)
mopidy    | Downloading ytmusicapi-0.25.2-py3-none-any.whl (62 kB)
mopidy    | Downloading Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl (2.9 MB)
mopidy    |    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 21.2 MB/s eta 0:00:00
mopidy    | Downloading cachetools-5.5.0-py3-none-any.whl (9.5 kB)
mopidy    | Downloading mutagen-1.47.0-py3-none-any.whl (194 kB)
mopidy    | Downloading pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl (2.2 MB)
mopidy    |    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 20.4 MB/s eta 0:00:00
mopidy    | Downloading charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl (142 kB)
mopidy    | Downloading idna-3.10-py3-none-any.whl (70 kB)
mopidy    | Downloading soupsieve-2.6-py3-none-any.whl (36 kB)
mopidy    | Downloading tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl (436 kB)
mopidy    | Building wheels for collected packages: pyalsaaudio
mopidy    |   Building wheel for pyalsaaudio (setup.py): started
mopidy    |   Building wheel for pyalsaaudio (setup.py): finished with status 'error'
mopidy    |   error: subprocess-exited-with-error
mopidy    |   
mopidy    |   × python setup.py bdist_wheel did not run successfully.
mopidy    |   │ exit code: 1
mopidy    |   ╰─> [7 lines of output]
mopidy    |       running bdist_wheel
mopidy    |       running build
mopidy    |       running build_ext
mopidy    |       building 'alsaaudio' extension
mopidy    |       creating build/temp.linux-x86_64-cpython-312
mopidy    |       gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -I/lsiopy/include -I/usr/include/python3.12 -c alsaaudio.c -o build/temp.linux-x86_64-cpython-312/alsaaudio.o
mopidy    |       error: command 'gcc' failed: No such file or directory
mopidy    |       [end of output]
mopidy    |   
mopidy    |   note: This error originates from a subprocess, and is likely not a problem with pip.
mopidy    |   ERROR: Failed building wheel for pyalsaaudio
mopidy    |   Running setup.py clean for pyalsaaudio
mopidy    | Failed to build pyalsaaudio
mopidy    | ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (pyalsaaudio)
mopidy    | [custom-init] No custom files found, skipping...
mopidy    | 
mopidy    | ** (gst-plugin-scanner:225): CRITICAL **: 09:50:23.599: pygobject initialization failed: could not import gobject (error was: ModuleNotFoundError("No module named 'gi'"))
mopidy    | 
mopidy    | INFO     2024-09-17 09:50:23,657 [211:MainThread] mopidy.__main__
mopidy    |   Starting Mopidy 3.4.2
mopidy    | INFO     2024-09-17 09:50:23,674 [211:MainThread] mopidy.config
mopidy    |   Loading config from builtin defaults
mopidy    | INFO     2024-09-17 09:50:23,675 [211:MainThread] mopidy.config
mopidy    |   Loading config from file:///config/mopidy.conf
mopidy    | INFO     2024-09-17 09:50:23,676 [211:MainThread] mopidy.config
mopidy    |   Loading config from command line options
mopidy    | INFO     2024-09-17 09:50:23,768 [211:MainThread] mopidy.__main__
mopidy    |   Enabled extensions: podcast, mpd, iris, http, somafm, m3u, softwaremixer, stream, local, file
mopidy    | INFO     2024-09-17 09:50:23,768 [211:MainThread] mopidy.__main__
mopidy    |   Disabled extensions: bandcamp, scrobbler, jellyfin, spotify, subidy
mopidy    | INFO     2024-09-17 09:50:23,828 [211:MainThread] mopidy.commands
mopidy    |   Starting Mopidy mixer: SoftwareMixer
mopidy    | INFO     2024-09-17 09:50:23,830 [211:MainThread] mopidy.commands
mopidy    |   Mixer volume set to 100
mopidy    | INFO     2024-09-17 09:50:23,830 [211:MainThread] mopidy.commands
mopidy    |   Starting Mopidy audio
mopidy    | INFO     2024-09-17 09:50:23,831 [211:MainThread] mopidy.commands
mopidy    |   Starting Mopidy backends: FileBackend, M3UBackend, StreamBackend, LocalBackend, PodcastBackend, SomaFMBackend
mopidy    | INFO     2024-09-17 09:50:23,836 [211:Audio-2 (_actor_loop)] mopidy.audio.actor
mopidy    |   Audio output set to "audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/data/audio/snapcast_fifo"
mopidy    | INFO     2024-09-17 09:50:23,838 [211:MainThread] mopidy.internal.path
mopidy    |   Creating dir file:///data/mopidy/local
mopidy    | INFO     2024-09-17 09:50:24,619 [211:SomaFMBackend-8 (_actor_loop)] mopidy_somafm.somafm
mopidy    |   Loaded 44 SomaFM channels
mopidy    | INFO     2024-09-17 09:50:24,619 [211:MainThread] mopidy.commands
mopidy    |   Starting Mopidy core
mopidy    | INFO     2024-09-17 09:50:24,623 [211:Core-9 (_actor_loop)] mopidy.internal.path
mopidy    |   Creating dir file:///data/mopidy/core
mopidy    | INFO     2024-09-17 09:50:24,623 [211:Core-9 (_actor_loop)] mopidy.core.actor
mopidy    |   Loading state from /data/mopidy/core/state.json.gz
mopidy    | INFO     2024-09-17 09:50:24,623 [211:Core-9 (_actor_loop)] mopidy.internal.storage
mopidy    |   File does not exist: /data/mopidy/core/state.json.gz
mopidy    | INFO     2024-09-17 09:50:24,623 [211:Core-9 (_actor_loop)] mopidy.core.actor
mopidy    |   Failed to delete /data/mopidy/core/state.json.gz
mopidy    | INFO     2024-09-17 09:50:24,623 [211:MainThread] mopidy.commands
mopidy    |   Starting Mopidy frontends: HttpFrontend, IrisFrontend, MpdFrontend
mopidy    | INFO     2024-09-17 09:50:24,624 [211:HttpFrontend-11 (_actor_loop)] mopidy.http.actor
mopidy    |   HTTP server running at [::ffff:0.0.0.0]:6680
mopidy    | INFO     2024-09-17 09:50:24,624 [211:IrisFrontend-12 (_actor_loop)] mopidy_iris.core
mopidy    |   Starting Iris 3.69.3
mopidy    | WARNING  2024-09-17 09:50:24,624 [211:HttpServer] mopidy.http.handlers
mopidy    |   HTTP Cross-Site Request Forgery protection is disabled
mopidy    | INFO     2024-09-17 09:50:24,625 [211:MainThread] mopidy_mpd.actor
mopidy    |   MPD server running at [::ffff:0.0.0.0]:6600
mopidy    | INFO     2024-09-17 09:50:24,625 [211:IrisFrontend-12 (_actor_loop)] mopidy.internal.path
mopidy    |   Creating dir file:///data/mopidy/iris
mopidy    | INFO     2024-09-17 09:50:24,626 [211:MainThread] mopidy.commands
mopidy    |   Starting GLib mainloop
mopidy    | INFO     2024-09-17 09:50:24,627 [211:HttpServer] mopidy.internal.path
mopidy    |   Creating dir file:///data/mopidy/http
mopidy    | Connection to localhost (127.0.0.1) 6680 port [tcp/*] succeeded!
mopidy    | [ls.io-init] done.
hackbardc commented 2 months ago

Whey!

I run into some problems on the weekend and fixed a wrong dns configuration resulting in the weird lscr.io error (I moved the docker DNS pod to the same host as mopidy). I fixed this and the universal mod seems to function. Also it looks like the container is running fine, as soon as you use INSTALL_PIP it's not working anymore. Its the same error you can see in your log mopidy | ** (gst-plugin-scanner:225): CRITICAL **: 09:50:23.599: pygobject initialization failed: could not import gobject (error was: ModuleNotFoundError("No module named 'gi'"))

Using this docker-compose

services:
  mopidy:
    container_name: mopitest
    image: docker.io/sweisgerber/mopidy:latest
    hostname: mopidy
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - DOCKER_MODS=linuxserver/mods:universal-package-install
      - INSTALL_PIP_PACKAGES=Mopidy-Beets|Mopidy-dLeyna|Mopidy-InternetArchive|Mopidy-TuneIn|Mopidy-YTMusic
      # - INSTALL_PACKAGES=mopidy-podcast
    restart: "unless-stopped"
    ports:
      - 6600:6600 # Remote Control port for MPD
      - 6680:6680 # HTML API & Webinterface port for accessing mopidy
    volumes:
      - ./config/:/config/
      - ./data/:/data/

I get an error running mopidy config

docker exec -it mopitest bash -c "mopidy config" 

ERROR: A GObject based library was not found.

Mopidy requires GStreamer to work. GStreamer is a C library with a
number of dependencies itself, and cannot be installed with the regular
Python tools like pip.

Please see https://docs.mopidy.com/en/latest/installation/ for
instructions on how to install the required dependencies.

Traceback (most recent call last):
  File "/lsiopy/bin/mopidy", line 5, in <module>
    from mopidy.__main__ import main
  File "/lsiopy/lib/python3.12/site-packages/mopidy/__main__.py", line 7, in <module>
    from mopidy import commands
  File "/lsiopy/lib/python3.12/site-packages/mopidy/commands.py", line 18, in <module>
    from mopidy.audio import Audio
  File "/lsiopy/lib/python3.12/site-packages/mopidy/audio/__init__.py", line 2, in <module>
    from .actor import Audio
  File "/lsiopy/lib/python3.12/site-packages/mopidy/audio/actor.py", line 8, in <module>
    from mopidy.audio import tags as tags_lib
  File "/lsiopy/lib/python3.12/site-packages/mopidy/audio/tags.py", line 7, in <module>
    from mopidy.internal.gi import GLib, Gst
  File "/lsiopy/lib/python3.12/site-packages/mopidy/internal/gi.py", line 5, in <module>
    import gi
ModuleNotFoundError: No module named 'gi'

It should be the same with the compose using in the post before. Removing the INSTALL_PIP env results in a working container.

I guess using INSTALL_PIP is still breaking something during creation

Kind Regards, hc

sweisgerber commented 2 months ago

INSTALL_PIP installs arbitrary PIP packages. Those packages can have arbitrary dependencies to system libraries. You can debug this by enabling the INSTALL_PIP packages one by one and see which PIPs work. Once you identify the mopidy plugin that causes the error, you can check it's dependency to system libraries and provide the arch package names in INSTALL_PACKAGES. Mopidy-dLeyna is the most promising.

It's unlikely that the error is in the INSTALL_PIP_PACKAGES mechanism itself and I'm also not maintaining this docker-mod. linuxserver.io also provides no support for custom images based on their images. If it's really in the docker-mod universal-package-install, you would have to reproduce the error with their vanilal images :)