PHP7.3でFTPS通信

php7.3にてftps通信をしました。
ftp_nlistやftp_put・ftp_getが使用できませんでした。
色々と試してみると、ftp_set_optionでFTP_USEPASVADDRESSをオフにしてからパッシブモードに移行すると関数が使えるようになりました。
悩んでる方はぜひためしてみてください。

//FTP通信でファイルを取得する
$connection = ftp_ssl_connect(Configure::read(‘FtpServerHost’));
$login_result = ftp_login(
$connection,
Configure::read(‘FtpUser’),
Configure::read(‘FtpPassword’)
);
//=======================================================オプションを設定
ftp_set_option($connection, FTP_USEPASVADDRESS, false);
//=======================================================パッシブモードに変更
ftp_pasv($connection, true);
//=======================================================ディレクトリの内容を得る
$files = ftp_nlist($connection, Configure::read(‘RemoteDir’));
ftp_close($connection);

ワイルドカードでLet’s Encrypt を設定する

環境

cat /etc/redhat-release
CentOS release 6.8 (Final)

certbot-autoを取得する

curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
chmod 700 /usr/bin/certbot-auto

コマンド実行

/usr/bin/certbot-auto certonly --manual \
-d *.rexius.co.jp \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory

途中でyumが走り必要なパッケージがインストールされる
コマンド実行中にtxtレコードが出てくるのでそれをvaluedomainに設定

txt _acme-challenge XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

反映後にコマンドを実行する

apacheの設定を変更


ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/home/htdocs/rexius.co.jp"
ServerName *.rexius.co.jp
ServerAlias *.rexius.co.jp
ErrorLog "logs/rexius.co.jp-error_log"
CustomLog "logs/rexius.co.jp-access_log" common
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/rexius.co.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/rexius.co.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/rexius.co.jp/chain.pem

更新コマンドでコケたのでマニュアル更新

/usr/bin/certbot-auto certonly

Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1

Plugins selected: Authenticator apache, Installer None
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): *.rexius.co.jp

Cert not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/rexius.co.jp.conf)

What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Renewing an existing certificate

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/rexius.co.jp/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/rexius.co.jp/privkey.pem
Your cert will expire on 2019-06-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

30日以内なら更新してApacheを再起動
certbot-auto renew -q --no-self-upgrade --post-hook "service httpd reload"

上記だと発行直後なのでエラーが出てこないので強制的に発行
certbot-auto renew -q --force-renewal --post-hook "service httpd reload"

crontabに設定

00 07 * * * certbot-auto renew -q --no-self-upgrade --post-hook "service httpd reload"
毎日朝7時に自動更新

AWSでmysqlが止まる。もしくは、phpでOut Of Memoryのエラーが出る場合

AWSにはswap領域がない。

AWSのEC2には、Swap領域がないため仮想メモリを使えずphpでエラーになったり、MySqlが止まってしまったりします。
なので下記のように対策します。

対策

[root@rexius ~]# cat /var/log/mysqld.log
181001 10:48:01 [Note] Plugin 'FEDERATED' is disabled.
181001 10:48:01 InnoDB: The InnoDB memory heap is disabled
181001 10:48:01 InnoDB: Mutexes and rw_locks use GCC atomic builtins
181001 10:48:01 InnoDB: Compressed tables use zlib 1.2.8
181001 10:48:01 InnoDB: Using Linux native AIO
181001 10:48:01 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
181001 10:48:01 InnoDB: Completed initialization of buffer pool
181001 10:48:01 InnoDB: Fatal error: cannot allocate memory for the buffer pool
181001 10:48:01 [ERROR] Plugin 'InnoDB' init function returned error.
181001 10:48:01 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
181001 10:48:01 [ERROR] Unknown/unsupported storage engine: InnoDB
181001 10:48:01 [ERROR] Aborting

181001 10:48:01 [Note] /usr/libexec/mysql55/mysqld: Shutdown complete

[root@rexius lib]# free
total used free shared buffers cached
Mem: 4048016 1698908 2349108 416 25408 165964
-/+ buffers/cache: 1507536 2540480
Swap: 0 0 0

