FreeBSD 12のApache 2.4.39がunion semun ickふんだららでビルドエラー
FreeBSD 12.0-RELEASEへの更新中、www/apache24のports更新で以下のようなビルドエラーが起きた。
unixd.c:245:25: error: variable has incomplete type 'union semun'
union semun ick;
^
unixd.c:245:19: note: forward declaration of 'union semun'
union semun ick;
^
1 error generated.
*** [unixd.lo] Error code 1
union semunが定義されとらんとな…。
ググってみたら既にバグチケが上がっていた。メンテナ曰く、当該箇所を削除するか全部のトップレベルのportsをリビルドせよとの事だが、後者は面倒でござる。というか、“全てのトップレベル”の範囲がわからんかったので、ソース修正でどうにかする。
/usr/ports/www/apache24/work/httpd-2.4.39/os/unix/unixd.cの240行目付近、#if !APR_HAVE_UNION_SEMUNによってunion semunの定義がなくなっているようなので、#ifと#endifをコメントしてやる。
apr_os_proc_mutex_t ospmutex; //#if !APR_HAVE_UNION_SEMUN ///★コメントアウト! union semun { long val; struct semid_ds *buf; unsigned short *array; }; //#endif ///★コメントアウト! union semun ick; struct semid_ds buf = { { 0 } };
あとは/usr/ports/www/apache24の下でmake installすればビルドは通る。……が、起動しようとするとSegmentation faultで落ちるぅorz。
見た感じdevel/apr1関係のコードのような気がするので、portmaster apr –force-configでaprをリビルド。その後、改めてportmaster apache24 –force-configしたら無事ビルドも通って問題なく起動した。
FreeBSDにConnectXのユーティリティを入れるとファイル所有者が書き換えられる?
FreeBSD 12.0-RELEASEへの更新作業時に発覚した、システム系ディレクトリの所有者が謎の6151に書き換わってる問題の続き。
こんな感じでユーザーデータ置き場以外でroot以外が所有者のディレクトリを列挙してみた。
# find / -type d ! -uid 0 ! -path "*/home/*" ! -path "*/zdata/*" ! -path "*/zbackup/*" -print0 | xargs -0 stat -f "%u %g %N" | tee ~/non_root_owner_dirs.txt
すると、以下のディレクトリの所有者が6151になっていた。
6151 0 /etc 6151 0 /etc/mft 6151 0 /etc/mft/fwtrace_cfg 6151 0 /usr 6151 0 /usr/bin 6151 0 /usr/include 6151 0 /usr/lib 6151 0 /usr/lib/bash_libs 6151 0 /usr/lib/mft 6151 0 /usr/lib/mft/mtcr_plugins 6151 0 /usr/lib/mft/python_tools 6151 0 /usr/lib/mft/python_tools/mlxmcg 6151 0 /usr/lib/mft/python_tools/mst 6151 0 /usr/lib/mft/python_tools/mstdump 6151 0 /usr/lib/mft/tcl 6151 0 /usr/lib/mft/tcl/bin 6151 0 /usr/lib/mft/tcl/lib 6151 0 /usr/lib/mft/tcl/lib/tcl8.4 6151 0 /usr/share 6151 0 /usr/share/man 6151 0 /usr/share/man/man1 6151 0 /usr/share/mft 6151 0 /usr/share/mft/mlxconfig_dbs 6151 0 /usr/share/mft/mstdump_dbs
これらディレクトリの中を覗いてみると、いくつかのファイルも6151になっている。そして6151のやつらの大半の最終更新日が2018年11月23日だった。
書き換わってるファイル達と更新日から察するに、どうもConnectX-3のユーティリティのインストールが原因のような気がする。頼むよMellanoxさん…。
幸い、6151以外に怪しい所有者は見当たらなかったので、以下のコマンドで所有者をrootに戻して一件落着(元の所有者が本当にrootだったかどうかの確証はないけど…)
# find / -uid 6151 ! -path "*/home/*" ! -path "*/zdata/*" ! -path "*/zbackup/*" -print0 | xargs -0 chown root
FreeBSD 12.0-RELEASEのデフォルトのPerlをPerl 5.28に直す
FreeBSD 12.0-RELEASEに更新後、Samba 4.8を更新しようとしたら怒られた。
# portmaster samba48
===>>> Currently installed version: samba48-4.8.5_1
===>>> Port directory: /usr/ports/net/samba48
===>>> This port is marked IGNORE
===>>> Invalid perl5 version 5.24
===>>> If you are sure you can build it, remove the
IGNORE line in the Makefile and try again.
Perl 5.24は不適切とな。例によって
/usr/ports/UPDATING
を見てみると、システムデフォルトのPerlバージョンは5.26 (20180330)を経て今は5.28(20181213)となっている模様。
20161103の記述に従い、Perlのバージョンを更新する。
まずは/etc/make.confにDEFAULT_VERSIONS+= perl5=5.28を追加。
# echo 'DEFAULT_VERSIONS+= perl5=5.28' >> /etc/make.conf
Perl 5.24を5.28で置き換える。
# portmaster -o lang/perl5.28 lang/perl5.24
正常に終了したら、上記DEFAULT_VERSIONSは消しておk。
そののち、Perl 5.24の共有ライブラリに依存するパッケージを更新。
# portmaster -f `pkg shlib -qR libperl.so.5.24`
p5-なパッケージも更新しといた方が安全かも?
# portmaster p5-
これで無事Samba 4.8のビルドが通った。
FreeBSD 11.2-RELEASEをFreeBSD 12.0-RELEASEに更新
遅ればせながら家鯖をFreeBSD 11.2-RELEASEから12.0-RELEASEへと更新した。
まずは現在の環境を最新にしておく(あまりに古いとメジャーバージョンアップに失敗することがあるため)
$ freebsd-version -ku 11.2-RELEASE-p7 11.2-RELEASE-p7 # freebsd-update fetch # freebsd-update install # reboot
ここで、ブートローダまでは起動するがカーネル読み込みでブラックスクリーンになる謎現象に2日ほど悩まされた。結局BIOS設定をデフォルト状態に戻したら直ったが、原因は恐らくデュアルCPUからシングルCPUに変えた事と思われる。うちの鯖は無駄にデュアルCPUだったので(ドヤァ
最新になったか確認。
$ freebsd-version -uk 11.2-RELEASE-p10 11.2-RELEASE-p10
12.0-RELEASEへ更新する。 </code> # freebsd-update -r 12.0-RELEASE upgrade Looking up update.FreeBSD.org mirrors… 3 mirrors found. Fetching metadata signature for 11.2-RELEASE from update2.freebsd.org… done. (略) To install the downloaded upgrades, run “/usr/sbin/freebsd-update install”. </code>
システムのインストール
# freebsd-update install Installing updates... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates.
「再起動して再度freebsd-update installせよ」とのことだが、ここで必ずサードパーティのkext(vboxdrvとか)を一旦無効化する。さもないと、再起動後のカーネル読み込みでクラッシュする場合がある。
# emacs /boot/loader.conf hogehoge_load="YES"の行をコメントアウトするで~
再起動
# reboot
システムのバージョンを確認してみる。システムは更新され、ユーザーランドは古いままという事が分かる。
$ freebsd-version -ku 12.0-RELEASE-p4 11.2-RELEASE-p10
ユーザーランドを更新。procの所有権を変えようとしてエラーが出てるけど、まぁ気にしない。
# freebsd-update install Installing updates...install: chown 0:0 ///proc: Operation not supported install: chmod 555 ///proc: Operation not supported Completing this upgrade requires removing old shared object files. Please rebuild all installed 3rd party software (e.g., programs installed from the ports tree) and then run "/usr/sbin/freebsd-update install" again to finish installing updates.
再度システムのバージョンを確認。ユーザーランドが更新されていることが分かる。
$ freebsd-version -uk 12.0-RELEASE-p4 12.0-RELEASE-p5
ここまで来たら、pkg-static upgrade -fでインストール済みpackagesをすべて更新するのが正しいお作法。
なんだけれども、自分はportsでビルドしていく派なのでpkgだけ更新して、残りはちまちまportmasterする。
# pkg-static install -f pkg
pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended
Updating FreeBSD repository catalogue...
pkg-static: Repository FreeBSD has a wrong packagesite, need to re-create database
Fetching meta.txz: 100% 944 B 0.9kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 1.7MB/s 00:04
Processing entries: 100%
FreeBSD repository update completed. 31778 packages processed.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):
Installed packages to be REINSTALLED:
pkg-1.10.5_5 (ABI changed: 'freebsd:11:x86:64' -> 'freebsd:12:x86:64')
Number of packages to be reinstalled: 1
3 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/1] Fetching pkg-1.10.5_5.txz: 100% 3 MiB 1.7MB/s 00:02
Checking integrity... done (0 conflicting)
[1/1] Reinstalling pkg-1.10.5_5...
[1/1] Extracting pkg-1.10.5_5: 100%
ldconfig: /usr/lib: ignoring directory not owned by root
んん~?/usr/libのオーナーがrootじゃないだとー?
$ ls -al /usr total 177 drwxr-xr-x 18 6151 wheel 17 11月 23 2018 . drwxr-xr-x 25 root wheel 34 5月 29 01:20 .. dr-xr-xr-x+ 3 root wheel 3 10月 19 2011 .zfs drwxr-xr-x 2 6151 wheel 515 5月 29 00:39 bin drwxr-xr-x 2 root wheel 5 1月 29 2017 freebsd-dist drwxr-xr-x 16 root wheel 15 10月 22 2018 home drwxr-xr-x 58 6151 wheel 344 5月 29 00:33 include drwxr-xr-x 12 6151 wheel 710 5月 29 00:49 lib drwxr-xr-x 5 root wheel 720 5月 29 00:39 lib32 drwxr-xr-x 5 root wheel 5 5月 29 00:49 libdata drwxr-xr-x 9 root wheel 68 5月 29 00:39 libexec drwxr-xr-x 19 root wheel 19 11月 15 2018 local drwxr-xr-x 3 root wheel 3 7月 13 2017 obj drwxr-xr-x 72 root wheel 92 5月 29 07:49 ports drwxr-xr-x 2 root wheel 305 5月 29 00:39 sbin drwxr-xr-x 30 6151 wheel 30 5月 29 00:49 share drwxr-xr-x 26 root wheel 40 5月 29 00:34 src drwxr-xr-x 15 root wheel 18 7月 13 2017 tests
6151って誰だよ…。最早FreeBSD更新とは無関係になってきたので、続きは別記事で。
プログラム一覧に載ってない Lavasoft Web Companion を消す
いつごろからか、PC起動時に「Another instance is running : 'WebCompanion.UI.AppCore.Services.InstallerService'のタイプ初期化子が例外をスローしました。」というダイアログが出るようになった。
特段気にもしてなかったが、いい加減うざい&何か気持ち悪いので調べてみたところ、Web Companionとかいうアンチアドウェアを騙るアドウェアらしい。ググって出てきた情報を鵜呑みにしてるので間違ってるかもしれないが、自分が能動的に入れた記憶は一切ないのでお行儀の悪いソフトである事は間違いない。
Geek Uninstallerで強制削除すればアンインストールできるそうだが、自分の環境では「プログラムと機能」(アプリと機能)の一覧に出てこなかった。そういえば、結構前にアンインストールボタンを押したような気がしないでもない…。
とりあえず、C:\Program Files (x86)\Lavasoft\Web Companion\Applicationにアンインストーラがないかと覗いてみるも、それっぽいexeはなし。WebCompanionInstaller.exeがアンインストーラも兼ねてるかも?と思い実行してみたけど、やはりアンインストールは出来ず。だがしかし、プログラムと機能にWeb Companionが復活した笑。どうやら再インストール扱いになった模様。
あとはGeek Uninstallerで強制削除を実行。
全部にチェックを入れて「完了」!
それでも一部のファイルは残ったままで、消そうとしても「使用中で消せないよーん」と言われる。
コンピュータの管理を開き、サービスメニューから関連サービスと思われる「WC Assistant」を停止して、上記フォルダを手動で削除する。
多分これで完全に消えたはず?





