rpm 패키지에서 파일 충돌 방지

rpm 패키지에서 파일 충돌 방지

rpm 패키지를 만들었습니다. .spec 파일의 일부는 아래와 같습니다.

%install    
mkdir -p ${RPM_BUILD_ROOT}/etc/xyz    
cp -rf %{BDIR}/console ${RPM_BUILD_ROOT}/etc/xyz

%files    
/etc/xyz/console

따라서 XYZ 패키지는 콘솔 디렉터리를 /etc/xyz디렉터리로 복사합니다. 콘솔 디렉토리에는 다른 디렉토리도 포함되어 있습니다.

설치는 완벽하게 작동하지만 패키지를 제거하면 rpm이 /etc/xyz/consoledir 아래의 파일과 디렉터리를 제거하지 않습니다.

따라서 rpm 패키지를 다시 설치하면 파일이 충돌하고 있다는 메시지가 나타납니다.

dir 아래의 모든 파일을 어떻게 정리합니까?

업데이트:

디렉토리 구조:

console-
   -dashboard.html
   -index.html
   -login.html
   -logout.html

   -cgi-bin
   -cgi-bin/authenticate.py
   -cgi-bin/login.py
   -cgi-bin/logout.py

   -media
   -media/script/application.js
   -media/script/bootstrap.js
   -media/script/jquery.min.js960.css
   -media/script/jquery.flot.js

   -media/css/bootstrap.css
   -media/css/style.css
   -media/css/jquery-ui-1.10.0.custom.css

   -media/image/logo.png
   -media/image/banner.png

사양 파일:

%install

[ "$(cd "${RPM_BUILD_ROOT}" && pwd)" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/css
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/css/images
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/script


cp %{BDIR}/console/dashboard.html ${RPM_BUILD_ROOT}/etc/application/console/dashboard.html
cp %{BDIR}/console/index.html ${RPM_BUILD_ROOT}/etc/application/console/index.html
cp %{BDIR}/console/login.html ${RPM_BUILD_ROOT}/etc/application/console/login.html
cp %{BDIR}/console/logout.html ${RPM_BUILD_ROOT}/etc/application/console/logout.html


cp %{BDIR}/console/cgi-bin/authenticate.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/authenticate.py
cp %{BDIR}/console/cgi-bin/login.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/login.py
cp %{BDIR}/console/cgi-bin/logout.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/logout.py

cp %{BDIR}/console/media/css/boostrap.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/boostrap.css
cp %{BDIR}/console/media/css/style.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/style.css
cp %{BDIR}/console/media/css/jquery-ui-1.10.0.custom.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/jquery-ui-1.10.0.custom.css

cp %{BDIR}/console/media/css/images/logo.png ${RPM_BUILD_ROOT}/etc/application/console/media/css/images/logo.png
cp %{BDIR}/console/media/css/images/banner.png ${RPM_BUILD_ROOT}/etc/application/console/media/css/images/banner.png

%files
%defattr(0700, root, root)

/etc/application/console/dashboard.html
/etc/application/console/index.html
/etc/application/console/login.html
/etc/application/console/logout.html

/etc/application/console/cgi-bin/authenticate.py
/etc/application/console/cgi-bin/authenticate.pyc
/etc/application/console/cgi-bin/authenticate.pyo
/etc/application/console/cgi-bin/login.py
/etc/application/console/cgi-bin/login.pyc
/etc/application/console/cgi-bin/login.pyo
/etc/application/console/cgi-bin/logout.py
/etc/application/console/cgi-bin/logout.pyc
/etc/application/console/cgi-bin/logout.pyo

/etc/application/console/media/css/boostrap.css
/etc/application/console/media/css/style.css
/etc/application/console/media/css/jquery-ui-1.10.0.custom.css

/etc/application/console/media/css/images/logo.png
/etc/application/console/media/css/images/banner.png


%post
echo "post install executing"

%preun

%postun
echo "post remove executing"

rm -rf /etc/application/console/cgi-bin/authenticate.py*
rm -rf /etc/application/console/cgi-bin/login.py*
rm -rf /etc/application/console/cgi-bin/logout.py*

오류:

file /etc/application/console/cgi-bin/login.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64
file /etc/application/console/cgi-bin/logout.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64
file /etc/application/console/cgi-bin/authenticate.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64

더 자세한 패키지 제거 출력

    D:     erase: waitpid(31098) rc 31098 status 0 secs 0.179    
    D: fini      100700  1 (   0,   0)      4827 /etc/application/console/cgi-bin/login.py skip
    D: fini      100700  1 (   0,   0)      1195 /etc/application/console/cgi-bin/logout.py
skip
    D: fini      100700  1 (   0,   0)      7227 /etc/application/console/cgi-bin/authenticate.py skip
    D: fini      100700  1 (   0,   0)     33550 /etc/cachebox/console/application.html
    D: fini      100700  1 (   0,   0)     33550 /etc/cachebox/console/login.html
    D: fini      100700  1 (   0,   0)     33550 /etc/cachebox/console/logout.html

rpm 패키지 관리자가 일부 파일을 건너뛰는 것을 발견한 경우. 질문은 왜입니까?

답변1

RPM은 지시문에 지정된 파일만 제거 "%files"하지만 해당 디렉토리 아래에 파일이 없는 경우에만 제거됩니다. "rpm -e"아래의 모든 파일을 제거 하려면 지시문 "/etc/xyz/console"아래에 해당 파일을 명시적으로 지정해야 합니다 ."%files"

RPM은 안전하지 않기 때문에 의도적으로 인식하지 못하는 것은 삭제하지 않습니다. 따라서 패키지를 제거한다고 해서 데이터가 손실되는 것은 아닙니다. 예를 들어 업데이트의 구성 파일을 생각해 보세요. RPM이 OS에 전달되는 내용을 확인하는 쉬운 방법은 항상 있습니다. "rpm -qpl your_package.rpm" 귀하의 경우 파일을 제거하는 두 가지 방법이 있습니다.

1) 아래에 명시적으로 지정합니다."%files"

2) 또는 "%postun"원하는 파일과 디렉터리를 제거하는 스크립트를 실행하세요.

도움이 되었기를 바랍니다.

답변2

%files    
/etc/xyz/console

%preun
if [ "$1" = 0 ] ; then
   rm -rf /etc/xyz/console/*
fi
exit 0

http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html

채팅 후 수정

rpm -qa --last | 머리

낡고 지저분한 꾸러미를 보여줬어

rpm -e old_crufty

이기다.

관련 정보