Как часть моего собственного (собственного) файла .deb, который будет развернут на устройствах Ubuntu 12.04, мне нужно добавить несколько репозиториев PPA, запустить обновление apt-get, а затем установить пакеты из этих PPA.
Можно ли это сделать с помощью скриптов .preinst или .postinst в моем файле .deb?
Я предполагаю, что когда мой файл .deb установлен (sudo dpkg -i testing.deb
), вероятно, существуют некоторые блокировки или механизмы, которые могут не позволит мне вызывать определенные команды, такие как add-apt-repository
, apt-get update
и apt-get install
.
Это правильное предположение?
Вы правы. Сценарии сопровождающего не должны вносить никаких изменений в состояния apt или dpkg, кроме тех изменений, которые будут внесены при установке пакета в любом случае.
Однако, установка файла в /etc/apt/sources.list.d
- это нормально. Большинство пакетов, которые выполняют роль типа «установить этот пакет, чтобы добавить APT-репозиторий X в вашу систему», просто делают это (в отличие от вызова add-apt-repository
). Также распространено оставлять открытый ключ GPG, используемый для подписания репо, в /etc/apt/trusted.gpg.d
.
Если вы хотите упростить пользователю выполнение дополнительных этапов установки для вашего программного обеспечения, вы можете просто отправить скрипт, который выполняет эту работу, и попросить пользователя запустить скрипт вручную.
Но если вы действительно, действительно хотите вызвать apt-get update
или apt-get install
и т. Д. Автоматически, и вы не возражаете, что ваш пакет будет совершенно неприемлемым в Debian или Ubuntu, и ваши пользователи согласны с пакетом действуя таким образом, вы, возможно, могли бы поместить что-то в /etc/cron.d
, которое проверяет наличие любых существующих блокировок apt или dpkg, и, если они не удерживаются, выполняет дополнительные шаги по установке и организует повторное выполнение этих шагов. Я не рекомендую такой подход.