Sunday, October 28, 2018

PHP 7.2 and CakePHP 3.6, You must enable the intl extension to use CakePHP.

I got this error when I  was deploying CakePHP 3.6 project to AWS EB Environment with PHP 7.2.
Fatal error: You must enable the intl extension to use CakePHP.
the error occurred when deploy process run migrations script.

In /etc, there are PHP-7.1.d and PHP-7.2.d.
I checked configuration with
php -i | grep 7.2
Then console displayed no configuration file and directory.
I changed 7.2 to 7.1 and show the /etc/php-7.1.conf and list of .ini files under /etc/php-7.1.d/.
There is no 20-intl.ini file inside /etc/php-7.1.d/.

Simply changing config to PHP 7.2 solved my problem.

But I don't understand why there are configurations of 2 versions.
I created totally new environment and never installed PHP 7.1.

Saturday, March 10, 2018

chef fails start because of wrong mysql GPG key URL.


We use vagrant and chef for create local developing environment.
As you know, both are nasty developer helping tool,
Today I encountered this nasty error.

Vagrantとchefというツールを使っている現在のプロジェクト。正直こういう便利そうなツールほど落とし穴が多いものです。
今日もchefでのMySQLのインストールと起動に失敗してます。

       
==> develop: Recipe: yum-mysql-community::mysql56
==> develop:   * yum_repository[mysql56-community] action create
==> develop:     * template[/etc/yum.repos.d/mysql56-community.repo] action create (up to date)
==> develop:     * execute[yum clean metadata mysql56-community] action nothing (skipped due to action :nothing)
==> develop:     * execute[yum-makecache-mysql56-community] action nothing (skipped due to action :nothing)
==> develop:     * ruby_block[yum-cache-reload-mysql56-community] action nothing (skipped due to action :nothing)
==> develop:      (up to date)
==> develop: Recipe: trl-lamp::mysql-server
==> develop:   * mysql_client_installation_package[server] action create
==> develop:     * yum_package[mysql-community-client, mysql-community-devel] action install
==> develop:
==> develop:
==> develop:       ================================================================================
==> develop:       Error executing action `install` on resource 'yum_package[mysql-community-client, mysql-community-devel]'
==> develop:       ================================================================================
==> develop:
==> develop:       Chef::Exceptions::Exec
==> develop:       ----------------------
==> develop:       yum -d0 -e0 -y install mysql-community-client-5.6.39-2.el7 mysql-community-devel-5.6.39-2.el7 returned 1:
==> develop:       STDOUT:
==> develop:       STDERR: warning: /var/cache/yum/x86_64/7/mysql56-community/packages/mysql-community-common-5.6.39-2.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
==> develop:
==> develop:
==> develop:       GPG key retrieval failed: [Errno 14] HTTPS Error 404 - Not Found
==> develop:
==> develop:       Resource Declaration:
==> develop:       ---------------------
==> develop:       # In /var/chef/cache/cookbooks/mysql/libraries/mysql_client_installation_package.rb
==> develop:
==> develop:        18:       package new_resource.package_name do
==> develop:        19:         version new_resource.package_version if new_resource.package_version
==> develop:        20:         options new_resource.package_options if new_resource.package_options
==> develop:        21:         action :install
==> develop:        22:       end
==> develop:        23:     end
==> develop:
==> develop:       Compiled Resource:
==> develop:       ------------------
==> develop:       # Declared in /var/chef/cache/cookbooks/mysql/libraries/mysql_client_installation_package.rb:18:in `block in '
==> develop:
==> develop:       yum_package("mysql-community-client, mysql-community-devel") do
==> develop:         package_name ["mysql-community-client", "mysql-community-devel"]
==> develop:         action [:install]
==> develop:         retries 0
==> develop:         retry_delay 2
==> develop:         default_guard_interpreter :default
==> develop:         declared_type :package
==> develop:         cookbook_name "trl-lamp"
==> develop:         flush_cache {:before=>false, :after=>false}
==> develop:         arch [nil, nil]
==> develop:       end
==> develop:
==> develop:       System Info:
==> develop:       ------------
==> develop:       chef_version=12.21.26
==> develop:       platform=centos
==> develop:       platform_version=7.4.1708
==> develop:       ruby=ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
==> develop:       program_name=chef-client worker: ppid=4766;start=01:51:29;
==> develop:       executable=/opt/chefdk/bin/chef-client
==> develop:
==> develop:
==> develop:     ================================================================================
==> develop:     Error executing action `create` on resource 'mysql_client_installation_package[server]'
==> develop:     ================================================================================
==> develop:
==> develop:     Chef::Exceptions::Exec
==> develop:     ----------------------
==> develop:     yum_package[mysql-community-client, mysql-community-devel] (/var/chef/cache/cookbooks/mysql/libraries/mysql_client_installation_package.rb line 18) had an error: Chef::Exceptions::Exec: yum -d0 -e0 -y install mysql-community-client-5.6.39-2.el7 mysql-community-devel-5.6.39-2.el7 returned 1:
==> develop:     STDOUT:
==> develop:     STDERR: warning: /var/cache/yum/x86_64/7/mysql56-community/packages/mysql-community-common-5.6.39-2.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
==> develop:
==> develop:
==> develop:
==> develop: GPG key retrieval failed: [Errno 14] HTTPS Error 404 - Not Found
==> develop:
==> develop:     Resource Declaration:
==> develop:     ---------------------
==> develop:     # In /var/chef/cache/cookbooks/trl-lamp/recipes/mysql-server.rb
==> develop:
==> develop:      20: mysql_client "#{instance_name}" do
==> develop:      21:   version "#{node['trl-lamp']['mysqld']['version']}"
==> develop:      22:   action [:create]
==> develop:      23: end
==> develop:      24: # cli縺ァ蜈・繧九→縺阪�ッmysql -S /var/run/mysql-server/mysqld.sock -u root -pMyPa¥$¥$wordHasSpecialChars!
==> develop:
==> develop:     Compiled Resource:
==> develop:     ------------------
==> develop:     # Declared in /var/chef/cache/cookbooks/trl-lamp/recipes/mysql-server.rb:20:in `from_file'
==> develop:
==> develop:     mysql_client_installation_package("server") do
==> develop:       action [:create]
==> develop:       retries 0
==> develop:       retry_delay 2
==> develop:       default_guard_interpreter :default
==> develop:       declared_type :mysql_client
==> develop:       cookbook_name "trl-lamp"
==> develop:       recipe_name "mysql-server"
==> develop:       version "5.6"
==> develop:       major_version "5.6"
==> develop:       package_name ["mysql-community-client", "mysql-community-devel"]
==> develop:     end
==> develop:
==> develop:     System Info:
==> develop:     ------------
==> develop:     chef_version=12.21.26
==> develop:     platform=centos
==> develop:     platform_version=7.4.1708
==> develop:     ruby=ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
==> develop:     program_name=chef-client worker: ppid=4766;start=01:51:29;
==> develop:     executable=/opt/chefdk/bin/chef-client
==> develop:
==> develop:
==> develop: Running handlers:
==> develop: [2018-03-11T01:52:17+00:00] ERROR: Running exception handlers
==> develop: Running handlers complete
==> develop: [2018-03-11T01:52:17+00:00] ERROR: Exception handlers complete
==> develop: Chef Client failed. 1 resources updated in 48 seconds
 


