はじめに
数百台あるサーバやクライアント、タブレット端末等の情報を、Excel台帳で管理することに限界を感じていましたので、試しにオープンソースなソフトウェアに置き換えたらコンピュータの情報も自動収集でき、割と良さげでイイ感じなりました。
ただ、参考にしたサイトの情報が古かったり少なかったりと、まともに動くようになるまでに若干苦労しましたので、私的構築手順を残しておきたいと思います(結構長くなりました…)。
尚、本投稿ではWindowsクライアントを対象とした内容に特化していますが、LinuxやAndroidの情報も収集できます。※残念ながら現時点ではMac/iOSは未対応なようです。
※MacOSX用のPackagerはこちらで公開されていました。なので現時点ではiOSのみ未対応です。
使用ソフトウェア&バージョン
インベントリツール(エージェントを利用したインベントリ情報の自動収集)
- OCS Inventory Server 2.3.1
- OCS Inventory Agent 2.1.1.1
2003/XPの場合、このバージョン以下が対応しているらしい。尚、Vista以上のマシンであれば、投稿時点の最新版(2.3.1)でOK。
今回はGPOを介してOCSNGエージェントを自動デプロイしたいので、当バージョンで統一する。
対応OS: Unix/Linux、Windows、MacOSX、Android(Google Playにエージェントアプリ有)
IT資産管理ソフトウェア
- GLPI 9.1.6
- GLPI OCN Inventory NG Plugin 1.3.3
構築環境
今回はDocker上のCentOS7コンテナで構築
但し、Database(MariaDB)は別コンテナで構築済
ホスト(IP:172.16.64.54)
- CentOS7.3
- Docker 17.05 ※環境構築済
データベース用コンテナ(IP:172.17.0.2)
- CentOS7 + MariaDB5.5 ※環境構築済
アプリケーション用コンテナ(IP:172.17.0.3)
- CentOS7
アプリケーション用コンテナの準備
systemd対応のCentOS7イメージ作成
systemdをコンテナ内で利用するには、予め対応するDockerイメージを作成する必要がある(参考)
FROM centos:centos7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
DockerfileをビルドしてDockerイメージを作成
docker build --rm -t local/c7-systemd .
Dockerイメージの確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local/c7-systemd latest 1b5bdb2a5e29 9 minutes ago 193MB
mariadb55 latest 979d5e884e51 9 days ago 528MB
centos centos7 36540f359ca3 4 weeks ago 193MB
アプリケーション用コンテナの起動、初期設定
アプリケーション用コンテナを起動
docker run --privileged --name ocsng -p 80:80 -d local/c7-systemd /usr/sbin/init
コンテナの起動確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
998d878b1e8e local/c7-systemd "/usr/sbin/init" About a minute ago Up About a minute 0.0.0.0:80->80/tcp ocsng
2d66c971124f mariadb55:latest "/docker-entrypoin..." 9 days ago Up 9 days 0.0.0.0:3306->3306/tcp mariadb
コンテナに接続
docker exec -it ocsng bash
※これ以降のコマンド操作は、アプリケーション用コンテナ内で行う。
パッケージのアップデート
yum -y update && yum clean all
タイムゾーン変更(UTC => JST)
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ロケール変更
rm -f /etc/rpm/macros.image-language-conf
sed -i '/^override_install_langs=/d' /etc/yum.conf
yum -y reinstall glibc-common && yum clean all
cat <<EOF >/etc/profile.d/lang.sh
LANG="ja_JP.UTF-8"
LANGUAGE="ja_JP:ja"
LC_ALL="ja_JP.UTF-8"
export LANG LANGUAGE LC_ALL
EOF
source /etc/profile.d/lang.sh
インベントリツールの構築
OCSNGサーバソフトウェアのインストール
公式リポジトリからサーバ本体をインストール
yum -y install epel-release wget
yum -y install https://rpm.ocsinventory-ng.org/enterprise/7/x86_64/ocsinventory-release-7-4.el7.ocs.noarch.rpm
yum -y install ocsinventory-server ocsinventory-reports
yum clean all
PHPのタイムゾーン変更
sed -i -e "s/^;date.timezone =/date.timezone = Asia\/Tokyo/" /etc/php.ini
Apache起動
systemctl enable httpd
systemctl start httpd
ブラウザからhttp://172.16.64.54/ocsreports/install.php
へアクセス
データベース管理者ユーザー&パスワード、データベース名、MariaDBサーバホスト名を入力して[Send]をクリック
OCS-NG Inventory Installation
が表示されていれば、[Click here to enter OCS-NG GUI]をクリック
OCSNGサーバのApache設定情報にあるDBサーバの接続先を変更
vi /etc/httpd/conf.d/ocsinventory-server.conf
PerlSetEnv OCS_DB_HOST localhost
↓↓↓
PerlSetEnv OCS_DB_HOST 172.17.0.2
※OCSNG側のDB接続情報は、以下2つのファイルに記載されている
- /etc/ocsinventory/ocsinventory-reports/dbconfig.inc.php
- /etc/httpd/conf.d/ocsinventory-server.conf
インストール用スクリプトのリネーム
mv /usr/share/ocsinventory-reports/ocsreports/install.php /usr/share/ocsinventory-reports/ocsreports/install.php.bak
プロファイル関連ファイルのダウンロード、配置
※Apacheのエラーログ(/var/log/httpd/error_log)に吐かれる、以下エラーメッセージへの対策
PHP Warning: scandir(/usr/share/ocsinventory-reports/ocsreports/config/profiles): failed to open dir: No such file or directory in /usr/share/ocsinventory-reports/ocsreports/require/function_users.php on line 30
cd /tmp
wget https://github.com/OCSInventory-NG/OCSInventory-ocsreports/archive/2.3.1.tar.gz
tar zxvf 2.3.1.tar.gz
cd OCSInventory-ocsreports-2.3.1
cp -p -r config /usr/share/ocsinventory-reports/ocsreports/
Apacheの再起動
systemctl restart httpd
再度ブラウザからOCSNGのログインページhttp://172.16.64.54/ocsreports/
へアクセス
ユーザー名、パスワード共にadmin
を入力して[送信]をクリック
ADグループポリシーにエージェントデプロイ用ポリシー追加
All-In-Oneインストーラ(OcsPackage.exe)作成
以下3ツールをを任意の場所にダウンロード、展開
- Windows版OCSエージェントインストーラ(OCS Inventory Agent 2.1.1.1)
- OCSパッケージャ(OcsPackager 2.1.1)
- PsExec
OCSエージェントインストーラを展開したフォルダ内に、OCSパッケージャ(OcsPackager.exe)、PsExec.exeをコピーする。
OcsPackager.exeを起動
グループボックス | フィールド | 説明 |
---|---|---|
Files and options | Exe file | ダウンロードしたOCSNGエージェントセットアップ・プログラム(OCS-NG-Windows-Agent-Setup.exe)を選択する。尚、このフィールドは必須入力。 |
Certificate file | 証明書ファイル(cacert.pem)を選択する。今回は指定しない。 | |
Other files | インストールフォルダにコピーされる追加のファイルを指定することができる。 | |
Command line options | OCSNGエージェントセットアップ・プログラム(OCS-NG-Windows-Agent-Setup.exe)に渡すオプションを入力する。尚、サイレントインストールは /S オプションを指定する必要がある。 オプションの詳しい説明はこのページを参照 |
|
Label | クライアント側でエージェント(OcsInventory.exe)の初回起動時、ユーザーに「TAG」を入力させるポップアッププロンプトを表示させることができるらしいが、具体的な指定方法や使い方は不明。今回は指定しない。 | |
Install will run under account | User | ソフトウェアインストール権限を持つアカウント(通常はローカル管理者アカウントまたはドメイン管理者アカウント)を入力する。ドメイン管理者アカウントの場合、「ドメイン名\ユーザー名」、またはUPN(ユーザー名@ドメイン名)を指定する。 |
Password | インストール権限アカウントのパスワードを入力する。 |
All-In-Oneインストーラの出力先フォルダを指定して[OK]をクリック
※OCSエージェントインストーラを展開したフォルダ(OCSNG-Windows-Agent-2.1.1.1)を推奨
以上でAll-In-Oneインストーラ(OcsPackage.exe)が指定されたフォルダ内に作成される
OCSNGエージェント自動展開(&実行)用GPOの追加
Active Directory側で、以下の手順によりグループポリシーを作成(または既存GPOに追加)する。
このグループポリシーにより、Windowsクライアント起動時にエージェントのデプロイ(既にインストールされていれば実行)が自動的に実施される。
グループポリシーオブジェクトを展開し、空欄を右クリックして[新規(N)]をクリック
[名前(N)]にOCSInventory
と入力して[OK]をクリック
作成されたGPO[OCSInventory]を右クリックし、[編集(E)]をクリック
[コンピュータの構成]>[ポリシー]>[Windowsの設定]>[スクリプト(スタートアップ/シャットダウン)]を展開し、[スタートアップ]をダブルクリック
エクスプローラが開くので、その中にOCSエージェントインストーラに同梱されているランチャー(OcsLogon.exe)とAll-In-Oneインストーラ(OcsPackage.exe)をコピーし、エクスプローラを閉じる
[スクリプト名(N)]にランチャーOcsLogon.exe
を選択、[スクリプトのパラメーター(P)]にランチャーに渡すパラメータを入力して[OK]をクリック
パラメータ | 説明 |
---|---|
/PACKAGER | Al-In-Oneインストーラ(OcsPackage.exe)を利用する場合に指定。指定しなければ通常のOCSエージェントインストーラ(OCS-NG-Windows-Agent-Setup.exe)を利用 |
/GPO | 指定した場合、GPOフォルダと呼ばれるOcsLogon.exe と同じフォルダからインストーラをダウンロードする。指定しなければOCSNGサーバからダウンロードする。 |
/DEPLOY | エージェントのバージョンを指定 |
/SERVER | OCSNGサーバの接続URLを指定 |
作成されたGPOOCSInventory
を、コンピュータが格納されている特定のOUやサイトに適用(リンク)する
インベントリ情報収集の確認
Windowsクライアントが起動される毎に、OCSNGサーバにインベントリ情報が自動収集される。
コンピュータ別の詳細情報ページ(一覧からコンピュータ名をクリック)
尚、OCSNGエージェントログは%ProgramData%\OCS Inventory NG\Agent\OCSInventory.log
に出力されるので、収集できないクライアントがある場合の原因究明の一助となる。
Active Directory 連携
OCSNGサーバのLDAP連携機能により、Webコンソールへ Active Directory やLDAPの登録ユーザーでログインすることができる。
/usr/share/ocsinventory-reports/ocsreports/backend/AUTH/auth.php
をエディタで開き、以下のように変更する。
$list_methode = array(0 => "local.php");
↓↓↓↓↓
$list_methode=array(0=>"ldap.php",1=>"local.php");
/usr/share/ocsinventory-reports/ocsreports/backend/identity/identity.php
をエディタで開き、以下のように変更する。
$list_methode = array(0 => "local.php");
↓↓↓↓↓
$list_methode=array(0=>"ldap.php",1=>"local.php");
念のため、Apacheを再起動
systemctl restart httpd
Webコンソールに管理者(admin)でログインし、[設定]>[設定]をクリック
サイドメニューの[LDAP configuration]をクリック
各項目にAD連携に必要な情報を入力し、ページ下部の[アップデート]をクリック
設定項目 | 説明 | 設定例 |
---|---|---|
CONEX_LDAP_SERVEUR | ADサーバのIPアドレス or ホスト名 | dc1.mydomain.local |
CONEX_ROOT_DN | ルートDN | CN=Administrator,CN=Users,DC=MYDOMAIN,DC=local |
CONEX_ROOT_PW | ルートDNのパスワード | P@ssw0rd |
CONEX_LDAP_PORT | LDAPポート | 389 |
CONEX_DN_BASE_LDAP | ベースDN | DC=MYDOMAIN,DC=local |
CONEX_LOGIN_FIELD | ユーザー認証の属性名 | sAMAccountName |
CONEX_LDAP_PROTOCOL_VERSION | LDAPプロトコルのバージョン | 3 |
CONEX_LDAP_CHECK_FIELD1_NAME | フィルタに使用する属性名 | memberof |
CONEX_LDAP_CHECK_FIELD1_VALUE | 属性のフィルタ値 | CN=Domain Admins,CN=Users,DC=JIM_DOMAIN,DC=local |
CONEX_LDAP_CHECK_FIELD1_ROLE | フィルタに一致したユーザーの権限 | スーパーマネージャー |
CONEX_LDAP_CHECK_FIELD2_NAME | 上記同様 | |
CONEX_LDAP_CHECK_FIELD2_VALUE | 上記同様 | |
CONEX_LDAP_CHECK_FIELD2_ROLE | 上記同様 | |
CONEX_LDAP_CHECK_DEFAULT_ROLE | ユーザー権限の初期値 |
ちなみに上記設定例は、MYDOMAINドメインのベースDN配下からsAMAccountName
属性を含むエントリを検索し、更にそのエントリがDomain Admins
グループに属していれば、スーパーマネージャ権限でのログインを許可している。
IT資産管理ソフトウェアの構築
GLPIのセットアップ
MariaDBサーバ側でデータベースglpi
と接続ユーザーglpi
を作成
mysql -u root -p
> create database glpi;
> grant all privileges on glpi.* to glpi@localhost identified by 'P@ssw0rd';
> grant all privileges on glpi.* to glpi@'%' identified by 'P@ssw0rd';
> flush privileges;
>quit;
PHPオプションパッケージのインストール
yum -y install php-pecl-zendopcache php-pecl-apcu php-xmlrpc
GLPIのディレクトリ下で.htaccess
が有効となるよう、Apacheに設定追加
cat <<EOF >/etc/httpd/conf.d/glpi.conf
<Directory "/var/www/html/glpi">
AllowOverride All
</Directory>
EOF
Apacheの再起動
systemctl restart httpd
GLPI本体のダウンロード、展開
※最新パッケージはここからダウンロード可能
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/9.1.6/glpi-9.1.6.tgz
tar zxvf glpi-9.1.6.tgz
mv glpi /var/www/html/
chown -R apache:apache /var/www/html/glpi
ブラウザからhttp://172.16.64.54/glpi/
にアクセス
表示言語を日本語
に変更して[OK]をクリック
ライセンスを読みました。これを受諾します
を選択して[続行]をクリック
MariaDBサーバのIPアドレス、接続ユーザー名、接続パスワードを入力して[続行]をクリック
ユーザー名とパスワードにglpi
と入力して[実行]をクリック
連携プラグインのセットアップ
OCS Inventory NG から情報をインポートできるよう、連携プラグインをセットアップ
連携プラグインのダウンロード、展開
cd /tmp
wget https://github.com/pluginsGLPI/ocsinventoryng/releases/download/1.3.3/glpi-ocsinventoryng-1.3.3.tar.gz
tar zxvf glpi-ocsinventoryng-1.3.3.tar.gz
mv ocsinventoryng /var/www/html/glpi/plugins/
chown -R apache. /var/www/html/glpi/plugins/ocsinventoryng
念のため、Apacheを再起動
systemctl restart httpd
GLPIのWebコンソールにログインし、[セットアップ]>[プラグイン]をクリック
プラグインのリストにOCS Inventory NG
が追加されているので、右の[インストール]をクリック
項目 | 初期値 | 設定値 |
---|---|---|
Connection type | Database | Database |
名前 | (空欄) | ocs |
Host | localhost | 172.17.0.2 (DBサーバIPアドレス) |
データベース | ocsweb | ocsweb |
ユーザ | ocsuser | ocs |
パスワード | (空欄) | ocs |
Use automatic action for clean old agents & drop from OCSNG software |
いいえ | いいえ |
Use automatic action to check entity assignment rules |
いいえ | いいえ |
Use automatic locks | はい | はい |
有効 | はい | はい |
Synchronisation method | Standard (allow manual actions) |
Expert (Fully automatic, for large configuration) |
Database in UTF8 | はい | はい |
備考 | (空欄) | (空欄) |
接続試験結果が表示される(但し、この時点ではInvarid OCS configuration (TRACE_DELETED must be active)
エラーとなりOCSNGサーバに接続できない状態)
OCSNGサーバのWebコンソール(http://172.16.64.54/ocsreports/
)を開き、上部メニューの[設定]>[設定]をクリック、更にサイドメニューの[サーバー]をクリックしてTRACE_DELETED
をON
に変更後、ページ下の[アップデート]をクリック
GLPIのWebコンソールに戻りページをリロードし、接続試験が成功したことを確認
OCSNGからインベントリ情報をインポート
OCSNG側に登録されているコンピュータ一覧が、全て選択されている状態で表示されるので[インポート]をクリック
OCSNGからコンピュータ情報がインポートされていることを確認できる
Active Directory 連携
GLPIもOCSNG同様、Webコンソールへのログイン認証に、Active DirectoryやLDAPサーバと連携させることができる。
認証方法にLDAPサーバを追加
GLPIのコンソールに管理者アカウント(glpi)でログインし、[セットアップ]>[認証]をクリック
追加後、遷移した画面の右下に「テスト成功」が表示されたことを確認
ADからユーザー情報のインポート
①GLPIへインポートするユーザーにチェックマークして、②[操作]をクリック
プロファイルの追加
インポートしたユーザーには、デフォルトでSelf-Service
プロファイル(≒ロール)が割り当てられる。このSelf-Service
はデフォルトで登録されている中で、最も制限されているプロファイルである。そのため管理者に該当するユーザーには、全ての権限をもつSuper-Admin
プロファイルを、追加で割り当てる必要がある。
ちなみにプロファイルは、ひとりのユーザーに複数を組み合わせて割り当てることが出来る。
①プロファイルを割り当てたいユーザー(今回は管理者ユーザー)にチェックマークして、②[操作]をクリック
[操作]をプロファイルへの関連づけ
、すぐ下のドロップダウンをSuper-Admin
、エンティティをRoot entity
に変更して[追加]をクリック
エンティティ
マルチテナントや、大規模な組織でグループ会社毎、または複雑な組織で部門毎等、エンティティを分けることでより管理がしやすくなる場合もある。またエンティティは階層構造(ツリー)を持つこともできる。特別な要件や事情が無い限り、デフォルトで登録されている「Root」エンティティのみで管理し、「エンティティ」の代わりに「グループ」を利用したほうが管理が簡単にできると言える。
プロファイルにおける動的、反復利用
ユーザーのプロファイル情報にはD(動的)やR(反復利用)といった割り当て方法がある。「動的」とは予め設定されたルールに従って自動的に割り当てられたプロファイルを示し、それらルールは[設定]>[ルール]から確認、作成することができる。「反復利用」は、言い換えれば「再帰的」という意味であり、(エンティティの)階層を辿って割り当てられたことを示している。つまり親エンティティに割り当てられたプロファイルを、子エンティティに所属するユーザーへ引継ぐ、といったことができる。
Tips
GLPIのPDF出力で日本語が文字化け
現象
GLPIでPDF出力の際、タイトル等の日本語が文字化けする。
対策
IPAフォント ダウンロードページからTTFファイル「IPA Pゴシック(ipagp00303.zip)」をダウンロード
ダウンロードしたTTFファイルを解凍
cd /tmp
unzip ipagp00303.zip
GLPIにIPAフォントを埋め込み型で追加する
cd ipagp00303
/var/www/html/glpi/vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -i ipagp.ttf
>>> Converting fonts for TCPDF:
*** Output dir set to /var/www/html/glpi/vendor/tecnickcom/tcpdf/fonts/
+++ OK : /tmp/ipagp00303/ipagp.ttf added as ipagp
>>> Process successfully completed!
Webコンソールから[セットアップ]>[一般設定]>[デフォルト値]ページを開き、PDF出力フォント
という項目があるので、デフォルト値のHelvetica
からIPAPGothic
に変更し、ページ下部の[保存]をクリック
一旦Webコンソールからログアウトする。
再度Webコンソールにログインし、PDFを出力して文字化けが解消されていれば完了。
OCSNGからGLPIへのインポート(同期)処理を自動化する
OCSNG連携プラグインでSynchronisation method
にExpert
を設定すると、プラグインに同梱されているスクリプトを使ってインポート処理を定期実行させることができる。
スクリプトocsng_fullsync.sh
に実行権限付与
chmod +x /var/www/html/glpi/plugins/ocsinventoryng/scripts/ocsng_fullsync.sh
まずは手動実行してみる
sudo -u apache /var/www/html/glpi/plugins/ocsinventoryng/scripts/ocsng_fullsync.sh --thread_nbr=2 --server_id=1
尚、thread_nbr
には任意の数字(起動スレッド数)、server_id
にはOCSNGサーバID(デフォルトではGLPIに登録されたOCSNGサーバに対し、1から連番で付与される)を指定する。
自動実行されるよう、cronに登録(スクリプトを5分おきに実行)
crontab -u apache -e
*/5 * * * * /var/www/html/glpi/plugins/ocsinventoryng/scripts/ocsng_fullsync.sh --thread_nbr=2 --server_id=1
[ツール]>[OCS Inventory NG]から[Scripts execution of automatic actions]を参照することで、自動実行の結果を確認することができる。
参考