Вопрос или проблема
Мой ПК не может запустить пакеты 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 и рассмотрено в нескольких обсуждениях на форумах поддержки, включая этот случай.
Возможные решения
-
Изменение конфигурации AppArmor: Изменение файла конфигурации AppArmor, как это было сделано в вашем случае с добавлением строки
@{HOMEDIRS}+=/home/MYDOMAINCOMPANY/
, может временно решить проблему, но не является идеальным решением, так как может повлиять на безопасность. -
Удаление символической ссылки: Наиболее надежный способ решения данной проблемы — удалить символическую ссылку и сделать так, чтобы ваш домашний каталог был доступен непосредственно из
/home
. Это можно сделать с помощью/etc/fstab
. Вам стоит добавить следующую строку в этот файл:/media/my-other-drive/home/myuser /home/myuser none bind 0 0
После чего выполните команду:
sudo mount -a
Это заставит систему смонтировать ваш каталог напрямую в
/home
, устраняя необходимость в символической ссылке. -
Использование скриптов или инструментов автоматизации: Если вам необходимо многократно осуществлять этот переход между разными системами, рекомендуется использовать инструменты автоматизации, такие как Ansible, для обеспечения согласованности конфигураций на разных компьютерах.
Заключение
Проблема с запуском snap-пакетов на вашем компьютере в значительной степени связана с конфигурацией домашнего каталога в вашей системе. Устранение символической ссылки на каталог home
либо изменение параметров AppArmor может помочь решить возникшую ошибку. Как бы там ни было, лучшая практика — это использование прямого монтирования каталогов, избегая путей, которые не соответствуют ожиданиям snap, для обеспечения бесперебойной работы приложений.
Рекомендуется протестировать предложенные методы в контролируемой среде для обеспечения их работоспособности, прежде чем внедрить изменения в продуктивную систему.