‘CentOS’ カテゴリーのアーカイブ

LibreOffice Online デモサーバを構築してみた。

Nextcloud との連携編

前回の記事で、loolwsdのインストール・起動までを取り上げましたが、loolwsd単体では、実用性がほぼありません。
そこで、今回は、loolwsdのUIとなるべきフロントエンドとなるNextcloudのインストールと連携を取り上げます。

Nextcloud のインストール

http、PHPの必要モジュール等のインストール

まずはhttpdと必要なモジュールなどをインストールします。

[lool@scw-6b31f8 ~]$ sudo yum install httpd mod_ssl
[lool@scw-6b31f8 ~]$ sudo yum install --enablerepo=epel,webtatic mod_php72w php72w-mbstring php72w-common php72w-mysqlnd php72w-gd php72w-xml php72w-pdo

/etc/httpd/conf/httpd.confの設定

/etc/httpd/conf/httpd.confを編集し、初期設定を行います。
今回は差分を掲載しておきます。

[lool@scw-6b31f8 ~]$ diff -urw /etc/httpd/conf/httpd.conf.orig /etc/httpd/conf/httpd.conf
--- /etc/httpd/conf/httpd.conf.orig     2018-04-11 05:27:26.000000000 +0900
+++ /etc/httpd/conf/httpd.conf  2018-05-28 17:49:27.559577372 +0900
@@ -94,6 +94,15 @@
 #
 #ServerName www.example.com:80

+ServerTokens Prod
+Header unset X-Powered-By
+Header append X-Frame-Options SAMEORIGIN
+Header set X-XSS-Protetion "1; mode=block"
+Header set X-Content-Type-Options nosniff
+RequestHeader unset Proxy
+TraceEnable Off
+ServerSignature Off
+
 #
 # Deny access to the entirety of your server's filesystem. You must
 # explicitly permit access to web content directories in other
@@ -141,14 +150,16 @@
     # http://httpd.apache.org/docs/2.4/mod/core.html#options
     # for more information.
     #
-    Options Indexes FollowSymLinks
+    #Options Indexes FollowSymLinks
+    Options FollowSymLinks

     #
     # AllowOverride controls what directives may be placed in .htaccess files.
     # It can be "All", "None", or any combination of the keywords:
     #   Options FileInfo AuthConfig Limit
     #
-    AllowOverride None
+    #AllowOverride None
+    AllowOverride All

     #
     # Controls who can get stuff from this server.

バーチャルホストの設定

nextcloud,libre,loolの3ホストを利用します。libre,loolに関しては、同一サーバ内で構築する場合は不要かもしれません。(未検証)
今回のデモサーバを構築する前に検証用として構築していたサーバの構成が、Nextcloudサーバとloolwsdサーバが別サーバである
環境であった為、3ホストでの構成となってます。

Nextcloud <->libre(Proxy)<->lool

libreサーバはProxyとして入っています。
Nextcloud内のLibreOfficeとの連携アプリ「Collabora Online」がhttps接続のみしか受け付けない仕様となっていたので、
https(ポート443番)で受けて、loolサーバのポート番号9980番へ中継するという形です。
libreサーバを設けず、loolサーバのポート443番で受けて、loolサーバか、もしくはlocalhostの9980へ中継するという構成の方が妥当かもしれません。さらに言うならば…loolに関しては…loolwsdサーバそのものが通信相手なので、certbotでSSL証明書を更新し続けるためのダミーだったりします。
が、今回は…3ホスト構成という事で…(LB構成を意識したのはナイショです。)

Nextcloudのバーチャルホスト設定

<VirtualHost *:443>
    Servername nextcloud.lancardcom.xyz
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/nextcloud/
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/letsencrypt/live/nextcloud.lancardcom.xyz/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.lancardcom.xyz/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/nextcloud.lancardcom.xyz/chain.pem
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    CustomLog       "|/usr/sbin/rotatelogs /var/log/httpd/nextcloud/ssl_access_log_%Y%m%d 86400 540" combined
    ErrorLog        /var/log/httpd/nextcloud/ssl_error_log
    <Directory "/var/www/nextcloud/">
        AllowOverride All
        Options FollowSymLinks
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    Servername nextcloud.lancardcom.xyz
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/nextcloud/

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    CustomLog       "|/usr/sbin/rotatelogs /var/log/httpd/nextcloud/access_log_%Y%m%d 86400 540" combined
    ErrorLog        /var/log/httpd/nextcloud/error_log
    <Directory "/var/www/nextcloud/">
        AllowOverride All
        Options FollowSymLinks
    </Directory>
</VirtualHost>

libreのバーチャルホスト設定

<VirtualHost *:443>
    Servername libre.lancardcom.xyz
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/libre/
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/letsencrypt/live/libre.lancardcom.xyz/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/libre.lancardcom.xyz/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/libre.lancardcom.xyz/chain.pem
    SSLHonorCipherOrder on

    # Encoded slashes need to be allowed
    AllowEncodedSlashes NoDecode

    # Container uses a unique non-signed certificate
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    # keep the host
    ProxyPreserveHost On

    # static html, js, images, etc. served from loolwsd
    # loleaflet is the client part of LibreOffice Online
    ProxyPass           /loleaflet https://lool.lancardcom.xyz:9980/loleaflet retry=0
    ProxyPassReverse    /loleaflet https://lool.lancardcom.xyz:9980/loleaflet

    # WOPI discovery URL
    ProxyPass           /hosting/discovery https://lool.lancardcom.xyz:9980/hosting/discovery retry=0
    ProxyPassReverse    /hosting/discovery https://lool.lancardcom.xyz:9980/hosting/discovery

    # Main websocket
    ProxyPassMatch      "lool/(.*)/ws$" wss://lool.lancardcom.xyz:9980/lool/$1/ws nocanon

    # Admin Console websocket
    ProxyPass           /lool/adminws wss://lool.lancardcom.xyz:9980/lool/adminws

    # Download as, Fullscreen prezentation and Image upload operations
    ProxyPass           /lool https://lool.lancardcom.xyz:9980/lool
    ProxyPassReverse    /lool https://lool.lancardcom.xyz:9980/lool


    Loglevel debug
    CustomLog       "|/usr/sbin/rotatelogs /var/log/httpd/libre/ssl_access_log_%Y%m%d 86400 540" combined
    ErrorLog        /var/log/httpd/libre/ssl_error_log

    #Header always set Content-Security-Policy "default-src 'none'"

    <Directory "/var/www/libre/">
        AllowOverride All
        Options FollowSymLinks
    </Directory>
</VirtualHost>
                                                                                                                        <VirtualHost *:80>
    Servername libre.lancardcom.xyz
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/libre/
    CustomLog       "|/usr/sbin/rotatelogs /var/log/httpd/libre/access_log_%Y%m%d 86400 540" combined

    <Directory "/var/www/libre/">
       AllowOverride All
       Options FollowSymLinks
    </Directory>
</VirtualHost>

loolのバーチャルホスト設定

