The Hidden DNF Groups of the Fedora Repositories

You might be looking to install, say, the GNOME Desktop Environment in Fedora 22 (say you installed a spin), so you might check out the available package groups through dnf:

$ sudo dnf group list
Last metadata expiration check performed 0:07:56 ago on Tue Oct  6 22:01:54 2015.
Available environment groups:
   Minimal Install
   Fedora Server
   Fedora Workstation
   Fedora Cloud Server
   KDE Plasma Workspaces
   Xfce Desktop
   LXDE Desktop
   LXQt Desktop
   Cinnamon Desktop
   MATE Desktop
   Sugar Desktop Environment
   Development and Creative Workstation
   Web Server
   Infrastructure Server
   Basic Desktop
Available groups:
   3D Printing
   Administration Tools
   Audio Production
   Authoring and Publishing
   Books and Guides
   C Development Tools and Libraries
   Cloud Infrastructure
   Cloud Management Tools
   Container Management
   D Development Tools and Libraries
   Design Suite
   Development Tools
   Domain Membership
   Fedora Eclipse
   Editors
   Educational Software
   Electronic Lab
   Engineering and Scientific
   FreeIPA Server
   Games and Entertainment
   Headless Management
   LibreOffice
   MATE Applications
   MATE Compiz
   Medical Applications
   Milkymist
   Network Servers
   Office/Productivity
   Robotics
   RPM Development Tools
   Security Lab
   Sound and Video
   System Tools
   Text-based Internet
   Window Managers

Unfortunately, you won’t find an obvious group for your needs.  And yet:

$ sudo dnf group info gnome
Last metadata expiration check performed 0:10:19 ago on Tue Oct  6 22:01:54 2015.

Group: GNOME
 Description: GNOME is a highly intuitive and user friendly desktop environment.
 Mandatory Packages:
   NetworkManager-l2tp
   NetworkManager-openconnect
   NetworkManager-openvpn-gnome
   NetworkManager-pptp-gnome
   NetworkManager-vpnc-gnome
   PackageKit-command-not-found
   PackageKit-gtk3-module
   abrt-desktop
   abrt-java-connector
   aisleriot
   at-spi2-atk
   at-spi2-core
   avahi
   baobab
   bijiben
   brasero
   brasero-nautilus
   caribou
   caribou-gtk2-module
   caribou-gtk3-module
   cheese
   control-center
   dconf
   deja-dup
   deja-dup-nautilus
   empathy
   eog
   evince
   evince-nautilus
   evolution
   evolution-ews
   evolution-help
   file-roller
   file-roller-nautilus
   firewall-config
   fprintd-pam
   fros-gnome
   gdm
   gedit
   glib-networking
   gnome-backgrounds
   gnome-bluetooth
   gnome-boxes
   gnome-calculator
   gnome-classic-session
   gnome-clocks
   gnome-color-manager
   gnome-contacts
   gnome-dictionary
   gnome-disk-utility
   gnome-documents
   gnome-font-viewer
   gnome-getting-started-docs
   gnome-initial-setup
   gnome-logs
   gnome-maps
   gnome-packagekit
   gnome-screenshot
   gnome-session-xsession
   gnome-settings-daemon
   gnome-shell
   gnome-software
   gnome-sound-recorder
   gnome-system-monitor
   gnome-terminal
   gnome-themes-standard
   gnome-user-docs
   gnome-user-share
   gnome-weather
   google-android-emoji-fonts
   gucharmap
   gvfs-afc
   gvfs-afp
   gvfs-archive
   gvfs-fuse
   gvfs-goa
   gvfs-gphoto2
   gvfs-mtp
   gvfs-smb
   libcanberra-gtk2
   libcanberra-gtk3
   libproxy-mozjs
   librsvg2
   libsane-hpaio
   mousetweaks
   nautilus
   nautilus-sendto
   nm-connection-editor
   orca
   polkit-js-engine
   rhythmbox
   rygel
   sane-backends-drivers-scanners
   seahorse
   setroubleshoot
   shotwell
   simple-scan
   sushi
   totem
   totem-nautilus
   transmission-gtk
   vinagre
   xdg-user-dirs-gtk
   yelp

