rcmdnk's blog

20131122_chocolatey_200_200

久しぶりに Chocolatey を実行しようと思って Chocolatey自体をアップデートしたら 色々変更があったのでそれらの処置について。

CygwinからChocolateyを呼ぶ方法

Chocolateyのchocoコマンドなんかは コマンドプロンプトやPowershellで使うことが出来ますが、 Cygwinからは通常使えません。

ただ、Powershell等は普段使わないのでどうにも使いづらいものです。

ここで、Cygwinでは

$ cmd /c choco...

などと書くとコマンドプロンプト用の実行ファイルなどがCygwinから実行出来ます。 なので、各コマンドをaliasでラップして使える様にしたというのがこの話。

Chocolateyを導入: Cygwinからも使う

ただし、アップデート後はここに書かれている様な方法だと下に書くように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

です。

Installation · chocolatey/chocolatey Wiki

また、Chocolateyによるインストールはシステム全体用、という方針に変わったこともあるようで、 上記のコマンドプロンプトによるインストールを行うと、 PATHChocolateyInstall という値の設定はユーザーの環境変数ではなく、システムの環境変数 に設定される様になっています。

上で手動で変更する際には余りその辺注意されてませんが、 通常個人だけで使うだけならユーザー変数で十分ですが、 他のユーザーも使う可能性がある場合は

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
if [[ "$OSTYPE" =~ "cygwin" ]];then
  # Chocolatey
  chocolatey='/cygdrive/c/ProgramData/chocolatey/chocolateyinstall/chocolatey.cmd'
  alias choco="$chocolatey"
  alias cinst="$chocolatey install"
  alias clist="$chocolatey list"
  alias cpack="$chocolatey pack"
  alias cpush="$chocolatey push"
  alias cuninst="$chocolatey uninstall"
  alias cup="$chocolatey update"
fi

こんな感じで直接chocolatey.cmdを呼ぶコマンドにaliasしておきます。

また、以前はtmp/tempの環境変数がセットされてるとエラーが出ていたので、

unset tmp temp

みたいなセッティングも入れてましたが今回はセットされてても大丈夫だったので 外してあります。

Sponsored Links
Sponsored Links

« Macのプレビューでサインを追加する Firefox31へアップデートしたらブックマークツールバーをナビゲーションツールバーに置けなくなった »

}