Solaris First-Day Commands: uname, /etc/release, showrev, isainfo and isalist

Solaris Admin Series, part 5. Previous: Solaris /devices, /dev and /etc/path_to_inst. Related: Solaris on SPARC vs x86: sun4u, sun4v, i86pc and What Differs and part 1, Solaris 10 and 11.4 Releases, Support Lifecycle and Which to Run. Next up: shells on Solaris (sh, ksh88/ksh93, bash, csh) and setting the default shell.

You have just been handed a login to a Solaris box you have never seen. Before you touch anything, you want to know what it is: which Solaris release and update or SRU, which kernel, SPARC or x86, 32 or 64 bit, which hardware platform, whether you are in the global zone or a guest, and roughly how big it is. This post walks through the handful of commands that answer those questions, explains what every field means, and ends with a small inventory script that works on both releases.

Applies to: both Solaris 10 and Solaris 11 (11.4), on SPARC and x86. The big difference: showrev exists only on Solaris 10. On Solaris 11 the package system (pkg info entire) is the source of truth for the exact release and SRU.

Prerequisites

  • A shell on the system. Every command below works as an ordinary user; only a few optional extras (prtdiag -v details, fmadm) want root or the right RBAC profile.
  • Know that sample output in this post is illustrative. Hostnames, kernel patch levels, SRU numbers and platform names on your system will differ.
  • Background on machine classes (sun4u, sun4v, i86pc) is in part 2, Solaris on SPARC vs x86: sun4u, sun4v, i86pc and What Differs.

The quick answer: a first-day checklist

QuestionSolaris 10Solaris 11.4
OS name and kerneluname -auname -a
Release / updatecat /etc/releasecat /etc/release, cat /etc/os-release
Exact patch / SRU leveluname -v (kernel patch), showrev -ppkg info entire, uname -v
One-screen summaryshowrevuname -X plus pkg info entire
64-bit kernel?isainfo -kvisainfo -kv (always 64-bit)
Instruction setsisalist, isainfo -visalist, isainfo -v
Hardware platformuname -i, prtdiaguname -i, prtdiag, virtinfo
Global zone or not?zonenamezonename
CPUs and memorypsrinfo -pv, prtconf | grep Memorysame, plus psrinfo -t
Host IDhostidhostid
Health at a glancesvcs -xv, fmadm faultysvcs -xv, fmadm faulty

uname: kernel name, release and platform

uname is the one command you can count on everywhere. On Solaris the “release” field is the SunOS version (5.10 for Solaris 10, 5.11 for Solaris 11), not the marketing name.

# Solaris 10 on a SPARC T-series
$ uname -a
SunOS sol10db 5.10 Generic_150400-59 sun4v sparc SUNW,SPARC-Enterprise-T5220

# Solaris 11.4 on x86
$ uname -a
SunOS sol114 5.11 11.4.81.193.1 i86pc i386 i86pc

Reading the fields left to right:

OptionFieldSolaris 10 exampleSolaris 11.4 example
-sOS nameSunOSSunOS
-nNode namesol10dbsol114
-rRelease (SunOS)5.105.11
-vVersionGeneric_150400-59 (kernel patch ID and revision)11.4.81.193.1 (the SRU/build string)
-mMachine classsun4vi86pc
-pProcessor typesparci386 (yes, even on 64-bit x86)
-iPlatform nameSUNW,SPARC-Enterprise-T5220i86pc

A few things worth knowing:

  • On Solaris 10 the version string is the kernel patch. Generic_150400-59 is SPARC kernel patch 150400 at revision 59 (x86 uses 150401). Compare it to the latest recommended patchset to see how far behind the host is.
  • On Solaris 11.4 uname -v reports the SRU build, for example 11.4.81.193.1, which reads as release 11.4, SRU 81, build 193, respin 1. It changes when you boot into a boot environment with a newer SRU, so it reflects the running BE.
  • uname -p prints i386 on all x86 hardware. Use isainfo -kv to confirm a 64-bit kernel.
  • uname -i is the name you use for /platform/<name> directories. uname -m gives the /platform/<class> fallback, as covered in Solaris Filesystem Layout Tour.

uname -X: the SCO-compatible long form

Solaris also supports uname -X, which prints one field per line. It is handy because it includes the CPU count.

