CentOS

CentOS が UNEXPECTED INCONSISTENCY で起動しない

Postgresにdumpをリストアしていたら途中でリストアに失敗して、CentOS再起動したらUNEXPECTED INCONSISTENCY;で起動しなくなりました。

/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options )
                                                           [FAILED]

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

centos59_64_default_1390292917__Running_

rootでログインして、fsckを実行しろと表示されるので実行。

# fsck  -t  ext3  /dev/VolGroup00/LogVol00

centos59_64_default_1390292917__Running_2

修復はすぐ終わり、起動時にエラーは出なくなりました。

vagrant up でエラーが出るときに確認すること

デバッグログを出力して起動する

$ env VAGRANT_LOG=debug vagrant up

VirtualBoxのコンソールを出力して起動する

$ vi Vagrantfile

config.vm.provider :virtualbox do |vb|
  # Don't boot with headless mode
  vb.gui = true
...
end

今回起動しなかった原因

Vagrantfileのsynced_folderのパーミッションを変えて再起動したら、下記のエラーがでて起動しなくなった。

    Timed out while waiting for the machine to boot. This means that
    Vagrant was unable to communicate with the guest machine within
    the configured ("config.vm.boot_timeout" value) time period. This can
    mean a number of things.

    If you're using a custom box, make sure that networking is properly
    working and you're able to connect to the machine. It is a common
    problem that networking isn't setup properly in these boxes.
    Verify that authentication configurations are also setup properly,
    as well.

    If the box appears to be booting properly, you may want to increase
    the timeout ("config.vm.boot_timeout") value.

timeoutの設定変更したりしたが、起動せず。
GUIモードで、VirtualBoxのコンソール出力して起動したら、起動時にエラーが出ている。

/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options )
[FAILED]
*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

fsckコマンドで修復する必要があるので、コマンドを調べて実行したら無事vagrantからも起動出来ました。

fsck -t ext3 /dev/VolGroup00/LogVol00

Vagrantのsaharaプラグインを使ってみる

Vagrantにはsaharaという、VMの状態をロールバックしたりできるプラグインがあります。
下記に、詳しく書いてあります。

saharaでVagrantの状態管理 – Qiita [キータ].

使ってみる

インストールは、vagrantコマンドでインストールしました。

$ vagrant plugin install sahara
$ vagrant plugin list

確認

$ vagrant plugin list
sahara (0.0.15)

saharaプラグインをインストールするとVirtualBoxに別のイメージが作られて、そこを使って状態を管理するようです。

Oracle_VM_VirtualBox_マネージャー-3-4

Vagrantで構築したCentOSで開発する メール送信テスト環境設定

メール送信のテストする為の環境構築した際にてこずったので、同じミスをしないようにブログに投稿します。

Vagrantについては、昨日書いたエントリーの通りとなります。

suusuke – blog – Vagrantで構築したCentOSで開発する.

目次

  1. Postfixインストール・設定
  2. Dovecotインストール・設定
  3. Hostから送受信テスト

Postfixインストール・設定

Postfixをインストールして、設定ファイルを変更します。
開発環境なので、メールが送れているかチェックしたいだけなので、全てのドメイン宛のメールをローカルの配送する用に設定します。

$ yum -y install postfix
$ cp /etc/postfix/{main.cf,main.cf.org}
$ vi /etc/postfix/main.cf

# 全てのメールを受け取る
inet_interfaces = all

# ローカル配送で不明なユーザを拒否しない
local_recipient_maps =

# Maildir形式として保存するディレクトリを /usr/local/mail/ の下にユーザー毎に作成する
mail_spool_directory = /usr/local/mail/

# ローカル配送で不明なユーザへのメールは maildev へ送る
luser_relay = maildev

# トランスポートマップを指定
transport_maps = hash:/etc/postfix/transport

トランスポートマップの設定

$ vi /etc/postfix/transport

# 全てローカルに配送
*       local:
$ postmap /etc/postfix/transport

設定反映

$ /sbin/service postfix reload

Maildirの場所ですが、通常であれば、~/Maildir/となるのですが、/home/ディレクトリをホストにマウントしており、何度メールを送ってもnot permittedになってしまい、配送に失敗していたため、変更しました。
ただ、Vagrantfileでマウントの設定でユーザーは root パーミッションは 777 にしているつもりなのですが、ここは今後の課題ですね。

