Re: Skip kbd-chooser when running under Xen
Hi,
So far I've received no comments on this, may I ask for some again?
Thanks,
Feri.
Ferenc Wagner <wferi@niif.hu> writes:
> Frans Pop <elendil@planet.nl> writes:
>
>> On Thursday 08 May 2008, Ferenc Wagner wrote:
>>
>>> vmlinuz-2.6.18-6-xen-686 suite=etch DEBIAN_FRONTEND=text
>> [...]
>>> kbd-chooser[881]: ERROR **: Couldn't get a file descriptor referring to
>>> the console
>>> main-menu[670]: WARNING **: Configuring 'kbd-chooser' failed with error
>>> code 1
>>
>> That seems to make fairly clear why kbd-chooser is failing...
>
> Still not fully clear to me, but name it an already fixed Xen bug.
>
>>> vmlinuz-2.6.25-1-xen-686 console=hvc0 suite=etch DEBIAN_FRONTEND=text:
>>
>> And apparently here kbd-chooser _can_ find a file descriptor for the
>> console.
>
> Yes, it looks like hvc0 is a much better console than the earlier
> hacks. Which is not particularly surprising.
>
>>>>> * Should we skip running it from a virtualized D-I? (I guess yes,
>>>>> especially that it's so simple to achieve.)
>>
>> If I understand you correctly: no, we do not want to add a question for
>> this.
>
> Maybe not. What I'm talking about it the following prompt:
>
> Select a keyboard layout
> ------------------------
>
> Keymap to use:
> 1. American English [*] 22. Italian
> 2. Belarusian 23. Japanese
> [...]
>
> which doesn't appear during serial installation.
>
>>> Yes, testing for functionality would be much better. Like skipping
>>> kbd-chooser if there's no keyboard attached. Is serial installation
>>> handled by checking the kernel command line?
>>
>> I suggest someone starts looking at the kbd-chooser code...
>> For serial console the relevant parts are kbd-chooser.c from line 534 down.
>
> Maybe you want to commit the following fix for a missing hyphen:
>
> Index: packages/kbd-chooser/kbd-chooser.c
> ===================================================================
> --- packages/kbd-chooser/kbd-chooser.c (revision 53339)
> +++ packages/kbd-chooser/kbd-chooser.c (working copy)
> @@ -552,7 +552,7 @@
> }
>
> /**
> - * @brief set debian-installer/serial console as to whether we are using a serial console
> + * @brief set debian-installer/serial-console as to whether we are using a serial console
> * @return 1 if present, 0 if absent, 2 if unknown.
> */
> sercon_state
>
>> Both UML and serial console are already being detected there. Seems to me
>> that it should be possible to handle Xen in the same or a similar way.
>
> Yes. Line 669 of kbd-chooser.c forces console-tools/archs to
> no-keyboard, just like during UML installation. The latter is
> especially similar to the Xen case, and bases the decision on
> /proc/cpuinfo. This suggests that introducing an analogous function
> which checks for Xen (in the line of [ -d /sys/bus/xen ]) and oring
> that to the above condition would be enough.
>
>> When testing based on hvc0 you should be aware that is also used by PowerPC
>> systems.
>
> This way we wouldn't test for hvc0 at all. Unfortunately, Xen's hvc
> isn't a serial device, so that case can't catch it.
>
>> Bottom line: please implement something that fits _within_ the existing
>> structure of kbd-chooser. Don't add hacks.
>
> What about somethink like this? (Apply before the above!) Totally
> untested, POC only. :)
>
> Index: packages/kbd-chooser/kbd-chooser.c
> ===================================================================
> --- packages/kbd-chooser/kbd-chooser.c (revision 53339)
> +++ packages/kbd-chooser/kbd-chooser.c (working copy)
> @@ -552,6 +552,26 @@
> }
>
> /**
> + * @brief set debian-installer/xen-console as to whether we are using a Xen console
> + * @return 1 if present, 0 if absent, 2 if unknown.
> + */
> +sercon_state
> +check_if_xen_console (void)
> +{
> + sercon_state present = SERIAL_UNKNOWN;
> + struct debconfclient *client = mydebconf_client ();
> +
> + if (!access("/sys/bus/xen", F_OK))
> + present = SERIAL_PRESENT;
> + else
> + present = SERIAL_ABSENT;
> +
> + debconf_set (client, "debian-installer/xen-console", present ? "true" : "false");
> + di_info ("Setting debian-installer/xen-console to %s", present ? "true" : "false");
> + return present;
> +}
> +
> +/**
> * @brief set debian-installer/serial console as to whether we are using a serial console
> * @return 1 if present, 0 if absent, 2 if unknown.
> */
> @@ -633,6 +653,7 @@
> int choices = 0, first_entry_s = 1, first_entry_t = 1;
> sercon_state sercon;
> sercon_state umlcon;
> + sercon_state xencon;
> struct debconfclient *client = mydebconf_client ();
>
> /* k is returned by a method if it is preferred keyboard.
> @@ -666,7 +687,8 @@
> }
> sercon = check_if_serial_console();
> umlcon = check_if_uml_console();
> - if (sercon == SERIAL_PRESENT || umlcon == SERIAL_PRESENT) {
> + xencon = check_if_xen_console();
> + if (sercon == SERIAL_PRESENT || umlcon == SERIAL_PRESENT || xencon == SERIAL_PRESENT) {
> debconf_metaget(client, "kbd-chooser/no-keyboard", "Description");
> arch_descr = strdup(client->value);
> choices++;
> @@ -687,7 +709,7 @@
> debconf_subst (client, "console-tools/archs", "KBD-ARCHS-L10N", buf_t);
> free(arch_descr);
> // Set medium priority if current selection is no-keyboard or skip-config
> - return ((sercon == SERIAL_PRESENT) || (umlcon == SERIAL_PRESENT) ||
> + return ((sercon == SERIAL_PRESENT) || (umlcon == SERIAL_PRESENT) || (xencon == SERIAL_PRESENT) ||
> ((preferred && preferred->present == TRUE) &&
> (strcmp (curr_arch, "skip-config") != 0) &&
> (strcmp (curr_arch, "no-keyboard") != 0))) ? "low" : "medium";
Reply to: