Photon OS 2.0 から、PMD(Photon Management Daemon)と

その CLI である pmd-cli が導入されたので使用してみます。

 

Photon Management Daemon Command-line Interface (pmd-cli)

photon/pmd-cli.md at master · vmware/photon · GitHub

 

PMD のインストール。

pmd のパッケージをインストールして、pmd サービスを起動します。

root@photon-machine [ ~ ]# tdnf install -y pmd

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64)'

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64) Updates'

Refreshing metadata for: 'VMware Photon Extras 2.0(x86_64)'

photon-extras                              106    100%

Installing:

libgpg-error             x86_64       1.27-1.ph2       photon       118.88k 121733

cyrus-sasl               x86_64       2.1.26-13.ph2    photon       558.79k 572200

libgcrypt                x86_64       1.8.1-1.ph2      photon         1.18M 1235073

perl                     x86_64       5.24.1-4.ph2     photon        49.41M 51811861

libxml2                  x86_64       2.9.6-1.ph2      photon         7.30M 7651659

haveged                  x86_64       1.9.1-3.ph2      photon       186.28k 190753

openldap                 x86_64       2.4.44-3.ph2     photon         1.52M 1598869

iputils                  x86_64       20151218-4.ph2   photon       262.51k 268810

ntp                      x86_64       4.2.8p10-4.ph2   photon         6.28M 6581037

pcre                     x86_64       8.40-4.ph2       photon       699.09k 715866

pmd-libs                 x86_64       0.0.5-3.ph2      photon       330.13k 338056

lightwave-client-libs    x86_64       1.3.1-5.ph2      photon         2.20M 2308680

jansson                  x86_64       2.10-1.ph2       photon        76.67k 78510

copenapi                 x86_64       0.0.2-3.ph2      photon        62.80k 64304

likewise-open            x86_64       6.2.11.4-3.ph2   photon        11.52M 12078104

netmgmt                  x86_64       1.1.0-9.ph2      photon       149.77k 153360

c-rest-engine            x86_64       1.0.4-3.ph2      photon       107.93k 110520

pmd                      x86_64       0.0.5-3.ph2      photon       527.47k 540133

 

Total installed size:  82.42M 86419528

 

Downloading:

pmd                                     173185    100%

c-rest-engine                            49211    100%

netmgmt                                  72283    100%

likewise-open                          3899636    100%

copenapi                                 35650    100%

jansson                                  42100    100%

lightwave-client-libs                   737040    100%

pmd-libs                                 93441    100%

pcre                                    301344    100%

ntp                                    3637335    100%

iputils                                 129855    100%

openldap                                890618    100%

haveged                                  75010    100%

libxml2                                1589185    100%

perl                                  18290806    100%

libgcrypt                               510631    100%

cyrus-sasl                              298403    100%

libgpg-error                             61382    100%

Testing transaction

Running transaction

Installing/Updating: jansson-2.10-1.ph2.x86_64

Installing/Updating: copenapi-0.0.2-3.ph2.x86_64

Installing/Updating: libgpg-error-1.27-1.ph2.x86_64

Installing/Updating: libgcrypt-1.8.1-1.ph2.x86_64

Installing/Updating: iputils-20151218-4.ph2.x86_64

Installing/Updating: cyrus-sasl-2.1.26-13.ph2.x86_64

Installing/Updating: openldap-2.4.44-3.ph2.x86_64

Installing/Updating: perl-5.24.1-4.ph2.x86_64

Installing/Updating: ntp-4.2.8p10-4.ph2.x86_64

Installing/Updating: libxml2-2.9.6-1.ph2.x86_64

Installing/Updating: haveged-1.9.1-3.ph2.x86_64

Installing/Updating: likewise-open-6.2.11.4-3.ph2.x86_64

Waiting for lwreg startup.

ok

Installing settings from /opt/likewise/share/config/accounts.reg...

Installing settings from /opt/likewise/share/config/dcerpcd.reg...

Installing settings from /opt/likewise/share/config/eventlogd.reg...

Installing settings from /opt/likewise/share/config/lsassd.reg...

Installing settings from /opt/likewise/share/config/lwiod.reg...

Installing settings from /opt/likewise/share/config/lwreg.reg...

Installing settings from /opt/likewise/share/config/netlogond.reg...

Installing settings from /opt/likewise/share/config/privileges.reg...

Installing settings from /opt/likewise/share/config/rdr.reg...

Starting service dependency: netlogon

Starting service dependency: lwio

Starting service dependency: rdr

Starting service: lsass

Installing/Updating: lightwave-client-libs-1.3.1-5.ph2.x86_64

Installing/Updating: pmd-libs-0.0.5-3.ph2.x86_64

Installing/Updating: pcre-8.40-4.ph2.x86_64

Installing/Updating: netmgmt-1.1.0-9.ph2.x86_64

Installing/Updating: c-rest-engine-1.0.4-3.ph2.x86_64

