Jak zapewnić snapom dostęp do / somedir

20

Po prostu zamaczam stopy. Zainstalowałem VLC i chcę go użyć. Wszystkie moje media są zainstalowane pod instalacją /storeNFS. Snap nie pozwala na dostęp do tego katalogu.

Po googlowania Doszedłem do zrozumienia, że mogę uzyskać dostęp do plików w /home/peterdla :homeinterfejsu i /mediadla :removable-mediainterfejsów.

Ale faktycznie jak /storei nie chce zmienić się /media/storelub /home/peter/storeczy cokolwiek innego niż /store.

Czy istnieje sposób, aby uzyskać snap, aby umożliwić dostęp do moich snapów (a może po prostu vlc) /store, więc snap jest zgodny z moimi konwencjami nazewnictwa, czy też jestem zmuszony przekonwertować na preferencje snap?

To wydaje się bardzo mało elastyczne i mam nadzieję, że coś mi umknęło.

Peter V. Mørch
źródło
1
Możesz spróbować usunąć snap ( sudo snap remove vlc), a następnie zainstalować ponownie z opcją klasyczną. Może pomóc, może nie .. ( sudo snap install vlc --classic)
doug
1
Dzięki. Próbowałem --classici --devmode- żadne nie działało. Ale chcę też wyraźnie przyznać dostęp, /storeale nie do wszystkiego, jak/supersecret
Peter V. Mørch,
2
Czy są jakieś prośby o zgłoszenie / błąd / błąd do otwarcia? Chciałbym też tę funkcję!
kravemir
1
Naprawdę nie lubię snapów.
Stephen Boston,
@kravemir: Zobacz numer Launchpad 1643706
Peter V. Mørch

Odpowiedzi:

9

Ku mojemu zdziwieniu, naprawdę wygląda na /homezakodowane. mount-support.c zawiera:

    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
    ...

Łał. To mnie zadziwia. Ale masz to.

Edycja: Zobacz także numer 1643706 Launchpad

Peter V. Mørch
źródło
1
Hej, tutaj programista snapd odpowiedzialny za ten kod. Ku twojemu zdziwieniu tak właściwie jest. Nie możemy replikować systemu plików hosta ani żadnego z losowych katalogów, które może on zawierać. Podczas gdy możesz używać / przechowywać, ktoś inny może używać / stash lub / cokolwiek i nie ma sposobu, aby to ogólnie działało. Moje zalecenie to po prostu zamontować multimedia w wybranym miejscu, w / home / ... lub w / media. Wtedy przejdzie do istniejących systemów, które zarządzają tymi danymi i rzeczy powinny działać poprawnie.
Zygmunt Krynicki
@ZygmuntKrynicki lub under / mnt, jeśli interfejs Snap-Media został podłączony do przystawki.
jarno
5
@ZygmuntKrynicki Też jestem zdumiony. Domyślne punkty montowania powinny być skonfigurowane za pomocą pliku konfiguracyjnego i nie być wymuszane.
markhor
4
@ZygmuntKrynicki Dziękujemy za przybycie i wyjaśnienie, że kod robi to, co zamierzasz. Z całym szacunkiem i całkowicie nie zgadzam się z tym, co piszesz. Ścieżki kodowania są bardzo słabą praktyką i nie mogą być w sposób uzasadniony uzasadnione, nawet w imię bezpieczeństwa. To tylko podstawowa sztywność.
Stéphane Gourichon
1

Więc, aby rozwinąć moją mini-odpowiedź powyżej, nie ma sposobu, aby zrobić to w sposób ogólny, bezpieczny i zdrowy. Wiem, że wszyscy uwielbiają dostosowywać swój system plików, ale wiąże się to z pewnymi kosztami i jest to jeden z nich.

W końcu, dzięki pracy na portalach XDG, niektóre aplikacje (zwłaszcza graficzne) mogą uzyskać dostęp do plików w dowolnych miejscach, jeśli aplikacje używają niektórych z niedawno wprowadzonych interfejsów API GTK. Spowoduje to, że działając w zamknięciu, skontaktuje się z zaufanym pomocnikiem, wyświetli zaufany interfejs użytkownika, który wygląda jak próbnik plików, porozmawia ze specjalnym systemem plików FUSE, aby udostępnić plik (w dowolnym miejscu) jako specjalną rzecz w / run /. .. gdzieś, co widzi aplikacja i wszystko może działać dobrze.

Jest to zaprojektowane z myślą o rzeczach przyjaznych dla wybierania plików, takich jak odtwarzacze multimedialne lub edytory tekstu. Twoje drzewo linuxowe hostowane na /codeznie będzie jednak działać tak dobrze.

