Как дать оснастке доступ к / somedir

20

Я просто промочил ноги от щелчка. Я установил vlc и хочу попробовать использовать его. Все мои носители установлены под /storeмонтированием NFS. И снимки не разрешают доступ к этому каталогу.

После поиска в Google я понял, что могу получить доступ к файлам /home/peterдля :homeинтерфейса и /mediaдля :removable-mediaинтерфейсов.

Но я на самом деле , как /storeи не хочу , чтобы изменить это , чтобы быть /media/storeили /home/peter/storeили что - нибудь еще , чем /store.

Есть ли способ получить оснастку, чтобы разрешить доступ к моим снимкам (или, может быть, только к vlc) /store, чтобы оснастка соответствовала моим соглашениям об именах, или я вынужден перейти к настройкам привязки?

Это кажется очень негибким, и я надеюсь, что есть кое-что, что я пропустил.

Петр В. Мёрч
источник
1
Вы можете попробовать удалить оснастку ( sudo snap remove vlc), а затем переустановить с помощью классической опции. Может помочь, может не .. ( sudo snap install vlc --classic)
Дуг
1
Спасибо. Я пытался --classicи --devmode- ни сработало. Но также я хочу дать доступ явно, /storeно не ко всему, как/supersecret
Peter V. Mørch
2
Есть ли какие-либо заявки / ошибки / запросы на функции, открытые для привязки? Я бы тоже хотел эту функцию!
Кравемир
1
Я получаю настоящую ненависть к снимкам.
Стивен Бостон,
@kravemir: См. выпуск Launchpad 1643706
Питер В. Мёрч

Ответы:

9