[root@rexius ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 2.0G 56K 2.0G 1% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/xvda1 40G 30G 11G 75% /

[root@rexius ~]# dd if=/dev/zero of=/swapfile bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 61.2381 s, 70.1 MB/s

[root@rexius ~]# mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=0f88c85c-3c01-4e00-821e-39c171b1d344

[root@rexius ~]# swapon /swapfile
swapon: /swapfile: insecure permissions 0644, 0600 suggested.

[root@rexius ~]# free
total used free shared buffers cached
Mem: 4048016 3105976 942040 416 26896 1798824
-/+ buffers/cache: 1280256 2767760
Swap: 4194300 0 4194300

[root@rexius ~]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]

[root@rexius ~]# vi /etc/fstab
#
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/swapfile none swap sw 0 0

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+

vi /etc/my.cnf
innodb_buffer_pool_size=2000M

[root@rexius ~]# /etc/rc.d/init.d/mysqld restart

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| innodb_buffer_pool_size | 2097152000 |
+-------------------------+------------+
1 row in set (0.00 sec)

AWS WindowsServer2016+Apache24+PHP7.2にてintlが有効にならない

環境

Amazon EC2
WindowsServer2016
Apache24
PHP7.2

現象

Apacheは通常通り起動し、phpも問題ないがintlが読み込めないとapacheのログにエラーがでる。

PHP Warning: PHP Startup: Unable to load dynamic library 'intl' (tried: C:\\php\\ext\\intl (\xef\xbf\xbdw\xef\xbf\xbd\xe8\x82\xb3\xef\xbf\xbd\xea\x82\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdW\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xdc\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdB), C:\\php\\ext\\php_intl.dll (\xef\xbf\xbdw\xef\xbf\xbd\xe8\x82\xb3\xef\xbf\xbd\xea\x82\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdW\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xdc\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdB)) in Unknown on line 0

解消方法

ググってみるとicuライブラリというものをインストールするという記事がでてきた。
ただ、phpのディクレクトリにicuのdllが存在していた。(c:\phpディレクトリ)

なのでWindowsで環境変数のパスをとおして解消しました。

システム環境変数のPathに下記を追加してApacheを再起動で解消しました。
C:\php

SSL設定

SSLのチェック

https://www.ssllabs.com/ssltest/index.html

B判定で警告がでてきました。

This server uses SSL 3, which is obsolete and insecure. Grade capped to B.

# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
#SSLProtocol all -SSLv2
SSLProtocol all -SSLv2 -SSLv3

This server accepts RC4 cipher, but only with older protocols. Grade capped to B.

# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5:!RC4

Raspberry pi 3 初期設定

OSの準備

・日本のミラーサイトからダウンロード
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

・今回は下記zipを使用
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip

win32diskimagerでSDに書き込み[Windowsの場合]
ソフトは下記サイトから取得
https://forest.watch.impress.co.jp/docs/review/1067836.html

後はラズパイに指して起動するだけ。

環境の構築

アップデート処理
sudo apt-get update
APTライブラリのインデックスを更新します。
この更新をするとapt時の取得先が日本のJAISTさんになるようです。
これをしておかないとvimのインストールでこけます。

既存のvimの削除
sudo apt-get --purge remove vim-common vim-tiny

vimのインストール
sudo apt-get install vim

sambaのインストール
sudo apt-get -y install samba
バージョンの確認
smbd -V
Version 4.5.12-Debian

sudo vi /etc/samba/smb.conf
//末尾に追記
[pi]
comment = Raspberry Pi
path = /home/pi
guest ok = yes
read only = no
public = yes
browsable = yes
force user = pi

sudo /etc/init.d/samba restart

globalsign ssl pfx 変換

[秘密鍵]
openssl pkcs12 -in example.pfx -nocerts -nodes -out globalsign.key
[証明書]
openssl pkcs12 -in example.pfx -clcerts -nokeys -out globalsign.cer
[中間CA証明書]
ダウンロードする

iOSアプリの審査でIPv6環境でwebviewが真っ白だということでリジェクトされる

過去の作ったアプリのバージョンアップ申請をしました。

今回は過去に制作したアプリの最新OSへの対応ということでバージョンアップ申請をしてみました。
開発環境では正常に動いており、コード部分も問題がなさそうなのでitunesconnectにアップロードしました。

1.IPv6環境にてwebviewが正常に表示されないということでリジェクトされる。

アップルは2016年から審査にIPv6環境での動作チェックも含みますと宣言していたのでIPv6環境で正常に動作するかチェックが行われるようです。

今回、そのIPv6環境での動作に問題があるということでリジェクトされたみたいです。

1.アップルさんの回答

Performance - 2.1

We discovered one or more bugs in your app when reviewed on iPad running iOS 10.2.1 on Wi-Fi connected to an IPv6 network.

