Czy instalujesz pliki programistyczne lokalnie, aby budować system bez dostępu roota?

11

Jest serwer, nad którym pracuję, ze starszą wersją Linuksa. Nie mam dostępu do systemu root, więc chciałem zbudować nowszą wersję narzędzia, z którego często korzystam (Vim 7.3). Pomyślałem, że po prostu go zbuduję i zainstaluję w ~ / bin. Wymaga to jednak plików programistycznych ncurses, które nie są instalowane w całym systemie. Znalazłem ncurses-devel rpm i wyodrębniłem foldery „lib” i „include”, gdzie je umieściłem i jak mam powiedzieć skryptowi ./configure, aby je znalazł, abym mógł poprawnie skonfigurować i zbudować pakiet lokalnie?

Edycja: W końcu obejrzałem ten problem, instalując identyczny system operacyjny w Virtualbox, budując tam pakiet i kopiując pliki binarne.

postfuturist
źródło
serverfault.com/questions/23734 może być na tyle podobny, aby pomóc. Większość odpowiedzi polega na zainstalowaniu w systemie homedir całego systemu, ale można to obejść w Gentoo Prefix i Rootless Gobo.
ephemient

Odpowiedzi:

14

Robiłem to dość często w mojej ostatniej pracy - rozwiązaniem, które wydawało się działać najlepiej, było utworzenie katalogu ~ / usr i użycie argumentu --prefix, aby skierować skrypty ./configure we właściwym kierunku. Oto kroki:

  • Utwórz katalog ~ / usr i umieść pod nim katalogi lib i bin.
  • W swoim .profile, .bashrc lub innym skrypcie inicjującym powłokę dodaj następujące (lub równoważne w dialekcie powłoki):
    export PATH=$PATH:~/usr/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include
  • Podczas budowania pakietów użyj ./configure --prefix=/home/<username>/usr

Ten układ działał dla mnie w większości sytuacji, w których musiałem budować rzeczy w przestrzeni użytkownika. Najtrudniejsze jest zwykle znalezienie i zbudowanie wszystkich potrzebnych zależności, ale to wymaga jedynie googlingu lub rozsądnego użycia funkcji „get source” menedżera pakietów.

chaos95
źródło
Nie całkiem dla mnie działało. Skrypt configure nie wydaje się znaleźć coś w ~ / usr
postfuturist
Miałem ten sam problem @ postfuturist. Skończyło się na tym, że użyłem ${HOME}zamiast ~wszystkich moich wywołań eksportu, a potem pkg-config był szczęśliwy i mógł znaleźć biblioteki i pakiety zainstalowane przez użytkownika.
phyatt
3

Zwykle powinieneś być w stanie ponownie skonfigurować i zmienić kod, aby zdefiniować nową lokalizację w katalogu domowym lub inną ścieżkę dla wszystkich bibliotek i programów ...

Ale, IMHO, najłatwiejszym sposobem (jeśli masz dużo miejsca) jest użycie chroota w podkatalogu z zainstalowanym wszystkimi dystrybucjami Linuksa. Oczywiście jako zwykły użytkownik nie możesz używać chroota , ale możesz użyć tych wspaniałych narzędzi: fakechroot i fakeroot

Aby utworzyć system plików chroot, lubię wdrożyć katalog z Debianem (lub dowolnym pochodnym Debiana, takim jak ubuntu) za pomocą narzędzia debootstrap .

Procedura jest więc łatwa (nie wprowadzę szczegółów technicznych, przeczytaj instrukcje obsługi):

  • Pobierz i zainstaluj: narzędzia fakeroot, fakechroot i debootstrap
  • utwórz podkatalog przy użyciu debootstrap (byłem w stanie wykonać to tylko jako root. Możesz to zrobić na innym komputerze i w razie potrzeby skopiować pliki binarne)
  • Wykonaj: fakechroot fakeroot chroot mydebian-reż

Jeśli potrzebujesz więcej szczegółów, myślę, że miałem gdzieś skrypt, aby to wszystko zrobić.

Keymon
źródło
2

Innym rozwiązaniem tego problemu jest użycie prefiksu Gentoo, ponieważ użytkownicy MacOSX i innej platformy (solaris, AIX):

http://www.gentoo.org/proj/en/gentoo-alt/prefix/

Skompiluje stos Gentoo (z portage) w lokalizacji $ PREFIX. Korzysta z pakietów Gentoo, większość pakietów obsługuje użycie tych ustawień.

Portage będzie śledził wszystkie zależności, będziesz mieć ostatnią wersję oprogramowania, została przetestowana przez społeczność ...

Keymon
źródło
1

Jeśli prefix=/home/foo/usrnie działa, spróbuj:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
BobuSumisu
źródło