RHEL 6 Xen uses hvc0. Although KVM provides virtio-console on hvc0, libvirt
doesn't yet support this, so we must use ttyS0 instead.
---
lib/Sys/VirtV2V/Converter/Linux.pm | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/lib/Sys/VirtV2V/Converter/Linux.pm b/lib/Sys/VirtV2V/Converter/Linux.pm
index ffcf9eb..890ae7c 100644
--- a/lib/Sys/VirtV2V/Converter/Linux.pm
+++ b/lib/Sys/VirtV2V/Converter/Linux.pm
@@ -195,27 +195,34 @@ sub _configure_kernel_modules
}
# We configure a console on ttyS0. Make sure existing console references use it.
+# N.B. Note that the RHEL 6 xen guest kernel presents a console device called
+# /dev/hvc0, whereas previous xen guest kernels presented /dev/xvc0. The regular
+# kernel running under KVM also presents a virtio console device called
+# /dev/hvc0, so ideally we would just leave it alone. However, RHEL 6 libvirt
+# doesn't yet support this device so we can't attach to it. We therefore use
+# /dev/ttyS0 for RHEL 6 anyway.
sub _configure_console
{
my ($g) = @_;
- # Look for gettys which use xvc0
+ # Look for gettys which use xvc0 or hvc0
+ # RHEL 6 doesn't use /etc/inittab, but this doesn't hurt
foreach my $augpath ($g->aug_match("/files/etc/inittab/*/process")) {
my $proc = $g->aug_get($augpath);
# If the process mentions xvc0, change it to ttyS0
- if ($proc =~ /\bxvc0\b/) {
- $proc =~ s/\bxvc0\b/ttyS0/g;
+ if ($proc =~ /\b(x|h)vc0\b/) {
+ $proc =~ s/\b(x|h)vc0\b/ttyS0/g;
$g->aug_set($augpath, $proc);
}
}
- # Replace any mention of xvc0 in /etc/securetty with ttyS0
+ # Replace any mention of xvc0 or hvc0 in /etc/securetty with ttyS0
my $size = 0;
my @lines = ();
foreach my $line ($g->read_lines('/etc/securetty')) {
- if($line eq "xvc0") {
+ if($line eq "xvc0" || $line eq "hvc0") {
$line = "ttyS0";
}
@@ -230,8 +237,8 @@ sub _configure_console
($g->aug_match("/files/boot/grub/menu.lst/title/kernel/console"))
{
my $console = $g->aug_get($augpath);
- if ($console =~ /\bxvc0\b/) {
- $console =~ s/\bxvc0\b/ttyS0/g;
+ if ($console =~ /\b(x|h)vc0\b/) {
+ $console =~ s/\b(x|h)vc0\b/ttyS0/g;
$g->aug_set($augpath, $console);
}
}
--
1.7.2