yumのパッケージ依存エラーを解決(firewalld)

CentOS7
この記事は約22分で読めます。

はじめに

そもそもパッケージの依存エラーが出てしまった原因は、毎日不正アクセスを繰り返してくる輩を効率よくfirewallでブロックするためにipset を利用しようとしたところ、契約しているVPSサーバが悪いのかhash:ip オプションが使えなかったため、一旦ipsetパッケージを削除しちまえっ!ってやったことが事の原因です。。

ipsetパッケージをアンインストールしたら、まさかfirewalldまでごっそり削除されるとは思っていませんでした。。

完璧にアウトですね。

流石に焦ったので、急遽iptables-restoreで過去の設定を読み込ませて仮復旧。

削除されたfirewalldをyum install firewalld でインストールしようとしたが、パッケージの依存エラーで何度やっても上手くいかず。。

依存エラーのメッセージ中に表示されているパッケージを複数削除したら、無事パッケージをインストールできました!

その際のメモを簡単ですが、記載します。

yum install firewalld で依存エラーが発生

間違ってfirewalldが削除されてしまったので、急いで yum install firewalld を実行し復旧させようとしましたが、下記の通り依存エラーで上手くいかず。。

# yum install firewalld
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * epel: ftp.jaist.ac.jp
 * remi: ftp.riken.jp
 * remi-safe: ftp.riken.jp
 * rpmforge: mirror.fairway.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: ipset のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
