GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak aktualizovat/upgradovat Debian/Ubuntu Linux pomocí Ansible

Podobně, pokud existují aktualizace jádra, které vyžadují restart operačního systému, bylo by nejlepší použít modul reboot ansible k restartování počítače, počkat, až se vypne, vrátit se a reagovat na příkazy

V této příručce vytvoříme skript pro aktualizaci mezipaměti systémů založených na Debianu a nainstalovaných aktualizačních balíčků. Zahrneme také úlohu restartovat server, pokud existují aktualizace jádra, které vyžadují restart.

Zkontrolujte také:

  • SSH – generování a práce s klíči ssh

Obsah

  1. Použití modulu Ansible apt k aktualizaci všech balíčků
  2. Restartování systému, pokud došlo k upgradům jádra
  3. Vytvoření souboru hostitelů
  4. Celou příručku
  5. Spuštění příručky

1. Pomocí modulu Ansible apt aktualizujte všechny balíčky

Před aktualizací balíčků v systémech založených na Debianu se vždy doporučuje provést aktualizaci mezipaměti apt. Toho lze dosáhnout pomocí tohoto příkazu:

sudo apt-get update

Toho můžeme dosáhnout pomocí Ansible s tímto úkolem:

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

Kde,

  1. update_cache:ano – Spusťte ekvivalent apt-get update příkaz na všech serverech
  2. force_apt_get:ano – Nepoužívejte příkaz aptitude, místo toho použijte příkaz apt-get na krabicích Debian/Ubuntu
  3. cache_valid_time:3600 – Aktualizujte mezipaměť apt, pokud je starší než cache_valid_time . Tato možnost se nastavuje v sekundách. V těchto příkladech je nastavena na 3600 sekund.

Dále provedeme upgrade. Obvykle spouštíme tento příkaz apt-get, abychom dosáhli funkce:

sudo apt-get upgrade -y

Toto je úkol Ansible k dosažení upgradu:

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

Kde,

  1. upgrade:dist – Spusťte ekvivalent apt-get upgrade příkaz na všech serverech Ubuntu nebo Debian Linux. Jinými slovy upgradujte všechny balíčky na nejnovější verzi.
  2. force_apt_get:ano – Místo aptitude použijte apt-get.

2. Restartování systému, pokud existují aktualizace jádra

Pokud dojde k upgradům jádra, budeme muset restartovat systém, abychom tyto změny uplatnili. Pokud je vyžadován restart, soubor s touto cestou /var/run/reboot-required bude vytvořen.

Co bychom chtěli udělat, je zkontrolovat, zda tento soubor existuje, a poté restartovat systém. Můžeme zaregistrovat novou proměnnou, pokud v systému existuje soubor /var/run/reboot-required pomocí ansible stat:

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

Kde:

  1. registrovat:reboot_required_file register klíčové slovo rozhoduje o tom, do které proměnné se výsledek uloží, a my je použijeme k restartování boxu následovně.
  2. stat:cesta:/var/run/reboot-required – Zjistěte, zda existuje cesta (/var/run/reboot-required)
  3. get_md5:ne – Algoritmus pro určení kontrolního součtu souboru. V tomto příkladu používám md5, ale můžete použít sha1, sha224, sha256, sha384 a sha512.

Nyní, když víme, zda má být server restartován nebo ne, přidejte úlohu pro restartování serveru, pokud soubor existuje:

- 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

Kde,

  1. test_command:uptime – Proveďte příkaz uptime na restartovaném serveru a očekávejte úspěch od, abyste určili, že je počítač připraven na další úkoly.
  2. když:reboot_required_file.stat.exists – Nejprve zkontrolujte, zda existuje soubor s názvem /var/run/reboot-required pomocí proměnné s názvem reboot_required_file. Restartovací modul bude fungovat pouze v případě, že tento soubor existuje a je vynucen pomocí podmínky Ansible „when:reboot_required_file.stat.exists“.

3. Vytvoření souboru hosts

Nyní, když máme logiku na místě, pojďme vytvořit soubor hosts.yaml. Uložte tento obsah do souboru s názvem 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. Celá příručka

Celou logiku můžeme dát do sešitu. Uložte tento obsah do souboru 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. Spuštění příručky

Ujistěte se, že jste nastavili ssh klíče a spustili jej následovně:

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

Toto je výstup na mém serveru

➜ 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

Koneckonců

Naučili jste se, jak aktualizovat všechny balíčky na vašich linuxových boxech Debian a Ubuntu a v případě potřeby restartovat server pomocí Ansible playbooků.


Ubuntu
  1. Jak upgradovat Debian 8 Jessie na Debian Linux 9 Stretch

  2. Jak aktualizovat jádro Linuxu v Ubuntu

  3. Jak aktualizovat Debian Linux

  1. Jak upgradovat na Ubuntu 20.04

  2. Jak aktualizovat Kali Linux

  3. Jak upgradovat Ubuntu na 20.10

  1. Jak upgradovat Ubuntu na 21.10

  2. Jak upgradovat Ubuntu na 21.04

  3. Jak upgradovat na Ubuntu 21.10