2019年11月6日水曜日

CentOS8 (Minimum) インストールしてとんでもなかったこと一覧

https://north.thco.mp/2019/09/26/centos8-minimum/
シェアしました。

そのうち記事にするが、急いでCentOS8をインストールする用事があったので、
リリース直後のCentOS8を物理マシンにセットアップしてみた。するとなんだかいろいろ
奇妙なことが起こるので、一覧にしていくことにした。もしかしたら随時アップデートする
ハメになるかもしれない。というか備忘録を作らないと最終的な調整のために追い付かない
ような気がするので。

1. tarがない

古いマシンからのリプレースなので、古いマシンのディレクトリをコピーしようと
ssh origin 'cd /home/north ; tar cf - .' | ( cd /home/north ; tar xpf - )
したら、tarがないと怒られた。Minimumにtarを入れない判断はどうなのか。
まあdnfで入れたけどさ。

2. lsの挙動が変

なんか左側にへんなスペースが入るなーおかしいなと思っていたら、こんな事情だった。
ファイル名にメタ文字が入るとシングルクォートで括るのだが、そのときクォートの分だけ
パディングが入って、そのせいで段組みが1文字分ずれるのだ。
左側に1文字分スペースが入る
これについてはTwitterでコメントを頂いた。
-NオプションについてCentOS7のls (8.22)のmanpageを見ると、実は載っているが微妙に
異なる。
       -N, --literal
              print raw entry names (don't treat e.g. control characters  spe‐
              cially)
CentOS8のls (8.30)はこうだ。
       -N, --literal
              print entry names without quoting
manpageには以前のバージョンから-Q--quoting-styleなどのオプションはあるが、
そもそもメタ文字をクォートする動作そのものについては何の説明もない。いつどの
タイミングか分からないが、メタ文字の扱いが突然変更になったようだ。
-Nによる動作の違いを比較してみると、
-Nオプションの比較
クォートされたファイルを含むと、有無を言わさずすべてのカラムにパディングが入る
ようだ。
とりあえず自分が言いたいのはこうだ。
  • クォートしたい気持ちは分かるが、それはオプション動作であるべきでは?
    • 指定したときにクォートしてほしい
    • デフォルトでは「これまで通り」に動いてほしい
  • クォートしたときに、されなかった行にパディングを入れる意味が分からない
    • それは必要か? それは美しいのか?
    • いずれにせよそれはオプションにして、デフォルトは「これまで通り」にして
      ほしい
  • 何でもかんでも「新しく、変える」のはヤメてほしい
とにかくワークアラウンドとして、-Nをつけるしかないようだ。

3. .vimrcを読まなくなった(.vircに変わった)

自分はOSインストールのごく初期のステップで.vimrcset compatibleと書くのだが、
それなのに画面の端に --INSERT-- と出るのに気づいた。つまり.vimrcを読み込めていない
のだ。なんでそんなことが起こるのか分からず、.vimrcを読むルールを改めて調べてみたが、たとえばvimのマニュアルを見ても、特に何も書いていない。そこで「vimがどの.vimrcを読んだか」を調べる方法を
調べた。すると :version で分かる、と分かった。
   system vimrc file: "/etc/virc"
     user vimrc file: "$HOME/.virc"
 2nd user vimrc file: "~/.vim/virc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
ということで、CentOS8のvim(8.0)は .vircを読むそうだ。このような記述はvimの
マニュアルにはまったく書いてないので、どうしてこうなったのか理解できない。
何かの拍子にコロっと.vimrcに戻ることも考えられるので、symlinkを置いておくのが
よいのではないかと思っている。
【9/28追記】
Twitterでこんな情報を見つけた。
示されたbugzillaはこちら。
vim-minimalは他のvimパッケージ用に書かれた.vimrcを読むとエラーを吐くので、
.vimrcを読むべきではないという結論に至ったようだ。そしてCentOS8になり、
デフォルトのvim-minimalは.vimrcを読まなくなったわけである。
vimに対する自分の態度は以前も記事にしたので繰り返さない。vim自身の互換性の問題に
ついても特にコメントはない。自分は平和なrcしか書かないので、対応としては
ln -s .vimrc .virc
で大丈夫だと思う。

4. インストーラでWifiを使ったのにWifiドライバは
インストールしてくれない