Why doesn’t the GNOME group show up in our listing?

Well, in what must be an attempt to better the user experience, it seems Fedora’s repositories a few totally awesome hidden groups:

$ sudo dnf group list -v hidden
Available environment groups:
   Minimal Install (minimal-environment)
   Fedora Server (server-product-environment)
   Fedora Workstation (workstation-product-environment)
   Fedora Cloud Server (cloud-server-environment)
   KDE Plasma Workspaces (kde-desktop-environment)
   Xfce Desktop (xfce-desktop-environment)
   LXDE Desktop (lxde-desktop-environment)
   LXQt Desktop (lxqt-desktop-environment)
   Cinnamon Desktop (cinnamon-desktop-environment)
   MATE Desktop (mate-desktop-environment)
   Sugar Desktop Environment (sugar-desktop-environment)
   Development and Creative Workstation (developer-workstation-environment)
   Web Server (web-server-environment)
   Infrastructure Server (infrastructure-server-environment)
   Basic Desktop (basic-desktop-environment)
Installed groups:
   Virtualization (virtualization)
Available groups:
   3D Printing (3d-printing)
   Administration Tools (admin-tools)
   Anaconda tools (anaconda-tools)
   Audio Production (audio)
   Authoring and Publishing (authoring-and-publishing)
   base-x (base-x)
   Basic Desktop (basic-desktop)
   Books and Guides (books)
   Buildsystem building group (buildsys-build)
   C Development Tools and Libraries (c-development)
   Cinnamon (cinnamon-desktop)
   Cloud Infrastructure (cloud-infrastructure)
   Cloud Management Tools (cloud-management)
   Cloud Server Tools (cloud-server)
   Container Management (container-management)
   Core (core)
   Critical Path (Applications) (critical-path-apps)
   Critical Path (Base) (critical-path-base)
   Critical Path (GNOME) (critical-path-gnome)
   Critical Path (KDE) (critical-path-kde)
   Critical Path (LXDE) (critical-path-lxde)
   Critical Path (LXQt) (critical-path-lxqt)
   Critical Path (Xfce) (critical-path-xfce)
   D Development Tools and Libraries (d-development)
   Design Suite (design-suite)
   Development Libraries (development-libs)
   Development Tools (development-tools)
   Dial-up Networking Support (dial-up)
   Directory Server (directory-server)
   DNS Name Server (dns-server)
   Dogtag Certificate System (dogtag)
   Domain Membership (domain-client)
   Fedora Eclipse (eclipse)
   Editors (editors)
   Educational Software (education)
   Electronic Lab (electronic-lab)
   Engineering and Scientific (engineering-and-scientific)
   Epiphany Web Browser (epiphany)
   Fedora Packager (fedora-packager)
   Firefox Web Browser (firefox)
   Font design and packaging (font-design)
   Fonts (fonts)
   FreeIPA Server (freeipa-server)
   FTP Server (ftp-server)
   Games and Entertainment (games)
   GNOME (gnome-desktop)
   Extra games for the GNOME Desktop (gnome-games)
   GNOME Software Development (gnome-software-development)
   Graphical Internet (graphical-internet)
   Graphics (graphics)
   Guest Agents (guest-agents)
   Guest Desktop Agents (guest-desktop-agents)
   High Availability (ha)
   HAProxy (haproxy)
   Hardware Support (hardware-support)
   Haskell (haskell)
   Headless Management (headless-management)
   Input Methods (input-methods)
   Java (java)
   Java Development (java-development)
   Java Application Server (javaenterprise)
   KDE Applications (kde-apps)
   KDE (kde-desktop)
   KDE Educational applications (kde-education)
   KDE Multimedia support (kde-media)
   KDE Office (kde-office)
   KDE Software Development (kde-software-development)
   KDE Telepathy (kde-telepathy)
   KDE Frameworks 5 Software Development (kf5-software-development)
   Legacy Fonts (legacy-fonts)
   Legacy Network Server (legacy-network-server)
   Legacy Software Development (legacy-software-development)
   Legacy Software Support (legacy-software-support)
   LibreOffice (libreoffice)
   LibreOffice Development (libreoffice-development)
   Load Balancer (load-balancer)
   Applications for the LXDE Desktop (lxde-apps)
   LXDE (lxde-desktop)
   Multimedia support for LXDE (lxde-media)
   LXDE Office (lxde-office)
   Applications for the LXQt Desktop (lxqt-apps)
   LXQt (lxqt-desktop)
   Multimedia support for LXQt (lxqt-media)
   LXQt Office (lxqt-office)
   Mail Server (mail-server)
   MATE Applications (mate-applications)
   MATE Compiz (mate-compiz)
   MATE (mate-desktop)
   Medical Applications (medical)
   Milkymist (milkymist)
   MinGW cross-compiler (mingw32)
   MongoDB (mongodb)
   Multimedia (multimedia)
   MariaDB (MySQL) Database (mysql)
   Network Servers (network-server)
   Common NetworkManager Submodules (networkmanager-submodules)
   News Server (news-server)
   OCaml (ocaml)
   Office/Productivity (office)
   Online Help and Documentation (online-docs)
   Perl Development (perl)
   Perl for Web (perl-web)
   PHP (php)
   Printing Support (printing)
   Python (python-web)
   Robotics (robotics-suite)
   RPM Development Tools (rpm-development-tools)
   Ruby (ruby)
   Ruby on Rails (rubyonrails)
   Security Lab (security-lab)
   Server Configuration Tools (server-cfg)
   Hardware Support for Server Systems (server-hardware-support)
   Fedora Server product core (server-product)
   Windows File Server (smb-server)
   Sound and Video (sound-and-video)
   PostgreSQL Database (sql-server)
   Standard (standard)
   Additional Sugar Activities (sugar-apps)
   Sugar Desktop Environment (sugar-desktop)
   System Tools (system-tools)
   Text-based Internet (text-internet)
   Tomcat (tomcat)
   Vagrant with libvirt support (vagrant)
   Basic Web Server (web-server)
   Window Managers (window-managers)
   Fedora Workstation product core (workstation-product)
   X Software Development (x-software-development)
   Applications for the Xfce Desktop (xfce-apps)
   Xfce (xfce-desktop)
   Extra plugins for the Xfce panel (xfce-extra-plugins)
   Multimedia support for Xfce (xfce-media)
   Xfce Office (xfce-office)
   Xfce Software Development (xfce-software-development)
   XMonad (xmonad)
   XMonad for MATE (xmonad-mate)
