VirtualBox でLAMP

昨日のエラー Building The OpenGL support module [FAILED] は消えていましたが、今度はApache2 のhttpd.conf で、Cannot load /usr/local/apache2/modules/mod_ssl.so  into server: libssl.so.1.0.0 とエラーするので、OpenSSL をソースビルドでいれてみました。

LinuxにApacheとOpenSSLをソースからビルドしてインストールする – Qiita
http://qiita.com/DQNEO/items/3613cc1d87c01121a9e2

それでもエラーがなくならないので、yum から mod_ssl をインストールしたところ解決しました。OpenSSL とmod_ssl の違いが分かりませんが結果オーライということで。

[root@centos ~] yum install openssl-devel 
[root@centos httpd-2.2.31] cd modules/ssl
# /usr/local/apache2/bin/apxs -cia -DHAVE_OPENSSL -I/usr/include/openssl -lssl *.c

PHP は (2015年8月9日現在) 最新版、6.5.11 を./configure make make install して

./configure --with-apxs2=/usr/local/apache2/bin/apxs\
--with-iconv\
--enable-mbstring\
--with-mysql\
--with-libxml-dir=/usr/bin/xml2-config

phpinfo.php 表示できました。

phpinfo

Oracle VirtualBox でエラー

VirtualBox 上で CentOS6.6 を自動アップデート(更新が120あります・・・。とか)したら、起動時に [VirtualBox kernel service is not running. Exiting.]

73f0c469-c0ef-77d0-4004-9240e78ce9b9ていうポップアップが出るようになりました・・・orz。

今日も(更新が330 あります・・・。とか)アップデートが出てました。起動ログを見ると、VirtualBox Guest Additions failed ですと?

centos6.7アップデートを完了、再起動すると [CentOS 6.7] になってました。一応、以下のサイト見て

http://blog.livedoor.jp/yoka3/wordpress/4283395.html

# yum -y update kernel
#  yum -y install kernel-devel kernel-headers dkms gcc gcc-c++
して再起動。VirtualBox のメニューから [デバイス] → [GuestAdditions のCD イメージを挿入・・・(Host+D)] して
# cd /media/VBOXADDITIONS_4.3.26_98988
# sh VBoxLinuxAdditions.run

したらとりあえず、起動時ポップアップは出なくなりました。でも

Building The OpenGL support module [FAILED]

エラーが消えないです。誰か教えて、エロい人。

TeraTerm SSH鍵認証

Linux のコマンド操作に欠かせないTeraTerm ですが、root 権限を多用していたのでパスワードが漏れたのかもしれません。今回は、鍵認証によるログイン方法をご紹介します。

まず、TeraTerm でパスワードでログインして [設定] → [SSH 鍵生成…] → (鍵の種類)[RSA]にチェックして、[生成] ボタンを押します。

ssh_key

[鍵のパスフレーズ] を入力して、[公開鍵の保存] [秘密鍵の保存] ボタンをクリックして、フォルダに [id_rsa.pub] [id_rsa] ファイルを保存します。

TeraTerm で、/home/ユーザーディレクトリに移動して公開鍵 [id_rsa.pub] を画面にドラッグします。

save_key

[ファイル転送しますか] のテキストボックスに、[ .ssh] と入力して [SCP]ボタンをクリックします。公開鍵を、.ssh/authorized_keys ファイルにリネームするためコマンドで

$ cd .ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 . ←[ピリオドを忘れずに]

鍵が複数あるときには、mv ではなく

# cat id_rsa.pub >> authorized_keys

と入力します。TeraTerm を再起動して、先程入力した鍵のパスフレーズを入力して、[RSA鍵を使う]チェックを入れ フォルダに保存した[秘密鍵] id_rsa を指定して [OK] ボタンを押して

ssh_login

ログインします。ログインした後は、以下の設定でパスワード認証を無効にしましょう。

# vi /etc/ssh/sshd_config
# PasswordAuthentication yes ↓ 設定値を、no に変更
PasswordAuthentication no

(一部、加筆しました。)

apache2 が消えた

/usr/local/apache2 にApache2.2 をソースからインストールして、httpd.conf を編集中に突然、apache2 ディレクトリが消えました。yum からパッケージでインストールした OSインストール時に入っていた apache のhttpd.conf から書き写しをしていた折、ダウンロード、解凍した wordpress を当該ディレクトリに mv コマンドで移動しようとしていた矢先でした。こんなことってあるんですかね。たまげたなぁ~。誰かにハッキングされて消された、ハッキリ分かんだね。 仕方がないからソースからのインストール、(一日の) やり直しますよ、するするっ!