After the research in internet, I found out that problem is in chef's .

The error occurred because of wrong GPG-Key URL in below file.
/etc/yum.repos.d/mysql56-community.repo

結局、/etc/yum.repos.d/mysql56-community.repoのgpgkeyのURLが間違っているとわかりましたが、このファイルはもとはchefのcookbookから作成されていますので元のファイルを修正する必要があります。

       
# This file was generated by Chef
# Do NOT modify this file by hand.

[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/$releasever/$basearch/
enabled=1
failovermethod=priority
fastestmirror_enabled=0
gpgcheck=1
gpgkey=https://raw.githubusercontent.com/chef-cookbooks/yum-mysql-community/master/files/default/mysql_pubkey.asc


And above repo file is generated from below file
cookbooks/yum-mysql-community/attributes/mysql56-community.rb

こちらがcookbookのrbファイル。
       
efault['yum']['mysql56-community']['repositoryid'] = 'mysql56-community'
default['yum']['mysql56-community']['gpgkey'] = 'http://raw.githubusercontent.com/chef-cookbooks/yum-mysql-community/master/files/default/mysql_pubkey.asc'
default['yum']['mysql56-community']['description'] = 'MySQL 5.6 Community Server'
default['yum']['mysql56-community']['failovermethod'] = 'priority'
default['yum']['mysql56-community']['gpgcheck'] = true
default['yum']['mysql56-community']['enabled'] = true
 

First I thought it is as simple as just overwrite URL.
But every time I run the vagrant provisioning, this .rb file is downloaded and overwritten with wrong URL.

単純に上書きすればそれで解決というわけではなく、chefがmysqlをインストールする前にファイルをサーバからダウンロードしてこちらの修正を上書きしてしまいます。

So I decided to cheat little bit.
This nasty chef downloads cookbook files when console shows below message.


      
==> develop: Starting Chef Client, version 12.21.26
==> develop: resolving cookbooks for run list: ["trl-lamp::selinux-disable", "trl-lamp::build-essential", "trl-lamp::sqlite", "trl-lamp::nodejs", "trl-lamp::mysql-server", "trl-lamp::mysql-database", "trl-lamp::redisio", "trl-lamp::memcached", "trl-lamp::php", "trl-lamp::httpd-web", "trl-lamp::httpd-php", "trl-lamp::minio", "trl-lamp::httpd-vagrant", "trl-lamp::sftp-user"]
==> develop: Synchronizing Cookbooks:
==> develop:   - trl-lamp (0.1.12)
==> develop:   - selinux (2.1.0)
==> develop:   - imagemagick (0.2.3)
==> develop:   - build-essential (8.0.4)
==> develop:   - nodejs (5.0.0)
==> develop:   - httpd (0.6.1)
==> develop:   - php (4.5.0)
==> develop:   - composer (2.6.1)
==> develop:   - mysql (8.5.1)
==> develop:   - mysql2_chef_gem (2.1.0)
==> develop:   - database (6.1.1)
==> develop:   - yum-epel (2.1.2)
==> develop:   - redisio (2.6.1)
==> develop:   - seven_zip (2.0.2)
==> develop:   - memcached (5.0.0)
==> develop:   - mingw (2.0.1)
==> develop:   - yum-remi-chef (2.2.2)
==> develop:   - yum-mysql-community (2.1.0)
==> develop:   - ark (3.1.0)
==> develop:   - windows (3.4.3)
==> develop:   - apt (6.1.4)
==> develop:   - ulimit (0.4.0)
==> develop:   - selinux_policy (2.0.1)
==> develop:   - postgresql (6.1.1)
==> develop:   - compat_resource (12.19.0)
==> develop:   - runit (4.0.4)
==> develop:   - yum (5.1.0)
==> develop:   - ohai (5.2.0)
==> develop:   - openssl (8.1.0)
==> develop:   - mariadb (1.5.3)
==> develop:   - yum-scl (0.2.0)
==> develop:   - inifile_chef_gem (0.1.0)
==> develop:   - packagecloud (0.3.0)
==> develop: Installing Cookbook Gems:
==> develop: Compiling Cookbooks...
==> develop: Converging 138 resources
 

While console output this message, I over wrote the cookbook mysql file as below.

       
default['yum']['mysql56-community']['repositoryid'] = 'mysql56-community'
default['yum']['mysql56-community']['gpgkey'] = 'http://raw.githubusercontent.com/chef-cookbooks/yum-mysql-community/master/files/mysql_pubkey.asc'
default['yum']['mysql56-community']['description'] = 'MySQL 5.6 Community Server'
default['yum']['mysql56-community']['failovermethod'] = 'priority'
default['yum']['mysql56-community']['gpgcheck'] = true
default['yum']['mysql56-community']['enabled'] = true
 

Everything went OK.
Now I could start virtual machine on my local.

Thursday, October 26, 2017

MySQL SSH Tunnel Command Line Login

今回のプロジェクトはAWSにサーバを立てて
DBはMySQLを使っています。

AWSでDBにアクセスするときは常に踏み台のサーバを経由してSSHでアクセスしなければならない形に構築されています。

MySQL Workbenchにしろ、A5M2にしても普通にSSHトンネルでログイン出来るようになっていますが、mysqldumpを使いたいと思ったので、SSHトンネルを自分でコマンドラインから入力して実行してみました。

まず、SSHですが、Windowsのコマンドからは初期状態では使えません。
OpenSSHをインストールするか、開発でGitを使っているならGitBashを使ってSSHコマンドを使える状態にします。

ssh -i -f -N -C -L [バインドするローカルのポート]:<MySQLサーバのIPアドレス>:3306  @<踏み台のIPアドレス> -p 22

ここでport1は自分のローカルのポートですので、ローカルで空いているポートを指定しましょう。するとローカルのに対する接続が踏み台サーバを経由して、MySQLの動いているサーバの3306ポートに転送されます。
ぶっちゃけ-f とか -N とか -C とかは無くてもOKです。

ここからMySQLへの接続を下記のコマンドで実行できます。
mysql -u -P [バインドしたローカルのポート] -h localhost -p

MySQL Dumpを実行する場合は下記のコマンドです。
mysqldump -u -p -P [バインドしたローカルのポート] [db_name] > [file_name]

クライアントツールも便利ですがコマンドラインから繋いでおけると
バッチでデータを調査したり等いろいろと使い易いので出来ると便利です。


Sunday, October 8, 2017

海外長期滞在のための運転免許証の期間前更新

海外に長期間滞在する予定があるが、
更新期限が一年未満の運転免許証を早めに更新してきました。

場所は日曜日もやっている鮫洲試験場です。

ホームページに必要書類としてパスポートが書かれていますので、
長期滞在すための査証(ビザ)が付いた状態で見せる必要があるのか
不明のままビザなしで行きましたが、パスポートを見せるだけで更新できました。


Friday, May 5, 2017

CentOS 7 でiptablesの設定を保存する

何故かこの内容で調べるのに時間が掛かったのでメモしておきます。
最初はiptablesを使ってHTTPのポート80を開いてましたが、
CentOS7ではiptablesではなくfirewalldが本流らしいので、firewall-cmdを使うようです。
firewall-cmd --add-service=http 

再起動後も同様の設定を残したい場合は以下です。
firewall-cmd --add-service=http --permanent

firewall-cmdで設定できるサービスは/usr/lib/firewalld/servicesにあります。
firewall-cmd --add-service=http --permanent
[takeshi@mycentos ~]$ ls /usr/lib/firewalld/services/

amanda-client.xml     freeipa-replication.xml  ldaps.xml        pmwebapis.xml       samba-client.xml  tftp.xml
amanda-k5-client.xml  ftp.xml                  ldap.xml         pmwebapi.xml        samba.xml         tinc.xml
bacula-client.xml     high-availability.xml    libvirt-tls.xml  pop3s.xml           sane.xml          tor-socks.xml
bacula.xml            https.xml                libvirt.xml      pop3.xml            smtps.xml         transmission-client.xml
ceph-mon.xml          http.xml                 mdns.xml         postgresql.xml      smtp.xml          vdsm.xml
ceph.xml              imaps.xml                mosh.xml         privoxy.xml         snmptrap.xml      vnc-server.xml
dhcpv6-client.xml     imap.xml                 mountd.xml       proxy-dhcp.xml      snmp.xml          wbem-https.xml
dhcpv6.xml            ipp-client.xml           ms-wbt.xml       ptp.xml             squid.xml         xmpp-bosh.xml
dhcp.xml              ipp.xml                  mysql.xml        pulseaudio.xml      ssh.xml           xmpp-client.xml
dns.xml               ipsec.xml                nfs.xml          puppetmaster.xml    synergy.xml       xmpp-local.xml
docker-registry.xml   iscsi-target.xml         ntp.xml          radius.xml          syslog-tls.xml    xmpp-server.xml
dropbox-lansync.xml   kadmin.xml               openvpn.xml      RH-Satellite-6.xml  syslog.xml
freeipa-ldaps.xml     kerberos.xml             pmcd.xml         rpc-bind.xml        telnet.xml
freeipa-ldap.xml      kpasswd.xml              pmproxy.xml      rsyncd.xml          tftp-client.xml
この一覧にないサービスを起動したいばあいは手作業でxmlファイルを作成することになります。

ポートを直接指定して開通することも可能です。
[takeshi@mycentos ~]$ sudo firewall-cmd --add-port=1818/tcp

削除する場合は--remove-portします。
[takeshi@mycentos ~]$ sudo firewall-cmd --remove-port=1818/tcp

Thursday, May 4, 2017

Gmail API を使って最初にMessageをダウンロードするときに設定する権限

Gmail APIを試してみようと思ったら最初にサンプルにあるQuick Startを実装してみてラベルの一覧を出してみると思います。
そのあと、メッセージの一覧を取得しようということになると思いますが、
私の様によく考えないで最短距離を行こうとするとこのメッセージでエラーになります。
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

チュートリアルにはGoogle APIで権限の設定について
手取り足取り書いてくれていないので、
これを説明しておいて欲しかったということを下記に。

Quick Startサンプルではこうなっていると思います。
    /** Global instance of the scopes required by this quickstart.
     *
     * If modifying these scopes, delete your previously saved credentials
     * at ~/.credentials/gmail-java-quickstart
     */
    private static final List SCOPES =

            Arrays.asList(GmailScopes.GMAIL_LABELS);

これを以下の様に
    private static final List SCOPES =
            Arrays.asList(GmailScopes.GMAIL_READONLY);

あるいはこんな風に
    private static final List SCOPES
    Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);

