FreeBSDのパッケージ管理は、pkg upgrade を使っているので管理がとっても簡単なのですが、最近 pkg でメンテナンスした後のデイリーセキュリティーレポートがおかしなことに気付きました。
下のように、mismatched checksums で更新完了したはずであるパッケージのファイルの一部(赤字)が見つからないという行が含まれています。
Checking for packages with mismatched checksums:
ruby-2.6.5,1: missing file /usr/local/bin/erb
ruby-2.6.5,1: missing file /usr/local/bin/irb
ruby-2.6.5,1: missing file /usr/local/bin/rdoc
ruby-2.6.5,1: missing file /usr/local/bin/ri
ruby-2.6.5,1: missing file /usr/local/man/man1/erb.1.gz
ruby-2.6.5,1: missing file /usr/local/man/man1/irb.1.gz
ruby-2.6.5,1: missing file /usr/local/man/man1/ri.1.gz
ruby-2.6.5,1: missing file /usr/local/man/man1/ruby.1.gz
本当に、インストールされたはずのファイルがインストールされていないの?
> ll /usr/local/bin/erb ls: /usr/local/bin/erb: そのようなファイルまたはディレクトリはありません
う〜ん、なぜかインストールに失敗している模様。
一つ一つ存在しないファイルをインストルするわけにも行かないので、ruby-2.6.5.1 を消して、インストールし直すことにしました。
削除コマンドを発行してみると、portupgrade との依存関係があるようなので、丸々消して、あとで portupgrade を再インストールすることにしました。
# pkg delete ruby
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 3 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
ruby-2.6.5,1
portupgrade-2.4.16,2
ruby26-bdb-0.6.6_7
Number of packages to be removed: 3
The operation will free 39 MiB.
Proceed with deinstalling packages? [y/N]: y
[1/3] Deinstalling portupgrade-2.4.16,2...
[1/3] Deleting files for portupgrade-2.4.16,2: 100%
[2/3] Deinstalling ruby26-bdb-0.6.6_7...
[2/3] Deleting files for ruby26-bdb-0.6.6_7: 100%
[3/3] Deinstalling ruby-2.6.5,1...
[3/3] Deleting files for ruby-2.6.5,1: 0%
ruby-2.6.5,1: missing file /usr/local/bin/erb
[3/3] Deleting files for ruby-2.6.5,1: 0%
ruby-2.6.5,1: missing file /usr/local/bin/irb
[3/3] Deleting files for ruby-2.6.5,1: 0%
ruby-2.6.5,1: missing file /usr/local/bin/rdoc
[3/3] Deleting files for ruby-2.6.5,1: 0%
ruby-2.6.5,1: missing file /usr/local/bin/ri
[3/3] Deleting files for ruby-2.6.5,1: 6%
ruby-2.6.5,1: missing file /usr/local/man/man1/erb.1.gz
[3/3] Deleting files for ruby-2.6.5,1: 6%
ruby-2.6.5,1: missing file /usr/local/man/man1/irb.1.gz
[3/3] Deleting files for ruby-2.6.5,1: 6%
ruby-2.6.5,1: missing file /usr/local/man/man1/ri.1.gz
[3/3] Deleting files for ruby-2.6.5,1: 6%
ruby-2.6.5,1: missing file /usr/local/man/man1/ruby.1.gz
[3/3] Deleting files for ruby-2.6.5,1: 100%
実際に削除コマンドでもファイルが見つからないと出て来ます。手動で見つからないんだから、そうなって当たり前ですけどね。
続いてインストール。
# pkg install portupgrade Updating FreeBSD repository catalogue... Fetching meta.txz: 100% 944 B 0.9kB/s 00:01 Fetching packagesite.txz: 100% 6 MiB 1.7MB/s 00:04 Number of packages to be installed: 3 The process will require 39 MiB more space. 8 MiB to be downloaded. Proceed with this action? [y/N]: y [1/3] Fetching portupgrade-2.4.16,2.txz: 100% 92 KiB 94.6kB/s 00:01 [2/3] Fetching ruby-2.6.5,1.txz: 100% 7 MiB 1.6MB/s 00:05 [3/3] Fetching ruby26-bdb-0.6.6_7.txz: 100% 336 KiB 344.6kB/s 00:01 Checking integrity... done (0 conflicting) [1/3] Installing ruby-2.6.5,1... [1/3] Extracting ruby-2.6.5,1: 100% [2/3] Installing ruby26-bdb-0.6.6_7... [2/3] Extracting ruby26-bdb-0.6.6_7: 100% [3/3] Installing portupgrade-2.4.16,2... [3/3] Extracting portupgrade-2.4.16,2: 100%
再インストールは、数分で完了。
削除前に確認したファイルを確認してみたのが以下。
# ll /usr/local/bin/erb
lrwxr-xr-x 1 root wheel 5 11月 2 10:33 /usr/local/bin/erb@ -> erb26
あ〜、リンクになっているのね。
セキュリティーレポートにある missing になっていたのは、そういう理由だった訳ね。ファイルが存在していないのではなく、リンクが切れていたってこと。放置していても大丈夫だったんですが、毎日エラーっぽいレポートが届くっていうのもうれしくないので、直したのは良かったと思います。
ruby のように複数のシステムコマンドが依存するコマンドがアップデートされる時、旧バージョンとの重複期間があるので、その間に何度もメンテナンスしていたためかな〜。
rubyコマンドとの依存関係で、ruby25とruby26 が共存している期間があると ruby とタイプした時にどっちが動くかはシンボリックリンクで制御するので、その関係という印象です。
下は、別のサーバーのものです。
# ll /usr/local/bin/ruby* lrwxr-xr-x 1 root wheel 6 10月 3 10:44 /usr/local/bin/ruby@ -> ruby26 -rwxr-xr-x 1 root wheel 4328 10月 5 06:09 /usr/local/bin/ruby25* -rwxr-xr-x 1 root wheel 4672 10月 3 10:44 /usr/local/bin/ruby26*
mismatched checksum のレポートが届いて中身が missing の場合は、気にしなくてもいいということのようです。