Go to main content

Adding and Updating Software in Oracle® Solaris 11.3

Exit Print View

Updated: September 2018
 
 

Searching for Packages

Use the pkg search command to search for packages whose data matches the specified pattern.

Comparing the pkg search and pkg contents Commands

Like the pkg contents command, the pkg search command examines the contents of packages. While the pkg contents command returns the contents, the pkg search command returns the names of packages that match the search query. The following table shows some of the similarities and differences between these two commands.

Table 1  pkg search and pkg contents Comparison
pkg search
pkg contents
  • Searches packages in repositories associated with all publishers configured for this image. Use the -l option to search only installed packages.

  • Use the -s option to specify the URI of a repository to search.

  • Use the search query to specify an action.

  • Use the search query to specify an attribute and attribute value.

  • Use the -o option to specify columns of results.

  • Examines installed packages. Use the -r option to examine packages in repositories associated with all publishers configured for this image.

  • Use the -g option to specify the URI of a repository to examine.

  • Use the -t option to specify an action.

  • Use the -a option to specify an attribute and attribute value.

  • Use the -o option to specify columns of results.

  • Use the -s option to sort the results.


Tip  -  Use the pkg contents command to show the contents of a specified package, and use the pkg search command to show packages that match a query. If you know which package delivers the content that you are interested in, use the pkg contents command.

Specifying the Search Query

By default, the search query is a series of terms to be matched exactly except for case. Use the -I option to specify a case-sensitive search.

You can use ? and * wildcards in query terms. You can use single or double quotation marks to search for phrases. Be sure to take your shell into account when you use wildcards or quotation marks.

You can specify more than one query term. By default, multiple terms are joined with AND. You can explicitly join two terms with OR.

Search queries can be expressed in the following structured form:

package:action:index:token
package

The name of the package to search or a pattern that might match multiple packages.

action

Usually selects an attribute of action as listed in the “Actions” section of the pkg(5) man page. See below for more information.

index

The name of an attribute of action as listed in the “Actions” section of the pkg(5) man page.

token

The value of index or a pattern that might match the value of index.

Missing fields are implicitly wildcarded. The token string can be explicitly wildcarded. Names of actions and indexes cannot be explicitly wildcarded.

The index is not necessarily the same as the name of an action attribute. For example, the index for the user action is name, while the name of that attribute is username.

Not all action attributes are searchable. For example, mode is an attribute of the file action, but mode is not a valid value for index.

The following example shows one way to find all possible indexes for an action:

$ pkg search :user::

This command shows that the only searchable attribute of a user action is name.

Some values of index are values derived from other attributes. For example, index can be basename, which is the last component of the path attribute of a file or dir action. Examples of useful values for index include basename and path for file and dir actions, the dependency type (require or group, for example) for depend actions, and driver_name and alias for driver actions.

The index can also be a special pseudo attribute name such as action.key (the key attribute of the action) or pkg.name. See the pkg(1) man page for a complete list.

The value of token is compared with the value of the attribute named by index. For example, in the following partial driver action, alias is an attribute name that could be specified for index, and pci108e* could be specified for token.

driver alias=pci108e,1647 alias=pci108e,16a7

The syntax of a set action is slightly different. The two attributes of a set action are name and value. In this case, the value of index is the value of a name attribute, and the value of token is compared with the value of the matching value attribute. The following example shows a set action for a driver package:

set name=pkg.summary value="Broadcom NetXtreme II 10GbE NIC Driver"

The following example specifies set for the action, pkg.summary for index, and Broadcom for token. The search.match and pkg.name column specifiers are pseudo attributes. See the pkg(1) man page.

$ pkg search -o search.match,pkg.name pkg.summary:Broadcom
SEARCH.MATCH                           PKG.NAME
Broadcom NetXtreme II 10GbE NIC Driver driver/network/ethernet/bnxe
Broadcom 57xx 1GbE NIC Driver          driver/network/ethernet/bge
Broadcom NetXtreme II 1GbE NIC Driver  driver/network/ethernet/bnx
Broadcom BCM4401 NIC Driver            driver/network/ethernet/bfe
Broadcom HT1000 SATA driver            driver/storage/bcm_sata

