Запуск apt-get autoremove с невозможным

Я поддерживаю стаю серверов EC2 с доступными. Серверы регулярно обновляются и обновляются с помощью apt-модуля .

Когда я вручную попытался обновить сервер, я получил следующее сообщение:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.13.0-29 linux-headers-3.13.0-29-generic
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
  linux-image-3.13.0-29-generic linux-image-3.13.0-32-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Есть ли способ запустить sudo apt-get autoremove с возможностью?

22 голоса | спросил Adam Matan 13 42014vEurope/Moscow11bEurope/MoscowThu, 13 Nov 2014 15:56:02 +0300 2014, 15:56:02

5 ответов


18

Поддержка опции apt-get --auto-remove теперь встроен в код Ansible apt (опция autoremove) с версии 2.1 Официальная документация находится на http://docs.ansible.com/ansible/apt_module.html

- name: Remove dependencies that are no longer required
  apt:
    autoremove: yes

Слияние произошло здесь .

Обратите внимание, что autoclean также доступен с 2.4

ответил oalders 14 PMpThu, 14 Apr 2016 16:46:42 +030046Thursday 2016, 16:46:42
14

Этот упрощенный метод требует только одной задачи

  - name: Autoremove unused packages
    command: apt-get -y autoremove
    register: autoremove_output
    changed_when: "'The following packages will be REMOVED' in autoremove_output.stdout"
ответил cortopy 15 J0000006Europe/Moscow 2015, 21:53:42
9

Вы можете сделать это с помощью command (untested):

  - name: Check if anything needs autoremoving
    shell: apt-get -y --dry-run autoremove | grep -q "0 to remove"
    register: check_autoremove
    ignore_errors: True
    changed_when: False
    always_run: True

  - name: Autoremove unused packages
    command: apt-get -y autoremove
    when: "check_autoremove.rc != 0"

Однако, я думаю, что было бы рискованно запускать autoremove автоматически. Из-за ошибок в системном администрировании, которые вы делали в прошлом (это может быть в вашем незаменимом коде), возможно, что пакет, который необходим, в какой-то момент может быть ложно обнаружен как авторемонтируемый, и это может помешать работе сервера. С другой стороны, не стоит оставлять неиспользуемые пакеты в системе, и это не очень распространено, если вы не вносите существенные изменения в настройку сервера.

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

ответил Antonis Christofides 13 42014vEurope/Moscow11bEurope/MoscowThu, 13 Nov 2014 16:55:05 +0300 2014, 16:55:05
6

Это вариант решения, предложенного Антонисом Кристофидесом. Он проверен и работает для меня. Я избегал использования ignore_errors в команде проверки. В противном случае он обычно использует тот же подход.

- name: Check if packages need to be autoremoved
  command: apt-get --dry-run autoremove
  register: check_autoremove
  changed_when: False
- name: Autoremove unused packages
  command: apt-get -y autoremove
  when: "'packages will be REMOVED' in check_autoremove.stdout"
ответил Marwan Alsabbagh 14 AMpTue, 14 Apr 2015 11:22:56 +030022Tuesday 2015, 11:22:56
1

Мне нравится этот упрощенный метод , и я добавляю сообщение для проверки и печати для меня.

#!/usr/bin/env ansible-playbook
---

- name: Autoremove 'apt' package for Debian, Ubuntu
  hosts: all

  pre_tasks:
    - name: check storage space - before
      shell: df -h
      register: check_storage_space_before

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_before.stdout_lines }}"

    - name: apt autoremove check 
      command: apt-get -y --dry-run autoremove
      register: apt_autoremove_output

    - name: print apt autoremove packages
      debug:
        msg: "{{ apt_autoremove_output.stdout_lines }}"

  tasks:    
    - name: autoremove unused packages
      become: yes
      command: apt-get -y autoremove
      changed_when: "'The following packages will be REMOVED' in apt_autoremove_output.stdout"

  post_tasks:
    - name: check storage space - after
      shell: df -h
      register: check_storage_space_after

    - name: print storage space
      debug:
        msg: "{{ check_storage_space_after.stdout_lines }}"

# vim: ft=ansible :

Благодарим вас за cortopy и Дейв Джеймс Миллер .

ответил Chu-Saing Lai 11 +03002016-10-11T08:11:46+03:00312016bEurope/MoscowTue, 11 Oct 2016 08:11:46 +0300 2016, 08:11:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132