Zygmunt Krynicki
źródło
2
Cześć Zygmunt, dziękuję za odpowiedź. Moje zdumienie trwa. Mówisz: „Wiem, że wszyscy uwielbiają dostosowywać swój system plików, ale wiąże się to z pewnymi kosztami i jest to jeden z nich”. Rozumiem tylko: zdajesz sobie sprawę, ale ignorujesz, że to jest powszechna rzecz, którą chcesz zrobić? Nie jestem świadomy żadnych innych kosztów związanych z tą konwencją nazewnictwa w ciągu ostatnich 15 lat.
Peter V. Mørch
3
Czy jest jakikolwiek powód, dla którego nie można było wstawić wiersza extradirs=/store:/other/locationlub czegoś w /etc/snapd.conflub /etc/snapd/conf.d/vlc.conf. Podobnie jak mnóstwo innych aplikacji linuxowych. Wygląda na to, że działa dobrze np. Dla Dockera. To tak, jakby apache był na sztywnym kodzie DocumentRoot /var/www.
Peter V. Mørch
1
Naprawdę jednak doceniam twój czas poświęcony na pisanie tutaj, Zygmunt. Dziękuję Ci.
Peter V. Mørch
To nie takie proste. Głównym problemem nie jest apparmor, ale fakt, że w czasie wykonywania aplikacja działa w innym systemie plików root. Z tego punktu widzenia / sklepu nie istnieje - to nie jest tak, że nie jest zamontowany, to po prostu nie jest katalog. Funkcja przyciągania polega na wprowadzeniu niektórych ścieżek z systemu hosta do przestrzeni nazw montowania aplikacji. Ponieważ główny system plików w snapach jest tylko do odczytu, nie możemy łatwo wstrzyknąć nowych punktów montowania (np. Dla / store).
Zygmunt Krynicki
@ PeterV.Mørch możesz zamontować lub przenieść te pliki do katalogu / mnt, upewnij się, że interfejs nośników wymiennych został podłączony do przystawki i, jeśli chcesz, utworzyć łącza symboliczne w oryginalnych lokalizacjach.
jarno
1

montowanie katalogu docelowego/home/*/snap/ jest wspomniane jako opcja; proste podłączenie wiązania nie działało dla mnie, ani nie dowiązanie twarde, ani dowiązanie symboliczne plików docelowych lub katalogów do proponowanego katalogu snap lub jakiegokolwiek jego podkatalogu. Ograniczenie to może wynikać z plików docelowych istniejących poza /home/*/katalogiem, nie testowałem mountów / hard / dowiązań symbolicznych do plików wewnątrz /home/*/globu przedrostka.

Jednak obejście: pełna kopia pliku do /home/<myuser>/snap/<appname>/<somenewdirectory>mnie zadziałała. Utrzymywanie pełnych kopii zestawu danych było dla mnie jeszcze niewykonalne, ale istnieje wiele narzędzi, które pomagają poradzić sobie z takim ograniczeniem; ręczna kopia rekurencyjna przed użyciem przystawki, a kopiowanie zmodyfikowanych plików z powrotem po jest opcją, jeśli twój zestaw danych jest mały, a nawet atomowy

Aby wymienić kilka narzędzi do kopiowania plików, które mogą ci pomóc:

  • cp --verbose --archive --recursive /somedir ~/snap/somediroraz źródło / cel na odwrót
  • tar -C / -c somedir | tar -C ~/snap/ -xv jest przykładem kopiowania pliku na podstawie tar
  • rsync --archive /somedir ~/snap/somedir, rsync jest popularny i ma wiele opakowań / rozszerzeń

  • użyteczność tworzenia kopii zapasowych na podstawie plików (przykład graficzny :)grsync powinna być użyteczna, ponieważ głównym celem jest duplikowanie zestawu danych do przodu i do tyłu w razie potrzeby

  • Klony git, być może jednak lokalne klony domyślnie używają dowiązań twardych, więc jeśli używasz git do zarządzania systemem plików io w mgnieniu oka, zachowaj ostrożność, że bez wyłączenia twardych dowiązań w czasie klonowania klon git może być niedostępny dla przystawki.

ThorSummoner
źródło
1
Nie zadziała to w przypadku powszechnego użycia dysku NAS z wieloma terabajtami zamontowanego w systemie plików NFS.
Peter V. Mørch
1

Nie mogę opublikować komentarza, ponieważ nie mam wystarczającej reputacji, ale mogę opublikować odpowiedź ..?

W każdym razie, to nie jest pierwotny problem, ale jeśli ktoś inny, jak ja, przyszedł tu szukać sposobu, aby dać dostęp do / multimediów przystawce (na przykład, aby użyć Darktable, który bez niego jest w zasadzie bezużyteczny), możesz to zrobić albo poprzez interfejs sklepu z zatrzaskami, albo przez dodanie „wtyczki” nośnika wymiennego do aplikacji Snap w wierszu poleceń. Niektóre dokumenty tutaj: https://snapcraft.io/docs/interface-management

Daniel Murray
źródło
1
Witam i zapraszam na Ask Ubuntu! Odpowiedzi tylko na link są odradzane, ponieważ mogą stać się nieaktualne, jeśli łącze wygasa w przyszłości. Czy mogę zasugerować dodanie kilku szczegółów do swojego postu (np. Podsumowanie kroków / zalecanych sposobów użycia)?
FloT