Google ColabでGPU使用時に異常終了する問題

ディープラーニングの開発環境に、Google Colaboratoryを使用しています。
その一番の理由は、GPU(Tesla K80 GPU)が使える、ということです。
Macbook proのCPUにやらせるよりも、10倍は早いです。

しかし何かの拍子に以下のようなエラーが出て、トレーニング中に止まってしまう問題が発生しました。

ネットで調べたところ、
https://github.com/googlecolab/colabtools/issues/156

他のpythonプロセスが動作してるのが問題らしいです。
以下のような感じで、他のpythonプロセスをキルしたら、正常に動作するようになりました。

!ps aux
!kill -9 <pid>
Facebooktwittergoogle_pluslinkedintumblrmail

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

kaggleを試してみた

最近機械学習の勉強をはじめました。何冊か本を購入しザーッと目を通し(深くは理解できてません)、次に何か適当なサンプルで機械学習を試してみようと思いましたが、なかなか都合が良いデータというのはないです。
そんな時にKaggleを見つけました。Kaggleはデータ分析コンペを行うサイトですが、機械学習を勉強するのにも、すごく役立つサイトです。

「Titanic: Machine Learning from Disaster」という学習用のコンペをチュートリアルで最初にやるようになってますが、すでに日本語でたくさん紹介されてるので「House Prices: Advanced Regression Techniques」というのをやってみます。タイタニックが分類に対してこれは回帰の問題です。

やってみる、といっても初心者には何からやるのか検討がつきませんが、Kaggleには多くの方々が自分が行ったコード等(Kernels)を説明付きで公開してくれているので、それらを真似すればできます。
最初は人が作ったKernelsをひたすら見て自分のものにする、という感じかと思います。
以下も基本、人が作ったKernelsを参考に書いてます。

また、Kaggleには開発環境もあり、スクリプトまたはノートブック(Jupyter Notebook)の形式でブラウザから試すことできます。システムとしてよくできていると思います。

目的

アイオワ州のエイムズにある住宅価格を79の特徴量より予測します。Ames Housing dataset

この投稿の続きを読む »

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

pg_basebackupを試す

今回は、クラスタ化していないシングルなPostgreSQLでpg_basebackupを試してみました。
試した環境はCentOS7のPostgreSQL9.2です(pg_basebackupは9.1以降)。

まずはマニュアルを参考に。
https://www.postgresql.jp/document/9.2/html/continuous-archiving.html

この投稿の続きを読む »

Facebooktwittergoogle_pluslinkedintumblrmail

fail2banをRoundcubeに使ってみる

CentOS 6でfail2banを眺めていたらroundcube-authが有りました。
ログインに失敗した回数でBANするようですので実際に試してみました。
この投稿の続きを読む »

Facebooktwittergoogle_pluslinkedintumblrmail

雑用係、新品のTimeMachineさん過熱状態(?)で奮闘する

こんにちは。
一昨年夏に発売された某PS4ゲームに、いまだどっぷり7週目を楽しんでいる雑用係です。

年明けにAppleのAirMacTimeMachineを購入しました。
先代のTimeMachineが1〜2年ほど前に壊れ、繋ぎで使っていた先代TimeMachineより古いExtremeの調子が秋〜年末に掛けてついに悪くなり、満を持して購入。

 

開封してから設定〜利用開始までサクッとすませました。
実によろしい。
iPhone、iPad、MacもAppleTVもIEEE802.11acに対応してるのに、部屋の無線LANが11nしかなかったという悲しい状態から、ようやく脱したので快適です。

快適だったんです。

コトは、購入から10日ほど経った頃でした。

この投稿の続きを読む »

Facebooktwittergoogle_pluslinkedintumblrmail

pg_bigmで何かの全文検索を高速化してみたい

こちら で使ったpg_bigmですが、どこかで利用出来るものはないかと思っていたのですが、そういえばSphinxを使った検索で日本語対応しようとしてunigramとか色々と入れてみたけど結局失敗してしまったTiny Tiny RSSが有ったなぁと思い、試してみました。

この投稿の続きを読む »

Facebooktwittergoogle_pluslinkedintumblrmail

Laravelのテスト用便利トレイトの動作を変えてみる

Laravel 5.5 です。

Laravelにはunit test等の際にuseするとよろしくやってくれるトレイトがあります。
昨日の記事に出てきたRefreshDatabaseやDatabaseMigrations、他にはDatabaseTransactions、WithoutMiddleware、WithoutEventsがあります。

本当に便利なのですが、すこし動作を調整したいこともあります。

例えばDatabaseMigrationsでマスターの流し込みまでやりたいとか。
この投稿の続きを読む »

Facebooktwittergoogle_pluslinkedintumblrmail