CentOS7.4
F-RevoCRM
vTigerCRM

CentOS 7.x(Apache 2.4/PHP 7.2/MariaDB 10.1)にF-RevoCRM 6.5をインストールする

はじめに

CentOS7系にF-RevoCRM(vTigerCRMベース)をインストールする記事が無かったので、覚え書きを兼ねて手法を残しておく、F-RevoCRMはグローバル企業でよく使われているvTigerCRMを、シンキングリード社が日本企業向けにカスタマイズしたもの。

環境

OS : CentOS Linux release 7.4.1708 (Core) x86_64
Apache : 2.4.6
PHP : 7.2.0
MariaDB : 10.1.29

セットアップが面倒な人向けの一括シェル

CentOS 7.4 (core)をセットアップした後に、流せばOKなスクリプトにしてある

install_f-revocrm_6.5_el7.sh
#!/bin/sh

if [ "`whoami`" != "root" ]; then
 echo "This script is only for root users."
 echo "Please execute as root user."
 exit 1
fi

# F-RevoCRM(vTigerCRM) 6.5 Setup for CentOS 7.x with PHP 7.2
#                                           Install Script by H.Iwasaki

# "Apache 2.4 + PHP 7.2 + MariaDB 10.1 Setup"

echo "disabled selinux"
echo "SELINUX=disabled">/etc/selinux/config
echo "SELINUXTYPE=targeted">>/etc/selinux/config
echo "SETLOCALDEFS=0">>/etc/selinux/config
setenforce 0

echo "Setup Japanese Env"
localectl status
timedatectl set-timezone Asia/Tokyo
localectl set-locale LANG=ja_JP.utf8
localectl set-keymap jp106
localectl status
yum install -y ipa-gothic-fonts.noarch ipa-mincho-fonts.noarch ipa-pgothic-fonts.noarch ipa-pmincho-fonts.noarch

echo "Install elrepo-repos"
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

echo "Install epel-repos"
yum install -y epel-release

echo "Install Basic Tools"
yum install -y expect ntp wget vim-common vim-enhanced vim-minimal unzip zip vixie-cron sudo mailcap m4 autoconf \
automake make gcc rpm-build subversion gcc-c++ iftop net-snmp net-snmp-utils rrdtool pciutils bc screen \
nkf unzip unrar iftop lsof git hg ca-certificates

echo "Install ius-repos"
rpm -ivh https://dl.iuscommunity.org/pub/ius/archive/CentOS/7/x86_64/ius-release-1.0-14.ius.centos7.noarch.rpm

echo "Install Remi-repos"
rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-7.rpm

yum install -y httpd mod_ssl php72-php php72-php-bcmath php72-php-cli php72-php-common php72-php-dba php72-php-devel php72-php-embedded php72-php-enchant \
php72-php-fpm php72-php-gd php72-php-gmp php72-php-imap php72-php-interbase php72-php-intl php72-php-json php72-php-ldap \
php72-php-litespeed php72-php-mbstring php72-php-mysqlnd php72-php-odbc php72-php-opcache php72-php-pdo \
php72-php-pdo-dblib php72-php-pgsql php72-php-process php72-php-pspell php72-php-recode php72-php-snmp php72-php-soap \
php72-php-sodium php72-php-tidy php72-php-xml php72-php-xmlrpc 

systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service

yum remove -y mariadb* mysql*
yum install -y mariadb101u mariadb101u-bench mariadb101u-common mariadb101u-config mariadb101u-connect-engine mariadb101u-devel mariadb101u-embedded mariadb101u-embedded-devel \
mariadb101u-errmsg mariadb101u-libs mariadb101u-oqgraph-engine mariadb101u-server mariadb101u-server-galera mariadb101u-server-utils net-snmp php72-php-snmp postfix

systemctl start mariadb.service
systemctl enable mariadb.service
systemctl status mariadb.service

# F-RevoCRM(vTigerCRM Clone) Install
cd /var/www/html/

wget --no-check-certificate https://f-revocrm.jp/frevowp/data/Frevo65.zip
chown apache.apache Frevo65 -R
cd Frevo65/frevocrm65/

mysql -uroot -e "show databases;"
mysql -uroot -e "create database frevo DEFAULT CHARACTER SET utf8;"
mysql -uroot -e "GRANT ALL PRIVILEGES ON frevo.* TO frevo@localhost IDENTIFIED BY 'frevo';"

