Javascript: radiobuttons

Einzelne Radiobuttons haben einen Nachteil: Sind sie mal angeklickt bekommt man sie nicht mehr abwählbar. Ich finde die aber trotzdem nett und hab für das Problem jetzt eine ganz einfach Lösung gefunden:

<input type="radio" onDblClick="this.checked=false;" name="radio">

Einfachklick anwählen und Doppelklick abwählen. Sehr schön. Gefällt mir gut
Hier kann man es gleich mal veruschen:

Radiobutton

Qemu Image mounten

Grr, hab mir mal wieder ein Qemu Image einer VM Platte mitgenommen und brauch jetzt Daten daraus. Was tun? Wie üblich habe ich keine Lust die ganze Platte zusammen mit der Systemkonfig über das Netz auf einen KVM Host zu kopieren und dort wieder zu booten. Daher hier der Weg, wie es sich lokal mounten lässt. Die einzige Voraussetzung ist dass man kpartx installiert hat. Also hier die Schritte:

  • Ohne LVM: Device-Maps erstellen
    sudo kpartx -l image.qemu

    Man bekommt dann sowas wie:

    loop0p1 : 0 401562 /dev/loop0 63
    loop0p2 : 0 39471705 /dev/loop0 401625
    loop0p3 : 0 2040255 /dev/loop0 39873330
    

    Das lässt sich dann einfach per mount einhängen.

  • Mit LVM:muss noch das LVM gescannt werden
    Nachdem die Partitionen in dem Qemu-Image bei mir ein LVM waren musste ich die erst mal lernen. Das geht wie folgt:

    sudo vgscan

    Was wiederum folgendes liefert:

    sudo lvs
      LV      VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
      rootvol myvg -wi-a- 18,81g                                      
    

    Anschließend kann man das LVM ganz einfach mounten

     sudo mount /dev/myvg /mnt

BTW: Das geht natürlich auch mit Xen 😉

KVM auf paravirtualisierte Block-Devices umstellen (virtio)

Alte VMs sind oft ohne virtio installiert. Bei der Umstellung ändert sich bei der Netzwerkschnittstelle nur die Mac-Adresse (wenn es nicht konfiguriert ist), was eigentlich zu keinen Problemen führt, ausser dass man die Konfig innerhalb oder außerhalb der VM anpassen muss. Anders ist es beim Block-Device. Kennt der Kernel beim Booten kein virtio, so führt das schnell zur einer Kernelpanik. Verhindern lässt sich das indem man vor der Umstellung folgendes ausführt:

mkinitrd --with virtio_pci --with virtio_blk -f /boot/initrd-$(uname -r).img $(uname -r) 

Anschließend reicht es die KVM Konfig wie folgt zu ändern/ergänzen:

    
      
    
    
      
    

/dev/disk

Will man Platten über die Labels mounten so gibt /dev/disk einen guten Überblick. Ein Beispiel:

 
gmueller@gm:~$ tree /dev/disk
/dev/disk
|-- by-id
|   |-- ata-Hitachi_HTS541616J9SA00_SB2481SJEPV72E -> ../../sda
|   |-- ata-Hitachi_HTS541616J9SA00_SB2481SJEPV72E-part1 -> ../../sda1
|   |-- ata-Hitachi_HTS541616J9SA00_SB2481SJEPV72E-part3 -> ../../sda3
|   |-- ata-Hitachi_HTS541616J9SA00_SB2481SJEPV72E-part4 -> ../../sda4
|   |-- ata-Hitachi_HTS541616J9SA00_SB2481SJEPV72E-part5 -> ../../sda5
|   |-- scsi-SATA_Hitachi_HTS5416_SB2481SJEPV72E -> ../../sda
|   |-- scsi-SATA_Hitachi_HTS5416_SB2481SJEPV72E-part1 -> ../../sda1
|   |-- scsi-SATA_Hitachi_HTS5416_SB2481SJEPV72E-part3 -> ../../sda3
|   |-- scsi-SATA_Hitachi_HTS5416_SB2481SJEPV72E-part4 -> ../../sda4
|   `-- scsi-SATA_Hitachi_HTS5416_SB2481SJEPV72E-part5 -> ../../sda5
|-- by-label
|   `-- HP_RECOVERY -> ../../sda3
|-- by-path
|   |-- pci-0000:00:1f.1-scsi-0:0:0:0 -> ../../sr0
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part3 -> ../../sda3
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part4 -> ../../sda4
|   `-- pci-0000:00:1f.2-scsi-0:0:0:0-part5 -> ../../sda5
`-- by-uuid
    |-- d321dda3-bc1f-4d24-a56f-a86d66002b1c -> ../../sda5
    |-- e916f1d1-44fe-4def-8bf6-5b9eacbe13a6 -> ../../sda1
    `-- FAFC5F30FC5EE703 -> ../../sda3

mysql Replikation wiederherstellen

Zum Glück kommt das ganz selten vor … Aus dem Grund muss ich das leider immer wieder nachlesen. Kurz die Schritte:

  1. Auf dem Master
    show master status;  
     +------------------+-----------+---------------------+------------------+  
     | File             | Position  | Binlog_Do_DB        | Binlog_Ignore_DB |  
     +------------------+-----------+---------------------+------------------+  
     | mysql-bin.000123 | 010235031 |                     |                  |  
     +------------------+-----------+---------------------+------------------+  
    
  2. Auf dem Slave
     
    stop slave;  
    change master to master_log_file='mysql-bin.000123', master_log_pos=010235031;  
    start slave;  
    

Gibt’s auf dem Slave Fehler, die einfach übersprungen werden sollen dann geht das mit dem folgenden

 stop slave;  
 set global sql_slave_skip_counter = N;  
 start slave;  

Damit hab ich aber nur schlechte Erfahrungen gemacht. Besser alles richtig machen 🙂

mysql Tabllen kopieren

Ich meide phpmysqladmin wie die Pest. Das Teil überrascht einen immer wieder mit Sicherheitslücken, die sofort ausgenützt werden. Erinnere mich gerade an diverse XSS Angriffe, bei denen es nicht mal nötig war sich bei phpmyadmin anzumelden. Aus dem Grund mache ich immer viel zu Fuß direkt auf der Datenbank. Manche Queries brauche ich aber nur sehr selten und muss sie daher nachlesen. Hier meine Notiz für das Kopieren von Tabellen.

  1. Tabellen ohne Daten
    CREATE TABLE ziel LIKE quelle
    
  2. Tabellen mit Daten
    CREATE TABLE ziel SELECT * FROM quelle