Я пишу скрипт для автоматической установки пакета, который находится в нашем репозитории, это программный пакет с одним из отмеченных файлов конфигурации Debian. Есть ли какая-либо опция, которую я могу передать apt-get
/ aptitude
чтобы она принимала новые файлы конфигурации?
В основном мне нужен apt
/ aptitude
эквивалент dpkg --force-confnew
Мне нужно ответить на следующий вопрос, поставленный в то время apt-get
как установка с Y
Файл конфигурации `` / opt / application / conf / XXX.conf` '
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : background this process to examine the
The default action is to keep your current version.
Дополнительная информация:
Кроме того, я передаю sudo
пароль в трубе для выполнения команды
echo "mysudopass"|sudo -S apt-get mypackage
Это указывает на ошибку при установке, когда установка находится на интерактивной фазе конфигурации.
Я на Ubuntu 10.04
apt версия: apt 0.7.25.3
Почему я не могу использовать dpkg
: эти Debian должны быть установлены из Repo, и у меня нет локальных Debian на моей машине
Ответы:
Вы можете передать
dpkg
параметры,apt-get
как этоС ,
--force-confdef
если старые конфигурационные файлы все еще существуют, они не получат переопределяется. Так что вы, вероятно, не будете использовать это, я просто документирую это для других.sudo
не будет запрашивать пароль, если вы откажетесь от опции аутентификации для пользователя или добавитеNOPASSWD
тег в конкретную запись. напримеристочник
Вы можете попробовать следующее:
Но обратите внимание, что это имеет значение, например, пустые пароли по умолчанию (может быть, вам понадобится какой-нибудь инструмент развертывания / настройки, например, puppet, chef, fabric ...?).
Смотрите sudoers (5) о том, как разрешить
sudo
вызовы без пароля .источник
В качестве альтернативы тому, что предложил forcefsck, я предлагаю вам добавить это в настройки APT, чтобы вам не приходилось постоянно добавлять эти трудно записываемые опции. Кроме того, это было бы полезно для автоматических обновлений, если у вас есть эти настройки.
Создайте
/etc/apt/apt.conf.d/71debconf
файл для следующего содержания:Примечание (от Джеффа): это изменение будет глобальным изменением. Если у вас есть другие пакеты в системе, которые вы хотите получать в автоматическом режиме, но также настраиваете их вручную, это не будет подходящим решением.
источник
В дополнение к другим ответам вам также может потребоваться установить среду UCF_FORCE_CONFFNEW = 1 .
Например, openssh в debian stretch использует ucf (не debconf),
openssh-server/openssh-7.4p1/debian/openssh-server.postinst
чтобы узнать о файле конфигурации. (Вы можете увидетьopenssh-server.postinst
, используяdget
против http://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1-10+deb9u4.dsc )Мы должны были использовать все приемы на этой странице в дополнение к тому, чтобы быть либеральными пользователями preseeding debconf .
Мы, однако, остановились только
export DEBIAN_FRONTEND=noninteractive
потому, что хотим знать, пропустили ли мы что-то (это может быть важно). Наш вариант использования - оператор, запускающий операцию. Ожидается, что обновление будет неинтерактивным, но оператор будет присутствовать, если что-то пойдет не так, и появится диалоговое окно. Ваша ситуация может быть другой.Но
export DEBIAN_FRONTEND=noninteractive
это ваш пресловутый кувалда.Просто будьте осторожны: настройка
-o Dpkg::Options::=--force-confnew
и / илиUCF_FORCE_CONFFNEW=1
означает, что все файлы конфигурации из установленных пакетов возвращаются в исходные. Так, например, в случаеopenssh-server
, вы/etc/ssh/sshd_config
будете сброшены к заводским настройкам. И, например,PermitRootLogin=yes
будут удалены. Но, конечно, вы этим не пользуетесь, так что все будет в порядке! ;-)источник