このバーチャルホストはLet’s EncryptでSSL証明書を取るためのダミーだったりします。
オレオレ証明書で起動した際、Nextcloudとの連携時に不具合が出た為、正規のSSL証明書で運用する事になりました。

<VirtualHost *:80>
    Servername lool.lancardcom.xyz
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    DirectoryIndex index.html index.php
    DocumentRoot /var/www/lool/
    CustomLog       "|/usr/sbin/rotatelogs /var/log/httpd/lool/access_log_%Y%m%d 86400 540" combined
    ErrorLog        /var/log/httpd/lool/error_log
    <Directory "/var/www/lool/">
       AllowOverride All
       Options FollowSymLinks
    </Directory>
</VirtualHost>

loolwsd 側の設定

連携時に必要なloolwsd側の設定です。
online/loolwsd.xmlにて設定します。
今回は差分を掲載しておきます。
設定の要はSSL証明書の格納場所と通信許可ホストとWOPIホストの設定です。

--- loolwsd.xml.orig    2018-06-04 09:59:41.709736164 +0900
+++ loolwsd.xml 2018-06-07 10:49:16.111249275 +0900
@@ -3,7 +3,7 @@
     <!-- Note: 'default' attributes are used to document a setting's default value as well as to use as fallback. -->
     <!-- Note: When adding a new entry, a default must be set in WSD in case the entry is missing upon deployment. -->

-    <allowed_languages desc="List of supported languages on this instance." default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru">de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</allowed_languages>
+    <allowed_languages desc="List of supported languages on this instance." default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru">ja de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</allowed_languages>

     <tile_cache_path desc="Path to a directory where to keep the tile cache." type="path" relative="false" default="/usr/local/var/cache/loolwsd"></tile_cache_path>
     <sys_template_path desc="Path to a template tree with shared libraries etc to be used as source for chroot jails for child processes." type="path" relative="true" default="systemplate"></sys_template_path>
@@ -39,7 +39,7 @@
         <color type="bool">true</color>
         <level type="string" desc="Can be 0-8, or none (turns off logging), fatal, critical, error, warning, notice, information, debug, trace" default="trace">trace</level>
         <file enable="true">
-            <property name="path" desc="Log file path.">/tmp/loolwsd.log</property>
+            <property name="path" desc="Log file path.">/opt/lool/loolwsd.log</property>
             <property name="rotation" desc="Log file rotation strategy. See Poco FileChannel.">never</property>
             <property name="archive" desc="Append either timestamp or number to the archived log filename.">timestamp</property>
             <property name="compress" desc="Enable/disable log file compression.">true</property>
@@ -65,16 +65,19 @@
     <net desc="Network settings">
       <proto type="string" default="all" desc="Protocol to use IPv4, IPv6 or all for both">all</proto>
       <post_allow desc="Allow/deny client IP address for POST(REST)." allow="true">
-        <host desc="Regex pattern of ip address to allow.">192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host>
+        <host desc="Regex pattern of ip address to allow.">localhost</host>
+        <host desc="Regex pattern of ip address to allow.">nextcloud.lancardcom.xyz</host>
+        <host desc="Regex pattern of ip address to allow.">libre.lancardcom.xyz</host>
+        <host desc="Regex pattern of ip address to allow.">lool.lancardcom.xyz</host>
       </post_allow>
     </net>

     <ssl desc="SSL settings">
         <enable type="bool" default="true">true</enable>
         <termination desc="Connection via proxy where loolwsd acts as working via https, but actually uses http." type="bool" default="true">false</termination>
-        <cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/cert.pem</cert_file_path>
-        <key_file_path desc="Path to the key file" relative="false">/etc/loolwsd/key.pem</key_file_path>
-        <ca_file_path desc="Path to the ca file" relative="false">/etc/loolwsd/ca-chain.cert.pem</ca_file_path>
+        <cert_file_path desc="Path to the cert file" relative="false">/etc/letsencrypt/live/lool.lancardcom.xyz/cert.pem</cert_file_path>
+        <key_file_path desc="Path to the key file" relative="false">/etc/letsencrypt/live/lool.lancardcom.xyz/privkey.pem</key_file_path>
+        <ca_file_path desc="Path to the ca file" relative="false">/etc/letsencrypt/live/lool.lancardcom.xyz/chain.pem</ca_file_path>
         <cipher_list desc="List of OpenSSL ciphers to accept" default="ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"></cipher_list>
         <hpkp desc="Enable HTTP Public key pinning" enable="false" report_only="false">
             <max_age desc="HPKP's max-age directive - time in seconds browser should remember the pins" enable="true">1000</max_age>
@@ -94,6 +97,9 @@
         <filesystem allow="false" />
         <wopi desc="Allow/deny wopi storage. Mutually exclusive with webdav." allow="true">
             <host desc="Regex pattern of hostname to allow or deny." allow="true">localhost</host>
+            <host desc="Regex pattern of hostname to allow or deny." allow="true">nextcloud.lancardcom.xyz</host>
+            <host desc="Regex pattern of hostname to allow or deny." allow="true">libre.lancardcom.xyz</host>
+            <host desc="Regex pattern of hostname to allow or deny." allow="true">lool.lancardcom.xyz</host>
             <host desc="Regex pattern of hostname to allow or deny." allow="true">10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}</host>
             <host desc="Regex pattern of hostname to allow or deny." allow="true">172\.1[6789]\.[0-9]{1,3}\.[0-9]{1,3}</host>
             <host desc="Regex pattern of hostname to allow or deny." allow="true">172\.2[0-9]\.[0-9]{1,3}\.[0-9]{1,3}</host>

httpd、loolwsdサービスの再起動

httpdとloolwsdを再起動して、これまでの設定を有効化します。
エラーが出る場合は、設定の見直しや必要なディレクトリやパーミッションの設定など調整してください。
例)構築中に実際にあったエラー原因
* ログ用のディレクトリを未作成、もしくはオーナー、パーミッションの設定間違い
* SSL証明書のディレクトリのパーミッション設定(700でroot以外読めなかった)
* ドキュメントルートのディレクトリを未作成
* 単純なconfファイルのタイポ

Nextcloudのインストール

ここまで長かったですが…やっとNextcloud本体のインストールです。
まぁ、ソースダウンロードして、ドキュメントルートにおいて、あとは、WebUIの指示に従ってインストールするだけなので、ほぼこれまでの準備が肝だったり。あ…Nextcloud用のDBの準備忘れてました。

Nextcloud用DBの作成

[root@scw-6b31f8 ~]# mysql -u root -p
Enter password:
elcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE データベース名;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード' ;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> FLUSH PRIVILEGES ;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> QUIT
Bye

Nextcloudのソースのダウンロードと配置

