Posts by DeaD_EyE

    Code
        if value = None: # Fehler


    = ist eine Zuweisung. Ein Vergleich macht man mit ==. Und is prüft die Identität eines Objektes. Das sind alles Grundlagen.


    Richtig wäre:

    Code
    if not value:
        ...


    if fragt immer nach __bool__ ab.

    Geht auch kürzer mit einem Befehl:

    Code
    sudo dd if=/dev/sda of=/dev/sdb bs=1M iflag=direct oflag=direct


    Eigentlich sollte das ausreichen:

    Code
    sudo dd if=/dev/sda of=/dev/sdb bs=1M oflag=sync


    Und zur Sicherheit danach nochmal:

    Code
    sudo sync

    Wenn der Befehl beendet ist (keine Ausgabe), ist der sync abgeschlossen und alle Daten sind auf die Datenträger geschrieben worden. Ohne den sync kann es passieren, dass man die Festplatte vom PC trennt und der noch gar nicht fertig mit Schreiben ist (auch wenn dd schon fertig ist).

    Mit oflag=sync wird immer gewartet, bis die Daten geschrieben sind.

    Kopieren mit dd

    Die SD-Karte kann man 1:1 auf die SSD übertragen, da die SSD ohnehin größer ist, als die SD-Karte.

    Wenn man das direkt vom RPi machen will, muss / ReadOnly eingehängt werden.


    Wie bereits beschrieben mit dd kopieren:

    Code
    sudo dd if=/dev/mmcblk0 of=/dev/sda bs=1M oflag=sync
    # 1 MiB Blockgröße bei der Übertragung

    Wenn /dev/mmcblk0p2 nicht ReadOnly eingehängt ist, dann braucht man das erst gar nicht zu versuchen.

    Folgender Befehl könnte die Root-Partition ReadOnly remounten. Falls bereits Dateien schreibend geöffnet sind, geht das nicht.


    Root / des laufenden Systems -> readonly

    Ein Backup von einem laufenden System zu erstellen, ist keine gute Idee, aber möglich, wenn man das Root-Dateisystem ReadOnly remount kann.

    Code
    sudo mount -o remount,ro /


    Besser wäre es, das gleich auf einem Linux-Desktop zu machen (z.B. von LiveCD irgendein Live-Debian booten).

    Wenn man dann ein externes Kartenlesegerät anschließt, erscheint die SD-Karte als /dev/sdX wobei X der nächste freie Buchstabe ist.

    Partition 2 vergrößern

    Nachdem die Daten 1:1 kopiert worden sind, muss noch die zweite Partition angepasst werden.

    Dazu mittels fdisk das Ziellaufwerk öffnen (z.B. /dev/sdb).

    Dateisystem innerhalb der Partition vergrößern

    Nun ist die Partition auf dem Ziellaufwerk vergrößert, aber das ext4-Dateisystem hat immer noch die alte Größe.

    Um das ext4-Dateisystem zu vergrößern:

    Code
    sudo fsck.ext4 -f /dev/sdb2
    # falls /dev/sdb das Ziellaufwerk ist
    sudo resize2fs /dev/sdb2

    Keine Änderung der PartUUID

    An der /etc/fstab und /boot/cmdline.txt muss nichts geändert werden, da sich die PartUUID nicht ändert.

    Die PartUUID wird beim Erstellen der Partitionstabelle angelegt und die Partitionsnummern werden mit einem Bindestrich angehangen.



    PartUUID nach dem die 2. Partition neu erstellt worden ist:

    Code
    [root@andre-Fujitsu-i5 ~]# lsblk -o NAME,UUID,PARTUUID
    NAME      UUID                                 PARTUUID
    loop0
    ├─loop0p1 28BC-DD90                            00a9f9df-01
    └─loop0p2 04d00667-3771-4c58-ae48-8815de85cc6e 00a9f9df-02


    Die UUID wird hingegen zusammen mit dem Dateisystem erstellt, das sich innerhalb der Partition befindet.

    Der Test erfolgte mit einem loopdevice.


    Images mit losetup als Blockgerät bereitstellen

    Hilfreich ist noch losetup, wenn man z.B. mit Images arbeiten muss und diese mounten möchte. Der Vorteil ist, dass man unkompliziert auf die Partitionen zugreifen kann und alle Tools wie z.B. fdisk wie gewohnt damit funktionieren.


    Code
    # Image mounten
    # leeres Verzeichnis erstellen
    sudo mkdir /mnt/image
    sudo losetup -f -P --show /home/pi/Downloads/2022-09-22-raspios-bullseye-armhf-lite.img
    # -f     := force
    # -P     := Partitionen erkennen
    # --show := Blockgerät anzeigen
    
    sudo mount /dev/loop0p2 /mnt/image
    sudo mount /dev/loop0p1 /mnt/image/boot


    Komprimierte Images direkt mounten (ReadOnly)

    Wenn man sich z.B. ein Image für den RPI herunterlädt, sind die Dateien meist mit xz oder gzip komprimiert. Das ist kein Archivformat, sondern nur ein Kompressionsformat.


    Mit dem tool nbdkit kann man ein Blockgerät mounten, dass ein Plugin nutzt, um die xz on-the-fly zu entpacken.

    Das geht auch ohne Threads mit nur 2 Klassen:

    Du musst nur noch bei der Klasse DB die Verbindung in der __init__ Methode aufbauen und in der insert Methode die Logik vervollständigen.


    Wenn die MQTT-Verbindung getrennt wird, baut er automatisch eine neue auf. Bei der DB müsstest du das selbst machen.

    Was nicht enthalten ist, ist die Ausgabe, wenn längere Zeit nichts passiert. Ist das notwendig?

    Das Einheitenzeichen für Arbeit ist als Wh definiert worden und ausgerechnet wird es mit Leistung * Zeit. Je länger die Zeit, desto mehr Arbeit. km/h gibt hingegen eine zurückgelegte Strecke pro Stunde an. Je länger die Zeit bei der gleichen Strecke, desto geringer die Geschwindigkeit.


    100 Watt in 5 Stunden sind 500 Wh.

    100 km in 5 Stunden sind 20 km/h.

    Ich nutze zur Analyse oft Python. Den Angriff nennt man Path Traversal.

    Quote

    In [1]: import urllib.parse

    In [2]: urllib.parse.unquote("/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh")

    Out[2]: '/cgi-bin/../../../../bin/sh'

    Hier soll mittels cgi-bin eine Shell gestartet werden.

    Den Payload kann man leider nicht sehen.


    Das geht normalerweise nur bei falsch konfigurierten Webservern oder wenn der jeweilige (Nginx/Apache2) Webserver einen Bug hat oder in Szenarien, wo der Paketverwalter einen fatalen Fehler gemacht hat.


    Eine Möglichkeit die Ressourcen der Bots zu verbrauchen, wäre eine Slowris-Attacke vom Webserver. Wenn z.B. ein Bot die Datei wp_admin.php (beliebtes Angriffsziel) anfordert, sendet mein Webserver ein Byte pro Sekunde. Das beschäftigt den Bot etwas.

    Ich würde zuerst dafür sorgen, dass eth0 eine statische IP außerhalb des WLAN-Netzwerks zugeiwsen bekommt. Wenn er dann beim nächsten mal nicht reagiert, das Netzwerkkabel am PC und RPi anschließen, die IP-Adresse des PCs richtig konfigurieren und dann mittels SSH einloggen und nachsehen, wo das Problem ist.


    Alternativ hat man noch die Möglichkeit, mit einem tty-USB-Adapter sich mit dem UART0 zu verbinden und darüber die Konsole zu nutzen.

    Wenn er sich aufgehangen hat, kommt man über beide Wege nicht rein. Wenn er nur die Netzwerkverbindung verloren hat, kann man sich einloggen.

    Wenn man das mal mit os.statsvfs alles selbst ausgerechnet hat, versteht man die Tools, die das machen, ein wenig besser.


    Code
    >>> import os
    >>> os.statvfs("/")
    os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=122654446, f_bfree=27651420, f_bavail=21402550, f_files=31227904, f_ffree=29666225, f_favail=29666225, f_flag=4096, f_namemax=255)
    Code
    f_bsize: Blockgröße
    f_blocks: Alle Blöcke
    f_bavail: freie verfügbare Blocks
    
    total = f_blocks * f_bsize
    free = f_bavail * f_bsize
    usage = total - free


    Mit psutil kann man das einfacher haben, aber das Verständnis wie die Tools den freien Platz berechnen, sollte vorhanden sein.

    (trifft nicht bei btrfs zu, da die Angabe von f_bavail nicht der Realität entspricht)


    Hier der Code ohne psutils:

    Quote

    81.64 GiB / 467.89 GiB | 82.6% | Usage: 386.25 GiB

    Ich habe gestern eine Stunde lang herumprobiert. Den Sensor kann ich sehen (i2c.scan()), aber der Code ist so alt, dass Funktionen genutzt werden, die auf dem RP Pico nicht verfügbar sind (I2C.start, I2C.stop)


    Die normalen Funktionen zum Lesen und Schreiben haben keine Möglichkeit zur Übergabe eines Registers. Das muss man dann selbst machen.


    Hingegen bietet I2C.readfrom_mem und I2C.writeto_mem die Möglichkeit ein Register zu adressieren und dort Daten zu lesen/schreiben.

    Für mein Verständnis muss man die Adresse auch nicht um 1 addieren. Das müssten die Funktionen von selbst machen.

    Das teste ich mal mit einem Logic Analyzer.


    Bisher habe ich bei meinem Sensor keine sinnvollen Daten herausbekommen.



    Wenn man z.B. in Register 0x10 ein Byte schreiben will:

    Danke ich kenn black, nur gefällt mir das nicht und deswegen werde ich das auch weiterhin nicht verwenden.

    Es gibt noch grey.


    Leider beantwortet es aber nicht meine Frage, wie der Seiteneffekt entsteht.

    Am dict scheint es nicht zu liegen, denn in den Funktionen schaden_pro_runde und gesammtschaden stimmen die Ausgaben der Namen überein.

    Code
    print(list(c_teilnehmer.keys()))

    Ich vermute, dass es mit dem Plotten zusammenhängt. Es können auch gar keine doppelten Einträge im dict existieren, weswegen jeder Name nur einmal vorkommen kann. Ich vermute, dass matplotlib vom vorherigen Plot die Labels mit übernimmt.

    denn früher konnte man die Ausgänge auf 1200mA einstellen

    Das ist übel. Normalerweise dürfen die Ports das nicht. Naja, was ist beim RPi schon normal? Irgendjemand hatte ja auch die ganz tolle Idee, dass man bei ARM kein BIOS benötigt. Deswegen haben wir die dtb-Overlays.

    Teste mal die Stromaufnahme mit einem USB 3.0 Tester Messgerät Strommessgerät (Affiliate-Link).

    Einmal mit USB-Kabel und einmal ohne. Dann darauf achten, welcher Modus verwendet wird. USB3.0 kann z.B. bis 900 mA versorgen, USB2.0 geht bis 500 mA. Ob der RPi auch 900 mA via USB ausgeben kann, ist mir nicht bekannt (nie getestet).



    Eigentlich würde ich es umgekehrt vermuten. Wenn z.B. das Kabel einen zu geringen Querschnitt hat und ggf. die Übergangwiderstände zu groß, so hat man einen Spannungsfall. Dann verbrauchen die USB-Geräte etwas mehr Strom, sofern die zu niedrige Spannung noch in der Spezifikation liegt.


    Mein SSD-USB Stick von Samsung wird auch ziemlich heiß und hat eine Stromaufnahme von 189 mA. Der Strom reicht aus, den USB-Stick zu erwärmen.

    Beim Lesen verbraucht er ca. 200 mA. Schätzungsweise liegt die Temperatur nach einer halben Stunde bei c.a. 45C° (nicht gemessen, nur gefühlt).


    Wenn du bei dir den Test machst, dann achte auch auf die Spannung.

    Und da kommt man mit „Gefühl“ nicht weiter, da bräuchte man Zahlen zum argumentieren.

    Braucht man nicht, wenn man zu denjenigen gehört, die sich auf den Mainstream verlassen: https://www.google.com/search?q=betrugsf%C3%A4lle+zugenommen


    Da gibt es genügend Mainstream-Quellen.



    Du kannst ja gerne die Statistiken heraussuchen (2019-2022). Ich werde mir die Mühe nicht machen. Ich kann mir vieles durch Logik erklären und brauche dafür keine Statistiken. Es reicht mir aus, wenn ich die Preise im Supermarkt sehe, dann weiß ich automatisch, dass Betrüger auch mehr Geld im Supermarkt aufgeben müssen, ergo müssen die Betrüger noch besser werden. Aktion - Reaktion

    Der Fehler kam dadurch zustande, dass row eine leere Liste war.


    Black + isort + sorcery

    Meine Mutter hat unter anderem Goldschmuck auf eBay gekauft. Bei einem Artikel handelte es sich um eine Fälschung. Dann hat meine Mutter andere potenzielle Kunden der Betrügerin gewarnt. Das ging dann so weit, dass meine Mutter von der Betrügerin angezeigt worden ist. Dann kam noch üble Nachrede und Drohungen dazu. Die Sache lief bestimmt ein ganzes Jahr. Zwischendurch kommen immer wieder neue Betrugsfälle vor und die Maschen der Betrüger werden auch immer besser. Ich kann mir den Scheiß jedes Mal erneut anhören und meine Antwort lautet jedes Mal dieselbe: Halte dich von dieser Plattform fern