echo "Please connect from the browser and continue installation"
echo "http://`hostname`/Frevo65/frevocrm65/"

ちなみにそのままだと起動しない。php7.1で xml関数のunset($this)が非推奨になったため

[php7:error] PHP Fatal error:  Cannot unset $this in /var/www/html/Frevo65/frevocrm65/libraries/adodb/adodb-xmlschema.inc.php on line 160

といったエラーが出て画面真っ白 このあたりは調べれば分かる
function destroy() の unset($this)をコメントアウトすればいい

  • 変更箇所
 /var/www/html/Frevo65/frevocrm65/libraries/adodb/adodb-xmlschema.inc.php
 /var/www/html/Frevo65/frevocrm65/libraries/adodb/adodb-xmlschema03.inc.php
  • 情報の原文
 xml: remove calls to 'unset($this)' (PHP 7.1 compatibility)
 unset($this) throws a fatal error on linting. Use internal
 garbage collection to clean up old objects instead.

 Fixes #257

 Signed-off-by: Damien Regad <dregad@mantisbt.org>

 As per PHP manual, "It is not possible to unset $this inside an object
 method since PHP 5." (see http://php.net/manual/function.unset, Notes section)

 https://github.com/ADOdb/ADOdb/commit/659b27469042e8cb0fd2fc1d7a0de84cf4290413
  • 対応パッチ
