Errors
JupyterHub

JupyterHub: Shared, writable folders in jupyterhub

Ты поднял JupyterHub, настроил общую папку для команды, раздал всем права и членство в группе. Идеальная среда для коллаборации. Но вот беда — один аналитик соз

Ты поднял JupyterHub, настроил общую папку для команды, раздал всем права и членство в группе. Идеальная среда для коллаборации. Но вот беда — один аналитик создаёт файл, а другой не может в него записать. Права каждый раз сбрасываются на 644. И кажется, будто Jupyter нарочно саботирует твои попытки наладить совместную работу.

Почему umask не работает

Ты правильно предположил, что дело в umask. Ты прописал его в /etc/profile и ~/.bashrc. Но JupyterLab — это не bash-сессия. Это веб-приложение, запущенное своим процессом, который эти файлы не читает. Поэтому твои настройки системного umask остаются за бортом.

Jupyter имеет собственный механизм управления umask. Его нужно настраивать там же, где конфигурируется всё остальное — в конфигурационных файлах самого JupyterHub или JupyterLab.

Настраиваем umask для ядра

Решение лежит в установке переменной окружения UMASK для процесса, который запускает ядро (kernel). Это можно сделать через конфигурацию JupyterHub.

Допустим, ты используесть DockerSpawner. Тогда в конфиге JupyterHub (jupyterhub_config.py) можно добавить:

c.DockerSpawner.environment = {
    'UMASK': '0002',  # Это даст права 775 для папок и 664 для файлов
}

Или, если spawner другой, ищешь параметр, отвечающий за переменные окружения для запускаемых серверов. Важно: umask 0002 убирает запись для others, но оставляет группе. Это то, что нужно.

После изменения конфига не забудь перезапустить JupyterHub.

Альтернатива: setgid на директорию

Если настройка через окружение по каким-то причинам не срабатывает, есть более железобетонный Unix-способ. Он не требует ACL и правок в /etc/fstab.

Поставь на саму shared-директорию бит setgid (установка группового ID). Это заставит все новые файлы и поддиректории внутри неё автоматически наследовать группу родительской папки (в твоём случае jupyter).

chmod g+s /opt/shared

Теперь, даже если файл будет создан с правами 644, группа у него будет jupyter, и все члены этой группы смогут его редактировать. Это классическое решение для общих папок.

Итог

Порядок действий: сначала попробуй выставить UMASK=0002 через конфигурацию своего spawner в JupyterHub. Перезапусти и проверь. Если не помогло — одной командой навесь chmod g+s на /opt/shared. Второй способ надёжнее, но первый — каноничнее для Jupyter-мира.

Обычно проблема решается на одном из этих шагов. Если нет — проверь, точно ли все пользователи в группе jupyter и не перезаписывается ли группа файла каким-нибудь внутренним процессом уже после создания.