Snap не может создать каталог пользовательских данных: Не является каталогом

Вопрос или проблема

Мой ПК не может запустить пакеты snap, когда я пытаюсь, я получаю:

2021/07/31 20:56:38.255535 cmd_run.go:576: WARNING: XAUTHORITY environment value is not a clean path: "/mnt/e664d184-8567-4278-93ce-c986567c66af/home/iaquobe/.Xauthority"
cannot create user data directory: /home/iaquobe/snap/shapezio/2: Not a directory

Тем не менее, директории существуют. На данный момент пакеты, которые я тестировал, это 0ad shapezio whatsdesk, у всех была одна и та же проблема.

Эти пакеты запускаются на моем ноутбуке. Единственное, что отличается, это то, что на моем ПК /home/iaquobe является символической ссылкой на диск /mnt/[...]/home.

Это единственная причина для этой ошибки, которую я мог представить, как вы думаете? И что я могу сделать, чтобы исправить это?

Спасибо заранее 🙂

Символическая ссылка /home действительно вызывает проблему. Это известная ошибка snap (или точнее говоря, ограничение дизайна snap) — с пакетами snap home не может быть символической ссылкой или другой директорией, отличной от /home, см. эту ошибку для подробностей. Предложенное решение — выполнить sudo dpkg-reconfigure apparmor, но некоторые люди в обсуждении ошибки сказали, что это не помогло, поэтому это может не сработать.

Мы используем домен с областью, поэтому наш путь home не /home, вместо этого /home/MYDOMAINCOMPANY/. Я исправил это, отредактировав /etc/apparmor.d/tunables/home.d/ubuntu с этой строкой:

@{HOMEDIRS}+=/home/MYDOMAINCOMPANY/

После сохранения просто перезапустите некоторые службы:

systemctl restart apparmor.service snapd.apparmor.service snapd.service snapd.socket

Таким образом, я могу запускать на многих компьютерах с помощью скрипта или используя Ansible.

У меня была такая же проблема, когда я использовал символическую ссылку для своей домашней директории. Я исправил это, удалив символическую ссылку и примонтировав новое расположение домашней директории в /etc/fstab, добавив:

/media/my-other-drive/home/myuser /home/myuser none bind 0 0

Затем примонтируйте домашнюю директорию:

sudo mount -a

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, что snap-пакеты не могут успешно взаимодействовать с вашим пользовательским каталогом данных из-за того, что каталог home является символической ссылкой. В этой статье мы глубже рассмотрим данную проблему, причины ее возникновения и возможные варианты решения.

Проблема

Ошибка, которую вы наблюдаете, конкретно гласит:

cannot create user data directory: /home/iaquobe/snap/shapezio/2: Not a directory

Это происходит потому, что snap не поддерживает работу с каталогами, которые являются символическими ссылками. В вашем случае каталоги, на которые вы ссылаетесь, находятся на другом диске, что усугубляет ситуацию.

Причины

Snap использует механизмы контейнеризации, которые более ограничены по сравнению с обычными пакетами. В частности, snap ожидает, что путь к домашнему каталогу будет прямым, т.е. прямым доступом к каталогу /home, а не символической ссылкой на другое место. Это вызвано определенными ограничениями дизайна snap и механизмом безопасности AppArmor.

Вы правы в том, что наличие символической ссылки на директорию home является ключевой причиной возникновения ошибки. Это является известной проблемой snap и рассмотрено в нескольких обсуждениях на форумах поддержки, включая этот случай.

Возможные решения

  1. Изменение конфигурации AppArmor: Изменение файла конфигурации AppArmor, как это было сделано в вашем случае с добавлением строки @{HOMEDIRS}+=/home/MYDOMAINCOMPANY/, может временно решить проблему, но не является идеальным решением, так как может повлиять на безопасность.

  2. Удаление символической ссылки: Наиболее надежный способ решения данной проблемы — удалить символическую ссылку и сделать так, чтобы ваш домашний каталог был доступен непосредственно из /home. Это можно сделать с помощью /etc/fstab. Вам стоит добавить следующую строку в этот файл:

    /media/my-other-drive/home/myuser /home/myuser none bind 0 0

    После чего выполните команду:

    sudo mount -a

    Это заставит систему смонтировать ваш каталог напрямую в /home, устраняя необходимость в символической ссылке.

  3. Использование скриптов или инструментов автоматизации: Если вам необходимо многократно осуществлять этот переход между разными системами, рекомендуется использовать инструменты автоматизации, такие как Ansible, для обеспечения согласованности конфигураций на разных компьютерах.

Заключение

Проблема с запуском snap-пакетов на вашем компьютере в значительной степени связана с конфигурацией домашнего каталога в вашей системе. Устранение символической ссылки на каталог home либо изменение параметров AppArmor может помочь решить возникшую ошибку. Как бы там ни было, лучшая практика — это использование прямого монтирования каталогов, избегая путей, которые не соответствуют ожиданиям snap, для обеспечения бесперебойной работы приложений.

Рекомендуется протестировать предложенные методы в контролируемой среде для обеспечения их работоспособности, прежде чем внедрить изменения в продуктивную систему.

Оцените материал
Добавить комментарий

Капча загружается...