2011-11-10 16 views
20

Bir RPM paketi oluşturma sürecinde, BuildRoot'u belirtmem gerekiyor ve daha sonra $ RPM_BUILD_ROOT değerini alan% kurulumda kullanılacaktır. Ben her zaman RPM_BUILD_ROOT'un RPM'nin paketleme yapması için sahte kurulum olduğunu düşünüyorum. Ardından, RPM paketini kullanarak yükleme zamanında, gerçek konuma yüklenir. Örneğin:Gerçekte RPM_BUILD_ROOT nedir?

$RPM_BUILD_ROOT/usr/bin 

Ben $ RPM_BUILD_ROOT sadece ambalaj işlemi için olduğunu düşündü ve bazı yönlerden RPM $ RPM_BUILD_ROOT ayırt edebilir ve kullanıcı istek "rpm -ivh package.rpm" gerçekleştirdiğinde fiili yükleme konumu/usr/bin.

Ancak son zamanlarda bazı belgeleri okurken, $ RPM_BUILD_ROOT'un kurulacak gerçek konum olduğu ve kullanıcı tarafından $ RPM_BUILD_ROOT'un kullanıcı tarafından belirlenebilmesi için $ RPM_BUILD_ROOT ortam değişkeninin ayarlandığı kullanıcı tarafından belirtildiği önerilmektedir. arzu yerlerinde paket. Aksi takdirde, $ RPM_BUILD_ROOT boş olacak ve varsayılan konuma yüklenecektir. Yukarıdaki durumda,/usr/bin'tir. Böylece, $ RPM_BUILD_ROOT sadece paketleme veya "sahte yükleme" işlemi için değil, kullanıcının Windows'ta klasör konumunu seçmeye benzer şekilde yükleme konumunu tanımlaması için bir yoldur.

Düşüncem doğru değil mi bilmiyorum. Birisi lütfen doğrulayabilir mi? Şimdiden teşekkürler.

cevap

27

$RPM_BUILD_ROOT (veya eşdeğeri %{buildroot} SPEC dosya makro) daima RPM paket herhangi dosyaları arar altında dizini tutar. RPM komut dosyaları (örneğin, manuel sayfaları sıkıştıran komut dosyası), yeni yüklenen dosyaları nerede arayacağınızı bilmek için de bu değeri kullanır. Normalde, bu değer boş değildir ve genellikle sistem dizinlerinden uzakta bir konum içerir - genellikle /tmp veya /var/tmp altında.

SPEC dosyasının yazarı make install (ya da her türlü yükleyici söz konusu yazılım kullanıyor) yazılımı nihayet kurulduğunda kullanılmalıdır aynı hiyerarşi ile $RPM_BUILD_ROOT altında herhangi bir dosya yerleştirir emin olmak için bekleniyor. Örneğin. ls, ls RPM'yi /bin/ls sürümüne yüklemek için %install SPEC dosya bölümü, ls'un $RPM_BUILD_ROOT/bin/ls'a yerleştirildiğinden emin olmalıdır.

SPEC dosyasının yazarı, uygun bir konum belirtmek için BuildRoot: etiketini de kullanması bekleniyor. Alternatif olarak, derleme sistemi uygun bir girişe sahip bir rpmrc RPM yapılandırma dosyasına sahip olabilir.

  • Normal kullanıcıların kaynak paketi oluşturmak mümkün olacak: böylece any case yılında inşa kökü, ayarlanmalıdır.

  • Süpürge, kaynak paketini önceden oluşturmalıysa, süper kullanıcı sonuçta ortaya çıkan ikili paketi yüklemedikçe, oluşturma işlemi herhangi bir sistem dosyasını bloke etmeyecektir. Ve evet,paketleriniolarak oluşturmak için iyi bir neden olabilir - örneğin, tüm glibc testsuitesini çalıştırmak, bazı testler için root ayrıcalıklarını gerektirir.

Bu, RPM boş bir yapı kök değişkenine sahip bir paket oluşturabilir ve oluşturabilir. Bu durumda, hem kurulum yüklemesi hem de nihai varış yerleri çakışacaktır. Ör. make install, varsayılan konumları kullanır, böylece sistem dosyalarını ör. /usr/lib, yeterli ayrıcalıklarla çalıştırılıyorsa.Ek olarak,bölümünüzde /usr/bin/* bölümüne sahip olmak, /usr/bin/ derleme dizininin tüm içeriğini ikili paketinize çekecektir.

Sonuç:

  • boş yapı kök kullanmayın.

  • Kesinlikle başka yol olmadıkça, root olarak paketleri oluşturmayın.

+0

Böylece, içinde Son olarak, $ RPM_BUILD_RooT yapı işlemi için kullanılan bir değerdir ve RPM'nin dosyaları yapı köküne taklit etmesi için, son yükleme konumları için dizin yapısını alabilir. Yapım köküyle ilgili ilk anlayışımın doğru olduğunu düşünüyorum. – Amumu

+0

Özel bir kök direyi nasıl kurulabilir? – Jeroen

+0

Eşzamanlı $ RPM_BUILD_ROOT'u, benzer ana bilgisayarlarda paralel sunucuların desteklenmesi için aşağıdaki gibi bir şey kullanarak önerin: 'BuildRoot:% {_ tmppath} /% {name} -buildroot -% {version} -% {release}' – MarkHu

7

dosya ~/.rpmmacros Kullanıcı başına yolu tanımlar:

%_topdir %(echo $HOME)/rpmbuild 
%_tmppath %{_topdir}/tmp 

ve bir de rpmbuild komut satırı parametreleri ile tanımlayabiliriz:

rpmbuild --define '_topdir /home/username/rpmbuild' 
İlgili konular