Обойти запрос да/нет в ‘apt-get upgrade’

Вопрос или проблема

Чтобы не печатать все команды apt-get при обновлении компьютера, я создал простую команду-алиас. Но мне действительно хочется просто ввести мой алиас и пусть он делает свое дело, а не ждать запроса да/нет на ввод “y”. Есть ли простой способ обойти этот запрос или, возможно, добавить “yes” где-нибудь в алиасе?

Конечно, хотя я никогда не пытался сделать это как алиас, но это должно сработать:

sudo apt-get update && sudo apt-get -y upgrade
apt-get -o Dpkg::Options::='--force-confold' --force-yes -fuy dist-upgrade

Чтобы уточнить Dpkg::Options::='--force-confold' из руководства:

--force-confold: не изменять текущий файл конфигурации, новая версия устанавливается с суффиксом .dpkg-dist. С этой опцией даже конфигурационные файлы, которые вы не изменяли, остаются нетронутыми. Вам нужно объединить ее с --force-confdef, чтобы dpkg переписывал конфигурационные файлы, которые вы не изменяли.

apt-get update && apt-get upgrade -y && apt-get autoremove && apt-get autoclean

Это обновляет пакеты, обновляет их, удаляет неиспользуемые пакеты, а затем удаляет старые версии пакетов.

Вы можете скопировать это и вставить в:

nano -w yourscript.sh

затем

chmod 777 yourscript.sh

затем

./yourscript.sh

Пока вы используете su перед всеми этими шагами, что я всегда делаю.

Ответ @wojox верен, но вы можете развить алиас для большей функциональности. Я использую это уже довольно долгое время без проблем. Это выполнит обновления (подтвердив с помощью -y), а затем проверит, требуется ли перезагрузка. Если требуется перезагрузка, вы можете сделать это, нажав [ENTER], или отменить и перезагрузиться позже, нажав [CTRL+C]. Если перезагрузка не требуется, алиас завершает свою работу и сообщает об этом.

Мой алиас sur для sudo upgrade reboot, но вы можете назвать его как угодно. Добавьте следующее в ваш файл .bashrc:

alias sur="sudo apt update && sudo apt upgrade -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"

Вы можете продолжать связывать больше команд, если хотите делать больше с тем же алиасом. Вот полный алиас из моего .bashrc, который также удалит неиспользуемые пакеты:

alias sur="sudo apt update && sudo apt dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"

Я наткнулся на эту тему, проверяя, есть ли опция пропуска запроса на перезапись файлов конфигурации, который был предоставлен в ответе Вадима выше! Мой новый алиас таков:

alias sur="sudo apt update && sudo apt -o Dpkg::Options::="--force-confdef" dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"

Затем я просто отправляю этот новый файл .bashrc на каждый из управляемых серверов с помощью:

while read HOST; do scp .bashrc username@$HOST:/home/username; done < managedhosts.txt

Вы также можете сделать это тихо, а затем получить уведомление по завершении. Недостаток заключается в том, что вы увидите только сообщения об ошибках и не увидите, что обновляется.

sudo apt-get update -qq && sudo apt-get dist-upgrade -qq && echo "Все обновлено!" && notify-send "Все обновлено!"

Определение функции оказалось самым простым, универсальным методом, который я нашел.

У меня лично никогда не получалось правильно использовать update && -y upgrade. У некоторых дистрибутивов возникает проблема с использованием операторов && и аргумента -y вместе в одной команде (или алиасе).

function update ()
{
    sudo apt update
    sudo apt -y upgrade
}

.

Ответ или решение

Для автоматизации процесса обновления программного обеспечения на вашей системе Linux, основанной на Debian, можно использовать утилиту apt-get с определенными параметрами, что позволит вам избежать подтверждений и выполнения лишних действий. В этой статье мы рассмотрим способ оптимизации этого процесса, используя команды и функциональные возможности, представленные в apt-get, чтобы обойти запрос подтверждения при выполнении команд обновления.

Теория

Команда apt-get upgrade используется для обновления установленных пакетов до новых версий, присутствующих в репозиториях. Однако, стандартное поведение этой команды предполагает запрос подтверждения от пользователя перед началом обновления, что может стать неудобством, если вы хотите автоматизировать процесс. Чтобы обойти этот запрос, можно использовать флаг -y, который автоматически отвечает утвердительно на все запросы, которые могут появиться во время выполнения команды apt-get upgrade.

Кроме того, при обновлении пакетов могут возникнуть ситуации конфликта из-за изменений конфигурационных файлов. Для управления поведением системы при таких конфликтах вы можете использовать различные параметры, такие как --force-confold, чтобы сохранить существующие конфигурационные файлы и минимизировать вмешательство пользователя.

Примеры

Наиболее простым способом применения вышеупомянутых теоретических знаний будет использование состава команд, перечисленных ниже:

sudo apt-get update && sudo apt-get -y upgrade

Эта команда выполняет обновление индекса пакетов перед обновлением самих пакетов, автоматически подтверждая свое действие. Команда также может быть расширена для включения дополнительных действий, таких как удаление ненужных пакетов и очистка кэша:

sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y

В этом примере, после обновления, удаляются ненужные пакеты и производится очистка кэша, чтобы освободить место на диске и поддерживать систему в чистоте.

Применение

Чтобы упростить использование этих команд, можно создать alias в файле .bashrc, что позволит вам запускать целый набор команд одним коротким именем. Например, добавьте следующую строчку:

alias update_system="sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y"

Не забудьте обновить текущую оболочку после внесения изменений в .bashrc, выполнив команду:

source ~/.bashrc

Теперь вы можете выполнить обновление всей системы одной командой:

update_system

Если вы хотите учесть необходимость перезагрузки после обновления системы, можете добавить дополнительный функционал для проверки условий перезагрузки:

alias update_system="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && if [ -f /var/run/reboot-required ]; then echo 'Перезагрузка необходима'; else echo 'Перезагрузка не требуется'; fi"

Эта команда выполнит обновление системы и проверит файл /var/run/reboot-required, который создается, если система требует перезагрузки для завершения процесса установки обновлений.

Для более профессионального подхода, вы можете создать скрипт и распределить его по всем управляемым серверам:

  1. Создайте скрипт:
nano update_script.sh
  1. Вставьте следующий код в файл:
#!/bin/bash
sudo apt-get update -qq && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y && echo "Обновление завершено."
  1. Сделайте скрипт исполняемым:
chmod +x update_script.sh
  1. Запустите скрипт:
./update_script.sh
  1. Распространите на другие серверы:
while read HOST; do scp update_script.sh user@$HOST:/path/to/directory; done < servers_list.txt

Используя эти методы, вы можете упростить процесс управления обновлениями на ваших серверах, делая его более автоматизированным и менее трудозатратным. Эти приемы помогут повысить эффективность и сократить количество времени, затрачиваемое на рутинные операции по поддержке системы в актуальном состоянии.

Оцените материал
Добавить комментарий

Капча загружается...