web-dev-qa-db-ja.com

スナップパッケージを別の場所/ディレクトリに移動する

インストールしたスナップパッケージをホームディレクトリに移動したい。スナップパッケージは.debパッケージよりわずかに大きいため、ルートパーティションにスペースが必要です。パッケージは/var/lib/snapd/snapsにあり、/snap/app_dirにパッケージをマウントすることで動作していることを知っています。シミュレートしようとしましたが、うまくいきませんでした。

5
ultimatex

私はついに道を見つけました。

  • 最初にスナップパッケージを目的の場所に移動します。 snap_app.snapを移動するアプリとして指定してください。パッケージを/var/lib/snapd/snaps/snap_app.snapから~/snaps/snap_app.snapに移動します。
  • 次に、/etc/systemd/system/snap-snap_app-90.mountのマウントオプションを変更する必要があります。ファイル名の番号は異なる場合があります。 What=/snap_app_loactionの下にディレクティブ[Mount]があります。新しいスナップパッケージの場所に変更します。
  • 最後に、スナップパッケージを/var/lib/snapd/snaps/にシンボリックリンクする必要があります。
    例:ln -s ~/snaps/snap_app.snap /var/lib/snapd/snaps/snap_app.snap

スナップパッケージは、最初は/snap/snap_appディレクトリにマウントされます。 mountで確認できます。マシンをリブートすると、すべて完了です。

5
ultimatex

スナップのインストールディレクトリを変更する

これは多くの人が求める一般的な問題であり、スナップ開発者はすぐに解決するつもりはないようですので、検索中にいくつかの解決策が提案されました。

最初の解決策はコミュニティによって強く拒否されましたが、試みませんでしたが、シンボリックリンクを使用してディレクトリにリンクし、スナップにつながりますこの方法は、コミュニティがシンボリックリンクでは機能しないという回答をコミュニティが返すため、機能しないようです。

2番目の解決策は、mount --bindディレクトリ/val/lib/snapd/snapsです。これは、既にインストールされているアプリケーションでは問題なく動作しますが、新しいアプリケーションのインストールに失敗しましたディレクトリを別のパーティションに移動していたからです。これにより、スナップアプリケーションと/var/lib/snapd/cacheにあるキャッシュディレクトリとのハードリンクに関するエラーが発生しました。場所が同じパーティションにあるかどうかにかかわらず、このソリューションが機能するかどうかはわかりません。しかし、これがスナップディレクトリを移動して、パーティションから別のスペースに領域を解放する理由です。

3番目の作業オプションは、/var/lib/snapdディレクトリ全体を移動し、mount --bindディレクトリに別の場所から移動し、私とここに手順があります。

次の手順でrsyncが完了したら、/var/lib/snapd内のデータを別の場所にバックアップできます。プロセス全体が正常に完了するまで、必要に応じてバックアップデータを削除できます。より多くのスペースを解放します。

##############################################################################
# Take Care this section may break the System !!!
##############################################################################
##Move snap folder to Home instead of root.
#Create the directory : you can change the location
mkdir /home/$USER/snap/snapd

#Copy the data
Sudo rsync -avzP /var/lib/snapd/  /home/$USER/snap/snapd/

#Do backups
Sudo mv /var/lib/snapd /var/lib/snapd.bak
Sudo cp /etc/fstab /etc/fstab.bak

#Change fstab (Change $USER with your name or change the path totally)
echo "/home/$USER/snap/snapd /var/lib/snapd none bind 0 0" | Sudo tee -a /etc/fstab

#remount fstab Or reboot.
Sudo mkdir /var/lib/snapd
Sudo mount -a

if ls  /var/lib/snapd/ | grep snaps
then
    echo "Re-mounting snapd folder is done successfully. !!!!"
    Sudo rm -rf /var/lib/snapd.bak
else
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "

    # Trying to revert automatically
    Sudo cp /etc/fstab.bak /etc/fstab

    Sudo mount -a
    Sudo umount /var/lib/snapd

    Sudo mv /var/lib/snapd.bak /var/lib/snapd

    echo "Files located at ~/snap/snapd should be removed, but it keeped for
    recovery until you ,manually, reboot the system and make sure the service
    is running correctly then manually you can remove that folder ~/snap/snapd
    !!!!!!!!!!!!!!, you should do that manually."

fi
##############################################################################
# Take Care the pervious section may break the System !!!
##############################################################################

参照資料

  1. 特定のスナップのカスタムディスクの場所 issue
  2. ubuntuに質問する(最良の解決策ではありません) リンク
  3. スナップディレクトリの移動でシンボリックリンクの代わりにバインドマウントを使用することの提案 リンク
  4. バインドマウントとシンボリックリンクの違い リンク
  5. バインドマウントを永続的にする
7
Muhammad Yusuf