rix1337 / docker-ripper

The best way to automatically rip optical disks using docker!
MIT License
247 stars 50 forks source link

udev issues causes hangs and docker crashing #97

Closed jcfrosty closed 2 years ago

jcfrosty commented 2 years ago

Have you read and understood this part of the readme?

[X] YES

[] NO

Issue description: unraid and other Linux Distro UDEV ISSUES This is not intended to be a bug that requires work by rix1337 or changes in the docker. This is an issue with Docker hosts that appears to be prevalent across multiple distros (Manjaro, Arch, Fedora, Unraid, and possibly more). This is merely to document the issue and the solution for those possibly experiencing problems and possibly believe the issue could be the docker.

There is a udev rule for persistent storage that can cause hanging upon entering specific video disc into drives.

If you wish to fix/correct this problem without altering the core udev files you may follow these instructions:

Copy the current persistent-storage.rules to the directory for custom rules.

sudo cp /usr/lib/udev/rules.d/60-persistent-storage.rules /etc/udev/rules.d/60-persistent-storage.rules
sudo vim /etc/udev/rules.d/60-persistent-storage.rules

In the file you should be looking for this line:

# probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
  IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
  IMPORT{builtin}="blkid --noraid"

Those IMPORT lines cause issues so we need to replace them with a line that tells udev to end additional rules for SR* devices:

# probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
  GOTO="persistent_storage_end"
##  IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
  GOTO="persistent_storage_end"
##  IMPORT{builtin}="blkid --noraid"

You can comment these lines out or delete them all together, then replace them with the GOTO lines. You may then either reboot OR reload the rules. If you're using Unraid, you'll need to edit the the original udev rule and reload.

root@linuxbox# udevadm control --reload-rules && udevadm trigger
jcfrosty commented 2 years ago

I'm linking https://github.com/rix1337/docker-ripper/pull/98 to this issue.

rix1337 commented 2 years ago

Thank you for documenting this. #98 is merged. Closing this now.