スナップに/ somedirへのアクセスを与える方法


19

足をスナップで濡らしているところです。vlcをインストールしましたが、使用したいと思います。すべてのメディアは/storeNFSマウントの下にインストールされています。そして、スナップはそのディレクトリへのアクセスを許可しません。

グーグルでの後、私は下のファイルにアクセスできることを理解するようになった/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
doug

1
ありがとう。私が試していない--classic--devmode-どちらも働きました。しかし、私は明示的にアクセスを許可したいのです/storeが、すべてのものではありません/supersecret
PeterV.Mørch、

2
スナップ用に開いているチケット/バグ/機能リクエストはありますか?その機能も欲しい!
クラベミール2018

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 issue 1643706も参照してください


1
こんにちは、スナップされた開発者がそのコードを担当しています。驚いたことに、それは実際には正しいことです。ホストのファイルシステムとそれに含まれる可能性のあるランダムなディレクトリを複製することはできません。/ storeを使用する場合、他の誰かが/ stashまたは/ whateverを使用する可能性がありますが、これを一般的に機能させる方法はありません。私の推奨は、単に/ home / ...または/ mediaのいずれかの希望する場所にメディアをマウントすることです。次に、データと物事が正しく機能することを管理する既存のシステムに分類されます。
Zygmunt Krynicki

@ZygmuntKrynickiまたは/ mntの下(リムーバブルメディアインターフェイスがスナップに接続されている場合)。
-jarno

5
@ZygmuntKrynicki私もびっくりです。デフォルトのマウントポイントは、構成ファイルを使用して構成し、強制しないでください。
markhor

3
@ZygmuntKrynicki立ち寄って、コードが意図したとおりに機能することを説明してくれてありがとう。私はあなたが書いたものに敬意と完全に同意しません。パスをハードコーディングすることは非常に貧弱な習慣であり、セキュリティの名においてさえ、意味のある正当化はできません。それは単なる基本的な柔軟性です。
ステフェイン・グーリッホン

1

したがって、上記の私のミニ答えを拡張すると、それを一般的で安全かつ健全な方法で行う方法はありません。私は誰もがファイルシステムをカスタマイズすることを愛していることを知っていますが、それにはいくらかのコストがかかり、これはその1つです。

最終的に、XDGポータルでの作業を通じて、特定のアプリケーション(特にグラフィカルアプリケーション)は、最近導入されたGTK APIの一部を使用していると言った場合を除き、任意の場所にあるファイルにアクセスできます。これは、制限された状態で実行されている場合、信頼できるヘルパーに連絡し、ファイルピッカーのように見える信頼できるUIをポップアップ表示し、特別なFUSEファイルシステムと通信して、ファイルを(任意の場所で)/ run /の特別なものとして公開します。 ..アプリケーションが認識し、問題が発生しない場所。

これは、メディアプレーヤーやワードエディターなどのファイルピッカーフレンドリーなもののために設計されています。でホストされているLinuxツリーは、/codezあまりうまく機能しません。


2
こんにちはZygmunt、答えてくれてありがとう。私の驚きは立っています。「誰もがファイルシステムをカスタマイズするのが好きなのは知っていますが、それにはある程度のコストがかかり、これもその1つです。」私が理解しているように:あなたは気づいていますが、これがやりたいことの一般的なことであることを無視することを選択しますか?過去15年間、この命名規則の他のコストは知りません。
PeterV.Mørch

3
1のような行入れなかった理由何らかの理由があるextradirs=/store:/other/locationかで何かが/etc/snapd.conf/etc/snapd/conf.d/vlc.conf。他の多くのLinuxアプリケーションと同じように。Dockerなどでは問題なく動作するようです。これは、ApacheがハードコードしたかのようですDocumentRoot /var/www
PeterV.Mørch

1
ただし、ここに時間を割いていただきありがとうございます、Zygmunt。ありがとうございました。
ピーターV.モーチ

それはそれほど簡単ではありません。主な問題はapparmorではなく、実行時にアプリケーションが別のルートファイルシステムで実行されているという事実です。そのプロセスの観点からは、/ storeは存在しません-マウントされていないということではなく、単にディレクトリではありません。snap-confineが行っていることは、ホストシステムからアプリケーションマウント名前空間にいくつかのパスをもたらすことです。snapsのルートファイルシステムは読み取り専用であるため、新しいマウントポイント(/ storeなど)を簡単に挿入することはできません。
Zygmunt Krynicki

@PeterV.Mørchこれらのファイルを/ mntにマウントまたは移動し、リムーバブルメディアインターフェイスがスナップに接続されていることを確認し、必要に応じて元の場所にシンボリックリンクを作成します。
jarno

1

ターゲットディレクトリのマウント先/home/*/snap/はオプションです。単純なバインドマウントは私にとっては機能しませんでした。ハードリンクも、ターゲットファイルまたはディレクトリから提案されたスナップディレクトリまたはそのサブディレクトリへのシンボリックリンクも機能しませんでした。この制限は、/home/*/ディレクトリの外部に存在するターゲットファイルが原因である可能性があります/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クローンがスナップにアクセスできない可能性があることに注意してください。


1
これは、NFSマウントされたマルチテラバイトNASドライブの一般的な使用例では機能しません。
PeterV.Mørch、

1

評判がよくないのでコメントは投稿できませんが、回答は投稿できます。

とにかく、これは元の問題ではありませんが、私のような他の誰かが/ mediaへのアクセス権をスナップに与える方法を探している場合(たとえば、Darktableを使用するために、基本的にはそれなしでは役に立たない)、それを行うことができますsnap-storeインターフェースを使用するか、コマンドラインでsnap appにリムーバブルメディアの「プラグ」を追加します。ここにいくつかのドキュメント:https : //snapcraft.io/docs/interface-management


1
こんにちは、Ubuntuにようこそ!リンクのみの回答は、リンクの有効期限が切れると陳腐化する可能性があるため、お勧めしません。投稿にいくつかの詳細を追加することをお勧めしますか(たとえば、使用する手順/推奨の要約)?
FloT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.