しばたテックブログ

気分で書いている技術ブログです。

PowerShell on Linuxに普通にPSRemotingしてみる - その2

以前のエントリ、

stknohg.hatenablog.jp

でソースからのビルドは面倒だからやらないと言ったのですが、気が変わりました。
というのも、

github.com

のIssueがCloseされmasterブランチに取り込まれたとのことで、次のバージョンのリリース前にその結果を確認したくなったからです。

動作環境

今回は普段使い慣れてるCentOS 7.2(1511)でやります。
Virtualbox上の仮想マシン環境です。

PowerShell on LinuxにPSRemotingしてみる

今回は非rootユーザーで試しているので必要に応じてsudoしています。

1. PowerShellのインストール

https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md#centos-7github.com

GitHubからPowerShellのrpmファイルをインストールするだけです。

# Install Powershell on Linux
sudo yum install -y https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.10/powershell-6.0.0_alpha.10-1.el7.centos.x86_64.rpm

2. OMI Serverのインストール

github.com

こちらもrpmをインストールするだけです。

# Install OMI
sudo yum install -y https://github.com/Microsoft/omi/releases/download/v1.1.0-0/omi-1.1.0.ssl_100.x64.rpm

3. PowerShell on Linux OMI Providerのビルド

ここからが今回独自の作業になります。

基本的な手順はGitHubに記載されています。
PowerShell on Linux OMI ProviderはC++製ですのでmakeするための環境と、pam-developenssl-devel*1をインストールします。

そして最新のソースをクCloneしてビルドスクリプトbuild.shを実行します。
今回は/tmp/omiディレクトリを作成し、そこにCloneしてみました。
(ビルドスクリプトは/tmp/omi/psl-omi-provider/build.shに存在します)

# Build latest psrp-omi-provider
sudo yum install -y cmake make gcc gcc-c++ git
sudo yum install -y pam-devel openssl-devel
# 
mkdir /tmp/omi
cd /tmp/omi/
git clone --recursive https://github.com/PowerShell/psl-omi-provider.git
cd psl-omi-provider/
./build.sh

エラー無くビルドが完了しlibpsrpomiprov.soが作成されれば成功です。

ちなみにビルドが完了した状態でbuild.shと同じディレクトリにあるrun.shを実行するとOMI Serverをデバッグ実行しコンソールにログを表示させることができます。*2

これでもPSRemotingすることができますが、今回はさらにRPMパッケージの作成まで行っていきます。

4. installBuilder(pal)のインストール

GitHub上の手順

Current OMI (Open Management Infrastructure) products use the InstallBuilder tool to create installation packages.

とある様にパッケージの作成にはInstallBuilderのインストールが必要です。
InstallBuilderと言っておきながらリンク先はPlatform Abstraction Layer(pal)というライブラリを指しており、最初はわけがわからなかったのですが、どうやらビルド環境の判定(OSの種類やパッケージツールの有無など)のためにこのライブラリの一部機能を利用しているということがわかりました。

まずはrpmパッケージを作るということでrpm-develrpm-buildをインストールしておきます。*3

sudo yum install -y rpm-devel rpm-build

続けて先ほどのPlatform Abstraction Layer(pal)のソースをCloneします。
Clone先は必ずPowerShell on Linux OMI Providerと同じディレクトリ(今回であれば/tmp/omi/)にしてください。

そしてpal/build/ディレクトリに移動し、configureコマンドを実行します。
このconfigureでビルド環境の判定を行い、同じディレクトリにconfig.makファイルを作成します。

# Install installBuilder(pal)
cd /tmp/omi/
git clone https://github.com/Microsoft/pal.git
cd pal/build/
# Make config.mak
./configure

config.makファイルが次の手順で必要になります。

5. rpmパッケージの作成とインストール

最後にrpmパッケージを作成してインストールまで行います。

PowerShell on Linux OMI Providerのinstallbuilderディレクトリに移動してmakeを実行します。
先ほどの手順で正しくconfig.makファイルが作成されてれば、omi/Unix/output/release/ディレクトリにRPMファイルが作成されます。

# Build rpm package
cd ../../psl-omi-provider/installbuilder/
make

作成されたrpmファイルをインストールすれば完了です。

# Install rpm package
cd ../omi/Unix/output/release/
sudo rpm -i ./psrp-1.0.0-0.universal.x64.rpm

6. PSRemotingしてみる

後の作業は前回と同じでNew-PSSessionOptionEnter-PSSessionしてやればOKです。

# サーバーのIPが 192.168.33.209 の場合
$o = New-PSSessionOption -SkipCACheck -SkipRevocationCheck -SkipCNCheck
Enter-PSSession -ComputerName 192.168.33.209 -Credential root -Authentication basic -UseSSL -SessionOption $o

下図の様にCentOSでもエラー無くPSRemotingできました。

f:id:stknohg:20160921002702p:plain

これで完了です。

当たり前ですが作成したrpmファイルは再利用できますのでバックアップしておくと次回以降楽ができるでしょう。

補足

今回の一連の手順は以下のGistにまとめていますのでこちらも参考にしてください。

最新のPowerShell on Linux OMI Providerをインストールするサンプル(CentOS7) · GitHub

*1:apt-getだとlibpam0g-dev、libssl-dev

*2:OMI Providerと同時にOMI Serverもビルドしているため

*3:rpm-buildがインストールされているか次で判定しているため必ずこの手順を先にしてください