おれのIT日記

2023/12/21 (木)

Linux

firewalld と systemctlにハマる


我が家では、ポンコツPCはリサイクルなどに出さず、出来るだけ酷使することにしている。
酷使とは、私の場合はつまり、Linuxをインストールして常時起動して働かせる、ということである。
具体的には、このページつまりhttpdとしての機能と、私が愛聴するラジオを自動録音し続けるのが二大任務である。
この歳になると、家中ポンコツだらけだ。中にはPentiumⅢなど、骨董レベルのものもある。しかし、これが愛着が湧いてしまい、ますます捨てられない訳である。だって、まだ20代だった頃に買ったPC、まだ仕事の理想を抱いて燃えていたころ、仕事のためのVBマシンとして購入したものが、いまだに、AntiX Linux 19.3をOSに動いてくれているのだ。(怪しい点や原因不明な挙動は多々あるが…そこがまた愛おしかったりする)

余談だが、あの頃の私は会社の中で、いわゆるSQLビルダー的なオリジナルEUCツールを設計開発すべく暴走していたのであるが、最初Delphi2で快適に、かつ実行性能も充分な状態で開発していたものを、VBで作れ、うちの会社で誰がDelphiなんか組めるんだ、とわかったようなわからないような理屈で指示され、仕方なく方向転換し、大した好きでもないVBを覚えながら、フテくされつつ連日、家で深夜までコーディングしていたのである。開発中はVB4.0で、リリース時にはVB5.0だった。どうやって家で? それをフロッピーに入れて会社と自宅を行き来していたのだ。今じゃセキュリティ・コンプラ的に考えられないし、フロッピー1枚で足りたんかい!という容量面のツッコミも可能である。
ともかく、熱い理想と、目先の怒りがおれを突き動かし濃密な時間を過ごした。それは、私のSE人生を支える原動力となったのだった。…完全に余談だ…つまり、私がなぜPentiumⅢマシンを捨てられないか、を補足したかったのである。コンデンサーがそろそろヤバいかも、とか、ファンの回り方がおかしいとか、そのうち出火するかもとか、リスクはともかく、このPCは戦友である。

# まずはインストール
$ sudo apt install firewalld
# Samba(smbd,nmbd)が使うポートを調べる…調べるまでもなく、ネットにて137-139および445と知る
$ sudo netstat -tulpn | grep mbd
# 設定を追加
$ sudo firewall-cmd --zone=public --add-port=137-138/udp --permanent
$ sudo firewall-cmd --zone=public --add-port=139/tcp --permanent
$ sudo firewall-cmd --zone=public --add-port=445/tcp --permanent

# LAN内に解放
$ sudo firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent

# for httpd
$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
$ sudo firewall-cmd --zone=public --add-port=443/tcp --permanent

# 再起動
$ sudo firewall-cmd --reload
ここまでは順調だったPentiumⅢマシンだが、ご期待どおり!! ここで大きな躓きを見せるゾ!
Error: COMMAND_FAILED: '/usr/sbin/ebtables-restore --noflush' failed:
line 3: CHAIN_USER_DEL failed (Device or resource busy): chain PREROUTING_direct
line 3: CHAIN_USER_DEL failed (Device or resource busy): chain POSTROUTING_direct
line 3: CHAIN_USER_DEL failed (Device or resource busy): chain OUTPUT_direct
line 7: CHAIN_USER_DEL failed (Device or resource busy): chain INPUT_direct
line 7: CHAIN_USER_DEL failed (Device or resource busy): chain OUTPUT_direct
line 7: CHAIN_USER_DEL failed (Device or resource busy): chain FORWARD_direct.
仕方なく、serviceコマンドで再起動してみる。
$ sudo service firewalld restart
エラーメッセージは出ない、でも、動作として、ダメなんですよね。もちろん、rebootもしたよん。ダメなのよ。chatGPTに聞いて、ebtablesをインストールしなおしたり色々したけど、ダメなんですよ。というか、なんでiptablesではなくebtablesなんだろう。iptablesを入れたり試行錯誤したことは省略。ここでわたしは戦友(PentiumⅢ)を見捨て(笑)、別マシンで試し始めます。次のマシンも年代物、Athlon X2です。こちらはいまはAntiXではなく、MX Linuxをメインにしている。うちのポンコツマシンたちはみんなデュアルブートが当たり前で、自分でもいまどのOSで動いているかわからなくなるんで、いちいちこうやって確認しながら使ってます。
さて、こいつもご期待どおり! ご主人たるおれに、容赦ないワナを仕掛けてきます!
$ sudo systemctl status ... (ごめん、ちょっと省略)
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています
うぉー!! 待ってました! やってくれますよね!! 「ホストが落ちています」ですよ。知っている方にはどうってことはないんでしょうけど、私のような、しがない、駆け出しのLinux使いはねぇ、もう、驚愕のあまりアゴが外れるかと思いましたよ。はい。
これ、画像は勝手に出せないのでリンクのみ紹介ですが、本当にわかりやすい、すばらしい解説サイトがございました。ぺんぎんやさま、この場を借りて感謝申し上げます。
簡単に言うと、systemctlと言うコマンドは、systemdが、最初のプロセス(つまりpid=1のプロセス)じゃないとダメなんだそうです。
$ ps -p 1
# これで、initと出たら負け。systemdと出て欲しいところなワケです
先に紹介したページの説明どおり「MXツール」で簡単に変更して、再起動しますと、問題ありません!

結局ね、旧いマシンを使うせいで、苦労を背負いこんで、ひとりで大騒ぎしているだけなんですね。
お金のある方は、新しいマシンや、AWS、Azureを使って、楽しんで下さい!!