FreeBSD ^/stable/12 ブランチが作成された2018年10月19日 21時14分31秒

FreeBSD の SVN に stable/12 が作成された。ここ数日間控えられていたコミットが head に再開されて、ライブラリなどの更新なども既に入っている。

今後 FreeBSD 12.0-RELEASE に成りうるものを追うのであれば、 svn switch ^/stable/12 で追従先を変更。

FreeBSD ^/stable/12 ブランチが作成された2018年10月19日 21時14分31秒

FreeBSD の SVN に stable/12 が作成された。ここ数日間控えられていたコミットが head に再開されて、ライブラリなどの更新なども既に入っている。

今後 FreeBSD 12.0-RELEASE に成りうるものを追うのであれば、 svn switch ^/stable/12 で追従先を変更。

FreeBSD 12 から rsh が消える ので net/bsdrcmds2018年10月01日 12時59分38秒

ほぼ、一年程前に、FreeBSD CURRENT から rsh と rlogin の r コマンドが削除された。これは FreeBSD 12.0-RELEASE になる。

最近は、仮想環境なども利用するので、閉じたネットワークを構築しその間で rsh 系を使って通信することがむしろ増えた。そんなわけで、この r コマンド削除は一手間になる。rsync や zfs send 等で大容量を送るときは ssh の負荷が大きすぎる。

この r コマンド削除を受けて、net/bsdrcmds が ports に作成された。これを入れることで、rsh が使えるようになる。

rshd と rlogind は /usr/local/sbin に入る。inetd を使って起動する場合は、/etc/inetd.conf を書き換える必要がある。

shell   stream  tcp     nowait  root    /usr/libexec/rshd       rshd
login   stream  tcp     nowait  root    /usr/libexec/rlogind    rlogind
とあるのを
shell   stream  tcp     nowait  root    /usr/local/sbin/rshd       rshd
login   stream  tcp     nowait  root    /usr/local/sbin/rlogind    rlogind
と書き換える必要がある。

この ports からの rshd でも pam は有効になっている。/etc/pam.d/rsh で設定を出来る。

FreeBSD の システムコールと IPv6 の EN が二つずつ2018年09月28日 11時53分59秒

FreeBSD-EN-18:09.ip は SA-18:10.ip の修正が未完全だったために引き起こされた問題。断片化された IPv6 のパケットが正しく復元されずに破棄されてしまう問題。sysctl net.inet6.ip6.maxfrags=0 で回避することは出来る。対象は FreeBSD 11 系のみ。

FreeBSD-EN-18:10.syscall は freebsd4_getfsstat システムコール でメモリの割り当てに失敗したときに、未割当のメモリを free してしまう問題。FreeBSD 4.x 時のバイナリを実行したときに露呈するバグなので、よほど古いバイナリを使い回していない限りは影響は無いだろう。対象は FreeBSD 11 系のみ。

FreeBSD-EN-18:11.listen は IPv6 の listen システムの実装に問題があり、各種変数を正しく戻さないために、かーねるをクラッシュさせる可能性がある。回避策は無い。

FreeBSD-EN-18:12.mem は getcontext と swapcontext のシステムコールが、未完全なメモリの初期化の為に、以前に使われた値がユーザ空間に洩れる問題。対象は FreeBSD 10 系と 11 系の両方。回避策は無い。

一億人の英文法の本がいい2018年09月22日 13時20分34秒

東進ブックスから出ている「一億人の英文法」が話す英語を元に英文法が解説されていて読みやすく分かりやすい。ISBN978-4-89085-527-8。

話しながら説明を追加していく英語の特徴が良く書かれていて、例文もそれぞれの特徴をとらえている。基本的な英文法を網羅しつつ、説明しているし、母国語として感じる微妙な違いなどの細かい例なども出ていて分かりやすい。特に、the の使い方や、時制の引っ張られ方などは良く書かれている。

個人的に再確認出来て良かったのは。「ピリオドとカンマは引用符内。コロン、セミコロンは外。! と ? は引用発言の場合は中。」

amd64 の FreeBSD 12.x の kernel は ifunc が必要2018年09月18日 11時39分15秒

