Go to list of users who liked
Share on X(Twitter)
Share on Facebook
Scoopのインストール先を変更する
システムドライブにデータやツールは置きたくないという宗教的理由から、C:は意図的に小さめ(100GB)でパーティション切ってます。なのでChocolateyやScoopのようなパッケージマネージャでどかどか放り込まれるのは心理的にも物理的にもつらい。
最初\scoop\以下を別ドライブに移動してc:\Users\<ユーザー名>にシンボリックリンク張ってみたんですがscoop自身がなかでジャンクションを使用してるのでリンクが循環参照しまくって気持ち悪いことに。(というか先にマニュアル読めっていう)
Scoopとは
Windows用のコマンドラインインストーラ
aptとかpacmanとかapt-cygとかpipとかgemとかchocolateyとかその辺のやつみたい
ScoopでWindowsにおける開発環境構築を最適化しよう
インストール先の指定方法
scoop/lib/core.ps1 (GitHub)の6~10行目付近によると環境変数 SCOOPとSCOOP_GLOBAL (AllUsers用)を設定しておけばよいようです。規定値は以下
SCOOP =C:\Users\<ユーザー名>\scoop
SCOOP_GLOBAL =C:\ProgramData\scoop
…というか普通にwikiに記載がありました (だから先に読めっていう)
Installing Scoop to Custom Directory
Assuming the target directory is D:\Applications\Scoop, in a PowerShell command console, run:
[environment]::setEnvironmentVariable('SCOOP','D:\Applications\Scoop','User')$env:SCOOP='D:\Applications\Scoop'iex(new-objectnet.webclient).downloadstring('https://get.scoop.sh')
Scoopのアンインストールと引っ越し
Scoopはシステム依存性の少ないソフトですがジャンクションやshimのパスは張り直ししないと無理みたい。一度アンインストールして入れ直しします。
これを
C:.├─ProgramData│ └─scoop│└─Users └─<ユーザー名> └─scoopこんな風にしたい
D:.├─scoop│ ├─global│ ││ └─<ユーザー名>ぶっちゃけglobalとuserを分ける意味がないフォルダ構成ですがキニシナイ
個人PCなんでglobalはほぼ使っていないです。ただ、busyboxやgowみたいに入れると既存の同名のshimが大量上書きされるものあるのでエイリアスのテスト展開場所として一応設定しています。一か所で管理できるほうが楽かなと。
scoop以下をバックアップ
scoopのフォルダ構成
└─scoop ├─apps ├─buckets ├─cache ├─persist └─shimsバックアップ先はD:\scoop_bkup、フォルダ構成は引っ越し先と同じにしました。
D:.├─scoop_bkup│ ├─global│ │ └─apps│ ││ └─<ユーザー名>│ ├─apps│ ├─buckets│ ├─cache│ └─persist\apps内のジャンクションと\shimsを除いてバックアップします。
> robocopy /E /xj %USERPROFILE%\scoop d:\scoop_bkup\%USERNAME% /xd shims> robocopy /E /xj %ProgramData%\scoop d:\scoop_bkup\global /xd shims時間かかるので面倒だったらアプリの設定が入ってる\persistだけでもいいんですが、\bucketsと\cacheをとっとくと後のリストアが少し楽になります。
導入済アプリのリストア 用スクリプトを作成
> for /f "delims=;" %i in ('dir /b/ad %USERPROFILE%\scoop\apps') do ( echo scoop install %i>>d:\scoop_bkup\restore.ps1 )> for /f "delims=;" %i in ('dir /b/ad %ProgramData%\scoop\apps') do ( echo sudo scoop install %i --global>>d:\scoop_bkup\restore_global.ps1 )buckets外からインストールしたアプリがある場合はrestore*.ps1をテキストエディタで開いてjsonの場所をコピペしておきます。
> scoop listInstalled apps: nyagos 4.2.2_1 [https://gist.githubusercontent.com/dohzoh/75eab6bd7a46d3625ddcd332618e4518/raw/b8e98b5f9e0c14317a9abbafe176081b0cf97438/nyagos.json]#scoopinstallnyagosscoopinstallhttps://gist.githubusercontent.com/dohzoh/75eab6bd7a46d3625ddcd332618e4518/raw/b8e98b5f9e0c14317a9abbafe176081b0cf97438/nyagos.jsonScoopをアンインストール
> scoop uninstall scoopなんかエラーが出た時はC:\Users\<ユーザー名>\scoop以下を手動で削除
環境変数を設定
インストールしたい場所を指定、この時点では実フォルダはなくても良いようです。
管理者権限でプロンプトを起動
> setx SCOOP d:\scoop\<ユーザー名>> setx SCOOP_GLOBAL d:\scoop\global /m(2020.06.02追記d:\scoop\%USERNAME%の指定ではうまくいかないようなので修正しました。環境変数使わないで直値で書いてください。)
Scoopの再インストール
> powershellPS> set-executionpolicy unrestricted -s cuPS> iex (new-object net.webclient).downloadstring('https://get.scoop.sh')確認
PS>Get-CommandscoopCommandTypeNameVersionSource----------------------------ExternalScriptscoop.ps1D:\scoop\<ユーザー名>\shims\scoop.ps1バックアップデータのリストア
\buckets\cache\persistに関しては丸コピーでいけるので\appsのみ除外してリストア
\cache内にアーカイブが残ってれば後の工程でアプリの再ダウンロードが発生しないので多少早く終わります。
PS> exit> robocopy /E /xo D:\scoop_bkup\%USERNAME% %SCOOP% /xd apps> robocopy /E /xo D:\scoop_bkup\global %SCOOP_GLOBAL% /xd appsアプリの再インストール
git入ってないとScoop本体のアプデできませんてメッセージが出るので一番最初にscoop install gitしたほうがいいかも
> powershell -ExecutionPolicy RemoteSigned -File d:\scoop_bkup\restore.ps1> powershell -ExecutionPolicy RemoteSigned -File d:\scoop_bkup\restore_global.ps1時間かかるのでしばらく待ちます。
その他のリストア
MSYS2やcygwinのように\apps内に固有環境を構築するものはファイラーで確認しながら個別に手動で戻します。終わったらバックアップフォルダは丸ごと削除
所感
めんどくさい設定をよしなにしてくれるためのパッケージマネージャなのに、環境設定を弄って使うというのは邪道な気がしなくもない。linuxみたいに入れる場所がきっちり固定化されてる環境から見たらアホなことやってるように見えるんだろうなあ。
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
