パッケージコマンド不具合のチェック(Linux)

Prev Next

VPC環境で利用できます。

Linuxサーバを利用しながら、特定パッケージのコマンドが正常に動作しない場合にチェックする方法を説明します。

注意
  • サーバ作成後のサーバ内部の設定やパッケージの正常有無の確認については、NAVERクラウドプラットフォームではサポートしません。
  • 使用する Linuxリリース版に関する最新の公式ドキュメントを参照することをお勧めします。

正常なコマンドを比較するために、同じ OSバージョンの新規サーバを構築してコマンドを実行し、結果を比較します。このガイドでは、awkコマンドをユースケースとして説明します。

NAVIX, CentOS, Rocky Linux

  1. コマンドの実行に問題があるサーバと新規サーバにリモートアクセスします。

  2. 当該コマンドの位置とインストールされたパッケージ情報を比較して確認します。

    [root@rockylinux9 ~]# which awk
    /usr/bin/awk
    
    [root@rockylinux9 ~]# ls -l /usr/bin/awk
    lrwxrwxrwx. 1 root root 4 May 13  2022 /usr/bin/awk -> gawk
    
    [root@rockylinux9 ~]# ls -l /usr/bin/gawk
    -rwxr-xr-x. 1 root root 714968 May 13  2022 /usr/bin/gawk
    
    [root@rockylinux9 ~]# rpm -qf /usr/bin/gawk
    gawk-5.1.0-6.el9.x86_64
    
  3. rpm -Vまたは rpm --verifyコマンドを使用して、パッケージのインストール後に変更された内容を確認します。
    正常である場合、コマンドを実行した結果として何も出力されません。

    [root@rockylinux9 ~]# rpm -V gawk-5.1.0-6.el9.x86_64
    [root@rockylinux9 ~]#  
    

    問題がある場合、以下のような出力結果を確認できます。

       S file Size differs
       M Mode differs (includes permissions and file type)
       5 digest (formerly MD5 sum) differs
       D Device major/minor number mismatch
       L readLink(2) path mismatch
       U User ownership differs
       G Group ownership differs
       T mTime differs
       P caPabilities differ
    

    各項目は変更された内容を示しており、問題を解決するためにこれらの出力を参照してパッケージの変更を確認できます。
    下記のユースケースでは、/usr/bin/gawkファイルの権限を変更してパッケージの変更内容を示します。

    [root@rockylinux9 ~]# ls -l /usr/bin/gawk
    -rwxr-xr-x. 1 root root 714968 May 13  2022 /usr/bin/gawk
    
    [root@rockylinux9 ~]# chmod o-x /usr/bin/gawk
    
    [root@rockylinux9 ~]# ls -l /usr/bin/gawk
    -rwxr-xr--. 1 root root 714968 May 13  2022 /usr/bin/gawk
    
    [root@rockylinux9 ~]# rpm -V gawk-5.1.0-6.el9.x86_64 
    .M.......    /usr/bin/gawk
    

    出力結果の.M....... は Mode differsを表します。
    これにより、初回インストール時の権限と現在の権限が異なるため、変更されたのを確認できます。

  4. 特定パッケージのコマンドが参照するライブラリを比較するために lddコマンドを使用して当該コマンドのライブラリを確認します。

    [root@rockylinux9 ~]# ldd /usr/bin/gawk
        linux-vdso.so.1 (0x00007ffcb51b0000)
        libsigsegv.so.2 => /lib64/libsigsegv.so.2 (0x00007f677502f000)
        libreadline.so.8 => /lib64/libreadline.so.8 (0x00007f6774fd7000)
        libmpfr.so.6 => /lib64/libmpfr.so.6 (0x00007f6774f27000)
        libgmp.so.10 => /lib64/libgmp.so.10 (0x00007f6774e82000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f6774da7000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6774a00000)
        libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f6774d75000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f67750f3000)
    
  5. エラーの原因が見つからない場合は、当該パッケージを再インストールします。

    参考

    パッケージを再インストールする際に、既存のパッケージと同じバージョンでインストールされるかを確認します。

    下記のユースケースは httpd(apacheウェブサーバ)の特定ファイルを削除した後、パッケージを再インストールして復旧するプロセスを示します。

    [root@rockylinux9 ~]# rpm -qa | grep httpd
    httpd-tools-2.4.62-4.el9.x86_64
    httpd-filesystem-2.4.62-4.el9.noarch
    httpd-core-2.4.62-4.el9.x86_64
    rocky-logos-httpd-90.16-1.el9.noarch
    httpd-2.4.62-4.el9.x86_64
    
    [root@rockylinux9 ~]# rm -i /usr/share/man/man8/apachectl.8.gz
    rm: remove regular file '/usr/share/man/man8/apachectl.8.gz'? y
    
    [root@rockylinux9 ~]# rpm -V httpd
    missing   d /usr/share/man/man8/apachectl.8.gz
    
    [root@rockylinux9 ~]# dnf reinstall httpd
    Last metadata expiration check: 0:12:37 ago on Fri 04 Jul 2025 03:31:40 PM KST.
    Dependencies resolved.
    ===========================================================================================
    Package           Architecture       Version                  Repository             Size
    ===========================================================================================
    Reinstalling:
    httpd             x86_64             2.4.62-7.el9             appstream              44 k
    
    Transaction Summary
    ===========================================================================================
    Total download size: 45 k
     Installed size: 59 k
     Is this ok [y/N]: y
    ...省略 ...
     Reinstalled:
      httpd-2.4.62-7.el9.x86_64
    
    Complete!
    
    [root@rockylinux9 ~]# rpm -V httpd
    [root@rockylinux9 ~]#
    

