Для програмного забезпечення тільки вам потрібно використовувати свій домашній каталог замість /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, але при встановленні у власному домашньому каталозі вам не потрібно запускати його як корінь, тож ви можете - і повинні - використовувати 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, і допомагають мені виправити їх (дивіться також тут ).