Interix3 - 手を加えずに使えるものたち

Interix でコンパイルできるもの

ほとんど手を加えなくても Interix で使えるものをリストアップしてみました(まだ全然揃ってませんが)。

コンパイル済のバイナリパッケージは,interix.com に いくと 大量に置かれていたりしますが, 最新版にキープされているわけでもなさそうだし,コンパイル手順をまとめておくのは意義がありそうなので。

ソースのどういった箇所を修正する必要があるかは interix.com の各パッケージディレクトリにある README に 書かれているので,それを参考にすればいけそうです。


GNU もの

wget

SFU3.5β/wget 1.9.1 で確認。

./configure --prefix=/usr --sysconfdir=/etc; make; make install するだけで正常動作。

i586-pc-interix3 として host が自動認識される。Windows xp + ipv6 install 環境でも IPv6 は on になっていない。

OpenSSL 存在下では(インストールの prefix にもよるが)自動的に認識される

m4

SFU3.5β/m4 1.4 で確認。autoconf が要求する。

CFLAGS=-D_ALL_SOURCE で ./configure --prefix=/usr; make; make install で完了。正常動作かは不明。

make

SFU 3.5β/make 3.80 で確認。

CFLAGS=-D_ALL_SOURCE で ./configure --prefix=/usr; make でコンパイル通過。

make check も通過するが,通過後に uptime を起動しようとして失敗する。

make install すると,実行中の make が text file busy といって失敗するので手動でコピーする。

autoconf

SFU 3.5β/autoconf 2.57 で確認。

CFLAGS=-D_ALL_SOURCE で ./configure --prefix=/usr; make でコンパイル通過。

make check も(ほぼ)通過 。make install も通過。

autoconf 2.58 では configure が動作しない(bash を入れると動くのだろうか?)。

> sh configure
configure[3039]: no closing back quote

autoconf 2.59 では configure は通過するが,make に失敗する。

automake

automake 1.7.9 は autoconf 2.57 存在下において,CFLAGS=-D_ALL_SOURCE で ./configure --prefix=/usr; make; make install でインストールまで通過。

automake 1.8 は autoconf 2.58 or better を要求するので configure を通過しない。

pkg-config

SFU3.5β/pkg-config 0.15.0 で確認。

autoconf 2.57 存在下で CFLAGS=-D_ALL_SOURCE ./configure --prefix=/usr --host=i586-pc-interix3 すると configure 通過

interopsystems.com によると

a change in the sub-packaged glib 1.X.Y in gmain.c to use .

だそうで,実際,手元の環境でも sub-packaged な glib 1.2.8 でコンパイルエラーが出た(gmain.c だけではなかった)。

glib-1.2.8/gerror.c:select まわりでエラーが出るので,スタックトレースの出力機能を殺す。

  195: #ifndef NATIVE_WIN32
  195: #if 0

glib-1.2.8/gmain.c:poll を使うように修正する。

   47: #ifdef GLIB_HAVE_SYS_POLL_H
   48: #  include <sys/poll.h>
   47: #define GLIB_HAVE_SYS_POLL_H
   48: #ifdef GLIB_HAVE_SYS_POLL_H
   49: #  include <poll.h>

warning がたくさん出るが,make check は通過するようだ

make install も無事に成功。

libiconv

デフォルトの Interix にも iconv は入っているのだが ―――

> /bin/iconv -l
ASCII
EUC-JP
eucJP
SJIS
windows-932
Unicode

なので,iso-8859-* や C が使えない。

iconv がデフォルトで存在するので libiconv を別途入れるのはリスクがありそうだが(libiconv は日本語に関しては だめだめのはずなので),仕方なくインストール。

SFU3.5β/libiconv 1.9.1 で確認。

既存の /usr/include/iconv.h は /usr/include/iconv.h.org にでも rename しておく。/bin/iconv も /bin/iconv.org などにしておく。

CFLAGS=-D_ALL_SOURCE で ./configure --prefix=/usr 通過 。make 通過。make check 通過 。make install 通過。

--prefix=/usr でデフォルト iconv の代わりにシステムデフォルトとしてインストールしてしまう。

sed

SFU3.5β/sed 4.0.8 で確認。

./configure --prefix=/usr 通過。make 通過。

make check も通過したと主張している のだが,core dumped が1つあるのは合っているのだろうか……。

make install 通過。

gawk

SFU3.5β/gawk 3.1.3 で確認。