Installing/Updating: pmd-0.0.5-3.ph2.x86_64

Generating a 2048 bit RSA private key

................................+++

..+++

writing new private key to '/etc/pmd/server.key'

-----

Generating RSA private key, 2048 bit long modulus

..........................................................+++

...............................................................................................+++

e is 65537 (0x10001)

writing RSA key

 

Complete!

root@photon-machine [ ~ ]#

 

pmd サービスを起動します。

root@photon-machine [ ~ ]# systemctl start pmd

root@photon-machine [ ~ ]# systemctl enable pmd

root@photon-machine [ ~ ]# systemctl status pmd

● pmd.service - photon management daemon

   Loaded: loaded (/lib/systemd/system/pmd.service; enabled; vendor preset: enabled)

   Active: active (running) since Fri 2017-11-03 17:45:40 UTC; 4s ago

Main PID: 715 (pmd)

    Tasks: 18 (limit: 4915)

   CGroup: /system.slice/pmd.service

           mq715 /usr/bin/pmd

 

Nov 03 17:45:40 photon-machine systemd[1]: Started photon management daemon.

 

なぜか pmd サービスが起動できないことがあるのですが、

その場合は restServer.log ファイルのパーミッションが下記になっているか

確認してみるとよいと思います。

root@photon-machine [ ~ ]# ls -l /var/log/pmd/restServer.log

-rw-r--r-- 1 pmd pmd 0 Nov  3 17:45 /var/log/pmd/restServer.log

 

pmd-cli のインストール。

pmd-cli の RPM をインストールします。

すでに pmd で依存 PRM がインストール済みとなっているため

pmd-cli だけがインストールされます。

root@photon-machine [ ~ ]# tdnf install -y pmd-cli

 

Installing:

pmd-cli                  x86_64       0.0.5-3.ph2      photon        58.79k 60200

 

Total installed size:  58.79k 60200

 

Downloading:

pmd-cli                                  33148    100%

Testing transaction

Running transaction

Installing/Updating: pmd-cli-0.0.5-3.ph2.x86_64

 

Complete!

root@photon-machine [ ~ ]#

 

pmd-cli がインストールされました。

オプションなしで実行すると、help が見られます。

ネットワーク(net)、RPM パッケージ(pkg)、ユーザ(usr)、firewall の

情報確認や設定ができるようです。

そして pmd が起動しているリモートサーバに実行することもできます。

root@photon-machine [ ~ ]# pmd-cli

These are the current registered components

'firewall' : firewall management

'net' : network management

'pkg' : package management

'usr' : user management

You need to specify a component and a command

usage: pmd-cli [connection/auth options] <component> <command> [command options]

 

For local connections, use: pmd-cli <component> <cmd> <options>.

Current logged in user permissions will apply when executing commands.

This is the same as specifying --servername localhost.

For remote servers, use one of 3 methods mentioned below. Password is never sent out to the remote in any of the below auth scenarios.

When --user is specified, you will be prompted for password.

1. System user.

   pmd-cli --servername <server> --user <user>

2. Lightwave user (pmd server must be joined or should be part of embedded lightwave)

   pmd-cli --servername <server> --user <user> --domain <lightwave domain>

3. Kerberos spn (client must successfully run kinit before using this method)

   pmd-cli --servername <server> --spn <service principal name>

Error(805) : Unknown error

root@photon-machine [ ~ ]#

 

pmd-cli を実行してみる。

pmd-cli は、途中までのコマンドラインを実行することで下記のようにヘルプを見ながら操作できます。

root@photon-machine [ ~ ]# pmd-cli net

Unknown command net

Usage: netmgr command <command options ...>

 

For help: netmgr -h or netmgr --help

For version: netmgr -v or netmgr --version

 

List of commands:

 

link_info        get or set interface mac address, mtu, link state, or link mode

ip4_address      get or set interface IPv4 address and optionally default gateway

ip6_address      add or delete IPv6 address(es) and optionally default gateway for interface

ip_route         add or delete static IP route for the interface

dns_servers      get or set DNS mode, list of DNS servers

dns_domains      get or set list of DNS domains

dhcp_duid        get or set DHCP DUID, optionally per interface

if_iaid          get or set interface IAID

ntp_servers      get or set NTP servers list

hostname         get or set system hostname

wait_for_link    wait for the interface to come up

wait_for_ip      wait for the interface to acquire a valid IP address

error_info       get error information from error code

net_info         get or set network configuration parameters

set_duid         This is deprecated, will be removed in the future. Please use 'dhcp_duid --set'

set_iaid         This is deprecated, will be removed in the future. Please use 'if_iaid --set'

get_dns_servers  This is deprecated, will be removed in the future. Please use 'dns_servers --get'

Error(33) : Unknown error

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# pmd-cli net ip4_address

Usage:

ip4_address --get --interface <ifame>

