CentOS7でNginxでWordPressあとPHP5と7切り替え
PHPバージョンの切り替えについては、だいたいこのサイトで。
Nginx+WordPressの設定はこちらで。
nginxはデフォでユーザnginxで実行されていて、それはいいのだけど、php-fpmはユーザapacheで実行されてしまうので、nginxに統一したい。phpバージョンによってphp-fpmの設定ファイルが特定の場所にあったりなかったりした。ともかくこのなかの実行ユーザと実行グループを変えればOK。
# php5.6のはここにあり、 $ ll -i /opt/remi/php56/root/etc/php-fpm.d total 20 256069 -rw-r--r-- 1 root root 19220 Sep 27 00:19 www.conf # ここにもある # inode番号は同じだけどリンク数1になっててよくわからん $ ll -i /etc/opt/remi/php56/php-fpm.d total 20 256069 -rw-r--r-- 1 root root 19220 Sep 27 00:19 www.conf # php7.4はこれがない $ ll -i /opt/remi/php74/root/etc/php-fpm.d ls: cannot access /opt/remi/php74/root/etc/php-fpm.d: No such file or directory # こっちはある $ ll -i /etc/opt/remi/php74/php-fpm.d total 20 509458 -rw-r--r-- 1 root root 19552 Sep 27 00:38 www.conf
ついでに大変個人的なメモで、wp-include/rewrite.phpの172行目と211行目コメントアウト。 global $wp_rewrite
が存在しない。コメントアウトしたせいで一部URLが正しく表示されない模様。
外部にメール送信できるようPostfix設定
saslauthd設定
/etc/sysconfig/saslauthd
/etc/shadow を利用した認証方法に変更
# MECH=pam MECH=shadow
再起動してOSユーザ名とパスを使って動作確認。
$ service saslauthd restart $ testsaslauthd -u user -p pass 0: OK "Success."
postfix設定
/etc/postfix/master.cf
submissionサービスをsasl認証つきで利用
submission inet n - n - - smtpd # -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
/etc/postfix/main.cf
sasl認証済のユーザは任意の宛先へ送信可能とする
http://www.aconus.com/~oyaji/bbs/wforum.cgi?mode=allread&pastlog=0012&no=7547&page=120&act=past
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
さいきどう。
$ service postfix restart Shutting down postfix: [ OK ] Starting postfix: [ OK ]
送信確認
事前にユーザ名とパスワードをbase64化しておく。
# echoは末尾に改行をつけて出力する。-n は改行をつけないオプション $ echo -n user | base64 USERBASE64= $ echo -n pass | base64 PASSBASE64=
プロトコル直利用でメール送信。
$ telnet localhost 587 EHLO example.com 250-example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 334 VXNlcm5hbWU6 USERBASE64= 334 UGFzc3dvcmQ6 PASSBASE64= 235 2.7.0 Authentication successful MAIL FROM: user@example.com 250 2.1.0 Ok RCPT TO: mymailaddress@x.com 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> hello! hello! .
TLS設定
あとでやる。
scala-sshでscp
PublicKeyLoginはデフォルトで ~/.ssh/id_rsa
と ~/.ssh/id_dsa
を秘密鍵として使う。のだけど、環境によるのだろうか、"~" がユーザのホームディレクトリとして展開されないので、鍵は自分でちゃんとフルパスを指定。
val host = "xxx.example.com" val home = System.getProperty("user.home") SSH(host, HostConfig( PublicKeyLogin("xfan", s"$home/.ssh/id_rsa"), hostKeyVerifier = HostKeyVerifiers.DontVerif, )) { client => client.upload(s"$home/images/neko.jpg", "/tmp") match { case Success(_) => // nothing to do case Failure(e) => throw e } }
かんたん。
IntelliJ IDEAでコードスタイルの設定
Preferences -> Editor -> Scala
とりあえず初期状態から下記のあたりを変更した。メソッド定義が長いときに引数を改行したら ( に整列するのは許せない。
Spaces -> Other -> New line after annotations ✓ Wrapping and Braces -> Keep when reformatting -> Simple blocks in one line ✓ Wrapping and Braces -> Keep when reformatting -> Simple methods in one line ✓ Wrapping and Braces -> Keep when reformatting -> Simple one-line lambdas in arg list ✓ Wrapping and Braces -> Method declaration parameters [Wrap if long] Wrapping and Braces -> Method declaration parameters -> Align when multiline □ Wrapping and Braces -> Method declaration parameters -> New line after '(' ✓ Wrapping and Braces -> Method declaration parameters -> Place ')' on new line ✓ Wrapping and Braces -> Chained method calls [Chop down if long]
Javaの正規表現で \p{Han} がPatternSyntaxException
Java8と9で確認した。それ以降のバージョンでは確認していない。
Pattern p = Pattern.compile("\\p{Han}+"); Matcher m = p.matcher("吾輩は猫である"); while (m.find()) { System.out.println("matched: " + m.group()); }
が
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown character property name {Han} near index 6 \p{Han}+
こうなる。
https://github.com/Engelberg/instaparse/issues/106#issuecomment-127065635 のコメントによると、次のように書けばOK。UnicodeブロックとUnicodeスクリプトとで書き方が違うらしい。
Pattern p = Pattern.compile("\\p{script=Han}+");
結果。
matched: 吾輩 matched: 猫
エラーはこれで解決なのだけど、先のコメントと同じページに次のような記述があるので、\{script=Han}
が、これらのブロックの文字すべてにマッチするのかどうか、確認してみた。
(* Same as Han but without IDC *) L = CJK | CJKA | CJKB | CJKC | CJKD | CJKE | CJKRS | KR | CJKSP | CJKS | ECJKLM | CJKCo | CJKCI | CJKCF | CJKCIS (* IDC are excluded from this *) Han = L | IDC (* Blocks follow *) CJK = #'[\u4e00-\u9fff]' CJKA = #'[\u3400-\u4dbf]' CJKB = #'[\u20000-\u2a6df]' CJKC = #'[\u2a700-\u2b73f]' CJKD = #'[\u2b740-\u2B81F]' CJKE = #'[\u2b820-\u2ceaf]' CJKRS = #'[\u2e80-\u2eff]' KR = #'[\u2f00-\u2fdf]' IDC = #'[\u2ff0-\u2fff]' CJKSP = #'[\u3000-\u303f]' CJKS = #'[\u31c0-\u31ef]' ECJKLM = #'[\u3200-\u32ff]' CJKCo = #'[\u3300-\u33ff]' CJKCI = #'[\uf900-\ufaff]' CJKCF = #'[\ufe30-\ufe4f]' CJKCIS = #'[\u2f800-\u2fa1f]'
各ブロックから表示できそうな文字を選んで並べてマッチさせてみる。文字はCyber Librarianで探した。
String chars = String.join("", new String[] { "\u4e00", "\u3400", "\ud840", "\udc0b", // "\u2000b", "\ud869", "\udfdd", // "\u2a7dd", "\ud86d", "\udf46", // "\u2b746", "\ud86e", "\udcb8", // "\u2b8b8", "\u2e80", "\u2f00", "\u2ff0", "\u3000", "\u31c0", "\u3200", "\u3300", "\uf900", "\ufe30", "\ud87e", "\udc04", // "\u2f804", }); System.out.println(chars); Pattern p = Pattern.compile("\\p{script=Han}+"); Matcher m = p.matcher(chars); while (m.find()) { System.out.println("matched: " + m.group()); }
その結果。
一㐀𠀋𪟝𫝆𫢸⺀⼀⿰ ㇀㈀㌀豈︰你 matched: 一㐀𠀋𪟝𫝆 matched: ⺀⼀ matched: 豈 matched: 你
CJK統合漢字拡張E(CJKE)、漢字構成記述文字(IDC)、CJKの記号及び句読点(CJKSP)、CJKの筆画(CJKS)、囲みCJK文字・月(ECJKLM)、CJK互換用文字(CJKCo)、CJK互換形(CJKCF)はマッチしない模様。見た感じ、普通に考えて漢字でないブロックを除外しているようではある。CJK統合漢字拡張Eは漢字だけど、このブロック自体がJava8ではサポートされていないようなので、仕方ない。
一応、自分で正規表現にすべてのUnicodeブロック(拡張Eを除く)からなる文字クラスを定義してマッチさせてみた。
String[] props = { "\\p{InCJKUnifiedIdeographs}", // CJK [\u4e00-\u9fff] "\\p{InCJKUnifiedIdeographsExtensionA}", // CJKA [\u3400-\u4dbf] "\\p{InCJKUnifiedIdeographsExtensionB}", // CJKB [\u20000-\u2a6df] "\\p{InCJKUnifiedIdeographsExtensionC}", // CJKC [\u2a700-\u2b73f] "\\p{InCJKUnifiedIdeographsExtensionD}", // CJKD [\u2b740-\u2B81F] // "\\p{InCJKUnifiedIdeographsExtensionE}", // CJKE [\u2b820-\u2ceaf] ない "\\p{InCJKRadicalsSupplement}", // CJKRS [\u2e80-\u2eff] "\\p{InKangxiRadicals}", // KR [\u2f00-\u2fdf] "\\p{InIdeographicDescriptionCharacters}", // IDC [\u2ff0-\u2fff] "\\p{InCJKSymbolsandPunctuation}", // CJKSP [\u3000-\u303f] "\\p{InCJKStrokes}", // CJKS [\u31c0-\u31ef] "\\p{InEnclosedCJKLettersandMonths}", // ECJKLM [\u3200-\u32ff] "\\p{InCJKCompatibility}", // CJKCo [\u3300-\u33ff] "\\p{InCJKCompatibilityIdeographs}", // CJKCI [\uf900-\ufaff] "\\p{InCJKCompatibilityForms}", // CJKCF [\ufe30-\ufe4f] "\\p{InCJKCompatibilityIdeographsSupplement}" // CJKCIS [\u2f800-\u2fa1f] }; String chars = String.join("", new String[] { "\u4e00", "\u3400", "\ud840", "\udc0b", // "\u2000b", "\ud869", "\udfdd", // "\u2a7dd", "\ud86d", "\udf46", // "\u2b746", "\ud86e", "\udcb8", // "\u2b8b8", "\u2e80", "\u2f00", "\u2ff0", "\u3000", "\u31c0", "\u3200", "\u3300", "\uf900", "\ufe30", "\ud87e", "\udc04", // "\u2f804", }); System.out.println(chars); Pattern p = Pattern.compile("[" + String.join("", props) + "]+"); Matcher m = p.matcher(chars); while (m.find()) { System.out.println("matched: " + m.group()); }
結果。拡張E以外マッチ。
一㐀𠀋𪟝𫝆𫢸⺀⼀⿰ ㇀㈀㌀豈︰你 matched: 一㐀𠀋𪟝𫝆 matched: ⺀⼀⿰ ㇀㈀㌀豈︰你
サロゲートペアはJavaScriptで雑なコード書いてつくりました。
const toSurrogatePair = function(ch) { const x = ch - 0x10000 return [ Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00 ].map(c => `\\u${c.toString(16)}`) } [ 0x2000b, 0x2a7dd, 0x2b746, 0x2b8b8, 0x2f802, ].forEach(c => { const p = toSurrogatePair(c) console.log(`"${p[0]}", "${p[1]}", // ${c.toString(16)}`) })
phpbrewでphpインストール
Mac, Mojave.
https://github.com/phpbrew/phpbrew/wiki/Requirement にある手順
xcode-select --install brew install automake autoconf curl pcre bison re2c mhash libtool icu4c gettext jpeg openssl libxml2 mcrypt gmp libevent brew link icu4c brew link --force openssl brew link --force libxml2
のうち下3つはできないしやらないで、代わりにパス通しておく。それ以外は公式に記載のとおり進めた。
export PATH="/usr/local/opt/icu4c/bin:/usr/local/opt/icu4c/sbin:$PATH" export PATH="/usr/local/opt/openssl/bin:$PATH" export PATH="/usr/local/opt/libxml2/bin:$PATH"
今回はPHP5.xが必要だったので、インストールしようとしてみると、まだ必要なライブラリがいくつか足りないらしくエラーでる。
$ phpbrew install 5.6.40 +default ...(略) checking for BZip2 support... yes checking for BZip2 in default path... not found configure: error: Please reinstall the BZip2 distribution checking for cURL support... yes checking for cURL in default path... not found configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
いくつかライブラリ追加と、インストール時にパス指定し、やりなおしてインストール成功。
$ brew install zlib bzip2 libiconv curl $ phpbrew install 5.6.40 +default +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)" +curl="$(brew --prefix curl)" (略) Enjoy! $ phpbrew use php-5.6.40 $ php -v PHP 5.6.40 (cli) (built: Aug 25 2019 17:25:10) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
バッテリー膨張で修理にだしたMacbook Proが返ってきた
バッテリーが膨張して平らなテーブルに置いてもPCの中央部分が接地してガタつくので、修理に出した。
最初の電話サポートでは情報をもらえず後でわかったことなのだけれど、修理の際、Apple直か正規サービスプロバイダかで、料金がちがう。プロバイダのほうは、プロバイダが独自に修理費用を上乗せすることが認められているらしい。今回のバッテリー交換は、Apple直で19,800円。うちの近くのプロバイダだと29,000円。わざわざ行ったプロバイダだったけどお断りした。Appleストアは近くにないけれど、配送修理がある。郵送料は往復とも無料、というか修理代金に含まれているそう。プロバイダで点検してもらったことで、バッテリー膨張以外に大きな問題はないことは確定していたので、事前見積もりが変動する可能性も低い。
ついでに、これはプロバイダでの点検で教えてもらったことなのだけれど、一部微妙に剥がれていたディスプレイのコーティング、これについては購入から4年のサポート期間があるということで、ギリギリ期間内。バッテリー交換のついでに無料修理してもらった。
16日(金)電話サポートで修理依頼、17日(土)集荷、23日(金)返却。うち修理工場から遠いので片道1日ずつは余計にかかってそう。バッテリーの保証はこれから1年。
キーボードをブラックアウトステッカーで無刻印化していたのだけど、バッテリーと一体型ということで一緒に交換されて新品になってしまった。もう一回買おうかな。
ブラックアウトステッカー for Mac 15mm(MBA/MBP~2015 JIS用)
- 出版社/メーカー: ファーイーストガジェット
- 発売日: 2015/10/15
- メディア: Personal Computers
- この商品を含むブログを見る