./configure --prefix=/usr --bindir=/bin 通過 。make 通過。make check 通過 。make install 通過。

ここでは --bindir=/bin を指定して /bin/awk(gawk でない)を置換をしているが,/usr/contrib/bin/gawk に gawk 2.15 がデフォルトで入っている。

readline

SFU 3.5β/readline 4.3(+ readline-4.3-patches)で確認。

./configure --prefix=/usr --libdir=/lib 通過。make 通過。make install 通過。

bash

SFU 3.5β/bash 2.05b で確認。readline 4.3 を使用。

CFLAGS='-D_ALL_SOURCE -DUSE_POSIX_GLOB_LIBRARY' で,./configure --prefix=/usr --bindir=/bin 通過 。-DUSE_POSIX_GLOB_LIBRARY がないと,ワイルドカード展開が不可能になる。

make 通過。make test の結果

make install 通過。これで /bin/bash をインストール完了。/bin/sh はデフォルト(ksh)のまま。

interopsystems.com によると他にも修正すべき箇所があると記述されているので,interopsystems の修正版ソースを使った方が安全確実かもしれない。

tar

SFU 3.5β/tar 1.13 で確認。

interopsystems.com にあるように,config.guess を新しいもので上書き(インストール済 automake 1.7 の config.guess を使用した)したのち,./configure --prefix=/usr --bindir=/bin 通過。

interopsystems.com にも書いてあるが,makedev でエラーが発生するので,mkdev にするマクロを入れてエラーを回避する。

src/list.c:

(line 32付近に追加)
#ifdef __INTERIX
#define	makedev(x, y)	mkdev((x), (y))
#endif

これで make 通過。make check 通過 。make install 通過。

gettext

SFU 3.5β/gettext 0.13.1 で確認。iconv 1.9.1 を使用。

gettext がインストール済の場合は古いヘッダファイル・ライブラリファイルを削除した上で,CFLAGS='-D_ALL_SOURCE' CXXFLAGS='-D_ALL_SOURCE' にして,./configure --prefix=usr --with-iconv=/usr --without-libintl 通過

make 通過。

make check は一部通過しない 。msgconv については問題がある気がする。sh が ksh なのと Python がインストールされていないのが原因ぽいので,その他は無視して構わないように見える(sed が GNU sed でないと FAIL はさらに増える)。

glib

SFU3.5β/glib 2.2.3 で確認。pkg-config 0.15.0 を使用。

CFLAGS='-D_ALL_SOURCE -I/usr/local/include -liconv' CXXFLAGS='-D_ALL_SOURCE -I/usr/local/include -liconv' LDFLAGS='-liconv' で ./configure --prefix=/usr 通過

glib/gmain.c:pkg-config 時と同様の修正を行う。

   45: #ifdef GLIB_HAVE_SYS_POLL_H
   46: #  include <sys/poll.h>
   45: #define GLIB_HAVE_SYS_POLL_H
   46: #ifdef GLIB_HAVE_SYS_POLL_H
   47: #  include <poll.h>

GNU libiconv を使わせるために config.h を修正。

  348: /* Using GNU libiconv */
  349: /* #undef USE_LIBICONV_GNU */
  348: /* Using GNU libiconv */
  349: /* #undef USE_LIBICONV_GNU */
  350: #define USE_LIBICONV_GNU

make 通過。

make check は通過しない。make install は完了する。

GNU でないもの

bzip2

SFU3.5β/bzip2 1.0.2 で確認。

make; make install するだけで正常動作。

zlib

SFU3.5β/zlib 1.2.1 で確認。

./configure --prefix=/usr --shared でコンパイル・インストール通過。

nkf

SFU3.5β/ 2.04 で確認。

Makefile を一部書き換えて make するだけ。

CC = cc
CFLAGS = -O
CC = gcc
CFLAGS = -O3 -fomit-frame-pointer -mcpu=pentium4

make test 通過 。make install はないので手動で /usr/bin に cp する。

GNU でない大物

ruby

SFU3.5β/ruby 1.8.1 で確認。

./configure --prefix=/usr --with-static-linked-ext 通過

make 通過make test 通過 。make install 通過。

--enable-pthread や --enable-shared をつけるとコンパイルに失敗するようなので,色気を出さずにこのへんで抑えておくのが良いかと。--with-static-linked-ext をつけないと,部分的に dynamic link library を作成するため Interix3 の制約にひっかかり(?),正常にコンパイルできない。

