お遊び記録

最近の活動記録

FreeBSD-CURRENTを導入してみた (6) xorgを導入してみた

sshを使用した環境は軽量で便利なのですが、やはりFreeBSD環境上でも ブラウザとかX Windowクライアントを使いたくなる時もあります。 そこでxorgを導入します。 次項で紹介するVirtualBoxのGuest Additionを導入すれば マウス統合やウィンドウリサイズといった機能も使用できます。




xorgを導入する

今から20年くらい前、X WindowがまだX11R3などとバージョン番号付きで呼ばれていた頃、 そのプログラムは1つの巨大なファイルにまとめられ配布されていました。 当然、導入も解凍、設定、コンパイル、インストールという 一連の流れで行えていました *1

現在のxorgと呼ばれるようになったX Windowは200以上の小さなプログラムとして 配布されています。 それぞれのプログラムごとにportsは作られています。 ですので、それらportsを必要なだけ導入すればX Windowを導入できます。

とは言え、そもそもportsは全部で2万数千あります。 その中でxorgを構成する必要なportsを全部探しだすのは現実的ではありません。

そこで使うのが200幾つかのportsを一括して導入してくれるxorgの メタportsであるx11/xorgです*2。 まずそのパスに移動しましょう。

# cd /usr/ports/x11/xorg

設定を行う

x11/xorgを構成する200以上のportsの幾つかは、設定を行うことができます。 そのうちのかなりの部分は通常は無視できるものです。 残る幾つかは指定すると多少嬉しいものです。 そして最後の数個は、特に我々日本人にとっては是非指定したいものです。 config-recursiveの呪文を詠唱して、めげずに設定を行なってゆきましょう。

# make config-recursive

これを実行することで、 x11/xorgとそれを構成するportsすべての設定を行うことができます。

以下、xorg導入のために筆者が行った設定を紹介します。 なお設定項目はportsのバージョンによって変化します。 また設定値はたぶんに筆者の好みを反映しています。 かならずこの通りに設定しなければならない、というものではありません。

x11/xorg-apps

x11/xorg-appsの設定
xorgの標準アプリケーションを一括インストールするmeta portsです。 インストールするportsは設定で選択でき、 不要のものはインストールしないことを選べます。 特に事情がない場合は、そのまま「OK」します。 このportsの完全な設定項目一覧はこちらです→

x11-drivers/xorg-driver

x11-drivers/xorg-driverの設定
様々なXの入出力装置のドライバソフトウェアを導入するmeta portsです。 VirtualBoxで利用できるデバイスは限られるため、マウス MOUSE,キーボード KEYBOARD,ビデオ VESAの3つのドライバを選択すれば十分です。 VirtualBox環境ではビデオドライバとしてGuestAdditionのそれを使用します。 が、これが動作しなくなった場合の用心としてVESAドライバを導入しておくと安心です。 このportsの完全な設定メニューの一覧はこちらです→

x11-servers/xorg-server

x11-servers/xorg-serverの設定
xorgのX serverソフトウェアです。 以下の機能のサポートの有効、無効を指定することができます。

ここではデフォルトのまますべてを選択して「OK」します。

lang/python27

lang/python27の設定
スクリプト言語pythonのインタプリタ、2.7版です。 ここではデフォルトの設定のまま「OK」を選択します。 オプションで悩むのはFPECTL Floating point exception handling ですが、 Pythonのドキュメントによれば:

fpectl モジュールはデフォルトではビルドされません。このモジュールの利用は推奨さ
れておらず、熟練者以外がこのモジュールを使うのは危険です。このモジュールの制限
についての詳細は、 制限と他に考慮すべきこと 節を参照してください。

とあります。Python熟練者でない私は無効にしています。

このportsの完全な設定メニューの一覧はこちらです→

x11/xterm

x11/xtermの設定
xtermは X Windows上でコンソール入出力を実現する端末エミュレータソフトウェアです。 通常はデフォルトの設定のまま「OK」を選択します。 ただし、GNOME,KDE,Xfce4を使用する予定がある場合には 「GNOME GNOME desktop environment」 を選択しておいてもよいでしょう。 これを選択するとそれぞれの環境に対してメニュー登録が行われて、 メニューからのxtermの起動が可能になります。
このportsの完全な設定メニューの一覧はこちらです →

x11/pixman

x11/pixmanの設定
pixmanはイメージ合成やラスター処理のような 低レベルのピクセル操作を提供するライブラリです。 このソフトウェアでは以下の設定を行えます。

SIMDオプションを指定すると、 使用しているCPUがMMXやSSE2のようなSIMD拡張命令セットをサポートしているかを 自動検出し、サポートしているならばその命令セットを使用するようになります。 MMXやSSE2が利用できるならば、浮動小数点演算が高速化されることが期待できます。 通常は有効にします。

