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 で設定を出来る。

各種コンパイラで C 言語の整数型リテラル値とマクロ定数の論理和を試す2018年10月02日 11時12分00秒

FreeBSD の LLVM で C 言語の整数型リテラル値とマクロ定数の論理和を試して警告が出たので、コンパイラが警告出来なくなるコードを追ってみた。LLVM 以外のコンパイラはわざわざ定数の論理和を警告しないので、こちらも警告は出ないだろう。

まずは、AIX の xlc コンパイラから。

aix% cat logical-and-macro-int.c 
#define TWO 2
int main()
{   
    return 1 && TWO;
} 
aix% xlc logical-and-macro-int.c 
aix%

次は Solaris の cc コンパイラ。

solaris% cat logical-and-macro-int.c 
#define TWO 2
int main()
{   
    return 1 && TWO;
} 
solaris% cc logical-and-macro-int.c 
solaris%  

次は、Linux の gcc。

linux% cat logical-and-macro-int.c
#define TWO 2
int main()
{   
    return 1 && TWO;
} 
linux% cc logical-and-macro-int.c
linux%

どのコンパイラも警告を出さずにコンパイルする。

前回次回

FreeBSD の LLVM で C 言語とC++ の小数型リテラル値の論理和を試す2018年10月03日 12時06分32秒

FreeBSD の LLVM で C 言語の整数型リテラル値の論理和を試したのは今回への布石。「&&」の論理和は基本的に整数値を取るはずなのだが、浮動小数点などを渡した場合に、エラーになるのか、警告が出るだけで済むのかを試したかった。論理和などは整数型に型変換出来るだろうが、シフトなどに小数型を渡された時の動作を見たいのだ。

そこで、まずは FreeBSD 11.2-RELEASE 上の LLVM で実験。

freebsd% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
freebsd% cc logical-and-double.c
logical-and-double.c:3:17: warning: implicit conversion from 'double' to '_Bool'
      changes value from 0.2 to true [-Wliteral-conversion]
    return 1 && .2;
             ~~ ^~
1 warning generated.
LLVM は double 型を _Bool 型に変換すると警告。_Bool 型ときて気になったのが C++。興味深いのは整数型リテラル値の論理和を試した時は、「warning: use of logical '&&' with constant operand]と警告されたのに、浮動小数点型の定数を渡すと、[-Wconstant-logical-operand] は警告されない。

C++ では bool 型に変換されるのだろうか。

freebsd% cat logical-and-double.cpp
int main()
{   
    return 1 && .2;
}
freebsd % c++ logical-and-double.cpp
logical-and-double.cpp:3:17: warning: implicit conversion from 'double' to
      'bool' changes value from 0.2 to true [-Wliteral-conversion]
    return 1 && .2;
             ~~ ^~
1 warning generated.
との事で、bool 型に変換された。

おまけで、c ファイルを c++ でコンパイルした時の結果。

freebsd% c++ logical-and-double.c
c++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
logical-and-double.c:3:17: warning: implicit conversion from 'double' to 'bool'
      changes value from 0.2 to true [-Wliteral-conversion]
    return 1 && .2;
             ~~ ^~
1 warning generated.
c ファイルを c++ としてコンパイルしていると警告を出している。.2 が bool 型に変換されているのも証拠。

前回次回

FreeBSD の LLVM で C 言語の小数型リテラル 0.0 の論理和を試す2018年10月04日 11時17分40秒

FreeBSD の LLVM で C 言語の小数型リテラル値の論理和を試した時に 0.2 が真偽型に変換されるとの警告がでた。そうなると不思議に思えてくるのが 0.0 でも同じ警告が出されるのだろうか。

FreeBSD 11.2-RELEASE の LLVM で実験。

freebsd% cat logical-and-double0.c
int main()
{   
    return 1 && .0;
}
freebsd% cc logical-and-double0.c
freebsd%
浮動小数点型の .0 は何の警告も無し。

前回次回

各種コンパイラで C 言語とC++ の小数型リテラル値の論理和を試す2018年10月05日 11時37分17秒

FreeBSD の LLVM で C 言語とC++ の小数型リテラル値の論理和を試すで、FreeBSD の LLVM の動作を確認したので、今回は、それ以外を一気に。

まずは、復讐を兼ねて FreeBSD 11.2-RELEASE の llvm の出力。