Apacheのソースは、 Download – The Apache HTTP Server Project http://httpd.apache.org/download.cgi#apache22 から最新版をダウンロード。2015年7月28日現在で、最新版はバージョンはapache2.2.31 (Apache 2.4 はインストールしたことある?)・・・ないです。ふ~ん。あっ(察し)。

ディレクトリ移動して httpd-2.2.x/を解凍したら

# cd /usr/local/src
# wget http://ftp.riken.jp/net/apache//httpd/httpd-2.2.31.tar.gz
# tar zxvf httpd-2.2.31.tar.gz
# cd httpd-2.2.31/

ディレクトリ移動して、以下の呪文を唱えます。 CentOSへApache2.xをソースビルドしてService登録する – Qiita

# ./configure --prefix=/usr/local/apache2 \
 --enable-suexec \
 --enable-cache \
 --enable-disk-cache \
 --enable-mem-cache \
 --enable-logio \
 --enable-header \
 --enable-ssl \
 --enable-rewrite \
 --enable-so \
 --enable-proxy \
 --enable-mods-shared=all

ちなみに私は、zlib がないっ!って怒られました。解決法は以下。仕事で使える魔法のLAMP(15):ライブラリが足りなくてビルドできないときは? – @IT

# yum install zlib zlib-devel

./configure をやり直して、続いて# root 権限で

# make
# make install

これで、/usr/local/apache2 にインストール完了です。このとき、設定ファイル httpd.conf は、パッケージインストール時の
/etc/httpd/conf/httpd.conf ・・・ではなく、/usr/local/apache2/conf/httpd.conf に作られます。ここから Apache HTTP Server の設定をしてゆくわけですが、諸先輩方の詳細な解説をリンクして割愛します。 コロのLinuxサーバー構築 – httpd.conf の設定 また起動コマンドも、パッケージとソースビルドでは異なっており、

# service httpd start (パッケージインストール)
# /usr/local/apache2/bin/apachectl start (ソースビルド)

となっております。 あと、覚えている限りですが PHP のインストールもメモしておきます。ソースからインストールする場合、以下のサイト(2015年7月28日現在、PHPバージョン 5.6.11)かミラーリンクをたどってWindows に保存または、リンクアドレスをコピーして、wget コマンドからダウンロード解凍します。 PHP: Downloads http://php.net/get/php-5.6.11.tar.gz/from/a/mirror

# cd /usr/local/src
# wget http://jp2.php.net/get/php-5.6.11.tar.gz
# tar zxvf php-5.6.11.tar.gz
# cd php-5.6.11/

php-5.x.x/ にディレクトリ移動して以下の呪文を唱えます。

# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

すると、apxs がないっ!って怒られました。解決法は以下リンク。 [apache] モジュール追加でapxsが見つからない時の解決方法 | 迷走男子!!

# yum install -y httpd-devel

./configure のやり直し。ところが今度は、libxml2 がないっ!と怒られました。以下のサイトを参考にコマンド入力。 dage.jp » Apache2.2+PHP5.2 完全インストール – part2 – PHPインストール

# yum install -y libxml2 libxml2-devel

./configure のやり直しをします。→ PHP: インストール手順 – Manual

# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-libxml-dir=/usr/bin/xml2-config

今度は成功です。

# make
# make install

(追記)PHP の設定を/usr/local/apache2/conf/httpd.conf で有効にするため下記設定を追加

LoadModule php5_module modules/libphp5.so [新規追加]
<IfModule mine_module>
・・・
AddType application/x-httpd-php .php [新規追加]
AddType application/x-httpd-php-source .phps [新規追加]
</IfModule mine_module>

https://www.stuffy.site/wordpress/index.php/2015/08/15/rebuild-php-on-virtualbox/

してhttpd.conf を編集、

・・・
<Directory "/usr/local/apache2/htdocs/wordpress">
     AllowOverride all
 </Directory>
・・・
 Alias /wordpress/ "/usr/local/apache2/htdocs/wordpress/"

WordPress をインストールして

http://ホストネームアドレス/wordpress/wp-admin/install.php

からセットアップ画面表示できました。

install.php

