Встановлення пакетів у локальний каталог?


38

Я хотів би встановити програмні пакети, подібні до apt-get install <foo>:

  1. Без sudo, і
  2. У локальний каталог

Мета цієї вправи - виділити незалежні складання на моєму сервері безперервної інтеграції .

Я не проти компілювати з джерела, якщо це потрібно, але очевидно, я віддаю перевагу найпростішому можливому підходу. Я спробував, apt-get source --compile <foo>як згадувалося тут, але я не можу змусити його працювати для таких пакетів, як autoconf. Я отримую таку помилку:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

У мене є help2man, зібраний у локальному каталозі, але я не знаю, як повідомити apt-get про це. Якісь ідеї?

ОНОВЛЕННЯ : Я знайшов відповідь, яка майже працює на https://askubuntu.com/a/350/23678 . Проблема chrootполягає в тому, що він вимагає судо. Проблема apt-get sourceполягає в тому, що я не знаю, як вирішити залежності. Треба сказати, chrootвиглядає дуже привабливо. Чи є еквівалентна команда, яка не потребує sudo?


Я пропоную це дублікат цього питання: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…

7
@kamil, це не так. Я не намагаюся встановити без доступу до мережі. Я намагаюся встановити без sudoі в несистемний каталог.
Гілі

4
Хлопці, будь ласка, не спростовуйте моє запитання, не пояснюючи чому . Дякую.
Гілі

Якщо у вас немає кореня в системі, ви не зможете залежності Resolve легко . Однак іноді це можливо; вам доведеться почати встановлювати програмне забезпечення у вашому домі, починаючи з найнижчих залежностей та змінюючи LD_PATH, щоб програми могли знайти свої бібліотеки. Однак ви не зможете, якщо будь-який з пакунків вимагає запуску root (або suid).
січня

@January, я намагаюся скласти програмний проект всередині автоматизованої системи збирання. Наскільки мені відомо, жодна її залежність (необхідна для компіляції) не потребує кореня.
Гілі

Відповіді:


20

Загалом, це неможливо, тому що ви зіпсуєте систему влучних залежностей.

Є два рішення:

  1. Встановіть вихідний пакет, перейдіть у вихідний каталог, налаштуйте та встановіть пакет незалежно від пакувальних систем вручну до вибраного каталогу.

    apt-get source <package>
    

    Для цього не потрібен корінь, завантажується джерело пакета, розпаковується в каталог у поточному каталозі. Потім ви можете перейти до цього каталогу, змінити джерело, налаштувати інсталяцію на іншу ціль тощо.

    Настроювання до того, в яку інсталяційну директорію повинні переходити програми, залежить від конкретної програми. Багато програм використовують ./configure --prefix localdirнацілювання установки на localdir; але це далеко не завжди так.

  2. Створіть середовище chroot, в яке ви встановите пакети:

    debootstrap precise myfancyinstall
    

    Тепер ви створили фіктивну установку в каталозі myfancyinstall /

    chroot myfancyinstall
    

    Ви можете використовувати apt-get install у клітці chroot, щоб встановити все, що завгодно.


Це виглядає перспективно. Використання apt-get sourceбез, --compileздається, пригнічує попередження про невдалі залежності (дозволяючи мені самостійно їх вирішити)
Гілі,

Чи є спосіб отримати пакети, у яких також немає джерела?
soandos

Рішення (2) буде працювати незалежно. В іншому випадку ви самостійно: можливо, є інший спосіб встановлення пакета. Або завантажте файл пакету deb і розпакуйте його за допомогою ar : ar vx mypackage.deb. Потім проаналізуйте вміст пакета і з’ясуйте, як його встановити вручну.
січня

14

за допомогою оболонки bash та придбання файлу "package.deb" (якщо припустити назву пакета "пакет") можна виконати таку команду, щоб виконати те, що ви хочете - встановити пакет, щоб ваш домашній каталог оброблявся однаково "/ "буде оброблено у звичайній установці.

Це команда:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Ви можете зіткнутися з деякими помилками, такими як $ HOME / var / lib / dpkg / lock відсутнє, тому просто створіть усі відсутні файли, які ви отримаєте від помилок, а потім установка повинна працювати без sudo.

зауважте, що якщо "apt-get download" не працює, ви можете спробувати "apt завантажити" або "apitutde завантажити пакет".

якщо жоден метод не працює, ви можете просто завантажити пакет вручну з http://packages.ubuntu.com/

іншим методом буде запустити команду chroot з параметром $ HOME, а потім встановити так само, як вище, лише без --root = $ HOME. ця команда приведе вас до оболонки, де "/" - ваш поточний $ HOME. щоб повернутися в звичайний режим, не забудьте "вийти"

Щасти.


Після створення відсутніх файлів, на які скаржився dpkg, він просто почав сегментувати.
Метт Чемберс

0

Якщо ви перебуваєте на спільному веб-хостері з sshдоступом, але не apt-getмаєте кореневих файлів тощо, або подібною системою з обмеженим доступом, для вас може працювати наступне. Це працювало для мене в системі, де uname -aповерталося щось на кшталтSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.