Я хочу установить Git локально для пользователя на сервере RHEL (у меня нет прав root). Какой самый понятный/организованный способ установки программного обеспечения для локальной учетной записи пользователя?
- Устанавливаете все в домашний каталог пользователя?
- Как будет выглядеть структура каталога?
- Вы бы выполнили установку из исходного кода или RPM?
- Если из RPM, то какой вариант вы бы использовали: YUM или RPM?
решение1
Есть способы установить RPM в каталог пользователя с помощью rpm
, но я не думаю, что это прямолинейно. Я не думаю, что есть способ с yum
.
Моей стандартной практикой стала компиляция из исходников в local
каталог у меня дома
$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include
Я скачиваю исходники так, как если бы /usr/local
у меня был root, например, в формате ~/local/git
.
При компиляции я задаю префикс к local
каталогу
$ configure --prefix=/home/user_name/local
$ make
$ make install
Затем я добавляю ~/local/bin
в $PATH в .bash_profile
.
Конечно, проблема установки из исходников в том, что вы не получаете автоматического разрешения зависимостей. Если вы обнаружите, что вам нужно установить зависимости, скомпилируйте и установите их, как указано выше. Затем, когда вы компилируете git
, вам нужно обновить флаги компиляции, чтобы они искали в правильном месте библиотеки зависимости и включаемые файлы:
./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'
решение2
Файл .rpm на самом деле является формой cpio
архива, которая во многом похожа на простую форму tar
. rpm2cpio
Утилита, вероятно, установлена в системе и не требует привилегий для использования; она пишет в стандартный вывод, поэтому для преобразования:
rpm2cpio whatever.rpm > whatever.cpio
Вы man cpio
можете посмотреть сами, но сейчас вам нужно передать архив в cpio в режиме «копирования в»:
cat whatever.cpio | cpio -i
Весьма вероятно, что все организовано в виде дерева каталогов, так что файлы попадают в соответствующие места (bin и т. д. и т. п.). Если их нет в вашем pwd, вы получите сообщение об ошибке, но это выведет список файлов в архиве (то же самое можно сделать с помощью переключателя -t
/ --list
). Если вы хотите создать каталоги автоматически, используйте -d
. Итак, быстрый способ распаковать rpm:
rpm2cpio whatever.rpm | cpio -i -d
Вы можете использовать это для установки в $HOME. Единственная проблема будет, если программа ожидает найти что-то в /etc
и т. д., так как многие вещи имеют свое место установки, жестко закодированное для какой-либо цели, когда они компилируются.
Сборка из исходного кода, вероятно, является лучшим вариантом (поскольку вы можете указать правильное местоположение), но если вы сможете заставить это работать в любом случае, то это быстро и просто.
Кроме того, файловый браузер midnight commander ( mc
), а также, вероятно, другие файловые браузеры позволят вам перемещаться по иерархии rpm или cpio (или сжатых tar или zip) и копировать отдельные файлы, как если бы архив был распакован (он создает временную файловую систему для просмотра с содержимым архива в ней).
решение3
Это альтернативный вариант (не использующий yum), и разрешение будет странным, но вы можете chown
предоставить его целевому пользователю позже: -- также это либо удача, либо неудача :-(
#-## Download all dependency for the RPM --
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash
#-## Install all downloaded to an alternate root
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*
Затем добавьте соответствующие местоположения к вашему пути.