コンピュータ

アップグレードの怪

NetBSD 8.1(のまま放置されていた)から 9.0_STABLE にアップグレード:

  1. 新しい 9.0_STABLE のカーネルを /netbsd として置きます。
  2. /stand/amd64/9.0/modules 以下に新しいカーネルモジュールを置きます。
  3. 再起動します。

すると、何故か NetBSD 8.1 が起動します(???)
(8.1 のカーネルを削除しても亡霊のように 8.1 が起動します)

$ strings /netbsd | grep 9.0_STABLE
とか実行すると、間違いなく /netbsd は 9.0_STABLE のものです。
いったい何が起きているのでしょうか?

wordpress:「プラグインは wp_version_check() を無効化してアップデートを防ぎました。」がプラグインと関係なかった件

wordpress(これを書いた時点では 5.4.2)の wp-admin/site-health.php で、

1件の致命的な問題
バックグラウンド更新が想定通りに動作していません [セキュリティ]

といわれる。セキュリティ致命的な問題だというので早急に対処する。
(自動更新はできてるけどねえ?)

uname -a は冗長か?

わりとどうでもいいネタ。

uname -a を実行すると、

$ uname -a
NetBSD xxx.ceres.ne.jp 9.0_STABLE NetBSD 9.0_STABLE (GENERIC) #0: Fri Apr  3
02:59:31 JST 2020  est@xxx.ceres.ne.jp:/xxx/amd64/obj/sys/arch/amd64/compile
/GENERIC amd64

NetBSD とか 9.0_STABLE とか、2回出てきて冗長な気がする。

NetBSD が悪いわけではなく、BSD 系全般(とか Darwin とか)こんな感じだったはずだが(※)。

変数初期化の重要性

とある(比較的広く使われている)C言語のプログラムをデバッグしていたのだけれど、なんか初期化されていない変数を使っていそうな感じの箇所が多い。

そこで、全体をgcc -Wmaybe-uninitializedでチェックしてみると、結構出てきた。
(デバッグの話はこれで終わり。)

もっとも、maybeだけあって、必ず妥当な警告を出すわけではなくて、

Waves Mercury に入ってない Plugins

「Waves 全部入り」だったはずの Mercury、今となっては入ってないのが結構あって、
https://www.minet.jp/brand/waves/mercury/
にも「*以下のバンドルおよびプラグインはMercuryには収録されていません。」とか書いてあるんだけど、更新されてなくて他にも入ってないのがあるという話題。

(まあ、私はL3しか持ってないんだけど。)

ImportError: cannot import name ‘PILLOW_VERSION’ from ‘PIL’

PyTorchというか、torchvisionを使おうとしただけで、こんなエラーが:

ImportError: cannot import name 'PILLOW_VERSION' from 'PIL'

Pillow 7.0.0でPILLOW_VERSIONが削除されたのが原因らしい。

PILLOW_VERSION has been removed. Use __version__ instead.

https://pillow.readthedocs.io/en/stable/releasenotes/7.0.0.html

とはいえ、ライブラリ内で使われているし、いろいろ理由があってライブラリのバージョンを下げたりライブラリを直接修正するのもできない。

で、

import PIL

PIL.PILLOW_VERSION = PIL.__version__

from torchvision import ...

とかいうアレなworkaroundを思いついた(動く)んだけど、これでいいのかPython。

-Walloc-size-larger-than= とは?

特定のコードを特定のコンパイルオプションつきでコンパイルするとこんなのが出る

warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]

例えば NetBSD の src/lib/libc/gen/asysctl.c を -O3 で(というか -O2 -fsplit-paths でも)コンパイルすると出る。
通常は -O2 なので出ない。

NetBSD 8.0 と 8.1 以降で npf の挙動が違う?

NetBSD/amd64 8.0_STABLE(以下 8.0)
NetBSD/amd64 8.1_STABLE(8.1)
NetBSD/amd64 9.0_BETA(9.0)

こんな感じの、中からの通信はプロトコルを問わないけれど、外からはsshだけ受け付ける npf.conf

$ext_if = "bge0" # or "re0" or ...
$ext_v4 = inet4($ext_if)
group "external" on $ext_if {
        pass stateful out final all # rule (1)
        pass in final proto tcp to $ext_v4 port ssh # rule (2)
}
default {
        pass final on lo0 all
        block all # rule (3)
}

だけど、8.1, 9.0 だと外から ssh で接続できない。