当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

よく使うパッケージ依存やアプリサーバの動作問題を解決するのに役立つコマンド

よく使うパッケージ依存やアプリサーバの動作問題を解決するのに役立つコマンド


Linuxでパッケージをインストールしているとよく起こる依存関連の問題。アプリのバージョンごとに同じライブラリーでも、別のライブラリーバージョンを使っていると依存関係でエラーが発生する。また、動作しないパッケージを調べる時に、そもそもどこにどんなファイルが設置されたのかわからないときがある。そんな時に使えるコマンドを覚えておきましょう。

既にフォルダーにあるrpmファイルがどのようなファイルを展開するのか調べる

ファイルの由来を調べてパッケージを突き止める。

これからインストールしようとしているパッケージがどのようなファイルを展開するのか調べる。

実行プログラムがどんなファイルをハンドルしているか調べる

アプリサーバの機能の一部が動かないと思う時は便利。straceで掴んでいるファイルをデバッグできる。Linuxの世界ではそもそも設定が正しくても動かないものもある。バグだったり、使用モードの違いで、正規リリースでは動かず、オプションを変えてRPMの再構築が必要なものとかもたまにある。その判断を行う場合に私はよく使っています。

プログラムがどのようなライブラリーを参照しているか調べる。

ltraceは共有ライブラリーの関数呼び出しをトレースする関数でこれもまた非常に有益なツールです。バージョン違いのライブラリーを参照していないか、ライブラリーのどの箇所でエラーが起きたのか?ライブラリーを読み込めていないのでは?などを調べる時に使います。ときには応急処置でこれで調べた結果を元に呼び出し元のプログラムのバイナリーにパッチをかけてライブラリーの呼び出す先を変えたりするのに使っています。

タグ: , , , ,

CentOS6/CentOS7 Apache2.4.17以降へアップグレードかつHTTP2対応 SSL&phpも考慮


CentOSはバージョン6,7ともレポジトリーISUを追加してhttp2対応が必要。CentOS7はApache2.4ではあるがマイナーバージョンがhttp2に対応していない。
尚更、CentOS6は対応できていない。Ubuntu/Debian系のLinuxなら比較的簡単に入れられるのでそこがCentOSの場合面倒なところ。ちなみに秋頃にリリースされたCentOS8はデフォルトでApache+php-fpmの組み合わせでhttp2仕様になっています。特にhttp2に対応するための特別な設定は不要です。

まず最初に現在使っているhttpd2.2.xのWEBサーバとphpを外す必要があるだろう。標準のものを使っている場合はremiの進んだバージョンのphpを使っている
場合もあるだろうが概ね下記のような感じで依存関係もチェックしながら外してゆく。その後にISUのレポジトリーを追加してhttp2対応のhttpd2.4を導入する。
このバージョンではmod_phpが古いhttpdでなければ動かないようなのでphpはfastCGIを使った方法に変更する。

現行環境の削除、レポジトリー追加とapache2.4(http2対応バージョン)+fastCGI導入

※httpd2対応のモジュールロード設定は/etc/httpd/conf.modules.d/00-base.confに追加されています。

プロセスをevent型に切り替える

httpd2対応にはhttpdプロセスのprefork型の動作では駄目です。event型に切り替える必要があります。

fastCGIの設定修正

mod_phpが使えないのでfastCGI経由でphpを動作させます。それにあたり基本設定の動作ユーザをapacheに切り替えます。

仮想サーバ設定にhttp2動作のためのデイレクティブ追加

eventモジュールのパラメータ設定

Apache2.4ではMaxClientsがMaxRequestWorkersに変わっています。

/etc/httpd/conf.dの配下にmpm_event.confのような名前で配置します

fastcgiのプロキシー設定

fastcgiとapacheをつなぐ設定です。これがないとphpが動きません。

proxyfcgi.confのような名前で/etc/httpd/conf.dに配置してください

サーバの起動

http2になっているかチェックする。

http2に対応していることがブラウザの検証ツールで確認できます。 またレスポンスヘッダーを見て確認する事もできます。

h2プロトコルの結果検証

PHPが使えなかったりhttp/1.1のままになっている方は何が原因?

それはopensslが古いままだからです。openssl1.0.2以降を使いましょう。あるいはapacheとphp-fpmの連携が噛み合っていない場合もありえます。phpのバージョンとphp-fpmのバージョンがマッチしてなかったりすることもあるので確認してみましょう。Apacheではfastcgiの連携にproxyを経由します。その設定が適切に行えてなければ連携できていません。なければ自分でproxyfcgi.confを仮想サーバディレクトリで作成して連携させてください。

