FreeBSD 11.1-RELEASE のスケジュールが出ている2017年04月27日 18時09分04秒

FreeBSD 11.1-RELASE のスケジュールが更新されている。一週間以上前にアナウンスは既にあったようだ。二、三日前に FreeBSD のサイトを見たときはなかったような記憶だが。

三ヵ月程でリリースされる予定だ。ndis の件は見ておいた方が良さそうだ。

Action Expected Actual Description
Initial release schedule announcement - 14 March 2017 Release Engineers send announcement email to developers with a rough schedule.
Release schedule reminder 21 April 2017 - Release Engineers send reminder announcement e-mail to developers with updated schedule.
Code slush begins 12 May 2017 - Release Engineers announce that all further commits to the stable/11 branch will not require explicit approval, however new features should be avoided.
Code freeze begins 26 May 2017 - Release Engineers announce that all further commits to the stable/11 branch will require explicit approval. Certain blanket approvals will be granted for narrow areas of development, documentation improvements, etc.
BETA1 builds begin 2 June 2017 - First beta test snapshot.
BETA2 builds begin 16 June 2017 - Second beta test snapshot.
BETA3 builds begin * 23 June 2017 - Third beta test snapshot.
releng/11.1 branch 30 June 2017 - Subversion branch created; future release engineering proceeds on this branch.
RC1 builds begin 30 June 2017 - First release candidate.
stable/11 thaw 2 July 2017 - The code freeze on the stable/11 branch is lifted.
RC2 builds begin 7 July 2017 - Second release candidate.
RC3 builds begin * 14 July 2017 - Third release candidate.
RELEASE builds begin 21 July 2017 - 11.1-RELEASE builds begin.
RELEASE announcement 26 July 2017 - 11.1-RELEASE press release.
Turn over to the secteam - - releng/11.1 branch is handed over to the FreeBSD Security Officer Team in one or two weeks after the announcement.

FreeBSD に xen の EN2017年04月16日 11時19分34秒

xen にも修正が入っていた。三つ程修正が入っている。

対象は全てで、11.0-RELEASE と 10.3-RELEASE が現在サポートされているリリース。

FreeBSD の ntp Security Advisory2017年04月15日 12時05分39秒

FreeBSD に入っている ntp の複数の脆弱性がFreeBSD-SA-17:03.ntpにて修正されている。

現在サポートされている全てのリリースが対象で、11.0-RELEASE と 10.3-RELEASE がそれに値する。ntpd を落すことが出来る。ntpd を使っているのであれば更新に値する。

フレームワークとしての make の二重コロン2017年04月12日 12時27分55秒

二重コロンは clean ターゲットのように、一つの動作を分けて書くこと以外にも、フレームワークとして使うことも出来る。make では include を使うことにより、他の make ファイルを読むことが出来る。

例えば、make check や make install といった、各々のターゲットを準備しておくと、make のデフォルトの動作として使うことが出来て、それぞれに敵した動作は後で追加出来る。

% cat uyota-framework.mk 
check ::
        true
install ::
        true
% cat Makefile 
target :
        @echo Hello
include uyota-framework.mk
% make install
true
% gmake install
true

最近は、Jenkins やその他の解析ツールなどで、特定のシェルスクリプトや make のターゲットを順次実行するようなフレームワークなどがあちこちで見られる。新規のものだったら、一つずつ追加なので良いが、既にあるものを大量に対応するのには手間と時間が掛かる。そんなときに、共通 make ファイルに追加することで、利用可能なターゲットから順次対応していく時などに、この方法が役に立つ。

make で一重コロンを用いて複数回動作を記述するのは間違っている2017年04月11日 12時01分47秒

make の二重コロンは動作を複数に分けて記述する事が出来る。同じことを一重コロンで行うと、make によって動作が変わるようだ。
% cat Makefile 
target :
    @echo Hello
target :
    @echo Goodbye
% make
make: "Makefile" line 4: warning: duplicate script for target "target" ignored
make: "Makefile" line 2: warning: using previous script for "target" defined here
Hello
% gmake
Makefile:4: warning: overriding recipe for target 'target'
Makefile:2: warning: ignoring old recipe for target 'target'
Goodbye
まあ、元々間違った記述なわけで、どちらの実装が正しいとかはないだろう。BSD make は最初のターゲットを、GNU make は最後のターゲットを実行している。

ただし、どちらともエラーとして動作を中断していない。つまり、この間違った記述をしてしまうと、特定の環境では意図した動作をするのに、移植しようとしたら突如変な動作をするようになる典型である。

make で二重コロンと一重コロンは共存できない2017年04月09日 14時09分06秒

二重コロンを用いて複数回動作を記述できるので便利なようだが、「二重コロンと一重コロンは共存できない」という制約がある。
% cat Makefile 
target :
    @echo Hello
target ::
    @echo Goodbye
% make
make: "Makefile" line 3: Inconsistent operator for target
make: "Makefile" line 4: warning: duplicate script for target "target" ignored
make: "Makefile" line 2: warning: using previous script for "target" defined here
make: Fatal errors encountered -- cannot continue
% gmake
Makefile:3: *** target file 'target' has both : and :: entries.  Stop

全ての make ファイルが自分の支配下にあれば、全て二重コロンにしてしまえば問題はないのだが、他人の make ファイルを基にしたルールを記述していると、この問題は簡単には回避できない。このターゲットを二重コロンにしてくれと頼んで変えてもらえたら何とかなるが、拒否されたら他の名前のターゲットを使うくらいしか回避策はない。

make で二重コロンを用いて複数回動作を記述する2017年04月07日 11時05分31秒

