Skip to content

Ansible - ein kurzer Test

Linux
  • Kur vorab, ich denke nicht das ich zum jetzigen Zeitpunkt einen Einblick darin habe, was Ansible alles kann. Aber, da ich hier immer als notiere, was ich so ausprobiere, möchte ich auch das hier festhalten.

    Sollte das jemand lesen, der davon richtig Ahnung hat, Vorsicht hier kann einiges Falsche stehen! Ich bitte in so einem Fall um einen Kommentar, damit ich das ändern oder löschen kann. Vielen Dank!

    Was ist Ansible?

    Ansible ist ein Open-Source Automatisierungs-Werkzeug zur Orchestrierung und allgemeinen Konfiguration und Administration von Computern
    Quelle: https://de.wikipedia.org/wiki/Ansible

    Die Projektseite -> https://www.ansible.com/

    Warum Ansible?

    Um alle meine Server immer schön auf dem aktuellen Stand zu halten, nutze ich zur Zeit ClusterSSH. Wenn es aber etwas umfangreicher und komplizierter werden sollte, scheint es nicht das rechte Tool zu sein.

    Da ich gerne eine erstellte VM auf einen von mir festgelegten Stand bringen möchte, erschien mir dieses Tool als geeignet.

    Installation

    apt install ansible
    

    Kontrolle

    frank@frank-MS-7C37:~$ ansible --version
    ansible 2.9.6
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/home/frank/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3/dist-packages/ansible
      executable location = /usr/bin/ansible
      python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]
    

    Konfiguration Ansible

    Die findet man unter /etc/ansible/

     frank@frank-MS-7C37:~$ ls -lha /etc/ansible/
        insgesamt 40K
        drwxr-xr-x   2 root root 4,0K Nov 13 15:47 .
        drwxr-xr-x 156 root root  12K Nov 13 15:44 ..
        -rw-r--r--   1 root root  20K Mär  5  2020 ansible.cfg
        -rw-r--r--   1 root root 1005 Nov 13 15:47 hosts
    

    Die ansible.cfg habe ich auf Standard gelassen. In der hosts Datei konfiguriert man die Server, die man administrieren möchte. Also z.B.

    192.168.3.10    
    

    Playbook

    Ansible wird mit YAML Textdateien konfiguriert. Ich hatte erst angefangen, diese mit nano zu editieren habe aber sehr schnell festgestellt das das keine gute Idee ist. YAML ist sehr empfindlich was die Formatierung angeht und das sieht man in einem richtigen Code-Editor einfach besser. Somit habe ich das Playbook in Codium ertsellt und editiert. Dort kann man bei Erstellung auch direkt YAML auswählen.

    Ich habe in meinem Homeordner eine Datei task.yml erstellt. Der Name ist beliebig.

    ---
    - name: My task
      hosts: all
      tasks:
    
    # Update and install the base software
      - name: Update apt package cache.
        apt:
          update_cache: yes
          cache_valid_time: 600
    
      - name: Upgrade installed apt packages.
        apt:
          upgrade: 'yes'
          #register: upgrade
    
      - name: Ensure that a base set of software packages are installed.
        apt:
          pkg:
           # - build-essential
           # - curl
            - fail2ban
           # - firewalld
           # - git
            - htop
           # - needrestart
           # - pwgen
           # - resolvconf
            - restic
            - rsync
           # - sudo
           # - unbound
           # - unzip
           # - vim-nox
          state: latest
    

    In diesem Beispiel wird erst mal alles aktualisiert. Danach wird eine Liste von Tools installiert, die ich gerne hätte.

    Aufruf des Playbooks

    ansible-playbook playbooks/task.yml
    

    Je nach Konfiguration Eurers Servers kann es evt. folgende Ausgabe kommen.

    frank@frank-MS-7C37:~$ ansible-playbook playbooks/task.yml 
    
    PLAY [My task] **************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] ******************************************************************************************************************************************************************
    fatal: [<Server-IP>]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: frank@<Server-IP>: Permission denied (publickey,password).", "unreachable": true}
    
    PLAY RECAP ******************************************************************************************************************************************************************************
    <Server-IP>     : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0  
    

    Der Grund ist, das zum Login der Public-Key benötigt wird. Also root@<Server-IP>, oben ist das ja mit frank@<Server-IP> erfolgt.

    ansible-playbook -u root playbooks/task.yml
    

    Ein -u root übergibt den Benutzer root und nun klappt der Zugriff. Ausgabe

     frank@frank-MS-7C37:~$ ansible-playbook -u root playbooks/task.yml 
     
     PLAY [My task] **************************************************************************************************************************************************************************
     
     TASK [Gathering Facts] ******************************************************************************************************************************************************************
     [WARNING]: Platform linux on host <Server-IP> is using the discovered Python interpreter at /usr/bin/python3, but future installation of another Python interpreter could
     change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
     ok: [<Server-IP>
     
    
     TASK [Update apt package cache.] ********************************************************************************************************************************************************
     changed: [<Server-IP>]
     
     TASK [Upgrade installed apt packages.] **************************************************************************************************************************************************
     ok: [<Server-IP>]
     
     TASK [Ensure that a base set of software packages are installed.] ***********************************************************************************************************************
     ok: [<Server-IP>]
     
     PLAY RECAP ******************************************************************************************************************************************************************************
     <Server-IP>     : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    

    Fazit

    Sieht nach einem sehr mächtigen Werkzeug aus und auch extrem umfangreich. Aber auch das was ich suche um ein paar Dinge zu erledigen, die ich nicht immer wieder von Hand machen möchte. Beispiele

    • apt update && apt upgrade
    • packages installieren
    • firewall installieren (Mein Standardfile)
    • und viele Dinge, die mir im Moment nicht einfallen 😉

    Fortsetzung folgt...

  • MongoDB - Erste Erfahrungen

    Linux
    2
    0 Stimmen
    2 Beiträge
    144 Aufrufe
    FrankMF

    So frisch von der MongoDB Front und wieder viel gelernt, weil beim Üben macht man Fehler 🙂

    Oben war ja mongodump & mongorestore von der KI empfohlen. Hier das wie ich es gemacht habe.

    mongodump frank@redis-stack:~$ mongodump -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio -o mongodump/ 2024-04-06T09:29:25.174+0200 writing portfolio.stockList to mongodump/portfolio/stockList.bson 2024-04-06T09:29:25.175+0200 writing portfolio.users to mongodump/portfolio/users.bson 2024-04-06T09:29:25.175+0200 done dumping portfolio.stockList (8 documents) 2024-04-06T09:29:25.176+0200 writing portfolio.total_sum to mongodump/portfolio/total_sum.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.total_sum (1 document) 2024-04-06T09:29:25.177+0200 writing portfolio.old_total_sum to mongodump/portfolio/old_total_sum.bson 2024-04-06T09:29:25.177+0200 writing portfolio.stocks to mongodump/portfolio/stocks.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.users (4 documents) 2024-04-06T09:29:25.178+0200 writing portfolio.settings to mongodump/portfolio/settings.bson 2024-04-06T09:29:25.178+0200 done dumping portfolio.settings (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.old_total_sum (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.stocks (34 documents) mongorestore mongorestore -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio mongodump/meineDatenbank/

    Hier wird die Datensicherung mongodump/meineDatenbank/ in die neue Datenbank portfolio transferiert.

    Grund für das Ganze? Mich hatte der Datenbank Name meineDatenbank gestört.

    Benutzerrechte

    Jetzt der Teil wo man schnell was falsch machen kann 🙂 Ich hatte also die neue Datenbank, konnte sie aber nicht lesen. Fehlten halt die Rechte. Ich hatte dann so was hier gemacht.

    db.updateUser("frank", { roles: [ { role: "readWrite", db: "meineDatenbank" }, { role: "readWrite", db: "portfolio" }]})

    Ging auch prima, kam ein ok zurück. Nun das Problem, ich hatte beim Einrichten, den User frank als admin benutzt. Durch den oben abgesetzten Befehl (frank ist ja admin), wurden die neuen Rechte gesetzt und die Rechte als Admin entzogen!! Das war jetzt nicht wirklich das was ich gebrauchen konnte. LOL

    Ich hatte jetzt keine Kontrolle mehr über die DB. Das war aber nicht so wirklich kompliziert, das wieder zu ändern. Die Authentication temporär abstellen. Also /etc/mongod.conf editieren und

    #security: security.authorization: enabled

    eben mal auskommentieren. Den Daemon neustarten und anmelden an der DB.

    mongosh --host 192.168.3.9

    Danach neuen User anlegen

    db.createUser({ user: "<name>", pwd: "<password>", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })

    mongod.conf wieder ändern und neustarten. Danach hat man wieder eine DB mit Authentifizierung und einen neuen Admin. Ich bin diesmal, man lernt ja, anders vorgegangen. Es gibt nun einen Admin für die DB und einen User zum Benutzen der Datenbanken! So wie man es auch auf einem produktiven System auch machen würde. Wenn ich jetzt mal was an den Benutzerrechten des Users ändere, kann mir das mit dem Admin nicht mehr passieren. Hoffe ich 🙂

  • Manjaro - KDE Plasma 6

    Linux
    3
    0 Stimmen
    3 Beiträge
    626 Aufrufe
    FrankMF

    Da fällt mir heute beim Lesen dieses Beitrages auf das ich damals ja auf unstable gestellt habe.

    [frank-manjaro ~]# pacman-mirrors --get-branch unstable

    Anleitung dazu -> https://wiki.manjaro.org/index.php/Switching_Branches

    Ok, da könnte ja auch mal was schief gehen? Da ich hier aber ein btrfs Filesystem fahre und Timeshift Snapshots anlegt, sollte das Risiko überschaubar sein.

    567442e5-80f0-4ce9-9b91-3e8f9a4a94d8-grafik.png

    Es werden bei jeder Aktion vorher Snapshots angelegt, auf die man im Grub Menü zugreifen kann und diese wieder installieren lassen kann. Hatte das früher schon mal getestet, ging wirklich gut. Werde ich die Tage auch hier auf dem System, zur Sicherheit, mal testen.

    Fazit, ich lasse das mal so wie es ist 🙂

  • RockPro64 - Mainline Kernel 6.8.0-rc3

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    234 Aufrufe
    Niemand hat geantwortet
  • NanoPi R5S - Samba

    NanoPi R5S
    5
    0 Stimmen
    5 Beiträge
    316 Aufrufe
    FrankMF

    Test zu dem NFS Mount (240GB USB SSD an USB-Port)

    [frank-ms7c37 nfs]# dd if=/dev/zero of=sd.img bs=1M count=2048 oflag=direct,nonblock 2048+0 Datensätze ein 2048+0 Datensätze aus 2147483648 Bytes (2,1 GB, 2,0 GiB) kopiert, 20,0851 s, 107 MB/s

    Test zum NAS Mount (Samba) (2TB 2,5Zoll HDD am USB-Port)

    [frank-ms7c37 NAS]# dd if=/dev/zero of=sd.img bs=1M count=2048 oflag=direct,nonblock 2048+0 Datensätze ein 2048+0 Datensätze aus 2147483648 Bytes (2,1 GB, 2,0 GiB) kopiert, 21,4538 s, 100 MB/s

    Das für den NAS Mount (Samba) sollte die maximal Schreibgrenze der Festplatte sein. Mehr dürfte da nicht gehen. Das andere könnte an den Adaptern liegen, die ich dafür benutze.

    Bei mir ist NFS hier aktuell nicht viel schneller, oder ich bin zu doof dafür.

  • checkmk - Agent auf einem Debian Buster Server installieren

    Verschoben checkmk
    1
    0 Stimmen
    1 Beiträge
    618 Aufrufe
    Niemand hat geantwortet
  • Twitter-Beiträge in NodeBB anzeigen

    Verschoben NodeBB
    3
    0 Stimmen
    3 Beiträge
    339 Aufrufe
    FrankMF

    Endlich was gefunden um Twitter-Beiträge hier anzuzeigen. Beispiele siehe oben... YEAH

    Wie man das in NodeBB und dem Plugin nodebb-plugin-ns-embed einbaut, steht hier.
    https://community.nodebb.org/topic/7135/nodebb-plugin-ns-embed-ns-embed/39

  • [HOWTO] Verschlüsseltes NAS aufsetzen

    Verschoben ROCKPro64
    12
    0 Stimmen
    12 Beiträge
    3k Aufrufe
    FrankMF

    Da btrfs bei mir ja nicht so der Bringer war, Fehler im Image vom Kamil?, Fehler in btrfs? Ich weiß es nicht, also weg damit! Da ich das NAS noch richtig produktiv genutzt hatte, waren die Daten schnell gesichert. Danach das NAS neugestartet, nun sind die beiden Platten nicht mehr gemountet und wir können damit arbeiten.

    ACHTUNG! Ich bitte wie immer darum, das Gehirn ab hier einzuschalten! Sonst droht Datenverlust! Aus Sicherheitsgründen gebe ich hier die Laufwerke so an = sdX1 Das X bitte entsprechend austauschen!

    Die beiden Platten mit

    sudo fdisk /dev/sdX

    neu einrichten. Alte Partition weg, neu einrichten usw. Im Detail gehe ich hier jetzt nicht drauf ein. Ich gehe davon aus, das das bekannt ist.

    Der Plan

    raid_pool0 = sdX1 = /dev/mapper/raid_pool0
    raid_pool1 = sdX1 = /dev/mapper/raid_pool1

    Verschlüsseln sudo cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdX1 sudo cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdX1 Platten entschlüsseln sudo cryptsetup open /dev/sdX1 raid_pool0 sudo cryptsetup open /dev/sdX1 raid_pool1 RAID1 anlegen sudo mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/mapper/raid_pool0 /dev/mapper/raid_pool1 sudo mkfs.ext4 /dev/md0 Script zum Entschlüsseln und Mounten crypt.sh #!/bin/bash ###############################################################################$ # Autor: Frank Mankel # Verschlüsseltes Raid1 einbinden! # # Hardware: # ROCKPro64v2.1 # PCIe SATA Karte # 2St. 2,5 Zoll HDD Platten a 2TB # # Software: # bionic-minimal 0.7.9 # Kontakt: frank.mankel@gmail.com # ###############################################################################$ #Passwort abfragen echo "Passwort eingeben!" read -s password echo "Bitte warten......" #Passwörter abfragen echo -n $password | cryptsetup open /dev/sdX1 raid_pool0 -d - echo -n $password | cryptsetup open /dev/sdX1 raid_pool1 -d - #Raid1 mounten mount /dev/md0 /mnt/raid echo "Laufwerke erfolgreich gemountet!"

    Bis jetzt sieht das Raid ok aus, ich werde das die nächsten Tage mal ein wenig im Auge behalten.

    [ 82.430293] device-mapper: uevent: version 1.0.3 [ 82.430430] device-mapper: ioctl: 4.39.0-ioctl (2018-04-03) initialised: dm-devel@redhat.com [ 108.196397] md/raid1:md0: not clean -- starting background reconstruction [ 108.196401] md/raid1:md0: active with 2 out of 2 mirrors [ 108.240395] md0: detected capacity change from 0 to 2000260497408 [ 110.076860] md: resync of RAID array md0 [ 110.385099] EXT4-fs (md0): recovery complete [ 110.431715] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null) [57744.301662] md: md0: resync done.
  • Bananian auf HDD installieren

    BananaPi
    1
    0 Stimmen
    1 Beiträge
    885 Aufrufe
    Niemand hat geantwortet