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の後継として利用できる環境を整えていこうと思います。ひとまず肩の荷が下りました。

NetBSD/i386のMBRにパッチをあててみる

何度もエラーに遭遇しながら、ようやくUSB-HDDにNetBSD/i386 7.0.1をインストールできましたが起動してくれません。パーティション選択メニューが出ているところを見ると、少なくともNetBSD/i386が提供するMBRに制御は移っているようです。

NetBSD/i386のMBRのソースを読んでみることにしました。もしかすると起動しない原因が分かるかもしれません。まずNetBSDのcvswebで公開されているmbr.Sを入手します。FreeBSD/i386のmbrに比べると、条件アセンブルの指定が多いのでロジックを追いかけるときに注意する必要がありそうです。

ソースを読む時の心構えというほどのことでもありませんが、動作している状況を意識してからロジックを追うようにした方が早く内容を理解できると思います。これまでMBRの動作を見ている限りでは、次のようなロジックになっていると想像できます。
  1. パーティション選択メニューを表示する
  2. キー入力を待つ
  3. 選択されたパーティションのPBRに制御を移す
1番目の処理はラベルbootsel_menuで始まるあたりがそうだと思います。そして2番目はラベルwait_key付近がそうでしょう。そしてキー入力があったらラベルcheck_keyに飛ぶので、ここを詳しく読んでみます。
/*
 * We have a keycode, see what it means.
 * If we don't know we generate error '?' and go ask again
 */
check_key:
/*
 * F1-F10 -> boot disk 0-9. Check if the requested disk isn't above
 * the number of disks actually in the system as stored in 0:0475 by
 * the BIOS.
 * If we trust loc 475, we needn't check the upper bound on the keystroke
 * This is always sector 0, so always read using chs.
 */
    subb    $KEY_DISK1, %al
    cmpb    0x0475, %al
    jae    boot_ptn
    addb    $0x80, %al
    pop    %dx            /* dump saved drive # */
    push    %ax            /* replace with new */
#ifdef NO_CHS
    xorl    %ebp, %ebp        /* read sector number 0 */
    jmp    boot_lba
#else
    movw    $chs_zero, %si        /* chs read sector zero info */
    jmp    read_chs
#endif
入力されたスキャンコードを変換してBDA(BIOS Data Area)の0x0475の値と比較しています。何故このロジックが必要なのか不明ですが、比較結果に問題がなければラベルboot_ptnに飛び、(何かが?)問題ならラベルboot_lbaread_chsに制御が移るようです。

ここはNO_CHSの定義で条件アセンブルされていますが、どうもNO_CHSは未定義のようなのでラベルread_chsの方が使われているようです。これは従来のCHS形式でINT 13Hを呼び出すので「8GBの壁」問題を起こす可能性がありそうです。これはセクタ0を読んで制御を移す処理のようなので、PCの観察者からするとパーティション選択メニューが再表示されるように見えます。これは僕が体験したエラー情況と整合します。つまり問題はjae boot_ptnで分岐しなかったことにあると考えられます。いったい0x0475に格納されている値が何だったのか知りたいところですが、デバッグ環境が無いのでこれ以上の調査はできません。

あまり推奨できる方法ではありませんが、バイナリエディタHxDを使ってjae boot_ptnjmp boot_ptnに変更するパッチをあてて対処しようと思います。i386は条件分岐命令jaeが0x73で無条件分岐命令が0xEBなので、該当アドレスが見つかれば対応できます。NetBSD/i386の環境があればスマートに作業できると思うのですが、あまり環境が整っていないので泥臭い方法で対処しました。

HxDでセクタ0の16進ダンプを見ながらmbr.Sを参照しつつハンド逆アセンブルして該当アドレスを見つけました。アドレスが分かれば変更するのは1バイトだけなので、すぐに出来ます。こういう荒業は何が起きるか分からないので注意に注意を重ねて実行しなければなりません。今回はUSB-HDDが潰れても別に構わないので、多少心理的負担は少なくてすみました。

いよいよパッチをあてたUSB-HDDをdynabook SS SX/15Aに接続して電源を入れてみます。今度こそ上手くいって欲しいものです。ここしばらくは、上手くいって欲しいと願いながら電源を入れて、エラーがでたりすることが多かったので、だんだん疲れてきました。

An operating system wan't found.

USB-HDDのパーティションの切り方を変えて再度NetBSD/i386をインストールします。もうインストール中のエラーは起きず、最後まで綺麗に実行されます。いよいよNetBSD/i386 7.0.1がUSB-HDDから起動に成功してくれるかと期待して、dynabookの電源を入れてみました。

セクタ0にあるブートメニューが表示されるのですが、何度押しても先に進まず、再起動を求めるメッセージが出てしまいました。
Fn: disk0
1: NetBSD
2: PARAGON
Fn: disk0
1: NetBSD
2: PARAGON

Fn: disk0
1: NetBSD
2: PARAGON

An operating system wan't found.  Try disconnecting any drives that don't contain an operating system.
Press Ctrl+Alt+Del to restart
パーティションの順番を変えて挙動が変化したところを見ると「8GBの壁」問題に関係することを疑わせます。しかしブートしてくれないのは困りものです。

USB-HDDをWindows上のHxDで覗いてみました。するとブートメニュー自体はセクタ0にある(NetBSDによってインストールされた)ものですが、最後に表示されている「An operating system wan't found.」で始まるメッセージは、2番目のパーティション(NTFSでフォーマットしてある256GBの領域)が出しているようです。HxDで覗くと2番目のパーティションの2番目のセクタにあるのが確認できました。

