第17課 Firefox をインストールする!

今回は Firefox のインストールに挑戦します。Web ブラウザは非常に便利ですからね。

dojomaster@slackware:~$ wget -P pkg/ ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/10.0.2/source/firefox-10.0.2.source.tar.bz2
(中略)
dojomaster@slackware:~$ mv src/firefox-10.0.2.source.tar.bz2 pkg/
dojomaster@slackware:~$ tar -C src/ -xjf pkg/firefox-10.0.2.source.tar.bz2 
dojomaster@slackware:~$ cd src/mozilla-release/
dojomaster@slackware:~/src/mozilla-release$ ./configure && make
(中略)
checking for gnome-vfs-2.0 >= 2.0 gnome-vfs-module-2.0 >= 2.0... checking for gconf-2.0 >= 1.2.1 gobject-2.0 ... checking for libnotify >= 0.4... Package libnotify was not found in the pkg-config search path. Perhaps you should add the directory containing `libnotify.pc' to the PKG_CONFIG_PATH environment variable No package 'libnotify' found
configure: error: Library requirements (libnotify >= 0.4) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.

libnotify というのが必要なようです:

dojomaster@slackware:~/src/mozilla-release$ wget -P ~/pkg http://ftp.gnome.org/pub/GNOME/sources/libnotify/0.7/libnotify-0.7.4.tar.xz
(中略)
dojomaster@slackware:~/src/mozilla-release$ tar -C ~/src/ -xJf ~/pkg/libnotify-0.7.4.tar.xz 
dojomaster@slackware:~/src/mozilla-release$ pushd ../libnotify-0.7.4/
~/src/libnotify-0.7.4 ~/src/mozilla-release
dojomaster@slackware:~/src/libnotify-0.7.4$ ./configure && make
(中略)
configure: error: Package requirements (gtk+-3.0 >= 2.90) were not met:

No package 'gtk+-3.0' found

試した libnotify のバージョンが新しすぎたようです。古いのを試しましょう。0.6 系はダメだったので、0.5 系でいきます:

dojomaster@slackware:~/src/libnotify-0.7.4$ wget -P ~/pkg http://ftp.gnome.org/pub/GNOME/sources/libnotify/0.5/libnotify-0.5.2.tar.gz
(中略)
dojomaster@slackware:~/src/libnotify-0.7.4$ tar -C .. -xzf ~/pkg/libnotify-0.5.2.tar.gz 
dojomaster@slackware:~/src/libnotify-0.7.4$ cd ../libnotify-0.5.2/
dojomaster@slackware:~/src/libnotify-0.5.2$ ./configure && make
(中略)
dojomaster@slackware:~/src/libnotify-0.5.2$ sudo make install
(中略)

Firefox に再挑戦です:

dojomaster@slackware:~/src/libnotify-0.5.2$ popd
~/src/mozilla-release
dojomaster@slackware:~/src/mozilla-release$ ./configure && make
(中略)
checking for alsa... Package alsa was not found in the pkg-config search path.
Perhaps you should add the directory containing `alsa.pc'
to the PKG_CONFIG_PATH environment variable
No package 'alsa' found
configure: error: Need alsa for Ogg, Wave or WebM decoding on Linux.  Disable with --disable-ogg --disable-wave --disable-webm.  (On Ubuntu, you might try installing the package libasound2-dev.)

ALSA がないのでエラーになりました。別に音が出なくてもいいので、ヒントのとおり無効化します:

dojomaster@slackware:~/src/mozilla-release$ ./configure --disable-ogg --disable-wave --disable-webm && make
(中略)
checking for GL/glx.h... no
configure: error: Can't find header GL/glx.h for WebGL (install mesa-common-dev (Ubuntu), mesa-libGL-devel (Fedora), or Mesa-devel (openSUSE))

X Window System に OpenGL のモジュールを組込んでいないので、エラーになりました。drm と mesa をインストールしなかったバチが当たりまあした。こんなところで影響が出るとは、横着せずにちゃんとビルドするんでした。

