CentOS 7のtomcatパッケージでcatalina.base分離

 article  Comments Off on CentOS 7のtomcatパッケージでcatalina.base分離
Oct 302016
 

以前「CATALINA_BASEを分けてTomcatを複数サービス化」のような記事を書いたのですが、CentOS 7やRed Hat 7のtomcatパッケージでこちらを実装してみます。

CentOS 7/Red Hat 7のtomcatパッケージには2種類のsystemd.execファイルが用意されています。

[root@localhost ~]# ls /usr/lib/systemd/system/tomcat*
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
[root@localhost ~]#

tomcat@.serviceの先頭に以下の記述があり、こちらの手順を模倣するとcatalina.baseの分離ができそうなので早速やってみます。

# Systemd unit file for tomcat instances.
#
# To create clones of this service:
# 0. systemctl enable tomcat@name.service
# 1. create catalina.base directory structure in
# /var/lib/tomcats/name
# 2. profit.

まずはnameにinst1を指定してenableにしてみます。

[root@localhost ~]# systemctl enable tomcat@inst1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat@inst1.service to /usr/lib/systemd/system/tomcat@.service.
[root@localhost ~]#

次に/var/lib/tomcats以下にcatalina.baseディレクトリを用意してパッケージデフォルトの内容をコピーします。

[root@localhost ~]# mkdir /var/lib/tomcats/inst1 && cd /var/lib/tomcats/inst1
[root@localhost inst1]# cp -pr /etc/tomcat conf
[root@localhost inst1]# cp -pr /var/log/tomcat logs
[root@localhost inst1]# cp -pr /var/cache/tomcat/temp .
[root@localhost inst1]# cp -pr /var/cache/tomcat/work .
[root@localhost inst1]# cp -pr /var/lib/tomcat/webapps .

webapps以下の不要なアプリケーションは削除します。

catalina.baseを指定する設定ファイルは/etc/sysconfig/tomcat@inst1として用意します。
これは/etc/tomcat/tomcat.confの先頭に説明があります。

# System-wide configuration file for tomcat services
# This will be loaded by systemd as an environment file,
# so please keep the syntax.
#
# There are 2 “classes” of startup behavior in this package.
# The old one, the default service named tomcat.service.
# The new named instances are called tomcat@instance.service.
#
# Use this file to change default values for all services.
# Change the service specific ones to affect only one service.
# For tomcat.service it’s /etc/sysconfig/tomcat, for
# tomcat@instance it’s /etc/sysconfig/tomcat@instance.

ファイルを作成してCATALINA_BASEとCATALINA_TMPDIRを設定します。

[root@localhost ~]# cp -p /etc/sysconfig/tomcat /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_BASE=\"/var/lib/tomcats/inst1\"" >> /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_TMPDIR=\"/var/lib/tomcats/inst1/temp\"" >> /etc/sysconfig/tomcat\@inst1

サービスを起動してみます。

[root@localhost ~]# systemctl start tomcat@inst1

catalina.baseやjava.io.tmpdirが分離された状態で起動されていることが確認できます。

/usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/var/lib/tomcats/inst1 -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/lib/tomcats/inst1/temp -Djava.util.logging.config.file=/var/lib/tomcats/inst1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

利用するポート番号変更などインスタンス個別の設定は、/var/lib/tomcats/inst1/conf以下を編集することで対応できます。

libpwqualityあれこれ

 article  Comments Off on libpwqualityあれこれ
Apr 102016
 

RHEL 7やCentOS 7では、辞書に載っているパスワードへの変更を抑止する際に使われるPAMモジュールがpam_cracklibからpam_pwqualityに変更されています。パッケージとしてはlibpwqualityに含まれるモジュールになります。

libcrackにもリンクされていてパスワード辞書自体はデフォルトでcracklibのものを使用しますが、/etc/security/pwquality.confで変更可能です。詳しくはman pam_pwqualityやman pwquality.confを参照。

こちらのパッケージにはパスワードを生成してくれるpwmakeやパスワードの強度をチェックしてくれるpwscoreというコマンドが付属しています。

例えばpwscoreコマンドで「辞書に載っている」、「8文字未満」、「ユーザー名が含まれる」パスワードをチェックしてみると、それぞれ以下のような結果になります。