---> パッケージ ipset.x86_64 0:6.29-1.el7 を インストール
--> 依存性の処理をしています: ipset-libs(x86-64) = 6.29-1.el7 のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_3.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_2.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_1.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3()(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
             要求: libipset.so.3(LIBIPSET_3.0)(64bit)
            利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
                libipset.so.3(LIBIPSET_3.0)(64bit)
            インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
               ~libipset.so.13(LIBIPSET_1.0)(64bit)
               ~libipset.so.13(LIBIPSET_2.0)(64bit)
               ~libipset.so.13(LIBIPSET_3.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.1)(64bit)
               ~libipset.so.13(LIBIPSET_4.2)(64bit)
               ~libipset.so.13(LIBIPSET_4.3)(64bit)
               ~libipset.so.13(LIBIPSET_4.4)(64bit)
               ~libipset.so.13(LIBIPSET_4.5)(64bit)
               ~libipset.so.13(LIBIPSET_4.6)(64bit)
               ~libipset.so.13(LIBIPSET_4.7)(64bit)
               ~libipset.so.13(LIBIPSET_4.8)(64bit)
               ~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
             要求: libipset.so.3(LIBIPSET_1.0)(64bit)
            利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
                libipset.so.3(LIBIPSET_1.0)(64bit)
            インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
               ~libipset.so.13(LIBIPSET_1.0)(64bit)
               ~libipset.so.13(LIBIPSET_2.0)(64bit)
               ~libipset.so.13(LIBIPSET_3.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.1)(64bit)
               ~libipset.so.13(LIBIPSET_4.2)(64bit)
               ~libipset.so.13(LIBIPSET_4.3)(64bit)
               ~libipset.so.13(LIBIPSET_4.4)(64bit)
               ~libipset.so.13(LIBIPSET_4.5)(64bit)
               ~libipset.so.13(LIBIPSET_4.6)(64bit)
               ~libipset.so.13(LIBIPSET_4.7)(64bit)
               ~libipset.so.13(LIBIPSET_4.8)(64bit)
               ~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: firewalld-0.4.4.4-6.el7.noarch (base)
             要求: python-firewall = 0.4.4.4-6.el7
            インストール: python-firewall-0.5.3-5.el7.noarch (@/python-firewall-0.5.3-5.el7.noarch)
                python-firewall = 0.5.3-5.el7
            利用可能: python-firewall-0.4.4.4-6.el7.noarch (base)
                python-firewall = 0.4.4.4-6.el7
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
             要求: ipset-libs(x86-64) = 6.29-1.el7
            インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
                ipset-libs(x86-64) = 7.1-1.el7
            利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
                ipset-libs(x86-64) = 6.29-1.el7
エラー: パッケージ: firewalld-0.4.4.4-6.el7.noarch (base)
             要求: firewalld-filesystem = 0.4.4.4-6.el7
            インストール: firewalld-filesystem-0.5.3-5.el7.noarch (@/firewalld-filesystem-0.5.3-5.el7.noarch)
                firewalld-filesystem = 0.5.3-5.el7
            利用可能: firewalld-filesystem-0.4.4.4-6.el7.noarch (base)
                firewalld-filesystem = 0.4.4.4-6.el7
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
             要求: libipset.so.3(LIBIPSET_2.0)(64bit)
            利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
                libipset.so.3(LIBIPSET_2.0)(64bit)
            インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
               ~libipset.so.13(LIBIPSET_1.0)(64bit)
               ~libipset.so.13(LIBIPSET_2.0)(64bit)
               ~libipset.so.13(LIBIPSET_3.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.0)(64bit)
               ~libipset.so.13(LIBIPSET_4.1)(64bit)
               ~libipset.so.13(LIBIPSET_4.2)(64bit)
               ~libipset.so.13(LIBIPSET_4.3)(64bit)
               ~libipset.so.13(LIBIPSET_4.4)(64bit)
               ~libipset.so.13(LIBIPSET_4.5)(64bit)
               ~libipset.so.13(LIBIPSET_4.6)(64bit)
               ~libipset.so.13(LIBIPSET_4.7)(64bit)
               ~libipset.so.13(LIBIPSET_4.8)(64bit)
               ~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
             要求: libipset.so.3()(64bit)
            利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
                libipset.so.3()(64bit)
            インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
               ~libipset.so.13()(64bit)
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
#

–skip-broken や rpm -Va –nofiles –nodigest も実行してみたが事象解消せず。

依存エラーが出たパッケージを削除

上記メッセージ中に表示されていた各パッケージを rpm -qa で grep をかけ、インストール済みでありこれらのパッケージが悪さをしていたので全て削除。

# yum remove ipset-libs-6.29-1.el7.x86_64

# rpm -qa | grep "python-firewall"

# yum remove python-firewall-0.5.3-5.el7.noarch

# yum remove firewalld-filesystem

# rpm -qa | grep "ipset"

# yum remove ipset-libs-7.1-1.el7.x86_64

依存エラーパッケージを全て削除後、再度yum installを実行

# yum install firewalld
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * epel: ftp.jaist.ac.jp
 * remi: ftp.riken.jp
 * remi-safe: ftp.riken.jp
 * rpmforge: mirror.fairway.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: ipset のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ firewalld-filesystem.noarch 0:0.4.4.4-6.el7 を インストール
---> パッケージ ipset.x86_64 0:6.29-1.el7 を インストール
--> 依存性の処理をしています: ipset-libs(x86-64) = 6.29-1.el7 のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_3.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_2.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_1.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3()(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
---> パッケージ python-firewall.noarch 0:0.4.4.4-6.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ ipset-libs.x86_64 0:6.29-1.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

===============================================================================================================================
 Package                                アーキテクチャー         バージョン                       リポジトリー            容量
===============================================================================================================================
インストール中:
 firewalld                              noarch                   0.4.4.4-6.el7                    base                   416 k
依存性関連でのインストールをします:
 firewalld-filesystem                   noarch                   0.4.4.4-6.el7                    base                    47 k
 ipset                                  x86_64                   6.29-1.el7                       base                    41 k
 ipset-libs                             x86_64                   6.29-1.el7                       base                    54 k
 python-firewall                        noarch                   0.4.4.4-6.el7                    base                   325 k

トランザクションの要約
===============================================================================================================================
インストール  1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 884 k
インストール容量: 3.9 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): firewalld-filesystem-0.4.4.4-6.el7.noarch.rpm                                                    |  47 kB  00:00:00
(2/5): ipset-6.29-1.el7.x86_64.rpm                                                                      |  41 kB  00:00:00
(3/5): ipset-libs-6.29-1.el7.x86_64.rpm                                                                 |  54 kB  00:00:00
(4/5): firewalld-0.4.4.4-6.el7.noarch.rpm                                                               | 416 kB  00:00:01
(5/5): python-firewall-0.4.4.4-6.el7.noarch.rpm                                                         | 325 kB  00:00:00
-------------------------------------------------------------------------------------------------------------------------------
合計                                                                                           562 kB/s | 884 kB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : firewalld-filesystem-0.4.4.4-6.el7.noarch                                                      1/5
  インストール中          : ipset-libs-6.29-1.el7.x86_64                                                                   2/5
  インストール中          : ipset-6.29-1.el7.x86_64                                                                        3/5
  インストール中          : python-firewall-0.4.4.4-6.el7.noarch                                                           4/5
  インストール中          : firewalld-0.4.4.4-6.el7.noarch                                                                 5/5
  検証中                  : python-firewall-0.4.4.4-6.el7.noarch                                                           1/5
  検証中                  : ipset-libs-6.29-1.el7.x86_64                                                                   2/5
  検証中                  : firewalld-0.4.4.4-6.el7.noarch                                                                 3/5
  検証中                  : firewalld-filesystem-0.4.4.4-6.el7.noarch                                                      4/5
  検証中                  : ipset-6.29-1.el7.x86_64                                                                        5/5

インストール:
  firewalld.noarch 0:0.4.4.4-6.el7

依存性関連をインストールしました:
  firewalld-filesystem.noarch 0:0.4.4.4-6.el7         ipset.x86_64 0:6.29-1.el7         ipset-libs.x86_64 0:6.29-1.el7
  python-firewall.noarch 0:0.4.4.4-6.el7

完了しました!
#

やっと上手く解決しました!!

firewalld.serviceを起動

無事、パッケージをインストールできたのでfirewalldを起動します。

# systemctl start firewalld.service

status を確認します。

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 木 2020-02-20 20:27:16 JST; 7s ago
     Docs: man:firewalld(1)

ふむふむ、無事動いていますね。

とりあえず、一安心。

ipsetコマンドで使用できるタイプを確認

続いて、当初からの課題であったipset コマンドのオプションが正しく表示されるかを確認してみます。

私が一番知りたいのは、hash:ip オプションが使えるのかどうかという点です。

確認してみます!

# firewall-cmd --get-ipset-types

あれっ! 一個も表示されていないじゃないですか。

あぁ、まじショック。。

また振り出しですね。。

できないとわかりつつ、下記のコマンドを投入してみました。

# ipset create BLACKLIST_IP hash:ip
ipset v6.29: Cannot open session to kernel.
#

どうしたもんですかねぇ。

ipsetが使えない理由がやっとわかった!

かなりググりまくったのですが、結局のところ私が契約しているVPSサーバがOpenVZであることが原因でした。

どういうことかと言いますと、OpenVZは他のコンテナーとkernelを共有しているため個別に設定変更はできないことがわかりました。

OpenVZは比較的安価で使い勝手はいいのですが、より深いシステムの設定変更(kernelの変更等)はできないようです。

KVMであればipsetも問題なく使えるようなので、新にKVMを契約しました。

なんでこう費用がかさむのかなぁ。。

スキルを身につけるためにがんばります。

コメント

タイトルとURLをコピーしました