$ uname -X
System = SunOS
Node = sol10db
Release = 5.10
KernelID = Generic_150400-59
Machine = sun4v
BusType = <unknown>
Serial = <unknown>
Users = <unknown>
OEM# = 0
Origin# = 1
NumCPU = 64

NumCPU counts virtual processors (hardware threads), not cores or sockets. A SPARC T-series core usually exposes 8 threads, so 64 here might be a single 8-core chip.

/etc/release and /etc/os-release: the release name

/etc/release is a short text file with the human-readable release name. On Solaris 10 it tells you which update was installed.

# Solaris 10
$ cat /etc/release
                   Oracle Solaris 10 1/13 s10s_u11wos_24a SPARC
  Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
                            Assembled 17 January 2013

# Solaris 11.4
$ cat /etc/release
                             Oracle Solaris 11.4 X86
  Copyright (c) 1983, 2025, Oracle and/or its affiliates.
                             Assembled 18 June 2025

On Solaris 10 the build string decodes as s10s (Solaris 10 SPARC; s10x is x86), u11 (update 11, the final update, marketed as 1/13) and wos_24a (the build). Older systems might show u8 (10/09), u9 (9/10) or u10 (8/11).

Gotcha on Solaris 10: /etc/release shows the update the system was installed or upgraded with. Applying a patchset does not change it, so a box that says 10/09 may be patched far beyond that. The kernel patch from uname -v and showrev -p tell the real story.

Solaris 11.4 also ships /etc/os-release, the freedesktop-style file that Linux tools and configuration management (Ansible facts, for example) read:

$ cat /etc/os-release
NAME="Oracle Solaris"
PRETTY_NAME="Oracle Solaris 11.4"
CPE_NAME="cpe:/o:oracle:solaris:11:4"
ID=solaris
VERSION=11.4
VERSION_ID=11.4
BUILD_ID=11.4.81.0.1.193.1
HOME_URL="https://www.oracle.com/solaris/"
SUPPORT_URL="https://support.oracle.com/"

The exact fields vary by SRU, so script against ID and VERSION_ID rather than the whole file. Solaris 10 has no /etc/os-release, which is itself a quick way to tell them apart.

Solaris 11: pkg info entire is the authoritative version

On Solaris 11 the entire incorporation pins every package to a consistent SRU. Its version is what Oracle Support will ask you for.

$ pkg info entire
             Name: entire
          Summary: entire incorporation including Support Repository Update (Oracle Solaris 11.4.81.193.1).
      Description: This package constrains system package versions to the same
                   build. WARNING: Proper system update and correct package
                   selection depend on the presence of this incorporation.
                   Removing this package will result in an unsupported system.
         Category: Meta Packages/Incorporations
            State: Installed
        Publisher: solaris
          Version: 11.4 (Oracle Solaris 11.4.81.193.1)
           Branch: 11.4.81.0.1.193.1
   Packaging Date: ...
             Size: 2.53 kB
             FMRI: pkg://solaris/entire@11.4-11.4.81.0.1.193.1:20250...

The Summary and the version in parentheses carry the SRU. If pkg info entire reports that entire is not installed, someone removed the incorporation; that is unsupported and should be fixed before patching. Release and SRU numbering is covered in more depth in part 1, Solaris 10 and 11.4 Releases, Support Lifecycle and Which to Run.

Two related checks: beadm list shows which boot environment is active now (N) and on reboot (R), and pkg update -nv does a dry run against the configured publisher to see whether a newer SRU is available.

showrev: the Solaris 10 summary (and patch list)

showrev (package SUNWadmc) gives a one-screen summary of a Solaris 10 host:

$ showrev
Hostname: sol10db
Hostid: 84a1b2c3
Release: 5.10
Kernel architecture: sun4v
Application architecture: sparc
Hardware provider: Oracle Corporation
Domain: example.com
Kernel version: SunOS 5.10 Generic_150400-59

Its most-used option is -p, which lists every installed patch. Pipe it through a filter to check for a specific patch:

$ showrev -p | grep 150400
Patch: 150400-59 Obsoletes: ... Requires: ... Incompatibles:  Packages: SUNWckr, SUNWcsr, ...

$ showrev -p | wc -l
   1874