追記)http://ホストネームアドレス/ でアクセスさせたいときは、httpd.conf のDocumentRoot 設定を

・・・
DocumentRoot /usr/local/apache2/htdocs/wordpress

します。

総じて apache もPHPも、./configure make make install !! ./configure make make install !! て感じで・・・。

wordpress 画像のリンク切れ修正

FQDN を ieServer.net のDDNS に変更してから、グローバルネットワークで確認したところ、wordpress 画像がリンク切れにより表示できませんでした。sql データベースの画像URL がローカルIPアドレスになっていたのが原因でした。この不具合を修正する PHP スクリプトがネットを検索していたところ見つかりました。

WordPressでサーバ移行時にデータベース上のドメインを書き換える方法

WordPressを設置したドメインや設置ディレクトリが変更になった場合に、たった5分で全てのURLを書き換える方法

やり方は、ダウンロード、zip 解凍した searchreplacedb2.php を wordpress インストールディレクトリ直下に転送、またはアップロードします。

FQDN に、searchreplacedb2.php を付けたしてスクリプトにアクセス、実行します。

http://ホストネーム.dip.jp/wordpressインストールディレクトリ/searchreplacedb2.php

あとは、リプレイスしたいローカルIPアドレスとFQDN をフォームに入力してボタンを押すだけです。管理画面から過去ログの非表示の画像を 、ペンアイコンの [編集ボタン] から選択、 [更新] ボタンで再公開していくと画像再表示できました。

作業後は、searchreplacedb2.php の削除をお忘れずに。

wordpress のサイトURL

wordpress の[ダッシュボード] → [設定] → サイトアドレス(URL) をいじっていたら管理画面にアクセスできなくなった・・・orz。

siteurl

いろいろサイトを検索してみると、wp-config.php の先頭に

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

として、設定すると良いとのこと。しかし、コアファイルの場所と読者がアクセスするURL がどちらに設定されているのか解らず、管理画面に一時アクセスできなくなりました。結局 wordpress をインストールし直して直りましたが、投稿してみると今度は、

[WordPress]画像アップロードエラー「web-content/uploads/に移動できませんでした

となり画像アップロードができなくなりました・・・orz。こちらは以前にも対処したケースでしたが、その時の方法を失念しており、まあ、ゆっくり解決するつもりです。たぶん、パーミッションか、.htaccess 設定だと思うんですけど。(※これを書いている途中に、解決しました。原因は、パーミッションと.htaccess と所有権でした。)

HDD のバックアップ

Linux でのHDD バックアップは、皆様どうされているのでしょうか。ビジネスサーバーは、テープバックアップしてるとか。私は、Mondoresource などのISO バックアップソフトで圧縮レベルを上げてDVD に焼いてみましたが復元できず失敗してから、内蔵HDD をお立ち台に並べてクローンしています。こちらの方法は確実ですが、一旦HDD を取り外すのが手間ですね。でもやらないよりは良いので、定期的にしています。話は変わりますが、Windows10 の自動アップグレードが迫っていますね。トピックとしては新しくないですがWindows7 からのアップグレードではmpeg2 コーデックが付属していないとのこと。あと、Windows Update のコントロールパネルがなくなってHome エディションではアップデートの調整ができなくなるみたいですね。バックアップしなきゃ。(使命感)

Oracle VM VirtualBox をインストールしてみた(過去ログ再掲)

MBRクラッシュの前に、ワードでバックアップしていたログを見つけたので再掲です。


CentOS7 のお勉強もまあ、多少はね。Oracle VM VirtualBox ダウンロード ↓

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

VirtualBOX 最新版は、4.3.26 (2015年5月13日現在)のインストール画面。

virtualbox01

ネットワークアダプタに [VirtualBox Host-Only Network ] を加えますかと聞かれている。ここは [Yes] で。

virtualbox02

[Install] をクリック、インストールしますか、インストールしちゃいましょうよ。

virtualbox03

[VirtualBox] 起動画面で[新規]ボタンを押して、メモリサイズを入力、ここは1024MBと入力、[次へ] 。

virtualbox16

[仮想マシンの作成] [仮想ハードドライブを作成する] にチェックして [作成]

virtualbox17

テキストボックス[名前] 欄には、[centos] (何でも構いません) [タイプ] 欄には [Linux] [バーション] 欄には、[Red Hat (64 Bit) ] を入力選択する。