タグ: , , , , , ,

CentOS7/CentOS6 共通h2o HTTP/2対応Web サーバのインストール with WORDPRESSで動かしてみる。


h2oサーバの導入の動機

h2oを使ってみようと思った理由はHTTP/2.xで通信できることかな。最近のGoogle検索順位は早さも大切な評価ウェイトをしめているためサイトの速度アップは重要なことです。
このHTTP/2.xのプロトコルはHTTPS通信において表示速度を向上させ並列してリクエストを処理できるため、表示速度が向上します。
Nginxも早いのですが、H2OはそのNginxを凌ぐ早さで表示できるようです。通信スレッドはマルチプロセス・マルチスレッド方式です。CPUのコア数に合わせてnum-threadsを設定すれば良いようだ。

h2oのレポジドリーの追加

h2oのインストールはCentOS7/CentOS6で共通です。基本はyumのレポジトリーに以下の記述を追加し保存するだけでyum経由でレポジトリー からのインストールが可能になります。

h2oのインストールと起動

h2oを実際にyumを使ってインストールし、起動する手順になります。

ユーザh2oの作成とドキュメントルート作成&WORDPRESSの設置

SSL & WORDPRESSを動かす際のコンフィグレーション例(h2o.conf)

今回はSSLを使ってh2o環境でWORDPRESSを動かすケースのh2o.confを挙げてみたいと思います。
let’s encryptを使ってSSLライセンス取得し、実験してみました。Let’s Encrypt取得のやり方はここ
ドキュメントルートに/opt/html/content1として、実行ユーザはh2oユーザを新たに作り設定しています。
nginxにも似ている書き方にも感じますが、インデントで設定の範囲がきまるので注意しましょう。
尚、fastCGIをh2oは直接管理できるので通常行うようなfastCGIの設定は不要です。
SSL証明書の項目設定の中でCAファイル(認証局証明、中間証明等)を設定する箇所はありません。
従ってサーバ証明書とCAファイルはcatコマンドで結合を行ってください。結合後に結合ファイルの終点と開始点の間に改行が正しく入っていなかったらエラーになりますので必ず結合の後にチェックが必要です。
最初にサーバ証明書が来るようにするのがポイントです。尚、LetsEncryptの場合fullchain.pemが既に結合されたものです。

おまけ:ソースからのh2oコンパイル

CentOS6.10のデフォルトのgccバージョン(4.4.7)では宣言エラー(同じ関数名で異なるタイプ宣言)が出てしまいました。しかしHomebrewで導入しているgccのバージョン(5.5.0)では 問題なくコンパイルが完了しました。gccバージョン毎のプロトタイプ宣言の解釈と処理の違いがあるようです。尚centOS7,centOS8では簡単にコンパイルできます。ライブラリーが足りないと途中出てきますが2つほどマニュアルでライブラリー追加すれば問題ありません。Ubuntu系の最新バージョンではソースコード中のUINT_MAXをUINT8_MAXに置き換える作業がありましたがこちらもすんなりコンパイル出来ます。

タグ: , , , , , ,

SSHGURDをCentOS6.xで使う


SSH接続のブルートフォースアタックは、どのサイトでも当たり前に攻撃されている。概ね複雑なパスワードだと無理なので放置しても無害と思ってたが、それは意外にも連続して多数のサイトから攻撃されることもあり、ゆっくりコマンド投入してセッションホールドを長くして負荷を与えていることがわかった。解決策としてもう古いソフトだがsshguardを導入する。



この導入するシステムは、OSはCentOS6.xを想定している。Gitやソースでsshguardの導入ができるのだが最新のものやちょっと過去のものだとCentOSで動かない事がわかった。

このバージョンなら間違いなく動作します。

–prefixで指定しなければデフォルトで/usr/local/sbin配下にインストールされる。

必須ではないが使い勝手が良いsyslog-ngを入れて調整しよう。

以下実行して「service iptables save」で保存すると/etc/sysconfig/iptablesにルール設定が保存され次回からの起動は何もしなくてもよい。

最下行付近のChain sshguard (1 references)

のエントリ以下がブロックを自動で行ってくれた実績だ。順調にブロックが効いている。次にsyslog-ngを編集してログを吐くようにしましょう

初回起動でエラーが出ますが気にしないでOK。afsql moduleを使用していないならば。

タグ: , ,