freebsd% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
freebsd% cc logical-and-double.c
logical-and-double.c:3:17: warning: implicit conversion from 'double' to '_Bool'
      changes value from 0.2 to true [-Wliteral-conversion]
    return 1 && .2;
             ~~ ^~
1 warning generated.
LLVM のみ、この様な警告を表示し、他のコンパイラは何も出さない。

AIX の xlc コンパイラで。

aix% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
aix% xlc logical-and-double.c 
aix%

Solaris の cc コンパイラ。

solaris% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
solaris% cc logical-and-double.c 
solaris%

最後に、Linux の gcc コンパイラ。

linux% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
linux% gcc logical-and-double.c
linux%

LLVM が一番厳しくコードを検査する様だ。

前回次回

各種コンパイラで C 言語の小数型リテラル 0.0 の論理和を試す2018年10月07日 12時22分39秒

FreeBSD の LLVM で C 言語の小数型リテラル 0.0 の論理和を試す で、FreeBSD の LLVM の動作を確認したので、今回は、それ以外を一気に。各種コンパイラで C 言語とC++ の小数型リテラル値の論理和を試した時に、警告を出してきたのは、LLVM だけだった。その LLVM も 0.0 には無言だったので、他のコンパイラが警告を出すとは思えない。

まずは、復習を兼ねて FreeBSD 11.2-RELEASE の llvm の出力。

freebsd% cat logical-and-double0.c
int main()
{   
    return 1 && .0;
}
freebsd% cc logical-and-double0.c
freebsd%
何の警告も出さない。

AIX の xlc コンパイラで。

aix% logical-and-double0.c
int main()
{   
    return 1 && .0;
}
aix% xlc logical-and-double0.c 
aix%
予想道理に無言。

Solaris の cc コンパイラ。

solaris% logical-and-double0.c
int main()
{   
    return 1 && .0;
}
solaris% cc logical-and-double0.c 
solaris%
予想道理に無言。

最後に、Linux の gcc コンパイラ。

linux% logical-and-double0.c
int main()
{   
    return 1 && .0;
}
linux% gcc logical-and-double0.c
linux%
これまた、予想道理に無言。

次回

息子が学校のキャンプで宿泊2018年10月10日 17時26分16秒

息子が現地校の学校でキャンプに出かけた。今晩は帰ってこない。学校の六年生が一泊二日のキャンプで泊まって来る。寝袋を持参して、早めに学校を出発する。息子は結構前から楽しみにしていた。

最近は肌寒くなってきたので、少々寒さが心配だったがキャビンに宿泊するようで、テントほど外気温の影響はないようだ。

後輪が自宅近くでパンク2018年10月17日 20時54分23秒

久しぶりに自転車の後輪のタイヤがパンクした。ジョージワシントン橋を降りて辺りの頃だろう。橋を降りた後に北上する上り坂を登っている間に、タイヤが緩くなっていくのが感じられた。

ここまで来ると、後自宅まで五分前後。空気が抜けつつあるタイヤで、こぐのが大変になり、重くなりつつあるのを感じながら自宅へ急いだ。

仕事での急な対処が必要なのと外が暗いので、修理は明日の朝になるだろう。取り敢えず、タイヤが自宅まで持った。

今度は修理中にパンク2018年10月18日 12時26分10秒

先日パンクしたの修理していた。最近は、日が暮れるのが早くなっているので、平日に修理を行うのは結構大変。薄暗い中での作業は、見落としが増えて失敗しやすい。

分かってはいるのだが、他に先に処理しない作業があると、自転車の修理はどうしても次になってしまう。二年近く乗っていたので、結構タイヤがすり減っていた。まだ、雪の季節は少し先だが、次の修理まで伸ばすと少しながすぎる。買い置きがあったタイヤがあったので、パンクのついでにチューブに加えて、タイヤの交換も始めてしまった。

残念ながら、既に薄暗い中での作業になっていたので、タイヤの回転方向を間違えてしまった。タイヤの回転方向を直した時には既に外は真っ暗。倉庫の電気は点けても暗くて、細かい作業向けではない。タイヤとフレームの間にチューブが挟まってしまっていた。気が付かずにタイヤを自転車に取り付け、空気を入れたところ、この挟まって出来てしまったゴム風船に全ての空気が流れ込み、大きな音を発てて破裂してしまった。

既に予備のチューブも付き、気力も尽きたため、修理は諦めて、翌日に予備のチューブを買ってから、再度交換することにした。流石に今回は脱力感が強かった。

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

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

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