Чи є спосіб отримати APT для встановлення пакетів до мого домашнього каталогу?
Я не хочу широко змінювати систему змін.
Крім того, чи є менеджери пакетів Linux на основі домашнього каталогу?
Чи є спосіб отримати APT для встановлення пакетів до мого домашнього каталогу?
Я не хочу широко змінювати систему змін.
Крім того, чи є менеджери пакетів Linux на основі домашнього каталогу?
Відповіді:
Dpkg не мають функції --relocate, яку має RPM. Варто врахувати, скільки пакетів RPM підтримують цю функцію. В основному, це неможливо зробити.
Що ви можете зробити, це використовувати chroot, якщо ви хочете тестувати щось перед тим, як встановити його глобально в системі. Для цього потрібно мати можливість отримати доступ до root. Перше, що потрібно зробити - це створити базовий chroot:
# debootstrap lenny lenny-chroot
Це створює хроні Ленні всередині lenny-chroot
каталогу.
Тепер ми можемо ввести chroot:
# chroot lenny-chroot
Тепер ми можемо робити все, що завгодно, і встановлювати все, що завгодно, не псуючи решту системи. Коли ми закінчимо, просто введіть exit або натисніть ctrl-D
Linuxbrew - це ще один некореневий менеджер пакунків для Linux (заснований на популярній системі управління пакетами Homebrew для OS X), який збирає з джерела та зберігає бінарні файли у вашому домашньому каталозі.
Цитуючи документи, функціями Linuxbrew є:
Префікс Gentoo робить саме те, що ви хочете.
Він встановлює всі пакети у вказаний каталог. Не потрібен кореневий доступ. Якщо ви хочете позбутися від нього, просто видаліть базовий каталог.
PS: Це не працює на Ubuntu> = 11.04 або будь-яку іншу похідну Debian з Multiarch.
Так само, як незначне доповнення до варіанту його компілювання, є опція на півдорозі компіляції в пакет з іншим параметром префікса під час компіляції (з "checkinstall" чи, можливо, іншим способом). Перевага полягає в тому, що пакет з’явиться на менеджерах пакунків, таких як здатність чи синаптичність.
Крім того, я думаю, що в деяких випадках можливо завантажити фактичний .deb і змусити інший префікс через встановити dpkg, але я думаю, що це не те, що можна зробити з будь-яким випадковим пакетом, але вони повинні бути складені з деяка змінна для їх розташування (а не буквальний явний префікс), яку ви експортуєте перед установкою. Я нічого не знаю про процедуру, хоч, google для "префікса dpkg instdir".
Безкоштовний GoboLinux може робити саме те, що ви просите: менеджер пакунків, без підвищених привілеїв, у власному домашньому каталозі. Сподіваємось, ви знаєте, що робите; rootless - це не самий доглянутий режим установки Gobo, і коли я використовував його кілька років тому, він потребував декількох налаштувань, оскільки сценарій установки трохи застарів у порівнянні з іншими змінами Gobo.
Також є кнопка, яка перепаковує досить багато .deb
с, може встановлювати пакети до вашої домашньої директорії та не потребує кореневих привілеїв для роботи ... але для початкової установки потрібен root.
Зазвичай я дістаю джерела і перевіряю файл типу "ВСТАНОВИТИ". Зазвичай є вказівки робити ./configure --prefix=somedir
. Тоді вам доведеться додати somedir/bin
до свого шляху.
Ні, я не думаю, що ти можеш.
Найкраще, про що я зараз думаю, - це використовувати apt-get source
та компілювати ваш пакет. Можливо, ви могли якось підробити процедуру (яка може бути більш-менш автоматизованою) для встановлення пакетів у вашому домі.
Інший варіант - використовувати його dpkg -X
для витягування в каталозі на ваш вибір.
Дуже мало випадків, коли вам потрібно буде встановити пакунки в домашню папку.
Однак ви можете компілювати та встановлювати програмне забезпечення на свою локальну машину. Просто розпакуйте, а потім налаштуйте те ./configure --prefix=$HOME/local
чи інший каталог. Тоді можна make
і make install
як звичайно. Це дозволить скласти та встановити цю програму ~/local/
, наприклад, програма, яку ви виконуєте ~/local/bin/programmname
.
З мого власного досвіду, не існує простого способу використання існуючих пакетів DEB для встановлення в інший каталог, який не є середовищем chroot . Усі інструменти встановлення Debian / Ubuntu dpkg / aptitude / dselect вимагають кореневих привілеїв, щоб правильно функціонувати.
Тепер, з огляду на джерело DEB, ви можете змінити файл Debian / rules, щоб він створив і встановив пакет у іншому дереві каталогів, але тоді ви не використовуєте вже наявні бінарні пакети.
Як уже згадували інші, ви можете використовувати debootstrap і легко створювати середовище chroot, що я раніше робив, щоб мати 32-бітове середовище на 64-бітному хості, але для цього потрібна установка chroot з принаймні копіями базових пакетів. Якщо у вас є простір, і це життєздатне рішення, ви можете з'єднати його dchroot
, а ще краще schroot
, щоб дозволити легке виконання програм, встановлених у середовищі chroot.
У мене є проблеми уявити, як це буде працювати з офіційними сховищами з дистрибуції. Як слід вирішувати залежності? З системи чи з ваших домашніх каталогів? Що робити, якщо він знаходить різні версії в обох?
Найкращим, що я можу придумати, було б середовище chroot'd, як це роблять люди для 32-бітних додатків у 64-бітних системах. Це більше накладних витрат, як ви б викликали debootstrap в chroot, але з деяким символом , що цікавить сценарій оболонки оболонки, він може робити те, що ви хочете.
Я все ще працюю над проблемою, але debootstrap в основному те, що вам потрібно, і повинен працювати з фальшивою системою. debootstrap - це лише маса сценаріїв оболонок, тому я розтягую її, щоб побачити, що змушує її поставити галочку. Важка частина полягатиме у видаленні файлів після їх встановлення.
На жаль, я не чув жодного дистрибутива, що надав щось подібне (хоча я впевнений, що це було б дуже популярно). Ви, можливо, зможете імітувати дистрибутив на основі оборотів у хвилину ... Я цього не пробував, але ви можете створити базу даних об / хв на основі користувача, а потім встановити rpm в базу даних користувачів.
Спробуйте налаштувати новий користувальницький дистрибутив за допомогою:
rpm --initdb --dbpath DIRECTORY
Тоді є кілька варіантів, які можуть допомогти:
--prefix
--relocate
У мене є рішення, яке я успішно використовував для встановлення великої колекції програмних пакетів, що співпрацюють, на шкільному сервері Debian, де у мене взагалі немає кореневого доступу (навіть для встановлення іншого керування пакетами). Він не використовує deboostrap
ні будь-який менеджер пакунків.
Метод частково ручний, але я зробив усе можливе, щоб зробити його зручним.
Він використовує цей скрипт, який я назвав install
(не забувайте chmod +x
):
#!/bin/bash
# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME
# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX
# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
file="${PREFIX}${f}"
if grep -Iq . "$file"; then
if grep -q '/usr' "$file"; then
# interactively ask for each occurence, if it should be replaced
vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
fi
else
echo "Leaving binary file $file unmodified"
fi
done
Тому зазвичай спочатку завантажую файл deb, використовуючи apt-get download package_name
. Потім я запускаю ./install package_name_blabla.deb
і вручну приймаю рішення про кожне виникнення /usr
розпакованих файлів, якщо його слід замінити $PREFIX/usr
чи ні.
Це рішення повністю залежить від того, які пакунки встановлені в системі та які встановлені за цим методом. Зазвичай, наприклад, файли, які налаштовують pkg, потребують цієї заміни, тоді як рядки shebang як #!/usr/bin/perl
ні. Загальне правило - результат, який повинен вказувати на існуючий файл.
З встановленими таким чином пакетами, очевидно, потрібно якось розповісти про них іншим програмам. Це може бути досягнуто шляхом додавання правильних значень LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, і CMAKE_PREFIX_PATH
т.д.
У цьому підході є застереження, що залежності не завантажуються / не встановлюються автоматично; Ви повинні відстежувати їх вручну.
Також APT очевидно не знає про ці пакети, тому він назавжди покаже їх як відсутні. Але це має сенс - хто хотів би встановити загальносистемний додаток, який залежить від установки користувача.
Якщо ви хочете видалити програму, ви можете перерахувати вміст архіву deb, використовуючи, ar p "$1" data.tar.xz | tar tJ
а потім видалити всі ці файли з PREFIX
.