linuxserver / docker-jellyfin

GNU General Public License v3.0
647 stars 97 forks source link

SQLitePCL.pretty.SQLiteException: database is locked when VolumeMount in k3s #27

Closed Vivida1 closed 4 years ago

Vivida1 commented 4 years ago

Getting this error in k3s when I VolumeMount /config through PVC/PV on NFS. If I do not mount the directory, the container starts fine.

Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    1000
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
chown: changing ownership of '/data/movies': Operation not permitted
chown: changing ownership of '/data/serien': Operation not permitted
[cont-init.d] 30-config: exited 1.
[cont-init.d] 40-gid-video: executing... 
[jellyfin-init] Pi Libs detected loading
[cont-init.d] 40-gid-video: exited 0.
[cont-init.d] 99-custom-scripts: executing... 
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[22:25:25] [INF] [4] Main: Jellyfin version: 10.5.2
[22:25:25] [INF] [4] Main: Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"]
[22:25:25] [INF] [4] Main: Operating system: Linux
[22:25:25] [INF] [4] Main: Architecture: Arm
[22:25:25] [INF] [4] Main: 64-Bit Process: False
[22:25:25] [INF] [4] Main: User Interactive: True
[22:25:25] [INF] [4] Main: Processor count: 4
[22:25:25] [INF] [4] Main: Program data path: /config/data
[22:25:25] [INF] [4] Main: Web resources path: /usr/lib/jellyfin/bin/jellyfin-web
[22:25:25] [INF] [4] Main: Application directory: /usr/lib/jellyfin/bin/
[22:25:38] [INF] [4] ServerConfigurationManager: Setting cache path: /config/cache
[22:25:38] [INF] [4] App: Loading assemblies
[22:25:50] [FTL] [4] Main: Error while starting server.
Busy: SQLitePCL.pretty.SQLiteException: database is locked
   at SQLitePCL.pretty.SQLiteException.Throw(Int32 rc, Int32 extended, String msg)
   at SQLitePCL.pretty.SQLiteException.CheckOk(sqlite3 db, Int32 rc)
   at SQLitePCL.pretty.SQLiteDatabaseConnection.PrepareStatement(String sql, String& tail)
   at SQLitePCL.pretty.DatabaseConnection.PrepareStatement(IDatabaseConnection This, String sql)
   at SQLitePCL.pretty.DatabaseConnection.Execute(IDatabaseConnection This, String sql)
   at Emby.Server.Implementations.Data.BaseSqliteRepository.GetConnection(Boolean _)
   at Emby.Server.Implementations.Security.AuthenticationRepository.Initialize()
   at Emby.Server.Implementations.ApplicationHost.GetAuthenticationRepository()
   at Emby.Server.Implementations.ApplicationHost.RegisterResources(IServiceCollection serviceCollection)
   at Emby.Server.Implementations.ApplicationHost.InitAsync(IServiceCollection serviceCollection)
   at Jellyfin.Server.Program.StartApp(StartupOptions options)
[22:25:50] [INF] [4] App: Disposing CoreAppHost
[22:25:50] [INF] [2] Main: Received a SIGTERM signal, shutting down

My jellyfin.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jellyfin-config
spec:
  capacity:
    storage: 250Gi
  storageClassName: fast
  mountOptions:
    - nfsvers=3
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /mnt/aurum-storage/jellyfin
    server: 10.0.22.9
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jellyfin-media-movies
spec:
  capacity:
    storage: 10Gi
  storageClassName: slow
  mountOptions:
    - nfsvers=3
  volumeMode: Filesystem
  accessModes:
    - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /mnt/argentum-storage/Movies
    server: 10.0.22.16
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jellyfin-media-serien
spec:
  capacity:
    storage: 10Gi
  storageClassName: slow
  mountOptions:
    - nfsvers=3
  volumeMode: Filesystem
  accessModes:
    - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /mnt/argentum-storage/Serien
    server: 10.0.22.16
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jellyfin-config
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: fast
  resources:
    requests:
      storage: 100Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jellyfin-media-movies
spec:
  accessModes:
    - ReadOnlyMany
  storageClassName: slow
  resources:
    requests:
      storage: 1Mi
  volumeName: jellyfin-media-movies
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jellyfin-media-serien
spec:
  accessModes:
    - ReadOnlyMany
  storageClassName: slow
  resources:
    requests:
      storage: 1Mi
  volumeName: jellyfin-media-serien
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jellyfin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jellyfin
  template:
    metadata:
      name: jellyfin
      labels:
        app: jellyfin
    spec:
      containers:
      - image: linuxserver/jellyfin:arm32v7-latest
        name: jellyfin
        ports:
        - containerPort: 8096
          protocol: TCP
        - containerPort: 8920
          protocol: TCP
        env:
        - name: PUID
          value: "1000"
        - name: PGID
          value: "1000"
        - name: TZ
          value: Europe/London
        volumeMounts:
        - mountPath: /dev/vchiq
          name: vchiq
        - mountPath: /opt/vc/lib
          name: vc
        - mountPath: /dev/video10
          name: video10
        - mountPath: /dev/video11
          name: video11
        - mountPath: /dev/video12
          name: video12
        - mountPath: /config
          name: jellyfin-config
        - mountPath: /data/movies
          name: jellyfin-media-movies
        - mountPath: /data/serien
          name: jellyfin-media-serien
        securityContext:
          privileged: true
        readinessProbe:
          periodSeconds: 60
          initialDelaySeconds: 30
          httpGet:
            path: /
            port: 8096
      volumes:
      - name: vchiq
        hostPath:
          path: /dev/vchiq
      - name: vc
        hostPath:
          path: /opt/vc/lib
      - name: video10
        hostPath:
          path: /dev/video10
      - name: video11
        hostPath:
          path: /dev/video11
      - name: video12
        hostPath:
          path: /dev/video12
      - name: jellyfin-config
        persistentVolumeClaim:
          claimName: jellyfin-config
      - name: jellyfin-media-movies
        persistentVolumeClaim:
          claimName: jellyfin-media-movies
      - name: jellyfin-media-serien
        persistentVolumeClaim:
          claimName: jellyfin-media-serien

My nfs /etc/exports /mnt/aurum-storage/jellyfin *(rw,async,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)

aptalca commented 4 years ago

Don't put databases on remote mounts. Jellyfin uses sqlite

Vivida1 commented 4 years ago

Thanks, should have thought of that. Using a Local Persistent Volume now.

aptalca commented 4 years ago

Yeah, media folders are fine to access over nfs, but we generally recommend /config folders to reside on local folders.