dynabookの電源を入れると、BIOSはUSB-HDDのセクタ0を読み取り、制御を移しているのは間違いありません。ブートメニューがでていることから判断できます。ここでF1を押すとNetBSDが起動するところなのですが、なぜか制御が移らず、ブートメニューに戻ってしまうようです。NetBSDの起動時の挙動を解説した参考資料があれば、この状況を追いかける参考になりそうですが、何か無いでしょうか。

いまさら「8GBの壁」問題?

dynabook SS SX/15AにUSBで接続したHDDにNetBSD/i386 7.0.1をインストールする作業を続けています。ようやくエラーも出ず、最後までインストーラーが実行されるようになりました。インストールされたUSB-HDD以外のUSB機器を外し、電源を入れ直してUSB-HDDから起動してみます。

 画面にUSB-HDDのセクタ0(MBR)のものと思われるメニューが表示されました。
Fn: disk0
1: PARAGON
2: NetBSD
ここでファンクションキーF2を押してみると、どういうわけか内蔵HDDのWindows Vistaが起動してきました。

今度は何が問題なのでしょうか。この現象から次のことが判断できます。
  • dynabook SS SX/15Aに接続したUSB-HDDから起動できた。
  • セクタ0にあるメニューが実行できた。
確証はありませんが、もしかすると「8GBの壁」の問題なのでしょうか。使用しているUSB-HDDの容量は1TBです。先頭に確保している256GBは万が一のためのバックアップとして「Paragon Backup & Recovery 2011 (Advanced) Free」でdynabook SS SX/15Aの内蔵HDDを全て保存してあります。NetBSDは次の領域に60Gを確保してインストールしたのですが、これが良くなかったのでしょうか。

昔(と言っても、ずいぶん前になりますが) はOSをHDDの前の方に入れておかないと起動しないことがあると言われていました。いまさらこのような現象に遭遇するとも思えないので他の原因を探ったほうが良いのかもしれませんが、思い当たる原因がないので出来ることをしてみます。

USB-HDDのパーティションの切り方を変更して、先頭60GをNetBSDに、次の256Gをバックアップ用としてみました。この状態で再びNetBSD/i386 7.0.1をUSB-HDDにインストールしてみます。

installboot: Old BPB too big. use -f (may invalidate filesystem)

NetBSD/i386インストールの試行錯誤を続けています。newfsに失敗する問題が解決してインストールが先に進むと思ったら、またしてもエラーで中断されてしまいました。

「Bootblocks selection」 というメニューで「Use BIOS console」を選択したところ次のようなエラーでインストールが中断しました。
 Status: Command failed
Command: /usr/sbin/installboot -o console=pc,speed=9600 /dev/rsd0a /usr/mdec/bootxx_ffsv2
 Hit enter to continue
-------------------------------------------------------
installboot: Old BPB too big.  use -f (may invalidate filesystem)
installboot: Set bootstrap operation failed
この問題を解決するためWebを検索してみると次のような情報がありました。
  1. installboot: Old BPB too big, use -f (may invalidate file system)
  2. Wondering about the old "Installboot Old BPB is too big" issue
1番目の情報はNetBSDのメーリングリストCurrent-Usersに2015年1月15日に流れたものですが、この応答で次のような回答がなされています。
You didn't say where wd0a is located, a wrong disklabel might cause it to overlap some of your NTFS partitions. But if you are sure that you don't accidentally overwrite some innocent valid bootblock, then using installboot -f to clean the old BPB is the right thing to do.
古いBPBを綺麗にするためinstallboot -fをするのは適切だと言っています。そのアドバイスに従い、インストーラの中からシェルに落ちて、エラーで失敗したコマンドにオプション-fを加えて実行してみました。

この後改めてインストールをやり直したところ、エラーを出すことなく最後までインストーラが実行されました。

2016/10/11

NetBSD/i386をインストールしようとしたらnewfsに失敗した

dynabook SS SX/15AにNetBSD/i386 7.0.1をインストールしてみます。NetBSD/i386ならUSBメモリから起動できることが確認できているので、NetBSD-7.0.1-i386-install.img.gzの圧縮を解いてddでUSBメモリに書き込みます。
# gzip -d NetBSD-7.0.1-i386-install.img.gz
# dd if=NetBSD-7.0.1-i386-install.img of=/dev/da1 bs=1M conv=sync
このUSBメモリでインストーラを起動します。今度はUSB-HDDをMBRで構成してあるのでNetBSD用のパーティションとして60Gを確保しました。その中はdisklabelで伝統的なパーティションを切りました。

さて、いよいよインストールが始まります。
OK, we are now ready to install NetBSD on your hard disk (sd0). Nothing has been written yes. This is your last change to quit this process before anything gets changed.  Shall we continue?
もう後戻りはできないぞという最終確認メッセージが現れ、いよいよインストールがおこなわれるかと思いきや、またしてもエラーになりました。disklabelで切ったパーティションをnewfsしようとしてしっぱいしたようです。
 Status: Command failed
Command: /sbin/newfs -V2 -O 2 -b 16384 -f 2048 /dev/rsd0a
 Hit enter to continue
-----------------------------------------
newfs: /dev/rsd0a: open for read: Device busy
今度こそうまくいくかと思ったのにガッカリしました。気を取り直してWebを検索してみると「install fails at newfs」という情報が見つかりました。これを参考に「sysctl hw.disknames」を確認すると「hw.disknames = wd0 sd0 sd1 dk0」になっていました。さらにdmesgには次のようなメッセージも出力されていました。
sd1 at scsibus1 target 0 lun 0: <BUFFALO, External HDD, 0000> disk fixed
sd1: 931 GB, 6383 cyl, 16 head, 63 sec, 512 bytes/sect x 1953525160 sectors
dk0 at sd1: Microsoft reserved partition
dk0: 262144 blocks at 34, type:
ここに出てくる「Microsoft reserved partition」というのは、GPT構成にしているときに出来るもののはずです。このUSB-HDDは、GPTにしたり、MBRに戻したりしているので、この領域が出来ても不思議はないのですが、少なくとも今はMBRにしているはずです。GPTではないのに、この領域が見えているのは変だと思います。

