Geçici bir dizine yükleme yapmak?


3

Aşağıdakileri yapmak istiyorum:

Açık kaynak kodlu bir projeden kütüphanelere vb. Derlemek / bağlantı yapmak. Ancak bunu gerçekten yerel olarak çalıştırmak istemiyorum. Diğer makinelerde (elbette benzer mimariye sahip) doğru dizinlere takılabilmesi için onu bir rpm'ye paketlemek istiyorum. / Usr / local altında kurulacakmış gibi sembolik bağlar derleyip derlemesini ve oluşturmasını istiyorum, ancak bunun / usr / local / altındaki bir dizine, ancak bunu yapabilecek geçici bir dizine gitmesini istemiyorum. diğer paketlerin yerleştirdiği dosyaları silmeden silinmelidir.

Bunun gerçekleşmesine izin verecek bir kurulum yapmak için bazı parametreler var mı - yani altına kuruluyormuş gibi inşa edilir, /usr/localancak aslında "kurulum" altına ~/tmp/usr/localörneğin yerleştirilir.

Make install komutunu çalıştırıp fakat make komutunu durdurmaya çalıştığımı araştırdım, ancak bu kaynak dizindeki çalıştırılabilir dosyaları, nesne kodunu ve kitaplıkları birleştirir.


Hangi açık kaynaklı projeyi söylerseniz yardımcı olur , bu yüzden bu belirli projede (autoconf, cmake, plain makefile, neyse) nasıl çalıştığını anlayabiliriz. Çünkü zaten söylendiği gibi, buna bağlı. Genelde, genellikle yapılabilir (ve her zaman bu şekilde yapıyorum, çünkü kendimi stowyönetmek için kullanıyorum /usr/local).
dirkt

Yanıtlar:


5

Bu sorunun cevabı, hangi açık kaynaklı projeyi bu şekilde yüklemeye çalıştığınıza bağlıdır. Genel cevap, bazı açık kaynaklı projelerin, bu amaç için isteğe bağlı değişkenler sağlayan Makefiles'a sahip olmasıdır. Buna özel bir örnek, üst düzey Makefile DESTDIRdeğişkenini kullanan (ancak görünmüyor) bir değişken olan gdb'dir ve eğer bu komutu gdb derleme dizininde çalıştırırsam,

make DESTDIR=/tmp install

/tmpdosyayı kopyalamadan önce her hedef yola hazırlar .

Daha zor olan başka bir yaklaşım da, tüm kurulum, kurulum ve hepsini chroot ortamında yapmaktır. OverlayFS gibi bir şey kullanmak bunu kolaylaştırabilir, ancak bu genellikle en az direnç gösteren yol değildir.

Zaten bir Debian lezzetini kullanıyorsanız (çoğu diğerleri arasında Ubuntu içeren), muhtemelen daha kolay olan bir başka olasılık, açık kaynak projesine karşılık gelen Debian kaynak paketini almaktır (bu yaklaşımın kolay olmaması muhtemeldir. Bu kaynak paket) ve bu kaynaktan Debian paketini oluşturmak için talimatları takip edin. Gerçekten .rpmyerine bir şeye ihtiyacınız .debvarsa, .deba .rpm'ya dönüştürebilirsiniz , ya da belki de inşa .rpmetme sürecinde geride bırakılan dizin yapısından a oluşturabilirsiniz .deb. Bu cevap , kaynaktan bir Debian paketi oluşturma hakkında bir bilgi kaynağıdır.

En son openssl(bir yorumda belirtilen, ancak soruda henüz bahsedilmemiş), INSTALL dosyası şöyle der:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make DESTDIR=/tmp/package-root install         # Unix
   $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS

 The specified destination directory will be prepended to all
 installation target paths.

Bu farklı sürümleri arasında değişir openssl; 1.0.2 INSTALL için şunu söylüyor:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make INSTALL_PREFIX=/tmp/package-root install

 (or specify "--install_prefix=/tmp/package-root" as a configure
 option).  The specified prefix will be prepended to all
 installation target filenames.

Fikir biraz farklı detaylarda olduğu gibi aynı.


Teşekkürler, Eirik, bu konuya biraz daha baktıktan sonra, yapmaya çalıştığınız noktayı fark ettim - bunların hepsi makefile ve configure betiğinin nasıl yazıldığına bağlı. Bunu yapmaya çalıştığım açık kaynak projesi OpenSSL'dir. Uygulamamız bunu yapılandırmak, yapmak ve kurmak için bir yerden (?) Sağlanan bir betiği çalıştırarak bir rpm olarak oluşturmaktı. Bundan sonra deneyeceğim sanırım: betiği make install yoluyla çalıştırın. rpm'yi oluşturun, ardından kaldırma işlemini yapın. Farklı bir dizin oluşturmak için başka bir seçenek olması gerekiyordu. Daha sonra make install komutunu atlayabilirsiniz. Ama işe yaramıyor
Steve Cohen

Tekrar teşekkürler, Eirik - INSTALL doc'larının benden daha kapsamlı bir okuyucusunuz. INSTALL_PREFIX cevap oldu. Ne yazık ki bunu yeni sürümlerde DESTDIR olarak değiştirmeye ihtiyaç duyduklarını hissediyorlardı.
Steve Cohen

Buldum INSTALL_PREFIXönce buldum DESTDIRve başlangıçta belgelerde değil bir Makefile'da (Debian kaynaklarından) buldum. Github kaynaklarını aramaya gittim çünkü Debian'ın eklemediğinden emin olmak istedim INSTALL_PREFIX, bu noktada isim değişikliğini farkettim. Debian yaklaşımı, dağıtım tarafından sağlanan herhangi bir kaynak paket için bu tür varyasyonları, kaynaktan kaynaktan paketler oluşturmak için tek biçimli bir yol sağlayarak ortadan kaldırır (veya belki de gizler).
Eirik Fuller

Hakkında bir şey makemi öğrendin ? Her gün değil, iyi günler.
Wogsland
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.