※sudoを一部入れ忘れたので、加筆しました(2017-10-15)
※apxsを実行してもLoadModuleが入らない場合があるため加筆いたします。
今回初めて記事を投下していきます伍希(いつき)と申します。
さて、過去の記事を参考にPostfixとかそのあたりを構築していく際にPostfixadminのところで躓いたのでメモ
見る方、ツッコミ所満載ですがお許しください。
#この記事を記載した理由
まぁ、適当です(大嘘)
調べたんですが、なんか記事が見つからないんですよね(笑)
#mod_auth_mysqlってなんぞや
Apacheに実装されているBASIC認証は.htpasswdファイルを使用して認証しているのですが、これだと大規模になったとき面倒なので、MySQLのデータベースに認証情報を保存する目的で用意されたApacheのプラグイン(mod)です。
(間違ってるかもしれないですが・・・)
#分かったところで材料です(某料理番組風)
- CentOS 7 (ちなみに私の時は7.4.1708です)
- ネットワーク接続(WAN)(まぁ・・・当たり前ですね)
あとは、順を追って説明していきます。
この下のことをやられる方
何が起こっても責任は負えません。要は自己責任です
#modを入れるまでの手順
##1. 必要なパッケージを入れていきます
あ、そうそうMySQLですが、CentOS7ではmariaDBになってますのでご注意を
$ sudo yum install httpd httpd-devel mariadb mariadb-libs mariadb-devel subversion mod_dav_svn mod_ssl patch wget
##2. mod_auth_mysqlとpatchをダウンロードします
一応、作業用フォルダを作ってその中にダウンロードします
$ mkdir ~/tmp && cd ~/tmp
$ wget https://downloads.sourceforge.net/project/modauthmysql/modauthmysql/3.0.0/mod_auth_mysql-3.0.0.tar.gz
$ wget https://sourceforge.net/p/modauthmysql/patches/_discuss/thread/efda3a06/c5a7/attachment/apache22.diff
##3. mod_auth_mysqlを作っていくよー
さて、ここまで来たら、次はmod_auth_mysqlを作っていきます。
まずは解凍します
$ tar zxf mod_auth_mysql-3.0.0.tar.gz
$ cd mod_auth_mysql-3.0.0
次に、パッチを当てていきます
$ patch -p0 < ../apache22.diff
さて、このままビルト・・・
ちょっと待った!!!
まだ、これで完了じゃないんです。
実は、このままだとエラーが出るのでまだ手直ししていかないとダメなんです。
てことで、コードを直します。
$ sed -i 's#return r->connection->remote_ip;#return r->connection->client_ip;#g' mod_auth_mysql.c
$ sed -i 's#ap_requires(r)#apr_table_elts(r->headers_in)#g' mod_auth_mysql.c
上記は、mod_auth_mysql.cの908行目と1273行目のコードを修正しています。
908行目はreturn r-> connection-> remote_ip;
からreturn r-> connection-> client_ip;
に変更
1273行目はconst apr_array_header_t *reqs_arr = ap_requires(r);
からconst apr_array_header_t *reqs_arr = apr_table_elts(r->headers_in);
へ変更しています。
さて、次はコンパイルしていきます
$ sodo apxs -c -L/usr/lib64/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
上記は64bit用ですので、もし32bitに方がいれば/usr/lib/mysql
に修正してください。
さて、warning出てますが無視で大丈夫...かな?
※今回は無視します。
##4.入れていきます。
さて以下のコマンドを実行します
$ sudo apxs -i mod_auth_mysql.la
これで完了となります
お疲れさまでした!!!!
もし、入ってるかわからない場合は
httpd -M | grep mysql
をするといいかもしれません。
##Ex.ちょっとまて。入ってないぞ!!!
お怒りのことと思いますが、私に怒らないでください...
モジュールがインストールされているかを確認したいときは、
$ httpd -M | grep mysql
mysql_auth_module (shared)
このようにすれは、上のように反応が返ってきます。
しかし、これがないときは編集をしないといけません。
$ nano /etc/httpd/conf.modules.d/00-base.conf
を実行して(nanoのところはviでもvimでもいいですよ)
LoadModule mysql_auth_module modules/mod_auth_mysql.so
を追記して保存して下さい。
あとは
$ service httpd reload
か
$ systemctl reload httpd
を実行してください