New and different in Solaris 11

New and different in Solaris 11

Solaris 11 is binary compatible to Solaris 10 and application binaries are working well on Solaris 11. It's as well different to Solaris 10 (surprise...) and Solaris 11 Express since it's providing all the innovation which happened in the last 6 years. Users who are deeply entrenched with Solaris 10 (like me) have to cope with a number of changes which have the following background

New Solaris 11 Philosophies

Generational Change in regards of UNIX Search Paths

Solaris 10 is adhering to the first Unix generation (1970- mid nineties) command philosophy

This first generation of Unix users has been succeeded by users who grew up with Linux and Windows systems. Their approach is different:

Solaris 11 is embracing this new generation of users

OS Boundaries: What can I expect to be found on my System?

Solaris 10 has been a traditional operation system which got installed by most users from a DVD with three major choices

Adding packages to Solaris has been a more heavy weight process:

Solaris 11 comes with the Image Packaging Systems (IPS) which allows to

The one and only downside for software and scripts written for Solaris 10 is that some packages are not guaranteed to be installed upfront. Application developers of applications are strongly advised to check the existence of all required components before installation. IPS itself will be happy to answer these questions. Installing your software trough IPS technology itself is actually the way to go.

GNU Tools

Solaris 10 has been configured in such a way that it installed System V commands as "preferred" commands. XPG4 standardized commands have been installed by default in order to adhere to standards. BSD commands have been installed for backward compatibility reasons. GNU tools didn't belong to the standard installation.

Solaris 11 is following the philosophy that all important commands can be found in /usr/bin and the GNU tools are being installed by default. XPG4 compliant commands are now as well in the default location. BSD commands (/usr/ucb) are deprecated and their usage is being discouraged by making the package optional. The BSD commands are however available and supported.

Mitigating the Changes

The general problem of most users is, that they don't care a lot for the origin of a command. They check the different flavors. They use the first command which is solving the problem and they move on with their life...

The Solaris engineering did an outstanding job in rearranging the directories, commands and soft and hard links in such a way that almost everything works like before.

The collection below is an incomplete, yet growing list of technical articles which help to implement applications in a uniform way to operate them on Solaris 10 and Solaris 11 with a single source base.

Stefan Schneider Fri, 03/04/2011 - 09:29

Oracle Solaris 11 Early Adopter Version available for Download (Final Functionality)

Oracle Solaris 11 Early Adopter Version available for Download (Final Functionality)

Update

The original page is outdated. Oracle released Solaris 11. It is available through the Oracle download pages.

The early adopter release shouldn't be used anymore. It can't meet the qualitity standards of a servicable main stream OS version.

Original Content

Oracle is getting closer to the release of Solaris 11.

Oracle offers the Solaris 11 Early Adopter release for their OPN Gold levels members to download. The page states that It offers new features and the final functionality of Oracle Solaris 11.

The offer comes with a draft version of the documentation and a special early adopter license.

Time to take a test drive with Solaris 11 final functionality...

 

Stefan Schneider Fri, 09/09/2011 - 18:27

Solaris 11 Changes: Changing the Node Name (nodename) of a System

Solaris 11 Changes: Changing the Node Name (nodename) of a System

The nodename is getting managed through SMF in Solaris 11. There is now one central place to manage the nodename.

The change of the nodename requires an update in a SMF service property and a restart of the service:

svccfg –s svc:/system/identity:node setprop config/nodename = “NewHostname”
svcadm refresh svc:/system/identity:node
svcadm restart svc:/system/identity:node

The current node name can be checked with the following command:

svcprop -p config/nodename svc:/system/identity:node
Stefan Schneider Thu, 03/15/2012 - 16:04

Solaris 11 Changes: Managing Name Services (formerly known as /etc/resolv.conf)

Solaris 11 Changes: Managing Name Services (formerly known as /etc/resolv.conf)

Oracle Solaris 11 is leaving the SVR4 file based system administration of Solaris 10 behind. It uses SMF to manage the configuration state of many services.

The /etc/nsswitch.conf configuration file became a read only file which reflects the current state of the SMF service. Changes in the name resolution now require the following thress steps

 

  • Script the name vlaue pairs to be changed (strongly recommended)
  • update the SMF properties with the command svccfg
  • restart the name-service with the command svcadm

This can be done with a script like the one below:

#!/bin/ksh -p

