CentOS7のapache

CentOS7を実投入しようといろいろテスト中。

変更点が多すぎて管理者は大変・・・。

各種設定はsystemctl
ネットワークはnmcliとnmtui
ルーティン関係はipコマンド


で困ったことが起きた。

普通にApacheyum installして
#systemctl start httpd
をする。これは今まで
#service httpd start
とやっていたので同じこと。

で。おもむろに
#netstat -lt
とListenしているポートを確認。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN

??
httpがtcp6でしかListenしてない????

とりあえず原因はわからないが、無理矢理ipv4でListenさせる。

#vi /etc/httpd/conf/httpd.conf
Listen 80

Listen 0.0.0.0:80

これでとりあえず回避。
v4 v6の両方でListenできないのかな?

Smarty3のautoload問題

Smarty3に移行するに当たって、プログラム内のautoload関数が使えなくなった。

オートローダー

Smarty3はspl_autoload_registerで独自のオートローダーを登録します。もしあなたのコード中に__autoload関数が存在するのなら、 それを明示的に__autoloadスタックに登録しなければなりません。 詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.php を御覧下さい。

まず、本日現在、us3.php云々のサイトにつながらないw
phpのspl_autoload_registerの項目を見ろということなんでしょうけど。

で、次のように関数を書いて「spl_autoload_register」に登録してみた。

【config.php内】
function MyAutoload($class_name){
    $filename = $class_name.".class.php";
    include_once($filename);
}
spl_autoload_register('MyAutoload');

これでOKかとおもったらまだ動かない・・・。

試行錯誤した結果、【autoloadの優先順位】というのがあることがわかった。

プログラムではconfig.php内に独自関数を宣言しているのだが、
config.phpはプログラムの一番最初に呼ばれる場所のためautoloadの最先頭に登録される。
そのため、Smartyが使用するautoload関数までたどり着かずにinclude処理されてエラーになっていたようだ。

【解決策】
で解決策は、autoload関数の設定する前にSmarty本体をincludeする。

【config.php内】
require_once "Smarty.class.php";
function MyAutoload($class_name){
    $filename = $class_name.".class.php";
    include_once($filename);
}
spl_autoload_register('MyAutoload');

ImageMagickのバージョンナンバーの謎

php peclライブラリのimagickを使用していて疑問に思ったこと。
Imagick::getVersion関数を使うと配列が以下のような配列が返ってくる。

