第6課 続 X Window System のインストールに挑戦!

※この課は実りがありません。さっさと X をビルドしたい人は、第7課 続々 X Window System のインストールに挑戦! に飛んで下さい。

X Window System のビルドは、”proto -> lib -> app and xserver -> driver -> data, doc and font” の順番に行う、これに従ってバンバンやってみよう!

dojomaster@slackware:~$ cd pkg
dojomaster@slackware:~/pkg$ mkdir -p x/proto
dojomaster@slackware:~/pkg$ cd x/proto/
dojomaster@slackware:~/pkg/x/proto$ wget -w3 --retr-symlinks --limit-rate=100k ftp://ftp.yz.yamagata-u.ac.jp/pub/X11/x.org/X11R7.6/src/proto/*.tar.bz2
(中略)
dojomaster@slackware:~/pkg/x/proto$ mkdir -p ~/src/x/proto
dojomaster@slackware:~/pkg/x/proto$ cd ~/src/x/proto/
dojomaster@slackware:~/src/x/proto$ for a in ~/pkg/x/proto/*; do tar xvjf $a; done
(中略)
dojomaster@slackware:~/src/x/proto$ ls */configure
applewmproto-1.4.1/configure*    renderproto-0.11.1/configure*
bigreqsproto-1.1.1/configure*    resourceproto-1.1.1/configure*
compositeproto-0.4.2/configure*  scrnsaverproto-1.2.1/configure*
damageproto-1.2.1/configure*     videoproto-2.3.1/configure*
dmxproto-2.3/configure*          windowswmproto-1.0.4/configure*
dri2proto-2.3/configure*         xcmiscproto-1.2.1/configure*
fixesproto-4.1.2/configure*      xextproto-7.1.2/configure*
fontsproto-2.1.1/configure*      xf86bigfontproto-1.2.0/configure*
glproto-1.4.12/configure*        xf86dgaproto-2.1/configure*
inputproto-2.0.1/configure*      xf86driproto-2.1.0/configure*
kbproto-1.0.5/configure*         xf86vidmodeproto-2.3/configure*
randrproto-1.3.2/configure*      xineramaproto-1.2/configure*
recordproto-1.14.1/configure*    xproto-7.0.20/configure*

さあ、どうやって料理したものか…。とりあえず、configure がうまくいくかどうかだけ見てみますか…。

dojomaster@slackware:~/src/x/proto$ for a in *; do cd $a && ./configure || break; cd ..; echo $a >> done_configure; done
(中略)
dojomaster@slackware:~/src/x/proto$ \ls | grep -v done_con | diff done_configure -

[アフィリエイト] 入門bash 第3版を読めば、シェルの達人になれるよ!

すんなりいきました。じゃあ同様に make をば…。

dojomaster@slackware:~/src/x/proto$ mv done_configure ..
dojomaster@slackware:~/src/x/proto$ for a in *; do cd $a && make || break; cd ..; echo $a >> ../done_make; done
dojomaster@slackware:~/src/x/proto$ for a in *; do cd $a && sudo make install || break; cd ..; echo $a >> ../done_make_install; done

何だかうまくいったのかよく分かりませんが、/usr/local/lib/pkgconfig/ に xf86bigfontproto.pc とかあるので、たぶん大丈夫、だと思います…。

ともあれ、次は lib です!