Available language groups:
   Arabic Support (arabic-support) [ar]
   Assamese Support (assamese-support) [as]
   Bengali Support (bengali-support) [bn]
   Bhutanese Support (bhutanese-support) [dz]
   Bodo Support (bodo-support) [brx]
   Myanmar (Burmese) Support (burmese-support) [my]
   Dogri Support (dogri-support) [doi]
   Ethiopic Support (ethiopic-support) [am]
   Finnish Support (finnish-support) [fi]
   Georgian Support (georgian-support) [ka]
   Greek Support (greek-support) [el]
   Gujarati Support (gujarati-support) [gu]
   Hebrew Support (hebrew-support) [he]
   Hindi Support (hindi-support) [hi]
   Japanese Support (japanese-support) [ja]
   Kannada Support (kannada-support) [kn]
   Kashmiri Support (kashmiri-support) [ks]
   Khmer Support (khmer-support) [km]
   Konkani Support (konkani-support) [kok]
   Korean Support (korean-support) [ko]
   Kurdish Support (kurdish-support) [ku]
   Lepcha Support (lepcha-support) [lep]
   Maithili Support (maithili-support) [mai]
   Malayalam Support (malayalam-support) [ml]
   Manipuri Support (manipuri-support) [mni]
   Marathi Support (marathi-support) [mr]
   Nepali Support (nepali-support) [ne]
   Oriya Support (oriya-support) [or]
   Persian Support (persian-support) [fa]
   Punjabi Support (punjabi-support) [pa]
   Russian Support (russian-support) [ru]
   Sanskrit Support (sanskrit-support) [sa]
   Santali Support (santali-support) [sat]
   Simplified Chinese Support (simplified-chinese-support) [zh_CN]
   Sindhi Support (sindhi-support) [sd]
   Sinhala Support (sinhala-support) [si]
   Tamil Support (tamil-support) [ta]
   Telugu Support (telugu-support) [te]
   Thai Support (thai-support) [th]
   Tibetan Support (tibetan-support) [bo]
   Traditional Chinese Support (traditional-chinese-support) [zh_TW]
   Urdu Support (urdu-support) [ur]
   Vietnamese Support (vietnamese-support) [vi]
   Yiddish Support (yiddish-support) [yi]