Array ( [versionNumber] => 1620 [versionString] => ImageMagick 6.5.4-7 2011-06-13 Q16 OpenMP http://www.imagemagick.org )

versionStringはわかるのだが、versionNumberって何の数字だ???

imagickのソースを読むと
MagickGetVersion()というC関数を読んでいる。
これはImageMagickAPI関数のようだ。

今度はImageMagickのソースを読む。

version.h
MagickExport const char *GetMagickVersion(size_t *version)
{
if (version != (size_t *) NULL)
*version=MagickLibVersion;
return(MagickVersion);
}

MagickLibVersionという定数を返しているようだ。

version.h
#define MagickLibVersionText "6.5.4"
#define MagickLibVersion 0x654

バージョン番号の16進数表現なのか。

PHPで実験

$im = new Imagick();
$number = $im->getVersion();
print_r( $number ); echo "
\n";
print base_convert($number['versionNumber'], 10, 16);

    • -

Array ( [versionNumber] => 1620 [versionString] => ImageMagick 6.5.4-7 2011-06-13 Q16 OpenMP http://www.imagemagick.org )
654

ってことで基数を16進に変換してやればバージョンチェックできそう。

RedHat EL6のSRPMからImageMagickを入れる

枯れててた方がいい気がしたので。
RedHatEL6のImageMagickをCentOS5用に用意してみる。

# wget http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/ImageMagick-6.5.4.7-5.el6.src.rpm
# rpm -ivh --nomd5 ImageMagick-6.5.4.7-5.el6.src.rpm
nomd5オプションをつけておかないとシグニチャーエラーがでる。
# yum install bzip2-devel freetype-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel zlib-devel perl-devel ghostscript-devel libwmf-devel jasper-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel libxml2-devel librsvg2-devel
# vi /usr/src/redhat/SPECS/ImageMagick.spec
BuildRequires: libtiff-devel, giflib-devel, zlib-devel, perl-devel

BuildRequires: libtiff-devel, giflib-devel, zlib-devel

perl-develはCentOS5ではいらないらしいの依存関係から削除

# yum install jasper-devel --enablerepo=rpmforge
rpmforge(EPEL)からjasper-develをいれる

その他いろいろ足りないライブラリをインストール
# yum install giflib-devel libwmf-devel libtool-ltdl-devel libxml2-devel librsvg2-devel
# yum install lzma
# rpmbuild --ba --define="dist .el5" ImageMagick.spec

ImageMagick-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-c++-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-c++-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-c++-devel-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-c++-devel-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-debuginfo-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-debuginfo-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-devel-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-devel-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-doc-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-perl-6.5.4.7-5.el5.i386.rpm 直
ImageMagick-doc-6.5.4.7-5.el5.x86_64.rpm 直
ImageMagick-perl-6.5.4.7-5.el5.x86_64.rpm 直

CentOS5.6に最新のImageMagickを入れる2

前回の日記でlibwebpをtarballからインストールして、
rpmの依存で蹴られたわけなんで、libwebpのrpmを探し回ってみたところ、OpenSusesrpmがあったのでCentOS上でコンパイルしなおしてみた。

# wget http://download.opensuse.org/repositories/devel:/libraries:/c_c++/openSUSE_11.3/src/libwebp-0.1.2-1.1.src.rpm
# rpmbuild --rebuild libwebp-0.1.2-1.1.src.rpm
warning: InstallSourcePackage: Header V3 DSA signature: NOKEY, key ID 09ca02b0
error: Failed build dependencies:
libpng-devel is needed by libwebp-0.1.2-1.1.i386

libpng-develを入れろとのこと

# yum install libpng-devel

# rpmbuild --rebuild libwebp-0.1.2-1.1.src.rpm
Installing libwebp-0.1.2-1.1.src.rpm
warning: InstallSourcePackage: Header V3 DSA signature: NOKEY, key ID 09ca02b0
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.75448

  1. umask 022
  2. cd /usr/src/redhat/BUILD
  3. LANG=C
  4. export LANG
  5. unset DISPLAY
  6. cd /usr/src/redhat/BUILD
  7. rm -rf libwebp
  8. tar -xf /usr/src/redhat/SOURCES/libwebp-0.1.2.tar.xz

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Read 4724 bytes from /usr/src/redhat/SOURCES/libwebp-0.1.2.tar.xz
tar: Error exit delayed from previous errors
error: Bad exit status from /var/tmp/rpm-tmp.75448 (%prep)

なんだよ。xz圧縮ファイルって・・・。
んなもんCentOSで対応してねーよ。

SPECファイルだけ拝借しよう。うん。

# vi /usr/src/redhat/SPECS/libwebp.spec
Source: %name-%version.tar.xz

Source: %name-%version.tar.gz
%prep setup -qn %name

%prep setup -qn %name-%version

オリジナルのtar.gzをコピー
# cp libwebp-0.1.2.tar.gz /usr/src/redhat/SOURCES
# cd /usr/src/redhat/SPECS
# rpmbuild -bb libwebp.spec
(...略...)
Wrote: /usr/src/redhat/RPMS/i386/libwebp-tools-0.1.2-1.1.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/libwebp0-0.1.2-1.1.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/libwebp-devel-0.1.2-1.1.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/libwebp-debuginfo-0.1.2-1.1.i386.rpm

なんかできた。
入れてみる。

# rpm -i /usr/src/redhat/RPMS/i38/libwebp0-0.1.2-1.1.i386.rpm

OK。今度こそオリジナルのImageMagickRPMを。

# rpm -i ImageMagick-6.7.0-6.i386.rpm

おお。入った!!

せっかくlibwebpのrpmを作ったのでアップしておきます。

libwebp0-0.1.2-1.1.el5.i386.rpm 直
libwebp-debuginfo-0.1.2-1.1.el5.i386.rpm 直
libwebp-devel-0.1.2-1.1.el5.i386.rpm 直
libwebp-tools-0.1.2-1.1.el5.i386.rpm 直
libwebp-0.1.2-1.el5.1.src.rpm 直

[Linux] CentOS5.6に最新のImageMagickを入れる

CentOSに入っているImageMagickがちょっと古くて、PHPのImagickから使うには使えない関数があってちょっと不便なのでアップデートしてみた。

まず一度ImageMagickyumよりインストールしておく。(できるだけ関連ライブラリを入れておくため)

# yum install ImageMagick ImageMagick-devel
そして削除
# yum remove ImageMagick

ImageMagick本家からRPMを取ってくる
http://www.imagemagick.org/download/linux/CentOS/

# wget http://www.imagemagick.org/download/linux/CentOS/i386/ImageMagick-6.7.0-6.i386.rpm
# wget http://www.imagemagick.org/download/linux/CentOS/i386/ImageMagick-devel-6.7.0-6.i386.rpm

インストールしてみる

# rpm -i ImageMagick-6.7.0-6.i386.rpm
エラー: 依存性の欠如:
libHalf.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libIex.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libIlmImf.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libImath.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libcdt.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libfftw3.so.3 は ImageMagick-6.7.0-6.i386 に必要とされています
libgraph.so.4 は ImageMagick-6.7.0-6.i386 に必要とされています
libgvc.so.5 は ImageMagick-6.7.0-6.i386 に必要とされています
libjasper.so.1 は ImageMagick-6.7.0-6.i386 に必要とされています
liblzma.so.0 は ImageMagick-6.7.0-6.i386 に必要とされています
libwebp.so.0 は ImageMagick-6.7.0-6.i386 に必要とされています

依存関係いっぱいでてきた。

依存関係のライブラリ探しの旅
rpmforgeからインストール。rpmforgeの使い方はぐぐってください。

graphviz
OpenEXR
fftw3
xz
jasper
# yum install graphviz OpenEXR fftw3 xz jasper --enablerepo=rpmforge

残りは"webp"。どうもgoogleの新画像ファイル形式らしい。
rpmがなさげなので、tar ballからインストール
http://code.google.com/intl/ja/speed/webp/

# wget http://webp.googlecode.com/files/libwebp-0.1.2.tar.gz
# tar xvfz libwebp-0.1.2.tar.gz
# cd libwebp-0.1.2
# ./autogen.sh
# ./configure
# make
# make install

あれ。。。うまくいかない・・・。
ldconfigのパスに/usr/local/libが入ってなかった。

# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib <--追加

# ldconfig -v|grep libwebp
libwebp.so.0 -> libwebp.so.0.0.0
# rpm -i ImageMagick-6.7.0-6.i386.rpm
error: Failed dependencies:
libwebp.so.0 is needed by ImageMagick-6.7.0-6.i386

うまくいかなないかなぁ・・・。
libwebpがrpmじゃないから、rpmの依存で蹴られるのか・・・。
ちょっと中断。

Centos5.6でPHP53を使った場合のPEAR

CentOS5.6でphp-pearをインストールするとErrorやWarningだらけになる。
PEARのバージョンが古いのが原因だ。
なので強制的にアップデート

# pear upgrade --force Archive_Tar
# pear upgrade --force Console_Getopt
# pear upgrade PEAR

昔からこれでアップデートはできてたんすけどね。