CommandNotFoundMagic
|
Size: 1977
Comment: initial creation
|
Size: 2279
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 3: | Line 3: |
| * '''Launchpad Entry''': https://launchpad.net/distros/ubuntu/+spec/foo * '''Created''': [[Date(2005-11-05T20:45:55Z)]] by MichaelVogt * '''Contributors''': MichaelVogt * '''Packages affected''': ##(see the SpecSpec for an explanation) * '''Launchpad Entry''': https://launchpad.net/distros/ubuntu/+spec/foo |
* '''Launchpad Entry''': https://launchpad.net/distros/ubuntu/+spec/command-not-found-magic |
| Line 15: | Line 8: |
| == Summary == | == Summary == |
| Line 22: | Line 15: |
| == Rational == | == Rational == |
| Line 30: | Line 23: |
| dialog saying that installing the mentioned package is needed. | message saying that installing the mentioned package is needed. |
| Line 47: | Line 40: |
| The command_not_found handler is in bash, no code for the python script has been written yet.. |
Code is available in http://ubuntu.suxx.pl/2006--1/bzr-archive/command-not-found--main/ and http://people.ubuntu.com/~mvo/bzr/cmd-not-found--mvo/ == Problems == The real evil for this spec is the "update-alternatives" command. A common applicatoin like "vi" is not shiped by the various packages as "vi" but as "vim","nvi", etc and updated via update-alternatives to "vi" in the postinst scripts. This needs to be evaluated as well. The problem is that some packages embed the call in bash code with "update-alternateive $pkg" (e.g. the emacs postinst), making it hard to automatically parse the code. ---- CategorySpec |
Launchpad Entry: https://launchpad.net/distros/ubuntu/+spec/command-not-found-magic
Created: Date(2005-11-04T23:14:14Z) by MichaelVogt
Contributors: MichaelVogt, GustavoNiemeyer, DanielBurrows
Packages affected: bash
Summary
The "command not found" message is not very helpful. If e.g. the unzip command is not found but it's available in a package, it would be very interesting if the system could tell that the command is currently not available, but installing a package would provide it.
Rational
Because ubuntu ships only with a single CD some commands that power-users expect are not installed (e.g. gcc, make).
Use cases
John sees a tutorial of how to unzip a package using the unzip command, and tries to follow it. The needed package is not installed, so he gets a message saying that installing the mentioned package is needed.
Design
Bash has a "command_not_found" handler that is called in the interactive mode when a command is not found. The first argument is the command that is not found. We hook a custom python script into it that has a database (gdbm or similar) with the available commands as keys and some information (like a list of packages it is in) as value. This lookup needs to be fast. This information is assembled from various sources:
- from the Content-$arch file
- from a "by-hand" file to include additonal stuff (like acroread)
a mirror with deb that are scanned for update-alternatives commands in
- postinst
Implementation
Code is available in http://ubuntu.suxx.pl/2006--1/bzr-archive/command-not-found--main/ and http://people.ubuntu.com/~mvo/bzr/cmd-not-found--mvo/
Problems
The real evil for this spec is the "update-alternatives" command. A common applicatoin like "vi" is not shiped by the various packages as "vi" but as "vim","nvi", etc and updated via update-alternatives to "vi" in the postinst scripts. This needs to be evaluated as well. The problem is that some packages embed the call in bash code with "update-alternateive $pkg" (e.g. the emacs postinst), making it hard to automatically parse the code.
CommandNotFoundMagic (last edited 2008-08-06 16:20:46 by localhost)