HxDでUSB-HDDを覗くと、セクタ1には「第一GPTヘッダ」が残っており、セクタ2には「Mircosoft reserved partition」という文字列も見えています。もしかするとこれらのゴミが悪さをしているのかもしれません。第一GPTヘッダを潰せば良いと思うので、HxDで強制的にゼロクリアしてみました。

この結果、dk0が現れなくなり、試しにnewfsしてみたところ無事に処理できました。今度こそインストールに成功しそうです。

OpenBSD/i386 6.0のUSBメモリ起動はうまくいかない

OpenBSD/i386の「INSTALL.i386」を眺めてみると「Creating a bootable USB key using a Un*x-like system:」とあるのでUSBメモリから起動できそうに見えます。しかしminiroot60.fsでもinstall60.fsでも、起動はするのですが、そこで止まってしまいました。

具体的には次のようなメッセージが出ます。
Using drive 0, partition 3.
Loading.........
probing: pc0 pci mem[632K 3318M a20=on]
disk: fd0 hd0+
hd0+の後ろでカーソルが点滅していますが、キー入力には反応しませんでした。こういうメッセージが出るという事はUSBメモリから起動はしているのだと思いますが、それだけで終わってしまいました。

先月末からFreeBSD/i386を調べてきましたが、方針を転換してNetBSD/i386を使っていこうと思います。

FreeBSD 11.0でもダメ

FreeBSD 11.0がリリースされました。もしかしてUSBメモリから起動できるようになっているかと淡い期待をしてFreeBSD-11.0-RELEASE-i386-memstick.imgをUSBメモリに入れて起動してみましたが、やはり駄目でした。

「BTX halted」が出る状況は相変わらずで、落ちる箇所も同じようです。
-
int=0000000d  err=00000038  efl=00010046  eip=00009094
eax=00000011  ebx=00002820  ecx=00000038  edx=000008ee
esi=34009601  edi=00035f98  ebp=40000000 esp=04c25310
cs=0008  ds=0000 es=0000    fs=0000  gs=0000  ss=0010
cs:ip=0f 00 d9 ba 00 a0 00 00-36 0f b7 05 13 04 00 00
       c1 e0 0a 2d 00 10 00 00-29 d0 b1 33 51 50 68 02
ss:esp=6d 9f c7 cf ef ce cd 92-ad 75 c5 fb 5f a2 7d fe
       e3 87 d9 9a b7 bf 57 3d-fa bd e9 f7 fd fd df fb
BTX halted
FreeBSDで起動できるようにするために費やす努力を考えると、NetBSDを使うことを考えたほうが目的に合っていると思うようになりました。

そもそもの目的はdynabook SS SX/15Aに入っているWindows Vistaが来年4月でサポートが終わるため、その後も利用できるOSを入れることです。またBSD系のOSをノートPCに入れて使ってみることで経験値を上げることも目的にしています。

BSD系OSというと、FreeBSD、NetBSD、OpenBSDが著名ですが、他にもPC-BSDとか386BSD(22年ぶりに更新されたらしい)などもあります。

まず386BSDはFreeBSDやNetBSDの元祖ですが 「今更感」があるので、候補から落とします。PC-BSDは64ビット環境専用になってしまっているので、これも候補から落ちます。FreeBSD・NetBSD・OpenBSDはどれでも良いのですが、FreeBSDが最もメジャーと思われるので候補として準備を進めてきました。しかし起動できず手詰まりとなっています。

NetBSDがUSBメモリから起動できたので候補にしようと思っていますが、OpenBSDでも同様のことができるなら候補になります。もう少し両者を調べてみようと思います。

NetBSD/i386 7.0.1ならdynabookで起動できた

dynabook SS SX/15でFreeBSD/i386を動かそうとしていますが調子が良くありません。問題箇所はなんとなく見えてきましたが、解決への道は遠そうで先が思いやられます。

気分転換のためにNetBSD/i386を試してみることにしました。NetBSD-7.0.1-i386-install.img.gzをUSBメモリに入れてみることにします。gzipで圧縮されているので、展開してからddを使います。
root# gzip -d NetBSD-7.0.1-i386-install.img.gz
root# dd if=NetBSD-7.0.1-i386-install.img of=/dev/da1 bs=1M conv=sync
このUSBメモリを使って起動してみると、実にあっさりとNetBSD/i386が立ち上がりました。FreeBSDでのあの苦労は何だったのかと思うほど、何の問題もありません。

USBメモリとUSB-HDDの両方を繋いだまま電源をいれると、USB-HDDが優先されてしまうようで、USBメモリのNetBSDが起動しませんでした。そこでUSBメモリだけを繋いで起動させた、NetBSDのメニューが出たあたりでUSB-HDDを繋げば良いようです。まだインストールはしていませんが、インストーラのシェルでdmesgを見たところ、USB-HDDがsd0、USBメモリがsd1として認識されていました。

2016/10/10

「BTX halted」発生時のレジスタダンプから場所を特定

「BTX halted」が発生した時のレジスタダンプは以下のとおりでした。
-
int=0000000d  err=00000038  efl=00010046  eip=00009094
eax=00000011  ebx=00002820  ecx=00000038  edx=000008ee
esi=24009601  edi=00025f98  ebp=40000892 esp=fedfbe3a
cs=0008  ds=0000 es=0000    fs=0000  gs=0000  ss=0010
cs:ip=0f 00 d9 ba 00 a0 00 00-36 0f b7 05 13 04 00 00
       c1 e0 0a 2d 00 10 00 00-29 d0 b1 33 51 50 68 02
