패키지 명령어 이슈 점검 (Linux)
    • PDF

    패키지 명령어 이슈 점검 (Linux)

    • PDF

    기사 요약

    Linux 서버를 이용하면서 특정한 패키지의 명령어가 정상 동작하지 않을 때 점검하는 방법을 설명합니다.

    주의
    • 서버가 생성된 이후에 서버 내부의 설정이나 패키지 정상 여부 확인에 대해서는 네이버 클라우드 플랫폼에서 지원하지 않습니다.
    • 사용하는 리눅스 배포판에 대한 최신 공식 문서를 참조하는 것을 권장합니다.

    정상적인 명령어를 비교하기 위해서 동일한 OS 버전의 신규 서버를 구축하여 명령어를 실행하고 결과를 비교해 주십시오. 해당 가이드에서는 awk 명령어를 예제로 해당 예제를 사용하여 설명합니다.

    CentOS, Rocky Linux

    1. 명령어 실행 문제가 있는 서버와 신규 서버에 원격 접속을 해주십시오.
    2. 해당 명령어의 위치 및 설치된 패키지 정보를 비교해서 확인해 주십시오.
      [root@rockylinux86 ~]# which awk
      /usr/bin/awk
      
      [root@rockylinux86 ~]# ls -l /usr/bin/awk
      lrwxrwxrwx. 1 root root 4 Apr 16  2022 /usr/bin/awk -> gawk
      
      [root@rockylinux86 ~]# ls -l /usr/bin/gawk
      -rwxr-xr-x. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux86 ~]# rpm -qf /usr/bin/gawk
      gawk-4.2.1-4.el8.x86_64
      
    3. rpm -V 또는 rpm --verify 명령어를 사용하여 패키지가 설치된 이후에 변경된 사항을 확인해 주십시오.
      정상적인 경우, 명령어를 실행한 결과로 아무런 출력이 없습니다.
      [root@rockylinux86 ~]# rpm -V gawk-4.2.1-4.el8.x86_64
      [root@rockylinux86 ~]#    
      
      문제가 있는 경우에는 아래와 같은 출력 결과를 확인할 수 있습니다.
      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@rockylinux86 ~]# ls -l /usr/bin/gawk
      -rwxr-xr-x. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux86 ~]# chmod o-x /usr/bin/gawk
      
      [root@rockylinux86 ~]# ls -l /usr/bin/gawk
      -rwxr-xr--. 1 root root 685712 Apr 16  2022 /usr/bin/gawk
      
      [root@rockylinux86 ~]# rpm -V gawk-4.2.1-4.el8.x86_64
      .M.......    /usr/bin/gawk
      
      출력 결과에서 .M....... 은 Mode differs를 나타냅니다. 이를 통해 최초 설치 시의 권한과 현재 권한이 다르므로 변경되었음을 확인할 수 있습니다.
    4. 특정한 패키지의 명령어가 참조하는 라이브러리를 비교하기 위해 ldd 명령어를 사용하여 해당 명령어의 라이브러리를 확인해 주십시오.
      [root@rockylinux86 ~]# 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@rockylinux86 ~]# rpm -qa | grep httpd
      httpd-tools-2.4.37-47.module+el8.6.0+985+b8ff6398.2.x86_64
      rocky-logos-httpd-86.2-1.el8.noarch
      httpd-filesystem-2.4.37-47.module+el8.6.0+985+b8ff6398.2.noarch
      httpd-2.4.37-47.module+el8.6.0+985+b8ff6398.2.x86_64
      
      [root@rockylinux86 ~]# rm -i /usr/share/man/man8/apachectl.8.gz
      rm: remove regular file '/usr/share/man/man8/apachectl.8.gz'? y
      
      [root@rockylinux86 ~]# rpm -V httpd
      missing   d /usr/share/man/man8/apachectl.8.gz
      
      [root@rockylinux86 ~]# yum reinstall httpd
      Last metadata expiration check: 0:01:45 ago on Thu 04 Apr 2024 06:10:40 PM KST.
      Dependencies resolved.
      =========================================================================================================
       Package       Architecture   Version                                            Repository         Size
      =========================================================================================================
      Reinstalling:
       httpd         x86_64         2.4.37-47.module+el8.6.0+985+b8ff6398.2            appstream         1.4 M
      
      Transaction Summary
      =========================================================================================================
      
      ... 생략 ...
      
      Reinstalled:
        httpd-2.4.37-47.module+el8.6.0+985+b8ff6398.2.x86_64                                                   
      
      Complete!
      
      [root@rockylinux86 ~]# rpm -V httpd
      [root@rockylinux86 ~]#
      

    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.