dojomaster@slackware:~/src/x/proto$ mkdir ~/pkg/x/lib
dojomaster@slackware:~/src/x/proto$ cd ~/pkg/x/lib/
dojomaster@slackware:~/pkg/x/lib$ wget -w3 --retr-symlinks --limit-rate=100k ftp://ftp.yz.yamagata-u.ac.jp/pub/X11/x.org/X11R7.6/src/lib/*.tar.bz2
(中略)
dojomaster@slackware:~/pkg/x/lib$ mkdir ~/src/x/lib
dojomaster@slackware:~/pkg/x/lib$ cd ~/src/x/lib
dojomaster@slackware:~/src/x/lib$ rm ../done_*
dojomaster@slackware:~/src/x/lib$ for a in ~/pkg/x/lib/*; do tar xvjf $a; done
(中略)
dojomaster@slackware:~/src/x/lib$ for a in *; do cd $a && ./configure || break; cd ..; echo $a >> ../done_configure; done
(中略)
checking for APPLEWM... configure: error: Package requirements (x11 xext xextproto applewmproto >= 1.4) were not met:

No package 'x11' found
No package 'xext' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables APPLEWM_CFLAGS
and APPLEWM_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

dojomaster@slackware:~/src/x/lib/libAppleWM-1.4.0$ pwd
/home/dojomaster/src/x/lib/libAppleWM-1.4.0
dojomaster@slackware:~/src/x/lib/libAppleWM-1.4.0$ cd ..
dojomaster@slackware:~/src/x/lib$ ls
libAppleWM-1.4.0/     libXdmcp-1.1.0/     libXt-1.0.9/
libFS-1.0.3/          libXext-1.2.0/      libXtst-1.2.0/
libICE-1.0.7/         libXfixes-4.0.5/    libXv-1.0.6/
libSM-1.2.0/          libXfont-1.4.3/     libXvMC-1.0.6/
libWindowsWM-1.0.1/   libXft-2.2.0/       libXxf86dga-1.1.2/
libX11-1.4.0/         libXi-1.4.0/        libXxf86vm-1.1.1/
libXScrnSaver-1.2.1/  libXinerama-1.1.1/  libdmx-1.1.1/
libXau-1.0.6/         libXmu-1.1.0/       libfontenc-1.1.0/
libXaw-1.0.8/         libXpm-3.5.9/       libpciaccess-0.12.0/
libXcomposite-0.4.3/  libXrandr-1.3.1/    libxkbfile-1.0.7/
libXcursor-1.1.11/    libXrender-0.9.6/   xtrans-1.2.6/
libXdamage-1.1.3/     libXres-1.0.5/

いきなりですか…。こいつらをビルドする順番も重要なのかな。しかし、1つずつやってたら大変なのぜ…。

というわけで、~/help_me_build_x.sh という使い捨てスクリプトを作ってみました:

#!/bin/bash -e

topdir="$1"

pkglist="${topdir}/pkglist"
done_make="${topdir}/done_make"

pushd "$topdir"
test -f "$pkglist" || \ls > "$pkglist"
while read pkg; do
        pushd "$pkg"
        ./configure && make && echo "$pkg" >> "$done_make"
        popd
done < "$pkglist"
popd

各パッケージを名前順に configure && make してみて、うまくいったら done_make というファイルにパッケージ名を書き出す、それだけです。done_make に載っているパッケージを sudo make install して、pkglist を更新してまたこのスクリプトを実行して…ということを繰り返すのです。半自動です!

dojomaster@slackware:~/src/x/lib$ chmod +x ~/help_me_build_x.sh
dojomaster@slackware:~/src/x/lib$ ~/help_me_build_x.sh `pwd`
(中略)
dojomaster@slackware:~/src/x/lib$ cat done_make
libXau-1.0.6
libXdmcp-1.1.0
libpciaccess-0.12.0
dojomaster@slackware:~/src/x/lib$ cat done_make | while read a; do pushd $a && sudo make install; popd; done
dojomaster@slackware:~/src/x/lib$ ls /usr/local/lib
libXau.a          libXdmcp.so@        libpciaccess.so.0.10.8*
libXau.la*        libXdmcp.so.6@      libpixman-1.a
libXau.so@        libXdmcp.so.6.0.0*  libpixman-1.la*
libXau.so.6@      libpciaccess.a      libpixman-1.so@
libXau.so.6.0.0*  libpciaccess.la*    libpixman-1.so.0@
libXdmcp.a        libpciaccess.so@    libpixman-1.so.0.24.4*
libXdmcp.la*      libpciaccess.so.0@  pkgconfig/

Xau, Xdmcp, pciaccess の 3 つがうまく make できたようなので、make install. 無事に /usr/local/lib にインストールされた、と思う。

pkglist を更新する:

dojomaster@slackware:~/src/x/lib$ diff done_make pkglist | grep '^>' | sed -e 's/^> //' > pkglist
dojomaster@slackware:~/src/x/lib$ rm done_make

しんどいので、help_me_build_x.sh を改造して自動化する:

#!/bin/bash -e

topdir="$1"

pkglist="${topdir}/pkglist"
prev_pkglist="${topdir}/prev_pkglist"
done_make="${topdir}/done_make"

pushd "$topdir"
test -f "$pkglist" || \
        ( \ls | egrep -v "pkglist|prev_pkglist|done_make" > "$pkglist" )

while true; do
        touch "$done_make"
        while read pkg; do
                pushd "$pkg"
                ./configure && make && sudo make install && \
                        echo "$pkg" >> "$done_make"
                popd
        done < "$pkglist"

        mv "$pkglist" "$prev_pkglist"
        diff "$done_make" "$pkglist" | grep '^>' | \
                sed -e 's/^> //' > tmp
        mv tmp "$pkglist"
        rm -f "$done_make"

        (( $(grep -v '^ *$' "$pkg_list" | wc -l) == 0 )) && break
        diff "$prev_pkglist" "$pkglist" && break
done

popd

そして再び ~/help_me_build_x.sh `pwd` を実行したものの、xtrans-1.2.6 をインストールしただけで止まってしまった! ガーン!

とりあえず config.log を見てみようか…:

dojomaster@slackware:~/src/x/lib$ cat */config.log | grep 'No package' | sort | uniq
No package 'freetype2' found
No package 'ice' found
No package 'sm' found
No package 'x11' found
No package 'xcb' found
No package 'xext' found
No package 'xfixes' found
No package 'xi' found
No package 'xmu' found
No package 'xorg-sgml-doctools' found
No package 'xrender' found
No package 'xt' found
No package 'xtrans' found
No package 'xv' found

何ていうか、もう無理じゃない!?このあと一体どうなる! 次回、乞うご期待!

(コウヅ)



ペット

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中