51

Tasksel or plain Apt?

In the past I've always used tasksel to install so-called "tasks". It seems, however, that this has been integrated in APT:

apt-cache dumpavail | grep ^Task
[...] snip
Task: lamp-server
[...]

and that I can install such "tasks" by appending a caret (^) to it, like this:

sudo apt-get install lamp-server^

Is this equivalent to the following?

sudo tasksel install lamp-server

And which is preferred?

Metapackages

Additionally, how do metapackages come into play here? Some tasks seem not to be a metapackage while others are:

apt-cache show lamp-server
N: Unable to locate package lamp-server

apt-cache show kubuntu-desktop
Package: kubuntu-desktop
[...]
Task: kubuntu-desktop

So, using the last example, what is the difference between the following three possible ways to install?

  • sudo apt-get install kubuntu-desktop
  • sudo apt-get install kubuntu-desktop^
  • sudo tasksel install kubuntu-desktop
3
  • 2
    Look at the output of apt-get install -s lubuntu-desktop versus apt-get install -s lubuntu-desktop^. In the latter, you'll see something additional like this: Note, selecting 'policykit-1-gnome' for task 'lubuntu-desktop' / Note, selecting 'gnome-keyring' for task 'lubuntu-desktop' / Note, selecting 'libplist1' for task 'lubuntu-desktop' / Note, selecting 'aspell-en' for task 'lubuntu-desktop' / Note, selecting 'libsdl1.2debian' for task 'lubuntu-desktop' / So, in this particular case, I'm not sure that the "carrot" one is any better.
    – user25656
    Feb 6, 2013 at 17:48
  • More reading here: askubuntu.com/a/249373/25656
    – user25656
    Feb 11, 2013 at 3:37
  • 2
    #warning about tasksel: never use it to remove tasks - see bug report on launchpad
    – guntbert
    Feb 14, 2013 at 20:53

1 Answer 1

47
+50

In short: There is a difference between tasksel and apt-get installation process of tasks.

Looking at your example:

The apt-get way

sudo apt-get install 'lamp-server^' will evaluate to do the following:

  1. Search the cache (package list files) for all "Task:" fields and get all with "lamp-server".
  2. Install those packages the standard way:

    sudo apt-get install package1 package2...
    

The tasksel way

sudo tasksel install lamp-server will look for a task called "lamp-server" in one of its configuration files under /usr/share/tasksel/**/*.desc:

  1. Search the configuration files for a "Task:" field named "lamp-server".
  2. Check if all prerequisites are available ("Key:" field) and remember them if not installed.
  3. Choose method to select packages ("Packages:" field). If this ist "list" simply install following packages by name.
  4. Read all following package names and pass it to previously selected method to generate package names.
  5. Look for /usr/lib/tasksel/info/lamp-server.preinst. If it exists execute this script.
  6. Install packages with apt-get using following command:

    debconf-apt-progress -- apt-get -q -y -o APT::Install-Recommends=true -o APT::Get::AutomaticRemove=true install package1 package2 ...
    
  7. Look for /usr/lib/tasksel/info/lamp-server.postinst. If it exists execute this script.

Conclusion

tasksel is more powerful in processing and selecting tasks. It can execute extra scripts before/after installation/removal of tasks. And the biggest benefit: You can modify tasks and create new ones very easily. It is not possible to edit an official package list file without drawbacks (valid signature).

Back to your first question:
In your special case both commands are almost equivalent (supposed you have enabled both APT::Install-Recommends and APT::Get::AutomaticRemove). Only difference is the extended package state of mysql-server and apache2 dependencies (set to "manually installed" with plain apt-get).

And what about metapackages?

If you don't make use of tasksel's features like selecting tasks (especially helpful at installation) and executing extra commands before and after some task blocks then a task is very similar to a metapackage. The difference is: A task is not registered as a package in APT cache.
So if you uninstall one task-dependency other task-deps aren't marked as auto-installed because they were explicitely installed. If you uninstall a metapackage the dependencies are removed with autoremove because their extended package state is "auto installed" (if not installed manually).
Note: All distributed tasks in Debian install a metapackage named task-TASKNAME.

Giving your example:

  1. sudo apt-get install kubuntu-desktop
    • Will install the metapackage kubuntu-desktop. Dependencies are "auto installed".
  2. sudo apt-get install kubuntu-desktop^
    • Will select all packages tagged with task "kubuntu-desktop". That are all dependencies of metapackage kubuntu-desktop. They all are marked as "manually installed".
  3. sudo tasksel install kubuntu-desktop
    • Make sure X is installed before installing packages of task.
    • Will install the metapackage kubuntu-desktop. Dependencies are "auto installed".

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .