Schlagwort-Archive: Ubuntu

get virsh console working

In my last blog post I described how you can shut down your virtual machines with the virsh shutdown command under Debian and Ubuntu. Now I want to show you how virsh console can be used to access the serial console for login and watching the virtual machine’s shutdown and startup.

Step 1A: Preparing an Ubuntu Guest VM

  1. login on the ubuntu vm with ssh
  2. Copy tty1.conf to ttyS0.conf:
    sudo cp /etc/init/tty1.conf /etc/init/ttyS0.conf
  3. open ttyS0 and change the last line to
    exec /sbin/getty -8 115200 ttyS0 xterm

Step 1B: Preparing a Debian Guest VM

  1. login on the ubuntu VM with ssh
  2. open /etc/inittab
  3. uncomment the following line:
    T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

Step 2: Make Grub output on ttyS0 (Debian & Ubuntu VM)

  1. open /etc/default/grub
  2. update GRUB_CMDLINE_LINUX:
    GRUB_CMDLINE_LINUX=“console=ttyS0″
  3. save & close the file and update grub with
    # update-grub
  4. reboot the virtual machine

On the host you can now access the serial console with virsh console vm1.

To get back to the host use ctrl + ]. An opened session will not be closed so you have to logout explicitly (like if you were right in front of the machine).

get virsh shutdown working

There is a quite common problem with kvm and virsh shutdown which is likely not working with all virtual guests. In my case, I’m using Ubuntu 10.04 LTS and 12.04 LTS as host OS. All guests are working with ubuntu or debian, too.

If your guests are ignoring the virsh-shutdown command, check these indicators:

  • Enable ACPI in the guest configuration file
    ...
      <features>
        ...
        <acpi/>
        ...
      </features>
    ...
  • Install acpid on the guest
    # apt-get install acpid
  • Install acpi-support-base package
    # apt-get install acpi-support-base

Next time, I will show how to get the virsh console command working properly.

If you also want to get the virsh console command working properly read the article Get virsh console working.

Debian sauber halten – Pakete mit rc Status vollständig entfernen

Debian zeichnet sich als konservative, aber sehr robuste und zuverlässige Distribution aus und war nicht zuletzt aus diesem Grund meine Wahl für einige Server-Systeme, die mittlerweile schon einige Jahre auf dem Buckel haben.

Mittlerweile wurde ein System zum dritten mal auf eine neues Major-Release gehoben und mit der Zeit sammelt sich allerhand historischer Datenmüll auf der Platte. Auch bei Desktop-Systemen mit kürzeren Release-Zyklen wie bei Ubuntu kann sich in wenigen Jahren viel Balast auftürmen.

Ein Weg, das System zu entschlacken ist das Löschen alter Konfigurationsdateien. Listet man durch dpkg -l  installierte Pakete auf, fällt der Status „rc“ bei einigen Zeilen auf. Bei rc ist das Paket nicht installiert, jedoch sind seine Konfigurationsdateien auf dem System vorhanden. Diese entstehen bei Technologiewechseln während Major-Upgrades oder durch das manuelle installieren und deinstallieren von Software.

Dieser Schlacke kann man einfach über folgende Kommandos untersuchen (Output ist gleich, rein aus Lernzwecken sind beide aufgeführt):

dpkg -l | grep ^rc | tr -s " " | cut -d " " -f 2
dpkg -l | grep ^rc | awk '{print $2}'

Beispiel Output:

dpkg -l | grep ^rc | awk '{print $2}'
automysqlbackup
libbind9-50
libdatrie0
libdevmapper1.02
libdns55

Es ist sehr wichtig, die Pakete manuell zu prüfen! Es kann auch false-positives durch z.B. manuell installierte Pakete geben, die nicht aus dem Repository installiert wurden.

Ist man sich seiner Sache sicher, können die Pakete bzw. ihre Konfigurationsdateien vollständig entfernt werden:

apt-get purge `dpkg -l | grep ^rc | awk '{print $2}'`

Beispiel Output:

apt-get purge `dpkg -l | grep ^rc | awk '{print $2}'`
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
automysqlbackup* libbind9-50* libdatrie0* libdevmapper1.02* libdns55*

Vergleiche Strukturen zwischen MySQL Datenbanken

Möchte man die ALTER Statements zweier Datenbank-Revisionen automatisch generieren lassen, bietet sich das Commandline Tool mysqldiff an. Damit kann man auf einfache Art und Weise die benötigten DDL-Statements zwischen Produktiv-Version und aktuellem Development-Snapshot erstellen.

Unter Ubuntu installiert man das in Perl geschriebene Programm am einfachsten via CPAN:

> sudo cpan
cpan[1]> install MySQL::Diff

Nach der Installation führt man den Vergleich durch

> mysqldiff -u root -p PASS powerlab_latest_stable powerlab_dev

In meinem Beispiel möchte ich die Änderungen der Datenbank powerlab_latest_stable hin zu powerlab_dev bekommen.

Der Output sieht dabei wie folgt aus:

ALTER TABLE lab_event_tags ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
ALTER TABLE lab_event_tags_mapping ENGINE=InnoDB DEFAULT CHARSET=utf8; # was ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE lab_person DROP COLUMN last_participation; # was varchar(30) DEFAULT NULL
ALTER TABLE lab_person CHANGE COLUMN comment comment text; # was varchar(45) DEFAULT NULL
ALTER TABLE lab_person ADD COLUMN is_deleted tinyint(1) DEFAULT NULL;
ALTER TABLE lab_person ENGINE=InnoDB AUTO_INCREMENT=3113 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=3112 DEFAULT CHARSET=utf8
ALTER TABLE lab_person_values ENGINE=InnoDB AUTO_INCREMENT=42424 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=42390 DEFAULT CHARSET=utf8