ss:esp=ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
       ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
BTX halted
EIPが9094を指しているということはBTX関連だと考えられます。objdumpを使ってbtx.oを逆アセンブルしてみると次のようになりました。
0000008c <init.8>:
  8c:   31 c9                   xor    %ecx,%ecx
  8e:   b1 10                   mov    $0x10,%cl
  90:   8e d1                   mov    %ecx,%ss
  92:   b1 38                   mov    $0x38,%cl
  94:   0f 00 d9                ltr    %cx
  97:   ba 00 a0 00 00          mov    $0xa000,%edx
  9c:   36 0f b7 05 13 04 00    movzwl %ss:0x413,%eax
  a3:   00
  a4:   c1 e0 0a                shl    $0xa,%eax
  a7:   2d 00 10 00 00          sub    $0x1000,%eax
これに該当するのは/usr/src/sys/boot/i386/btx/btx/btx.Sの次の辺りです。
 init.8:         xorl %ecx,%ecx                  # Zero
                movb $SEL_SDATA,%cl             # To 32-bit
                movw %cx,%ss                    #  stack
/*
 * Launch user task.
 */
                movb $SEL_TSS,%cl               # Set task
                ltr %cx                         #  register
                movl $MEM_USR,%edx              # User base address
                movzwl %ss:BDA_MEM,%eax         # Get free memory
                shll $0xa,%eax                  # To bytes
                subl $ARGSPACE,%eax             # Less arg space
objdumpで表示されている94番地以降のバイト列が、レジスタダンプにおけるCS:IPの表示と一致しているので、おそらくここが問題の箇所でしょう。「ltr %cx」でGPF(int=0d)が発生したということになると思います。

この辺りのコードにバグがあるとは思えないし、ここを通過しないとプロテクトモードに遷移できないのでFreeBSD/i386が立ち上がらないということになってしまいます。

問題解決に向けて少し前進した気がしますが、まだまだ解決には遠い感じです。

2016/10/09

「BTX halted」の対処方法を検討

USB-HDDから起動しようとする(もしかするとUSBメモリの場合も同様かもしれないが)と「BTX halted」になる現象に対処する方法を検討します。実際に対処しようとすると、さらに別の問題が出てくるかもしれません。予め先の展開を見込んでおくことも大切ですが、あまりにも先回りして可能性を排除してしまうと手も足も出なくなりますので、注意しておきたいと思います。

今のところ次のような対処方法を考えています。
  1. レジスタダンプが出ているので、これを手掛かりにして問題の発生個所を突き止める。
  2. dynabook SS SX/15AのBIOS設定を変えてみて、現象が消える設定を探る。
  3. GPTで切ったパーティションをMBR(+bsdlabel)に換えて様子をみる。
GPTの場合はセクタ0にpmbrがあり、そこからgptbootを呼び出します。これがMBRだとセクタ0にはmbr(boot0)があり、そこからboot1を経由してboot2を呼び出します。gptbootにしろboot2にしろ、いずれにせよBTXを使うので問題は解消しない可能性が高いような気がします。

gptbootを探るため基本的な情報を確認しておきます。
  • gptbootのソースは/usr/src/sys/boot/i386/gptbootにあります。 
  • /usr/src/sys/boot/i386/btx/btx/btx.SをBTXKERNとして参照しています。この定義は/usr/src/sys/boot/i386/Makefile.incにあります。
BTXについては次のような情報があります。
  • UNIX MAGAZINEの連載をまとめた『FreeBSDのブートプロセスをみる』(白崎博生、2006年、アスキー) があります。該当記事は本誌2003年12月号に掲載されたものです。
  • FreeBSD Architecture Handbook」に「1.6. The BTX Server」があります。

2016/10/08

USB-HDDにFreeBSD/i386をインストールするも起動できず

dynabook SS SX/15AをWindows VistaからFreeBSD/i386に移行する準備における核心である「FreeBSD/i386をUSB-HDDにインストール」をおこないました。結論から言うと、インストールは上手くいきましたが、起動できませんでした。

USBメモリの調査でGPTについて理解が深まったため、インストールは順調でした。まずdynabook SS SX/15AにUSB接続のCD-ROMとHDDを繋いでおきます。FreeBSD/i386 10.3-RELEASEのISOイメージをCD-Rに焼いて起動させました。インストールの詳細は省略しますが、パーティションは次のように切りました。GPTでは従来のように細かくパーティションを切らない流儀のようなのですが、ここでは伝統的なパーティション構成にしてみました。ブートパーティションはgptbootが入るのに十分な容量しか確保していません。
da0  932GB GPT
  da0p1  128MB  ms-reserved
  da0p2  256GB  ms-basic-data
  da0p3  32KB  freebsd-boot
  da0p4  8.0GB  freebsd-swap  none
  da0p5  4.0GB  freebsd-ufs  /
  da0p6  4.0GB  freebsd-ufs  /var
  da0p7  2.0GB  freebsd-ufs  /tmp
  da0p8  30GB  freebsd-ufs  /usr
  da0p9  20GB  freebsd-ufs  /home
インストールに要した時間は1時間ほどでした。インストール過程を振り返るために細かく記録をとっていたので時間がかかりましたが、インストールに集中すればもっと早く終わるでしょう。