Minimumインストールが元凶なのかもしれないが、一応メモ。
GUIインストーラでWifiを設定してインストールし、DHCPでIPアドレスを貰い、
NTPも受信でき、timezoneも設定でき、特に問題なくインストールが終わってリブートして
みると、NetworkManager-wifiパッケージが入っていないのでネットに繋がらない。
ネットに繋がらないのでdnfが動かず(一時的に)詰んでしまう。インストールメディアを
マウントして/BaseOS/Packagesからwpa_supplicantと NetworkManager-wifi を手動で
インストールしなければならない。
Wifiの設定はインストール時に作ったものが残っているので、そのままズバっと繋がる。
たぶんインストーラのバグなのではないかと思う。

5. リゾルバの振る舞いが変わった(っぽい)

【9/30追加】
自宅LAN環境で、ルータをCentOS8に変えたら、名前解決に5200msぐらい時間がかかる
ようになってしまった。どうもIPv6がらみの問題っぽいが、徹底的にIPv6設定を排除して
いるにも関わらず事態が改善しない。問題はリゾルバっぽいなと思い立ち、
/etc/resolv.confに次の設定を追記したら直った。
options single-request
これはglibcに対して「問い合わせの際にIPv4/IPv6アドレスを同時に問い合わせるのを
抑制し、順に問い合わせる」という動作に変える。manpageにはこうある。
              single-request (since glibc 2.10)
                     Sets RES_SNGLKUP in _res.options.  By default, glibc per‐
                     forms IPv4 and IPv6 lookups  in  parallel  since  version
                     2.9.   Some  appliance  DNS  servers  cannot handle these
                     queries properly and make the requests  time  out.   This
                     option  disables the behavior and makes glibc perform the
                     IPv6 and IPv4 requests sequentially (at the cost of  some
                     slowdown of the resolving process).
当初、記述を見て「IPv6を問い合わせちゃうんだから事態は解決しないのでは…」と
思っていたのだが、職場のHさんの助言で試したら改善したというオチだった。
自宅のアクセス回線事業者が提供するDNSサーバが、この問題に当たっていたことが
根本の原因だったようだ。クラウドのVMでは再現しないのでだいぶ首をひねることになった。
というわけでどうやらglibcのアップデートに伴いリゾルバの動作が変わったようなのだが、
CentOS7のglibcのバージョンをチェックしてみると2.17だという(CentOS8は2.28)。
なんか言ってることが合致しない…が、問題は解決したのでワークアラウンドということで
示しておくことにする。
蛇足だが、resolv.confはNetworkManagerが上書きしてしまうので、固定化するために/etc/NetworkManager/NetworkManager.confの以下のセクションに追記しなければならない。
[main]
dns=none

6. nftablesがdisabled

【10/4追記】
CentOS8では、iptablesが廃止されnftablesに移行になったことがハイライトのひとつだった。nftablesでいろいろルールを作ったら、当然リブートに備えてセーブしておき、起動時にはちゃんとロードされる
ようにしておきたい。そのためにはたいていsysconfigディレクトリを見ればよい。
案の定、/etc/sysconfig/nftables.confがあって、ご丁寧にこんな風に書いてあった。
#
# This this will contain your nftables rules and
# is read by the systemd service when restarting
#
# These provide an iptables like set of filters
# (uncomment to include)
# include "/etc/nftables/bridge-filter.nft"
# include "/etc/nftables/inet-filter.nft"
# include "/etc/nftables/ipv4-filter.nft"
# include "/etc/nftables/ipv4-mangle.nft"
# include "/etc/nftables/ipv4-nat.nft"
# include "/etc/nftables/ipv6-filter.nft"
# include "/etc/nftables/ipv6-mangle.nft"
# include "/etc/nftables/ipv6-nat.nft"
好きなルールを追記するとか、デフォルトのルールをコメントアウトしてロードできると
いうわけだ。
ところが、標準インストールではこの仕組みは働かない。
[root@c8 ~]# systemctl status nftables
● nftables.service - Netfilter Tables
   Loaded: loaded (/usr/lib/systemd/system/nftables.service; enabled; vendor pr>
   Active: inactive (dead)
     Docs: man:nft(8)
[root@c8 ~]# systemctl is-enabled nftables
disabled
disabledになっているのだ。このためブート時のロード機構も動かず、ファイルにいくら記述しても無駄、ということになってしまう。ロードを有効にするなら
[root@c8 ~]# systemctl enable nftables
Created symlink /etc/systemd/system/multi-user.target.wants/nftables.service → /usr/lib/systemd/system/nftables.service.
しておかなければならない。ついでに言うと、firewalldと衝突しないように注意が必要だ。

0 コメント:

コメントを投稿