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 -vdetails,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
| Question | Solaris 10 | Solaris 11.4 |
|---|---|---|
| OS name and kernel | uname -a | uname -a |
| Release / update | cat /etc/release | cat /etc/release, cat /etc/os-release |
| Exact patch / SRU level | uname -v (kernel patch), showrev -p | pkg info entire, uname -v |
| One-screen summary | showrev | uname -X plus pkg info entire |
| 64-bit kernel? | isainfo -kv | isainfo -kv (always 64-bit) |
| Instruction sets | isalist, isainfo -v | isalist, isainfo -v |
| Hardware platform | uname -i, prtdiag | uname -i, prtdiag, virtinfo |
| Global zone or not? | zonename | zonename |
| CPUs and memory | psrinfo -pv, prtconf | grep Memory | same, plus psrinfo -t |
| Host ID | hostid | hostid |
| Health at a glance | svcs -xv, fmadm faulty | svcs -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:
| Option | Field | Solaris 10 example | Solaris 11.4 example |
|---|---|---|---|
-s | OS name | SunOS | SunOS |
-n | Node name | sol10db | sol114 |
-r | Release (SunOS) | 5.10 | 5.11 |
-v | Version | Generic_150400-59 (kernel patch ID and revision) | 11.4.81.193.1 (the SRU/build string) |
-m | Machine class | sun4v | i86pc |
-p | Processor type | sparc | i386 (yes, even on 64-bit x86) |
-i | Platform name | SUNW,SPARC-Enterprise-T5220 | i86pc |
A few things worth knowing:
- On Solaris 10 the version string is the kernel patch.
Generic_150400-59is 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 -vreports the SRU build, for example11.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 -pprintsi386on all x86 hardware. Useisainfo -kvto confirm a 64-bit kernel.uname -iis the name you use for/platform/<name>directories.uname -mgives 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.
| Option | What it prints |
|---|---|
-k | The ISA used by kernel modules. With -v it says whether the kernel is 64-bit. |
-b | The number of bits in the native ISA address space (64 or 32). |
-n | The native instruction set name (sparcv9, amd64). |
-v | Verbose: lists hardware instruction set extensions, one line per ISA. |
-x | The 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 -rreturns5.10or5.11, matching what/etc/releasesays.- On Solaris 11, the SRU in
uname -vmatches the one inpkg info entire. If they differ, a newer BE was created but the host has not rebooted into it; checkbeadm list. - On Solaris 10, the kernel patch from
uname -vappears inshowrev -p. isainfo -kvreports a 64-bit kernel on any supported hardware.
Troubleshooting and gotchas
showrev: not foundon Solaris 11. Expected; it was removed. Usepkg info entire. On Solaris 10 it lives in/usr/bin/showrev, so check yourPATHif it is missing there.- Commands behave differently in a non-global zone.
prtdiagandfmadmdo not work or show little in a zone,psrinfomay show only the CPUs in the zone’s resource pool, andprtconfmemory reflects the whole host unless capped. Always runzonenamefirst. A Solaris 10 branded zone on Solaris 11 reports5.10fromuname -rwhile the kernel underneath is 11. - Wrong output from GNU tools on Solaris 11. Solaris 11 puts
/usr/gnu/binahead in some default paths, sounameordfmay be the GNU version with different flags. Use/usr/bin/unamein scripts, as the script above does by settingPATH. /etc/releaselooks old on Solaris 10. It records the install or upgrade media, not patches. Trustuname -vandshowrev -p.uname -vandpkg info entiredisagree on Solaris 11.unamereports the running kernel;pkgreports the packages in the current BE image. Afterpkg updatewithout a reboot,pkg info entire -randbeadm listhelp you see what is staged.- Hostname confusion.
uname -nis the node name; on Solaris 10 it comes from/etc/nodename, on Solaris 11 from thesvc:/system/identity:nodeservice. 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)).