Some well-defined values of set action name attributes include pkg.fmri, info.classification, pkg.description, and pkg.summary. See “Set Actions” in the pkg(5) man page.

By default, matches are displayed only for currently installed or newer package versions. Use the -f option to display all matched versions.

By default, results are displayed for all matching actions, which can yield multiple lines of results for one package. Use the -p option to list each matching package only once.

Identifying Which Package Delivers a Specified File

In the following example, the search token is the full path of a file system object:

$ pkg search /lib/libinetutil.so.1
INDEX      ACTION VALUE                PACKAGE
path       file   lib/libinetutil.so.1 pkg:/system/library@0.5.11-0.175.3.30.0.4.0

The pkg search command searches package actions. The preceding command found the search token in the path attribute of a file action and shows that this file is delivered by the system/library package.

The following example specifies that the desired output is only the name of the package. Specifying the -l option can quicken the search because only installed packages are searched:

$ pkg search -Hlo pkg.name '*libinetutil*'
system/library

If you do not specify the output you want, then using just the base name of the file as the search token, or using wild cards as shown above, shows that this file is delivered to six different directories and is the target of three links. Another way to show each package name only one time, instead of showing many lines of output for one package, is to use the -p option or enclose the search token in angle brackets. Depending on your shell, you might need to escape the angle brackets. The following commands have the same output:

$ pkg search -p '*libinetutil*'
$ pkg search \<'*libinetutil*'\>
PACKAGE                                    PUBLISHER
pkg:/system/library0.5.11-0.175.3.30.0.4.0 solaris

If you cannot find the package that delivers a file on your system, perhaps that file was not delivered by an IPS package.

Identifying Which Package Delivers a Specified SMF Service

To show which packages provide a particular SMF service, search for the name of the service as the value of the org.opensolaris.smf.fmri attribute.

$ pkg search -o pkg.name,search.match 'org.opensolaris.smf.fmri:*network/http*'
PKG.NAME                SEARCH.MATCH
web/java-servlet/tomcat svc:/network/http
web/proxy/squid         svc:/network/http
web/proxy/privoxy       svc:/network/http
web/server/lighttpd-14  svc:/network/http
web/server/apache-22    svc:/network/http
web/server/apache-22    svc:/network/http:apache22
web/server/lighttpd-14  svc:/network/http:lighttpd14
web/proxy/privoxy       svc:/network/http:privoxy
web/proxy/squid         svc:/network/http:squid
web/java-servlet/tomcat svc:/network/http:tomcat6

In this case, each attribute has two values: the service name with and without the service instance name specified. The following example shows how this attribute is specified in the package manifest:

set name=org.opensolaris.smf.fmri value=svc:/network/http value=svc:/network/http:apache22

The following example shows this same information with each package listed only once. The -p option cannot be used when requesting action-level output such as search.match. Escape the colon character so that it is interpreted as part of the token and not as another search query field.

$ pkg search -o pkg.name,search.match 'org.opensolaris.smf.fmri:*network/http\:*'
PKG.NAME                SEARCH.MATCH
web/server/apache-22    svc:/network/http:apache22
web/server/lighttpd-14  svc:/network/http:lighttpd14
web/proxy/privoxy       svc:/network/http:privoxy
web/proxy/squid         svc:/network/http:squid
web/java-servlet/tomcat svc:/network/http:tomcat6

Identifying Which Package Delivers a Specified User

IPS packages deliver users for daemons or other software to use.

The following command shows users that are delivered by installed packages:

$ pkg search -lo action.key user::

The following command shows which package delivers a particular user definition:

$ pkg search -o action.key,pkg.name user::nova
ACTION.KEY PKG.NAME
nova       cloud/openstack/nova

The following command shows an example of using the OR keyword:

$ pkg search -o action.key,pkg.name user::nova OR user::neutron
ACTION.KEY PKG.NAME
nova       cloud/openstack/nova
neutron    cloud/openstack/neutron

Identifying Which Packages Deliver a Specified Fix

The following command shows which package delivers a particular bug fix:

$ pkg search -Ho pkg.shortfmri bugid

All packages that were modified to fix the bug are listed.