インストール後にUSB-HDDをWindows10に繋ぎ、HxDでセクタ0を覗いてみるとpmbrが入っていませんでした。そこで先ほどのインストールCD-Rでブートし「Live CD」機能を利用して、次のようにpmbrを書き込みました。
root@~ # gpart bootcode -b /boot/pmbr da0
bootcode written to da0
さてワクワク(ドキドキ?)しながらUSB-HDDをdynabookに繋いで起動してみましたが、レジスタダンプと共に「BTX halted」が出てしまいました。これはUSBメモリから起動しようした時にも嫌というほど見た画面です。

起動できなかったのは残念ですが、すくなくとも次の事は確認できました。
  • セクタ0のpmbrを起動することはできた。
  • pmbrはブートパーティションを見つけることができて、そこにあるgptbootに制御を渡すことができた。
つまりdynabookはUSB-HDDから起動できるということです。その後でうまくいかないのは、また別の問題だと考えるべきでしょう。問題は絞れてきたというべきか、まだまだ先は遠いというべきか、ともかく解決するための方向性は見えているようです。

Hobbyist OpenVMS AlphaのPAKを更新しました

Personal Workstation 500auに入れてあるOpenVMS Alpha 7.2のHobbyistライセンスの有効期限が明日に迫っているので更新しました。

ライセンスはHewlett Packardの「OpenVMS Hobbyist Registration」から申請します。去年とはURLが微妙に異なっていました。ここから申請を送ると直後に自動返信メールが届きます。1営業日でPAKが届くはずなのですが、数日待っても送られてきませんでした。

待っていれば届くのか、催促した方が良いのか迷うところです。もっとも催促すると言っても何処にコンタクトすれば良いのでしょうか。そこで参考情報が集まっていると思われる「OpenVMS Hobbyist Program」にあるフォーラム「Hobbyist Licensing」にある「Alpha License PAK's」の中の「Getting Hobbyist licenses and Media」の情報を参考にしました。ここにある「How do I get Hobbyist License Keys?」 という質問の回答に「the backup link for getting license keys」というURLがあります。ここから再度申請してみたら、翌日PAKがメールで送られてきました。

結局どちらの申請が有効だったのかわかりませんが、送られてきたメールの申請内容の記録を見ると、どうも最初の申請に対する応答のような気がします。

ともかくPAKが手に入ったので、これをOpenVMS Alphaに転送して登録しておきます。去年はまだTCP/IPが使えなかったので相当苦労しました。しかし今はftpで一発です。
$ tcpip show version

  DIGITAL TCP/IP Services for OpenVMS Alpha Version V5.0
  on a Digital Personal WorkStation  running OpenVMS V7.2   
送られてきたPAKをSYS$SCRATCHにコピーしました。このファイルはコマンド・プロシージャ形式なので、拡張子まで指定すれば、先頭に@をつけて直接実行できます。
$ dir sys$scratch:hobbyist-use-only-va.txt

Directory SYS$SYSROOT:[SYSMGR]

HOBBYIST-USE-ONLY-VA.TXT;1            

Total of 1 file.
$ @sys$scratch:hobbyist-use-only-va.txt
%SHOW-I-NOLICMATCH, no licenses match search criteria
%LICENSE-I-DISABLED, ACMS HOBBYIST-VA-KEY12497-151009 has been disabled
%LICENSE-I-DISABLED, ACMS HOBBYIST-VA-KEY12497-161007 has been disabled
%LICENSE-I-UNLOADED, ACMS   has been unloaded
%LICENSE-I-ENABLED, ACMS HOBBYIST-VA-KEY12497-161007 has been enabled
%LICENSE-I-LOADED, DEC ACMS was successfully loaded with 0 units
%SHOW-I-NOLICMATCH, no licenses match search criteria
(略)
%SHOW-I-NOLICMATCH, no licenses match search criteria
%LICENSE-I-DISABLED, X500-DIRECTORY-SERVER HOBBYIST-VA-KEY12497-151009 has been disabled
%LICENSE-I-DISABLED, X500-DIRECTORY-SERVER HOBBYIST-VA-KEY12497-161007 has been disabled
%LICENSE-I-UNLOADED, X500-DIRECTORY-SERVER   has been unloaded
%LICENSE-I-ENABLED, X500-DIRECTORY-SERVER HOBBYIST-VA-KEY12497-161007 has been enabled
%LICENSE-I-LOADED, DEC X500-DIRECTORY-SERVER was successfully loaded with 0 units
Completion of PAK Load Command File....
$
これでライセンスの更新は終わりました。



2016/10/07

なぜ「GEOM: da1: GPT rejected -- may not be recoverable」というメッセージが出るのか?

FreeBSD/i386 FreeBSD-10.3-RELEASE-i386-memstick.imgをUSBメモリに入れてdynabook SS SX/15Aで起動されると次のようなエラーになります。
-
int=0000000d  err=00000038  efl=00010046  eip=00009094
eax=00000011  ebx=00002820  ecx=00000038  edx=000008ee
esi=24009601  edi=00025f98  ebp=40000892 esp=fedfbe3a
cs=0008  ds=0000 es=0000    fs=0000  gs=0000  ss=0010
cs:ip=0f 00 d9 ba 00 a0 00 00-36 0f b7 05 13 04 00 00
       c1 e0 0a 2d 00 10 00 00-29 d0 b1 33 51 50 68 02
ss:esp=ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
       ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
BTX halted
先頭行にプロンプトらしきものが出ていますが、これは何が出しているのでしょうか。もしgptbootが出しているのであれば、pmbrからgptbootに制御が移るところまでは動いたことになります。

作成したUSBメモリに何か問題があるのか、それともdaynabookの方に問題があるのか判断するためにVirtualBoxの仮想PC上でどうなるのか確かめてみました。