その他authorizationの中から一つ以上を選んで下さい。

これでMessageにアクセスする権限がつく筈ですが、
Quick Startのソースを流用して作成していると上手く行きません。

実は下記のパスに権限情報のファイルをキャッシュしているので、
このファイルを削除してクリアするか、


ファイルのパスをQuick Startのものから変更しないといけません。

/** Directory to store user credentials for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"),
".credentials/gmail-java-quickstart");

以上でQuick Startサンプルからの修正で





Tuesday, May 2, 2017

Linux CPU使用率確認

Linux CPU Usage
 topコマンドを使えば、CPUの使用率とメモリの使用量が一覧で見れます。

[takeshi@mycentos ~]$ top
top - 19:19:16 up 1 day, 19:31,  2 users,  load average: 0.04, 0.04, 0.05
Tasks: 190 total,   1 running, 189 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7898360 total,  5946684 free,   675088 used,  1276588 buff/cache
KiB Swap:  8126460 total,  8126460 free,        0 used.  6759548 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  956 root      20   0   24192   1744   1416 S   0.3  0.0   0:05.92 systemd-logind
    1 root      20   0  193764   6948   3968 S   0.0  0.1   0:29.09 systemd

ただ、CPUのコア毎の使用率を見たい時は「mpstat」コマンドを使うと便利です。
下記のコマンドで1秒おきのコアスレッド毎の使用率が見れます。

[takeshi@mycentos ~]$ mpstat -P ALL 1
Linux 3.10.0-514.16.1.el7.x86_64 (mycentos)     05/02/2017      _x86_64_        (4 CPU)

07:25:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:25 PM  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.75
07:25:25 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:25 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

07:25:25 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:26 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:26 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

07:25:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:25:27 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
07:25:27 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
perf statでも見れるらしいが、sudoして動かすと動作がイマイチ。