virtualbox04CentOS7-x86_64-*.iso は最小構成、Fullバージョンなどお好きなものをダウンロードして、どうぞ。

http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1503-01.iso

http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso

 

あらかじめWindows7などで焼いた、OSイメージ DVD をドライブに挿入して、左ペインの[ストレージ]タブをクリック、

virtualbox05

[コントローラ IDE] [空] をクリック、右の [CD/DVD] ドライブの [IDE セカンダリマスタ] 横のメディアアイコンをクリック、ドライブのOSイメージを選択します。

ア、ちょっと待てぃ!左ペインの [ネットワーク] タブをクリック、[アダプター2]タブをクリックして、[VirtualBox Host-Only Network] を選択、[OK] ボタンを押して 設定完了です。

virtualbox06

お待たせ。

virtualbox07

バッファオーバーフロー防御設定でハマった・・・orz。

Linux には、バッファオーバーフロー攻撃を防御するため、exec-shield 設定が設けられています。

  1. マークされたバイナリを有効にし、以外は無効
  2. マークされたバイナリを無効にし、以外は有効
  3. 常に有効

デフォルトの設定値を確認すると CentOS では、1になっています。

# cat /proc/sys/kernel/exec-shield
1

この設定値を、2 (有効) にするには、echo コマンドで

# echo 2 > /proc/sys/kernel/exec-shield

とします。

またこの設定を永続的にするには、

vi /etc/sysctl.conf
[最下行に以下を追記]
kernel.exec-shield = 2

・修正後

# sysctl -p

とします。しかしこの設定は、以下のリンクにもある通り kernel パニックになり最悪、システムが起動しなくなる恐れがあります。

http://ja.528p.com/linux/centos/B007-security_tips.html

実際、当方の環境で上記設定を施したところ、certmonger サービス起動不能となりフリーズしました。試みに、grub 画面からシングルユーザーモードで起動、

startx

コマンドを打つと、/bin/dbus-daemon: failed: Permission denied となりXウィンドウが起動しませんでした。grub の kernel オプションで、[ exec-shield=0 を与えると良い ] とあるのでその通りにやってみましたが、キーレイアウトが違うのか、オプションを読み込んでいない感じでした。

バックアップの HDD に換装してシステム復旧したのですが、どうしても諦められません。

もう一度、HDD を元に戻してシングルユーザーモードから、

vi /etc/sysctl.conf
[以下設定を削除]
kernel.exec-shield = 2
# sysctl -p
# chkconfig certmonger off
# reboot

と、叩いたところ無事起動しました。ついでに、SELinux のリラベルも行われて postfix も自動起動してくれるようになりました。めでたし、めでたし。

何故かPostfixでメール送信できない・・・orz。

たぶん、

  1. レジストラのSMTPサーバにパスワード蹴られてる。
  2. BindでDNS設定してないでしょ!って怒られてる。
  3. Postfix のパスワード暗号化ができてない。

だと思うんですけど。「Thunderbirds are go !」はダメみたいですね。

認証サーバーを起動する

# yum install cyrus-sasl-plain
# service saslauthd start
# chkconfig saslauthd on

認証を暗号化する

# yum install cyrus-sasl-md5
# vi /etc/sasl2/smtpd.conf
mech_list: plain login cram-md5 digest-md5 [追記]

SMTP認証用のユーザーとパスワードを設定する

# saslpasswd2 -c -u centos.forceofwill.jp gusachan
password:   [パスワード入力]
Again (for verification)    [確認用パスワード]

パスワードファイルのアクセス権を変更する

# chgrp postfix /etc/sasldb2
# service postfix reload

postfix check で main.cf の文法チェックは OK なんすよねぇ。

はぇ~デフォルトの main.cf からの変更を結果表示するコマンドもあるんですね。

# postconf -n

http://linux.kororo.jp/cont/server/postfix.php

inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
mail_owner = postfix
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = forceofwill.jp
myhostname = centos.forceofwill.jp
mynetworks = 192.168.24.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
relayhost = [smtp.secureserver.net]

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
disable_vrfy_command = yes
html_directory = no
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 10485760
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6
sample_directory = /etc/postfix

[以下追記]
smtp_sasl_mechanism_filter = plain
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
         permit_sasl_authenticated,
         permit_mynetworks,
         reject_unauth_destination
smtpd_sasl_local_domain = $myhostname
unknown_local_recipient_reject_code = 550

もう、ふて寝してやる。悲しいなぁ~。