See Critical Patch Update Packages to learn how to identify which SRU delivered a particular CVE fix.

Listing Packages by Classification or Category

The following example identifies all installed packages that have “Source Code Management” in the value of their info.classification attribute:

$ pkg search -Hlo pkg.name info.classification:'source code management'
developer/versioning/sccs
developer/versioning/mercurial
developer/versioning/mercurial-27

The following example shows the package metadata that is matched in this search:

set name=info.classification value="org.opensolaris.category.2008:Development/Source Code Management"

This information is displayed in the “Category” line in output from the pkg info command.

$ pkg info mercurial-27
...
      Category: Development/Source Code Management
...

See Classification Values in Packaging and Delivering Software With the Image Packaging System in Oracle Solaris 11.3 for other classifications that you can search for.

You can also use the pkg list command with a guess at one of the components of the package name, as in the following examples:

$ pkg list -a '*versioning*'
$ pkg list '*storage*'
$ pkg list -n '*database*'

Showing Dependent Packages

These examples show the packages that are dependencies of the specified package.

The following example shows packages that have a require dependency on the system/kernel/power package:

$ pkg search -Hlo pkg.name require:system/kernel/power
system/kernel/dynamic-reconfiguration/i86pc
system/hal

The following pkg contents command confirms the results of the search. The requested output action.raw is a pseudo attribute that displays the action exactly as it appears in the package manifest.

$ pkg contents -rt depend -a fmri='*power*' -o pkg.name,action.raw i86pc system/hal
PKG.NAME                                    ACTION.RAW
system/hal                                  depend fmri=pkg:/system/kernel/power
@0.5.11-0.175.2.0.0.34.0 type=require variant.opensolaris.zone=global
system/kernel/dynamic-reconfiguration/i86pc depend fmri=pkg:/system/kernel/power
 type=require

The following example shows that many packages have an exclude dependency on pkg:/x11/server/xorg@1.14.99:

$ pkg search -lo pkg.name,fmri 'depend:exclude:*xorg*'
PKG.NAME                                     FMRI
x11/server/xorg/driver/xorg-video-ati        pkg:/x11/server/xorg@1.14.99
x11/server/xvnc                              pkg:/x11/server/xorg@1.14.99
x11/server/xserver-common                    pkg:/x11/server/xorg@1.14.99
x11/server/xorg/driver/xorg-input-vmmouse    pkg:/x11/server/xorg@1.14.99
x11/server/xephyr                            pkg:/x11/server/xorg@1.14.99 
...

Listing All Packages in a Group Package

The Oracle Solaris 11 GUI installer installs the solaris-desktop group package. The text installer and the default AI manifest in an Automated Installer installation install the solaris-large-server group package. The default installation manifest for non-global zones installs the solaris-small-server group package. The solaris-minimal-server group package installs the minimal supported set of packages required to run Oracle Solaris.

You can use the following search form to display the set of packages that is included in the specified group package.


Note -  This package list does not include every package that is installed when you install the group package. Dependencies of the packages in this list will also be installed, and dependencies of those dependencies.
$ pkg search -o type,fmri '*/solaris-minimal-server:depend::'
TYPE    FMRI
require developer/debug/mdb
require editor/vim/vim-core
require group/system/solaris-core-platform
group   network/ping
require package/pkg
require release/name
require release/notices
group   service/network/ssh-common
require shell/bash
require shell/ksh93
group   shell/tcsh
group   shell/zsh
require system/core-os
require system/library/platform
group   system/network

The depend query field matches depend actions in the package. The -o option displays the values of the type and fmri attributes of the depend action. Use pkg.shortfmri to see the version as well as the name of each package. Recall that group packages do not specify file system content; group packages specify other packages that are part of the group. See Group Packages for more information about group packages.

The pkg search command is returning the value of an attribute of an action in a specified package. In this example, that attribute value is a package name. The number of results from this command can be larger than the number of the results from the similar pkg contents command shown in Listing All Installable Packages in a Group Package because these search results include the names of all packages that are named in depend actions of type group in the specified package, not just installable packages. For example, package variants and facets might be included that are not installable in this image. To see this difference, try both examples with the solaris-large-server package.