2016-10-31

pkgsrc/meta-pkgs/mateのビルドに成功

pkgsrc/x11/mate-appletsで発生したエラーを対処することでMATEのビルドに成功しました。途中で何度かエラーが出たりしたので連続してビルドできたわけではありませんが、全体として30時間弱ほどかかったと思います。pkgsrcから入れたものは1つしかない状態で始めましたが、MATEのビルドが終わった段階でpkg_infoで見ると242個のパッケージがインストールされていました。

/usr/pkgの下にあるファイルの容量は2G弱でした。/usr/pkgsrc/packagesにはビルドされたバイナリーのパッケージがあるので次にインストールする時に使えるでしょう。このディレクトリにあるファイルは500M強でした。

x11/mate-appletsでエラーになった時のメッセージは次のようになりました。ビルド中に同様のエラーがsysutils/mate-power-managerx11/mate-session-managerでも起きました。
libtool: link: cannot find the library `/usr/pkgsrc/x11/mate-applets/work/.buildlink/lib/libintl.la' or unhandled argument `/usr/pkgsrc/x11/mate-applets/work/.buildlink/lib/libintl.la'
このエラーメッセージではファイルが見つからないと訴えています。該当するディレクトリを調べてみたら、確かにファイルはありません。このディレクトリはシンボリックリンクだらけなので、次に考えることは、シンボリックリンクで参照しようしているファイルの実体が無いのか、シンボリックリンクが生成されないのが問題なのかを判断することです。

/usr/pkg/libの下にファイルが見つかったので、シンボリックリンクが出来ていないのが悪いのでしょう。このリンクが作られるためにはどうしたら良いのか分からないのですが、x11/mate-applets/Makefileで作られているだろうと思われます。Makefileを見てもどのように変更したら良いのか見えませんでしたが、work/.buildlink/lib/libintl.laというシンボリックリンクが出来ているパッケージのMakefileを参考にして、次のような変更を加えてみました。
--- x11/mate-applets/Makefile.org    2016-10-29 20:31:36.000000000 +0900
+++ x11/mate-applets/Makefile    2016-10-28 09:39:00.000000000 +0900
@@ -40,10 +40,14 @@
 REPLACE_PYTHON+=    invest-applet/invest/mate-invest-chart
 .include "../../lang/python/application.mk"

+BROKEN_GETTEXT_DETECTION=    yes
+USE_BUILTIN.gettext=    no # force use of pkgsrc gettext-lib
+
 .include "../../x11/mate-panel/buildlink3.mk"
 .include "../../x11/mate-desktop/buildlink3.mk"
 .include "../../x11/mate-settings-daemon/buildlink3.mk"
 .include "../../misc/libmateweather/buildlink3.mk"
+.include "../../devel/gettext-lib/buildlink3.mk"
 .include "../../devel/glib2/buildlink3.mk"
 .include "../../devel/libglade/buildlink3.mk"
 .include "../../devel/libwnck/buildlink3.mk"
この変更を行うことで、シンボリックリンクもできましたし、エラーも出ずビルドできるようになりました。ビルド中にエラーがでた他のパッケージも同様の修正を加えることで、エラーが消えました。

これでMATEがインストール出来たわけですが、動かすためにはどうすれば良いのでしょう。何か依存関係にあるパッケージを立ち上げておく必要はないのでしょうか。適当にコマンドをたたけば動くかもしれませんが、そのような場当たり的な対応は避けたいと思っています。まずはドキュメントに目を通してみようと思います。

pkgsrcにあるMATEは2016年4月8日リリースのMATE 1.14が使われていました。もうすでに9月21日にMATE 1.16が出ているので、バグ修正もされているでしょうし、できれば最新版にしたいところです。ただしpkgsrcの枠組みを外れて自前でビルドしてしまうと再びpkgsrcに追従できなくなってしまうので、pkgsrcが変わるのを待とうと思っています。

2016-10-27

pkgsrc/meta-pkgs/mate

