47

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

43
+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".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.