Chocolatey for BusinessとNexusを使って、部署ごとにインストールできるソフトウェアを制限する方法

はじめに

以前、Chocolatey Software社の方とのやり取りの中で、「リポジトリサーバはChocolatey Serverではなく、Sonatype Nexusを推奨します。」と教えてもらいました。
Chocolatey Serverの場合、1サーバにつき1リポジトリまでという制限があり、社内で複数のリポジトリを用意したいと思っても、リポジトリの数だけ仮想マシンが必要になるのでリソースを多く消費してしまいます。
(もちろん、Chocolatey for Business(以下C4B)のライセンスもリポジトリサーバの数だけ多く必要になります)
ところが今回紹介するNexusリポジトリマネージャの場合、複数のリポジトリを1つのサーバ内に同居させられるため、上記のデメリットが解消できることが分かりました。
今回は、このNexusリポジトリマネージャとC4Bについて解説していきます。

リポジトリサーバの必要要件

  • Windows Server 2012 以降 (推奨: Windows Server 2016)
  • 4以上のCPUコア
  • 16 GB以上のRAM
  • ローカルアーティファクトストレージ用に1 TBの空き容量
    ※パッケージの量が少なければ1TB未満で問題ないです。

Nexusリポジトリマネージャのインストール方法

1.あらかじめC4Bをインストールしておきます。また、C4B購入後の案内メールから、「chocolatey-nexus-setup.0.1.0.nupkg」をダウンロードし、「C:\choco-setup\packages」にコピーしておきます。
2.以下のコマンドを管理者権限で実行したPowershellで順に実行します。

PS> choco install nexus-repository -y --version 3.21.1.01
PS> choco install chocolatey-nexus-setup --source="'C:\choco-setup\packages'" -y
PS> choco uninstall nexus-repository -y
PS> choco install nexus-repository -y

3.ブラウザで「http://localhost:8081」にアクセスし、初回ログインを行います。初回パスワードは「C:\ProgramData\sonatype-work\nexus3\admin.password」にあります。

4.初回ログイン後、パスワードの変更を求められますので変更します。

5.匿名アクセスをEnableにしておきます。

部署ごとにリポジトリを作成する

では、リポジトリを作成します。
1.adminユーザでログインしている状態で、上部歯車アイコンをクリックします。

2.左メニュータブの「Repositories」をクリックし、「+Create repository」をクリックします。

3.TypeはNuget(host)を選択します。

4.リポジトリ名を入力し、Deployment policyを「Allow redeploy」にし、Create repositoryをクリックします。これでリポジトリが作成されます。

リポジトリにパッケージを格納する

では、作成したリポジトリにパッケージを格納していきます。まずは肝心のパッケージを落とすところから始めていきます。

1.部署内で利用するパッケージリストを作成する。
 参考までに、以前弊社で作成したものはこちらです。

adobereader, anaconda3, awscli, docker-cli, docker-desktop, docker-kitematic, gimp, git-fork, git.install, golang, googlechrome, inkscape, kindle, miniconda3, python, rdcman, ruby, ruby2.devkit, rufus, rust, sakuraeditor, screentogif, shrewsoftvpn, sizer, teraterm, terraform, vagrant, vim, vmware-powercli-psmodule, vscode, winmerge, winscp.install, wireshark

2.C4BのPackage Internalizer機能を使って、パッケージをローカルにダウンロードします。管理者権限で実行したPowershellで以下を実行します。(パッケージ名同士を半角スペースで区切ること)

PS> cd C:\choco-setup\packages ; choco download --recompile --force adobereader  googlechrome kindle sakuraeditor teraterm vagrant vim vscode winmerge winscp wireshark

3.リポジトリにパッケージをPushするために必要な、API-Keyとリポジトリのパスを取得します。右上のadminアイコンをクリックします。

「Access API Key」をクリックします。

これをメモ帳あたりにコピペしておきます。

リポジトリのパスは、リポジトリ一覧の右側「copy」から取得できます。

4.パッケージをリポジトリに格納します。管理者権限で実行したPowershellで以下を実行します。

PS> Get-ChildItem "C:\choco-setup\packages\*.nupkg" | Foreach-Object { choco push $_.FullName --source="'http://localhost:8081/repository/<リポジトリ名>/'" -k="'<api-key>'" --force }

以上で、内部リポジトリが1つ作成できました。
もし例えば経理部向けのリポジトリを新設したくなったら、Nexusリポジトリに「keiri(例として)」リポジトリを作成し、choco pushする際のパス中の「soumu」を「keiri」に置換すれば、今度は経理課向けのリポジトリが簡単に作成できます。

Chocolateyのソースを変更する

最後に、クライアント端末にインストールされているChocolateyのソースを変更する必要があります。
これは管理者権限が必要な作業のため、もしクライアント端末が多い場合には、Ansibleなどで自動化するのがよいと思います。
今回は手動で行います。

1.管理者権限で実行したPowershellで以下を実行する。

PS> choco source disable -n="chocolatey"
PS> choco source add -n="<任意の名前>" -s="http:<Repogitory Server IP>/repository/<リポジトリ名>/"

これで、クライアント端末では、総務部用リポジトリ内にあるソフトウェアのみインストールできるようになります。

おわりに

今回は、C4BとNexusリポジトリマネージャとの連携について解説しました。
最近C4Bでは、さらにJenkinsやCCM Deploy(近日公開)などを組み合わせた、ソフトウェア管理方法を公開しています。
URL: https://chocolatey.org/docs/quick-deployment-environment
これについては、また別の記事で紹介しようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です