ip4_address --set --interface <ifname> --mode dhcp|static|none --addr <IPv4Address/prefix> --gateway <Gateway Address>

Error(33) : Unknown error

root@photon-machine [ ~ ]#

 

IP アドレスの設定情報を表示してみました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.207/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]#

 

たとえば、RPM のインストールもできます。

ためしに jq コマンドの RPM をインストールしてみました。

root@photon-machine [ ~ ]# pmd-cli pkg install -y jq

 

Installing:

jq                       x86_64       1.5-3.ph2        photon       340.52k 348689

 

Total installed size: 340.52k 348689

 

Downloading:

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# rpm -q jq

jq-1.5-3.ph2.x86_64

 

そして、pmd が起動している別の Photon OS にも jq をインストールしてみます。

これまでの pmd-cli の結果にあるように、このサーバは 192.168.12.207 ですが、

そこからリモート(192.168.12.208)の Photon に pmd-cli を実行してみます。

 

リモート(192.168.12.208)の Photon でも pmd を起動してあります。

root@photon-machine [ ~ ]# ssh root@192.168.12.208 "cat /etc/photon-release;systemctl is-active pmd"

Password:

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

active

root@photon-machine [ ~ ]#

 

ただ、これだけだと pmd-cli では接続できないようです。

root@photon-machine [ ~ ]# pmd-cli --servername 192.168.12.208 --user root pkg install -y jq

Password:

 

Error(382312513) : (null)

Error(382312513) : Failed to connect to the remote host, reason = rpc_s_connect_timed_out (0x16c9a041).

root@photon-machine [ ~ ]#

 

たまたまうちにあった Log Insight で NSX 分散ファイアウォールのログを取得できるので見てみると、

pmd-cli をリモート実行したタイミングで TCP 2016 番ポート宛のアクセスがあるようでした。

vrli-pmd-port.png

 

宛先 Photon 側(192.168.12.208)で見てみると、

たしかに pmd が TCP 2016番ポートをリスニングしています。

※さりげなくここで lsof と pmd-cli をインストールしています。

root@photon-machine [ ~ ]# ip a | grep 192

    inet 192.168.12.208/24 brd 192.168.12.255 scope global dynamic eth0

root@photon-machine [ ~ ]# tdnf install -y --quiet lsof pmd-cli

root@photon-machine [ ~ ]# lsof -i -P | grep pmd

pmd       690             pmd    4u  IPv4   8867      0t0  TCP *:2081 (LISTEN)

pmd       690             pmd    5u  IPv6   8868      0t0  TCP *:2081 (LISTEN)

pmd       690             pmd   10u  IPv4   8886      0t0  TCP *:2016 (LISTEN)

pmd       690             pmd   11u  IPv6   8888      0t0  TCP *:2016 (LISTEN)

 

Photon の iptables でそのポートは解放されていないので、

今回は pmd-cli firewall ~ のローカル実行でポートを開放してしまいます。

pmd は TCP 2081 番もリスニングしていますが、ファイアウォールのログでは通信がなかったので

今回は 2016 番だけ解放してみました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.208/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]# pmd-cli firewall rules --chain INPUT --add "-p tcp -m tcp --dport 2016 -j ACCEPT"

root@photon-machine [ ~ ]#

 

iptables のポートを開放すると、192.168.12.207 から pmd-cli をリモート実行できました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.207/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]# pmd-cli --servername 192.168.12.208 --user root pkg install -y jq

Password:

 

Installing:

jq                       x86_64       1.5-3.ph2        photon       340.52k 348689

 

Total installed size: 340.52k 348689

 

Downloading:

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# ssh root@192.168.12.208 jq -V

Password:

jq-1.5

root@photon-machine [ ~ ]#

 

エラーメッセージを見ると rpc とあるので 2016 版ポートの解放でしたが、

設定ファイルをみると REST でのアクセスの場合は 2081 の解放が必要かもしれません。

root@photon-machine [ ~ ]# cat /etc/pmd/pmd.conf

[main]

#not an rpmostree server

servertype=0

apisecurity=/etc/pmd/api_sddl.conf

roledir=/etc/javelin.roles.d

rolepluginsdir=/etc/javelin.roles.plugins.d

 

[rest-server]

enabled=1

port=2081

apispec=/etc/pmd/restapispec.json

 

[rpc-server]

enabled=1

port=2016

 

[privsep]

pubkey=/etc/pmd/privsep_pub.key

privkey=/etc/pmd/privsep_priv.key

 

簡単にまとめると、pmd-cli の実行には・・・

  • pmd サービスが起動している必要がある。
  • リモート実行の場合は、iptables の TCP 2016 番ポートの解放が必要。
    (もしくは systemctl stop iptables)

 

ちなみに、pmd-cli net ~ のリモード実行はなぜかうまくいかないようです。

ひきつづき Photon OS 2.0 で いろいろと試してみたいと思います。

 

以上、PMD / pmd-cli を使用してみる話でした。