CentOS7のapache
CentOS7を実投入しようといろいろテスト中。
変更点が多すぎて管理者は大変・・・。
各種設定はsystemctl
ネットワークはnmcliとnmtui
ルーティン関係はipコマンド
で困ったことが起きた。
普通にApacheをyum 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関数を読んでいる。
これはImageMagickのAPI関数のようだ。
今度は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-develperl-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を探し回ってみたところ、OpenSuseにsrpmがあったので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
- umask 022
- cd /usr/src/redhat/BUILD
- LANG=C
- export LANG
- unset DISPLAY
- cd /usr/src/redhat/BUILD
- rm -rf libwebp
- 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から使うには使えない関数があってちょっと不便なのでアップデートしてみた。
まず一度ImageMagickをyumよりインストールしておく。(できるだけ関連ライブラリを入れておくため)
# 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