2007-04-10
● [プログラミング] 2GBの壁
今更ながら、2年前に導入された職場内のAIXサーバ(32bit)が2GBを超えるファイルの取り扱いに対応していないということで、先週末あたりからバージョンアップを試行中。
Linuxと違ってサポート情報が限られている(というかやっぱりユーザ数が圧倒的に少ない??)ので結構面倒だけど、それでも最近はAIXでもrpmが使えるようになってきたのでまだマシか。
- Apache
- 2GB問題にはversion 2.2.0から対応。まぁこれは普通にconfigureしてmakeしたらそこそこすんなり動いた。
- PHP
- Apacheのバージョンアップに伴って、4系の最新版の version 4.4.6 をインストールしようとするも、make install のスクリプトがおかしい。make でバイナリ (libphp4.so) 自体は生成されるので、cp -p で手でインストール。rpm パッケージ化すると便利かなと一瞬血迷いそうになったけど、httpdなどのいわゆる依存パッケージがrpm管理されていないのにphpだけrpm化するわけにもいかず。
- ユーザ部署からproc_openがおかしいと言われて、見てみるとなんだかproc_openでNULL(相当のモノ)が返ってきている。さんざん悩んだけど、stderrをファイルに接続していて、ファイルのパーミッション不足だということが判明。PHP_FUNCTION(proc_open)のソースまで読んじゃったよ。
- Wget
- version 1.10 から対応。1.10.1 からファイルサイズの表示にlocaleconv関数を使っていて、どうやらlconv->groupingにNULLが返ってきているのにstrdupしようとして、しかもstrdupもNULLを返して…といったバグ(というか単にAIXに対応してないだけ?)があってver 1.10.2を使えない。これもパッチを書いて回避。
- 実はWgetってソフトウェアの名称としてはwgetじゃなくてWgetだって知ってました?
…なんてなことをして、夜の業後を費やしているわけです。 エラーメッセージも並記しておくと後で役に立つかなぁと思うので、またそのうちメモします。
Wgetのパッチはこんな感じ:
diff -rc src.original/ptimer.c src/ptimer.c
*** src.original/ptimer.c Wed Jul 6 15:26:18 2005
--- src/ptimer.c Tue Apr 10 11:41:05 2007
***************
*** 173,180 ****
{
/* If no clock was found, it means that clock_getres failed for
the realtime clock. */
! logprintf (LOG_NOTQUIET, _("Cannot get REALTIME clock frequency: %s\n"),
! strerror (errno));
/* Use CLOCK_REALTIME, but invent a plausible resolution. */
posix_clock_id = CLOCK_REALTIME;
posix_millisec_resolution = 1;
--- 173,180 ----
{
/* If no clock was found, it means that clock_getres failed for
the realtime clock. */
! /* logprintf (LOG_NOTQUIET, _("Cannot get REALTIME clock frequency: %s\n"),
! strerror (errno)); */
/* Use CLOCK_REALTIME, but invent a plausible resolution. */
posix_clock_id = CLOCK_REALTIME;
posix_millisec_resolution = 1;
Only in src.original: topas.error
diff -rc src.original/utils.c src/utils.c
*** src.original/utils.c Mon Jun 27 14:12:20 2005
--- src/utils.c Tue Apr 10 11:41:05 2007
***************
*** 1206,1212 ****
setlocale (LC_NUMERIC, "");
lconv = localeconv ();
cached_sep = xstrdup (lconv->thousands_sep);
! cached_grouping = xstrdup (lconv->grouping);
/* Restore the locale to previous setting. */
setlocale (LC_NUMERIC, oldlocale);
if (!*cached_sep)
--- 1206,1215 ----
setlocale (LC_NUMERIC, "");
lconv = localeconv ();
cached_sep = xstrdup (lconv->thousands_sep);
! if (lconv->grouping)
! cached_grouping = xstrdup (lconv->grouping);
! else
! cached_grouping = "\x03";
/* Restore the locale to previous setting. */
setlocale (LC_NUMERIC, oldlocale);
if (!*cached_sep)
[ツッコミを入れる]
[]
本日のPingbacks(全0件)