me=${0##*/}

tmpfile=$(/usr/bin/mktemp -t ${me}.XXXXXX)

cat > $tmpfile <<EOF
setprop config/password = astring: ("files ldap")
setprop config/group = astring: ("files ldap")
setprop config/host = astring: ("files dns")
setprop config/network = astring: files
setprop config/protocol = astring: files
setprop config/rpc = astring: files
setprop config/ether = astring: files
setprop config/netmask = astring: files
setprop config/bootparam = astring: files
setprop config/publickey = astring: files
setprop config/netgroup = astring: ldap
setprop config/automount = astring: ("files ldap")
setprop config/alias = astring: files
setprop config/service = astring: files
setprop config/printer = astring: ("user files ldap")
setprop config/project = astring: files
setprop config/auth_attr = astring: files
setprop config/prof_attr = astring: files
setprop config/tnrhtp = astring: files
setprop config/tnrhdb = astring: files
exit
EOF

svccfg -s svc:/system/name-service/switch -f $tmpfile || exit
rm $tmpfile
svcadm refresh svc:/system/name-service/switch:default

Will Fiveash from Oracle published this script in his blog.

 

Stefan Schneider Wed, 03/14/2012 - 08:51

Solaris 11 Changes: Where is /usr/ucb ?

Solaris 11 Changes: Where is /usr/ucb ?

Solaris 11 Express as a predecessor to Solaris 11 ist out and a few things changed and improved...

The directory /usr/ucb isn't there anymore ...

The usage of the BSD commands in /usr/ucb has always been discouraged. The BSD commands have been provided as a backwards compatibility option for SunOS 4.1. People used them in Solaris 2 since they had interesting features. It has never been a good idea to rely on them in Solaris 2

The problem: /usr/ucb isn't available in the standard Solaris 11 (Express) installation!

The solution: Install an optionally available package with the following command to get them:

$ pkg add compatibility/ucb

You'll get the following commands after the installation:

sschneid@scalingbits:~$ ls -l /usr/ucb
total 433
drwxr-xr-x 2 root bin 3 2011-01-20 13:46 amd64
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 arch -> ../bin/arch
-rwxr-xr-x 1 root bin 7916 2011-01-20 13:46 basename
-rwxr-xr-x 1 root bin 8156 2011-01-20 13:46 biff
-rwxr-xr-x 1 root bin 13072 2011-01-20 13:46 chown
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 clear -> ../bin/clear
-rwxr-xr-x 1 root bin 1417 2011-01-20 13:46 df
-rwxr-xr-x 1 root bin 969 2011-01-20 13:46 du
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 e -> ../bin/edit
-rwxr-xr-x 1 root bin 7908 2011-01-20 13:46 echo
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 edit -> ../bin/edit
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 ex -> ../bin/edit
-rwxr-xr-x 1 root bin 22912 2011-01-20 13:46 expr
-r-xr-xr-x 1 root bin 1397 2011-01-20 13:46 fastboot
-r-xr-xr-x 1 root bin 1394 2011-01-20 13:46 fasthalt
-r-xr-xr-x 1 root bin 1412 2011-01-20 13:46 file
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 finger -> ../bin/finger
lrwxrwxrwx 1 root root 10 2011-01-20 13:46 fmt -> ../bin/fmt
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 fold -> ../bin/fold
-rwxr-xr-x 1 root bin 12704 2011-01-20 13:46 from
lrwxrwxrwx 1 root root 10 2011-01-20 13:46 ftp -> ../bin/ftp
-rwxr-xr-x 1 root bin 12640 2011-01-20 13:46 groups
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 head -> ../bin/head
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 hostid -> ../bin/hostid
lrwxrwxrwx 1 root root 15 2011-01-20 13:46 hostname -> ../bin/hostname
drwxr-xr-x 2 root bin 3 2011-01-20 13:46 i86
-rwxr-xr-x 1 root bin 17196 2011-01-20 13:46 install
-rwxr-xr-x 1 root bin 12508 2011-01-20 13:46 ln
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 logger -> ../bin/logger
-rwxr-xr-x 1 root bin 18732 2011-01-20 13:46 ls
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 mach -> ../bin/mach
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 mail -> ../bin/mailx
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 Mail -> ../bin/mailx
-r-xr-xr-x 1 root bin 13124 2011-01-20 13:46 mkstr
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 more -> ../bin/more
lrwxrwxrwx 1 root root 14 2011-01-20 13:46 netstat -> ../bin/netstat
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 page -> ../bin/more
lrwxrwxrwx 1 root root 15 2011-01-20 13:46 pagesize -> ../bin/pagesize
-rwxr-xr-x 1 root bin 7940 2011-01-20 13:46 printenv
-r-xr-xr-x 83 root bin 8420 2010-11-05 16:02 ps
lrwxrwxrwx 1 root root 19 2011-01-20 13:46 quota -> ../lib/fs/ufs/quota
lrwxrwxrwx 1 root root 10 2011-01-20 13:46 rcp -> ../bin/rcp
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 rdate -> ../bin/rdate
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 rdist -> ../bin/rdist
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 renice -> ../bin/renice
lrwxrwxrwx 1 root root 6 2011-01-20 13:46 reset -> ./tset
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 rlogin -> ../bin/rlogin
lrwxrwxrwx 1 root root 10 2011-01-20 13:46 rsh -> ../bin/rsh
lrwxrwxrwx 1 root root 14 2011-01-20 13:46 ruptime -> ../bin/ruptime
-rwxr-xr-x 1 root bin 12344 2011-01-20 13:46 rusage
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 rwho -> ../bin/rwho
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 script -> ../bin/script
-r-xr-xr-x 1 root bin 32632 2011-01-20 13:46 sed
-rwxr-xr-x 1 root bin 24724 2011-01-20 13:46 shutdown
-rwxr-xr-x 1 root bin 35444 2011-01-20 13:46 stty
-rwxr-xr-x 1 root bin 8144 2011-01-20 13:46 sum
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 tail -> ../bin/tail
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 talk -> ../bin/talk
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 tcopy -> ../bin/tcopy
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 telnet -> ../bin/telnet
-rwxr-xr-x 1 root bin 12812 2011-01-20 13:46 test
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 tftp -> ../bin/tftp
-rwxr-xr-x 1 root bin 12832 2011-01-20 13:46 touch
-rwxr-xr-x 1 root bin 12328 2011-01-20 13:46 tr
-rwxr-xr-x 1 root bin 24084 2011-01-20 13:46 tset
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 uptime -> ../bin/uptime
-rwxr-xr-x 1 root bin 8500 2011-01-20 13:46 users
lrwxrwxrwx 1 root root 15 2011-01-20 13:46 vacation -> ../bin/vacation
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 vedit -> ../bin/vedit
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 vi -> ../bin/edit
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 view -> ../bin/edit
-r-xr-xr-x 1 root bin 17396 2011-01-20 13:46 vipw
lrwxrwxrwx 1 root root 13 2011-01-20 13:46 vmstat -> ../bin/vmstat
lrwxrwxrwx 1 root root 8 2011-01-20 13:46 w -> ../bin/w
lrwxrwxrwx 1 root root 9 2011-01-20 13:46 wc -> ../bin/wc
-rwxr-xr-x 1 root bin 14512 2011-01-20 13:46 whereis
-rwxr-xr-x 1 root bin 8052 2011-01-20 13:46 whoami
lrwxrwxrwx 1 root root 12 2011-01-20 13:46 whois -> ../bin/whois
lrwxrwxrwx 1 root root 11 2011-01-20 13:46 xstr -> ../bin/xstr

The listing shows that many commands are soft links to their equivalent commands in /usr/bin.

Scripts with hard coded /usr/ucb commands should still work in Solaris 11 Express as they did in Solaris 10 as long as the optional package gets installed. The binaries seem to be smart binaries like the ps command. It behaves like a /usr/ucb/ps command if it is being callled with a full path or without a leading "-" in the option clause.

Conclusions

  • Avoid using /usr/ucb commands in Solaris 2 systems whenever possible
  • Install the compatibility/ucb package from Solaris 11 Express if absolutely needed.
  • Be aware that a number of Solaris commands got folded into a single one which is leading to a polymorphic behavior
  • Advantages of NOT having /usr/ucb installed
    • fewer packages and files
    • fewer needs for upgrades and patching
    • fewer security vulnerabilities due to fewer files and commands installed on the system

 

Stefan Schneider Thu, 01/20/2011 - 16:43

Solaris 11 Changes: Where is the BSD style ps command?

Solaris 11 Changes: Where is the BSD style ps command?

Short Answer: In /usr/bin/ps

Background

Oracle's new operating system Solaris 11 (Express) is a modular operating system based on the IPS installation technology. This feature has been used by Oracle to make the BSD commands in the directory /usr/ucb an optional package which doesn't get installed by default (see previous post). The BSD commands shouldn't be used since they're a backwards compatibility courtesy allowing 20th century applications written for SunOS 4 to operate without changes.

The Conflict: The BSD ps command is outdated and cool at a time

The BSD ps command doesn't truncate output after 80 lines like it's brother from the System V side of the family (/usr/bin/ps)

Getting the best from both Worlds

The good news is that the Oracle developers solved the problem and they documented it in the sources: They ship only one binary which implements BSD and System V at a time! The only trick is to know how to make the command act in one or the other way:

Suboptimal Solution

Install the ucb compatibility package and use a hard coded link to call /usr/ucb/ps.

Oracle uses a hard link to /usr/bin/ps and the /usr/bin/ps binary behaves like a BSD command if it finds any notion of the string "ucb" in it's path of the executable.

This option is not recommended since you will want to make your application ready for the 21th century and leave the BSD paths behind you.

Recommended Solution

Call the command with ps or /usr/bin/ps

  • omit the "-" character as first character in the first argument
  • provide a BSD compliant parameter list (without the "-")

The binary will sort it out and behave like the BSD flavor of the command.

The beauty with this solution is

  • No directory /usr/ucb is required in the search path
  • /usr/ucb in the search path will not do any harm (Solaris 10)
  • the scripts are using the correct BSD syntax
  • maintenance costs for the next generation will be lower

Food for Thought

You will want to have a look for the Solaris 10 and 11 pargs and pgrep commands. They will most likely solve your problem as well and you can leave all worries about BSD style commands in a System V OS behind you.

Stefan Schneider Fri, 01/21/2011 - 09:35

Solaris 11 Changes: Where is /usr/ucb/whoami ?

Solaris 11 Changes: Where is /usr/ucb/whoami ?

Answer: It's still available through /usr/ucb/whoami . The difference to Solaris 10 is, that this command became part of an optional package as described in a previous post. The BSD commands are still available through this package. They are deprecated and it is not a good idea to use this command since it may be removed in future.

Just in case: The whoami  command displays the effective user:

sschneid@krachkaste:/home/sschneid $ whoami
sschneid

Option for Solaris 11 (only...)

Stop using this command in /usr/ucb/whoami and use the GNU version of the command which is available in /usr/bin/whoami. The command is a different implementation. It doesn't matter since whoami has no options and it's doing the same by showing the effective user.

Anyone who is using a search path with /usr/bin before /usr/ucb/bin and a relative command invocation will not see any problems in Solaris 10 or 11.

What to do if the command is hard coded and it is supposed to work on Solaris 10 and Solaris 11 without any changes in the script?

Option for Solaris 10 and Solaris 11

The pity is that /usr/ucb/whoami is available by default only on Solaris 10. /usr/bin/whoami is available only on Solaris 11.

Solution: Switch from the whoami command to the 

/usr/xpg4/bin/id -un

command. It shows as well the effective user and it is available on both versions of Solaris by default in the same place

It's not an option to use /usr/bin/id on Solaris 10 since it is not the xpg4 compliant implementation and it doesn't accept the -un option. The Solaris 11 version of /usr/bin/id is able to master the trick since it is xpg4 compliant.

Alternative option (honorable mention): The commmand 

$ expr "`id`" : '.*(\(.*\)) gid='

will do the trick as well on Solaris 10 as well as 11. It extracts the effective user with expr. (contributed by Joachim Wolf).

 

 

 

Stefan Schneider Thu, 03/03/2011 - 16:40

Solaris 11 EOF (End of Feature) Notices posted

Solaris 11 EOF (End of Feature) Notices posted

Oracle posted a new page with Solaris 10 features which will not be part of Solaris 11.

Solaris developers shouldn't use these frameworks if they want their application to work smoothly with Solaris 11. The list consists of archaic commands, drivers, features and legacy hardware which shouldn't be used in any application developed in the last 10 years. It's unlikely that it'll have impact on existing applications.

It's however a good opportunity for a spring cleaning in scripts, locales and legacy asian localization libraries.

Stefan Schneider Fri, 06/17/2011 - 11:40