ということで、今からビルドしてみます。まずは glproto です。もうインストールしてある気もしますが:

dojomaster@slackware:~$ cd src/xorg/util/modular/proto/glproto/
dojomaster@slackware:~/src/xorg/util/modular/proto/glproto$ sudo PKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH ./configure
(中略)
dojomaster@slackware:~/src/xorg/util/modular/proto/glproto$ sudo make install
(中略)

次は mesa/drm です。 “–enable-nouveau-experimental-api” という configure オプションを渡してビルドしないと、mesa のビルドができません。ひどい話です。:

dojomaster@slackware:~/src/xorg/util/modular/proto/glproto$ cd ../../mesa/drm
dojomaster@slackware:~/src/xorg/util/modular/mesa/drm$ sudo PKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH ./configure --enable-nouveau-experimental-api
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/drm$ sudo make
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/drm$ sudo make install
(中略)

次は mesa です。そのまま configure したら ATI のドライバ云々でエラーが出たので、 “–with-gallium-drivers” オプションで必須らしい nouveau だけを指定しました。正直意味は分かりません。Firefox のビルドさえできればそれでいいのです:

dojomaster@slackware:~/src/xorg/util/modular/mesa/drm$ cd ../mesa/
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo PKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH ./configure --with-gallium-drivers=nouveau
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
python -t -O -O main/es_generator.py -S main/APIspec.xml -V GLES1.1 > main/api_exec_es1.c
Traceback (most recent call last):
  File "main/es_generator.py", line 26, in <module>
    import APIspecutil as apiutil
  File "/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/mesa/main/APIspecutil.py", line 28, in <module>
    import libxml2
ImportError: No module named libxml2
gmake[2]: *** No rule to make target `main/api_exec_es1.c', needed by `depend'.  Stop.
gmake[2]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/mesa'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src'
make: *** [default] Error 1

Python の libxml2 モジュールがないとかでエラーになったので、インストールします:

dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ wget -P ~/pkg/ ftp://xmlsoft.org/libxml2/libxml2-sources-2.7.8.tar.gz
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ tar -C ~/src/ -xzf ~/pkg/libxml2-sources-2.7.8.tar.gz 
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ pushd ~/src/libxml2-2.7.8/
~/src/libxml2-2.7.8 ~/src/xorg/util/modular/mesa/mesa
dojomaster@slackware:~/src/libxml2-2.7.8$ cd python/
dojomaster@slackware:~/src/libxml2-2.7.8/python$ sudo ./setup.py build install
(中略)
dojomaster@slackware:~/src/libxml2-2.7.8/python$ python
Python 2.6.6 (r266:84292, Nov 27 2010, 19:47:39) 
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import libxml2
>>> ^D

mesa のビルドに戻ります:

dojomaster@slackware:~/src/libxml2-2.7.8/python$ popd
~/src/xorg/util/modular/mesa/mesa
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make clean
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo PKG_CONFIG_PATH=/usr/local/share/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH ./configure --with-gallium-drivers=nouveau
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
gcc -c -I. -I../../../../src/gallium/include -I../../../../src/gallium/auxiliar
y -I../../../../src/gallium/drivers -I/usr/local/include -I/usr/local/include/l
ibdrm   -I../../../../src/gallium/drivers/nouveau/include  -g -O2 -Wall -std=c9
9 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-
aliasing -fno-builtin-memcmp -g -O2  -fPIC  -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3
DNOW_ASM -DUSE_SSE_ASM -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE_LIBUDEV -DHAVE_XCB_DRI2 -fvisibility=hidden  nouveau_screen.c -o nouveau_screen.o
In file included from nouveau_screen.c:24:0:
/usr/local/include/libdrm/nouveau_drmif.h:29:28: fatal error: nouveau_device.h: No such file or directory
compilation terminated.
gmake[4]: *** [nouveau_screen.o] Error 1
gmake[4]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/drivers/nouveau'
gmake[3]: *** [default] Error 1
gmake[3]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/drivers'
gmake[2]: *** [default] Error 1
gmake[2]: *** [default] Error 1
gmake[2]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src'
make: *** [default] Error 1

