Я хотел бы установить пакеты программного обеспечения, аналогично apt-get install <foo>
, но:
sudo
и Цель этого упражнения - изолировать независимые сборки на моем сервере непрерывной интеграции .
1116 Я не возражаю против компиляции из исходного кода, если это то, что нужно, но, очевидно, я бы предпочел самый простой подход. Я попыталсяapt-get source --compile <foo>
как упомянуто здесь , но я не могу заставить его работать для пакетов, таких как autoconf. Я получаю следующую ошибку:
dpkg-checkbuilddeps: Unmet build dependencies: help2man
У меня есть help2man, скомпилированный в локальном каталоге, но я не знаю, как сообщить apt-get об этом. Любые идеи?
ОБНОВЛЕНИЕ : я нашел ответ, что почти работает на https://askubuntu.com/a/350/23678 , Проблема с chroot
заключается в том, что для этого требуется sudo. Проблема с apt-get source
заключается в том, что я не знаю, как разрешать зависимости. Должен сказать, что chroot
выглядит очень привлекательно. Есть ли эквивалентная команда, которая не требует sudo?
Это, как правило, невозможно, потому что вы могли бы связываться с системой зависимостей apt.
Существует два решения:
Установите пакет с исходным кодом, перейдите в каталог с исходным кодом, настройте и установите пакет независимо от систем упаковки вручную в каталог по вашему выбору. [ 119]
apt-get source <package>
Это не требует root, загружает исходный код пакета, распаковывает его в каталог в текущем каталоге. Затем вы можете перейти в этот каталог, внести изменения в источник, настроить установку для другой цели и т. Д.
Конфигурирование, в какой установочный каталог должны идти программы, зависит, однако, от конкретной программы. Многие программы используют ./configure --prefix localdir
для установки установки на localdir; но это далеко не всегда так.
Создайте среду chroot, в которую вы будете устанавливать пакеты:
debootstrap precise myfancyinstall
Теперь вы создали фиктивную установку в каталоге myfancyinstall /
chroot myfancyinstall
Вы можете используйте apt-get install внутри клетки chroot, чтобы установить что угодно.
Если у вас общий веб-хостер с доступом 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)"
Используя оболочку 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 download» или «apitutde download package».
если ни один из методов не работает, вы можете просто загрузить пакет вручную с http://packages.ubuntu.com/
другой метод - запустить команду chroot с параметром $ HOME, а затем установить так же, как описано выше, только без --root = $ HOME. эта команда приведет вас в оболочку, где "/" - ваш текущий $ HOME. чтобы вернуться в нормальный режим, не забудьте «выйти»
удачи.