Я использую командную строку
dpkg --force-not-root --root /some/other/location -i the_package.deb
но я получаю ошибку
dpkg: could not open log '/var/log/dpkg.log': Permission denied
Я ожидал, что журнал будет записан на
/some/other/location/var/log/dpkg.log
С помощью rpm вы можете создать альтернативную базу данных, но я не вижу, как это сделать с помощью dpkg. Чтобы добраться до вышеуказанного состояния, я вручную добавил (возможно, не самый мудрый подход) следующее.
mkdir -p /some/other/location/var/lib/dpkg/updates
mkdir -p /some/other/location/var/lib/dpkg/triggers
mkdir -p /some/other/location/var/lib/dpkg/info
touch /some/other/location/var/lib/dpkg/status
touch /some/other/location/var/lib/dpkg/available
Если я попытаюсь запустить как root, чего я бы предпочел не делать в этом случае
sudo dpkg --force-not-root --root /some/other/location -i the_package.deb
он идет дальше и устанавливает deb в моем альтернативном месте, но затем терпит неудачу с
dpkg (subprocess): unable to execute installed post-installation script (/var/lib/dpkg/info/the_package.postinst): No such file or directory
но этот файл был записан приведенной выше командой dpkg в
/some/other/location/var/lib/dpkg/info/the_package.postinst
Я считаю, что не использую базу данных dpkg для машин, потому что это программное обеспечение, устанавливаемое на сетевой диск, доступное нескольким пользователям. Возможно, лучшим подходом будет просто извлечение содержимого пакета и установка вручную. Конкретный программный пакет не имеет перечисленных внешних зависимостей.
Программа управления пакетами Debian 'dpkg' версии 1.18.2 (amd64)
Использовать --log=filename
чтобы изменить место входа.
Если вы используете --root=/foo
вам нужно настроить /foo
как действующий корень. Например., sudo chroot /foo /bin/sh
работает.
«Нет такого файла или каталога» означает, что the_package.postinst
скрипту требуется что-то, чего нет в chroot (скорее всего /bin/sh
и множество других вещей). Это запускается изнутри chroot, поэтому вы не видите /foo
в пути.
Вы могли бы использовать --no-triggers
для предотвращения срабатывания триггеров. Однако теперь вы должны увидеть, во что это превращается. dpkg
сильно склонен думать, что вы хотите запустить пакет на машине, на которой вы его устанавливаете, а корневая файловая система находится в /
.
«[J] Просто извлеките содержимое пакета и установите его вручную». Да, похоже, вы устанавливаете его на файловый сервер, который не предназначен для его запуска.
Изменить: хотя это строго решает вашу проблему, «современный» метод распространения программного обеспечения заключается в использовании программного обеспечения для оркестрации (например, chef) для установки пакетов непосредственно на клиентах, а не совместного использования программного обеспечения через файловый сервер. Диски дешевые.