$ echo password | pwscore
Password quality check failed:
 The password fails the dictionary check - it is based on a dictionary word
$ echo passwor | pwscore
Password quality check failed:
 The password is shorter than 8 characters
# echo password4username| pwscore username
Password quality check failed:
 The password contains the user name in some form

3つめのコマンドのpwscoreに続く引数はユーザー名です。

pwmakeの使い方はビット数を引数に指定して実行するだけで、通常は64ビット、より強固にするには80や128ビットの指定がよいようです。
以下、Red Hat Enterprise Linux 7 セキュリティガイドの「第4章 ツールとサービスを使用したシステム強化」より。

指定可能な最小ビット数は 56 で、これはブルートフォース攻撃が滅多に仕掛けられないシステムやサービスのパスワードには十分なものです。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションであれば、64 ビットで十分です。攻撃者がパスワードハッシュへの直接アクセスを取得する可能性がある場合やパスワードが暗号化鍵として使用される場合は、80 ビットや 128 ビットを使うべきです。

RHEL7/CentOS7でNICデバイス名をethに変更

 article  Comments Off on RHEL7/CentOS7でNICデバイス名をethに変更
Feb 012016
 

/etc/default/grubを変更してkernelパラメーターにnet.ifnames=0を付与する方法もありますが、「udev のルールファイルをマスク化する」のが一番手っ取り早いように思います。

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules

こちらで/usr/lib/udev/rules.d/80-net-name-slot.rulesの定義が無効化されます。
ちなみに同ファイルを見てみると、net.ifnames=0を設定することにより、ルールがスキップされるようになっていることが確認できます。

※参考
Red Hat Enterprise Linux 7 ネットワークガイド – 8.9. ネットワークデバイス命名における一貫性の無効化

RMIのRegistry portとServer port

 article  Comments Off on RMIのRegistry portとServer port
Jul 062015
 

JavaのRMI(Remote Management Interface)ではRegistry portとServer portの2種類が使用されます。
RPCみたいなもので、後者のポートはRegistory Portでのやりとりで動的に決まるのでFirewall越しでの接続が面倒でした。

ところがJava 7 Update 4以降ではServer portを指定できるようになったようです。Registory portと同じ値にすることも可能。
公式ドキュメントには記載がないのですが、ドキュメントバグとしてチケットにあがっています。

Should document com.sun.management.jmxremote.rmi.port.

 Posted by at 00:37

CentOS 7.1でZabbix Server 2.4.4がsegfault

 article  Comments Off on CentOS 7.1でZabbix Server 2.4.4がsegfault
Apr 062015
 

CentOS 7で動かしていたZabbix Server 2.4.4が起動しなくなりました。segfaltしている模様です。

[root@localhost ~]# systemctl status zabbix-server.service
zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled)
   Active: failed (Result: start-limit) since Tue 2015-04-05 23:23:56 JST; 7min ago
  Process: 18642 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=killed, signal=SEGV)

Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service: control process exited, code=killed status=11
Apr 05 23:23:56 localhost systemd[1]: Failed to start Zabbix Server.
Apr 05 23:23:56 localhost systemd[1]: Unit zabbix-server.service entered failed state.
Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service holdoff time over, scheduling restart.
Apr 05 23:23:56 localhost systemd[1]: Stopping Zabbix Server...
Apr 05 23:23:56 localhost systemd[1]: Starting Zabbix Server...
Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service start request repeated too quickly, refusing to start.
Apr 05 23:23:56 localhost systemd[1]: Failed to start Zabbix Server.
Apr 05 23:23:56 localhost systemd[1]: Unit zabbix-server.service entered failed state.
[root@localhost ~]# dmesg
[335292.404381] zabbix_server[18567]: segfault at 18 ip 00007fb071057c00 sp 00007fff73f4b3b8 error 4 in libpthread-2.17.so[7fb07104e000+16000]
[335292.405914] zabbix_server[18569]: segfault at 18 ip 00007fb071057c00 sp 00007fff73f4b3b8 error 4 in libpthread-2.17.so[7fb07104e000+16000]
[335292.621060] zabbix_server[18617]: segfault at 18 ip 00007fbb3753ec00 sp 00007fffdcf66fb8 error 4 in libpthread-2.17.so[7fbb37535000+16000]
[335292.626269] zabbix_server[18615]: segfault at 18 ip 00007fbb3753ec00 sp 00007fffdcf66fb8 error 4 in libpthread-2.17.so[7fbb37535000+16000]
[335292.751505] zabbix_server[18628]: segfault at 18 ip 00007f2653115c00 sp 00007fffbaf569e8 error 4 in libpthread-2.17.so[7f265310c000+16000]
[335292.752712] zabbix_server[18630]: segfault at 18 ip 00007f2653115c00 sp 00007fffbaf569e8 error 4 in libpthread-2.17.so[7f265310c000+16000]
[335292.878242] zabbix_server[18635]: segfault at 18 ip 00007f3c927ccc00 sp 00007fffa83ec778 error 4 in libpthread-2.17.so[7f3c927c3000+16000]
[335292.880241] zabbix_server[18637]: segfault at 18 ip 00007f3c927ccc00 sp 00007fffa83ec778 error 4 in libpthread-2.17.so[7f3c927c3000+16000]
[335293.004628] zabbix_server[18642]: segfault at 18 ip 00007f717b2d7c00 sp 00007fffcb6b7db8 error 4 in libpthread-2.17.so[7f717b2ce000+16000]
[335293.005836] zabbix_server[18644]: segfault at 18 ip 00007f717b2d7c00 sp 00007fffcb6b7db8 error 4 in libpthread-2.17.so[7f717b2ce000+16000]
[root@localhost ~]#