Nov 30 19:50:20 localhost postfix/local[5922]: 7D5656F026C: to=<maildev@mail.vagrant-centos59_64.localdomain>, relay=loc
al, delay=0.17, delays=0.14/0/0/0.03, dsn=5.2.0, status=bounced (maildir delivery failed: create maildir file /home/mail
dev/Maildir/new/1385808620.V15I7c25M679327.vagrant-centos59_64: Operation not permitted)

配送先ユーザーmaildevは予め追加しておきます。

$ useradd maildev
$ passwd maildev

元々、sendmailもpostfix入っていないサーバーだったので、mtaの変更は必要ないですが、一応確認だけします。

$ /usr/sbin/alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Dovecotインストール・設定

Dovecotをインストールし、設定します。
各プロトコルを使えるようにと、PostfixでMaildirのパスを変更しているのでそこを設定します。

$ yum -y install dovecot
$ cp /etc/{dovecot.conf,dovecot.conf.org}

protocols = imap imaps pop3 pop3s
mail_location = maildir:/usr/local/mail/%u

Dovecotは、本番環境に合わせて、1系をyumでそのままインストールしました。

Hostから受信テスト

telnetコマンドでメールを送ります。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vagrant-centos59_64.localdomain ESMTP Postfix
helo localhost
250 mail.vagrant-centos59_64.localdomain
mail from: k.suke.suzuki@gmail.com
250 2.1.0 Ok
rcpt to: test@test.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: test
てすとです。
.
250 2.0.0 Ok: queued as 6E27E6F026E
quit
221 2.0.0 Bye
Connection closed by foreign host.

HostにThunderbirdをインストール、アカウントを設定して受信確認できればOKです。
受信トレイ

参考サイト

全てのドメイン宛のメールを受信する – ngの日記.

追記1

Mailcatcher for Drupal and other PHP-applications – The simple version.

vagrant mail で検索してたら、MailCatcherという、ruby製のSMTPサーバーが有ることを知りました。
これを使うと、メールを送信した内容がWEBブラウザで簡単に確認できるようになるようです。
PHPの場合は、php.inisendmail_pathを変更するだけで使えるようになるようです。
※未検証

追記2

試してないけど、synced_folderの書き込めない件は、Vagrantfileの設定のグループを変更するれば出来そう。もしくは、dmode(ディレクトリのパーミッション?)は777になってましたが、fmode(ファイルのパーミッション?)が666なのでそこを変えても出来そうです。
※未検証

Vagrantで構築したCentOSで開発する

Vagrantで開発を始めて、ある程度知識も溜まってきたので備忘録代わりにブログに書きたいと思います。

環境

HOST Max OS X Lion
GEST CentOS 5.9(64bit)
Vagrant 1.3.5
Virtual Box 4.3.0

目次

  1. VirtualBox のインストール
  2. Vagrant1.3 のインストール
  3. box ファイルのインストール
  4. Vagrantfile の作成
  5. 仮想サーバを構築

Virtual Box のインストール

Downloads – Oracle VM VirtualBox.

上記からダウンロード、インストール。インストール時最新は、4.3.0。

Vagrant1.3 のインストール

Vagrant – Downloads.

上記からダウンロード、インストール。Rubyのgemコマンドでもインストールできるようです。インストール時最新は、1.3.5。

box ファイルのインストール

A list of base boxes for Vagrant – Vagrantbox.es.

イメージファイルを一から作るのは大変ですので、上記、Vagrantbox.esサイトからboxファイルを探して、インストールする方法が一番手軽です。ただ、他人が作ったイメージファイルなので、セキュリティがどうとかっていう事を聞いたことが有るので、そこは自己責任ですね。
会社のサーバーが古いのでそれに合わせて、イメージファイルを探して、インストールしました。

$ vagrant box add centos59_64 http://tag1consulting.com/files/centos-5.9-x86-64-minimal.box

Vagrantfile の作成

Vagrantfileはvagrantの設定ファイルになります。
$HOMEの下にvagrantというディレクトリと今回のサーバー用のディレクトリ(centos59_64)を作成して、その下で管理しています。

$ mkdir ~/vagrant
$ cd ~/vagrant
$ mkdir centos59_64
$ cd centos59_64

Vagrantfilevagrant initコマンドで作成し、変更していきます。