pkgsrcにある「meta-pkgs/mate」を使ってMATE一式をビルドしてみます。NetBSD/i386をインストールしたばかりの環境でパッケージが何も入っていないため、ビルド中に依存しているパッケージを再帰的に辿り次々と依存パッケージがインストールされていきました。

順調にビルドしていくかと思いましたが、途中でエラーが発生してビルドが中断してしまいました。何が問題だったのか確認しておこうと思います。ひとまず「make -i」を使ってエラーで止まらないようにして最後までビルドを終わらせました。

依存関係のパッケージを含めたビルド時間は16時間ほどでした。また依存関係にある171個のパッケージがインストールされました。

今後はビルド中に起きたエラーの原因をつきとめ、「meta-pkgs/mate」のビルドが正常終了するようにしようと思います。そしてディスプレイマネージャ(SLiMを使おうと考えていましたが問題があるようなので、LightDMにしようかと思っています。)を入れて、マシン起動後にMATEの環境が使えるようにしたいと思います。

2016-10-26

packagesでインストールするか、pkgsrcから自前でコンパイルするか

MATEをpackagesからインストールしようと思いましたが、うまくいきません。原因ははっきりしませんが、幾つか問題点があります。
  1. MATEはwipからmeta-pkgsに2016Q2で取り込まれたそうなのですが、2016Q3には置いてありませんし、7.0.1にもありません。環境変数PKG_PATHを指定しておけば良いのかもしれませんが、以下の全てを指定しておくのか、ひとつだけにしておいた方が望ましいのか、判断に困ります。
    ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/i386/7.0.1/
    ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/i386/7.0_2016Q2/
    ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/i386/7.0_2016Q3/
  2. NetBSDのミラーサイトは日本にも幾つかあります。しかしpackagesを持っているサイトが少ないし、一部しかミラーしていないサイトもあります。packagesを全部ミラーしているのはftp7.jp.NetBSD.orgだけで、ここはJAISTが管理しています。学術機関なので闇雲に利用するのは憚かられます。もしくはマスターサイトftp.NetBSD.orgを利用することになるのかもしれません。
  3. pkg_add -v mate」としてインストールを試みると次のようなエラーが出てしまいます。エラーになる理由ははっきりしませんが、今後もいろいろとインストールしていくことになるのを考えると、今のうちに基本方針をはっきりさせておいた方が良さそうです。
    pkg_add: Can't process ftp://ftp.NetBSD.org:21/pub/pkgsrc/packages/NetBSD/i386/7.0.1/All/atril*: File unavailable (e.g., file busy)
    pkg_add: Can't process ftp://ftp.NetBSD.org:21/pub/pkgsrc/packages/NetBSD/i386/7.0_2016Q3/All/atril*: File unavailable (e.g., file busy)
    pkg_add: Can't process ftp://ftp.NetBSD.org:21/pub/pkgsrc/packages/NetBSD/i386/7.0_2016Q2/All/perl*: Non-recoverable resolver failure
    pkg_add: no pkg found for 'perl>=5.0', sorry.
    pkg_add: Can't install dependency perl>=5.0
既にコンパイルされたpackagesを使わないとなると、pkgsrcから自前でコンパイルすることになります。この方が融通が利くので便利ではありますが、コンパイルできない場合に問題を追及するのが大変になる恐れがあります。1年ほど前にSONY vaioにNetBSD/i386を入れて環境を整えようとしましたが、その時はpkgsrcからコンパイルしました。しかしコンパイルエラーが出た場合は原因追及や問題解決にかなり苦労した記憶があります。

現在dynabook SS SX/15Aに外付けHDDを接続して環境を構築している目的のひとつには、来年以降におこなう予定である内蔵HDDへのNetBSD/i386環境構築のための調査があるので、このためにも自前でのコンパイルに挑戦してみようと思います。

2016-10-25

NetBSD/i386でのXの設定

dynabook SS SX/15AにUSBで繋いだHDDからNetBSD/i386 7.0.1が起動するようになったので、次にXの設定をおこないました。