patchadd -p prints the same list. showrev -a adds OpenWindows and X server details, which is rarely useful on servers. showrev -c /usr/bin/ls shows details for a single binary.

Solaris 11: showrev is gone, along with SVR4 patching. Use uname -a, hostid and pkg info entire instead. Old runbooks and monitoring scripts that call showrev need a Solaris 11 branch.

isainfo: 32 or 64 bit, and which instruction set extensions

isainfo describes the instruction set architectures the running system supports.

$ isainfo -kv
64-bit sparcv9 kernel modules

$ isainfo -b
64

$ isainfo -n
sparcv9

$ isainfo
sparcv9 sparc

On x86 the same commands return 64-bit amd64 kernel modules, amd64 and amd64 i386.

OptionWhat it prints
-kThe ISA used by kernel modules. With -v it says whether the kernel is 64-bit.
-bThe number of bits in the native ISA address space (64 or 32).
-nThe native instruction set name (sparcv9, amd64).
-vVerbose: lists hardware instruction set extensions, one line per ISA.
-xThe extensions the hardware supports, in a compact form.

isainfo -v is how you check for crypto or vector extensions before enabling a feature (for example hardware AES):

$ isainfo -v
64-bit sparcv9 applications
        crc32c cbcond pause mont mpmul sha512 sha256 sha1 md5 camellia kasumi
        des aes ima hpc vis3 fmaf asi_blk_init vis2 vis popc
32-bit sparc applications
        crc32c cbcond pause mont mpmul sha512 sha256 sha1 md5 camellia kasumi
        des aes ima hpc vis3 fmaf asi_blk_init vis2 vis popc v8plus div32 mul32

Solaris 10 vs 11: on Solaris 10 x86 you can still meet 32-bit kernels on old hardware, so isainfo -kv is worth running. Solaris 11 boots only a 64-bit kernel, though it still runs 32-bit applications.

isalist: instruction sets in preference order

isalist prints every instruction set the system can execute, best first. The runtime linker and some build tools use this order to pick the most optimised binary.

# SPARC
$ isalist
sparcv9+vis2 sparcv9+vis sparcv9 sparcv8plus+vis2 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc

# x86
$ isalist
amd64 pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

For day-to-day work isainfo is clearer; reach for isalist when a vendor installer or build script asks which ISA variants are supported.

More first-day commands worth running

$ hostname; hostid
sol114
84a1b2c3

$ zonename              # "global" means you are in the global zone
global

$ virtinfo              # Solaris 11: are we a guest LDom, kernel zone, VM?
NAME            CLASS
non-global-zone supported
kernel-zone     supported
logical-domain  current

$ prtconf | grep Memory
Memory size: 65536 Megabytes

$ psrinfo -pv           # physical chips, cores and threads
The physical processor has 8 cores and 64 virtual processors (0-63)
  The core has 8 virtual processors (0-7)
  ...
    SPARC-T5 (chipid 0, clock 3600 MHz)

$ prtdiag | head -15    # model, firmware, DIMMs, I/O cards (output varies by platform)

$ who -b; uptime
   .       system boot  Oct 12 08:41
  2:10pm  up 18 day(s),  5:29,  2 users,  load average: 0.41, 0.38, 0.35

$ svcs -xv              # SMF services in maintenance or degraded (empty = good)
$ fmadm faulty          # faults diagnosed by FMA (run as root; empty = good)

Also glance at storage and networking. On Solaris 10: df -h, zpool status -x (if ZFS is in use), metastat -c (SVM) and ifconfig -a. On Solaris 11: zpool status -x, ipadm show-addr and dladm show-phys. Each of these gets its own post later in the series.

A portable inventory script for Solaris 10 and 11

Save this as /usr/local/bin/sysinfo.sh. It uses only commands present in both releases and branches where they differ.

#!/bin/ksh
# sysinfo.sh - quick identification of a Solaris 10 or 11 host
PATH=/usr/bin:/usr/sbin:/sbin; export PATH

echo "Host:        $(uname -n)   hostid $(hostid)   zone $(zonename)"
echo "Kernel:      $(uname -srv)"
echo "Platform:    $(uname -m) / $(uname -p) / $(uname -i)"
echo "ISA:         $(isainfo -kv)"
echo "Release:     $(head -1 /etc/release | sed 's/^ *//')"

