Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

One Getとchocolateyのパッケージを作ってみよう

3,730 views

Published on

One Getとchocolateyのパッケージを作ってみようの発表資料です

Published in: Engineering
  • Be the first to comment

One Getとchocolateyのパッケージを作ってみよう

  1. 1. OneGetとChocolateyのパッケージを作ってみよう めとべや東京 #4 2014/05/31 @oota_ken
  2. 2. こんなパッケージを作りました
  3. 3. 背景 会社内でテスト自動化スキルの育成計画が立てられた 候補者が一式を簡単にインストールできる環境が要請された SeleniumCAMPという週1-2 各2時間実施するハンズオン勉強会と自習で学んでもらう ->様々な理由によりSelneiumIDE, Java + Selenium WebDriver, Groovy + Gebを選択 →一式にインストールにchocolateyを採用 →cinst Firefox GoogleChrome java.jdk git groovy gradle intellijidea-community →OracleのWebサイトの仕様変更によりjava.jdkが正常動作しない期間が10日程度発生 →java.jdkはJava 7ベースだし、人の対応を待っていたら困ると言うことで、Java 8ベースの chocolateyパッケージをjava.jdkをパクってもといリスペクトして作成することを決意
  4. 4. Chocolateyパッケージの作り方 Quick start guide https://github.com/chocolatey/chocolatey/wiki/CreatePackagesQuickStart を読めばほぼできる http://terurou.hateblo.jp/entry/2013/09/08/171151 の解説も詳しいです というのだと身もふたもないのでステップを追って気を付ける点を 前提条件 Chocolateyが入っていること 管理者として実行する Set-ExecutionPolicy Unrestricted iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
  5. 5. ステップ 通常手順:ひな形をコピーして作ります 管理者として実行する cinst warmup git nuget.commandline cd %ChocolateyInstall% git clone [[https://github.com/chocolatey/chocolateytemplates.git]] cd chocolateytemplates_templates warmup addTemplateFolder chocolatey "%CD%chocolatey" warmup chocolatey jdk8
  6. 6. ステップ パッケージ定義ファイルの*.nuspecを自分のパッケージ用に修正します cd jdk8 gvim jdk8.nuspec が、テンプレートを修正するより、既に動作実績があるものを自分用に直してします方が早 いです テンプレートからだと嵌まりました 日本人の方が作られているHaskell Platformパッケージがお勧めです https://github.com/f440/chocolatey-HaskellPlatform/blob/master/HaskellPlatform.nuspec 注意点としてメモ帳など無条件でUTF-8をBOM付きにするエディタを使うと動かないので、 BOMはつけないUTF-8で保存できるエディタを使いましょう ちなみに私はVimを推奨します
  7. 7. ステップ 依存関係の定義 *.nuspecに下記のように依存関係を定義すると、aptやbrewのように最初のパッ ケージを指定してあげるだけで、芋づる式にパッケージがインストールされます 但し、バージョン番号とか細かい制御はできないようです <dependencies> <dependency id='groovy' /> <dependency id='gradle' /> <dependency id='maven' /> <dependency id='ant' /> </dependencies>
  8. 8. ステップ インストールスクリプトを修正します ise ./tools/chocolateyInstall.ps1 これまた、テンプレートではなく、既存の簡単なののカスタマイズから始めると早いです サイレントインストール対応のアプリケーションだと実質1行で済みます 例えば、JetBrains IntelliJ IDEA - Community Edition $name = "intellijidea-community" $url = "http://download.jetbrains.com/idea/ideaIC-13.1.2.exe" $kind = "EXE" $silent = "/S" Install-ChocolateyPackage $name $kind $silent $url ちなみにIntelliJ IDEAのChocolateyは開発元のJetBrainsがメンテナンスしており、最新化して欲しいとリクエストしたら、1日後に対応 されていました。素晴らしいです chocolateyInstall.ps1はPowerShellの仕様により「BOM付き」でないといけませんので注意してください。ISEを推奨します
  9. 9. chocolateyInstall.ps1注意点 その1 64ビットと32ビットの両方が存在するアプリケーションのパッケージを作る場合 64ビットOSと32ビットOSの環境判断のコードは自分で書く必要があります パスの設定等を自分でする場合 C:Program Files 64ビットOSだと64ビットアプリが入る場所 32ビットだと32ビットアプリが入る場所 C:Program Files (x86) 64ビットOSだと32ビットアプリが入る場所 この判断ロジックを自分で書く必要があります リスペクト元のjava.jdkではこの条件判断が適切に実装されていなかったので、32 ビットOSでインストールがこけるという報告を受けてjdk8では調査し修正しました 正しくは、パッケージ作成の32ビットの環境も用意して検証する必要があります
  10. 10. chocolateyInstall.ps1注意点 その1 OneGetでのデバッグ OneGetではChocolatey Pluginが存在するので、OneGetではChocolateyのパッ ケージを修正することなくインストールできます ただし、Write-Hostなどのコンソール出力がされないため、デバッグが非常に困 難です 例によってリスペクトしたjava.jdkはChocolatey自体のバグにより隠蔽されていた バグコード(関数内で暗黙的に戻り値を複数回戻していた。[void]により対処)が OneGetの正しい実装により露見したのですが、デバッグが本当に大変でした 現状、(64 or 32) x (Chocolatey or OneGet)の4つの組合せでパッケージのインストー ル/(あれば)アンイストール検証が必要です
  11. 11. ステップ パッケージ化 cpack ローカルインストールで検証 cinst jdk8 -source '%cd%' Chocolateyアカウントを作成し、APIキーをコピーしておく APIキーを設定する nuget SetApiKey 取得したAPIキー -sourcehttp://chocolatey.org/ パッケージを発行する cpush jdk8.1.8.0.05.nupkg
  12. 12. まとめ Chocolatey最初は取っつきにくいけど1つ作ってしまえば、後はそれをひな形にして 作れます Windowsで何らかのソフトウェアのインストールに苦労したなら、インストールの Blog記事を書くよりもChocolateyとOneGetのパッケージを作ってあげる方が多くの 人の時間を節約できると思います 今後のバージョンのWindowsに標準搭載されるであろうOneGetのリポジトリは現状 Chocolateyしかないので、ないと思ったらChocolateyのパッケージを作ってみれば、 後で何か嬉しいことがあるかもしれません 今後、WindowsがDev&Opsの方々に使って頂けるOSになるにはLinuxやMacのよう なパッケージシステムの整備が不可欠だと思いますので、興味ある方は是非!

×