Вопрос или проблема
Я пытаюсь установить пакет без запроса подтверждения. Ответ, который я нашел в интернете, это сделать так, и это прекрасно работает для пакета, который я устанавливаю:
DEBIAN_FRONTEND=noninteractive apt install myPackage -y
Однако недавно я сменил облачного провайдера, и выполнение той же команды на том же сервере Ubuntu 20.04 не дает того же результата. На этот раз она не срабатывает. Я полагаю, что они используют разные версии Ubuntu 20.04 (скорее всего, обычную и минимальную). Под “не срабатывает” я имею в виду, что она все еще запрашивает у меня ввод, даже когда выполняется из bash-скрипта.
Я пробовал разные методы, такие как следующие, но ничего не отвечает на последний вопрос, который задает пакет, а именно простое вопрос “да/нет”, и даже в интерактивном GUI я не могу просто нажать enter
, чтобы ответить yes
. Это заставляет меня вводить yes
. Также вышеприведенная команда по-прежнему запрашивает у меня ввод с помощью черно-белого текстового GUI, даже несмотря на то, что я установил noninteractive
.
Методы, которые я пробовал и которые не сработали:
export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo apt-get install -y myPackage
yes yes | sudo DEBIAN_FRONTEND=noninteractive apt-get install -y myPackage
DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get --option=Dpkg::Options::=--force-confold --option=Dpkg::options::=--force-unsafe-io --assume-yes --quiet install myPackage
Как я могу заставить это работать, чтобы я мог отвечать на вопросы просто стандартными ответами, не получая запросов на ввод? Это работало нормально на одном сервере Ubuntu 20.04, но сейчас не работает на другом от другого провайдера.
Я думаю, что вы должны быть в состоянии просто сделать следующее:
sudo apt install -y myPackage
Я думаю, что любые экспортируемые переменные среды будут сброшены, как только вы войдете в ‘sudo’, так как это другое пространство пользователя.
Похоже на вот это: https://stackoverflow.com/questions/70236670/debian-frontend-noninteractive-not-working-inside-shell-script-with-apt-get
Ответ или решение
Чтобы установить пакет с помощью apt
без получения запросов на подтверждение, важно учитывать несколько моментов, которые могут влиять на поведение команды в различных окружениях.
1. Исполнение команды в неинтерактивном режиме
Основной подход для установки пакетов с использованием apt
без интерактивных запросов — это установка переменной окружения DEBIAN_FRONTEND
в значение noninteractive
. Но обращайте внимание, что правильное применение этого метода имеет свои нюансы.
2. Пробуем различные способы
На практике, если вы столкнулись с проблемой, что переменная окружения не сохраняется при использовании sudo
, попробуйте записать полный командный вызов с переменной окружения, как показано ниже:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y myPackage
Обратите внимание, что переменная DEBIAN_FRONTEND
задается непосредственно перед командой apt-get
, что гарантирует сохранение ее значения даже при переходе в другую пользовательскую среду (в данном случае — при выполнении через sudo
).
3. Настройка Dpkg
Если ваши попытки по-прежнему не работают, возможно, установка пакета требует дополнительных настроек. Попробуйте использовать следующие опции непосредственно с dpkg
:
echo "myPackage myPackage/option select yes" | sudo debconf-set-selections
Эта команда позволяет задать стандартное значение для опции конфигурации пакета. После этого попробуйте снова выполнить команду установки:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y myPackage
4. Устранение GUI-элементов
Если вы по-прежнему получаете текстовые интерфейсы, подобные dialog
или whiptail
, при установке пакета, вы можете отключить использование GUI-элементов, установив следующие переменные окружения:
export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
Избегайте также использования команд yes
, так как они могут не сработать для различных интерактивных форматов. Вместо этого использование debconf-set-selections
даст вам большую контроль над процессом.
5. Протестируйте в другой ОС
Если всё вышеперечисленное не помогает, стоит обратить внимание на систему, на которой вы это проверяете. Иногда различные "облегчённые" версии Ubuntu могут включать ограниченные наборы предустановленных конфигураций для apt
, которые могут влиять на его поведение. Чтобы проверить это, попробуйте установить другой базовый пакет, например apt-utils
, перед установкой необходимого вам пакета.
Заключение
Иногда при переносе конфигураций и скриптов между разными средами могут возникать проблемы, основанные на отличиях в конфигурации или установленных пакетах. Подходите к этой задаче с вниманием и экспериментируйте с вышеуказанными рекомендациями. Удачи в установке пакетов и минимизация запросов на подтверждение!