VirtualBoxでUSBメモリからブートさせるのは簡単ではないようですが 「Boot your USB Drive in VirtualBox」の情報を参考にして、起動させることに成功しました。しかし何かメッセージが出力されながら無限ループしている雰囲気です。結局ブートできないのですが、少なくとも表示されているメッセージを確認しておきたいところです。もしかすると何かの参考になるかもしれません。

メッセージが出てもあっという間に変わってしまうので、どのようにして記録すれば良いのか困ってしまいました。VirtualBoxには「ビデオキャプチャー」という機能があるようなので、これでメッセージが出ているあたりを記録してみました。出来たファイルはFirefox上で視ることが出来ました。その結果、次のようなメッセージが何度も繰り返し表示されていたことが分かりました。
gptboot: primary GPT table checksum mismatch
gptboot: backup GPT table checksum mismatch
gptboot: unable to load GPT
取得したイメージをUSBメモリに書き込むのはddを使いましたし、またファイルを取得した後でSHA256のチェックサムを確認しているので、ファイルが壊れているとも思えません。どうしてこのようなメッセージが出てくるのか謎です。

このUSBメモリを既存のFreeBSD/i386のマシンに挿してみたところ、さらに怪しげなメッセージが出ました。
ugen0.3: <I-O DATA> at usbus0
umass1: <I-O DATA USB Flash Disk, class 0/0, rev 2.00/11.00, addr 3> on usbus0
umass1:  SCSI over Bulk-Only; quirks = 0x8100
umass1:3:1:-1: Attached to scbus3
da1 at umass-sim1 bus 1 scbus3 target 0 lun 0
da1: <I-O DATA USB Flash Disk 1100> Removable Direct Access SPC-2 SCSI device
da1: Serial Number ****************
da1: 1.000MB/s transfers
da1: 14827MB (30365696 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>
GEOM: da1: corrupt or invalid GPT detected.
GEOM: da1: GPT rejected -- may not be recoverable.
GEOM: diskid/DISK-****************: corrupt or invalid GPT detected.
GEOM: diskid/DISK-****************: GPT rejected -- may not be recoverable.
corrupt or invalid GPT detected」で、しかも「may not be recoverable」だそうです。これはもうお手上げです。

リリースされているファイルを書き込んだUSBメモリで試してみるのは、ひとまず止めておこうと思います。

FreeBSD-10.3-RELEASE-i386-memstick.imgの構造

dynabook SS SX/15AがUSBメモリから起動できることが分かりましたが、そうであるならFreeBSD/i386のイメージをUSBメモリに書いたものが起動できないのは何故なのでしょうか。FreeBSD-10.3-RELEASE-i386-memstick.imgの構造を著名なバイナリエディタであるHxDで調べてみました。

このイメージはGPTでパーティションを切ったディスクイメージになっていることが分かりました。
  • 最初のセクタはMBRとの互換性があります。MBRの4つのパーティションのうちGPTでは1つだけ使って残りを未使用としておくのが流儀のようです。
  • パーティションタイプにEE(GPT protective MBR)が入っており、パーティションのセクタ数は1,350,917だったので659MBという事になります。
  • セクタ1はGPTヘッダ情報です。パーティションの1エントリあたりのバイト数は128でした。ということは、1セクタには4エントリが格納できます。よく言われているのが「GPTでは128エントリまで扱える(だからMBRの4エントリよりも圧倒的に多い)」 ということですが、このディスクイメージは汎用性を求める必要はないと割り切っており、パーティションエントリ数には4が指定されていました。これによりパーティションエントリに必要なセクタ数は1つだけで済みます。
  • セクタ2にパーティションエントリが格納されいて、実際に使われているのは3つでした。
  • 最初にエントリはFreeBSD Boot partitionのGUIDが指定されていて、割り当てられている容量は16Kでした。
  • 2番目のエントリはFreeBSD UFS partitionで、容量は674,416Kでした。
  • 3番目のエントリはFreeBSD Swap partitionで、容量は1,024Kとなっていました。

従来のMBRを使った場合のFreeBSDのブートプロセスでは、MBRにあるboot0がboot1を呼び出し、さらにboot2からloaderへと制御が移っていきます。ところがGPTを使うとMBRにはpmbrが格納されます。pmbrはFreeBSD Boot partitionを探し、そこに入っているファイルを(内容の確認をせず)メモリにロードして制御を移そうとします。インストールができていれば、そこにはgptboot(8)があるはずですが、細かいことを言うとpmbrではその確認をしていません。

FreeBSD Handbookでは「12.2. FreeBSD Boot Process」で次のように書かれています。
 Note:  FreeBSD provides for booting from both the older MBR standard, and the newer GUID Partition Table (GPT). GPT partitioning is often found on computers with the Unified Extensible Firmware Interface (UEFI). However, FreeBSD can boot from GPT partitions even on machines with only a legacy BIOS with gptboot(8). Work is under way to provide direct UEFI booting.
将来的にはUEFIなマシンでGPT起動をおこなう方向のようですが、現時点ではBIOSしかない旧いPCの存在を無視できないと思うので、そのようなマシンでもGPTで起動できるような仕組みにしているようです。

以上の調査により、このイメージをUSBメモリに書き込めばdynabook SS SX/15AでもFreeBSD/i386が起動できるはずだと思います。ところが起動できずエラーになってしまうわけなので、何が障害になっているのか調べてみようと思います。

調査してみれば、その過程の中で多くの知見が得られるでしょう。そしてFreeBSD/i386のインストールができるようになれば万々歳です。反対に意外に手強く解決には至らなかったとしたら、従来どおりMBRでパーティションを切ってbsdlabelでディスクを構成すれば良いでしょう。

2016/10/06

USBメモリから起動したUbuntu 16.04

dynabook SS SX/15Aの環境をWindows VistaからFreeBSD/i386に入れ換えるための準備作業を続けています。内蔵HDDを壊さないようにするため、USBメモリとかUSB-HDDにOSを入れてブートできるようにしたいと思っています。

しかし根本的な問題ですが、果たしてdynabook SS SX/15AはUSBメモリやUSB-HDDから起動できるのでしょうか。Webで検索してみても一般論としては出来そうだとされているようですが、具体的にdynabook SS SX/15Aで出来るのか出来ないのか確実な情報は見つけられていません。

状況から推測するしかありませんが、USBメモリからはブートできるようです。
  • Paragon Backup & Recovery 2011 (Advanced) Freeで作成した起動用USBメモリは、dynabook SS SX/15Aで使えました。
  • UNetbootinを利用してUbuntu 16.04_Liveを入れたUSBメモリを作成してみましたが、きちんとブートできました。
  • ただしUNetbootinでFreeBSD 8.0のUSBメモリを作成しましたが、起動しようとはするものの、いきなりレジスタダンプが表示されて「BTX halted」というメッセージが出てしまいます。OSは立ち上がりませんでしたが、起動はするようですから、dynabook SS SX/15AがUSBメモリから起動できると思っておいて良いでしょう。
これに対してUSB-HDDからブートできるのかは今のところ実績がありません。そもそも出来ないのか、何か手順が足りないから起動しないのか、分からない状態です。少なくともFreeBSD/i386 10.3-RELEASEをUSB-HDDにインストールすることまでは出来ています。

試行錯誤を続けていますが、闇雲に歩き回るだけだと、目標(dynabook SS SX/15AにFreeBSD/i386を入れる)に向かって進んでいるのか、脇道にそれてしまっているのか分からなくなるので、注意しておきたいと自戒しています。

調査の一環としてUSBメモリ入れたUbuntu 16.04を使ってみました。あまりにも簡単にUSBメモリに入り、しかもあっさり起動してUbuntuが使える状態になったことに驚きました。Ubuntuを使ったのは初めてなので、どのように操作したら良いのか経験値が足りませんが、勘で操作してみました。試しに無線LANの設定をおこなってみたところ、ほとんんど何の苦労もなく無線LAN接続ができてしまったことには驚きを禁じ得ません。

約1年前にSONY vaioに入れたNetBSD/i386を使って同じく無線LAN接続を試みましたが、かなり苦労した挙句に結局接続できませんでした。このvaioはdynabookよりも古いモデルなので、それが悪かったのか、それともNetBSDだからなのか、理由はわかりません。

この事例をもって、NetBSDよりもUbuntu(もしくはLinux)の方が優れていると即断するわけにはいかないでしょう。「使うために無用な苦労がない」という意味では優れていますが、「技術的」に優れているかどうかは別問題です。そうであったとしても、一般利用者が無用な苦労をしなくてすむように作られているという点では、開発者コミュニティやユーザ・コミュイニティのありかたには学ぶべき点が多いと感じます。

2016/10/05

Windows 10 Anniversary Updateが来た

ずいぶん長く待たされましたが、ようやくWindows 10 Anniversary UpdateがWindows Updateで配信されました。さっそく更新を適用しましたが、シャットダウンを始めてから再びログイン画面に戻ってくるまで1時間半ほどかかりました。そしてログインした後で、何故か画面が固まってしまい20分ほど待ってみたものの反応がありませんでした。無闇に電源を落とすのは良くないのですが、ディスクアクセスもしていなさそうだったので強制的に電源を落として、立ち上げ直しました。とりあえず無事に更新されたようです。

この更新は1607版というようですが、去年の1511版の時と同じく、自分の使い勝手を考えて微調整してあった設定の一部が初期化されていました。おそらく今後リリースされる更新でも同様だと思うので、更新終了後におこなった設定をメモして残すようにしています。

 今回のリリースの目玉は何といってもWindows Subsystem for Linuxです。まだベータ版扱いですが、利用するには次の手順を踏みます。
  1. 「開発者向け機能を使う」にある「開発者モード」を有効にする。
  2. 「Windowsの機能の有効化または無効化」にある「Windows Subsystem for Linux (Beta)」を有効にする。
  3. コマンドラインからbashを起動させて個人環境を設定する。

個人環境の設定をおこなうと620M程度のディスク領域を消費するようです。この時のメッセージは以下のようになりましたが、途中で文字化けがおこりました。
C:\Users\FURUSAWA>bash
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: furusawa
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました
環境が間もなく開始されます...
ドキュメントを参照できる場所: https://aka.ms/wsldocs
furusawa@TABATA:/mnt/c/Users/FURUSAWA$ exit
exit

C:\Users\FURUSAWA>
WSLは今のところベータ扱いですが、早く正式扱いになって欲しいと思います。

「気象庁が発表する長期予報における確率表現」の続き

8月26日付の記事で気象庁が発表する長期予報で使われている確率表現について考えてみました。その時に一例として使ったのが「平成28年8月24日発表の関東甲信地方3か月予報」です。そこでは9月の気温は、平年より低い確率が10%、平年並である確率が30%、平年よりも高い確率が60%とされていました。それから時が過ぎて10月になり、9月の実際の気温がどうであったのか統計値が発表されています。それを確認してみましょう。

気象庁のWebにある情報を参照すると、東京の2016年9月の平均気温は24.4℃だったことがわかります。また平年並とされるのは「東京 9月 平年値(日ごとの値) 主な要素」 によると21.9~23.8℃です。先日の記事では23.2~24.4℃と書きましたが統計値の求め方に誤りがあったようです。

9月の平均気温24.4℃は、平年並21.9~23.8℃よりも高くなりました。この結果は長期予報があたったという意味なのでしょうか。

長期予報では「平年より低い確率が10%、平年並である確率が30%、平年よりも高い確率が60%」とされたのであって、「9月は平年よりも高くなるでしょう」と予報されたわけではありません。もしこのように予報されたのであれば、実際に9月の平均気温は平年並よりも高かったのですから、予報があたったと言えると思います。

「9月は平年よりも高い確率が60%でしょう」という長期予報に対して、実際に9月の平均気温が平年並よりも高かったときに、これは予報があたったと言ってよいものなのか判断がつきません。確率表現で表された予報をどのように評価したらよいのか、勉強しようと思います。

2016/10/02

Windows UpdateにKB890830が何度も現れる

dynabook SS SX/15AのWindows Vistaを起動してWindows Updateを確認すると「重要な更新が1つある」と表示されます。月次更新のように延々と待たされたりはしません。その更新をインストールすると、無事に成功します。

ところが、その直後に再び「重要な更新が1つある」と表示されます。それをインストールすると、無事に成功します。そして更に「重要な更新が1つある」と表示されるという謎の状況に陥ります。インストール履歴をみると、この状況を引き起こしているのはKB890830です。Webで検索してみると何かと問題を引き起こしているようです。

KB890830というのは「悪意のあるソフトウェアの削除ツール」とのことで、ディスク内を検索して悪意のあるソフトウェアが「あれば削除する」そうです。

もしかすると月次更新で気が遠くなるほど時間がかかっていた原因は、このツールがディスクをひたすら検索していたせいなのかもしれません。

2016/10/01

dynabook SS SX/15Aのハードウェア情報を記録

Windows Vistaが入っているdynabook SS SX/15AをFreeBSD/i386に入れ換えようと細々と作業を続けています。Vistaのサポートが終了するまで約半年となりました。OSやアプリケーションのインストールは一気呵成に片付けてしまうべきだとは思いますが、闇雲にインストールすると失敗した場合にリカバリ出来なくなりますし、仮に成功したとしても何が上手くいった要因だったのか評価できないでしょう。迂遠かもしれませんが事前の準備をしっかり整えておこうと思います。

基礎的な情報としてdynabook SS SX/15Aのハードウェア情報を記録しておこうと思います。FreeBSD/i386をインストールしたらXも入れようと思っていますが、ハードウェアがXで認識されなかったり、誤認識されたりした場合に、Windowsではどうだったかが貴重な情報源になるはずです。

ハードウェア情報を取得するためにWindowsで利用できるツールは3種類あるようです。
  • systeminfo
  • msinfo32
  • DxDiag
同じハードウェアに対して実行するわけなので似たような情報が得られます。それぞれツールごとに特徴があるとは思いますが、その差異は気にせず、3種類のツールの結果を保存しておこうと思います。

「カー・SOS 蘇れ!思い出の名車4」番組進行の定型パターン

National Geographic Channelで放送中の「カー・SOS 蘇れ!思い出の名車4」を視ていると、以前にも指摘しましたが、番組進行が一定のパターンに則っているような気がしています。まるでTVで人気番組だった水戸黄門では印籠を出す時間が決まっていたのではないかと疑われていたのを彷彿させます。

過去の放送でも似たようなシーンはありましたが、今回ほど定型的ではなかったように思います。今回(シーズン4)の番組進行の雛形は、こんな感じです。
  1. 整備の達人:ファズ・タウンゼントとパーツ集めの天才:ティム・ショーがSOSを発した依頼者のところに向かう車の中のシーンから番組が始まる。車中で二人は引き取りに向かう車が如何に素晴らしいかを語り合う。
  2. SOSを発した依頼者(車の所有者の妻、または息子か娘) と落ち合い、修復する車を見せてもらう。ここでファズは車の状態を確認し、ティムは依頼者から車と所有者の関わりを聞き出す。ここで依頼者は所有者が重い病に侵されていることを語る。また番組スタッフが偽物の番組をでっちあげて所有者と接触し、所有者と車との関わりを聞き出す。
  3. 車を工場に持ち帰り修復を開始する。たいていは錆びだらけで、内装も傷んでいるので、外せるパーツを全て外し骨組み状態になる。
  4. ティムは足りないパーツを探して、業者や知人を訪ねまわる(放映されていることが台本なしの真実であるとしたら相当阿漕な手段を弄しているようにみえるが、実際には打ち合わせ済みではないだろうか)。
  5. 依頼者が途中経過を見るため工場を訪問する。バラバラに分解されている車を見て激しく驚く(依頼された車は錆びだらけだったのだから、板金作業をするためにはバラバラにしないと無理なんじゃないだろうか。それとも魔法で綺麗になると考えているのだろうか)。ここで修復した車を所有者に返却する「サプライズ」の相談が行われる。
  6. 短い修復期間にもかかわらず問題が次から次へとおこるが、なんとか予定された日までに完了する。
  7. サプライズで所有者に返す前に、依頼者と友人たちに修復された車を内覧させる。新車同様に修復された車を見て依頼者は感謝の言葉を告げる。
  8. 所有者にサプライズで車を返却すると、見違えるように綺麗になった自分の愛車を見て涙をこぼす。そしてカーSOSのタグがつけられたキーが所有者に渡される。
  9. 修復された車に所有者と依頼者が同乗し、昔を懐かしみながら運転を楽しんでいるシーンで番組が終わる。
このパターンで番組が進行するので、視ていて次にどうなるのか予想がつきます。今回はシーズン4ですから、過去の番組制作を通して進行の展開が決まってきたのかもしれませんが、新鮮味のないワンパターン番組になってしまう危険性もあります。

このシリーズのシーズン5があるのか分かりませんが、もしあるなら、どんな番組になるのか期待と不安で待ちたいと思います。