パッケージコマンド不具合の点検(Linux)
    • PDF

    パッケージコマンド不具合の点検(Linux)

    • PDF

    Article Summary

    VPC環境で利用できます。

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

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

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

    CentOS, Rocky Linux

    1. コマンドの実行に問題があるサーバと新規サーバにリモートアクセスします。
    2. 当該コマンドの位置とインストールされたパッケージ情報を比較して確認します。
      [root@rockylinux88 ~]# which awk
      /usr/bin/awk
      
      [root@rockylinux88 ~]# ls -l /usr/bin/awk
      lrwxrwxrwx. 1 root root 4 Apr 16  2022 /usr/bin/awk -> gawk
      
      [root@rockylinux88 ~]# ls -l /usr/bin/gawk
      -rwxr-xr-x. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux88 ~]# rpm -qf /usr/bin/gawk
      gawk-4.2.1-4.el8.x86_64
      
    3. rpm -Vまたは rpm --verifyコマンドを使用して、パッケージのインストール後に変更された内容を確認します。
      正常である場合、コマンドを実行した結果として何も出力されません。
      [root@rockylinux88 ~]# rpm -V gawk-4.2.1-4.el8.x86_64
      [root@rockylinux88 ~]#    
      
      問題がある場合、以下のような出力結果を確認できます。
      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@rockylinux88 ~]# ls -l /usr/bin/gawk
      -rwxr-xr-x. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux88 ~]# chmod o-x /usr/bin/gawk
      
      [root@rockylinux88 ~]# ls -l /usr/bin/gawk
      -rwxr-xr--. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux88 ~]# rpm -V gawk-4.2.1-4.el8.x86_64
      .M.......    /usr/bin/gawk
      
      出力結果の.M....... は Mode differsを表します。これにより、初回インストール時の権限と現在の権限が異なるため、変更されたのを確認できます。
    4. 特定パッケージのコマンドが参照するライブラリを比較するために lddコマンドを使用して当該コマンドのライブラリを確認します。
      [root@rockylinux88 ~]# ldd /usr/bin/gawk
          linux-vdso.so.1 (0x00007ffd299e3000)
          libsigsegv.so.2 => /lib64/libsigsegv.so.2 (0x00007fe972598000)
          libreadline.so.7 => /lib64/libreadline.so.7 (0x00007fe972349000)
          libmpfr.so.4 => /lib64/libmpfr.so.4 (0x00007fe9720e5000)
          libgmp.so.10 => /lib64/libgmp.so.10 (0x00007fe971e4d000)
          libdl.so.2 => /lib64/libdl.so.2 (0x00007fe971c49000)
          libm.so.6 => /lib64/libm.so.6 (0x00007fe9718c7000)
          libc.so.6 => /lib64/libc.so.6 (0x00007fe971502000)
          libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007fe9712d5000)
          /lib64/ld-linux-x86-64.so.2 (0x00007fe972a48000) 
      
    5. エラーの原因が見つからない場合は、当該パッケージを再インストールします。
      参考

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

      下記のユースケースは httpd(apacheウェブサーバ)の特定ファイルを削除した後、パッケージを再インストールして復旧するプロセスを示します。
      [root@rockylinux88 ~]# rpm -qa | grep httpd
      rocky-logos-httpd-86.3-1.el8.noarch
      httpd-tools-2.4.37-56.module+el8.8.0+1456+d0a01c5e.7.x86_64
      httpd-2.4.37-56.module+el8.8.0+1456+d0a01c5e.7.x86_64
      httpd-filesystem-2.4.37-56.module+el8.8.0+1456+d0a01c5e.7.noarch
      
      [root@rockylinux88 ~]# rm -i /usr/share/man/man8/apachectl.8.gz
      rm: remove regular file '/usr/share/man/man8/apachectl.8.gz'? y
      
      [root@rockylinux88 ~]# rpm -V httpd
      missing   d /usr/share/man/man8/apachectl.8.gz
      
      [root@rockylinux88 ~]# yum reinstall httpd
      Last metadata expiration check: 1:12:34 ago on Tue 06 Feb 2024 05:15:05 PM KST.
      Dependencies resolved.
      ==================================================================================================================================================
       Package                 Architecture             Version                                                       Repository                   Size
      ==================================================================================================================================================
      Reinstalling:
       httpd                   x86_64                   2.4.37-56.module+el8.8.0+1456+d0a01c5e.7                      appstream                   1.4 M
      
      Transaction Summary
      ==================================================================================================================================================
      
      ... 省略...
      
      Reinstalled:
        httpd-2.4.37-56.module+el8.8.0+1456+d0a01c5e.7.x86_64                                                                                          
      
      Complete!
      
      [root@rockylinux88 ~]# rpm -V httpd
      [root@rockylinux88 ~]#
      

    Ubuntu

    1. コマンドの実行に問題があるサーバと新規サーバにリモートアクセスします。
    2. 当該コマンドの位置とインストールされたパッケージ情報を比較して確認します。
      root@ubuntu2004:~# which awk
      /usr/bin/awk
      
      root@ubuntu2004:~# ls -l /usr/bin/awk
      lrwxrwxrwx 1 root root 21 Jan 24  2022 /usr/bin/awk -> /etc/alternatives/awk
      
      root@ubuntu2004:~# ls -l /etc/alternatives/awk
      lrwxrwxrwx 1 root root 13 Jan 24  2022 /etc/alternatives/awk -> /usr/bin/gawk
      
      root@ubuntu2004:~# ls -l /usr/bin/gawk
      -rwxr-xr-x 1 root root 711136 Nov  4  2019 /usr/bin/gawk
      
      root@ubuntu2004:~# dpkg -S /usr/bin/gawk
      gawk: /usr/bin/gawk
      
      root@ubuntu2004:~# 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.0.1+dfsg-1 amd64        GNU awk, a pattern scanning and processing language
      
    3. dpkg -Vまたは dpkg --verifyコマンドを使用して、パッケージのインストール後に変更された内容を確認します。
      正常である場合、コマンドを実行した結果として何も出力されません。
      root@ubuntu2004:~# dpkg -V gawk
      root@ubuntu2004:~#
      
      問題がある場合、以下のような出力結果を確認できます。Ubuntuの場合、現在は md5sumを確認した結果についてのみ変更された部分を確認します。
      5 digest (formerly MD5 sum) differs
      
      下記のユースケースでは、/usr/share/doc/gawk/READMEファイルの内容を変更してパッケージの変更内容を示します。
      root@ubuntu2004:~# ls -l /usr/share/doc/gawk/README
      -rw-r--r-- 1 root root 3854 Jun 19  2019 /usr/share/doc/gawk/README
      
      root@ubuntu2004:~# sed -i '$a TEST...' /usr/share/doc/gawk/README
      
      root@ubuntu2004:~# ls -l /usr/share/doc/gawk/README
      -rw-r--r-- 1 root root 3862 Jan 24 21:33 /usr/share/doc/gawk/README
      
      root@ubuntu2004:~# dpkg -V gawk
      ??5??????   /usr/share/doc/gawk/README
      
      出力結果で??5?????? は 5 digestを表します。これにより md5sumの結果値が異なり、初回インストール時のファイルから変更されたことを確認できます。
    4. 特定パッケージのコマンドが参照するライブラリを比較するために lddコマンドを使用して当該コマンドのライブラリを確認します。
      root@ubuntu2004:~# ldd /usr/bin/gawk
          linux-vdso.so.1 (0x00007ffe725a8000)
          libsigsegv.so.2 => /lib/x86_64-linux-gnu/libsigsegv.so.2 (0x00007f7942d3a000)
          libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x00007f7942cea000)
          libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x00007f7942c69000)
          libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f7942be5000)
          libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7942bdf000)
          libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7942a90000)
          libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f794289c000)
          libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f794286c000)
          /lib64/ld-linux-x86-64.so.2 (0x00007f7942ffe000)
      
    5. エラーの原因が見つからない場合は、当該パッケージを再インストールします。
      参考

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

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

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.