x11-drivers/xf86-video-radeonhd

x11-drivers/xf86-video-radeonhdの設定
ATI Radeon HD用のグラフィックドライバです。 これは本来設定する必要はありません。 なぜならばx11-drivers/xorg-driverで無効化されているからです。 しかしながらmake config-recursiveではコマンドを投入した瞬間に 有効になっていたportsがconfigされます。xf86-video-radeonhdは初期状態で有効化 されていたためconfigが実行されるのです。 実際のところconfigを行ってもコンパイル/インストールは行われません。 ですのでここでは中身は確認せず、そのまま「OK」を選択します。

なお、これとは逆で、デフォルトで無効になっていたportsを有効化した場合、 そのportsやそれが依存するportsのconfigが走らないことは注意すべきです。 こうしたportsのconfigは、再度make config-recursiveを 実行すれば走ります。 ただし、そこで別のportsを有効にした場合、同じ現象が発生します。 従い、make config-recursiveはconfigメニューが表示されなくなるまで 繰り返して実行する必要があるのです。

lang/perl

lang/perlの設定
perl言語のportsです。FreeBSDでの現時点のデフォルトのバージョンは5.14版です。 設定はデフォルトのままで大丈夫でしょう。 このportsの完全な設定メニューの一覧はこちらです→

オプションの解説を少々。 DEBUGGINGは文字通りの意味です。

Gnuのキー-バリュー型組み込みデータベースの実装がGDBMであり、 それをperlからアクセスできるようにする拡張がGDBM_File拡張です。

malloc(3)ルーチンをFreeBSD純正のものではなくPerl付属のルーチンを使用するようにするのが PERL_MALLOCです。このオプションを適用したPerlで、 PERL_DEBUG_MSTATS環境変数を定義してスクリプトを実行することで、メモリ使用状況を 分析することができます。

PERL_64BITINTオプションは、32bit環境であるi386アーキテクチャでも整数型として 64bit整数を使用する指定です。これがデフォルトです。なお、32bit整数版Perlと 64bit整数版Perlとでは色々な箇所で非互換性があります。 例えば先のGDBM_Fileで32bit整数版Perlが作成したgdbmデータベースを 64bit整数版Perlで開くことはできません。

THREADSはスレッド機能対応版のPerlを作成するオプションです。 このオプションを指定しない限り"use threads;"を使用できません。 このオプションを指定すると自動的にPTHREADオプションも有効になります。 が、Perl Mallocの不具合のため、PERL_MALLOCオプションは取り消されます。

PTHREADオプションはPOSIX互換スレッド機能を使用して構築するオプションです。

MULTIPLICITYオプションは、スレッド対応機能以前から存在していた、同時に複数の インタプリタを実行して並列処理する仕組みを有効にします。

SITECUSTOMIZEオプションは実行時に@INCをカスタマイズ可能にします。 共通的なライブラリを置いたりするに便利でしょう。

USE_PERLオプションはインストールしたPerlに/usr/bin/perlと/usr/bin/perl5から シンボリックリンクを張ります。 一般的なパスでperlを扱えるようになります。

sysutils/hal

f:id:yukimimiya:20121206233039p:plain
xorgではデフォルトでキーボードやマウスの設定をhalで行います。 このportsでは以下の設定が行えます。

halはリムーバブルメディアの挿入を検出した際に、これをメディアにつけられたボリューム名 と同名のパスに自動マウントします。 FIXED_MOUNTPOINTSオプションが指定されると、 このデフォルトの振舞を変更して、固定されたマウントポイントにmountするようになります。
有効/無効は好みの問題でしょう。私はデフォルトのまま無効で設定しています。

converters/libiconv

converters/libiconvの設定
libiconvはUnicodeベースの文字コード変換機能のライブラリです。 文字コードAとBがあったとします。 その変換をA→Unicode、Unicode→Bという経路で行います。 これがUnicodeベースの文字コード変換です。 このportsでは以下の設定が行えます。

ENCODINGSオプションを指定することでJISX0213に対応します。 PATCHESオプションで、日本語に関する様々な問題が修正されます。 例えば、CP932の変換がWindowsでの変換と異なる、といった問題が修正されます。 2つのオプションを両方共有効に設定します。

devel/m4

devel/m4の設定
m4は、マクロプロセッサです。 テキストの置換処理に特化したプログラムです。 RatforというFortranをC言語風に拡張した言語の開発のために作られました。 が、現在では自動設定スクリプトを生成するautoconfの処理や、 メールサーバプログラムsendmailの設定用途などで使われています。

FreeBSDのOS自体にもデフォルトでm4が存在しています。 portsではそれに加えてGNUバージョンのm4が導入されます。

このportsでは以下の設定が行えます。

Animated Portable Network GraphicsはアニメーションGIFのPNG形式版です。 デフォルトは無効ですが、有効にして特に困るということもないので有効にします。

