Crucial SSD購入報告

現役のLinuxが導入から5年経ち、CentOS6 のサポート期限につきOSの更新時期に来ていたので改めてハードウェアを購入することにしました。

次期サーバー機はXeon 4コア32GBメモリ、1TB HDD x2の【サードパーティーカスタムモデル】富士通 PRIMERGY TX1310 M3(Xeon E3-1225v6/32GB/2x 1TB)

 PGダイレクトで注文済みでしたが、内蔵の3.5インチHDDベイを オウルテック 2.5インチHDD/SSD用→3.5インチサイズ変換ブラケット でSATA2.5インチSSDに交換する予定でAmazon.co.jpで注文したCrucial SSD 1000GB MX500 内蔵2.5インチ 7mm MX500 が先に自宅に届いたので購入報告。(あとケーブル、USB3.0-DVDドライブその他。)

OSの選定は悩みますがCentOS7をESXi で仮想化する予定です。

PHP再コンパイル

Apache2.4をWorkerモードで起動したい・・・そんな理由で結局、PHP7.4を再コンパイルしました。

# vi /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_worker_module modules/mod_mpm_worker.so ←チェックアウト
#LoadModule mpm_event_module modules/mod_mpm_event.so ←コメントアウト

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

とでたのでyum install –enablerepo=remi, remi-php74 php-mysqlnd php74-php-mysqlnd

apache停止 PHP再コンパイル apachectl -V でWorker モード起動確認しました。

[root@www conf.modules.d]# apachectl -V
[Sat Jun 27 17:27:57.558701 2020] [so:warn] [pid 3872:tid 140188049873088] AH01574: module php7_module is already loaded, skipping
Server version: Apache/2.4.43 (codeit) Server built: May 7 2020 12:24:30 Server's Module Magic Number: 20120211:92 Server loaded: APR 1.7.0, APR-UTIL 1.6.1 Compiled using: APR 1.7.0, APR-UTIL 1.6.1 Architecture: 64-bit Server MPM: worker threaded: yes (fixed thread count) forked: yes (variable process count)

新たに警告、module php7_module is already loaded, skipping がでましたが起動には問題ないのでこちらは追々、解決していくことにします。

AWSのCentOS7にPHP7.4をソースからインストール – OpenSSL1.1.1 TLS1.3 対応

AWSのCentOS7.8にPHP7.4をyumでインストールしたものの、OpenSSLのバージョンが1.0.2k-fips 26 Jan 2017と古いままだったのでOpenSSL-1.1.1g PHP7.4.7 をソースビルドしてCode-ITリポジトリからApache2.4をインストールした顛末をメモ。

CentOS7にOpenSSL1.1.1をインストール | Qiita

OpenSSLは上記記事を参考に/usr/local/openssl-1.1.1 にインストール済みです。ただパスが通っていないので以下の通りにシンボリックリンクを貼りました。追記)/usr/local/openssl-1.1.1 への環境変数も追加で登録しました。

# mv /usr/bin/openssl /usr/bin/openssl.bak
# ln -s /usr/local/openssl-1.1.1/bin/openssl /usr/bin/openssl

# export PATH=/usr/local/openssl-1.1.1/bin:$PATH

CentOS 6 の環境にPHP7をインストールしてApacheで動かすまで

少々古い記事ですがPHP7.4のコンパイルに必要そうなパッケージはyumで一気に揃えます。

# yum -y install httpd-devel gd-devel libxml2-devel mysql-devel t1lib-devel
# yum -y install bzip2-devel curl-devel gmp-devel aspell-devel recode-devel
# yum -y install libmcrypt-devel

PHP7.4.7は公式から/usr/local/src にwget でダウンロード、解凍します。

# cd /usr/local/src
# wget https://www.php.net/distributions/php-7.4.7.tar.gz
# tar zxvf php-7.4.7.tar.gz
# cd php-7.4.7 # ./configure --with-apxs2=/usr/bin/apxs --bindir=/usr/local/bin --with-openssl=/usr/local/openssl-1.1.1 --with-libxml --with-mysqli --with-zlib --with-curl --with-xsl --with-gettext --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gmp \ --enable-mysqlnd \ --enable-mbstring \ --enable-bcmath \ --enable-pcntl \ --enable-cgi \ --enable-cli \ --enable-exif \ --enable-ftp \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-shmop \ --enable-calendar \ --enable-opcache \ --enable-intl \ --disable-debug

途中、make testでopcacheインストールしてないよ!とかいろいろ怒られましたがyumでその都度インストール対応しました。

# yum --enablerepo=epel,remi-php74 install php-opcache

make & make install

# make
# make install

で表題の件。

CentOS7にyumでHTTP/2.0対応Apache/OpenSSLを導入してみる

CodeITリポジトリ導入。Apache2.4本体、秘密鍵のインストールして起動・・・

# cd /etc/yum.repos.d && wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
# yum install httpd

# cd /etc/pki/tls/certs/
# make localhost.crt
# make localhost.key # cd ../private/ # cp ../certs/localhost.key ./
# cp localhost.key localhost.key.orig ## 秘密鍵のパスフレーズを解除 # openssl rsa -in localhost.key.orig -out localhost.key