Ubuntu

  1. コマンドの実行に問題があるサーバと新規サーバにリモートアクセスします。
  2. 当該コマンドの位置とインストールされたパッケージ情報を比較して確認します。
    root@ubuntu2404:~# which awk
    /usr/bin/awk
    
    root@ubuntu2404:~# ls -l /usr/bin/awk
    lrwxrwxrwx 1 root root 21 Apr  9  2024 /usr/bin/awk -> /etc/alternatives/awk
    
    root@ubuntu2404:~# ls -l /etc/alternatives/awk
    lrwxrwxrwx 1 root root 13 Aug 27  2024 /etc/alternatives/awk -> /usr/bin/gawk
    
    root@ubuntu2404:~# ls -l /usr/bin/gawk
    -rwxr-xr-x 1 root root 739840 Mar 31  2024 /usr/bin/gawk
    
    root@ubuntu2404:~# dpkg -S /usr/bin/gawk
    gawk: /usr/bin/gawk
    
    root@ubuntu2404:~# dpkg -l gawk
    Desired=Unknown/Install/Remove/Purge/Hold
    | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name           Version         Architecture Description
    +++-==============-===============-============-===================================================
    ii  gawk           1:5.2.1-2build3 amd64        GNU awk, a pattern scanning and processing language
    
  3. dpkg -Vまたは dpkg --verifyコマンドを使用して、パッケージのインストール後に変更された内容を確認します。
    正常である場合、コマンドを実行した結果として何も出力されません。
    root@ubuntu2404:~# dpkg -V gawk
    root@ubuntu2404:~#
    
    問題がある場合、以下のような出力結果を確認できます。Ubuntuの場合、現在は md5sumを確認した結果についてのみ変更された部分を確認します。
       5 digest (formerly MD5 sum) differs
    
    下記のユースケースでは、/usr/share/doc/gawk/READMEファイルの内容を変更してパッケージの変更内容を示します。
    root@ubuntu2404:~# ls -l /usr/share/doc/gawk/README
    -rw-r--r-- 1 root root 3890 Aug 27  2024 /usr/share/doc/gawk/README
    
    root@ubuntu2404:~# sed -i '$a TEST...' /usr/share/doc/gawk/README
    
    root@ubuntu2404:~# ls -l /usr/share/doc/gawk/README
    -rw-r--r-- 1 root root 3898 Jul  4 15:36 /usr/share/doc/gawk/README
    
    root@ubuntu2404:~# dpkg -V gawk
    ??5??????   /usr/share/doc/gawk/README
    
    出力結果で??5?????? は 5 digestを表します。これにより md5sumの結果値が異なり、初回インストール時のファイルから変更されたことを確認できます。
  4. 特定パッケージのコマンドが参照するライブラリを比較するために lddコマンドを使用して当該コマンドのライブラリを確認します。
    root@ubuntu2404:~# ldd /usr/bin/gawk
        linux-vdso.so.1 (0x00007ffc22590000)
        libsigsegv.so.2 => /lib/x86_64-linux-gnu/libsigsegv.so.2 (0x000077e75eb5a000)
        libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x000077e75eb05000)
        libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x000077e75ea4a000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x000077e75e9c6000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x000077e75e8dd000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000077e75e600000)
        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x000077e75e8a7000)
        /lib64/ld-linux-x86-64.so.2 (0x000077e75eb68000)
    
  5. エラーの原因が見つからない場合は、当該パッケージを再インストールします。
    参考

    パッケージを再インストールする際に、既存のパッケージと同じバージョンでインストールされるかを確認します。

    下記のユースケースは httpd(apacheウェブサーバ)の特定ファイルを削除した後、パッケージを再インストールして復旧するプロセスを示します。
    root@ubuntu2404:~# dpkg -l |grep apache2
    ii  apache2                              2.4.58-1ubuntu8.6                       amd64        Apache HTTP Server
    ii  apache2-bin                          2.4.58-1ubuntu8.6                       amd64        Apache HTTP Server (modules and other binary files)
    ii  apache2-data                         2.4.58-1ubuntu8.6                       all          Apache HTTP Server (common files)
    ii  apache2-utils                        2.4.58-1ubuntu8.6                       amd64        Apache HTTP Server (utility programs for web servers)
    
    root@ubuntu2404:~# rm -i /usr/share/man/man1/a2query.1.gz
    rm: remove regular file '/usr/share/man/man1/a2query.1.gz'? y
    
    root@ubuntu2404:~# dpkg -V apache2
    missing     /usr/share/man/man1/a2query.1.gz
    
    root@ubuntu2404:~# apt install --reinstall apache2
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 228 not upgraded.
    Need to get 90.2 kB of archives.
    After this operation, 0 B of additional disk space will be used.
    Get:1 http://repo.ncloud.com/ubuntu noble-updates/main amd64 apache2 amd64 2.4.58-1ubuntu8.6 [90.2 kB]
    
    ...省略 ...
    
    Preparing to unpack .../apache2_2.4.58-1ubuntu8.6_amd64.deb ...
    Unpacking apache2 (2.4.58-1ubuntu8.6) over (2.4.58-1ubuntu8.6) ...
    Setting up apache2 (2.4.58-1ubuntu8.6) ...
    Processing triggers for man-db (2.12.0-4build2) ...
    Processing triggers for ufw (0.36.2-6) ...
    Scanning processes...                                                                                                                                                 
    Scanning linux images...
    
    root@ubuntu2404:~# dpkg -V apache2
    root@ubuntu2404:~#