anatomy-of-a-chocolatey-package

Chocolatey パッケージの分析

Chocolatey パッケージの分析

このブログでは、Chocolatey パッケージについて掘り下げて分析したいと思います。

技術を利用するときには、それを「ブラックボックス」と考えて利用すれば十分な場合もありますが、IT専門家は、得てして、テクノロジーがどのように機能し、バックグラウンドで何が起こっているかを正確に知りたいと興味を持つことが多いようです。

Chocolatey は、ソフトウェアの更新やインストールなどを簡単に管理できる魔法のツールの1つです。バックグラウンドで何が起こっているのか、あるいはパッケージが実際には何なのかさえ、知らなくても、使うことができます。

解凍してみましょう

Chocolatey はソフトウェアをパッケージ化するために NuGet システムを使用しています。パッケージの拡張子は .nupkg ですが、技術的には名前がその拡張子つきに変更されただけの単なる zipファイルです。

関連ブログ: Chocolatey は、かなりおいしい

内部に何が入っているかを見るために、Chocolatey パッケージをダウンロードします。choco download を使えます。

C:\temp> choco download urbackup-client

ここで例として使用するパッケージは、UrBackup と呼ばれるものです。これは、筆者が実際に Chocolatey コミュニティのリポジトリで管理しているオープンソースの無料バックアップソフトウェアです。Chocolatey を使用してパッケージをダウンロードした後、重要なファイルをフォルダの中に展開して見ることができます。

C:.

└───urbackup-client

    │   urbackup-client.nuspec

    │

    └───tools

        │   chocolateyinstall.ps1

        │

        └───files

                UrBackup Client NoTray 2.2.6.exe

                UrBackup Client NoTray 2.2.6.exe.ignore

最初にチェックするファイルは .nuspec です。これは、パッケージに関するメタデータを保持するXML形式のファイルです。パッケージ名、バージョン、作成者、プロジェクトURL、説明などの情報をここに入れることができます。

C:\temp\download\urbackup-client> cat .\urbackup-client.nuspec

<?xml version="1.0"?>

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">

  <metadata>

    <id>urbackup-client</id>

    <version>2.2.6</version>

    <title>UrBackup-Client (Install)</title>

    <authors>Martin Raiber</authors>

    <owners>Martin Raiber</owners>

    <projectUrl>http://www.urbackup.org/</projectUrl>

    <requireLicenseAcceptance>false</requireLicenseAcceptance>

    <description>UrBackup is an easy to setup Open Source client/server
backup system, that through a combination of image and file backups
accomplishes both data safety and a fast restoration time.

File and image backups are made while the system is running without
interrupting current processes.

UrBackup also continuously watches folders you want backed up in order to
quickly find differences to previous backups. Because of that, incremental
file backups are really fast.

Your files can be restored through the web interface, via the client or
the Windows Explorer while the backups of drive volumes can be restored
with a bootable CD or USB-Stick (bare metal restore).

A web interface makes setting up your own backup server really easy.
For a quick impression please look at the screenshots here.

Currently there are over 8300 running UrBackup server instances (with
auto-update enabled) with some instances having hundreds of active
clients.</description>

    <tags>urbackup-client admin backup</tags>

  </metadata>

</package>

(訳者注:説明<explanation>部分の日本語訳は以下の通りです。
UrBackup は、セットアップが容易なオープンソースのクライアント/サーバー・バックアップシステムで、イメージとファイルのバックアップを組み合わせて、データの安全性と迅速な復旧時間を実現します。
ファイルとイメージのバックアップは、現行プロセスを中断することなく、システムの稼働中に行われます。

UrBackup はまた、以前のバックアップとの差異を即座に検出するため、バックアップするフォルダを継続的に監視します。そのため、増分ファイルのバックアップは非常に高速です。
ファイルはクライアントまたは Windows エクスプローラ経由で Web インタフェースを通じて復元できますが、ドライブボリュームのバックアップは起動可能なCDまたはUSBスティックで復元できます(ベアメタル復元)。
Web インタフェースを使用すると、独自のバックアップサーバーを簡単にセットアップできます。スクリーンショットを参照してください。
現在、8300以上の UrBackup サーバー・インスタンス(自動更新が有効)が稼動しており、数百のアクティブなクライアントを持つインスタンスもあります。)

パッケージによっては、ここに依存関係の情報を入れることもできます。依存関係のあるパッケージは、パッケージ自体をインストールする前にインストールされている必要があります。

インストールスクリプト

"tools" フォルダをチェックすると、ChocolateyInstall という PowerShell スクリプトが見つかります。ここにPowerShellインストールの奥義があります。スクリプトには、インストーラのタイプ(MSI、EXEなど)に応じて、サイレントインストールのパラメータ、インストールするパッケージ、checksum などが含まれます。PowerShell スクリプトなので、自由にカスタマイズできます。

C:\temp\download\urbackup-client\tools> cat .\chocolateyinstall.ps1

$ErrorActionPreference = 'Stop';

 

$packageName  = 'urbackup-client'

$toolsDir     = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"

$fileLocation = ''

 

#Based on Nsis

$packageArgs = @{

  packageName   = $packageName

  softwareName  = 'urbackup-client*'

  fileType      = 'exe'

  silentArgs    = "/S"

  validExitCodes= @(0)

  url           = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)\files\UrBackup Client NoTray 2.2.6.exe"

  checksum      = 'F602561D9F1CDE6035FEFB6D388C885A6DA16AAFCE8F9411E164496A3E3B542E'

  checksumType  = 'sha256'

  url64bit      = ""

  checksum64    = ''

  checksumType64= 'sha256'

  destination   = $toolsDir

  #installDir   = "" # passed when you want to override install directory
- requires licensed editions 1.9.0+

}

 

Install-ChocolateyPackage @packageArgs

/S をサイレントインストールのオプションとして使用し、URL パラメータで urbackup クライアント・ソフトウェアをダウンロードするURLまたはファイルの場所(この場合、インストーラはパッケージに組み込まれています)を指定しています。Chocolatey の優れたセキュリティ機能で、このスクリプトに記載されている checksum が、ローカルにダウンロードされたインストールファイルと同じであることが保証されます。

インストーラ・ファイル

ソフトウェアをインストールするには、インストールファイルを使います。Chocolateyは、デフォルトでは、インストール用ファイルを "files" というフォルダに保持します。ソフトウェアをインストールするために必要なファイルはすべてここにあります。ただし、依存関係があるものは完全に別のパッケージとして保つのがベストプラクティスなので、ここにはないかもしれません。

C:\temp\download\urbackup-client\tools\files> dir

 

Directory: C:\temp\download\urbackup-client\tools\files

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a----        8/20/2018   8:42 AM       30440232 UrBackup Client NoTray 2.2.6.exe

-a----        8/20/2018   8:42 AM              3 UrBackup Client NoTray 2.2.6.exe.ignore

最後に

管理が行き届いていない複雑な Chocolatey パッケージもたくさんありますが、このブログがシンプルなパッケージとそれを構成する重要なコンポーネントを理解する一助になれば光栄です。Chocolatey は、主に NuGet と PowerShell の組み合わせで、Windows 上でのソフトウェア管理が自動化できます。

 

関連ブログ


Comments
Comments are disabled in preview mode.
Loading animation