オープンソースのLinuxシステム管理ソリューション（Spacewalk)を使ってみた

# オープンソースのLinuxシステム管理ソリューション（Spacewalk)
## はじめに
CentOSへのパッチ適用・管理に使えそうなツールとして、Spacewalkというソフトを見つけたので試してみました。
## [Spacewalk](http://spacewalk.redhat.com/)とは
Spacewalkはオープンソース（GPLv2）のLinuxシステム管理ソリューションで、次のことが可能です。

- システムのインベントリ（ハードウェアおよびソフトウェア情報）
- システムにソフトウェアをインストールして更新する
- カスタムソフトウェアパッケージを収集し、管理可能なグループに配布する
- システムのプロビジョニング（キックスタート）
- システムへの構成ファイルの管理と展開
- 仮想ゲストのプロビジョニングと開始/停止/設定
- 効率的な方法で複数の地理的サイトにコンテンツを配信する

[Red Hat Satellite](https://www.redhat.com/ja/technologies/management/satellite)と同等の機能を持っています。違いは[こちら](http://spacewalk.redhat.com/faq.html#compare)
## インストール
[参考ドキュメント](https://fedorahosted.org/spacewalk/wiki/HowToInstall)
### インストール環境
CentOS 7 minimul
注意点：
PostgreSQLのデータ領域(/var/lib/pgsql/data)が12GB以上ないとセットアップでエラーになる。
/var/satellite/に、外部のリポジトリサーバからファイル(RPM等)をすべてコピーしてくるので、かなりのディスクを消費する。

### Setting up Spacewalk repo
`yum install  http://yum.spacewalkproject.org/2.6/RHEL/7/x86_64/spacewalk-repo-2.6-0.el7.noarch.rpm`

### JPackage (All systems)
http://www.jpackage.org/yum.php
http://www.jpackage.org/jpackage50.repo
`# vi /etc/yum.repos.d/jpackage.repo`

```
[jpackage-generic]
name=JPackage (free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=free&release=5.0
failovermethod=priority
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
[jpackage-generic-updates]
name=JPackage (free), generic
mirrorlist=http://www.jpackage.org/mirrorlist.php?dist=generic&type=free&release=5.0-updates
failovermethod=priority
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1
```

### EPEL 
`# yum install epel-release`

### PostgreSQL server
`# yum grouplist hidden`
`# yum groupinstall "PostgreSQL Database Server" "PostgreSQL Database Client"`
`# yum install postgresql-contrib`
`# su - postgres`
`$ initdb --encoding=UTF8 --no-locale --pgdata=/var/lib/pgsql/data`
`$ exit`
`# systemctl enable postgresql`
`# systemctl start postgresql`

### PostgreSQL server, set up by Spacewalk (embedded)
`# yum install spacewalk-setup-postgresql`

### Installing Spacewalk
`# yum install spacewalk-postgresql`

### Configuring Spacewalk
以下のコマンドを実行時、自分自身のFQDNを指定してSSL証明書が作成される。
管理対象のサーバからアクセスする際、証明書のFQDNと合致しないとエラーになるので、注意する。
`# spacewalk-setup`

### アカウントの作成
ブラウザでアクセスすると、アカウントの作成画面になるので作成する。

### 起動サービスの確認
`# systemctl list-units --type=service`
jabberd-c2s.service、osa-dispatcher.serviceが何故かエラーになっていたので起動する。
`systemctl restart jabberd-c2s.service`
`systemctl restart osa-dispatcher.service`

### firewallの設定
必要に応じて、適宜、firewallの設定を行う。
使用ポート

- Outbound open ports 80, 443
- Inbound open ports 80, 443, 5222 (only if you want to push actions to client machines) and 5269 (only for push actions to a Spacewalk Proxy), 69 udp if you want to use tftp

以上で、spacewalkのインストールは完了

## spacewalkの設定
ブラウザでアクセスして設定を行う。

### リポジトリの設定
チャンネル -> ソフトウェアチャンネルの管理 -> リポジトリの管理 -> リポジトリの作成

```
リポジトリラベル:centos-7
リポジトリ URL:http://mirror.centos.org/centos/7/os/x86_64/
Repository Type:yum
SSL CA 証明書:なし
SSL クライアント証明書:なし
クライアントキー:なし
フィルター:
```
※リポジトリのラベル、リポジトリのURLは、/etc/yum.repos.d/CentOS-Base.repoに合わせればよいでしょう。

必要なだけリポジトリ作る。

### ベース(親)チャンネルの設定
チャンネル -> ソフトウェアチャンネルの管理 -> チャンネルの作成

```
チャンネル名、チャンネルラベル：任意(centos-7)
親チャンネル：なし
アーキテクチャ：x86_64
チェックサム：sha1
チャンネルの要約:centos-7
```
※今回、チャンネル名、チェンネルラベルをcentos-7で作成。

### チャンネルとリポジトリの紐づけと同期
チャンネル -> ソフトウェアチャンネルの管理 -> チャンネル名（centos-7） -> リポジトリ
紐づけたいリポジトリにチェックを入れて、リポジトリの更新  
同期のタブをクリックすると、外部リポジトリとの同期のタイミングが設定できる。今すぐ同期もできる。

### アクティベートキーの作成
システム -> アクティベーションキー -> キーの作成 -> 

```
詳細：Activation Key
キー：centos-7
使用：
ベースチャンネル:centos-7
付属エンタイトルメント:
汎用デフォルト:
```

### 子チャンネルの作成
親チャンネルに紐づけて、子チャンネルを作成することで、リポジトリを追加選択できるようになる。
例えば、ベースはCentOSで、子チェンネルにEPELを追加するといった使い方になるかと思う。
なお、同じチャンネルに複数リポジトリの紐づけもできるが、クライアントはチャンネル単位でアクセスするので、どのリポジトリから持ってきているかわからなくなると思われる。

## クライアントの設定
https://fedorahosted.org/spacewalk/wiki/RegisteringClients
クライアント側でコマンドラインで設定を行う。

### リポジトリの設定(RHEL 7 / SL 7 / CentOS 7の場合)
`# yum install http://yum.spacewalkproject.org/2.6-client/RHEL/7/x86_64/spacewalk-client-repo-2.6-0.el7.noarch.rpm`
`# BASEARCH=$(uname -i)`
`# yum install epel-release`

### Install client packages
`# yum install rhn-client-tools rhn-check rhn-setup rhnsd m2crypto yum-rhn-plugin`

### Install Spacewalk's CA certificate
`# yum install http://サーバ/pub/rhn-org-trusted-ssl-cert-1.0-1.noarch.rpm`

### Register your system to Spacewalk
作成したアクティベートキーで登録を行う。アクティベーションキーの頭に"1-"がつく。
`# rhnreg_ks --serverUrl=https://サーバ/XMLRPC --sslCACert=/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT --activationkey=1-centos-7`

FQDNがあっていないとエラーになる。
/etc/sysconfig/rhn/up2dateを編集して、serverURLをhttpに変えてしまうとか、もしかしたら証明書のチェックを外す設定とかあれば、それで対応できると思われる。

### 子チャンネルの追加
上記でベースチャネルの登録はできたので、子チャンネルの追加を行う。

https://access.redhat.com/documentation/ja-JP/Red_Hat_Network_Satellite/5.5/html/Channel_Management_Guide/sect-Red_Hat_Network_Satellite-Channel_Management_Guide-Introduction_to_RHN_Channels-Subscribing_to_Channels.html

■追加
`# spacewalk-channel --add -c 子チャンネル名`
`Username: 管理者のID`
`Password: パスワード`

■リスト
`# spacewalk-channel --list`

■削除
`# spacewalk-channel --remove -c 子チャンネル名`


## ソフトウェア管理
リポジトリと同期した情報、クライアントからの情報から、GUI上で

- インストールされているパッケージの一覧/削除
- パッケージのアップグレード
- 新しいパッケージのインストール

等ができる。クライアントのパッケージの更新タイミングは、クライアントからの定期的なアクセスの際に行われるよう。即時に更新する方法もありそうだが未確認。

話はずれるが、CentOS7に標準で含まれるcglibのバージョンは2.2だが、spacewalk-java,spacewalk-taskomaticが対応しているのは2.2未満のため、リポジトリjpackage-genericにある2.1がインストールされる。cglibをアップデートしようとすると、依存関係でエラーになる。

## ハードウェア情報
CPU、メモリ、ネットワーク等の情報も取れている。

## リモートコマンド
rhncfg-actionsをインストールすると、リモートでスクリプトの実行ができる。
実行のタイミングはパッケージの更新と同様。

## 監査(OpenSCAP)
項目として監査(OpenSCAP)があるが未検証。
https://oss.sios.com/redhat-ch/blog/openscap_intro

## Spacewalkの活用場所
利用シーンによって、Spacewalkが活用できるか考えてみる。

インターネットに直接でれないので中継用につかう
⇒Proxyサーバでよくない？

多数のクライアントがインターネットのリポジトリサーバにアクセスに行くのは無駄
⇒リポジトリサーバを複製したほうが単純・簡単でよくない？

パッチの適用・削除ができる
⇒サーバ管理者がGUIで管理するか？ansibleとかで管理するんじゃない？

インベントリ収集ができる
⇒OCSInventoryNGとか、インベントリ収集のソフトのほうがCentOS以外もできてよくない？
　
CentOSでRed Hat Satelliteと同じことをしたいのであれば使えると思うが、自分の環境ではいまいちSpacewalkの活用場所が見つからない。

## この記事の情報に関して
この記事が提供している情報に関しては、合法性、正確性、安全性等、いかなる保証もされません。この記事を利用することによって生ずるいかなる損害に対しても一切責任を負いません。