[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: