Czy zainstalować w katalogu tymczasowym?


1

Chcę wykonać następujące czynności:

Stwórz z projektu open source kompilację / link do bibliotek itp. Nie chcę jednak uruchamiać tego lokalnie. Chcę go spakować do rpm, aby można go było zainstalować w odpowiednich katalogach na innych komputerach (co oczywiście miałoby podobną architekturę). Chcę, aby kompilował się i łączył oraz tworzył dowiązania symboliczne tak, jakby miał być instalowany w katalogu / usr / local, ale tak naprawdę nie chcę, żeby to trafiało do katalogu w / usr / local / ale do jakiegoś katalogu tymczasowego zostać wymazane bez usuwania plików umieszczonych tam przez inne pakiety.

Czy istnieje jakiś parametr, dzięki któremu instalacja mogłaby się zdarzyć - jest budowana tak, jakby miała być zainstalowana w /usr/local ale faktycznie umieść „instalację” pod ~/tmp/usr/local, na przykład.

Szukałem po prostu NIE uruchamiaj make install, ale zatrzymaj się na make, ale to przenika pliki wykonywalne, kod obiektowy i biblioteki w katalogu źródłowym.


Pomogłoby to, gdybyś powiedział który projekt open source, więc możemy przyjrzeć się, jak działa dla tego konkretnego (autoconf, cmake, plain makefile, cokolwiek). Ponieważ, jak już powiedziano, to zależy. Ogólnie rzecz biorąc, zazwyczaj można to zrobić (i zawsze robię to w ten sposób, ponieważ używam stow zarządzać moim /usr/local ).
dirkt

Odpowiedzi:


3

Odpowiedź na to pytanie zależy od tego, który projekt open source próbujesz zainstalować w ten sposób. Ogólna odpowiedź brzmi, że niektóre projekty open source mają pliki Makefile, które udostępniają opcjonalne zmienne do tego celu. Jednym z konkretnych przykładów jest gdb, którego najwyższy poziom Makefile używa (ale wydaje się, że nie przypisuje) DESTDIR zmienna i jeśli uruchomię to polecenie w katalogu budowania gdb,

make DESTDIR=/tmp install

to poprzedza /tmp do każdej ścieżki docelowej przed skopiowaniem pliku.

Innym trudniejszym podejściem jest wykonanie całej kompilacji, instalacji i wszystkich, w środowisku chroot. Używam czegoś takiego OverlayFS może to ułatwić, ale zazwyczaj nie jest to ścieżka najmniejszego oporu.

Inną możliwością, która jest prawdopodobnie łatwiejsza, jeśli już używasz smaku Debiana (który obejmuje Ubuntu wśród wielu innych), jest pobranie pakietu źródłowego Debiana odpowiadającego projektowi open source (takie podejście jest mało prawdopodobne, jeśli nie ma taki pakiet źródłowy) i postępuj zgodnie z instrukcjami, aby zbudować pakiet Debiana z tego źródła. Jeśli naprawdę potrzebujesz .rpm zamiast a .deb możesz przekonwertować .deb do a .rpm, a może możesz skonstruować .rpm ze struktury katalogu pozostawionej w procesie budowania .deb. Ta odpowiedź jest jednym ze źródeł informacji o budowaniu pakietu Debiana ze źródła.

Na ostatni openssl (wymieniony w komentarzu, ale jeszcze nie wymieniony w pytaniu) ZAINSTALOWAĆ plik mówi tak:

 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.

To zależy od różnych wersji openssl; dla 1.0.2 ZAINSTALOWAĆ mówi to:

 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.

Pomysł jest bardzo podobny, z nieco innymi szczegółami.


Dzięki, Eirik, po tym, jak przyjrzałem się temu trochę, zdałem sobie sprawę z tego, co próbujesz zrobić - wszystko zależy od tego, jak napisany jest skrypt makefile i skrypt konfiguracyjny. Projekt open source, z którym próbuję to zrobić, to OpenSSL. Naszą praktyką było zbudowanie tego jako rpm, uruchomienie skryptu dostarczonego z gdzieś (?), Który konfiguruje, tworzy i instaluje. Myślę, że spróbuję dalej: uruchom skrypt poprzez make install. zbuduj rpm, a następnie wykonaj deinstalację. Powinna istnieć inna opcja, aby zbudować w innym katalogu. Wtedy możesz pominąć instalację. Ale to nie działa
Steve Cohen

Jeszcze raz dziękuję, Eirik - jesteś bardziej dokładnym czytelnikiem dokumentów INSTALL niż ja. INSTALL_PREFIX był odpowiedzią. Szkoda, że ​​czuli potrzebę zmiany tego na DESTDIR w nowszych wersjach.
Steve Cohen

znalazłem INSTALL_PREFIX zanim znalazłem DESTDIRi początkowo znalazłem go w pliku Makefile (ze źródeł Debiana), a nie z dokumentacji. Szukałem źródeł github, ponieważ chciałem się upewnić, że Debian nie dodał INSTALL_PREFIX, w którym zauważyłem zmianę nazwy. Podejście Debiana eliminuje (lub może ukrywa) takie wariacje dla dowolnego pakietu źródłowego dostarczanego przez dystrybucję, zapewniając jednolity sposób budowania pakietów ze źródła.
Eirik Fuller

Dowiedz się czegoś o tym make? Nie codziennie, ale dobre dni.
wogsland
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.