0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

scoopのcache, bucketsを共用化する話

Last updated at Posted at 2022-09-09

概要

scoopのキャッシュフォルダを、Windowsファイル共有フォルダに配置、複数マシンで共用化する。

最初にいいわけ

これは「もしかして他の人がすでに有用な記事を書いているかもしれないが、被ったり恥ずかしいバッドノウハウであることを恐れずに自分の手持ちネタを晒す」記事です。

はじめに

scoopのパッケージ管理の仕組みは、単純化されている一方で洗練されていて、この仕組みに乗っかろうと腹をくくると非常に使い勝手がよい。
(変なことを自分でいろいろ考えて決める必要がない)

一方で、一般ユーザーにはあまり馴染みのないジャンクションを多用しているので、なにができるのか、なにをやったらよくて何をやったらいかんのか、直感的にわかりづらい。

自分の出した結論

共用していいもの

  • cache
  • buckets

共用したらいかんもの

  • apps
  • shims
  • persist

どうやって共用化するか

シンボリックリンクを使う。

> ren cache cache.orig
> mklink /d cache \\some-host\scoop\shared\cache
> ren buckets
> mklink /d buckets \\some-host\scoop\shared\buckets

各bucketsの同期には、おそらくほぼ git を使っている(はず)だが、最近のgit(いつ頃からかはちょっと忘れた。。)では、共有フォルダ配下のリポジトリ更新時に警告が出る1

警告を出さなくするには、safe directory設定をする。
警告に従ってもいいが、個人フォルダの .gitconfig を直接追記編集するほうが楽かもしれない。

.gitconfig
[safe]
	directory = %(prefix)///some-host/scoop/shared/buckets/main
	directory = %(prefix)///some-host/scoop/shared/buckets/extras
	directory = %(prefix)///some-host/scoop/shared/buckets/java
	directory = %(prefix)///some-host/scoop/shared/buckets/k2ok

上記の例のとおり、リポジトリごとのrootパスを指定しないといけないらしい。

apps, persistを共用化できない理由

ジャンクションの特性による。

scoopで多用している ジャンクション とは、NTFSファイルシステム 特有のもので、任意のユーザが作成可能である2

ところがこのジャンクションは、 *.lnk (ショートカット)や *.url (インターネット ショートカット)のような「実体は只の一般ファイル」であるのと異なり、「ローカルの」NTFS上にしか存在することしかできない。

言い換えると、「共有フォルダの実態がNTFSであったとしても、ネットワーク経由では作成できない」。

appsフォルダの扱い方としては、各バージョンのファイル一式をバージョンのフォルダに展開した上で、インストール/アップデートしたバージョンを「current」というジャンクションで参照させる仕組みになっている。

ジャンクションが共用可能なファイルシステムがあれば別だが、少なくとも自分は存在を知らない。

shimsを共用化できない(?)理由

もしかすると(条件つきで)共用化できるかもしれないけど。。。

shimsに配置されるのは、「appsフォルダの実行ファイルを起動するコマンド群」であるはず。

で、これ自体は「実行ファイル」のはずなので、少なくとも32bit環境と64bit環境のものを混在させることはできない。

じゃぁアーキテクチャ一緒な環境同志だったら共用できるかというと、そもそもappsを共用できてないので、存在しないappsを参照するshimsが存在することになるんじゃない?

当然、配置先には存在しないので起動失敗するだろうけど、、、

shimsで占有されるのファイルサイズを考えたら、無理に共有する必要なくない?という話。

その他補足

じゃぁ、「複数ユーザーでcache, bucketsは共用できるの?」という話になると思うけど、おそらくできないと思う。

同時実行される前提で排他制御などしてないのでは。

gitsafe-directory の警告を出すのも、複数ユーザで同時に作業フォルダを操作することなど想定していないので禁止したいのでしょ。

とはいえ、これは自分のあてずっぽうなので、違うようならコメント等で教えていただけると嬉しいです。

  1. おそらく将来的には禁止するのだろうと思われる。

  2. scoopが基本的に管理者権限を必要としない仕組みも、このジャンクションの特性に依存してる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?