К моему удивлению, это действительно выглядит /homeжестко закодированным. mount-support.c содержит:

    const struct sc_mount mounts[] = {
        {"/dev"},   // because it contains devices on host OS
        {"/etc"},   // because that's where /etc/resolv.conf lives, perhaps a bad idea
        {"/home"},  // to support /home/*/snap and home interface
    ...

Вау. Это меня удивляет. Но у вас есть это.

Изменить: См. Также выпуск Launchpad 1643706

Петр В. Мёрч
источник
1
Эй, разработчик Snapd здесь ответственен за этот код. К твоему удивлению, это на самом деле правильно. Мы не можем реплицировать файловую систему хоста и любые случайные каталоги, которые она может содержать. В то время как вы можете использовать / хранить, кто-то другой может использовать / stash или / что угодно, и в целом нет способа заставить это работать. Я рекомендую просто смонтировать носитель в нужном вам месте, либо в / home / ..., либо в / media. Тогда он попадет под существующие системы, которые управляют этими данными, и все должно работать правильно.
Зигмунт Крыницкий,
@ZygmuntKrynicki или в / mnt, если интерфейс съемного носителя был подключен для моментального снимка.
Ярно
5
@ZygmuntKrynicki Я тоже удивлен. Точки монтирования по умолчанию должны быть настроены с помощью файла конфигурации и не применяются.
мархуры
3
@ZygmuntKrynicki Спасибо, что заглянули и объяснили, что код выполняет то, что вы намереваетесь. Я с уважением и полностью не согласен с тем, что вы пишете. Твердое кодирование - очень плохая практика, и она не может быть обоснованно оправдана даже во имя безопасности. Это просто базовая негибкость.
Стефан Гурихон
1

Итак, чтобы расширить мой мини-ответ выше, нет никакого способа сделать это общим, безопасным и здравым. Я знаю, что все любят настраивать свою файловую систему, но это имеет определенную стоимость, и это одна из них.

В конечном итоге, благодаря работе над XDG-порталами, некоторые приложения (особенно графические приложения) могут получить доступ к файлам в произвольных местах, если указанные приложения используют некоторые из недавно представленных API-интерфейсов GTK. При запуске в закрытом режиме он обращается к доверенному помощнику, открывает доверенный пользовательский интерфейс, который выглядит как средство выбора файлов, обращается к специальной файловой системе FUSE, чтобы представить файл (в любом месте) как особую вещь в / run /. .. где-то, что приложение видит, и все может работать нормально.

Это разработано для дружественных средств выбора файлов, таких как медиаплееры или редакторы слов. /codezХотя ваше дерево Linux не будет работать так хорошо.

Зигмунт Крыницкий
источник
2
Привет Зигмунт, спасибо за ответ. Мое изумление стоит. Вы говорите: «Я знаю, что все любят настраивать свою файловую систему, но это имеет определенную стоимость, и это одна из них». Просто я понимаю: вы понимаете, но предпочитаете игнорировать, что это обычное дело, которое вы хотите делать? За последние 15 лет я не знал о каких-либо других затратах на это соглашение об именах.
Питер В. Мёрч
3
Есть ли какая-то причина, по которой никто не может поставить строку вроде extradirs=/store:/other/locationили что-то в /etc/snapd.confили /etc/snapd/conf.d/vlc.conf. Как и множество других приложений Linux. Это, кажется, работает нормально, например, для Docker. Это как если бы Apache был жесткий код DocumentRoot /var/www.
Питер В. Мёрч
1
Однако я очень ценю то, что вы нашли время написать здесь, Зигмунт. Спасибо.
Питер В. Мёрч
Это не так просто. Основная проблема не в apparmor, а на самом деле в том, что во время выполнения приложение работает в другой корневой файловой системе. С этой точки зрения процесс / хранилище не существует - дело не в том, что оно не смонтировано, это просто не каталог. Что делает Snap-Confine, так это переносит несколько путей из хост-системы в пространство имен монтирования приложения. Поскольку корневая файловая система в снимках доступна только для чтения, мы не можем легко внедрить новые точки монтирования (например, для / store).
Зигмунт Криницкий
@ PeterV.Mørch, вы можете смонтировать или переместить эти файлы в / mnt, убедиться, что интерфейс съемного носителя был подключен для моментального снимка, и создать символические ссылки в исходных местах, если хотите.
Ярно
1

подключение целевого каталога/home/*/snap/ упоминается как опция; у меня не работало простое монтирование с привязкой, не работала ни жесткая ссылка, ни символическая ссылка целевых файлов или каталогов в предлагаемый каталог моментальных снимков или любой их подкаталог. Это ограничение может быть связано с тем, что целевые файлы существуют за пределами /home/*/каталога, я не тестировал mounts / hard / symlinks на файлы внутри /home/*/префикса glob.

Однако, Обходной путь: полная копия файла в /home/<myuser>/snap/<appname>/<somenewdirectory>работала для меня. Сохранение полных копий наборов данных для меня было еще неосуществимо, но есть много инструментов, которые помогут справиться с таким ограничением; ручная рекурсивная копия перед использованием моментального снимка, а копирование измененных файлов обратно после - вариант, если ваш набор данных небольшой или даже атомарный

Назовите несколько утилит для копирования файлов, которые могут вам помочь:

  • cp --verbose --archive --recursive /somedir ~/snap/somedirи источник / цель наоборот
  • tar -C / -c somedir | tar -C ~/snap/ -xv пример копирования файлов на основе tar
  • rsync --archive /somedir ~/snap/somedir, rsync популярен и имеет множество оболочек / расширений

  • Любая утилита резервного копирования на основе файлов (графический пример :)grsync должна быть пригодна для использования, поскольку вся цель состоит в дублировании набора данных вперед и назад по мере необходимости

  • Клоны git, возможно, однако локальные клоны по умолчанию используют жесткие ссылки, поэтому, если вы используете git для управления файловой системой io в моментальном снимке, будьте осторожны с возможностью того, что без отключения жестких ссылок во время клонирования этот клон git может быть недоступен для моментального снимка.

ThorSummoner
источник
1
Это не сработает в случае обычного использования многотерабайтного накопителя NAS с NFS.
Петр В. Мёрч
1

Я не могу оставить комментарий, потому что у меня недостаточно репутации, но я могу опубликовать ответ ..?

В любом случае, это не оригинальная проблема, но если кто-то еще, как я, попал сюда в поисках того, как предоставить доступ к / media для оснастки (например, для использования Darktable, который без нее в принципе бесполезен), вы можете сделать это. либо через интерфейс хранилища моментальных снимков, либо добавив «съемный носитель» в ваше приложение моментальных снимков в командной строке. Некоторые документы здесь: https://snapcraft.io/docs/interface-management

Даниэль Мюррей
источник
1
Здравствуйте и добро пожаловать на Ask Ubuntu! Ответы, содержащие только ссылки, не рекомендуется, поскольку они могут устареть, если срок действия ссылки истечет в будущем. Могу ли я предложить вам добавить некоторые детали к вашему сообщению (например, кратко излагаются шаги / рекомендует использовать)?
FloT