Я хотел бы установить пакеты программного обеспечения, похожие на apt-get install <foo> но:
Без sudo, и
В локальный каталог
Цель этого упражнения - изолировать независимые сборки в моем непрерывная интеграция сервер.
Я не возражаю против компиляции из исходного кода, если это то, что требуется, но, очевидно, я бы предпочел самый простой из возможных подходов. Я пытался apt-get source --compile <foo> как уже упоминалось здесь но я не могу заставить его работать для таких пакетов, как autoconf. Я получаю следующую ошибку:
У меня есть help2man, скомпилированный в локальном каталоге, но я не знаю, как сообщить об этом apt-get. Есть какие-нибудь идеи?
ОБНОВЛЕНИЕ: Я нашел ответ, который почти работает в https://askubuntu.com/a/350/23678. Проблема с chroot заключается в том, что для этого требуется sudo. Проблема с apt-get source дело в том, что я не знаю, как разрешить зависимости. Я должен сказать, chroot выглядит очень привлекательный. Существует ли эквивалентная команда, которая не требует sudo?
Это, в общем, невыполнимо, потому что вы бы испортили систему apt dependencies.
Есть два решения:
Установите исходный пакет, перейдите в исходный каталог, настройте и установите пакет независимо от систем упаковки вручную в каталог по вашему выбору.
apt-get source <package>
Для этого не требуется root, загружается исходный код пакета, распаковывается в каталог в текущем каталоге. Затем вы можете перейти в этот каталог, внести изменения в исходный код, настроить установку на другой целевой объект и т.д.
Однако настройка того, в какой каталог установки должны быть помещены программы, зависит от конкретной программы. Многие программы используют ./configure --prefix localdir чтобы настроить установку на localdir; но это далеко не всегда так.
Создайте среду chroot, в которую вы будете устанавливать пакеты:
debootstrap precise myfancyinstall
Теперь вы создали фиктивную установку в каталоге myfancyinstall/
chroot myfancyinstall
Вы можете использовать apt-get install в клетке chroot, чтобы установить все, что пожелаете.
используя оболочку bash и получив файл "package.deb" (предполагая, что имя пакета "package"), вы можете выполнить следующую команду, чтобы выполнить то, что вы хотите - установить пакет так, чтобы ваш домашний каталог обрабатывался так же, как "/" обрабатывался бы при обычной установке.
Вы можете столкнуться с некоторыми ошибками, такими как $HOME /var /lib /dpkg/lock отсутствует, поэтому просто создайте все недостающие файлы, которые вы получите из ошибок, а затем установка должна работать без sudo.
обратите внимание, что если "apt-get download" не работает, вы можете попробовать "apt download" или "apitutde download package".
другим методом было бы запустить команду chroot с параметром $HOME, а затем установить так же, как указано выше, только без --root=$HOME. эта команда приведет вас в оболочку, где "/" - это ваш текущий $HOME.to вернитесь в обычный режим, не забудьте нажать кнопку "выход".
Если вы находитесь на общем веб-хостере с ssh доступ, но нет apt-get нет root и т.д. или аналогичная ограниченная система, для вас может сработать следующее.Это сработало для меня в системе, где 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.debdebURL="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_removaldebFile=${debURL##*/}# change to your desired directory for installation/unpacking; here: $HOMEcd $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%29ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - rm -v $debFile # clean upecho "Done unpacking $debFile into $(pwd)"
Если у вас нет root в системе, вы не сможете легко разрешить зависимости *. Однако иногда это возможно; вам придется начать установку программного обеспечения у себя дома, начиная с самых нижних зависимостей и изменяя свой LD_PATH, чтобы программы могли находить свои библиотеки. Однако вы потерпите неудачу, если для запуска любого из пакетов требуется root (или suid).
@January, я пытаюсь скомпилировать программный проект внутри автоматизированной системы сборки. Насколько я знаю, ни одна из его зависимостей (необходимых для компиляции) не требует root.