## Apache httpd HTTPSとHTTP/2通信用の設定
## ssl.confの # Virtual Host Context 行下に追記

# vi /etc/httpd/conf.d/ssl.conf

Protocols h2 http/1.1 (追記 # systemctl start httpd

起動しようとしたのですが失敗しました。

systemctl status httpd.service -l でエラーメッセージを取得すると、

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP

Google先生に訊いてみるとApache がWorker として起動していてPHPと不整合している旨了解しました。/etc/httpd/conf.modules.d/00-mpm.conf を編集して

#LoadModule mpm_event_module modules/mod_mpm_event.so ←チェック
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so ←チェックを外す

するとApache 起動しました。

PHPインストール時のMPMのエラーを手っ取り早く解消する

AWSのt2.microではPHPのソースビルドでも「aws virtual memory exhausted: メモリを確保できません」エラーが出てスワップを作らないとインストールできなかったほど限界で、マルチスレッドからシングルスレッドになりスピードダウンは否めないのでWorkerモードしてもどの程度負荷軽減できるか課題の残るところです。phpinfo.php で確認すると無事、OpenSSL1.1.1g TLS1.3 対応しました。

スワップ作成は以下のサイトが参考になりました。

[Rails] CapistranoでEC2へデプロイ:EC2仮想メモリ不足トラブルシュート

AWS CentOS7 にPHP最新版をインストールする

PHPのバージョン最新版をAWSのCentOS7にインストールしようとして試行錯誤した顛末。

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。と表示された対応 | Qiita

そもそもremiリポジトリがなく最初にインストールするところから始めました。

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

鍵がない!(NOKEY)と怒られたので、wget でとりに行きました。

# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# rpm -Uvh remi-release-7.rpm

ここでエラー: 依存性の欠如:
epel-release = 7 は remi-release-7.7-2.el7.remi.noarch に必要とされています

ん・・・epel が必要らしいことがbash のlocale をJPにして気付きました。

# yum -y install epel-release

こんなこともしばらく触れないうちに忘れてしまうものなんですね・・・で表題の件。PHPをモジュールごとまるっとインストールします。

PHP バージョン情報 | OpenStandia™ (オープンスタンディア) 最新版は7.4.7

# yum install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql

# php -v
PHP 7.4.7 (cli) (built: Jun 9 2020 10:57:17) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

無事、Wordpress を初期設定できました。ありがとうございました。

AWS SCPオプションでつまづく

AWS にデータベース用のインスタンスをプライベートネットワーク上に作成、ローカルからSCPを使ってキーファイルを転送しようとしたところ、connection refused で弾かれました。コマンドのポート指定オプションを間違えていたようです。

$ scp -P 20022 -i /path/to/identityfile localfilename remoteuser@hostname:~/

大文字の-Pで転送できました。(ホッ

追記) 踏み台サーバーからログインするために.ssh/config のパーミッション設定は必須でした。

# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/config

McAfee Endpoint Security for Linux 無料トライアル版をインストールする

McAfee Endpoint Security for Linux Threat Prevention 10.6.9 無料トライアル版ENSL1069_Eval.zip をダウンロードします。

https://www.mcafee.com/enterprise/ja-jp/downloads/trials.html?pid=endpoint-security

ファイルを解凍、作業ディレクトリ /usr/local/src/ 配下に設置します。

# cd ENSL1069_Eval/ENSL1069_Eval

キーを解凍
# tar xvf MCAFEE_LLC.PUB.TAR

本体を解凍
# tar zxvf McAfeeTP-10.6.9-121-Eval-standalone.tar.gz

解凍された圧縮ファイルを解凍
# tar zxvf McAfeeTP-10.6.9-121-standalone.linux.tar.gz
すべて解凍
# tar zxvf McAfeeESP-Basic-10.6.9-126-Full.linux.tar.gz
# tar zxvf McAfeeESP-KernelModule-10.6.9-126-Full.linux.tar.gz

キーをインポート
# rpm --import MCAFEE_LLC.PUB

署名を確認
# rpm -K McAfeeESP-10.6.9-126.x86_64.rpm
# rpm -K McAfeeRt-10.6.9-126.x86_64.rpm
# rpm -K McAfeeTP-10.6.9-121.x86_64.rpm
# rpm -K McAfeeESPFileAccess-10.6.9-126.x86_64.rpm
# rpm -K McAfeeESPAac-10.6.9-126.x86_64.rpm

# cd MA562LNX/

パッケージをインストール
# rpm -ivh MFEma.x86_64.rpm
# rpm -ivh MFErt.i686.rpm
# cd ..
# ./install-mfetp.sh usefanotify

ライセンス条項をスクロールして accept [Enter] します。

インストールが終わるまでディスプレイを眺めながらお茶でも飲みます。

コマンドから起動確認

# /opt/McAfee/ens/tp/bin/mfetpd restart
# /opt/McAfee/ens/tp/init/mfetpd-control.sh status

mfetpd start/running, process ######
お疲れさまでした。

MySQL データベースのエクスポート

OpenSSH をソースビルド時にうっかりSSLのライブラリーを上書きしてしまいSSHが起動しなくなりました。Web サーバーも起動エラーして再起不能かと思いましたがバックアップHDDが生きていてWordpressのデータを救出することができました。

MySQLのデータベースをまるっとお引越し。 (エクスポート/インポート)

mysqldumpまとめ

user_name, database_name, パスワードはwp-config.php で確認後、USBメモリにエクスポート。

# mysqldump -u user_name -p database_name > export_file_name.sql

HDDを入れ替えてOS起動、インポートも同様に、

# mysql -u user_name -p database_name < export_file_name.sql

AWS セッションマネージャーをインストールしてみた

概要
いつの日か、あなたがSSHキーを吹っ飛ばしても落ち着いて対応できる道しるべ 〜SSMの手順を添えて〜

不測の事態に備えてAWS のCentOS7のインスタンスにセッションマネージャーをインストールする手順をメモ。

まずはAmazon Linux2 などデフォルトで搭載されているSSMエージェントをインストールしてみる。

Linux 用の EC2 インスタンスに手動で SSM エージェント をインストールする

# sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
# sudo systemctl status amazon-ssm-agent 起動確認 # sudo systemctl enable amazon-ssm-agent 自動起動

AWSコンソール→IAMからロールの作成

ユースケース→EC2→次のステップ:アクセス権限でポリシー一覧からAmazonEC2RoleforSSMを選択、タグを付けてロール名を登録、作成。

AWSコンソール→EC2→アクション→インスタンスの設定→IAMロールの割り当て/置換で先ほど作成したロールを適用して関連付けしたら完了。

AWSコンソール→System Manager→セッションマネージャーから[セッションの開始]で関連付けられたインスタンスを選択して[セッションを開始する]

GUIからサーバーに入ることができました。

SSHポート変更SELinuxでつまづく

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 でCentOS7.8 をAWS に実際にインスタンスとして起動、設定をしたのでメモ。

タイムゾーン設定
AWS EC2 Amazon Linuxインスタンス起動後、最初にやることまとめ

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Tokyo" UTC= true
# shutdown -r now

yum ファステストミラー設定、グループインストール、アップデート
CentOS7 で yum groupinstall が出来ないんですけど。。。

# vi /etc/yum/pluginconf.d/fastestmirror.conf

include_only=.jp

# yum -y install bash-completion
# yum -y groupinstall base "Development tools" --setopt=group_package_types=mandatory,default,optional
# yum -y update

SSHポート変更
(AWSコンソールのEC2→セキュリティグループ→インバウンドルールの編集からカスタムTCPポート20022を許可)

# vi /etc/ssh/sshd_config
Port 20022
# setenforce 0 # vi /etc/selinux/config
SELINUX=permissive # semanage port -a -t ssh_port_t -p tcp 20022 # systemctl restart sshd # systemctl enable sshd

ここでSELinuxのコンテキスト変更せずにインスタンス再起動するとsshd 起動エラーを起こして通信できなくなる罠。AWSで再起動後、SSHが繋がらなくなった場合の対処法。SELinuxが原因でした。

semanage port -a -t ssh_port_t -p tcp 20022

ふしあなさん、/etc/ssh/sshd_config に英文の注意書きがありましたね・・・これに気付くまでインスタンス削除、起動を10回繰り返しましたよorz

設定の途中で一時的にPermissive にしてもセキュリティ上は最終的にSELinux は有効にすることが望ましいと思います。Amazon LinuxでSELinuxを有効にする。

AWS ではセキュリティグループでポート管理を行うのでインスタンス内でfirewalld をアクティブにしないのがベストプラクティスのようですね。

AWSコンソールからVPC→アクション→DNS解決の編集を有効化

AWSコンソールからVPC→アクション→DNSホスト名の編集を有効化

AWSコンソールからRoute53→ホストゾーン作成

AWSコンソールからRoute53→EC2のElastic IP からAレコード転記

あらかじめGodaddyで取得した独自ドメインのネームサーバーにホストゾーンで生成されたアドレスを転記

GoDaddyからRoute53によるDNS管理に変える方法

nslookup ブラウザで名前解決できることを確認して作業終了しました。

Linux JPEG のexif 情報一括削除

スマホのjpeg画像をwordpressにタグ付きでアップロードしている場合、画像のGPS情報など削除しておきたいですね。Windowsの場合、画像の[プロパティ] – [詳細]から[プロパティや個人情報を削除]から削除することができます。Linux でも画像のプロパティを削除できるフリーソフトがいくつかあります。今回はJhead を使ってwordpressディレクトリのjpeg ファイルのプロパティを一括削除してみたと思います。

Jhead-3.03.tar.gz をダウンロードして解凍

# cd /usr/local/src/
# tar -zxvf jhead-3.03.tar.gz
# cd jhead-3.03
# make & make install
# find /DocumentRoot/wordpress/wp-contents/uploads/ -name *.jpg -type f | xargs jhead -purejpg

jhead をmake するときにmktemp コマンドは危険 mkstemp コマンドをお勧めします。みたいなエラーが出たときは素直にコマンドを置き換えてトライしてみましょう。