adodb-xmlschema.patch
--- Frevo65.org/frevocrm65/libraries/adodb/adodb-xmlschema.inc.php      2017-06-06 04:29:28.000000000 +0900
+++ /var/www/html/Frevo65/frevocrm65/libraries/adodb/adodb-xmlschema.inc.php          2017-12-26 11:56:20.299650291 +0900
@@ -157,7 +157,7 @@ class dbObject {
        * Destroys the object
        */
        function destroy() {
-               unset( $this );
+               // unset( $this );
        }

        /**
@@ -2211,7 +2211,7 @@ class adoSchema {
        function Destroy() {
                ini_set("magic_quotes_runtime", $this->mgq );
                #set_magic_quotes_runtime( $this->mgq );
-               unset( $this );
+               //unset( $this );
        }
 }
adodb-xmlschema03.patch
--- Frevo65.org/frevocrm65/libraries/adodb/adodb-xmlschema03.inc.php    2017-06-06 04:29:28.000000000 +0900
+++ /var/www/html/Frevo65/frevocrm65/libraries/adodb/adodb-xmlschema03.inc.php       2017-12-26 12:20:53.317082288 +0900
@@ -175,7 +175,7 @@ class dbObject {
        * Destroys the object
        */
        function destroy() {
-               unset( $this );
+               // unset( $this );
        }

        /**
@@ -2377,7 +2377,7 @@ class adoSchema {
        function Destroy() {
                ini_set("magic_quotes_runtime", $this->mgq );
                #set_magic_quotes_runtime( $this->mgq );
-               unset( $this );
+               // unset( $this );
        }
 }
  • 次のエラーについて
 PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /var/www/html/Frevo65/frevocrm65/include/database/PearDatabase.php on line 351

 PHP 7.2でcount(null)を許容しなくなったためのワーニング
 つまり
 if ( count( $result ) ) {
 は
 if ( $result !== null && count( $result ) ) {
 と書く必要が出た
  • 変更箇所
/var/www/html/Frevo65/frevocrm65/include/database/PearDatabase.php
  • 情報の原文
 Avoid passing null to count()

 PHP 7.2 made the questionable decision to raise a warning for
 count( null ). So test for null explicitly before calling count in the
 one place where null is expected.
  • 対応パッチ
PearDatabase.patch
--- Frevo65.org/frevocrm65/include/database/PearDatabase.php    2017-06-06 04:29:28.000000000 +0900
+++ /var/www/html/Frevo65/frevocrm65/include/database/PearDatabase.php        2017-12-26 12:27:31.743371648 +0900
@@ -348,7 +348,7 @@ class PearDatabase{

                $sql_start_time = microtime(true);
                $params = $this->flatten_array($params);
-               if (count($params) > 0) {
+               if ( $params !== null && count($params) > 0) {
                        $log->debug('Prepared sql query parameters : [' . implode(",", $params) . ']');
                }

@@ -570,7 +570,7 @@ class PearDatabase{
                        throw new Exception("missing table name");
                if (!is_array($data))
                        throw new Exception("data must be an array");
-               if (!count($table))
+               if (!count($table) && $table !== null)
                throw new Exception("no data given");

                $sql_fields = '';
@@ -634,7 +634,7 @@ class PearDatabase{
     function sql_expr_datalist($a) {
            if (!is_array($a))
                throw new Exception("not an array");
-           if (!count($a))
+           if (!count($a)  && $a !== null)
                throw new Exception("empty arrays not allowed");

            foreach($a as $walk => $cur)
@@ -648,7 +648,7 @@ class PearDatabase{
                throw new Exception("not an array");
            if (!$field)
                throw new Exception("missing field");
-           if (!count($a))
+           if (!count($a)  && $a !== null)
                throw new Exception("empty arrays not allowed");

            foreach($a as $walk => $cur)

あとは、WEBのインストールを実施する
f-revo01.png
言語を選んで[インストール]をクリック

f-revo02.png
ライセンスをよく読んでから[同意する]をクリック

f-revo03.png
PHPの設定については推奨環境にいくつか相違点がデフォルトだと出ますが、必須コンフィギュレーション(上段)があっていればOKです。
推奨値になってないと駄目だ、という人はapacheのphp72-phpのコンフィグを開いて、以下のように推奨値を設定して、apacheをリスタートさせましょう

/etc/httpd/conf.d/php72-php.conf
<IfModule  mod_php7.c>
    #
    # Cause the PHP interpreter to handle files with a .php extension.
    #
    <FilesMatch \.(php|phar)$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    #
    # Uncomment the following lines to allow PHP to pretty-print .phps
    # files as PHP source code:
    #
    #<FilesMatch \.phps$>
    #    SetHandler application/x-httpd-php-source
    #</FilesMatch>

    #
    # Apache specific PHP configuration options
    # those can be override in each configured vhost
    #
    php_value session.save_handler "files"
    php_value session.save_path    "/var/opt/remi/php72/lib/php/session"
    php_value soap.wsdl_cache_dir  "/var/opt/remi/php72/lib/php/wsdlcache"

    php_flag  display_errors     on
    php_flag  log_errors         off
    php_flag  short_open_tag     on
    php_value max_execution_time "600"
    php_value error_reporting    "E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT"

    #php_value opcache.file_cache   "/var/opt/remi/php72/lib/php/opcache"
</IfModule>

なお、推奨PHPバージョンは5.4.0ですが、今回はタイトルにもある通り7.2.0を使っています。
[次へ]をクリックします

f-revo04.png
いくつか項目が違うまま進めると、本当に良いかい?と聞かれるので、[OK]をクリック

f-revo05.png
データベース設定については、インストールシェルをそのまま流した場合は以下のように、外部DBサービスやDB名ユーザ名、パスワードを変えている場合はそれを入力。

データベースタイプ : MySQL
ホスト名 : localhost
ユーザ名 : frevo
パスワード : frevo
データベース名 : frevo

システム情報
通貨 : (任意、予算管理で利用するモノ) Japan Yen(\)

管理ユーザーの情報
ユーザー名 : admin
パスワード : (任意)
パスワード再入力 : (任意)
姓 : Administrator
名 : System
電子メール : 任意(TDL付じゃないと拒否られるので、適当にしたい場合はroot@localhost.localdomain)
日付形式 : (任意)
タイムゾーン : (任意)

設定したら、[次へ]をクリック

f-revo06.png
確認して問題なければ[次へ]をクリック

f-revo07.png
次に、アンケートに答えて[次へ]をクリック

f-revo08.png
後はインストール完了待ち、ただ、ブラウザによって、完了した後画面が再読み込みされないことがあったので、プログレスバーが消えたら、一度、ブラウザをリロードするか、トップページを開きなおしましょう。

f-revo09.png
無事セットアップが終わると、ログイン画面になります。一旦、adminでログインします

f-revo10.png
必要なモジュールをチェックして[Next]をクリックします

f-revo11.png
最後に、リファレンスの項目を選択して[開始する]をクリックします

f-revo12.png
後は、必要に合わせてカスタマイズして使いましょう。

以上で、セットアップ完了です。重い処理を回す場合は、セットアップ時に推奨値になっていなかった、.user.iniの設定で実行時間やらの変更をしてあげるとかなり良くなります。

以上、誰かの役に立てば幸いです。