$ vagrant init
$ vi Vagrantfile

ちなみに、変更後のVagrantfileは以下の通りです。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "centos59_64"
  config.vm.network :private_network, ip: "192.168.33.10"

  config.vm.synced_folder "/Users/suusuke/vagrant/centos59_64/home/", "/home/", \
        create: true, owner: 'root', group: 'root', \
        mount_options: ['dmode=777,fmode=666']

   config.vm.provider :virtualbox do |vb|
     #vb.gui = true
  
     # Use VBoxManage to customize the VM. For example to change memory:
     vb.customize ["modifyvm", :id, "--memory", "1024"]
   end
end

Vagrantのプロ?は、ここでchefやshellを使って、プロビジョニングしていくようですが、まだそこまで出来ないので、最低限の設定を書いています。
一つだけポイントとして、vagrantにはsynced_folderという機能があり、仮想サーバーのディレクトリを、ホストにマウントすることができます。今回は、Vagrantfileのあるディレクトリに、homeディレクトリをマウントさせています。これは、WEBサイトを作成する際に、ApacheのVirtualHostで各ユーザーディレクトリの下を公開ディレクトリにして開発する為です。

仮想サーバーを構築

vagrant upコマンドで、仮想サーバーを立ち上げます。

$ vagrant up

あとは、sshでサーバーにログインして、環境を作成していきます。

$ root@192.168.33.10

Apache、PHP、MySQL、PostgreSQL、Postfix、Dovecot 等をインストールして、それぞれ設定しホストPCでホストの設定をすればWEBの開発環境の完成です。

$ vi /etc/hosts
192.168.33.10  vagrant.localhost
192.168.33.10  test.example.com
....

実際にプログラムは、synced_folderのお陰で、ホストPCで変更したものが即座に反映されます。
僕は、Eclipseを普段使っているので、workspaceを~/vagrang/centos59_64/homeにして、開発をしています。

あと、WEBプログラムでメールのテストの為に、PostfixとDevcotで設定したのですが、逆にsynced_folderの機能のせいで、半日くらいうまく行かなくて時間を使ってしまったので、そちらは後ほど書き留めたいと思います。

参考サイト

Vagrant で自分の PC に「作って、壊して、元に戻せる」サーバを作る – Shin x blog.

portを開いているプロセスを特定する

portを開いているプロセスは、
lsof -i:[port]コマンドで確認できます。

VPSを使っていると急にサービスが停止してしまう事があり、そういう場合httpdのプロセスが残ってしまい再起動しても

(98)Address already in use: make_sock: could not bind to address [::]:80

の様に既に80ポートが使われている為、起動できないというケースが有るので、

lsof -i:80
kill [PID]

の様にプロセスIDをkillすれば起動できるようになります。

/usr/sbin/lsof -i | grep http

のようにして、httpのプロセスIDを表示する方法も有るようです。

Serversman@vpsにてSSLを設定する方法

このブログはServersman@vpsのCentOS上で動いています。
ブログの他にもいくつかサイトが有って、SSLの必要が出てきたので設定した方法を書きます。
また、証明書は独自の証明書(オレオレ証明書)を使います。

目次

  • mod_sslインストール
  • Makefileで証明書(.crt)ファイルの作成
  • Apache(mod_ssl)の設定

mod_sslインストール

[root@suusuke ~]# yum -y install mod_ssl

Makefileで証明書(.crt)ファイルの作成

[root@suusuke ~]# cd /etc/pki/tls/certs/
[root@suusuke certs]# make server.crt
umask 77 ; \
	/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
.....++++++
.................................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
	/usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Miyagi
Locality Name (eg, city) [Newbury]:Sendai
Organization Name (eg, company) [My Company Ltd]:suusuke
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Keisuke Suzuki
Email Address []:k.suke.suzuki@gmail.com

Apache(mod_ssl)の設定

バーチャルホストにて、複数サイトを運用しているので、バーチャルホスト毎に、httpd-vhosts-[サイト名]-ssl.confという設定ファイルにして個別に設定する。
まずは、ssl.confの<VirtualHost _default_:443\></VirtualHost>をコピーしてコメントアウトする。

[root@suusuke certs]# vi /etc/httpd/conf.d/ssl.conf 

#<VirtualHost _default_:443>
...
この間の設定を全部コピーしてコメントアウト
...
#</VirtualHost>