FreeBSD 12.0-RELEASE も近付いてきている。ALPHA-6 に入り、既にテストを行なっている人、そこそろ試してみようかという人などがいるとは思う。11 系からの更新は幾つかの注意点がある。

まずは、ifunc。11 系から上げる人は、buildkernel 時に、CURRENT を追っていて、11 系のシステムに上書きインストールする人は installkernel 時に見掛けると思う。私は、NFS mount 越しの installkernel 時に出てきた。

$ uname -r
11.2-RELEASE-p2
$ mount -t nfs amd64-current:/usr/src /usr/src
$ mount -t nfs amd64-current:/usr/obj /usr/obj
$ make installkernel -C /usr/src
make[2]: "/usr/src/sys/conf/kern.pre.mk" line 126: amd64 kernel requires linker ifunc support
さて /usr/src/sys/conf/kern.pre.mk を覗いてみると、
.if (${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386") && \
    defined(LINKER_FEATURES) && ${LINKER_FEATURES:Mifunc} == ""
.error amd64/i386 kernel requires linker ifunc support
.endif
.if ${MACHINE_CPUARCH} == "amd64"
LDFLAGS+=       -Wl,-z max-page-size=2097152 -Wl,-z common-page-size=4096 -Wl,-z -Wl,ifunc-noplt
.endif
の部分がこれに当たる。

コードを見るより、/usr/src/UPDATING を開く。

20180510:
        The amd64 kernel now requires a ld that supports ifunc to produce a
        working kernel, either lld or a newer binutils. lld is built by default
        on amd64, and the 'buildkernel' target uses it automatically. However,
        it is not the default linker, so building the kernel the traditional
        way requires LD=ld.lld on the command line (or LD=/usr/local/bin/ld for
        binutils port/package). lld will soon be default, and this requirement
        will go away.
該当部分を発見
$ make installkernel LD=ld.lld -C /usr/src
今度は問題なく installkernel が進んだ。

zfs の 簡単な分割は zfs create と mv2018年09月17日 13時29分10秒

先日に zfs を分割するのに zfs snapshot と zfs clone を使ったが、単純な方法であれば、zfs create で新しいファイルシステムを作り、mv ファイルを動かしても大丈夫な事に気がついた。

mv で動かしてしまうと、間違えた時に mv で戻すと、スナップショットとは別の複製が出来るのでディスクが追加で消費される。しかし、最終的には古いスナップショットは全部消すのが目的なので、mv の方が楽かも知れない。

zfs clone と zfs send で非ミラーファイルシステムを分割2018年09月15日 16時48分38秒

ZFS のファイルシステムを分割したかったのだが、zfs 自体には分割の機能は無い。zpool だと、ミラー型のプールは分割出来るが、こちらはプール単位になってしまい、全てのファイルシステムが複製される。

今回、分割したいと思った理由はバックアップ先の zpool の容量が足りなくなったから。バックアップをとらなくても何とかなるファイルを複製するのを止めたかったのだが、ファイルシステムに混ざっていたので単純な削除では無理だからだ。

zfs clone はファイルシステムを複製する機能だ。これは snapshot を作成し、そこからの差分を元にファイルシステムを利用する機能。これを使えば、元のファイルシステムを複数に分割して使うことが出来る。しかし、元のスナップショットがバックアップを止めたいファイルを保持したままになるので今回の意図には沿わない。

そこで、今回 zfs snapshot と zfs clone で一時的にファイルシステムを複製。そこから対象外のファイルを削除した後に、zfs send と zfs receive で全く別のファイルシステムとして作ることにした。

今回の例として、BSD 関連のファイルをダウンロードしてあった download/BSD ファイルシステムを各々に分けて download/FreeBSD と download/NetBSD の zfs ファイルシステムにする。

$ zfs list -t all
NAME           USED  AVAIL  REFER  MOUNTPOINT
download       421M   411M    23K  /mnt/download
download/BSD   421M   411M   421M  /mnt/download/B
$ ls /mnt/download/ZFS/*
BSD:
FreeBSD NetBSD

FreeBSD:
FreeBSD-11.2-RELEASE-i386.vmdk.xz

NetBSD:
netbsd-8.0-i386-boot-com.iso
実験用に小さめのプールを準備して、各々に一つずつファイルを置いた。
$ zfs snapshot download/BSD@today
$ zfs clone download/BSD@today download/freebsd
$ rm -rf /mnt/download/freebsd/NetBSD
$ zfs snapshot download/freebsd@only
$ zfs send download/freebsd@only | zfs receive download/FreeBSD@only
BSD ファイルシステムから snapshot と clone で freebsd とし、そこから NetBSD を削除。zfs send と receive で元の BSD ファイルシステムとの関係を切断する。

zfs send と receive で一つ目のファイルシステムを処理し終えた状態。

$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                640M   192M    23K  /mnt/download
download/BSD            421M   192M   421M  /mnt/download/BSD
download/freebsd         13K   192M   219M  /mnt/download/freebsd
download/freebsd@only      0      -   219M  -
download/FreeBSD        219M   192M   219M  /mnt/download/FreeBSD
download/FreeBSD@only      0      -   219M  -

NetBSD の方は BSD ファイルシステムの名前の変更した後に、FreeBSD を消す。

$ zfs destroy download/BSD@today
$ zfs rename download/BSD download/NetBSD
$ rm -rf /mnt/download/NetBSD/FreeBSD
$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                422M   409M    23K  /mnt/download
download/FreeBSD        219M   409M   219M  /mnt/download/FreeBSD
download/FreeBSD@only    13K      -   219M  -
download/NetBSD         202M   409M   202M  /mnt/download/NetBSD
これで download/BSD を download/FreeBSD と download/NetBSD に分割できた。

もっと手間の掛かるファイルの選別が必要なら clone と promote を用いて、もっと安全に操作することも出来る。NetBSD のファイルの選別も独立したファイルシステム上で行なって、最終確認が終った後に。古い BSD ファイルシステムを削除する手順にすれば、間違ってファイルを消してもやり直しが効く。

FreeBSD elf の SA と lazyfpu の EN が出た2018年09月14日 10時42分18秒

セキュリティ勧告が一つと、エラッタが一つ出ている。

FreeBSD-SA-18:12.elfはプログラムを開始する時の問題。

ELF は実行形式ファイルを示すヘッダーで、どのメモリから実行を開始すれば良いなどの多々の情報が入っている。ELF ヘッダーの処理の点検に欠陥があり、本来ならば実行に移すべきではないヘッダーであっても、ファイルの実行を始めてしまい、カーネルをクラッシュさせたり、カーネルメモリを覗くことができてしまう。

対象はサポートされている全てのバージョンで回避策はない。パッチを当てる必要がある。

FreeBSD-EN-18:08.lazyfpu は FreeBSD-EN-18:07.lazyfpu の修正に問題があり、それを修正するため。 今回の修正は、11系向けだが、10。4にも準備される予定。

リースは三年が基本の様だ2018年09月10日 12時13分31秒

今回リースについて、販売員の人に聞いたのだが、リースは基本的に三年だそうだ。あと、銀行の融資の関係と期限上、三年よりも若干長い物があるらしい。今回は 39 ヵ月のリースが最安値だった。

妻は三年間の縛りが気になったらしく、二年間程度が良いと言っていたので、値段を聞いてみた。値段が随分上がり、三年契約でリースをして違約金を払った方が安いぐらいの値段。これでは、わざわざ二年にする理由も無さそうだ。

値段表を出してきて、最初の頭金と月々の支払額が掛かれていた。毎月の支払額は頭金の分だけ減る感じ。この様な関係だったら、毎月の支払いにリース期間分だけ均した方が良さそうな値段設定だったので、頭金は一番低いものを選んだ。車種を変えたり、付いているオプションが違う車を選ぶと値段も若干か割る。去年の在庫を選ぶのだ一番値段が変わった。

あと、年間走行距離もリースの契約と値段に大きく影響するようだ。特に走行距離を越えた場合の違約金がとても高い。リースの契約も、保険の更新などが必要になるので、二時間から三時間はかかる。子供を連れて行くと大変な作業になりそうだ。