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

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_supplicantNetworkManager-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と衝突しないように注意が必要だ。