textproc/libxslt

textproc/libxsltの設定
XMLからCSSを用いてHTMLへの変換を行うXSLT変換の機能を提供するライブラリです。 以下の設定が行えます。

ここではデフォルトのままとします。

devel/libcheck

devel/libcheckの設定
C言語用のユニット試験フレームワークです。 以下の設定を行えます。ここではデフォルトのままとします。

misc/help2man

misc/help2manの設定
help2manはプログラムのhelp出力からman形式のオンラインマニュアル ファイルを生成するプログラムです。 以下の設定を行えます。ここではデフォルトのままとします。

textproc/docbook-xsl

textproc/docbook-xslの設定
docbook用のxlsスタイルシートです。 ここでは設定はデフォルトのままとします。 行える設定の一覧はこちらです→

devel/glib20

devel/glib20の設定
GNU libcライブラリです。 以下の設定を行えます。

この項目を有効化した場合、文字列collation処理に用いる関数としてglib内のものを用いずicuライブラリで提供されるものを 用います。 collationとは辞書順に基づいた文字列の比較のことです。 sort(1)で-dオプションをつけるならば辞書順比較となります。

icuは unicodeと国際化のためのC/C++/Java用のライブラリをリリースしている団体です。 glib本来の関数とicuのそれを用いた場合のパフォーマンスに関する 報告が このサイトにありました。 これによれば:

ICUglibc(GLIBC - ICU)/ICU
ロケールデータファイルstrcollstrcollcoll
ja_JPTestNames_Latin.txt84248195%
ja_JPTestNames_Japanese_h.txt159829421%
ja_JPTestNames_Japanese_k.txt164798387%
ja_JPTestNames_Asian.txt175524199%

strcoll(3)処理において全角アルファベット、ひらがな、漢字の処理に対して2倍~4倍程度の高速化が見込まれることが分かります。 そこでこの設定は有効化することにします。

textproc/docbook

textproc/docbookの設定
docbookの各種DTD定義です。 導入するDTDを選択できます。 特に事情がなければそのまま「OK」します。
すべての選択肢はこちらです→

devel/gamin

devel/gaminの設定
ファイルを監視し、変更があった場合に通知を発するライブラリです。 ここでの設定項目は以下の項目を設定できますが、 通常はデフォルトのままでよいでしょう。

gaminが監視できるファイル数は/boot/loader.confで設定できるsysctl変数kern.maxfilesから 指定されます。監視できるファイル数をNとするならば:

kern.maxfiles * 0.7 < N < kern.maxfilesperproc - 200

となります。フォルダに多量のファイルが存在する環境などでは/boot/loader.conf

kern.maxfiles="25000"

などと記述するとよいかもしれません。なお、kern.maxfilesperprocはkern.maxfilesの値から 自動的に設定されるため、明示的に設定する必要はありません。

textproc/docbook-500

textproc/docbook-500の設定
DocBook DTD 5.0です。ここでは 以下の設定を変更できますが、通常は デフォルトのままとします。 すべての選択肢はこちらです→

devel/icu

devel/icuの設定
先のdocbook-500の時点で一回make config-recursiveは終了しますが、 再度実行すると、devel/icuの設定が行われます。 これはdevel/glib20でicuを使用することにしたためです。

icuはunicodeベースのプログラムに対する国際化ライブラリです。 設定は下記の項目がありますが、デフォルトのままとします。

コンパイル/導入する

設定を終了してしまえば、コンパイル/導入はコマンド1つで行えます。

# make install clean

これだけでは面白くないので、いくつか使えるmakeの仕方を紹介します。

設定なしにコンパイルするには
make変数BATCHを指定してコンパイルすると、メニューが飛ばされデフォルトの設定で コンパイルされます。

# make BATCH=yes install clean

設定の一括消去
makeターゲットのrmconfig-recursiveを使えば設定を再帰的にすべて消去する ことができます。

# make rmconfig-recursive

設定をミスったときに重宝します。

バルスの呪文
既にたくさんportsを導入してしまっている状態で、それらをすべて強制的に 削除してしまいたい場合があります。例えばxorgがメジャーバージョンアップして しまった時にはportmasterで頑張るよりはいっそひと思いに、と 刹那な気持ちになるときもあるものです。
そんな時には、pkgコマンドで一括削除を行えます。

# pkg delete -af

このコマンドはports/packagesで導入されたすべてのソフトウェアを削除します。 「バルス」と唱えて実行しましょう。

ここまでのまとめ

xorgの設定からコンパイルまでを紹介しました。

次回ではVirtualBox Guest Additionを導入し、xorgとあわせて設定を行います。

*1:とはいえ、imakeという特別なシステムを使用して行う設定は複雑で難解でした。

*2:別解としてx11/xorg-minimalという最小構成の メタportsも存在します。