case $(uname -r) in
5.10)
    kp=$(uname -v)
    echo "Patch level: kernel $kp, $(showrev -p 2>/dev/null | wc -l | tr -d ' ') patches"
    ;;
5.11)
    echo "SRU:         $(pkg info entire 2>/dev/null | awk -F': ' '/Summary/ {print $2}')"
    echo "Active BE:   $(beadm list -H 2>/dev/null | awk -F';' '$3 ~ /N/ {print $1}')"
    [ -x /usr/sbin/virtinfo ] && echo "Virt:        $(virtinfo 2>/dev/null | awk '$2 == "current" {print $1}')"
    ;;
esac

echo "CPUs:        $(psrinfo | wc -l | tr -d ' ') virtual, $(psrinfo -p) physical"
echo "Memory:      $(prtconf 2>/dev/null | awk -F': ' '/^Memory size/ {print $2}')"
echo "Boot time:   $(who -b | awk '{print $4, $5, $6}')"
bad=$(svcs -x 2>/dev/null | grep -c '^svc:')
echo "SMF:         $bad service(s) with problems (see svcs -xv)"

Run it and check the output:

$ chmod 755 /usr/local/bin/sysinfo.sh && /usr/local/bin/sysinfo.sh
Host:        sol114   hostid 84a1b2c3   zone global
Kernel:      SunOS 5.11 11.4.81.193.1
Platform:    sun4v / sparc / ORCL,SPARC-T5-2
ISA:         64-bit sparcv9 kernel modules
Release:     Oracle Solaris 11.4 SPARC
SRU:         entire incorporation including Support Repository Update (Oracle Solaris 11.4.81.193.1).
Active BE:   solaris-sru81
Virt:        logical-domain
CPUs:        64 virtual, 1 physical
Memory:      65536 Megabytes
Boot time:   Oct 12 08:41
SMF:         0 service(s) with problems (see svcs -xv)

Verification

  • uname -r returns 5.10 or 5.11, matching what /etc/release says.
  • On Solaris 11, the SRU in uname -v matches the one in pkg info entire. If they differ, a newer BE was created but the host has not rebooted into it; check beadm list.
  • On Solaris 10, the kernel patch from uname -v appears in showrev -p.
  • isainfo -kv reports a 64-bit kernel on any supported hardware.

Troubleshooting and gotchas

  • showrev: not found on Solaris 11. Expected; it was removed. Use pkg info entire. On Solaris 10 it lives in /usr/bin/showrev, so check your PATH if it is missing there.
  • Commands behave differently in a non-global zone. prtdiag and fmadm do not work or show little in a zone, psrinfo may show only the CPUs in the zone’s resource pool, and prtconf memory reflects the whole host unless capped. Always run zonename first. A Solaris 10 branded zone on Solaris 11 reports 5.10 from uname -r while the kernel underneath is 11.
  • Wrong output from GNU tools on Solaris 11. Solaris 11 puts /usr/gnu/bin ahead in some default paths, so uname or df may be the GNU version with different flags. Use /usr/bin/uname in scripts, as the script above does by setting PATH.
  • /etc/release looks old on Solaris 10. It records the install or upgrade media, not patches. Trust uname -v and showrev -p.
  • uname -v and pkg info entire disagree on Solaris 11. uname reports the running kernel; pkg reports the packages in the current BE image. After pkg update without a reboot, pkg info entire -r and beadm list help you see what is staged.
  • Hostname confusion. uname -n is the node name; on Solaris 10 it comes from /etc/nodename, on Solaris 11 from the svc:/system/identity:node service. DNS names may differ.

What’s next in the Solaris Admin Series

Next we look at shells on Solaris: the Bourne shell, ksh88 and ksh93, bash and csh, and how to set a user’s default shell. Catch up with part 4, Solaris /devices, /dev and /etc/path_to_inst, and part 3, Solaris Filesystem Layout Tour.

Official references: Oracle Solaris 11.4 documentation library (man pages for uname(1), isainfo(1), isalist(1) and pkg(1)) and Oracle Solaris 10 1/13 documentation library (man pages for showrev(1M) and patchadd(1M)).

Leave a Reply

Your email address will not be published. Required fields are marked *