まず最初に次の手順で/etc/X11/xorg.conを作成します。
  1. X -configure」を実行すると/root/xorg.conf.newが出来ます。 
  2. 念のために「X -config /root/xorg.conf.new」でXが起動することを確認します。
  3. /root/xorg.conf.new/etc/X11/xorg.confにコピーし、日本語キーボードの設定などを変更しておきます。
このあとstartxで最も初期的な環境のXが動くことを確認しました。ところがXを落としてコンソールに戻ると次のようなエラーが出ていました。
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Error:            Couldn't lookup keysym
>                   Symbol interpretation ignored
> Error:            Couldn't lookup keysym
>                   Symbol interpretation ignored
Errors from xkbcomp are not fatal to the X server
キーボード絡みなので日本語キーボードのための設定に何か不備があるのでしょうか。この辺りの設定はWebで事例を探して見様見真似でおこなったので不具合がある可能性は捨てきれません。

どのように設定するのがNetBSDとして推奨されるのかドキュメントを確認しておこうと思います。そしてデスクトップ環境としてMATEを、ユーザログインのためにSLiMをpkgsrcを使って入れようと考えています。そこまでいければ、Windows Vistaの代替としての環境に近づくでしょう。

2016-10-14

NetBSD/i386の無線LAN設定

NetBSDに限らず、U*IX系OSで無線LANを設定するためには以下の2つの設定が必要です。
  1. wpa_supplicantで無線LANの接続を確立する
  2. DHCPクライアント(dhclientdhcpcd)でアドレスを割り当てる
wpa_supplicantを使うには/etc/wpa_supplicant.confを準備しておかなければなりません。設定自体は親機の設定を把握していればできるはずですし、設定できていさえすれば接続するのも簡単でしょう。以前SONY vaioで設定しようと試みましたが散々苦労した挙句に結局接続できませんでした。ログを出すようにすれば大量に出力されるのですが、その時は問題解決には役立ちませんでした。

無線LANの接続が確立したらDHCPクライアントでアドレスを割り当てます。Webで事例を探すとdhclientを使っている場合が多いので、まずこちらを使ってみました。