$ ruby --version
ruby 1.8.1 (2003-12-25) [i586-interix3]

OpenSSL

interopsystems.com より,Configure スクリプトの変更部分を調べてみると,config と Configure に Interix 用の記述が追加されていた。Configure のほうを使えば良いので,config を更新する必要はない。

Configure:

  513: # UWIN 
  514: "UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
  515:
  516: # Cygwin
  513: # UWIN 
  514: "UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
  515:
  516: #Interix
  517: "Interix-gcc",  "gcc:-D_ALL_SOURCE -DL_ENDIAN -DTERMIOS -g -Wall::(unknown)::::::::::::dlfcn:interix_gcc_shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
  518:
  519: # Cygwin

最適化オプションが(おそらく gcc3 のバグ対策で)外されているので,なんとなく許せない場合は復活させておく。

#Interix
"Interix-gcc",  "gcc:-D_ALL_SOURCE -DL_ENDIAN -DTERMIOS -O3 -march=pentium4 -fomit-frame-pointer -g -Wall::(unknown)::::::::::::dlfcn:interix_gcc_shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",

perl Configure --prefix=/usr threads Interix-gcc で Makefile が作成されるので make するだけ。

手元の gcc3.3 では make test を通過した ので,たぶんだいたい大丈夫なのだろう(make test が遅いのは裏でエンコードしているからというのもあるが,そもそもあまり速くない)。 アセンブリルーチンの使用も OFF になっているが,面倒くさそうなので放置する。

問題なのは,Interix3 の仕様で shared library を正常に作成できないことだろうか(作成できるが,リンクしたプログラムでシンボル解決に失敗する)。ライブラリが要求するデフォルトライブラリを解決できないとかなんとかいう噂。

現状では static link であきらめる。

OpenSSH

これはかなり修正を加えなければコンパイル動作しない模様。

interopsystems.com に感謝して 変更済ソースをいただいてくる のが賢明だと思われる。ftp に置かれている README.interix に書かれているように,展開後 configure せずに make する。

修正箇所は root が uid=0 とは限らないことによるものをはじめ,ユーザ管理まわりがほとんどの模様。同様の理由で UsePrivilegeSeparation も no に設定しておく必要があるようだ。README.interix から引用:

Now edit the '/usr/local/etc/sshd-config' file and set the configuration from:
	#UsePrivilegeSeparation yes
to the setting:
	UsePrivilegeSeparation no

とはいっても,PrivilegeSeparaion を no にしないとエラーが出るので嫌でも気づく:

$ /usr/local/sbin/sshd      
Privilege separation user sshd does not exist

インストールは --prefix=/usr/local 状態で行われるようなので,必要に応じて Makefile の書き換えをしたほうがいいかもしれない。

X もの

rxvt

xlock

SFU3.5β/xlockmore 5.01.2 で確認。GTK+ 非存在下。

CFLAGS=-D_ALL_SOURCE CXXFLAGS=-D_ALL_SOURCE し,config.guess をインストール済の automake 1.7 のものと差し替えてから ./configure --prefix=/usr/X11R6 する 。make 通過。make install 通過。

ASTEC-X では遠隔マシンのデスクトップに見えてしまうので怒られる。-remote で回避。

$ xlock
xlock: can not lock 127.0.0.1's display

