GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So aktualisieren/aktualisieren Sie Debian/Ubuntu Linux mit Ansible

Wenn es Kernel-Updates gibt, die einen Neustart des Betriebssystems erfordern, wäre es am besten, das reboot ansible-Modul zu verwenden, um den Computer neu zu starten, zu warten, bis er herunterfährt, wieder hochfährt und auf Befehle antwortet

In diesem Handbuch erstellen wir ein Skript, um den Cache von Debian-basierten Systemen zu aktualisieren und die installierten Pakete zu aktualisieren. Wir werden auch eine Aufgabe zum Neustarten des Servers enthalten, wenn es Kernel-Updates gab, die einen Neustart erfordern.

Überprüfen Sie auch:

  • SSH – Generieren und Arbeiten mit SSH-Schlüsseln

Inhaltsverzeichnis

  1. Ansible apt-Modul verwenden, um alle Pakete zu aktualisieren
  2. Neustart des Systems bei Kernel-Upgrades
  3. Hosts-Datei erstellen
  4. Das ganze Playbook
  5. Playbook ausführen

1. Verwenden des Ansible apt-Moduls zum Aktualisieren aller Pakete

Bevor Sie ein Paket-Upgrade in Debian-basierten Systemen durchführen, wird immer empfohlen, eine apt-Cache-Aktualisierung durchzuführen. Dies kann mit diesem Befehl erreicht werden:

sudo apt-get update

Wir können dasselbe mit Ansible mit dieser Aufgabe erreichen:

- name: Update apt repo and cache on all Debian/Ubuntu boxes
  apt:
    update_cache: yes
    force_apt_get: yes
    cache_valid_time: 3600

Wo,

  1. update_cache:ja – Führen Sie das Äquivalent von apt-get update aus Befehl auf allen Servern
  2. force_apt_get:ja – Verwenden Sie nicht den aptitude-Befehl, sondern den apt-get-Befehl auf Debian/Ubuntu-Rechnern
  3. cache_valid_time:3600 – Aktualisieren Sie den apt-Cache, wenn er älter als cache_valid_time ist . Diese Option wird in Sekunden eingestellt. In diesem Beispiel ist sie auf 3600 Sekunden eingestellt.

Als nächstes führen wir das Upgrade durch. Normalerweise führen wir diesen apt-get-Befehl aus, um die Funktion zu erreichen:

sudo apt-get upgrade -y

Dies ist die Ansible-Aufgabe, um das Upgrade durchzuführen:

- name: Upgrade all packages on servers
  apt:
    upgrade: dist
    force_apt_get: yes

Wo,

  1. upgrade:dist – Führen Sie das Äquivalent von apt-get upgrade aus Befehl auf allen Ubuntu- oder Debian-Linux-Servern. Mit anderen Worten, aktualisieren Sie alle Pakete auf die neueste Version.
  2. force_apt_get:ja – Verwenden Sie apt-get anstelle von aptitude.

2. Neustart des Systems bei Kernel-Upgrades

Wenn es Kernel-Upgrades gibt, müssen wir das System neu starten, um diese Änderungen zu übernehmen. Wenn ein Neustart erforderlich ist, eine Datei mit diesem Pfad /var/run/reboot-required wird erstellt.

Was wir tun möchten, ist zu prüfen, ob diese Datei existiert, und dann das System neu zu starten. Wir können eine neue Variable registrieren, wenn die Datei /var/run/reboot-required auf dem System existiert, indem wir den ansiblen Status verwenden:

- name: Check if a reboot is needed on all servers
  register: reboot_required_file
  stat:
    path: /var/run/reboot-required
    get_md5: no

Wo:

  1. register:reboot_required_file – Das register Das Schlüsselwort entscheidet, in welcher Variable ein Ergebnis gespeichert wird, und wir werden es wie folgt verwenden, um die Box neu zu starten.
  2. Statistik:Pfad:/var/run/reboot-required – Feststellen, ob ein Pfad (/var/run/reboot-required) existiert
  3. get_md5:nein – Algorithmus zur Ermittlung der Prüfsumme der Datei. In diesem Beispiel verwende ich md5, aber Sie können sha1, sha224, sha256, sha384 und sha512 verwenden.

Nachdem wir nun wissen, ob der Server neu gestartet werden soll oder nicht, fügen wir eine Aufgabe hinzu, um den Server neu zu starten, wenn die Datei vorhanden ist:

- name: Reboot the server if kernel updated
  reboot:
    msg: "Reboot initiated by Ansible for kernel updates"
    connect_timeout: 5
    reboot_timeout: 300
    pre_reboot_delay: 0
    post_reboot_delay: 30
    test_command: uptime
  when: reboot_required_file.stat.exists

Wo,

  1. test_command:Betriebszeit – Führen Sie den Uptime-Befehl auf dem neu gestarteten Server aus und erwarten Sie Erfolg von, um festzustellen, dass die Maschine für weitere Aufgaben bereit ist.
  2. wann:reboot_required_file.stat.exists – Überprüfen Sie zunächst, ob die Datei namens /var/run/reboot-required existiert, indem Sie eine Variable namens reboot_required_file verwenden. Das Neustartmodul funktioniert nur, wenn diese Datei vorhanden ist und mithilfe der Ansible-Bedingung „when:reboot_required_file.stat.exists“ erzwungen wird.

