CentOS6にRuby-2.5.0をインストール

CentOS6にRuby-2.5.0をソースからインストールしようとすると、makeでエラーが発生してインストールできない。
CentOS6のgccが古いためにエラーになっている。

$ ./configure --prefix=/opt/ruby-2.5.0 --disable-install-doc
$ make
...(略)
prelude.c: In function ‘prelude_eval’:
prelude.c:204: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:205: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:221: error: #pragma GCC diagnostic not allowed inside functions
トップレベル:
cc1: 警告: unrecognized command line option "-Wno-self-assign"
cc1: 警告: unrecognized command line option "-Wno-constant-logical-operand"
cc1: 警告: unrecognized command line option "-Wno-parentheses-equality"
cc1: 警告: unrecognized command line option "-Wno-tautological-compare"
make: *** [prelude.o] エラー 1

Bug #14234: Failed to build on CentOS 6.9 - Ruby trunk - Ruby Issue Tracking System

Ruby-2.5.1では修正されるようだが、とりあえずsclのdevtoolsetを使ってインストールできる。

CentOS6にsclのdevtoolsetをインストール

/etc/profile.dに以下のようなファイルを作成しておいてシステムを再起動すれば、システム起動時からsclでインストールしたdevtoolsetが有効になるので、passengerのインストールやCapistranoでビルドが必要なgemのインストールもOK。(下記はdevtoolset-4の場合の例)

$ cat /etc/profile.d/enabledevtoolset-4.sh
#!/bin/bash
source scl_source enable devtoolset-4

macOS(10.12 Sierra以降)でログを見る

概要

`log`を使う。

リアルタイムで見るなら
`log stream`
過去のログを検索するなら
`log show`

cron

$ log stream --info --predicate 'process == "cron"'
$ log show --info --predicate 'process == "cron"' --start '2017-05-25'

postfix

$ log stream --info --predicate '(process == "smtp") || (process == "smtpd")'
$ log show --info --predicate '(process == "smtp") || (process == "smtpd")' --start '2017-05-25'

指定するprocess名が分からない場合は

$ log show --info --start '2017-11-08' | grep 'xxx'

などとして、process名の当たりをつけて、predicateに指定するといいだろう。

ブラウザの全画面表示

Windows

  • IE, Chrome
    F11
  • Edge
    Shift + Win + Enter

Mac

  • Safari, Chrome
    Ctrl + Command + F
    タブやアドレスバー等のツールバーが表示される場合は、メニューの「全画面表示でツールバーを常に表示する」をオフにする。(または Shift + Command + F)
  • Firefox
    アドレスバーを非表示にできないようだ。

iOS, Android

  • HTMLのmetaタグで、apple-mobile-web-app-capable を yes に設定しておく。
    <meta name="apple-mobile-web-app-capable" content="yes" />
    
  • ページを「ホーム画面に追加」してホーム画面のアイコンから開く。

スワップ領域の作成

# dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 レコード入力
2048+0 レコード出力
2147483648 バイト (2.1 GB) コピーされました、 22.799 秒、 94.2 MB/秒
# mkswap /swapfile
スワップ空間バージョン1を設定します、サイズ = 2097148 KiB
ラベルはありません, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# swapon /swapfile
swapon: /swapfile: 安全でない権限 0644 を持ちます。 0600 がお勧めです。
# chmod 600 /swapfile

/etc/fstab

/swapfile none swap defaults 0 0

確認

# swapon -s
Filename				Type		Size	Used	Priority
/swapfile                              	file	2097148	0	-1

スワップ領域のサイズを変更する場合は、

# swapoff /swapfile

してから /swapfile を削除し、上記手順で再作成すればよい。

subjectAltNameが設定されていない証明書はChromeで NET::ERR_CERT_COMMON_NAME_INVALID エラー

開発環境用に自己署名のSSL証明書を使っているサイトにChromeでアクセスしたら、
「この接続ではプライバシーが保護されません NET::ERR_CERT_COMMON_NAME_INVALID」というエラーになった。

自己署名証明書(Self-signed certificate)だが、クライアント側はMacではキーチェーンアクセスに登録してx.509基本ポリシーを「常に信頼」にしているし、Windowsでは「コンピューター証明書の管理」で「信頼されたルート証明機関」に登録してある。
CN(Common Name)とアクセスしているホスト名も一致している。

Chrome以外のブラウザでは問題ない。
Chromeでも問題なくアクセスできていたが、急にエラーになるようになった。

エラーメッセージに「このサーバーのセキュリティ証明書は[missing_subjectAltName]から発行されています。」とあるので、証明書にsubjectAltNameが設定されていないことが関係しているようだ。

原因

Chrome 58 以降で、ドメイン名と証明書の照合にcommonNameが使われず、subjectAlternativeNameのみを使用するようになった。(ただし、Chrome 65 までは、EnableCommonNameFallbackForLocalAnchorsを設定すればcommonNameを使用できるらしい。)

https://support.google.com/chrome/a/answer/7391219?hl=en

解決方法

subjectAltNameを設定した自己署名証明書を作成する

openssl.cnfをコピーしたファイルにsubjectAltNameを設定して証明書作成時に指定する。

  1. openssl.cnfをコピー(下記はRedHat系の例。openssl.cnfの場所は環境によって読み替える。)
    $ cp /etc/pki/tls/openssl.cnf my-server.example.com.cnf
    
  2. コピーした設定ファイルのreqセクションのx509_extensionsがv3_caになっているので、v3_caセクションにsubjectAltNameを追加すればよさそうだ。
    $ vi my-server.example.com.cnf
    
    [ req ]
    ...
    x509_extensions = v3_ca # The extentions to add to the self signed cert
    ...
    

    v3_caセクションにsubjectAltNameを設定

    [ v3_ca ]
    ...
    subjectAltName=DNS.1:my-server.example.com
    ...
    

    subjectAltNameを複数設定することもできる。

    subjectAltName=DNS.1:my-server.example.com,DNS.2:my-server2.example.com
    

    詳しくは、`man 5 x509v3_config` を参照。

  3. 秘密鍵の作成
    $ openssl genrsa -out my-server.example.com.key 2048
    
  4. 証明書の作成(-configに作成した設定ファイルを指定する
    $ openssl req -new -x509 -days 36500 -sha256 -config my-server.example.com.cnf -key my-server.example.com.key -out my-server.example.com.crt
    

Developer Blog