make ファイルに依存関係を記し、その条件を満たすときの動作を記述するにはコロンを用いる。なお、以下の実行環境は FreeBSD 11.0-RELEASE だが、SunOS 等に入っている古い make から GNU make まで、共通の動作だ。
% cat Makefile 
target :
    @echo Hello
% make
Hello
% gmake
Hello
なお、echo の前の「@」は実行時のコマンドの出力を抑制する。まあ、echo を二回しても無駄だと言うわけだ。

実は、コロンを二回使って、ダブルコロンでも動作する。

% cat Makefile 
target ::
    @echo Hello
% make
Hello
% gmake
Hello

さて何が違うかと言うと、一重コロンでは、依存関係と実行動作を一度のみ記述する規則になっている。つまり、同じターゲットを二回書いたら間違えた書式と言うことになる。例えば、.cpp ファイルから .o ファイルを生成するのに、一つは g++ を使うように書かれていて、もう一つ同じルールで llvm を使うように書かれていた場合だ。make 側はどちらのコンパイラを使って欲しいのか、記述者の意図は全く分からない。コンパイラだけでなく、コンパイラオプションなどにも同様の事が言える。

それに引き換え、二重コロンは同じターゲットを複数回に分けて記述する規則になっている。一つのターゲットを意図的に、複数回に分けて記述するのだ。良くある例としては、clean ターゲット等があげられる。コンパイル時の生成物の .o を消すコマンド、特定のライブラリや実行ファイルを各々消すコマンドなどは分けて記述すると可読性も増す。

なお、複数の二重コロンは記述された順番に実行される。

% cat Makefile 
target ::
    @echo Hello
target ::
    @echo Goodbye
% make
Hello
Goodbye
% gmake
Hello
Goodbye

若干注意点があるので、何回かに分けて書く。

壊れたのは Windows と外付けのハードディスク2017年03月05日 16時29分40秒

Windows を壊して外付けのハードディスクも壊した。今回壊れたのは結局ハードディスク二つの MBR だった。

Windows の方は起動不可能だが、CD から起動した FreeBSD で見るとパーティションは壊れていない。そこで、このディスクの MBR のバックアップは古かったので、パーティション構成が違っていたはず。そのため、MBR を修復する前に、FreeBSD で第三と第四パーティションのデータを複製。

その後、古い MBR のバックアップで、元に戻す。FreeBSD の dd で 512 バイトのみ。

$ dd if=rv515-ada0.mbr of=/dev/ada0 bs=512 count=1
この後、案の定、第三と第四パーティションは見えなくなったが、取り敢えず Windows は起動するようになり、第二パーティションのデータは無事だった。

外付けのディスクは、バックアップはとても古いものしか無かった。こちらは、比較的最近 FreeBSD を起動できる様に再構成したものだった。どうもこちらは、パーティションテーブルも壊したようで、後部のパーティションの復帰は無理そう。古いバックアップの MBR を戻しても、第一パーティションのあったデータは無事見えるようになったが、それ以降のパーティションは無理だった。システムの複製が入っていただけなので、被害は軽微。

壊れた外付け USB ディスクの様子を FreeBSD で見る2017年03月02日 14時09分18秒

取り敢えず、前回破壊した外付け USB ディスクを FreeBSD に繋げると、こうなる。
da2 at umass-sim2 bus 2 scbus5 target 0 lun 0
da2: <I-O DATA HDPS-U > Fixed Direct Access SCSI-2 device
da2: Serial Number 000902A1541C
da2: 40.000MB/s transfers
da2: 305245MB (625142448 512 byte sectors)
da2: quirks=0x2<NO_6_BYTE>
GEOM_PART: integrity check failed (da2, MBR)
GEOM_PART: integrity check failed (ufsid/4cff0efe10087de1, MBR)
GEOM_PART: integrity check failed (diskid/DISK-000902A1541C, MBR)
ディスクの先頭領域が壊れているようだ。
% ls /dev/da2*
/dev/da2
ls でもパーティションは表示されていない。

FreeBSD には、この整合性の点検を無効にする方法がある。MBR 等を破壊してしまったディスクからの復旧に、役に立つ。root ユーザで。

$ sysctl kern.geom.part.check_integrity=0
% ls /dev/da2*
/dev/da2        /dev/da2s1      /dev/da2s2      /dev/da2s3      /dev/da2s4
これで、mount やら ntfs-3g などで、ディスクの中のファイルを見られる様になる。

なお、このディスクを繋いでも、起動画面が出ることも無い。

Windows が壊れた要因は良く分からない2017年03月01日 15時39分40秒

Windows が起動しなくなったが、実は再現環境が今でも分からない。Windows 7 が入っているのは、この Samsung の機種一機のみ。Windows Vista や Windows XP、それ以前の Windows が入っていた機種なら、HP や Toshiba などが複数台ずつあったが、間違ったボタンを押してもキーキーキーと不快音がなる程度で、起動しなくなった事は無い。

Windows 7 の問題なのか、Windows 7 から変わった LBA 等の起動機構に寄るものなのか、FreeBSD のブートローダが Windows 7 とは相容れないのか、はたまた Samsung 機種だからかなのかは分からない。

取り敢えず、この機械に、外付けのハードディスクを繋いで FreeBSD を起動するときには一段と気を付けなければいけないようだ。特に F5。

この機種に、FreeBSD のブートローダの入った USB ディスクで、F5 を押すと壊れるのは USB ディスクと内蔵ディスクの二台。MBR や LBA の情報が入っている、先頭 512 バイトが破壊される様だ。

BIOS で CD-ROM から起動するようにしたり、他の外付けの USB ディスクを繋ぎ直して、FreeBSD を起動することは出来る。ディスクも起動情報を直せばデータは無くならない。