すでに、httpd-vhosts-[サイト名].confという名前でバーチャルホストを設定しているので、その設定ファイルをコピーしてhttpd-vhosts-[サイト名]-ssl.confという名前の設定ファイルを作成する。
また、ssl.confでコピーしたものを追記する。

[root@suusuke ~]# cp /etc/httpd/conf.d/httpd-vhosts.conf /etc/httpd/conf.d/httpd-vhosts-ssl.conf
[root@suusuke ~]# vi /etc/httpd/conf.d/httpd-vhosts-ssl.conf 

<VirtualHost *:443> ←ポート変更
    ServerName suusuke.info
    DocumentRoot /var/www/html
    ErrorLog logs/suusuke.info-error_log
    CustomLog logs/suusuke.info-access_log combined env=!no_log
    <Directory "/var/www/html">
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    #ここから-----------------------------------------------------------------------
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/pki/tls/certs/server.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/server.key
    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    #ここまで-----------------------------------------------------------------------
</VirtualHost>

Apache再起動

[root@suusuke ~]# /etc/rc.d/init.d/httpd restart

https://suusuke.infoにアクセスしてsslでアクセスできることを確認してオーケー!

大量の.htpasswdを作成する方法

BASIC認証する際に.htacessで設定して、パスワードファイル(任意の名前).htpasswdを作成します。

大量のユーザーとパスワードを設定する場合はいちいちhtpasswdコマンドでユーザーを追加するのは大変です。

そんな時にはHtpsserというソフトを使うと簡単に大量のユーザーの.htpasswdファイルを作成できます。

Htpasserの詳細情報 : Vector ソフトを探す!.

使い方は非常に簡単で、ユーザー名とパスワードをタブ区切りのテキストで用意しておきそれをインポートすると.htpasswdファイルが出来上がります。

また、HtpasserはWindowsのソフトなのでMacやLinuxで生成する場合はこちらのshellを実行すると生成できるようです。
(userlistというファイルに[user]:[pass]というフォーマットでファイルを用意しておく)

#!/bin/bash

for fullname in `cat ./userlist` ; do
user=`expr $fullname : '\(.*:\)'`
user=`echo $user | sed 's/://'`
pass=`expr $fullname : '.*:\(.*\)'`

expect -c "
spawn htpasswd -d ./passwd-file $user
expect \"New password: \" ; send \""$pass"\r\"
sleep 1
expect \"Re-type new password: \" ; send \""$pass"\r\"
expect eof
" >> /var/log/adduser/passwd.log
done

VMWare Server の開発環境作り直し

インストールしたもののメモです。

OSインストール

Index of /Linux/centos/5/isos/i386. CentOS5.7を今回は使用しました。
ISOファイルをダウンロードして、最小構成でインストール。

VMWare Toolsインストール

VMWare上のCentOSは時間がずれるのでVMWare Toolsをインストール。
VMWare Serverの管理画面から[Install VMware Tools…]を選択します。
選択すると、CDドライブにインストール用のファイルがセットされます。

[root@localhost ~]# mount /dev/cdrom /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost ~]# /etc/yum.conf
gpgcheck=0 ← 0に変更

[root@localhost ~]# cp VMwareTools-7.7.6-203138.i386.rpm /tmp/
[root@localhost ~]# cd /tmp/
[root@localhost ~]# yum localinstall VMwareTools-7.7.6-203138.i386.rpm
[root@localhost ~]# /etc/yum.conf
gpgcheck=1 ← 元に戻す

一旦、サーバを停止しvmxファイルを変更します。

tools.syncTime = "TRUE" ← TRUEに変更

サーバを再度起動し、grubの設定を変更します。
このパラメータの追加(divider=10)はCentOS5.7では合った方が精度が良いよ?とナレッジに記載あったので追加しました。
VMware KB: Timekeeping best practices for Linux guests.

[root@localhost ~]# vi /boot/grub/grub.conf
kernel /vmlinuz-2.6.18-274.el5 ro root=/dev/VolGroup00/LogVol00 divider=10

ntpdインストール

[root@localhost ~]# yum install ntp
[root@localhost ~]# vi /etc/ntp.conf 
tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 0.vmware.pool.ntp.org
server 1.vmware.pool.ntp.org
server 2.vmware.pool.ntp.org
driftfile /var/lib/ntp/drift

