久しぶりに Chocolatey を実行しようと思って Chocolatey自体をアップデートしたら 色々変更があったのでそれらの処置について。
CygwinからChocolateyを呼ぶ方法
Chocolateyのchoco
コマンドなんかは
コマンドプロンプトやPowershellで使うことが出来ますが、
Cygwinからは通常使えません。
ただ、Powershell等は普段使わないのでどうにも使いづらいものです。
ここで、Cygwinでは
$ cmd /c choco...
などと書くとコマンドプロンプト用の実行ファイルなどがCygwinから実行出来ます。 なので、各コマンドをaliasでラップして使える様にしたというのがこの話。
ただし、アップデート後はここに書かれている様な方法だと下に書くようにCygwinからは実行出来くなります。
Chocolateyをアップデート: インストール箇所が変わった
Chocolatey自体も自身のupdate
コマンドを引数なしで使うとアップデートできます。
$ choco update
これでアップデートできるのですが、その後、
choco
コマンドを実行してみると、
まずは下に書くようにCygwinからは実行出来なくなってたんですが、
さらに、コマンドプロンプトなどから行っても、実行できるものの
C:\> choco
The default install location has been changed to 'C:\ProgramData\chocolatey'.
This install will be updated to that location in the next version. It
is strongly suggested you move this installation to the new location
as soon as possible to limit write access from all users. Do not forget
to update PATH & ChocolateyInstall environment variables.
...
の様なWarningが出るようになりました。
DefaultChocolateyInstallReasoning · chocolatey/chocolatey Wiki
Migrate Old Chocolatey Directory to ProgramData · chocolatey/chocolatey Wiki
[Enhancement] Default install in ProgramData · Issue #452 · chocolatey/chocolatey
Add deprecation warning for default installation location · Issue #494 · chocolatey/chocolatey
インストールの説明ページでも
インストール時に行うPATHの設定先がProgramData
下になっています。
コマンドプロンプトからのインストールは
> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\ProgramData\chocolatey\bin
です。
また、Chocolateyによるインストールはシステム全体用、という方針に変わったこともあるようで、
上記のコマンドプロンプトによるインストールを行うと、
PATH
やChocolateyInstall
という値の設定はユーザーの環境変数ではなく、システムの環境変数
に設定される様になっています。
上で手動で変更する際には余りその辺注意されてませんが、 通常個人だけで使うだけならユーザー変数で十分ですが、 他のユーザーも使う可能性がある場合は
C:\ProgramData\chocolatey\bin;
というPATHを システムの環境変数に加えておくべきです。
実行ファイルが変更された
以前は、...\Chocolatey\bin\:
の下にchoco.bat
の様なバッチファイル
が入っていました。
ですが、今回アップデートした所、これらはexe
ファイルに取って代わられています。
[Enhancement] Replace Batch Redirector with Shims · Issue #372 · chocolatey/chocolatey
元のbat
ファイルも新しいexe
ファイルも
...\Chocolatey\chocolateyinstall\chocolatey.ps1
(を呼んでるchocolatey.cmd
)
へのラッパーファイルみたいなものなんですが、
Shims
という機能を使ってexe
の形で良い物が出来る、ということで
取って代わられたようです。
これを呼んでみると
$ choco
Exception.ToString() が失敗したため、例外文字列を表示できません。
というエラーが。
ここでのchoco
は実際には$ cmd /c choco
です。
直接choco
を呼んで見ても同じエラーが。
どうも呼べない様子。
そこで、
...\Chocolatey\chocolateyinstall\chocolatey.cmd
の方を直接呼ぶとうまくいきました。
こちらはcmd /c
なしで直接呼んでもいけます。
なので、
1 2 3 4 5 6 7 8 9 10 11 |
|
こんな感じで直接chocolatey.cmd
を呼ぶコマンドにaliasしておきます。
また、以前はtmp
/temp
の環境変数がセットされてるとエラーが出ていたので、
unset tmp temp
みたいなセッティングも入れてましたが今回はセットされてても大丈夫だったので 外してあります。