“nouveau_device.h が見付からないというエラーが出ました。問題となっている “usr/local/include/libdrm/nouveau_drmif.h” の 29 行目の ‘#include “nouveau_device.h”‘ を ‘#include <nouveau/nouveau_device.h>’ に書き換えてから再挑戦です:

dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
gcc -c -I. -I../../../../../src/gallium/include -I../../../../../src/gallium/auxiliary -I../../../../../src/gallium/drivers -I../../../../../include -I../../../../../src/mapi -I../../../../../src/mesa -I../../../../../src/gallium/state_trackers/dri/common -I../../../../../src/mesa/drivers/dri/common -I../../../../../src/mesa/main  -g -O2 -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp -g -O2  -fPIC  -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE_LIBUDEV -DHAVE_XCB_DRI2 -fvisibility=hidden  dri_context.c -o dri_context.o
In file included from ../../../../../src/mesa/drivers/dri/common/utils.h:32:0,
                 from dri_context.c:32:
../../../../../include/GL/internal/dri_interface.h:51:17: fatal error: drm.h: No such file or directory
compilation terminated.
gmake[5]: *** [dri_context.o] Error 1
gmake[5]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/state_trackers/dri/drm'
gmake[4]: *** [default] Error 1
gmake[4]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/state_trackers/dri'
gmake[3]: *** [subdirs] Error 1
gmake[3]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/state_trackers'
gmake[2]: *** [default] Error 1
gmake[2]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src'
make: *** [default] Error 1

include/GL/internal/dri_interface.h の 51 行目、’#include <drm.h>’ を ‘#include <libdrm/drm.h>’ に書き換えてから再挑戦です:

dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
gcc -c -I. -I../../../../../src/gallium/include -I../../../../../src/gallium/auxiliary -I../../../../../src/gallium/drivers  -g -O2 -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno
-builtin-memcmp -g -O2  -fPIC  -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE_LIBUDEV -DHAVE_XCB_DRI2 -fvisibility=hidden  nouveau_drm_winsys.c -o nouveau_drm_winsys.o
nouveau_drm_winsys.c:9:27: fatal error: nouveau_drmif.h: No such file or directory
compilation terminated.
gmake[3]: *** [nouveau_drm_winsys.o] Error 1
gmake[3]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/winsys/nouveau/drm'
gmake[2]: *** [default] Error 1
gmake[2]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/winsys'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src'
make: *** [default] Error 1

以下の変更を施します:

--- ./src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c.orig  2012-03-02 03:42:29.273000629 +0900
+++ ./src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c       2012-03-02 03:49:12.131997694 +0900
@@ -6,9 +6,9 @@
 
 #include "nouveau_drm_public.h"
 
-#include "nouveau_drmif.h"
-#include "nouveau_channel.h"
-#include "nouveau_bo.h"
+#include <libdrm/nouveau_drmif.h>
+#include <nouveau/nouveau_channel.h>
+#include <nouveau/nouveau_bo.h>
 
 #include "nouveau/nouveau_winsys.h"
 #include "nouveau/nouveau_screen.h"

また、/usr/local/include/xf86drm.h の 40 行目を ‘#include <libdrm/drm.h>’ に変更します。さっきから様子がおかしいですが、とにかく続けます:

dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
g++ -g -O2 -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp -g -O2  -fPIC  -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE_LIBUDEV -DHAVE_XCB_DRI2 -fvisibility=hidden -o nouveau_dri.so.test ../../../../src/mesa/drivers/dri/common/dri_test.o nouveau_dri.so.tmp  -L../../../../lib -Wl,-R/usr/local/lib/dri -ldricore -lglsl  -L/usr/local/lib -ldrm   -lexpat -lm -lpthread -ldl  ;
nouveau_dri.so.tmp: undefined reference to `nouveau_resource_alloc'
nouveau_dri.so.tmp: undefined reference to `nouveau_pushbuf_flush'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_pending'
nouveau_dri.so.tmp: undefined reference to `nouveau_reloc_emit'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_status'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_reset'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_busy'
nouveau_dri.so.tmp: undefined reference to `nouveau_grobj_autobind'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_return_val'
nouveau_dri.so.tmp: undefined reference to `nouveau_pushbuf_marker_emit'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_map_range'
nouveau_dri.so.tmp: undefined reference to `nouveau_device_get_param'
nouveau_dri.so.tmp: undefined reference to `nouveau_resource_destroy'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_unmap'
nouveau_dri.so.tmp: undefined reference to `nouveau_channel_free'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_map_flush'
nouveau_dri.so.tmp: undefined reference to `nouveau_grobj_free'
nouveau_dri.so.tmp: undefined reference to `nouveau_device_open_existing'
nouveau_dri.so.tmp: undefined reference to `nouveau_pushbuf_emit_reloc'
nouveau_dri.so.tmp: undefined reference to `nouveau_device_close'
nouveau_dri.so.tmp: undefined reference to `nouveau_channel_alloc'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_wait_status'
nouveau_dri.so.tmp: undefined reference to `nouveau_pushbuf_submit'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_handle_get'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_map'
nouveau_dri.so.tmp: undefined reference to `nouveau_resource_init'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_new'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_ref'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_handle_ref'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_alloc'
nouveau_dri.so.tmp: undefined reference to `nouveau_bo_new_tile'
nouveau_dri.so.tmp: undefined reference to `nouveau_grobj_alloc'
nouveau_dri.so.tmp: undefined reference to `nouveau_notifier_free'
nouveau_dri.so.tmp: undefined reference to `nouveau_resource_free'
collect2: ld returned 1 exit status
gmake[3]: *** [nouveau_dri.so] Error 1
gmake[3]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/targets/dri-nouveau'
gmake[2]: *** [default] Error 1
gmake[2]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src/gallium/targets'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/dojomaster/src/xorg/util/modular/mesa/mesa/src'
make: *** [default] Error 1

コンパイル時のオプションが足りてないみたいですね。`nouveau_*’ なんとかというシンボルは /usr/local/lib/libdrm_nouveau.so に含まれているので、Makefile を編集して gcc にそう教えてやります:

--- src/gallium/targets/dri-nouveau/Makefile.orig       2012-03-02 04:55:01.814001201 +0900
+++ src/gallium/targets/dri-nouveau/Makefile    2012-03-02 04:55:07.721000068 +0900
@@ -23,6 +23,6 @@
 
 include ../Makefile.dri
 
-DRI_LIB_DEPS += $(shell $(PKG_CONFIG) libdrm_nouveau --libs)
+DRI_LIB_DEPS += $(shell $(PKG_CONFIG) libdrm_nouveau --libs) $(NOUVEAU_LIBS)
 
 symlinks:

NOUVEAU_LIBS は configs/current で定義されています。

改めて make します:

dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make
(中略)
dojomaster@slackware:~/src/xorg/util/modular/mesa/mesa$ sudo make install
(中略)

やっと mesa のオタンコナスがインストールできました。Firefox のビルドに戻ります:

dojomaster@slackware:~/src/mozilla-release$ ./configure --disable-ogg --disable-wave --disable-webm && make
(中略)
dojomaster@slackware:~/src/mozilla-release$ sudo make install
(中略)

ビルドに数時間を費し、やっと Firefox のインストールが完了しました。X Window System なみに大変でした。

何故か英語版になっていることと、マウスホイールの設定をしていないことと、キレイな日本語フォントをまだインストールしていないことに気付きましたが、もう疲れたのでこれでよしとしましょう。

ひたすらソースコードをバキバキコンパイルして GUI 環境を手に入れるという当初の目標を達成した (?) ので、とりあえずこのツアーは終了です。やはりdeb や rpm といったパッケージ管理システムは偉大です。むやみにソースからインストールせずに、deb や rpm を活用しましょう。でないと大変なことになります。

(コウヅ)



比較サイト

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中