手元の環境ではパスワードまわりで怒られた(ぉ

$ xlock -remote
xlock: could not get encrypted root password.

単に xlock を見たいだけだったので -nolock して実行してみた。文字化け Matrix は残念きわまりない

パスワードを読むために,普通は xlock の permission を 4111 にしておくようだ(?)

apache

apr

SFU3.5β/apr 0.9.4 にて。Apache 2.0.48 に同梱されている apr でも同様。

CFLAGS=-D_ALL_SOURCE にて,./configure --prefix=/usr --enable-static --disable-shared 通過

file_io/unix/filestat.c:utime.h の include を追加。

   59: #include "apr_errno.h"
   60: 
   61: static apr_filetype_e filetype_from_mode(mode_t mode)
   59: #include "apr_errno.h"
   60: 
   61: #include	<utime.h>
   62: 
   63: static apr_filetype_e filetype_from_mode(mode_t mode)

make 通過。make check 通過 。make install 通過。

apr-utils

SFU3.5β/apr-utils 0.9.4 にて。apr-0.9.4 も同じ親ディレクトリの下で make 完了状態で展開しておく。

CFLAGS=-D_ALL_SOURCE CXXFLAGS=-D_ALL_SOURCE で,./configure --prefix=/usr --with-apr=/usr 通過

make 通過。make check 通過 (日付が出たあとに止まるので Enter を入力すると続行される)。

make install 通過。

httpd

SFU 3.5β/apache httpd 2.0.48 にて。apr,apr-utils インストール済。

CFLAGS=-D_ALL_SOURCE CXXFLAGS=-D_ALL_SOURCE で,./configure --enable-auth-digest --enable-dav --enable-dav-fs --enable-proxy --enable-headers --enable-deflate --enable-unique-id --enable-expires --enable-mime-magic --enable-http --enable-info --enable-suexec --enable-cgi --enable-rewrite --enable-so --with-mpm=threadpool --with-suexec-caller=www --with-suexec-uidmin=0 --with-suexec-gidmin=0 --with-suexec-userdir=public_html --with-suexec-docroot=/home/www/public_html --with-apr=/usr --with-apr-util=/usr --with-ssl 通過。

server/mpm_common.c:initgroups を殺す。

  362: #ifndef HAVE_INITGROUPS
  363: int initgroups(const char *name, gid_t basegid)
  364: {
  365: #if defined(QNX) || defined(MPE) || defined(BEOS) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(OS2) || defined(WIN32) || defined(NETWARE)
  366: /* QNX, MPE and BeOS do not appear to support supplementary groups. */
  367:     return 0;
  368: #else /* ndef QNX */
  362: #ifndef HAVE_INITGROUPS
  363: int initgroups(const char *name, gid_t basegid)
  364: {
  365: #if 1
  366: /* QNX, MPE and BeOS do not appear to support supplementary groups. */
  367:     return 0;
  368: #else /* ndef QNX */

support/suexec.c:ダミーの initgroups を on にする。

  106: #if defined(NEED_INITGROUPS)
  107: int initgroups(const char *name, gid_t basegid)
  108: {
  109:     /* QNX and MPE do not appear to support supplementary groups. */
  110:     return 0;
  111: }
  112: #endif
  106: #if 1
  107: int initgroups(const char *name, gid_t basegid)
  108: {
  109:     /* QNX and MPE do not appear to support supplementary groups. */
  110:     return 0;
  111: }
  112: #endif

make 通過。make install 通過。

適宜 httpd.conf を修正して apachectl start すると単純な機能については動いているようだが,詳細は未調査。

Web ブラウザで見ると見えるのに telnet でつなぐと切られるなど,若干挙動不審(interopsystems 版 2.0.44 でも同様)。

その他

ChaSen,ipadic,darts

SFU3.5β/darts 0.2:

./configure --prefix=/usr 通過。make 通過。make check 通過 。make install 通過。

SFU3.5β/ChaSen 2.3.3:

config.guess を automake 1.7 のものと交換して ./configure; make 通過。make check 通過。

最初から入っているもの

/bin

$ ls /bin/
[               csh             ipcrm           pax             stty
addr            csplit          ipcs            pdomain         su
alias           ctags           ispell          pg              sum
ar              cut             jobs            ping            syslogd
at              date            join            pkg             tail
atq             dc              kill            pkg_add         talk
atrm            dd              ksh             pkg_create      tar
awk             df              last            pkg_delete      tcsh
banner          diff            less            pkg_info        tee
basename        diff3           lessecho        pkg_sign        telnet
batch           dig             lesskey         posixpath2nt    test
bc              dircmp          lex             pr              tftp
bg              dirname         line            printf          tic
bp              dnsquery        ln              ps              time
                du              locale          pstat           tip
                echo            localedef       psxoffset       tkpkg
                ed              logger          pwd             toe
                egrep           login           ranlib          touch
                env             loginenv        rcp             tput
                ex              logname         rdist           tr
                expand          lp              rdistd          true
                expr            ls              read            truss
                false           m4              regpwd          tset
                fc              mail            renice          tsort
                fg              mailx           reset           tty
c89             fgrep           make            rlogin          tzselect
cal             file            man             rm              umask
calendar        fileinfo        mkdir           rmdir           unalias
captoinfo       fileinfo.exe    mkfifo          rpcgen          uname
cat             find            more            rpcinfo         unexpand
cat32           finger          mpack           rsh             unifdef
cat32.exe       flip            mt              rstartd         uniq
cc              fmt             munpack         runwin32        unixpath2win
cd              fold            mv              script          unvis
chgpath         ftp             mvwtmpx         sdiff           uudecode
chgrp           gencat          newgrp          sed             uuencode
chmod           getconf         nice            service         vi
chown           getopt          nl              sh              view
chsh            getopts         nm              showmount       vis
cksum           grep            nohup           size            wait
clear           head            nslookup        sleep           wc
cmp             hexdump         nsupdate        sort            who
col             host            ntpath2posix    spell           whoami
column          hostname        nvi             split           winpath2unix
comm            iconv           od              ssimda          wvisible
command         id              passwd          strerror        xargs
cp              infocmp         paste           strings         yacc
cpio            infotocap       patch           strip           yearistype
crontab         install         pathchk         strsignal

$ ls /usr/local/bin/
a2p             h2xs            perldoc         pod2text        s2p
c2ph            perl            pl2pm           pod2usage       splain
dprofpp         perl5.6.1       pod2html        podchecker
find2perl       perlbug         pod2latex       podselect
h2ph            perlcc          pod2man         pstruct

$ ls /usr/sbin/
chroot          in.rexecd       mail.local      nfsmount        popper
cron            in.rlogind      mailq           nfsshare        purgestat
hoststat        in.rshd         makedev         nfsstat         sendmail
igetty          in.telnetd      mapadmin        nfsumount       syslogd
in.fingerd      in.tftpd        mknod           nis2ad          zdump
in.ftpd         inetd           newaliases      nisadmin        zic
in.ntalkd       init            nfsadmin        nismap          zzInterix

$ ls /usr/X11R6/bin/
Xmark           makeg           xclipboard      xkbcomp         xrdb
appres          mergelib        xclock          xkbevd          xrefresh
atobm           mkdirhier       xcmsdb          xkbprint        xset
bdftopcf        mkfontdir       xconsole        xkbvleds        xsetroot
bitmap          oclock          xcutsel         xkbwatch        xsm
bmtoa           proxymngr       xdm             xkill           xstdcmap
editres         resize          xdpyinfo        xlogo           xterm
fsinfo          rstart          xfd             xlsatoms        xuctblgen
fslsfonts       sessreg         xfindproxy      xlsclients      xwd
fstobdf         smproxy         xfs             xlsfonts        xwininfo
iceauth         startx          xfwp            xmag            xwud
imake           twm             xhost           xmkmf
lbxproxy        x11perf         xieperf         xmodmap
lndir           x11perfcomp     xinit           xon
makedepend      xauth           xkbbell         xprop

$ ls /usr/contrib/bin/
ci              gawk            pack            rlog            zip
co              gunzip          pcat            uncompress
compress        gzip            rcs             unpack
elvis           ident           rcsdiff         unzip
elvrec          merge           rcsmerge        zcat

$ ls /usr/contrib/win32/bin/
append          drwatson        mspaint         recover         wfind
arp             drwtsn32        musrmgr         regedt32        wfinger
assoc           edit            nbtstat         ren             wftp
attrib          edlin           net             rename          whostname
backup          erase           netstat         replace         winchat
cacls           eventvwr        nlsfunc         restore         windisk
calc            exe2bin         notepad         route           winfile
cdplayer        fastopen        ntbackup        savedump        winhlp32
charmap         findstr         packager        setver          winmsd
chcp            fontview        path            sndrec32        winspool
chkdsk          forcedos        pause           sndvol32        winver
chkntfs         format          pbrush          start           wmkdir
clipbrd         ftype           pentnt          subst           wmore
clock           graftabl        perfmon         sysedit         wnslookup
cmd             grpconv         portuas         syskey          wping
comp            help            posix           taskman         wprint
compact         inetins         progman         taskmgr         wrcp
control         internat        prompt          tracert         wrmdir
convert         ipconfig        psxrun          tree            wrsh
copy            keyb            qbasic          unlodctr        wset
dcomcnfg        label           rasadmin        ver             wsort
ddeshare        loadfix         rasautou        verify          wtelnet
del             lodctr          rasdial         vol             wtftp
dir             md              rasman          wat             wtime
diskcomp        mem             rasmon          wdate           wtype
diskcopy        mode            rasphone        wecho           wwrite
diskperf        move            rassprxy        wexit           xcopy
doskey          mplay32         rd              wexpand
dosx            mscdexnt        rdisk           wfc


← 上階層へ


misora@hpot.r-x.jp Copyright © 1999-2003 by T.Tsujikawa / All rights reserved.