dhclientは設定ファイルを参照することもできるようですが、ファイルを用意しておかなくてもアドレスの割り当ては出来ます。コマンドラインで試してみたら簡単にIPv4アドレスが割り当てられました。結構簡単だと思い/etc/rc.confで有効にして再起動してみたら、何故かアドレスが割り当てられていません。処理中のログを出すようにしてブートさせてみました。上手くいけば下記のような結果が得られるのですが、ブート中はDHCPDISCOVERが何度も繰り返し出ていて、処理が終わる前に打ち切られてブート処理が進んでしまっているようでした。試しに/etc/rc.d/dhclientに手を入れて最後に60秒間スリープするようにしてみたところ無事にDHCPでアドレスが割り当てられるようです。これで解決したとは言えるのですが、正式にリリースされたファイルに手を加えるのは躊躇われますし、60秒という時間にも何の根拠もないので不必要に長すぎるのも面白くありません。
Internet Systems Consortium DHCP Client 4.3.0
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on BPF/wpi0/**:**:**:**:**:**
Sending on   BPF/wpi0/**:**:**:**:**:**
Sending on   Socket/fallback
DHCPDISCOVER on wpi0 to 255.255.255.255 port 67 interval 6
DHCPREQUEST on wpi0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.1.1
DHCPACK from 192.168.1.1
bound to 192.168.1.19 -- renewal in 5624 seconds.
NetBSD/i386には何故かdhcpcdというDHCPクライアントも入っていたので、こちらを使ってみました。オプションはいろいろあるようですが普通に使う分には何も指定する必要はなく簡単です。これはブート中であってもアドレスを取得してくれるので何も問題がありませんでした。

Webで見つけた情報ですが/etc/rc.confに以下の行を入れておく必要がありました。これが無いとdhcpcdであってもうまくいかないようです。これが何をするための指定なのか把握していないので、調べておこうと思います。
critical_filesystems_local="/var /usr"

NetBSD/i386のインストール中のネットワーク設定で無線LANの設定はできない

NetBSD/i386をUSBメモリからインストールするのであればネットワークを設定せずにインストールを完了させることができます。しかし最後の「Configure the additional items as needed.」でネットワークの設定を済ませておくこともできるのですが、はたしてこれは無線LANの設定もできるのか不安だったので調べてみました。

dynabook SS SX/15Aには有線LAN(wm0)と無線LAN(wpi0)の2つのインターフェイスがあるので、設定先として無線LANのインターフェイスを選ぶことはできます。しかし「Network media type:」を「autoselect」として処理を続けてもエラーが出てしまいます。
 Status: Command failed
Command: /sbin/dhcpcd -d -n wpi0
 Hit enter to continue
-----------------------------------------------------------
dhcpcd[229]: open `/var/run/dhcpcd-wpi0.pid': Read-only file system
dhcpcd[229]: version 6.7.1 starting
dhcpcd[229]: wpi0: executing `/libexec/dhcpcd-run-hooks' PREINIT
dhcpcd[229]: wpi0: /etc/wpa_supplicant.conf does not exist
dhcpcd[229]: wpi0: not interacting with wpa_supplicant(8)
dhcpcd[229]: wpi0: executing `/libexec/dhcpcd-run-hooks' NOCARRIER
mkdir: /var/run/resolvconf: Read-only file system
Failed to create needed directory /var/run/resolvconf
mkdir: /var/run/dhcpcd: Read-only file system
/libexec/dhcpcd-hooks/50-ntp.conf: cannot create /var/run/dhcpcd/ntp.conf.wpi0: directory nonexistent
dhcpcd[229]: script_runreason: /libexec/dhcpcd-run-hooks: WEXITSTATUS 2
dhcpcd[229]: wpi0: waiting for carrier
wpi0: fatal firmware error
dhcpcd[229]: timed out
dhcpcd[229]: exited
エラーメッセージには「wpi0: /etc/wpa_supplicant.conf does not exist」 と出てきているので、もしかすると無線LANの設定もできそうな気もしますが、メニュー等には見当たりません。

インストーラでNetBSD/i386を入れたあとでも、少なくともAFTERBOOT(8)に書かれているような対処はしなければなりません。必ずしも無線LANも含めたネットワーク設定をインストーラで済ませる必要はないので、インストーラで設定するのはrootのパスワードとか時間帯の設定くらいにしておこうと思います。

2016-10-12

ついにNetBSD/i386 7.0.1の起動に成功

パッチあてたUSB-HDDをdynabook SS SX/15Aに接続して電源を入れます。まずdynabookの起動デバイスメニューが出るのでF12を押してからUSBデバイスを選択します。

次にNetBSD/i386のMBRによってパーティション選択メニューが表示されます。ここまでは以前と同じ動作です。
Fn: disk0
1: NetBSD
2: PARAGON
ここでF1を押してNetBSDを起動させてみます。ところが「ERROR ?」というメッセージが出てしまいました。またしても駄目だったかと気落ちしましたが、何気なくリターンキーを押したところ、なんとブートメニューが表示されました。
>> NetBSD/x86 BIOS Boot, Revision 5.10 (from NetBSD 7.0.1)
>> Memory: 632/3398016 k

      1. Boot normally
      2. Boot single user
      3. Disable ACPI
      4. Disable ACPI and SMP
      5. Drop to boot prompt
     
Choose an option: RETURN for default; SPECE to stop countdown
Option 1 will be chosen in 0 seconds.

Option: [1]:      
一瞬目を疑いました。気持ちが混乱して、このメニューは何だろうと思いましたが、これこそ求めていたものでした。「1. Boot normally」を選択すると素直にNetBSD/i386 7.0.1が起動してくれました。

まだOSを入れただけですから何の設定もできていません。今後はネットワークやデスクトップ環境も構成してWindows Vistaの後継として利用できる環境を整えていこうと思います。ひとまず肩の荷が下りました。