Як надати оснащення доступу до / somedir


20

Я просто намокаю ноги від оснащення. Я встановив vlc і хочу спробувати його використовувати. Всі мої носії встановлені під /store, кріпленням NFS. І оснастки не дозволяють отримати доступ до цього каталогу.

Після того, як вдаючись до допомоги я прийшов , щоб зрозуміти , що я можу отримати доступ до файлів в відповідно з /home/peterдля :homeінтерфейсу і /mediaдля :removable-mediaінтерфейсів.

Але я на самому справі , як /storeі не хочу , щоб змінити це , щоб бути /media/storeабо /home/peter/storeабо що - небудь ще , ніж /store.

Чи є спосіб отримати оснащення, щоб дозволити моїм знімкам (або, можливо, просто vlc) отримати доступ /store, так що оснащення відповідає моїм умовам іменування, або я змушений перейти на переваги оснастки?

Це здається дуже негнучким, і я сподіваюся, що я щось пропустив.


1
Ви можете спробувати зняти snap ( sudo snap remove vlc), а потім перевстановити за допомогою класичної опції. Може допомогти, може, не .. ( sudo snap install vlc --classic)
дог

1
Дякую. Я спробував --classicі --devmode- не працював. Але також я хочу надати доступ явно до, /storeале не все на кшталт/supersecret
Петро В. Морч

2
Чи відкрито будь-який квиток / помилку / функцію запиту? Я б хотів і цієї функції!
kravemir

1
Я отримую справжню ненависть до знімків.
Стівен Бостон

Відповіді:


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
Гей, тут розробник оснащений, який відповідає за цей код. На ваше здивування, це насправді правильно зробити. Ми не можемо копіювати файлову систему хоста та будь-яку з випадкових каталогів, які вона може містити. Хоча ви можете використовувати / зберігати когось іншого, ви можете використовувати / приховувати або / що завгодно, і взагалі немає ніякого способу змусити це працювати. Моя рекомендація - просто монтувати медіа в потрібному місці, або в / дома / ... або в / медіа. Тоді він потрапить під існуючі системи, які керують цими даними, і речі повинні працювати коректно.
Зигмунт Криницький

@ZygmuntKrynicki або under / mnt, якщо для оснащення було підключено інтерфейс для змінних медіа.
jarno

5
@ZygmuntKrynicki Я теж вражений. За замовчуванням точки монтажу повинні бути налаштовані через конфігураційний файл і не застосовуватися.
мархур

4
@ZygmuntKrynicki Дякую за те, що вискакували та пояснювали, що код робить те, що ви маєте намір. Я з повагою і повністю не згоден з тим, що ви пишете. Шляхи жорсткого кодування є дуже поганою практикою і не можуть бути змістовно виправданими навіть в ім'я безпеки. Це просто основна негнучкість.
Стефан Гурішон

1

Отже, щоб розширити свою міні-відповідь вище, немає жодного способу зробити це загальним, безпечним та надійним. Я знаю, що всі люблять налаштовувати свою файлову систему, але це має певні витрати, і це одна з них.

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

Це розроблено для дружніх файлів, таких як медіаплеєри чи редактори слів. Ваше дерево Linux, яке розміщено в /codez, не буде працювати так добре.


2
Привіт Зигмунт, дякую за відповідь. Моє здивування стоїть. Ви кажете: "Я знаю, що всі люблять налаштовувати свою файлову систему, але це має певну вартість, і це одна з них". Просто так я розумію: ти розумієш, але хочеш ігнорувати, що це звичайна річ, яку хочеться зробити? Мені невідомі будь-які інші витрати на цю конвенцію про іменування протягом останніх 15 років.
Петро В. Морч

3
Чи є якась причина, чому не вдалося поставити рядок типу extradirs=/store:/other/locationабо щось у /etc/snapd.confабо /etc/snapd/conf.d/vlc.conf. Як і багато інших програм Linux. Це, здається, працює добре, наприклад, на Докер. Це так, ніби апачі були жорсткими DocumentRoot /var/www.
Петро В. Морч

1
Я, правда, дуже вдячний, що знайшов час написати тут, Зігмунте. Дякую.
Петро В. Морч

Це не так просто. Основна проблема - це не apparmor, а власне те, що під час виконання додаток працює в іншій кореневій файловій системі. З цієї точки зору процесу / магазину не існує - це не те, що він не встановлений, це просто зовсім не каталог. Те, що робиться оснащенням, - це введення деяких шляхів з хост-системи в область імен кріплення додатків. Оскільки коренева файлова система у моментах читається лише ми не можемо легко ввести нові точки монтажу (наприклад, для / зберігання).
Зигмунт Криницький

@ PeterV.Mørch ви можете змонтувати або переміщувати ці файли під / mnt, переконайтесь, що підключення до знімного медіа підключено для оснащення та створіть посилання в початкових місцях, якщо ви хочете.
jarno

1

встановлення цільового каталогу в/home/*/snap/ згадується як варіант; просте кріплення прив'язки не працювало для мене, а також жорстке посилання або символьне посилання або цільових файлів, і каталогів у запропонований оснащений каталог, або будь-який його підкаталог. Це обмеження може бути пов’язане з цільовими файлами, які існують поза /home/*/каталогом, я не перевіряв mount / hard / symlinks до файлів у /home/*/префіксі glob.

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

Назвіть кілька утиліт копіювання файлів, які можуть допомогти вам:

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

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

  • git клони, можливо, однак локальні клони за замовчуванням використовують жорсткі посилання, тому якщо ви використовуєте git для управління файловою системою io в оснащення, будьте обережні щодо можливості, що без відключення жорстких посилань під час клонування цей git клон може бути недоступним для оснащення.


1
Це не спрацює у загальному випадку використання багато терабайтного накопичувача NAS, встановленого NFS.
Пітер В.

1

Я не можу розмістити коментар, оскільки мені не вистачає репутації, але я можу розмістити відповідь ..?

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


1
Привіт і ласкаво просимо у Ask Ubuntu! Відповіді лише на посилання не рекомендуються, оскільки вони можуть застаріти, якщо термін дії посилання закінчиться в майбутньому. Чи можу я запропонувати вам додати деякі відомості до своєї публікації (наприклад, підсумовуючи кроки / рекомендації для використання)?
FloT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.