[root@localhost ~]# vi /etc/ntp/step-tickers 
0.vmware.pool.ntp.org
1.vmware.pool.ntp.org

[root@localhost ~]# service ntpd start
[root@localhost ~]# chkconfig ntpd on

インストールと設定

まずはifconfigでipを確認して、puttyまたはpoderosaで接続する。

viコマンドでvimを使うようにする

何かとvimの方が便利なので、aliasで設定

[root@localhost ~]# vi /etc/bashrc 

alias vi='vim' ← 追加

[root@localhost ~]# source /etc/bashrc 

不要なサービス停止

yum自動アップデート停止

[root@localhost ~]# /etc/rc.d/init.d/yum-updatesd stop
yum-updates を停止中:                                      [  OK  ]
[root@localhost ~]# yum remove yum-updatesd

SELinuxを無効化

[root@localhost ~]# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

iptables停止・自動起動無効

[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off

RPMリポジトリを追加

[root@localhost ~]# rpm -import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
[root@localhost ~]# vi /etc/yum.repos.d/utterramblings.repo

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

enabled=0にしているので、通常のyumコマンドではこのリポジトリは使われない。

使う場合は

[root@localhost ~]# yum --enablerepo=utterramblings install パッケージ
[root@localhost ~]# yum --enablerepo=utterramblings update パッケージ

とする。

再起動

[root@localhost ~]# reboot

Apache,PHP,MySQLインストール

[root@localhost ~]# yum --enablerepo=utterramblings install httpd httpd-devel php php-mbstring php-devel php-mcrypt php-pear php-mysql php-gd mysql-server

Apache,MySQLの起動と自動起動設定

[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# service httpd start
[root@localhost ~]# service mysqld start

MySQLのユーザ設定

rootのパスワードを設定して、パスワードがブランクのユーザを削除

[root@localhost ~]# mysql -u root
mysql> set password for root@localhost=password('password');
mysql> exit

[root@localhost ~]# mysql -u root -p
mysql> DELETE FROM mysql.user WHERE Password = '';
mysql> exit

Apacheの設定

sampleユーザ追加

[root@localhost ~]# adduser sample
[root@localhost ~]# su - sample
[root@localhost ~]# chmod 755 /home/sample/

[sample@localhost ~]$ mkdir ~/public_html

[sample@localhost ~]$ vi ~/public_html/phpinfo.php ← 確認用
<?php
phpinfo();


&#91;sample@localhost ~&#93;$ exit
&#91;/bash&#93;

<h4>バーチャルホスト設定</h4>

[root@localhost ~]# vi /etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80# sample<VirtualHost *:80>
        DocumentRoot /home/sample/public_html
        ServerName test.sample.com
        <Directory "/home/sample/public_html">
                Options Indexes FollowSymLinks MultiViews Includes ExecCGI
                AddType text/html .shtml
                AddHandler server-parsed .shtml
                AddHandler cgi-script .cgi .pl
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

確認

[root@localhost ~]# httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server test.sample.com (/etc/httpd/conf.d/vhosts.conf:5)
         port 80 namevhost test.sample.com (/etc/httpd/conf.d/vhosts.conf:5)
Syntax OK

Windowsのhostsファイル変更

C:\Windows\System32\drivers\etc\hosts

192.168.1.3       test.sample.com

http://test.sample.com/phpinfo.phpにアクセスして確認.

ここまでで一通り開発環境が出来ました。
ソースのアップはrsync等で同期すると簡単にできると思います。

Windowsからrsyncを利用する方法も書きました。
suusuke – blog – Windows で rsync を使用する.

追加

ここからは有ると便利な設定等を追記していきます。

PHP Xdebugインストール

gcc,gcc-c++インストール

[root@localhost ~]# yum -y install gcc gcc-c++

Xdebugインストール

既にphp-devel,php-pearはインストールしてある状態なのでpeclコマンドでインストール。

[root@localhost ~]# pecl install xdebug

....


Build process completed successfully
Installing '/usr/lib/php/modules/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.1.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=xdebug.so" to php.ini

/usr/lib/php/modules/xdebug.soにxdebug.soがインストールされました。

php.iniに追記

/etc/php.ini

zend_extension="/usr/lib/php/modules/xdebug.so"