Skip to content

Semaphore - Installation & Anwendung

Verschoben Ansible
  • Semaphore ist ein UI für Ansible, geschrieben mit Go & Vue.js. Beim Besuch der letzten FrOSCon 18 lernt man ja immer was dazu. Es wurde Zeit das mal auszuprobieren.

    Bis jetzt habe ich meine Server, einmal in der Hetzner-Cloud zum anderen Lokal, immer mit ClusterSSH administriert. Das ist für mich völlig ausreichend, aber ich möchte gerne auch immer was dazu lernen.

    Ok, dann fangen wir mal an.

    Installation

    Voraussetzungen

    • Debian Bookworm 12 Server
    • vorhandenen MariaDB Instanz
    • Linux Grundkenntnisse

    Ich werde nicht alles bis ins letzte Detail hier aufschreiben, aber mit Grundkenntnissen sollte man in der Lage sein, das erfolgreich umzusetzen.

    Die Anleitung empfiehlt folgende Vorgehensweise.

    wget https://github.com/ansible-semaphore/semaphore/releases/\
    download/v2.8.75/semaphore_2.8.75_linux_amd64.deb
    
    sudo dpkg -i semaphore_2.8.75_linux_amd64.deb
    

    Ich ändere das ein wenig ab. Zum einen, ist die Dokumentation nicht ganz aktuell und zum anderen brauche ich kein sudo.

    wget https://github.com/ansible-semaphore/semaphore/releases/\
    download/v2.8.90/semaphore_2.8.90_linux_amd64.deb
    
    dpkg -i semaphore_2.8.90_linux_amd64.deb
    

    Danach ruft man das Setup auf

    semaphore setup
    

    und ergänzt die Abfragen. Kleiner Tipp von mir, der Web Host bleibt leer, sonst ist die Installation defekt. Für Euch getestet. Bezieht sich nur auf eine lokale Installation. Siehe meine Ergänzung zum Thema Email.

    "web_host": "",
    

    Wenn man das Ganze jetzt als User root gemacht hat, liegt die Konfigurationsdatei config.json unter /root

    Das machen wir jetzt mal was sicherer. Eine Anwendung sollte ja unter seinem eigenen User laufen, kein Dienst der nicht unbedingt Rootrechte benötigt, bekommt diese auch. Also legen wir uns dafür einen User an, der heißt hier semaphore - Überraschung 🙂

    User anlegen

    Den User legen wir mit

    useradd -m semaphore
    

    an. Damit hat dieser User auch ein Home-Verzeichnis unter /home/semaphore Nun kopieren wir schon mal die config.json hierhin.

    mv /root/config.json /home/semaphore
    

    Jetzt muss der Dienst auch noch gestartet werden, dazu legen wir einen SystemD Service an.

    /etc/systemd/system/semaphore.service

    [Unit]
    Description=Ansible Semaphore
    Documentation=https://docs.ansible-semaphore.com/
    Wants=network-online.target
    After=network-online.target
    ConditionPathExists=/usr/bin/semaphore
    ConditionPathExists=/home/semaphore/config.json
    
    [Service]
    ExecStart=/usr/bin/semaphore service --config /home/semaphore/config.json
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=always
    RestartSec=10s
    User=semaphore
    Group=semaphore
    
    
    [Install]
    WantedBy=multi-user.target
    

    Den Dienst aktivieren und starten ihn

    systemctl enable semaphore.service
    systemctl start semaphore.service
    

    Danach sollte man in der Lage sein, das Webinterface aufzurufen. Hier das Beispiel meiner Proxmox VM. Passt das an Eure Gegebenheiten bitte an.

    http://192.168.3.14:3000/
    

    TASK_ergebnis.png

    NGINX

    Sollte man das ganze im Netz betreiben wollen, dann sollte man einen Proxy davor schalten. Hier mal ein Beispiel aus der Doku.

    Man muss dann nicht

    http://192.168.3.14:3000/
    

    eingeben, um den Server zu erreichen. Es reicht dann

    http://192.168.3.14
    

    Die NGINX Beispiel Konfiguration

    server {
      listen 443 ssl;
      server_name  _;
    
      # add Strict-Transport-Security to prevent man in the middle attacks
      add_header Strict-Transport-Security "max-age=31536000" always;
    
      # SSL
      ssl_certificate /etc/nginx/cert/cert.pem;
      ssl_certificate_key /etc/nginx/cert/privkey.pem;
    
      # Recommendations from 
      # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
      ssl_protocols TLSv1.1 TLSv1.2;
      ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
      ssl_prefer_server_ciphers on;
      ssl_session_cache shared:SSL:10m;
    
      # required to avoid HTTP 411: see Issue #1486 
      # (https://github.com/docker/docker/issues/1486)
      chunked_transfer_encoding on;
    
      location / {
        proxy_pass http://127.0.0.1/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_set_header X-Forwarded-Proto $scheme;
    
        proxy_buffering off;
        proxy_request_buffering off;
      }
    
      location /api/ws {
        proxy_pass http://127.0.0.1/api/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Origin "";
      }
    }
    

    Das habe ich aktuell nicht getestet, da mein Semaphore-Server lokal steht und es auch so bleiben soll.

    Für eine Anwendung, gitlab.com, brauch ich den doch im Netz. Habe das probiert und funktioniert auch. Kommt aber sicher noch ein ergänzender Beitrag von mir (Update: 20.08.23)

    SSH

    Wichtig ist, das der User semaphore auf alle Server, die er erreichen soll, mittels

    ssh root@<DOMAIN oder IP>
    

    connecten kann. Dazu muss die id_rsa.pub auf den Zielsystemen unter authorized_keys hinterlegt sein. Das solltet ihr kennen, wenn nicht mal kurz hier rein lesen. Zusammenfassung:

    Der User semaphore muss mittels

    ssh root@<DOMAIN oder IP>
    

    connecten können!

    Einrichtung eines Projektes

    Wir legen ein neues Projekt an.

    2395e6ef-847a-4abb-8541-1fb0e20abf2d-grafik.png

    Namen eingeben, der Rest ist optional. Danach legen wir den Key an.

    Key Store

    3157efe2-fe75-46ce-8d28-62ea0a13bf72-grafik.png

    Wir geben ihm einen Namen, wählen SSH Key aus, als Username wählen wir root und geben den Private Key des Semaphore Servers ein.

    Repositories

    dead2fe3-156d-4b3f-b9a0-ea3cf79cbc80-grafik.png

    Wir geben ihm einen Namen. Der Pfad zeigt auf einen Ordner im Home-Verzeichnis des Users semaphore. Ich nenne das hier im Beispiel ansible, dort liegen hinterher die Playbooks usw.

    Environment

    170bfcec-5683-426f-aef1-6e92613c0536-grafik.png

    Dort kann man Umgebungsvariablen ablegen. Brauchen wir aktuell nicht, muss aber angelegt sein. Deswegen muss das so aussehen. Also, ohne Inhalt.

    Inventory

    23f609ca-e37b-42fb-82a7-5a726d736ffe-grafik.png

    Hier legt man an, welche Server bearbeitet werden sollen. Denke, das ist selbsterklärend. Der Name [Name] kann beliebig sein.

    Task Template

    94b8c36c-c5ab-4e7d-84c7-46cf8fb73ac3-grafik.png

    Jetzt könnt Ihr alles auswählen. Das Playbook Filename hat mich etwas Zeit gekostet um zu verstehen, wo das liegt. Da kommt jetzt wieder das Repository zum Einsatz. Der dort hinterlegte Pfad wird jetzt für das Playbook benutzt.

    Das Playbook task.yml haben wir noch nicht, kommt noch 🙂 Das kann man jetzt aber nicht in dem UI anlegen und bearbeiten, wir müssen auf die Konsole des Servers.

    Playbook anlegen

    Das Playbook muss hier liegen

    /home/semaphore/ansible
    

    /home/semaphore/ansible/task.yml

    ---
    - 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:
            name:
             - duf
             - needrestart
             - htop
             # - build-essential
             # - curl
             # - fail2ban
             # - firewalld
             # - git
             # - needrestart
             # - pwgen
             # - resolvconf
             # - restic
             # - rsync
             # - sudo
             # - unbound
             # - unzip
             # - vim-nox
            state: latest
    
        - name: Check if a new kernel is available
          ansible.builtin.command: needrestart -k -p > /dev/null; echo $?
          register: result
          ignore_errors: yes
    
        - name: No new kernel
          ansible.builtin.command: uname -r
          when: result.rc == 0
    
        - name: Restart the server if new kernel is available
          ansible.builtin.command: reboot
          when: result.rc == 2
          async: 1
          poll: 0
    
        - name: Wait for the reboot and reconnect
          wait_for:
            port: 22
            host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'
            search_regex: OpenSSH
            delay: 10
            timeout: 60
          connection: local
    
        - name: Check the Uptime of the servers
          shell: "uptime"
          register: Uptime
    
        - debug: var=Uptime.stdout
    

    Ich habe die letzten Tage an meinem Playbook gefeilt, die Dokumentation ist riesig. Richtige Hilfe im Netz ist selten, ChatGPT hat auch mehr Blödsinn geschrieben, als Hilfe. Zum Schluss habe ich es aber doch hinbekommen.

    Die Tasks

    1. Update apt package cache.
      Macht das was apt update auch macht, schaut nach neuen Paketen.

    2. Upgrade installed apt packages.
      Also ein apt upgrade

    3. Ensure that a base set of software packages are installed.
      Stellt sicher, das man bestimmte Software Pakete auf seinem Server installiert hat.

    4. Check if a new kernel is available
      Hat apt upgrade einen neuen Kernel installiert? Dazu nutze ich das Tool needrestart. Rückgabewert 0 bedeutet keinen neuen Kernel, Rückgabewert 2 bedeutet, es ist Zeit für einen Reboot. Interessantes Feature von ansible ist, man kann gewisse Dinge auch async machen. Ohne das knallte das Playbook immer mit Failure, weil logischerweise der Server nicht mehr erreichbar war. Spannend.

    5. No new kernel
      Rückgabe 0

    6. Restart the server if new kernel is available
      Rückgabe 2

    7. Wait for the reboot and reconnect
      Wir warten auf alle Server, bis alle Server wieder on sind.

    8. Check the Uptime of the servers
      Wir schauen nach dem die Server alle wieder on sind, ob sie auch leben 😉

    9. debug: var=Uptime.stdout
      Kontrolle der Uptime.

    Fertig!

    Task Ausgabe

    Task_1.png

    Task_2.png

    Fazit

    Mal wieder ein Tool, was @Nico mir empfohlen hat und was vermutlich aus meinem Leben nicht mehr verschwindet 🙂

    Hinweise

    Für einen Server im Netz fehlen da noch einige Dinge, also bitte so nicht ins Internet. Lokal ist das ausreichend.

    Sollte jemand Fehler finden, würde ich mich über eine Korrektur freuen. Man kann immer nur dazu lernen.

    Viel Spaß mit dem Tool!

  • Email

    Als Ergänzung, wenn man beim Setup keine Email Daten eingegeben hat.

    In der config.json findet man folgendes

            "email_sender": "<SENDER ADRESS>",
            "email_host": "smtps.<DOMAIN>.de",
            "email_port": "587",
            "email_username": "<USERNAME>",
            "email_password": "<PASSWORD>",
    

    Ging danach noch nicht. Man findet noch diese beiden Einstellungen.

            "email_alert": true,
            "email_secure": true,
    

    Der erste schaltet wohl die Email Funktionalität ein. Der zweite steuert vermutlich den Email-Port.

    Ports: 465 (SSL/TLS), 587 (STARTTLS)
    

    Ich nutze den Port 587 und email_secure muss auf true stehen.

    Habe dann einen Server ausgeschaltet um einen Failure zu provozieren. Danach kam diese Email.

    Task 119 with template 'TEST' has failed!`
    Task Log: /project/1/templates/1?t=119
    

    Und nun macht auch die Einstellung

    "web_host": "",
    

    Sinn. Bei einem ordentlich konfigurierten Server im Internet, der einen Domainnamen hat, kommt dieser jetzt in das Feld und dann wird der auch in der Email ergänzt. Somit hätte man auch direkt einen Link zum Log.

    Noch was, unter Edit User kann man einstellen das der User Emails versendet. Diese Mailadresse empfängt die Mails. Sieht nach einer schlechten Übersetzung aus!?

    Email.png

    Und unter den Projekt Settings kann man einstellen, ob das Projekt überhaupt Emails versenden darf.

    e880c667-bdb7-450c-aaab-5e3e95b9c8ce-grafik.png

  • Heute geht es dann mal ans Testen der Gitlab bzw. Github Funktionalität. Das Playbook jedes mal auf der Konsole zu editieren ist doof und macht ja auch kein Profi, viel zu mühsam. Das möchte man ja alles von seiner Maschine aus machen, im Idealfall mit seiner Entwicklungsumgebung.

    Gitlab

    Ihr erstellt Euch ein leeres neues Projekt. Dann legt man einen Access Token an.

    4f5fcf59-3250-43ec-886b-8c03540e2dfe-grafik.png

    Pycharm

    Ich nutze Pycharm, das geht aber mit jeder Entwicklungsumgebung gleich. Man legt ein neues Projekt an, erstellt das Playbook (task.yml) und commitet das zum Gitlab Projekt. Dazu benötigt man die URL des Gitlab Projektes und den Benutzer & das Passowrt des Access Tokens. Fertig, danach ist das Playbook im Gitlab.

    833caaa8-f201-490c-8609-dedc1abb1cc1-grafik.png

    Semaphore

    Im Semaphore Projekt muss man jetzt zwei Dingen anpassen.

    Key Store

    eaeb7b55-cd01-4de6-a776-b439e464a56f-grafik.png

    Wir geben dem Key einen Namen (beliebig), der Login wird auf Login with password eingestellt. Und User & Password befüllen wir mit den Daten des Access Tokens - fertig.

    Repositories

    e395246b-d2f6-488a-82f2-da1420f44587-grafik.png

    Dort gibt man die URL zum Gitlab Projekt ein. Dann den Branch, hier master. Ganz unten wählt man noch den eben angelegten Key aus. Um die Warnung weg zu bekommen, siehe unteres Bild, muss man nur anstelle von playbook - playbook.git eingeben.

    Resultat

    gitlab.png

  • FrankMF FrankM verschob dieses Thema von Linux am
  • Ich parke das mal hier, damit ich das nicht noch mal vergesse. Hat mich eben mal wieder eine Stunde gekostet 😞

    /etc/ansible/ansible.cfg

    [defaults]
    host_key_checking = False
    

    Edit -> https://linux-nerds.org/topic/1493/ansible-host_key_checking

  • FrankMF FrankM hat am auf dieses Thema verwiesen

  • 0 Stimmen
    1 Beiträge
    122 Aufrufe
    Niemand hat geantwortet
  • Fragen, Probleme, geht nicht?

    Angeheftet Support
    1
    0 Stimmen
    1 Beiträge
    66 Aufrufe
    Niemand hat geantwortet
  • Crowdsec - Ein fail2ban Ersatz?

    Linux
    2
    0 Stimmen
    2 Beiträge
    495 Aufrufe
    FrankMF

    Ich kann jetzt hier von meiner ersten Erfahrung berichten und wie CrowdSec mich gebannt hat 🙂

    Was war passiert? Ich war gestern sehr intensiv mit der Konfiguration von Nextcloud <-> Collabora Online beschäftigt. Nachdem ich irgendwie nicht weiterkam habe ich mich der Erstellung eines Dokumentes gewidmet. Nach einiger Zeit war die Nextcloud nicht mehr erreichbar.

    Ok, hatte ich bei der Konfiguration auch schon mal, den Server einmal neugestartet und fertig. Doch jetzt kam es, Server neugestartet - hilft nicht. Gut, schauen wir mal nach, Der SSH Login ging auch nicht 😞

    Jetzt war guter Rat gefragt. Zu diesem Zeitpunkt ging ich noch davon aus, das auf diesem Server kein CrowdSec installiert war, sondern fail2ban. Und fail2ban hatte eine sehr kurze Bantime vom 10M.

    Also blieb wohl nur noch das Rescue System von Hetzner.

    488866bc-3dcf-4abc-9e98-6107d65aa4c7-grafik.png

    Da hatte ich ja so gut wie gar keine Erfahrung mit. Also mal kurz den Nico angetriggert und es kam folgender Link.

    Link Preview Image Hetzner Rescue-System - Hetzner Docs

    favicon

    (docs.hetzner.com)

    Das Laufwerk war schnell bestimmt und schnell nach /tmp gemountet. Danach musste man sich noch mit chroot in diese Umgebung anmelden.

    chroot-prepare /mnt chroot /mnt

    Nachdem das klappte, habe ich eben fail2ban disabled.

    sysmctl disable fail2ban

    Danach das Rescue beendet. Der Server startete wieder und ich kam wieder per SSH drauf. Puuh.
    Bei meiner ersten Kontrolle fiel mir was auf

    root@:~# pstree systemd─┬─2*[agetty] ├─atd ├─cron ├─crowdsec─┬─journalctl │ └─8*[{crowdsec}] ├─crowdsec-firewa───9*[{crowdsec-firewa}]

    Wie? Da läuft CrowdSec? Da ich dabei bin die Server auf CrowdSec umzustellen, war das wohl hier schon gemacht, aber leider nicht vernünftig. fail2ban hätte mindestens disabled werden müssen und in meiner Dokumentation war das auch nicht enthalten. 6 setzen!

    CrowdSec besteht ja aus zwei Diensten, CrowdSec und dem Firewall-Bouncer. Der CrowdSec Dienst lief aber nicht, der war irgendwie failed. Ok, starten wir ihn und schauen was passiert. Nachdem er gestarte war mal die Banliste angeschaut.

    cscli decisions list

    ergab diesen Eintrag.

    2551501 │ crowdsec │ Ip:5.146.xxx.xxx │ crowdsecurity/http-crawl-non_statics │ ban │ │ │ 53 │ 1h5m55.391864693s │ 1671

    Meine IP war gebannt. Dann wissen wir ja , woher die Probleme kamen.

    cscli decisions delete --id 2551501

    Nach Eingabe war der Ban entfernt. Na gut, aber da ich aktuell immer noch an der richtigen Konfiguration von NC <-> CODE bastel, könnte das ja wieder passieren. Was machen? Kurz gegoogelt. Es gibt eine Whitelist. Aha!

    /etc/crowdsec/parsers/s02-enrich/whitelists.yaml

    name: crowdsecurity/whitelists description: "Whitelist events from private ipv4 addresses" whitelist: reason: "private ipv4/ipv6 ip/ranges" ip: - "127.0.0.1" - "::1" - "5.146.XXX.XXX" cidr: - "192.168.0.0/16" - "10.0.0.0/8" - "172.16.0.0/12" # expression: # - "'foo.com' in evt.Meta.source_ip.reverse"

    Danach den Dienst neustarten. Jetzt hoffen wir mal, das es hilft.

    Zum Schluss noch was, was mir aufgefallen war und was mich auch sehr verwirrt hatte. CrowdSec hatte wegen einem crowdsecurity/http-crawl-non_statics gebannt. Dadurch konnte ich meine
    subdomain.<DOMAIN> nicht erreichen. Ok, logisch, wenn der Ban von da ausgeht. Ich konnte aber gleichzeitig eine andere subdomain mit derselben <DOMAIN> auch nicht erreichen. Komplett verwirrte es mich dann, als ich eine andere <DOMAIN> auf dem selben Server erreichen konnte. Und zum Schluss ging auch der SSH nicht.

    Also, wieder viel gelernt.. 🤓

  • Docker & Redis Datenbank

    Verschoben Linux
    2
    0 Stimmen
    2 Beiträge
    152 Aufrufe
    FrankMF

    @FrankM sagte in Docker & Redis Datenbank:

    save 60 1
    #save 900 1
    save 300 10
    save 60 10000

    Hier kann man auch noch schön sehen, wie ich gekämpft habe, bis ich mal eine dump.rdb gesehen habe. Auch irgendwie logisch, das ich nie eine gesehen hatte, wenn man weiß das

    save 900 1

    bedeutet, das er alle 900 Sekunden speichert, wenn mindestens eine Änderung vorhanden ist. Das kann dann schon was dauern. Ich habe das dann mal verkürzt, damit ich schneller ein Ergebnis habe.

    save 60 1

    Das brachte mich dann dem Ziel näher. Danach konnte ich die dump.rdb auch finden.

    Bitte keine Redis DB ohne Passwort laufen lassen!
  • 2,5G

    Linux
    2
    0 Stimmen
    2 Beiträge
    133 Aufrufe
    FrankMF

    Gutes Video zum Zyxel Switch, was ich vorher gar nicht kannte. Hätte meine Entscheidung aber auch nicht verändert.

  • 0 Stimmen
    17 Beiträge
    1k Aufrufe
    FrankMF

    Durch diesen Beitrag ist mir mal wieder eingefallen, das wir das erneut testen könnten 😉

    Also die aktuellen Daten von Debian gezogen. Das Image gebaut, könnt ihr alles hier im ersten Beitrag nachlesen. Da die eingebaute Netzwerkschnittstelle nicht erkannt wurde, habe ich mal wieder den USB-to-LAN Adapter eingesetzt.

    Bus 005 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet

    Die Installation wollte ich auf einem NVMe Riegel installieren.

    Die Debian Installation durchgezogen und nach erfolgreicher Installation neugestartet. Und siehe da, ohne das man alles möglich ändern musste, bootete die NVMe SSD 🤓

    Eingesetzter uboot -> 2020.01-ayufan-2013......

    Die nicht erkannte LAN-Schnittstelle müsste an nicht freien Treibern liegen, hatte ich da irgendwo kurz gelesen. Beim Schreiben dieses Satzes kam die Nacht und ich konnte noch mal drüber schlafen. Heute Morgen, beim ersten Kaffee, dann noch mal logischer an die Sache ran gegangen.

    Wir schauen uns mal die wichtigsten Dinge an.

    root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.3.208/24 brd 192.168.3.255 scope global dynamic enx000acd26e2c8 valid_lft 42567sec preferred_lft 42567sec inet6 fd8a:6ff:2880:0:20a:cdff:fe26:e2c8/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:20a:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5426sec preferred_lft 1826sec inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever

    Ok, er zeigt mir die Schnittstelle eth0 ja an, dann kann es an fehlenden Treibern ja nicht liegen. Lässt dann auf eine fehlerhafte Konfiguration schließen. Nächster Halt wäre dann /etc/network/interfaces

    Das trägt Debian ein

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enx000acd26e2c8 iface enx000acd26e2c8 inet dhcp # This is an autoconfigured IPv6 interface iface enx000acd26e2c8 inet6 auto

    Gut, bei der Installation hat Debian ja nur die zusätzliche Netzwerkschnittstelle erkannt, folgerichtig ist die auch als primäre Schnittstelle eingetragen. Dann ändern wir das mal...

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug enx000acd26e2c8 allow-hotplug eth0 #iface enx000acd26e2c8 inet dhcp iface eth0 inet dhcp # This is an autoconfigured IPv6 interface #iface enx000acd26e2c8 inet6 auto iface eth0 inet6 auto

    Danach einmal alles neu starten bitte 😉

    systemctl status networking

    Da fehlte mir aber jetzt die IPv4 Adresse, so das ich einmal komplett neugestartet habe. Der Ordnung halber, so hätte man die IPv4 Adresse bekommen.

    dhclient eth0

    Nachdem Neustart kam dann das

    root@debian:/etc/network# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.172/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 42452sec preferred_lft 42452sec inet6 fd8a:6ff:2880:0:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:6003:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5667sec preferred_lft 2067sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff

    Fertig, eth0 läuft. Nun kann man den zusätzlichen Adapter entfernen oder halt konfigurieren, wenn man ihn braucht.

    Warum der Debian Installer die eth0 nicht erkennt verstehe ich nicht, aber vielleicht wird das irgendwann auch noch gefixt. Jetzt habe ich erst mal einen Workaround um eine Installation auf den ROCKPro64 zu bekommen.

  • Node.js installieren

    Linux
    1
    0 Stimmen
    1 Beiträge
    288 Aufrufe
    Niemand hat geantwortet
  • tmate - Instant terminal sharing

    Linux
    2
    0 Stimmen
    2 Beiträge
    523 Aufrufe
    FrankMF

    Heute mal wieder benutzt, um bei meinem Bruder auf der Kiste nach dem Rechten zu schauen. Absolut genial.

    Sollte man evt. nicht zu "geheime" Sachen drüber schicken (meine die Leitung), aber für ein wenig Service ist das Tool wirklich super zu gebrauchen. 👍