Установка пакета локально для пользователя — лучшие практики?

Установка пакета локально для пользователя — лучшие практики?

Я хочу установить 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/*

Затем добавьте соответствующие местоположения к вашему пути.

Связанный контент