Rpm paketinde dosya çakışmasından kaçının


5

Bir rpm paketi oluşturdum.spec dosyasının bir kısmı aşağıda

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

%files    
/etc/xyz/console

Böylece XYZ paketi konsol dizinini dizine kopyalar /etc/xyz. Konsol dir ayrıca başka dir.

Kurulum gayet iyi çalışıyor ancak rpm paketini kaldırdığımda /etc/xyz/consoledir.

Bu yüzden rpm paketini yeniden kurarak dosyaların çakıştığını söylüyor.

Dir altındaki tüm dosyaları nasıl temizleriz?

Güncellemeler:

Dizin yapısı:

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

spec dosyası:

%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*

Hatalar:

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

Daha fazla ayrıntılı paket çıktısını kaldır

    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 paket yöneticisinin bazı dosyaları atladığını fark ederseniz.Question neden?


3
İlgili: Yüksek kaliteli RPM paketleri üretmek istiyorsanız, Fedora'nın RPM paketleme kurallarını yararlı bulabilirsiniz.
Michael Hampton

Yanıtlar:


2

RPM, yalnızca "%files"direktif altında belirtilen dosyaları kaldıracak , ancak yalnızca bu dizinin altında dosya yoksa. "rpm -e"Altındaki tüm dosyaları kaldırmak istiyorsanız "/etc/xyz/console"açıkça onları "%files"yönerge altında belirtmeniz gerekecektir .

RPM güvenli olmadığı için bilerek tanımadığı hiçbir şeyi silmez, bu nedenle yalnızca paketi kaldırarak veri kaybetmezsiniz, örneğin güncellemedeki yapılandırma dosyalarını düşünün. RPM'nin işletim sistemine ne getirdiğini görmenin her zaman kolay bir yolu "rpm -qpl your_package.rpm" vardır. Sizin durumunuzda, dosyaların kaldırılmasının 2 yolu vardır:

1) Açıkça bunları altında belirtin "%files"

2) Veya "%postun", dosyalarınızı ve niyet ettiğiniz dizinleri çıkardığınız betiği çalıştırın .

Bu yardımcı olur umarım.


ama rpm -qpl your_package.rpmyine de altında tüm dosyaları ve dizini içerir. /etc/xyz/consoleBu bir sorun gibi görünmüyor.Ve rpm ilkesine göre dir %filedirektif içinde dir belirtebilirsiniz .
Dipak Ingole

Elbette, ancak "rpm -e", içinde herhangi bir dosya veya başka bir klasör yoksa, yalnızca bu dizini kaldırabilirsiniz.
Danila Ladner

Böylece,% dosyaların altında "/ etc / xyz / console / *" ekleyebilirsiniz
Danila Ladner 17:13

rpm politikası ile oldukça çelişkili görünüyor. Belirttiğim zaman /etc/xyz/console/*da işe yaramadı
Dipak Ingole

ayrıca rpm poliçesi diyor Yüzlerce dosya içeren dizinler oluşturan paketler için her dosyayı içeren bir liste oluşturmak oldukça zahmetli olabilir. Bu durumu biraz kolaylaştırmak için,% dosya listesi bir dizine bir yol içeriyorsa, RPM otomatik olarak bu dizindeki her dosyayı ve her alt dizindeki her dosyayı paketler. Kabuk stili globbing,% dosya listesinde de kullanılabilir. İşte referans rpm.org/max-rpm/s1-rpm-inside-files-list.htm
Dipak Ingole

1
%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

Sohbetten sonra EDIT

rpm -qa - son | kafa

bazı eski paketini gösterdi

rpm -e old_crufty

kazan.


Başımın üstünden lütfen iki kez kontrol edin.
dmourati

Bu açıkça altında o belirtmek dahi, can.RPM paket yöneticisi bazı dosyaları atlama eğer ... sohbet -Read question..join yeniden lütfen sorunu değil %fileSpec dosyasında bölüm
Dipak ingole

Bölüm içinde dizin belirleme gizemini açıklayabilir misiniz %files.. Y RPM paket yöneticisi dizin içindeki dosyaları kaldırmaz ..?
Dipak Ingole
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.