以下の状況と同じようです。
[ZBX-7790] zabbix_server_m[13777]: segfault at 18 ip 00007fe6639a8fe0 sp 00007fffbb66e498 error 4 in libpthread-2.18 – crash in "main" process – ZABBIX SUPPORT
trousersパッケージの削除かgnutlsのダウングレードで解決するようですが、trousersを削除するとpacemakerも削除されるので今回はgnutlsをダウングレード。

[root@localhost ~]# rpm -Uvh --force http://ftp.iij.ad.jp/pub/linux/centos/7.0.1406/updates/x86_64/Packages/gnutls-3.1.18-10.el7_0.x86_64.rpm
Retrieving http://ftp.iij.ad.jp/pub/linux/centos/7.0.1406/updates/x86_64/Packages/gnutls-3.1.18-10.el7_0.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:gnutls-3.1.18-10.el7_0           ################################# [ 50%]
Cleaning up / removing...
   2:gnutls-3.3.8-12.el7              ################################# [100%]
[root@localhost ~]#

無事起動しました。

[root@localhost ~]# systemctl start zabbix-server
[root@localhost ~]# systemctl status zabbix-server
zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled)
   Active: active (running) since Tue 2015-04-05 23:42:45 JST; 5s ago
  Process: 30941 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 30943 (zabbix_server)
   CGroup: /system.slice/zabbix-server.service
           ├─30943 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
           ├─30948 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
           ├─30949 /usr/sbin/zabbix_server: db watchdog [synced alerts config in 0.012501 sec, idle 60 sec]
           ├─30950 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000041 sec, idle 5 sec]
           ├─30951 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000036 sec, idle 5 sec]
           ├─30952 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000050 sec, idle 5 sec]
           ├─30953 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000032 sec, idle 5 sec]
           ├─30954 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000034 sec, idle 5 sec]
           ├─30955 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000052 sec, idle 5 sec]
           ├─30956 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
           ├─30957 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
           ├─30958 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
           ├─30959 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
           ├─30965 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection]
           ├─30966 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─30968 /usr/sbin/zabbix_server: alerter [sent alerts: 0 success, 0 fail in 0.000708 sec, idle 30 sec]
           ├─30969 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
           ├─30970 /usr/sbin/zabbix_server: timer #1 [processed 0 triggers, 0 events in 0.000000 sec, 0 maintenances in 0.000000 sec, idle 15 sec]
           ├─30971 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000903 sec, idle 5 sec]
           ├─30974 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000813 sec, idle 60 sec]
           ├─30975 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30976 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30980 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30981 /usr/sbin/zabbix_server: history syncer #4 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30982 /usr/sbin/zabbix_server: escalator [processed 0 escalations in 0.000626 sec, idle 3 sec]
           ├─30985 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000005 sec, idle 5 sec]
           └─30986 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000006 sec, idle 1 sec]

Apr 05 23:42:45 localhost systemd[1]: Started Zabbix Server.
[root@localhost ~]#

PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編

 article  Comments Off on PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編
Mar 072015
 

以前書いた「PacemakerでMySQLレプリケーション構成」のCentOS7+MariaDB環境用です。
CentOS7になってMySQLがMariaDBになったこと、pcsコマンドのオプションが若干変更になっていることが主な変更点になります。

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 7のPacemakerを使ってMariaDBデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 7.0.1406 x86_64)
  • 2号機:pcmk12 (CentOS 7.0.1406 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MariaDBをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MariaDBのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
https://mariadb.com/kb/en/mariadb/setting-up-replication/

MariaDBのインストールおよび設定

MariaDBをインストールし設定します。

[root@pcmk11 ~]# yum -y install mariadb-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mariadb-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mariadb-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# systemctl start mariadb.service

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster. Mandatory if you define
a master-slave resource.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

MariaDBを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# systemctl stop mariadb.service
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql binary=/usr/bin/mysqld_safe
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql datadir=/var/lib/mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql log=/var/log/mariadb/mariadb.log
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql pid=/run/mariadb/mariadb.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster cib-push mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 09:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 00:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mariadb/mariadb.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

Version: '5.5.41-MariaDB-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
150306  9:51:04 [Note] Slave SQL thread initialized, starting replication in log 'mariadb-bin.000001' at position 1435816, relay log '/var/lib/mysql/mariadb-relay-bin.000002' position: 1436102
150306  9:51:04 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'mariadb-bin.000001' at position 1435816

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がcluster_property_setとして記録されていることがわかります。

<cluster_property_set id="mysql_replication">
  <nvpair id="mysql_replication-mysql_REPL_INFO" name="mysql_REPL_INFO" value="pcmk11|mariadb-bin.000002|245"/>
</cluster_property_set>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

MoinMoinのインストールとSELinuxの設定メモ

 article  Comments Off on MoinMoinのインストールとSELinuxの設定メモ
Feb 282015
 

とりあえずCentOS 7にインストールしたときのメモ。

インストール、ファイル配置

# tar xzvf moin-1.9.8.tar.gz
# cd moin-1.9.8
# python setup.py install --record=install.log --prefix=/usr/local
# cp -pr /usr/local/share/moin /var/www
# cp -pr /usr/local/lib/python2.7/site-packages/MoinMoin/web/static/htdocs /var/www/moin/static
# mkdir -p /var/www/index
# mkdir -p /var/log/moin
# chown -R apache: /var/www/moin
# chown -R apache: /var/log/moin

Apache設定

# cat /etc/httpd/conf.d/moin.conf
<IfModule wsgi_module>
  WSGIScriptAlias /moin "/var/www/moin/server/moin.wsgi"
</IfModule>

Alias /moin_static "/var/www/moin/static"
<Directory "/var/www/moin/static">
  Require all granted
</Directory>

moin.wsgi設定

# diff -u /usr/local/share/moin/server/moin.wsgi /var/www/moin/server/moin.wsgi
--- /usr/local/share/moin/server/moin.wsgi      2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/server/moin.wsgi      2015-02-27 17:39:02.877357919 +0900
@@ -26,11 +26,14 @@
 # a1) Path of the directory where the MoinMoin code package is located.
 #     Needed if you installed with --prefix=PREFIX or you didn't use setup.py.
 #sys.path.insert(0, 'PREFIX/lib/python2.3/site-packages')
+sys.path.insert(0, '/usr/local/lib/python2.7/site-packages')

 # a2) Path of the directory where wikiconfig.py / farmconfig.py is located.
 #     See wiki/config/... for some sample config files.
 #sys.path.insert(0, '/path/to/wikiconfigdir')
 #sys.path.insert(0, '/path/to/farmconfigdir')
+sys.path.insert(0, '/var/www/moin')
+sys.path.insert(0, '/var/www/moin/config')

 # b) Configuration of moin's logging
 #    If you have set up MOINLOGGINGCONF environment variable, you don't need this!
@@ -38,6 +41,8 @@
 #    See wiki/config/logging/... for some sample config files.
 #from MoinMoin import log
 #log.load_config('/path/to/logging_configuration_file')
+from MoinMoin import log
+log.load_config('/var/www/moin/config/logging/logfile')

 from MoinMoin.web.serving import make_application

wikiconfig設定

# diff -u /usr/local/share/moin/config/wikiconfig.py /var/www/moin/config/wikiconfig.py
--- /usr/local/share/moin/config/wikiconfig.py  2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/config/wikiconfig.py  2015-02-27 17:41:43.537342442 +0900
@@ -45,7 +45,7 @@
     # If that's not true, feel free to just set instance_dir to the real path
     # where data/ and underlay/ is located:
     #instance_dir = '/where/ever/your/instance/is'
-    instance_dir = wikiconfig_dir
+    instance_dir = '/var/www/moin'

     # Where your own wiki pages are (make regular backups of this directory):
     data_dir = os.path.join(instance_dir, 'data', '') # path with trailing /
@@ -60,6 +60,7 @@
     # use this setting and it will automatically work.
     # If you run your wiki script at /mywiki, you need to use this:
     #url_prefix_static = '/mywiki' + url_prefix_static
+    url_prefix_static = '/moin_static'


     # Wiki identity ----------------------------------------------------

logging設定

# diff -u /usr/local/share/moin/config/logging/logfile /var/www/moin/config/logging/logfile
--- /usr/local/share/moin/config/logging/logfile        2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/config/logging/logfile        2015-02-27 15:07:46.017232307 +0900
@@ -1,7 +1,7 @@
 [DEFAULT]
 # Logfile to create.
 # Make sure the running moin process has create/write rights there.
-logfile=/tmp/moin.log
+logfile=/var/log/moin/moin.log

 # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL
 loglevel=INFO

SELinux設定

# WIKIROOT=/var/www/moin
# WIKISTATIC=/var/www/moin/static
# WIKISERVER=/var/www/moin/server
# WIKICONFIG=/var/www/moin/config
# WIKICONFIG_LOG=/var/www/moin/config/logging
# WIKILOG=/var/log/moin
# WIKIINDEX=/var/www/moin/index
# semanage fcontext -a -t httpd_sys_script_exec_t "${WIKISERVER}(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKICONFIG}(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "${WIKICONFIG}/.*\.py"
# semanage fcontext -a -t httpd_sys_content_t "${WIKICONFIG_LOG}(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIROOT}/underlay(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIROOT}/data(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "${WIKIROOT}/data/plugin(/.*)*/.*\.py"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIINDEX}(/.*)?"
# semanage fcontext -a -t httpd_log_t "${WIKILOG}(/.*)?"

SELinux設定内容確認

# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/var/www/moin/server(/.*)?    system_u:object_r:httpd_sys_script_exec_t:s0
/var/www/moin/config(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/config/.*\.py    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/config/logging(/.*)?    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/underlay(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/data(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/data/plugin(/.*)*/.*\.py    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/index(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/log/moin(/.*)?    system_u:object_r:httpd_log_t:s0

SELinux設定内容反映

# restorecon -rv /var/www/moin
# restorecon -rv /var/log/moin
 Posted by at 00:48

Debian LXC on Fedora 20

 article  Comments Off on Debian LXC on Fedora 20
Aug 162014
 

Debian wheezyをFedora 20上のContainerとして動かしてみました。

まずはrootファイルシステムとなるディレクトリを作成します。名前はdebian01としています。

[root@localhost ~]# mkdir -p /var/lib/libvirt/filesystems/debian01

debootstrapを入手して展開、実行します。
展開用にbinutilsに含まれるarコマンド、実行用にperlなどが必要になりますので、インストールします。

[root@localhost ~]# yum install binutils perl wget gnupg

debootstrap自体のインストール手順はD.3. Unix/Linux システムからの Debian GNU/Linux のインストール」の「D.3.2. debootstrap のインストール」を参照ください。
インストールしたdebootstrapを実行します。

[root@localhost ~]# /usr/sbin/debootstrap --arch amd64 stable /var/lib/libvirt/filesystems/debian01

Linux Containerとして起動します。

[root@localhost ~]# virt-install --connect lxc:// --name debian01 --ram 512 --filesystem /var/lib/libvirt/filesystems/debian01/,/

いったん止めます。

[root@localhost ~]# virsh -c lxc:// shutdown debian01

rootパスワードやコンソールログイン許可するttyデバイスを追加します。

[root@localhost ~]# chroot /var/lib/libvirt/filesystems/debian01 /bin/passwd root
[root@localhost ~]# echo "pts/0" >> /var/lib/libvirt/filesystems/debian01/etc/securetty

起動してコンソール接続します。

[root@localhost ~]# virsh -c lxc:// start --console debian01

これで先に設定したrootパスワードでコンソールログインできるはずです。

以下を参考にしました。
Launch secure LXC containers on Fedora 20 using SELinux and sVirt – major.io

CentOS 7 KVM guest on Fedora 20

 article  Comments Off on CentOS 7 KVM guest on Fedora 20
Aug 132014
 

Fedora 20にKVMゲストとしてCentOS 7をインストールしようとしたところ、768MBではメモリ不足になってしまいました。

[root@localhost ~]# virt-install --connect qemu:///system -n centos7 --memory 768 --disk /dev/vg00/centos7_root --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://mirror.centos.org/centos-7/7/os/x86_64/

“gzip invoked oom-killer”となって中断してしまいます。

[  OK  ] Started dracut initqueue hook.
         Starting dracut pre-mount hook...
[  OK  ] Started dracut pre-mount hook.
[  OK  ] Reached target Initrd Root File System.
         Starting Reload Configuration from the Real Root...
[  OK  ] Started Reload Configuration from the Real Root.
[  OK  ] Reached target Initrd File Systems.
         Starting dracut mount hook...
[   77.580372] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
[  OK  ] Started dracut mount hook.
[  OK  ] Reached target Initrd Default Target.
[  100.166000] gzip invoked oom-killer: gfp_mask=0x200da, order=0, oom_score_adj=0
[  100.167946] gzip cpuset=/ mems_allowed=0
[  100.168981] CPU: 0 PID: 927 Comm: gzip Not tainted 3.10.0-123.el7.x86_64 #1
[  100.170716] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[  100.172176]  ffff88002fad4fa0 00000000602dc3bc ffff8800123a3798 ffffffff815e19ba
[  100.174333]  ffff8800123a3828 ffffffff815dd02d ffffffff810b68f8 ffff88002f57d4b0
[  100.176493]  ffffffff00000202 ffffffff00000000 0000000000000000 ffffffff81102e03
[  100.178655] Call Trace:
[  100.179335]  [] dump_stack+0x19/0x1b
[  100.180646]  [] dump_header+0x8e/0x214

OOMですのでメモリ増やせば回避できます。

[root@localhost ~]# virt-install --connect qemu:///system -n centos7 --memory 1024 --disk /dev/vg00/centos7_root --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://mirror.centos.org/centos-7/7/os/x86_64/

にしても「1GBかー」と思ってたら公式にも必要メモリは最低1GBなのですね。
リリースノートの「第3章 能力および制限」にもちゃんと1GBと記載されていました。

CentOS 7のキーボードレイアウト変更

 article  Comments Off on CentOS 7のキーボードレイアウト変更
Jul 312014
 

Red Hat 7になって/etc/sysconfig/keyboardによる設定ではなくなりました。

仮想コンソールのキーボード設定はSystem Administrator’s Guideの1.2. Changing the Keyboard Layoutにあるように、localectlコマンドを使います。
今の設定を確認するにはstatusオプションを使います。

localectl status

指定可能なキーボードレイアウトはlist-keymapsオプションで確認できます。

localectl list-keymaps

例えばjp106キーボードに設定するにはset-keymapオプションを使って以下を実行します。

localectl set-keymap jp106

localectlコマンドで設定した結果は/etc/vconsole.confに保存されます(system-config-keyboardを使った場合も同様)。

ただ、この方法ですと物理コンソール(物理といってよいのかわかりませんが)のキーボードレイアウトは変わりません。
こちらは正確な情報が不明なのですが、kernelオプションで設定できるようなので、grub.cfgを変更してみました。
具体的には/etc/default/grubファイルのGRUB_CMDLINE_LINUXに指定されているvconsole.keymapを変更してgrub2-mkconfigを実行しています。

変更前

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet"

変更後

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=jp106 rhgb quiet"

そしてgrub2-mkconfig実行。

grub2-mkconfig -o /boot/grub2/grub.cfg

こうすることでkernelのコマンドラインオプションが変更され、初期の物理コンソールから指定したキーボードレイアウトを使用できるようになります。