3. Erstellen der Hosts-Datei

Nachdem wir nun die Logik eingerichtet haben, erstellen wir eine hosts.yaml-Datei. Speichern Sie diesen Inhalt in einer Datei namens hosts.yaml .

all:
  hosts:
    ubuntusrv:
      ansible_ssh_host: 10.2.11.10
      ansible_ssh_user: ubuntu
    debiansrv:
      ansible_ssh_host: 10.2.11.11
      ansible_ssh_user: admin
  children:
    allservers:
      hosts:
        ubuntusrv:
        debiansrv:

4. Das ganze Playbook

Wir können die ganze Logik in ein Playbook packen. Speichern Sie diesen Inhalt in der Datei upgrade.yaml

---
- name: Playbook to Update cache, upgrade packages and reboot os if necessary
  hosts: allservers
  become: yes
  gather_facts: False
  tasks:
    - name: Update apt repo and cache on all Debian/Ubuntu boxes
      apt:
        update_cache: yes
        force_apt_get: yes
        cache_valid_time: 3600

    - name: Upgrade all packages on servers
      apt:
        upgrade: dist
        force_apt_get: yes

    - name: Check if a reboot is needed on all servers
      register: reboot_required_file
      stat:
        path: /var/run/reboot-required
        get_md5: no

    - name: Reboot the server if kernel updated
      reboot:
        msg: "Reboot initiated by Ansible for kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists

5. Playbook ausführen

Stellen Sie sicher, dass Sie SSH-Schlüssel eingerichtet haben, und führen Sie sie wie folgt aus:

ansible-playbook -i hosts.yaml upgrade.yaml -vv

Dies ist die Ausgabe auf meinem Server

➜ ansible-playbook -i hosts.yaml upgrade.yaml -vv
ansible-playbook [core 2.12.1]
  config file = /Users/etowett/.ansible.cfg
  configured module search path = ['/Users/etowett/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/3.8/site-packages/ansible
  ansible collection location = /Users/etowett/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.2 (default, Apr  8 2021, 23:19:18) [Clang 12.0.5 (clang-1205.0.22.9)]
  jinja version = 3.0.3
  libyaml = True
Using /Users/etowett/.ansible.cfg as config file
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: upgrade.yaml ************************************************************************************************************************************************************
1 plays in upgrade.yaml

PLAY [Playbook to Update cache, upgrade packages and reboot os if necessary] ******************************************************************************************************
META: ran handlers

TASK [Update apt repo and cache on all Debian/Ubuntu boxes] ***********************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:7
changed: [ubuntusrv] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "cache_update_time": 1639737368, "cache_updated": true, "changed": true}

TASK [Upgrade all packages on servers] ********************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:13
ok: [ubuntusrv] => {"changed": false, "msg": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stderr": "", "stderr_lines": [], "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stdout_lines": ["Reading package lists...", "Building dependency tree...", "Reading state information...", "Calculating upgrade...", "0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."]}

TASK [Check if a reboot is needed on all servers] *********************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:18
ok: [ubuntusrv] => {"changed": false, "stat": {"atime": 1639737351.6237016, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "20f7959b87e8cd55b7c985e46d6fa38a4063037d", "ctime": 1639679787.0725238, "dev": 26, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 1143, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/x-diff", "mode": "0644", "mtime": 1639679787.0725238, "nlink": 1, "path": "/var/run/reboot-required", "pw_name": "root", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 32, "uid": 0, "version": null, "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}}

TASK [Reboot the server if kernel updated] ****************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:24
changed: [ubuntusrv] => {"changed": true, "elapsed": 73, "rebooted": true}
META: ran handlers
META: ran handlers

PLAY RECAP ************************************************************************************************************************************************************************
ubuntusrv                  : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Abschluss

Sie haben gelernt, wie Sie alle Pakete auf Ihren Debian- und Ubuntu-Linux-Boxen aktualisieren und den Server bei Bedarf mithilfe von Ansible-Playbooks neu starten.


Ubuntu
  1. So aktualisieren Sie Debian 8 Jessie auf Debian Linux 9 Stretch

  2. So aktualisieren Sie den Linux-Kernel in Ubuntu

  3. So aktualisieren Sie auf Ubuntu 20.04

  4. So aktualisieren Sie Kali Linux

  5. So aktualisieren Sie Debian Linux

So installieren Sie Ansible unter Ubuntu 20.04

So starten Sie Debian über die Befehlszeile neu

So aktualisieren Sie Ubuntu 20.04 auf 21.04

So aktualisieren Sie Ubuntu 16.04 auf Ubuntu 16.10

So aktualisieren Sie Ubuntu Linux [Anfängertipp]

Wie aktualisiere ich von 12.04 auf 12.10 mit CD?