Для программного обеспечения только вам нужно использовать свой домашний каталог вместо /usr/local.
Вместо того, чтобы менять владельца /usr/localили запускать команды от имени пользователя root, когда вы этого не хотите, вам следует просто настроить свои сборки так, чтобы они устанавливались в вашем домашнем каталоге вместо /usr/local. Это решает все потенциальные проблемы с изменением владельца /usr/local, включая то, как его binи sbinподкаталоги находятся на rootпути России.
Если вам нужно разрешить другим пользователям запускать ваше программное обеспечение, вы можете предоставить им доступ. На самом деле, они, вероятно, уже смогут, потому что по умолчанию ваш домашний каталог имеет разрешающий доступ для чтения и выполнения . (Если вы не хотите этого, вы можете изменить его довольно легко, просто используя chmodлюбые файлы или каталоги, которые вы хотите сделать приватными, и, возможно, также изменив свой umask.)
С установленным программным обеспечением в вашей домашней директории, исполняемые файлы , которые пошли бы в /usr/local/binвместо этого идти . Вы получите другие подкаталоги вашего домашнего каталога, соответствующие подкаталогам того программного обеспечения, которое вам нужно установить. Обычно это происходит автоматически при установке программного обеспечения из исходного кода./home/username/bin/usr/local
Конфигурирование ваших сборок
Большая часть программного обеспечения, которое вы создаете из исходного кода, имеет этап, на котором вы запускаете
./configure
Для подавляющего большинства программного обеспечения, поставляемого со configureскриптом, который может быть запущен таким образом, по умолчанию конфигурируется сборка для установки внутри, /usr/localкогда вы в конечном итоге запускаете sudo make installее установку. Причина в том, что это неявно эквивалентно выполнению:
./configure --prefix=/usr/local
Чтобы настроить сборку для установки в домашний каталог, используйте вместо этого:
./configure --prefix="$HOME"
На практике в Ubuntu пути к домашним каталогам не содержат пробелов, других пробелов или других символов, которые будут обрабатываться подобной оболочкой, например *, если вы не настроили свою учетную запись довольно странно, вы можете просто набрать:
./configure --prefix=$HOME
(Однако я не рекомендую использовать это для написания сценариев . Кроме того, в некоторых других ОС, таких как macOS, пути к домашним каталогам пользователей нередко содержат пробелы.)
Или, если вы предпочитаете, вы можете ввести полный путь к домашней директории:
./configure --prefix=/home/username
( usernameКонечно, замените ваше фактическое имя пользователя. Если по какой-то причине вашего домашнего каталога нет, /homeвам придется соответствующим образом изменить его.)
Установка ваших сборок
После запуска makeвы можете привыкнуть к запуску sudo make install, но когда вы устанавливаете в свой домашний каталог, вам не нужно запускать его как root, так что вы можете - и должны --omit sudo. Просто беги:
make install
Точно так же для программного обеспечения, которое поддерживает uninstallцель:
make uninstall
Это именно то, что вы просили ... просто в вашем домашнем каталоге, а не /usr/local.
Запуск ваших программ
Возможноbin подкаталог вашего домашнего каталога является:
- уже в вашем
$PATH, или
- будет в вашем,
$PATHесли вы просто выйдите и вернетесь.
Причина в том, что .profileфайл в вашем домашнем каталоге, который содержит команды, которые запускаются при входе в систему, содержит это по умолчанию для учетных записей пользователей, созданных в большинстве версий Ubuntu (включая первоначальную учетную запись администратора, созданную при установке ОС):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Этот код запускается, когда вы входите в систему (потому что он есть .profile) и размещает ваш личный binкаталог $PATH только в том случае, если он существует в то время. Вот почему вам может потребоваться выйти из системы и вернуться обратно.
Старые версии, такие как Ubuntu 14.04, а также новые версии, такие как Ubuntu 17.10, поставляются с этим. Тем не менее, Ubuntu 16.04, который, вероятно, является самым популярным релизом на момент написания этой статьи, имеет следующее:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Это просто добавляет binподкаталог вашего домашнего каталога - а также .local/binподкаталог - в ваш $PATH, не проверяя, существуют ли эти каталоги на самом деле. Так что если вы используете 16.04, или при обновлении от системы , которая была 16,04 , когда была создана ваша учетная запись пользователя, то binподкаталог вашего домашнего каталога, скорее всего , уже в вашем $PATH.
Ваш .profileфайл копируется из /etc/skelкаталога при создании учетной записи пользователя. Если ваша учетная запись пользователя была создана в более старом выпуске Ubuntu, она получила эту версию .profileи не была изменена - для вашей учетной записи пользователя - путем обновления до более позднего выпуска.
Как только binподкаталог вашего домашнего каталога окажется в вашем $PATH, вы сможете запускать программы, исполняемые файлы которых установлены там, просто вводя их имена, так же, как вы могли бы делать это с программами, установленными менеджером пакетов Ubuntu или установленными внутри /usr/local.
.localВариант
Возможно, вы заметили, что .profileфайл по умолчанию для учетных записей пользователей, созданный в некоторых выпусках Ubuntu, в том числе в 16.04, как описано выше, добавляет не только $HOME/binваш путь, но и $HOME/.local/bin. Если ваш .profileне добавляет это, но вы хотите, чтобы, то вы можете просто отредактировать его в.
Хотя это часто используется для хранения настроек и кэшированных данных , вы также можете установить программное обеспечение внутри .localподкаталога вашего домашнего каталога. Вы должны чувствовать себя свободными в этом, так как с точки зрения юзабилити и безопасности --prefix="$HOME/.local"это похоже на --prefix="$HOME".
Помните, что файлы и каталоги, которые начинаются с ., не отображаются по умолчанию в графических браузерах файлов (используйте Ctrl+, Hчтобы их отобразить или скрыть) или lsкомандой (передайте флаг -Aили, -aчтобы показать их). Это может быть не то, что вы хотите, или это может быть именно то, что вы хотите. Это вопрос личных предпочтений.
Однако я заметил, что некоторые автоматизированные менеджеры пакетов на основе исходного кода, которые создают и устанавливают программное обеспечение в своем домашнем каталоге, используют $HOME/.local. На самом деле я не знаю, насколько это распространено - я надеюсь продолжить исследование и обновить этот ответ - но вы можете предпочесть просто использовать $HOMEвещи, которые вы компилируете вручную. Таким образом, будет ясно, откуда все пошло. И если есть столкновение, программное обеспечение все еще может сосуществовать приемлемо.
Вы также можете намеренно установить некоторое программное обеспечение в $HOME/.localи другое программное обеспечение в $HOME. Тебе решать. Какая бы binдиректория ни была первой в вашей $PATHпеременной среды, это та, из которой будет выполняться команда, в случае, если команды с одинаковыми именами существуют в обеих.
Заслуга Zanna и Videonauth для указывая на ошибки в предыдущей версии этого ответа, о том, каких релизах Ubuntu есть какой код по умолчанию в .profile, и помогают мне исправить их (смотрите также здесь ).