Установить файлы разработки локально, чтобы собрать систему без прав root?


11

Есть сервер, на котором я работаю, на котором установлена ​​более старая версия Linux. У меня нет root-доступа к системе, поэтому я хотел создать более свежую версию инструмента, который я часто использую (Vim 7.3). Я подумал, что просто собрал его и установил в ~ / bin. Однако для этого требуются файлы разработки ncurses, которые не установлены в масштабе всей системы. Я нашел ncurses-devel rpm и извлек папки 'lib' и 'include', куда бы я их поместил и как сказать сценарию ./configure найти их, чтобы я мог правильно настроить и собрать пакет локально?

Изменить: я закончил работать вокруг этого, установив идентичные ОС в Virtualbox, и собрав там пакет и скопировав двоичные файлы.


serverfault.com/questions/23734 может быть достаточно похожим, чтобы помочь. Большинство ответов включают в себя установку фактически всей системы в вашем homedir, но это можно обойти в Gentoo Prefix и Rootless Gobo.
2010 года

Ответы:


14

Я делал это довольно часто в своей последней работе - решение, которое, казалось, работало лучше всего, заключалось в создании каталога ~ / usr и использовании аргумента --prefix для направления скриптов ./configure в правильном направлении. Вот шаги:

  • Создайте каталог ~ / usr и включите в него каталоги lib и bin.
  • В свой .profile, .bashrc или другой скрипт инициализации оболочки добавьте следующее (или эквивалент в диалекте вашей оболочки):
    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
  • При сборке пакетов используйте ./configure --prefix=/home/<username>/usr

Эта схема работала для меня в большинстве ситуаций, когда мне нужно было создавать вещи в пространстве пользователя. Самым сложным обычно является поиск и построение всех необходимых вам зависимостей, но для этого нужно просто прибегнуть к поиску в Google или рассудительному использованию функции менеджера пакетов 'get source'.


У меня не совсем получилось. Сценарий конфигурации, похоже, ничего не находит в ~ / usr
postfuturist

У меня была такая же проблема @postfuturist. В итоге я исправил это, используя ${HOME}вместо ~всех моих экспортных вызовов, а затем pkg-config был счастлив и смог найти мои установленные пользователем библиотеки и пакеты.
Phyatt

3

Обычно вы должны быть в состоянии повторно настроить и изменить код, чтобы определить новое местоположение в вашем домашнем каталоге или другой путь для всех библиотек и программ ...

Но, IMHO, самый простой способ (если у вас достаточно места) - использовать chroot в подкаталоге со всеми установленными в нем дистрибутивами linux. Конечно, как обычный пользователь, вы не можете использовать chroot , но вы можете использовать эти замечательные инструменты: fakechroot и fakeroot

Чтобы создать файловую систему chroot, я хотел бы развернуть каталог с помощью Debian (или любого производного от Debian, такого как ubuntu), используя утилиту debootstrap .

Так что процедура проста (я не буду вдаваться в технические подробности, прочитайте инструкции по эксплуатации):

  • Получите и установите: инструменты fakeroot, fakechroot и debootstrap
  • создать подкаталог с помощью debootstrap (я смог выполнить это только как root. Вы можете сделать это на другом компьютере и скопировать двоичные файлы при необходимости)
  • Выполнить: fakechroot fakeroot chroot mydebian-dir

Если вам нужно больше подробностей, я думаю, у меня был сценарий, чтобы сделать все это.


2

Другое решение этой проблемы - использование префикса Gentoo, как это делают пользователи MacOSX и другие платформы (solaris, AIX):

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

Он скомпилирует стек Gentoo (с помощью portage) в папке $ PREFIX. Он использует пакеты Gentoo, большинство пакетов поддерживают использование этих настроек.

Portage будет отслеживать все зависимости, у вас будет последняя версия программного обеспечения, она была протестирована сообществом ...


1

Если prefix=/home/foo/usrне работает, попробуйте:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.