Your app displays blank page upon launch.

The steps to reproduce are:

1. Launch the app
2. Blank page is displayed

Please see attached screenshots for details.

Next Steps

Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify any issues, then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking.

2.IPv6時に動作しないコードやIPv4のIPアドレスなどがないかチェック

IPv6時に動作しないコードやIPv4のIPアドレスなどがないかチェックしました。
コードは問題ないようです。

4.そもそもIPv6とか関係なくないか?

やれることがなくなってしまったので、じっくりと考えてみました。
そもそもIPv6環境だろうがIPv4環境だろうが現在正常に動いているのであれば問題ないのではないか?

IPv6環境からの名前解決は下記の順番

1、IPv6で名前解決
2、あれば終了。なければ3へ
3、IPv4で名前解決
4、Ipv6のローカル用にIpv6に変換してiPadに返す

やはり考えてみるとIPv4環境で名前解決ができていればIpv6環境でも名前解決するはず。

5.それでは何をチェックするべきなのか

1、IPv6環境でも動くソースコードになっているかチェック
2、IPv4環境でアクセスできていて正常動作しているかチェック
3、Appleさんが公開しているIpv6環境で正常に動くかチェック

この3つをチェックして大丈夫であれば、原因はAppleの審査環境でのネットワークの問題ではないだろうか。

Googleで色々調べていると再度審査をお願いすると通ったりするらしい。

つまりDNS64/NAT64 Transitionalが正常に動作していないのだろう。

6.実際にはどのようにして審査を通したか

ソースコードも環境もこちらでは問題ありませんでした。
どうしたらいいのかわかりませんでしたが、そのままの文面でAppleにコメントを返しました。
「推奨されている方法でIPv6環境を構築しチェックをかけたが正常に動作しています。ほかに考えられる問題はありますか?」

すると。。。。

7.Appleさんからの回答

Hello,

Thank you for your response. We will continue the review, and will notify you if there are any further issues.

Best regards,

App Store Review

また問題があれば連絡するよ。とりあえず審査してみるわ風な回答がきました。

8.まとめ

Appleさんから新しくコメントをもらってすぐにPending Developer Releaseになり無事審査を追加しました。

この場合DNSの問題などもあるので色々とやっかいですが、トラブルシューティング自体はそんなに難しくないと思います。

100%審査を通すならIPv6の割り当てられているサーバーでIPv6の名前解決が正常にできる環境がいいでしょう。
Appleの環境に左右されないので。

ただ、サーバー側を管理や選定が自分の会社ではない場合は多いはずです。

その場合は必要なチェックをかけAppleにチェック結果を報告し、いい担当者(いい審査環境?)にあたるのを待つしかないのかもしれません。

ProLiant ML310e Gen8 v2にCentOS7のインストール

社内サーバーを数年交換しておらず数年前に買って動かしていなかったサーバー[ProLiant ML310e Gen8 v2]があったのでサーバーをリプレイスすることにしました。
正直当時どういう内容で発注したか全然記憶になかったので箱から出して手探りでの構築です。

ホットスワップ対応のHardRaidを別で購入してあったらしいのですが、うまくつかないのでもともとついていたB120iのRaidで制作しようと思います。

B120i RAID Controllerを使用したいのですが、問題が発生しました。

CentOSが論理ドライブを認識せず物理ドライブを認識してしまう。。。。

Google先生に聞いてみるとドライバをあてれば認識するらしいので挑戦してみました。

CentOSはこれを使用
http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso
普段はネットインストールをするのですが、ドライバーをあてる際に問題になってしまっても困るのでイメージでインストールしようとおもいます。
rufusでISOをUSBに書き込み

CentOSのバージョンによって
http://downloads.linux.hpe.com/SDR/repo/spp/RedHat/7/x86_64/current/hpvsa-1.2.16-102.rhel7u3.x86_64.dd.gz
これを解凍して下記ファイルを出します。
hpvsa-1.2.16-102.rhel7u3.x86_64.dd
この拡張子を
hpvsa-1.2.16-102.rhel7u3.x86_64.isoに変更してFAT32でフォーマットしたUSBにコピーします。

CentOSのインストール画面が出たらESCを押してコマンドモードに
boot:linux modprobe.blacklist=ahci inst.dd
と入力してドライバーの入っているUSBを選択します。

参考にしたサイト
URL:http://josafatisai.blogspot.jp/2016/01/installing-centos-7-on-hp-proliant.html