[lool@scw-6b31f8 Archives]$ wget https://download.nextcloud.com/server/releases/nextcloud-13.0.2.zip
[lool@scw-6b31f8 Archives]$ unzip nextcloud-13.0.2.zip
[lool@scw-6b31f8 Archives]$ sudo cp -rp nextcloud/* /var/www/nextcloud/
[lool@scw-6b31f8 Archives]$ sudo chown -R apache. /var/www/nextcloud
[lool@scw-6b31f8 Archives]$ sudo systemctl restart httpd

後は、ブラウザで、Nextcloud用に設定したURLを開いて、画面の指示に従ってインストールを完了させます。
もしWebUIでのインストールがわからない…という方は…ドキュメントを読み直してください。
(すみません。画像貼るのが面倒なので手抜きさせてください。)
こちらのサイトなどを参照していただけると丁寧に解説されてます。
CentOS7にNextcloudインストール | server-memo.net
CentOS 7 : NextCloud インストール : Server World

Nexcloud側の連携設定

最後に、NexcloudのWebUI上の「アプリ」から「Collabora Online」を有効にします。
すると、「設定」の左サイドメニューに「Collabora Online」の項目が表示されますので、そこで、loolwsdサーバを指定します。
今回の場合は…Proxyであるlibreを指定するので、「https://」から始まるアドレスを入力して「適用」をクリックして完了です。
おそらくここまでの記事で設定を進めてこれた方であれば、見ればわかるので、スクリーンショットなど付けた説明は割愛させていただきます。
(さらにリンクを貼るのも手抜きさせてください。)

最後に構築後、操作してみた感じ

実際に、操作してみた感じですが、やはり…入力、変換等は通信ラグ等により、もっさり感がぬぐえません。まだ完全にLibreOfficeの全機能に対応してはいない為、メニューにはあるのに機能しない部分もちらほらありました。loolwsdのログを見て気が付いたのですが、なぜかUTC表示からローカル時刻への変更ができません。
上記の現象と同一の原因だと思われますがCalc(表計算)のNOW()関数などの結果もUTCで表示される為、その辺が難点になるかと思われます。
やはり…Microsoft Office365やGoogleAppsなどの大手商用サービスと比較すると、ユーザビリティに一歩劣る感は否めませんでした。

ただし…
– どうしてもデータをクラウド上に置けない。オンプレミスである必要がある。
->(社内規定などによるセキュリティ上の制限がある。)
– 内部での共有のみで、外部とのドキュメント等のやり取りをほぼ行わない。
->(MicrosoftのWard、Excelファイル等と互換はありますが、それほど互換性は高くないです。)
– ライセンスにコストをかけたくない
->(オープンソースなので構築コスト・保守コスト以外はかかりません。)
と言った場合には最適のソリューションではないでしょうか。

Facebooktwittergoogle_pluslinkedintumblrmail

LibreOffice Online デモサーバを構築してみた。

LibreOffice Online デモサーバを構築してみた。

loolサーバ構築編

前回、デモサーバをご案内した続き、構築方法編です。
環境は以下の通り

今回の構築環境

  • scaleway上の最小インスタンス
  • OSはCentOS Linux release 7.5.1804 (Core)
  • グループパッケージ、Base,DevelopmentToolsをインストール済み
  • 追加リポジトリにepel,webtatic(デフォルト無効化)
  • PHP7.2,MariaDB5.5.56インストール済み
  • DNSにDNSにnexcloud.lancardcom.xyz,libre.lancardcom.xyz,lool.lancardcom.xyzを設定、FQDNでのアクセスが可能。
  • SSL証明書はLet’s Encryptを利用

インストール作業・サービス稼働用ユーザ”lool”の作成

[root@scw-6b31f8 ~]# useradd -d /opt/lool lool
[root@scw-6b31f8 ~]# visudo     #ユーザloolをsudo使用可能にする。
[root@scw-6b31f8 ~]# su - lool
[lool@scw-6b31f8 ~]$ pwd
/opt/lool

LibreOffice のコンパイル

ほぼ下記の参照URL通りです。
参照URL:https://librepc.jp/blog_20.html

LibreOfficeの依存関係の解消

yum-builddepはBaseグループパッケージにてインストールされています。
ない場合は、yum-utilsをインストールしてください。

[lool@scw-6b31f8 ~]$ sudo yum-builddep libreoffice

日本語フォントをインストール

[lool@scw-6b31f8 ~]$ sudo yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

gitからのインストール

LibreOfficeのソースコードをダウンロードします。

[lool@scw-6b31f8 ~]$ git clone git://anongit.freedesktop.org/libreoffice/core
[lool@scw-6b31f8 ~]$ cd core/
[lool@scw-6b31f8 core]$ ./autogen.sh --with-lang="ja"

autogen.sh 実行時に以下のWARNINGが出ますが、影響ないそうなので無視していいそうです。

* WARNING : no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo

コンパイルします。SSH端末上なので、長時間のmakeでは切断等の恐れがありますので、
nohupコマンドを使います。前後にdateを実行してるのは、単にmakeにかかった時間を知りたかったからです。

[lool@scw-6b31f8 core]$ nohup sh -c 'date ; make ; date' &

あとは一旦放置です。11時間半かかってました…

Thu May 31 00:17:48 JST 2018
mkdir -p /opt/lool/core/instdir
/opt/lool/core/solenv/bin/install-gdb-printers -a /opt/lool/core/instdir -c
make -j 2  -rs -f /opt/lool/core/Makefile.gbuild    all
[build C  ] solenv/bin/concat-deps.c

…………

[build BIN] top level modules: libreoffice
[build ALL] top level modules: build-non-l10n-only build-l10n-only
Thu May 31 11:45:03 JST 2018

loolwsd のインストール

pocoライブラリのインストール

loolをインストールする前にコンパイルに必要なpocoライブラリをインストールします。
最新版は、poco-1.9.0です。poco-1.9.0-all のソースをダウンロードしてください。

[lool@scw-6b31f8 Archives]$ wget https://pocoproject.org/releases/poco-1.9.0/poco-1.9.0-all.tar.gz
[lool@scw-6b31f8 Archives]$ tar zxvf poco-1.9.0-all.tar.gz
[lool@scw-6b31f8 Archives]$ cd poco-1.9.0-all/
[lool@scw-6b31f8 poco-1.9.0-all]$ ./configure --prefix=/opt/lool/poco
[lool@scw-6b31f8 poco-1.9.0-all]$ make
[lool@scw-6b31f8 poco-1.9.0-all]$ sudo make install

必要ライブラリなどのインストール

[lool@scw-6b31f8 ~]$ sudo yum install libcap-devel

polibのインストール

[lool@scw-6b31f8 ~]$ sudo yum install --enablerepo=epel python-pip
[lool@scw-6b31f8 ~]$ sudo pip install --upgrade pip
[lool@scw-6b31f8 ~]$ sudo pip install polib

jakeのインストール

yum でnpmをインストールした場合、jakeの古いバージョンが入る為、npmをアップデートします。
ただし、普通にアップデートした際、エラーが出る為、ユーザ環境にnpmを再インストールして、
jakeをインストールするようにします。。

[lool@scw-6b31f8 ~]$ sudo yum install --enablerepo=epel npm
[lool@scw-6b31f8 ~]$ mkdir ~/.npm-global
[lool@scw-6b31f8 ~]$ npm config set prefix '~/.npm-global'
[lool@scw-6b31f8 ~]$ vim .bash_profile
[lool@scw-6b31f8 ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$HOME/.local/bin:$HOME/bin:$HOME/.npm-globl/bin:$PATH   #<-PATHに追加、$PATHが頭にある場合は後ろに持ってくる事

export PATH

[lool@scw-6b31f8 ~]$ source .bash_profile
[lool@scw-6b31f8 ~]$ npm install -g npm
[lool@scw-6b31f8 ~]$ npm install -g n
[lool@scw-6b31f8 ~]$ n latest
[lool@scw-6b31f8 ~]$ npm update -g npm
[lool@scw-6b31f8 ~]$ npm install -g jake

loolのソースダウンロード

[lool@scw-6b31f8 ~]$ git clone git://anongit.freedesktop.org/libreoffice/online

loolのビルド

[lool@scw-6b31f8 ~]$ cd online/
[lool@scw-6b31f8 online]$ ./autogen.sh
[lool@scw-6b31f8 online]$ ./configure --enable-silent-rules \
> --with-lokit-path=/opt/lool/core/include \
> --with-lo-path=/opt/lool/core/instdir \
> --with-poco-includes=/opt/lool/poco/include \
> --with-poco-libs=/opt/lool/poco/lib \
> --enable-debug
[lool@scw-6b31f8 online]$ make

lool証明書用ディレクトリ作成

[lool@scw-6b31f8 online]$ sudo mkdir /etc/loolwsd
[lool@scw-6b31f8 online]$ sudo cp etc/* /etc/loolwsd/

loolキャッシュ用ディレクトリ作成

[lool@scw-6b31f8 online]$ sudo mkdir -p /usr/local/var/cache/loolwsd
[lool@scw-6b31f8 online]$ sudo chown lool. /usr/local/var/cache/loolwsd

loolのサービス化

[lool@scw-6b31f8 online]$ sudo vim /usr/lib/systemd/system/loolwsd.service
[lool@scw-6b31f8 online]$ cat /usr/lib/systemd/system/loolwsd.service
[Unit]
Description=LibreOffice Online WebSocket Daemon
After=network.target

[Service]
ExecStart = /opt/lool/online/loolwsd --o:sys_template_path=/opt/lool/online/systemplate --o:lo_template_path=/opt/lool/core/instdir --o:child_root_path=/opt/lool/online/jails --o:storage.filesystem[@allow]=true --o:admin_console.username=ka管理者ID --o:admin_console.password=管理者パスワード
Restart = always
Type = simple
User=lool

[Install]
WantedBy=multi-user.target

[lool@scw-6b31f8 online]$ sudo systemctl daemon-reload
[lool@scw-6b31f8 online]$ sudo systemctl enable loolwsd
[lool@scw-6b31f8 online]$ sudo systemctl start loolwsd
[lool@scw-6b31f8 online]$ sudo systemctl status loolwsd
●loolwsd.service - LibreOffice Online WebSocket Daemon
   Loaded: loaded (/usr/lib/systemd/system/loolwsd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-06-04 11:13:43 JST; 16s ago
 Main PID: 24320 (loolwsd)
   CGroup: /system.slice/loolwsd.service
           ├─24320 /opt/lool/online/loolwsd --o:sys_template_path=/opt/lool/online/systemplate --o:lo_template_path=/...
           ├─24324 /opt/lool/online/loolforkit --losubpath=lo --systemplate=/opt/lool/online/systemplate --lotemplate...
           └─24328 /opt/lool/online/loolforkit --losubpath=lo --systemplate=/opt/lool/online/systemplate --lotemplate...

Jun 04 11:13:43 scw-6b31f8 loolwsd[24320]: Or for the Admin Console:
Jun 04 11:13:43 scw-6b31f8 loolwsd[24320]: https://admin:admin@localhost:9980/loleaflet/dist/admin/admin.html
Jun 04 11:13:44 scw-6b31f8 loolwsd[24320]: Init vcl
Jun 04 11:13:45 scw-6b31f8 loolwsd[24320]: preload: comphelper unordf ucpchelp1 sfx msforms vbaobj xo pcr vbaswo...handl
Jun 04 11:13:46 scw-6b31f8 loolwsd[24320]: Whitelisted languages: de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru
Jun 04 11:13:46 scw-6b31f8 loolwsd[24320]: Preloading dictionaries: en_US en_GB
Jun 04 11:13:46 scw-6b31f8 loolwsd[24320]: Preloading thesauri: en_US en_GB
Jun 04 11:13:46 scw-6b31f8 loolwsd[24320]: Preload icons
Jun 04 11:13:46 scw-6b31f8 loolwsd[24320]: Preload languages
Jun 04 11:13:47 scw-6b31f8 loolwsd[24320]: Ready to accept connections on port 9980.
Hint: Some lines were ellipsized, use -l to show in full.

今回はloolwsdの起動までを一通り上げてみました。
ただし、loolwsd単体では、ドキュメントの作成・保存などは、できない事はないですが、ほぼ無理筋なため、次回はより直感的にloolwsdを利用可能にするGUI環境のフロントエンドとしてNextcloudとの連携の記事を上げます。

Facebooktwittergoogle_pluslinkedintumblrmail

LibreOffice Online のご紹介

“自社オリジナルのGoogle Appsっぽい環境はいかがですか?”

LibreOffice とは?

LibreOffice公式サイト https://ja.libreoffice.org/

LibreOfficeとは…簡単に言いますと、MicrosoftのOfficeシリーズと類似した機能をもつオープンソースの無料のソフトウェアです。
公式サイトによりますと、以下のように説明されています。

「LibreOfficeは強力なオフィススイートです; クリーンなインターフェイスと強力なツールであなたの創造性を解き放ち、生産性を高めます。LibreOfficeはその市場において最も強力なフリーかつオープンなオフィススイートとなっています。これは次のようなさまざまなアプリケーションのためです: ワードプロセッサのWriter、表計算アプリケーションのCalc、プレゼンテーションエンジンのImpress、ドローイングおよびフローチャートのためのDraw、データベースおよびそのフロントエンドとなるBase、そして数式を編集するためのMathです。」

LibreOffice Online(lool) とは?

上記のLibreOfficeにOnline版です。略称で「lool」と呼ばれています。
Online版になると何が変わるのかといいますと…

各個のPCにソフトウェアをインストールしなくても使えるのが大きな特徴です。

サーバからプログラムを呼出して、各PCのブラウザ上で実行されるのです。
現在もなお開発中で、上記の機能の内でよく使われる、ワープロ、表計算、プレゼンが実装されています。

デモ用サーバのご案内

昨年(2017年)の10月頃にその存在を知らされて、一度、利用環境を構築してみたもののとても実用に耐えるレベルではなかった為、お蔵入りとなっていたネタだったのですが、それから約半年…開発が進み、かなりいい感じになってきました。

そこで今回デモ用に構築したサーバを公開します。実際に触ってみるのが手っ取り早いでしょう。

デモ用サーバURL: https://nextcloud.lancardcom.xyz
ユーザID: guestuser
パスワード: guest1234

次回の記事では、lool環境の構築方法について書こうと思います。

Facebooktwittergoogle_pluslinkedintumblrmail

Scalewayに30分でGitHubクローンを建てるよ

GitHubクローン、Gogs(https://gogs.io/)をScalewayに5分で建てるというLTネタができるのでは?
と思ってのにやってみたら30分かかることが判明したでござる(完全敗北)

こんにちプレミアム。公開は月曜日だけど書いているのはフライデー。muraveです。

ここのところ続けて書いている Vagrant + Ansible で Scaleway にサーバーを建てるネタの集大成的な内容です。シナリオは

  • CentOS7 インスタンスを起動
  • CentOS7 基本設定
    • 基本ツール類導入
    • firewalld起動
  • CEFSプロジェクト提供のエラッタに基づきセキュリティアップデート
  • MySQL 5.7 導入
  • Nginx 導入
  • Gogs 導入
  • Gogs 初期設定・インストール(Web画面)
  • 最初のユーザー(管理者)作成
  • テスト用リポジトリ作成
  • リポジトリにpush

Gogsの導入時にNginxのリバースプロキシ設定やSELinuxのポリシーモジュール追加などやってるのでPHP動かしたりするときなどにも色々と参考になると思います(と未来の自分に語りかける)

jmurabe/scaleway-centos7gogs
(さらに…)

Facebooktwittergoogle_pluslinkedintumblrmail

DRBD9のclient機能を試す

DRBD9の新機能 client機能を試してみました。
client機能は、DRBDストレージを持たないノードに、DRBDリソースをマウントできる機能の様です。

前提

  • クライアントノード用にホストmysql01、mysql02を用意する。<\li>
  • ホストdrbd01~03が持つdrbd領域用のHDDは搭載しない
  • OS等の構成はホストdrbd01~03と同じ。
  • DRBDカーネルモジュール、drbd-util、drbdmanageをインストールしてある状態です。
  • 前述の方法にてDRBDリソースmysql-slv(容量10GB)を作成してある。
  • mysql01、02にはMariaDBをインストールしてあります。
  • mysql01のIPアドレス: 192.168.24.226
  • mysql02のIPアドレス: 192.168.24.227

クライアントモードでノードを追加する。

drbd01にて

[root@drbd01 ~]# drbdmanage n
+----------------------------------------------------------------------------------------+
| Name   | Pool Size | Pool Free |                                               | State |
|----------------------------------------------------------------------------------------|
| drbd01 |     51196 |     32092 |                                               |    ok |
| drbd02 |     51196 |     32092 |                                               |    ok |
| drbd03 |     51196 |     32092 |                                               |    ok |
+----------------------------------------------------------------------------------------+
[root@drbd01 ~]# drbdmanage add-node --satellite --no-storage mysql01 192.168.24.226
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node mysql01:
drbdmanage restart

mysql01でdrbdmanage で再起動コマンドを実行します。

[root@mysql01 ~]# drbdmanage restart
You are going to shut down the drbdmanaged server process on this node.
Please confirm:
  yes/no: yes
Attempting to startup the server through D-Bus activation...
D-Bus connection successful, server is running and reachable

drbd01にて、確認してみると、mysql01がclientとして追加されていることがわかります。サテライトノードとは、DRBDのコントロール用のリソース.drbdctrlを持たないノードの事です。

以前のリリースでは、add-nodeサブコマンド実施時に–contorole-nodeオプションにて属するコントロールノードを指定する必要があったようですが、今のリリースでは–contorole-nodeオプションは無くなり、指定する必要がなくなったようです。

ちなみに、–satelliteオプションを利用せずにクライアントノードを追加しようとすると、各ノードでの追加用コマンドを実施した際、.drbdctrlリソース用の領域を作成しようとするので、今回のようにDRBD用の領域を持たないクライアントでは、追加に失敗します。

[root@drbd01 ~]# drbdmanage n
+----------------------------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                         |                      State |
|----------------------------------------------------------------------------------------|
| drbd01  |     51196 |     32092 |                         |                         ok |
| drbd02  |     51196 |     32092 |                         |                         ok |
| drbd03  |     51196 |     32092 |                         |                         ok |
| mysql01 |         0 |         0 |                         | satellite node, no storage |
+----------------------------------------------------------------------------------------+

クライアントノードへリソースを割り当てる

mysql01へDRBDリソースmysql-priを割当ます。
assignサブコマンドに–clientオプションを付けて実行します。

[root@drbd01 ~]# drbdmanage assign mysql-pri mysql01 --client
Operation completed successfully
[root@drbd01 ~]# drbdmanage list-assignments
+----------------------------------------------------------------------------------------+
| Node    | Resource  | Vol ID |                                                |  State |
|----------------------------------------------------------------------------------------|
| drbd01  | mysql-pri |      * |                                                |     ok |
| drbd01  | mysql-slv |      * |                                                |     ok |
| drbd02  | mysql-pri |      * |                                                |     ok |
| drbd02  | mysql-slv |      * |                                                |     ok |
| drbd03  | mysql-pri |      * |                                                |     ok |
| drbd03  | mysql-slv |      * |                                                |     ok |
| mysql01 | mysql-pri |      * |                                                | client |
+----------------------------------------------------------------------------------------+

クライアントノードでリソースへファイルシステムを作成する

mysql01上で、リソースmysql-priにファイルシステムを作成します。
リソースの割当まで行うと、mysql01上から、mysql-priのブロックデバイスが参照できます。
list-volumesサブコマンドでブロックデバイスのマイナー番号を確認し、ファイルシステムを作成します。

[root@mysql01 ~]# drbdmanage list-volumes
+----------------------------------------------------------------------------------------+
| Name      | Vol ID |     Size | Minor |                                        | State |
|----------------------------------------------------------------------------------------|
| mysql-pri |      0 | 9.31 GiB |   100 |                                        |    ok |
| mysql-slv |      0 | 9.31 GiB |   101 |                                        |    ok |
+----------------------------------------------------------------------------------------+
[root@mysql01 ~]# mkfs.xfs /dev/drbd100
meta-data=/dev/drbd100           isize=512    agcount=4, agsize=610352 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2441406, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウントしてMariaDBを起動する。

後は、マウントしMariaDBを起動します。
が、/var/lib/mysqlにマウントした場合、ディレクトリのオーナーがmysqlからrootに変わってしまうので、注意してください。

[root@mysql01 ~]# ls -al /var/lib|grep mysql
drwxr-xr-x.  2 mysql   mysql      6  9月  5 15:55 mysql
[root@mysql01 ~]# mount /dev/drbd100 /var/lib/mysql
[root@mysql01 ~]# ls -al /var/lib|grep mysql
drwxr-xr-x.  2 root    root       6  9月 11 09:57 mysql
[root@mysql01 ~]# chown mysql:mysql /var/lib/mysql
[root@mysql01 ~]# systemctl start mariadb
[root@mysql01 ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-09-11 10:06:19 JST; 2min 56s ago
  Process: 28092 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
  Process: 28013 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
 Main PID: 28091 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           tq28091 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           mq28249 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin...

 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: The latest information about ....
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: You can find additional infor...:
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: http://dev.mysql.com
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Support MariaDB development b...B
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Corporation Ab. You can conta....
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Alternatively consider joinin...:
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: http://mariadb.com/kb/en/cont.../
 9月 11 10:06:13 mysql01 mysqld_safe[28091]: 170911 10:06:13 mysqld_safe Logging to ...'.
 9月 11 10:06:13 mysql01 mysqld_safe[28091]: 170911 10:06:13 mysqld_safe Starting my...ql
 9月 11 10:06:19 mysql01 systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@mysql01 ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDBの起動ができました。これでクライアントノードの追加は以上です。
後は、同様にmysql02のノード追加、mysql-slvのリソース追加を行います。

以上

Facebooktwittergoogle_pluslinkedintumblrmail

【DRBD9】rpmパッケージをビルドしてインストールする

今更ながらですが、DRBD9をインストールしてみました。他のサイトを参考にしていると、ソースからのmake、make installでしかインストールしていなかったので、rpmパッケージをビルドしてからインストールする方法を試してみました。

環境

  • OS: CentOS 7(パッケージグループ Base、Development Tools をインストール)
  • KVM上の仮想マシン(HDDは8GBと50GBの2台を搭載した状態)
  • drbd01~drbd03の3台でクラスタを構成
  • drbd01のIPアドレス: 192.168.24.223
  • drbd02のIPアドレス: 192.168.24.224
  • drbd03のIPアドレス: 192.168.24.225

rpmパッケージの作成

準備:rpmbuild環境構築

rpmbuildの環境を構築するツールがあるので、コマンド一つでrpmbuild環境が構築できます。

[root@drbd01 ~]# yum install -y rpmdevtools

ユーザに戻り、rpmdev-setuptreeコマンドを叩きます。

rpmbuildディレクトリから.rpmmacrosまで作成してくれます。

[fumikura@drbd01 ~]$ rpmdev-setuptree
[fumikura@drbd01 ~]$ tree -a
~~~
.
|-- .rpmmacros
`-- rpmbuild
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
~~~
7 directories, 7 files

必要パッケージのインストール

DRBD9のインストールに必要なパッケージをインストールします。

[fumikura@drbd01 ~]$ sudo yum install -y libxslt libxslt-devel pygobject2 help2man kernel-abi-whitelists

ソースのダウンロード

今回は、gitリポジトリがあるものはgitから入手しました。

ソース置場用のディレクトリを作って移動します。

[fumikura@drbd01 ~]$ mkdir Archives
[fumikura@drbd01 ~]$ cd Archives

– drbd kernel module

[fumikura@drbd01 Archive]$ git clone --recursive git://git.drbd.org/drbd-9.0.git

– drbd-utils

[fumikura@drbd01 Archives]$ git clone --recursive git://git.linbit.com/drbd-utils.git

– drbdmanage

[fumikura@drbd01 Archive]$ git clone --recursive git://git.drbd.org/drbdmanage.git

drbd kernel moduleのrpmパッケージ作成

今回は、公式サイトにてリリースされている最新リリースのdrbd-9.0.8に合わせてビルドしようと思います。

[fumikura@drbd01 Archive]$ cd drbd-9.0
[fumikura@drbd01 drbd-9.0]$ git checkout drbd-9.0.8
[fumikura@drbd01 drbd-9.0]$ make .filelist
[fumikura@drbd01 drbd-9.0]$ make kmp-rpm

drbd-utilsのrpmパッケージ作成

(2017.09.04,Mon 追記)
下記のまま、rpm作成を行うと、rpmのインストール時に競合が起こります。drbd.spec.inを以下のように修正してから実施してください。

--- ../drbd-utils.orig/drbd.spec.in     2017-09-01 15:01:35.721074085 +0900
+++ ./drbd.spec.in      2017-09-04 10:48:54.719119053 +0900
@@ -31,6 +31,7 @@
 # conditionals may not contain "-" nor "_", hence "bashcompletion"
 %bcond_without bashcompletion
 %bcond_without sbinsymlinks
+%undefine with_sbinsymlinks
 # --with xen is ignored on any non-x86 architecture
 %bcond_without xen
 %bcond_without 83support
[fumikura@drbd01 Archives]$ cd drbd-utils
[fumikura@drbd01 drbd-utils]$ git checkout v9.0.0
[fumikura@drbd01 drbd-utils]$ ./autogen.sh
[fumikura@drbd01 drbd-utils]$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
[fumikura@drbd01 drbd-utils]$ make .filelist
[fumikura@drbd01 drbd-utils]$ make rpm

drbdmanageのrpmパッケージ作成

drbdmanageはソース直下のディレクトリ、distの中にrpmパッケージが生成されます。

[fumikura@drbd01 Archive]$ cd drbdmanage/
[fumikura@drbd01 drbdmanage]$ make rpm
[fumikura@drbd01 drbdmanage]$ cd dist/
[fumikura@drbd01 dist]$ ls -al
合計 1080
drwxrwxr-x.  2 fumikura fumikura    111  8月  8 17:08 .
drwxrwxr-x. 11 fumikura fumikura   4096  8月  8 17:08 ..
-rw-rw-r--.  1 fumikura fumikura 507844  8月  8 17:08 drbdmanage-0.99.5-1.noarch.rpm
-rw-rw-r--.  1 fumikura fumikura 298012  8月  8 17:08 drbdmanage-0.99.5-1.src.rpm
-rw-rw-r--.  1 fumikura fumikura 294884  8月  8 17:08 drbdmanage-0.99.5.tar.gz

rpmパッケージのインストール

先程作成されたパッケージは、~/rpmbuild/RPMS/x86_64の中に10個、~/hoge/drbdmanage/distの中に1個の計11個のrpmパッケージが生成されています。
このうち、debuginfoとついているパッケージはインストールしなくても大丈夫です。

/home/fumikura/rpmbuild/RPMS/x86_64/kmod-drbd-9.0.8_3.10.0_514.26.2-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-kernel-debuginfo-9.0.8-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-utils-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-xen-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-udev-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-pacemaker-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-heartbeat-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-bash-completion-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-debuginfo-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/Archive/drbdmanage/dist/drbdmanage-0.99.5-1.noarch.rpm

drbd kernel moduleのインストール

[fumikura@drbd01 x86_64]$ sudo rpm -ivh kmod-drbd-9.0.8_3.10.0_514.26.2-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:kmod-drbd-9.0.8_3.10.0_514.26.2-1################################# [100%]

drbd-utilsのインストール

drbd-utils-9.0.0-1.el7.centos.x86_64.rpmはパッケージ自身と競合をおこして普通にインストールはできない為、–forceオプションでインストールします。(2017.09.04,Mon 修正)

[fumikura@drbd03 x86_64]$ sudo rpm -ivh drbd-utils-9.0.0-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbd-utils-9.0.0-1.el7.centos    ################################# [100%]

その他のパッケージについては、drbd-9.0.0-1.el7.centos.x86_64.rpm が他のパッケージに依存しているので、先に、xen、udev、pacemaker、heartbeat、bash-completionをインストール後にインストールしてください。

[fumikura@drbd01 x86_64]$ sudo rpm -ivh drbd-xen-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-udev-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-pacemaker-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-heartbeat-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-bash-completion-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-9.0.0-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbd-bash-completion-9.0.0-1.el7.################################# [ 17%]
   2:drbd-pacemaker-9.0.0-1.el7.centos################################# [ 33%]
   3:drbd-udev-9.0.0-1.el7.centos     ################################# [ 50%]
   4:drbd-xen-9.0.0-1.el7.centos      ################################# [ 67%]
   5:drbd-9.0.0-1.el7.centos          ################################# [ 83%]
   6:drbd-heartbeat-9.0.0-1.el7.centos################################# [100%]

drbdmanageのインストール

[fumikura@drbd01 dist]$ sudo rpm -ivh drbdmanage-0.99.9-1.noarch.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbdmanage-0.99.9-1              ################################# [100%]

インストールは以上です。drbd01~drbd03すべてのノードでインストール作業を実施します。
次に、簡単にDRBDクラスタの構成を行ってみます。

DRBDクラスタの構成

DRBD用領域の作成

drbd01~drbd03のすべてのノードで実施します。

パーティションの作成

[root@drbd01 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-104857599, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-104857599, 初期値 104857599):
初期値 104857599 を使います
Partition 1 of type Linux and of size 50 GiB is set

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

物理ボリューム(PV)の作成

[root@drbd01 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

ボリュームグループ(VG)の作成

[root@drbd01 ~]# vgcreate drbdpool /dev/sdb1
  Volume group "drbdpool" successfully created

ここで指定する”drbdpool”はdrbdmanageで使用されるデフォルト名ですので、変更せずに作成します。

drbdmanageでのノードの追加

準備: firewalldの設定

drbdmanageがノード間の通信に利用するポートを開けます。ノード間の制御には6996、6999を利用しています。
リソースの同期には、7000~7800を利用しています。まとめて、6996~7800を開けています。

[root@drbd01 ~]# firewall-cmd --add-port=6996-7800/tcp --zone=public --permanent
success
[root@drbd01 ~]# firewall-cmd --reload
success
[root@drbd01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 6996-7800/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

クラスタの初期化

drbd01のみで実行します。

[root@drbd01 ~]# drbdmanage init 192.168.24.223

You are going to initialize a new drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Empty drbdmanage control volume initialized on '/dev/drbd0'.
Empty drbdmanage control volume initialized on '/dev/drbd1'.
Waiting for server: .
Operation completed successfully

ノードの追加

drbd02を追加する
※まずdrbd01でコマンドを実行。各ノードで実行するコマンドを発行します。

[root@drbd01 ~]# drbdmanage add-node drbd02 192.168.24.224
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node drbd02:
drbdmanage join -p 6999 192.168.24.224 1 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx

上記の”drbdmanage join …..”をdrbd02で実行します。

[root@drbd02 ~]# drbdmanage join -p 6999 192.168.24.224 1 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully

drbd03についても同様に実施します。
・drbd01側

[root@drbd01 ~]# drbdmanage add-node drbd03 192.168.24.225
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node drbd03:
drbdmanage join -p 6999 192.168.24.225 2 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx

・drbd03側

[root@drbd03 ~]# drbdmanage join -p 6999 192.168.24.225 2 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully

クラスタの状態確認

[root@drbd01 ~]# drbdmanage list-nodes
+----------------------------------------------------------------------------------------+
| Name   | Pool Size | Pool Free |                                               | State |
|----------------------------------------------------------------------------------------|
| drbd01 |     51196 |     51188 |                                               |    ok |
| drbd02 |     51196 |     51188 |                                               |    ok |
| drbd03 |     51196 |     51188 |                                               |    ok |
+----------------------------------------------------------------------------------------+
[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

※”drbdmanage list-nodes”は”drbdmanage n”と省略できます。

リソースの追加

リソースを作成する

[root@drbd01 ~]# drbdmanage add-resource mysql-pri

リソース名を”mysql-pri”としたのは、後でMySQLのクラスタに利用するつもりです…

リソースのボリュームを設定する

[root@drbd01 ~]# drbdmanage add-volume mysql-pri 10GB
Operation completed successfully

リソースをデプロイするクラスタ数を設定する

[root@drbd01 ~]# drbdmanage deploy-resource mysql-pri 3
Operation completed successfully

※リソースの割り当てを個別にノードへデプロイするには、”drbdmanage assign-resource”コマンドを使用します。

[root@drbd01 ~]# drbdmanage assign-resource mysql-pri drbd03
Operation completed successfully

リソース追加直後の状態

[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

mysql-pri role:Secondary
  disk:UpToDate
  drbd02 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:57.30
  drbd03 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:50.46

“Inconsistent”は不整合の状態です。”done”の後の数字は同期状態の進行具合を表示してます。

同期が終わると、このような表示になります。

[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

mysql-pri role:Secondary
  disk:UpToDate
  drbd02 role:Secondary
    peer-disk:UpToDate
  drbd03 role:Secondary
    peer-disk:UpToDate

リソース”mysql-pri”のroleがどのノードでも”Secondary”になっているのは、DRBD9からは、リソースをマウントしたノードが自動的にPrimaryとなる仕様となっているからだとか。
今回は、ここまで。次回はDRBDの新機能、クライアント機能を利用して、MySQLサーバからリソースmysql-priをマウントしてみようと思います。
以上

Facebooktwittergoogle_pluslinkedintumblrmail

CentOS7のPostgreSQL9.2で全文検索

PostgreSQLの全文検索でLudia, textsearch_sennaを使っていたのですが、9.2ではどちらも使えないので、代替となりそうなものを探した結果、pg_trgm, pg_bigm, textsearch_jaの三つが使えそうでした。
ただpg_trgmは日本語を使うにはソースからのコンパイルが必要で、しかも二文字以下は使えないのでパスしました。

(さらに…)

Facebooktwittergoogle_pluslinkedintumblrmail

CentOS 6.3 に Kolab Groupware をインストール。

さてさて、ども初めまして。弊社のKolab翻訳担当です。
2013.03.11 よりスイスはチューリヒの Kolab Systems AG 社とパートナー提携いたしました。

そこで、今の所、英語ソースしかない、Kolab Groupware のインストールについて、
少しばかりインストールのコツなどをば…。

まず、Kolab Groupware の現行バージョンですが、3.0です。CentOS等のレッドハット系では、
el6、kernel 2.6.32 以降に対応しています。(自宅のCentOS 5.4 に入れようとしましたが、パッケージの依存関係等で入りませんでした。)

無料で利用できるのは、コミュニティ版である、Kolab-3.0-release-community です。

準備としましては…

KVNにて、作成してあるx86_64のREHL6 型の仮想マシンにCentOS 6.3をインストールしてあるものを利用しました。パーティションなどはデフォルトです。(こんな感じ…)

[root@kolab ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_kolab-lv_root
                      5.5G  2.1G  3.2G  40% /
tmpfs                 499M   20K  499M   1% /dev/shm
/dev/sda1             485M   32M  429M   7% /boot

CentOSは、最小構成(minimal)でインストールして、後から、”Base” “Development Tools” をyumでグループインストールしてます。

[root@kolab ~]# yum -y groupinstall "Base" "Development Tools"

次の準備は…

selinux: 無効化

iptables: tcp 25番、80番、110番、143番、389番、443番、465番、587番、636番、993番、995番 を開けます。

/etc/hosts に FQDN、ホスト名を追加。あと、ローカルIPでの名前解決の行を追加。
(DNS持っていて、ローカルIPでFQDNが参照できる場合はいらないです。)

[root@kolab ~]# diff -urw /etc/hosts.orig /etc/hosts
--- /etc/hosts.orig     2010-01-12 22:28:22.000000000 +0900
+++ /etc/hosts  2013-04-01 16:03:29.663819681 +0900
@@ -1,2 +1,3 @@
-127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
+127.0.0.1   kolab.lancard.com kolab localhost localhost.localdomain localhost4 localhost4.localdomain4
+xxx.xxx.xxx.xxx kolab.lancard.com kolab localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

あと必要なものが、yum-plugin-priorities です。yumにてさくっとインストールしてください。

[root@kolab ~]# yum -y install yum-plugin-priorities

次に、yumリポジトリを追加します。

EPEL リポジトリ

[root@kolab ~]# wget "http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm"

Kolab-3.0-community-release リポジトリ

[root@kolab ~]# wget "http://mirror.kolabsys.com/pub/redhat/kolab-3.0/el6/development/i386/kolab-3.0-community-release-6-2.el6.kolab_3.0.noarch.rpm"
[root@kolab ~]# yum localinstall --nogpgcheck epel-release-6.8.noarch.rpm kolab-3.0-community-release-6-2.el6.kolab.3.0.noarck.rpm

リポジトリが追加されたら、リポジトリの設定を行います。リポジトリ設定の要点は、

CentOS-Base の[extras] を無効化、その他有効リポジトリの優先度を99に設定。
epel の有効リポジトリの優先度を99に設定。
その他Kolab関連(release、develop)のリポジトリの優先度を50に設定。(develop は後で追加し設定します。)

以上、3点です。

CentOS-Base.repo

[root@kolab yum.repos.d]# diff -urw CentOS-Base.repo.orig CentOS-Base.repo
--- CentOS-Base.repo.orig       2013-02-25 17:57:43.000000000 +0900
+++ CentOS-Base.repo    2013-03-29 11:22:09.810968496 +0900
@@ -16,6 +16,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
+priority=99

 #released updates
 [updates]
@@ -24,6 +25,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
+priority=99

 #additional packages that may be useful
 [extras]
@@ -31,6 +33,7 @@
 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
 #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
 gpgcheck=1
+enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 #additional packages that extend functionality of existing packages

epel.repo

[root@kolab yum.repos.d]# diff -urw epel.repo.orig epel.repo
--- epel.repo.orig      2012-11-05 12:52:17.000000000 +0900
+++ epel.repo   2013-03-29 11:23:46.412942219 +0900
@@ -6,6 +6,7 @@
 enabled=1
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
+priority=99

 [epel-debuginfo]
 name=Extra Packages for Enterprise Linux 6 - $basearch - Debug

kolab-3.0-release.repo

[root@kolab yum.repos.d]# diff -urw kolab-3.0-release.repo.orig kolab-3.0-release.repo
--- kolab-3.0-release.repo.orig 2012-08-04 21:58:22.000000000 +0900
+++ kolab-3.0-release.repo      2013-03-29 11:26:20.946866077 +0900
@@ -4,6 +4,7 @@
 enabled = 1
 gpgcheck = 0
 gpgkey = https://ssl.kolabsys.com/santiago.asc
+priority=50

 [kolab-3.0-debuginfo]

kolab-3.0-develop リポジトリの追加

[root@kolab ~]# yum -y install kolab-3.0-community-release-development

前述通り、上記リポジトリと同様に、優先度の設定。release と同じ50にします。

[root@kolab yum.repos.d]# diff -urw kolab-3.0-development.repo.orig kolab-3.0-development.repo
--- kolab-3.0-development.repo.orig     2012-08-04 21:58:22.000000000 +0900
+++ kolab-3.0-development.repo  2013-03-29 11:33:17.334674626 +0900
@@ -4,7 +4,7 @@
 enabled = 1
 gpgcheck = 0
 gpgkey = https://ssl.kolabsys.com/santiago.asc
-
+priority=50

 [kolab-3.0-development-debuginfo]
 name = Enterprise Linux 6 Kolab 3.0 Packages - Debugging Symbols

リポジトリの追加が終わりましたら。Kolab Groupware のインストールを行います。
全コンポーネントを簡単にインストールするには、さくっと一行打つだけです。お手軽です。

[root@kolab ~]# yum -y install kolab

インストールが無事完了したら、Kolabの設定を行います。こちらも簡単。

[root@kolab ~]# setup-kolab

と、セットアップ用のコマンドを打ち、あとは表示されるメッセージに従って、パスワード等を設定していけばOKです。

※※※ setup-kolab に失敗した!! ※※※

さてさて…ここまではすんなり進んでも…このsetup-kolab で引っ掛かる人がおそらくいるのではないでしょうか。
ええ…私も実は、引っかかったクチです (・w・;

私の場合は…「間違ったパスワードを設定してしまい思い出せなくなった。」「ホスト名、ドメイン名が変更になった。」
という事で、再度 setup-kolab を実行したら、エラーが発生して再設定が出来なくなった事です。

そういう時の対処方法です。

・まず、389 Directory Server のサービスを停止します。

[root@kolab ~]# service dirsrv stop

・次に、389 Directory Server の設定ファイル(slapd-ホスト名)を退避or削除します。

[root@kolab ~]# mv /etc/dirsrv/slapd-kolab/ /etc/dirsrv/bk_slapd-kolab

・MySQLのデータベースの削除
(もし…MySQLのrootパスワードがわからなくなってた場合は…MySQLの解説サイトで調べてください(-w-; )

[root@kolab ~]# mysql -u root -p
Enter password:

データベースの一覧を見て、kolab、roundcube というデータベースがある事を確認してください。
この2つのデータベースを削除します。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kolab              |
| mysql              |
| roundcube          |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql> use kolab;
mysql> drop database kolab;
mysql> use roundcube;
mysql> drop database roundcube;

これで、再度 setup-kolab が走るようになります。
ホスト名やドメイン名を変更して、setup-kolab を実行してみましょう。

※ちなみに…Kolab Groupware に登録していたユーザやグループ、各ユーザのメールやその他データなどは、
もちろん、吹っ飛んでしまいますので、あくまで、初期導入時にのみ使用できる方法です。

ではでは。

Facebooktwittergoogle_pluslinkedintumblrmail