The “-v” option causes the output to include the parenthetical references to the groups’ group IDs (which are also candidates for the case-insensitive comparison described below, and that’s why our reference to the group ‘gnome-desktop’ worked with the string ‘gnome’).

But man!  That’s crazy!  Why does that even work!?  Shouldn’t it just tell us there aren’t any groups with “hidden” in their names?  And look at all this awesome stuff!  Tons of language support (which might’ve solved my Chinese IME in KDE woes I posted about a while back – gotta test that one), tons of development tools..

It appears that “hidden” is a super secret <group-spec> which defies all man page explanation:

SPECIFYING GROUPS
       <group-spec> allows one to select (environment) groups a particular operation should work on. It is a case
       insensitive  string  (supporting globbing characters) that is matched against a group's ID, canonical name
       and name translated into the current LC_MESSAGES locale (if possible).

From reading that, one might expect the ‘dnf group list hidden’ command to display any packages whose ID, canonical name, or translated name might be matched case-insensitively against the string ‘hidden’.  That is, after all, what the explanation tells us will happen.

Unfortunately, I don’t know why this works.  I know support for hidden packages was included as a feature of yum, and its most obvious use is as a convenience for end users (since I’m sure many of these groups are subgroups of other Fedora groups).  Unfortunately, it seems the productization of Fedora has led to a little strangeness ’round these parts:

$ sudo dnf group info workstation-product-environment
Last metadata expiration check performed 0:46:35 ago on Tue Oct  6 22:01:54 2015.
Environment Group: Fedora Workstation
 Description: Fedora Workstation is a user friendly desktop system for laptops and PCs.
 Mandatory Groups:
   Common NetworkManager Submodules
   Core
   Fedora Workstation product core
   Fonts
   Guest Desktop Agents
   Hardware Support
   LibreOffice
   Multimedia
   Printing Support
   base-x

Everyone knows Fedora Workstation comes with the GNOME Desktop Environment…so where’s that gnome-desktop group?  For what I’m sure are interesting reasons, it appears the “Fedora Workstation product core” group (Group-Id: “workstation-product”) simply contains a bunch of GNOME packages (but not all).  It looks like this was done at least in part to avoid using certain packages rolled up into the gnome-desktop group, such as gnome-packagekit (Fedora Workstation favors instead the PackageKit RPM).

So it’s conceivable that the gnome-desktop group was hidden in order to avoid confusing standard users of the Fedora Workstation product since that product already contains GNOME packages through the workstation-product group, and to avoid users accidentally installing packages which conflict with the versions used by the Fedora Workstation product.

But that’s just my guess.  An hour or so of Googling turned up no explanation, so if anyone knows the whole story, feel free to chime in.

This entry was posted in Information Technology. Bookmark the permalink.

3 Responses to The Hidden DNF Groups of the Fedora Repositories

  1. Ersatz says:

    Cheers for this. I”ve referrered to this list often.

Leave a comment