2015年6月23日火曜日

Chocolateyでカスタムパッケージを作成する

更新:
2015-06-26 チェックサムの設定方法を追加

はじめに

気が向きましたので、 前回 に引き続きChocolateyでカスタムパッケージの作り方を書きます。 前回 カスタムのリポジトリ(リポジトリではなくソースというらしい)を作成しましたが、 リポジトリ自体は作れたものの、ソフトウェアのダウンロード自体は外部サイトに接続していました。

これでは外からダウンロードしちゃだめ、という場合など使えません。事前にダウンロードして 置く方法などありそうですが、見つからなかったので、自分のカスタムパッケージを作成する方法を書きたいと思います。 例としてサクラエディタをインストールする方法を書きます。 作成は最低限の設定で行いますので、詳しく知りたい方は、下記サイトの資料を見てください。

https://github.com/chocolatey/choco/wiki/CreatePackages

ちなみに私はあまり読んでいません。すみません。

サクラエディタのパッケージを作成する

Chocolateyのパッケージの作成は、パッケージをインストールするときに使った chocoコマンドを使用して行うことができます。

まず、適当なディレクトリで新規作成コマンドを作成します。 ここでは、サクラエディタをインストールしますが、Chocolateyの流儀に則って、 パッケージ名をsakura.installとします。:

> D:\chocolatey>choco new sakura.install

以下のような出力がされます。:

Chocolatey v0.9.9.6
Creating a new package specification at d:\chocolatey\sakura.install
Generating template to a file
 at 'd:\chocolatey\sakura.install\sakura.install.nuspec'
Generating template to a file
 at 'd:\chocolatey\sakura.install\tools\chocolateyinstall.ps1'
Generating template to a file
 at 'd:\chocolatey\sakura.install\tools\chocolateyuninstall.ps1'
Successfully generated sakura.install package specification files
 at 'd:\chocolatey\sakura.install'

sakura.installというディレクトリが作成され、中にテンプレートとなるファイル が置かれますので、sakura.install.nuspecファイルにパッケージ情報を記入します。

ここでは最低限で、なくてもよい項目はすべて削って下記のように作成しました。

<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>sakura.install</id>
    <version>2.2.0.1</version>
    <authors>Sakura Editor Project</authors>
    <description>A Japanese text editor</description>
  </metadata>
  <files>
    <file src="tools\**" target="tools" />
  </files>
</package>

その次にPowerShellで書かれたインストールスクリプトchocolateyinsall.ps1を変更します。

$ErrorActionPreference = 'Stop';

$packageName = 'sakura.install'
$installerType = 'EXE'
$url = 'http://jaist.dl.sourceforge.net/project/sakura-editor/sakura2-installer/2.2.0.1/sakura_install2-2-0-1.exe'
$silentArgs = '/SP- /VERYSILENT'
$validExitCodes = @(0)

Install-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "$url"

インストールは.exe、.msi、.msuに対応しています。少し書き方は異なりますが、zipファイル のパッケージもインストールすることができます。

ダウンロード用のURLとサイレントインストール用のオプションは自分で調べなければなりません。

URLは64bit版がある場合、それも記述します。

サイレントインストール用のオプションは、ものによって違いますが、ググるかコマンドプロンプト でインストーラーの後ろに/?オプションを付けて動かすと調べられることが多いです。

ダウンロードしたパッケージをチェックサムでチェックしたい場合は下記コマンドで チェックサムを取得します。:

D:\chocolatey>C:\ProgramData\chocolatey\tools\checksum.exe -f=sakura_install2-2-0-1.exe -t=sha1
C815F9AA276C7E294FA0C5818EC7207B635337AF

上のchocolateyinsall.ps1のInstall-ChocolateyPackageの部分を下記のように書き換えます:

$checksum = 'C815F9AA276C7E294FA0C5818EC7207B635337AF'
$checksumType = 'sha1'
Install-ChocolateyPackage "$packageName" "$installerType" "$silentArgs" "$url" -checksum $checksum -checksumType $checksumType

同じようにアンインストールスクリプトchocolateyuninstall.ps1を編集します。

$ErrorActionPreference = 'Stop';

$packageName = 'sakura.install'
$registryUninstallerKeyName = 'sakura editor_is1'
$installerType = 'EXE'
$silentArgs = '/VERYSILENT'
$validExitCodes = @(0)

$osBitness = Get-ProcessorBits

if ($osBitness -eq 64) {
  $file = (Get-ItemProperty -Path "hklm:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\$registryUninstallerKeyName").UninstallString
} else {
  $file = (Get-ItemProperty -Path "hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$registryUninstallerKeyName").UninstallString
}

Uninstall-ChocolateyPackage -PackageName $packageName -FileType $installerType -SilentArgs $silentArgs -validExitCodes $validExitCodes -File $file

アンインストーラーの場所をレジストリから調べるため、少し長くなっています。

$registryUninstallerKeyNameを調べるためには、スクリプト中に記述されているレジストリ をregeditなどで探します。

ここまでで設定は終わりです。最後に下記コマンドでパッケージを作成します。:

D:\chocolatey>cd sakura.install

D:\chocolatey>choco pack sakura.install.nuspec
Chocolatey v0.9.9.6
Attempting to build package from 'sakura.install.nuspec'.
Successfully created package 'sakura.install.2.2.0.1.nupkg'

作成したパッケージをテストする

インストールは作成されたsakura.install.2.2.0.1.nupkgファイルさえあれば、 行うことができます。作成したパッケージをテストしてみましょう。

nupkgファイルのあるディレクトリで下記コマンドでインストールを行うことができます。:

D:\chocolatey\sakura.install>choco install sakura.install -s %cd% -f

さらにアンインストールは普通に下記で行います。:

D:\chocolatey\sakura.install>cuninst sakura.install

ファイルサーバーからパッケージをインストールする

さて、もともとインターネットに接続しないでパッケージをインストールするというのが、 本稿を書き始めたきっかけでした。社内のファイルサーバーなどからサクラエディタを ダウンロードするためには、chocolateyinsall.ps1のURLを下記のように変更します。 (ここではファイルサーバーはfs01とします。):

$url = '\\fs01\chocoletey\sakura_install2-2-0-1.exe'

そして、ファイルサーバーfs01のchocoleteyにサクラエディタのインストーラー sakura_install2-2-0-1.exeを置いてやります。

自分のリポジトリにパッケージを置かなければなりません。 前回 の記事を参考にして ください。ただし、置くのはパッケージフォルダではなくsakura.install.2.2.0.1.nupkg ファイルとなります。

おわり。

0 件のコメント:

コメントを投稿