Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.sai.msu.su/~megera/solaris2.html
Дата изменения: Unknown Дата индексирования: Sat Dec 22 01:17:38 2007 Кодировка: Поисковые слова: cygnus |
Archive-name: Solaris2/FAQ Version: 1.62 Last-Modified: 1997/06/26 13:57:40 Maintained-by: Casper Dik <Casper.Dik@Holland.Sun.COM>
The following is a list of questions that are frequently asked about Solaris 2.x. You can help make it an even better-quality FAQ by writing a short contribution or update and sending it BY EMAIL ONLY to me. Thanks!
As you may have noted, I have switched employers and work for Sun as of April 1st 1995. Sun is in no way responsible for the contents of this FAQ.
The latest Solaris 2 FAQ, including an HTML version, and some other goodies can be obtained through ftp from <ftp://ftp.wins.uva.nl/pub/solaris>.
A new version of the FAQ is available with an index separate from all questions, it's <http://www.wins.uva.nl/pub/solaris/solaris2/>. So it's a lot quicker to download. Also, an experimental FAQ search service at <http://www.wins.uva.nl/cgi-bin/sfaq.cgi> is now available.
Please note that these addresses have changed because of a reorg. Just replace "fwi" in the old addresses with "wins". The old addresses will continue to work until March 1st, 1998.
The HTML <http://www.wins.uva.nl/pub/solaris/solaris2.html> version of the FAQ contains references to most FTP sites and files mentioned in the FAQ. The references to ftp sites are always to either HTML files or directories, never to binary files.
I've added an index of questions and marked changed(*) and added questions(+). The FAQ is being reorganized, time permitting. The index is generated automatically, so there may be errors there. Not all questions are in the section they belong in. Suggestions on how best to subdivide/order the FAQ are welcome.
Solaris(tm) is Sun's name for their UNIX-based user environment, including the UNIX(tm) operating system, window system (X11-based), and other stuff too.
Solaris 1.x is a retroactive (marketing?) name for SunOS4.1.x (x>=1), a version of UNIX that is BSD-like with some SVR4 features, along with OpenWindows 3.0. Solaris 2.x (which is what most everybody means by "Solaris") includes SunOS5.x, which is an SVR4-derived UNIX, along with OpenWindows 3.x, tooltalk, and other stuff. (See 1.5 for a chart with more info)
Solaris 2 is more compatible with the rest of the UNIX industry. Other major UNIX vendors including IBM, HP, SGI, SCO, and others are based on System V rather than on BSD (though some of them are on SVR3, not SVR4). All but one commercial PC-based UNIXes are System V based (and mostly SVR4); the only commercial exception is from a small but interesting firm called BSDI.
Solaris 2 is where Sun has been putting almost all its development for the last few years now. There will be no new development on SunOS4; already much of Sun's add-on software is only available for Solaris 2. Solaris 2 is the only supported MP OS on all but the old 4/6x0-1x0 w/ Ross 605 modules. All the UltraSPARC systems require Solaris 2.x.
Most Sun software is being released first for Solaris 2.x.
Solaris 2.3 and above feature a standard X11R5 release of The X Window System, a benefit for those who didn't like NeWS or the V2/V3 OpenWindows server. (It's still called OpenWindows, but it is the X11R5 server with Adobe DPS added in). It is as fast or faster than MIT R5 or XC R6 (depending on the platform) and supports all Sun graphics hardware.
Solaris 2 is more standards-compliant than Solaris 1/SunOS 4.
That depends - on you, your situation, your application mix, etc. Some year SunOS4.1.x will go the way of the 3/50 - it'll still be around, but Sun will no longer support it.
You don't have to upgrade immediately, but you should be planning your upgrade path by now.
Solaris 2 is an "operating environment" that includes the SunOS 5.x operating system and the OpenWindows 3.x window environment.
SunOS 5.x is based on USL's SVR4.0. SVR4.0, in turn, was developed jointly by AT&T and Sun while Sun was developing 4.1.0, which is why things like RFS, STREAMS, shared memory, etc., are in SunOS 4.1.x, and why things like vnodes, NFS and XView are in SVR4.0. (RFS, by the way, was dropped effective Solaris 2.3).
Solaris 2.0 only ran on desktop SPARCstations and a few other Sun machines.
Solaris 2.1 and 2.4 and later come in two flavors, SPARC and "x86".
Solaris 2.1 (and 2.2, ...) for SPARC run on all SPARCstations and clones, as well as all models of the Sun-4 family. The old FPU on the 4/110 and 4/2x0 is not supported, so floating point will be SLOW, but it does work.
Starting with 2.5 support for machines with kernel architecture "sun4" is dropped. I.e., the machines on which "uname -m" and "arch -k" return "sun4"; not the machines on which those commands return sun4c, sun4m, sun4u or sun4d. The unsupported machine include the sun4/110 (not to be confused with the SS4 @110MHz), sun4/2xx, sun4/3xx and sun4/4xx. These are all VME based deskside/server configurations.
All version of the SPARC PROMs should work under Solaris 2.x, but you can run into the following problems:
1) No part of the boot partition may be offset more than 1 GB
into the disk, unless you have a PROM with rev 2.6 or better.
Note that the number behind the point is not a fraction, it's
an integer. Hence 3.0 > 2.25 > 2.10 > 2.9 > 2.1 > 2.0 > 1.6.
2) If booting diskless, you need a link in the /tftpboot
directory, "tftpboot -> .". Admintool will make that
link automatically.
A Solaris port for the PowerPC has been completed, and has been released, effective Solaris 2.5.1.
Solaris 2.1, 2.4 and above for x86 have been released to end users. It runs on a wide range of high-end PC-architecture machines. "High-end" means: 16MB of RAM and an 80486 (or 33MHz or faster 80386DX). It will not run on your 4 MB 16MHz 386SX, so don't bother trying! Also, floating point hardware (80387-style) is absolutely required in 2.1. Starting with Solaris 2.4 for x86, a fp CO-processor is no-longer required, though still recommended. All three buses are supported: ISA, EISA, MCA. Some PCI devices are supported, though full bus nexus support for PCI is not there. See also 3.36.
To summarize all this, Jim Prescott gave this chart, which I've updated:
Solaris SunOS OpenWin Comments 1.0 4.1.1B 2.0 4.1.1_U1 2.0 sun3 EOL release (not named Solaris) 1.0.1 4.1.2 2.0 6[379]0-1[24]0 MP 1.1 4.1.3 3.0 SP Viking support 1.1C 4.1.3C 3.0 Classic/LX 1.1.1 4.1.3_U1 3.0_U1 4.1.3 + fixes + Classic/LX support 1.1.1 B 4.1.3_U1B 3.0_U1 1.1.1B + SS5/SS20 support 1.1.2 4.1.4 3_414 The "final" 4.x release (SS20 HS11) 2.0 5.0 3.0.1 sun4c only 2.1SPARC 5.1 3.1 Dec '92 2.1 x86 5.1 3.1 May '93 2.2SPARC 5.2 3.2 May '93 2.3SPARC 5.3 3.3 Nov '93 OpenWin 3.3 is X11R5 based: Display PostScript instead of NeWS, no SunView. It is still primarily OPEN LOOK. The Spring 1995 OpenWin will be Motif and COSE-based. Statically linked BCP support 2.3 edition II SPARC Special Solaris 2.3 distribution for Voyager and SparcStation 5 2.3 hardware 5/94 SPARC ?? 2.3 hardware 8/94 SPARC Supports S24 (24 bits color for SS5), POSIX 1003.2, Energy Start power management and SunFastEthernet + patches. 2.4 5.4 3.4 From this moment on, the SPARC and x86 releases are in sync. Q3 '94 Adds motif runtime and headers (not mwm). 2.4 hardware 11/94 First SMCC release of 2.4 2.4 hardware 3/95 Second SMCC release of 2.4 (includes support for booting from SSA) 2.5 5.5 3.5 UltraSPARC support, PCI support. NFS V3, NFS/TCP, ACLs, CDE, Sendmail V8 name service cache, dynamic PPP Posix threads, doors (new IPC mechanism) many "BSD" type functions back in libc, many "BSD" programs back in /usr/bin. mixed mode BCP support (e.g., apps only dynamically linked against libdl.so) 2.5 hardware 1/96 Creator3D support (Creator3D/FFB+ is not supported in 2.5 11/95, though the files are present but of unsupported, "mostly works", beta quality) 2.5.1 Ultra-2 support, Ultra-Enterprise server support. Large (32bit UID) support. 64bit KAIO (aioread64/aiowrite64), 3.75 GB of virtual memory. Pentium/Pentium Pro optimizations. (upto 25% for certain database apps) Ultra ZX support. Initial PowerPC desktop release.
There is quite a bit of support in SunOS 5.x for running 4.1.x binaries in an emulation mode called "Binary Compatibility" (BCP). This works by dynamically linking the 4.1.x binaries with a shared library that emulates the 4.1.x binary interface on top of 5.x, so there is some overhead.
In Solaris 2.2 and earlier, the programs needed to be fully dynamically linked.
In Solaris 2.3 and 2.4 fully statically linked programs are supported as well. However, they won't obey nsswitch.conf, but use the standard "use NIS if present, fall back to files" approach of SunOS 4.x. Those programs may therefor require a "passwd: compat" line and will only talk to NIS (or NIS+ in emulation mode) or read from files.
Starting Solaris 2.5, mixed mode (partly static/partly dynamic) executables are supported. Whether those programs will use /etc/nsswitch.conf depends on precisely how much was dynamically linked.
Be aware, though, that Sun may drop the binary compatibility package some year. Try to wean yourself and your users from depending on it, even if it means beating on your software vendors to offer "native" Solaris2 applications. But this will happen later, rather than sooner. Sun has not yet announced End-of-Life of this feature.
Yes. One of the most important goals of the UltraSPARC project was full binary compatibility with existing SPARC hardware and software.
If it isn't compatible, it's a bug!
There are some things you should keep in mind though: if you broke the rules but got away with it in the previous generations of SPARC machines, your luck may just have run out.
When developing the UltraSPARC it was discovered that some code generators didn't leave all "reserved" bits in opcodes zero. Such instructions are either illegal instructions which are trapped and fixed in the UltraSPARC kernel or they are legal V9 instructions which will modify the program behaviour. All such programs can be run through "cleanV8", a program designed to correct the bogus instructions.
No instructions of the second category have been found, so even without "cleanV8" you should be safe.
Another thing is the memory map on UltraSPARC, some applications use an mmap(MAP_FIXED) call with an address that is illegal to use on UltraSPARC. Such calls are inherently non-portable. Such applications are relatively rare. One such applications is MAE, which should work again after "setenv MAE_NOMMAP_ENGINE".
A third problem discovered is in device drivers that copy data from/to userland directly, bypassing copyin(9f)/copyout(9f). On V8 SPARCs, such device drivers would work most of the time, but fail mysteriously with panics when the system is stressed and page mappings disappear; but on the UltraSPARC the drivers will fail always. The kernel will panic and will tell you in which module the panic occurred.
As with SPARC, there is an emulation mode that should run the majority of well-behaved SVR3 and Xenix binaries. Most SVR3 stuff appears to work under Solaris 2.4.
Applications from any other vendor's standards-conforming 386/486 SVR4 should also run.
However, some vendors have made incompatible changes to their SVR4 release and programs linked on those versions may not work. Future versions of Solaris 2.x for Intel will address some/most of those incompatibilities. Unixware is one of the offenders.
There are too many of these changes to include in this FAQ, but here are some key ones:
a. locations are often different
Note that the last two commands are back in /usr/bin in Solaris 2.5.
b. some old commands don't exist or have replacements
This guide has undergone some changes from 2.0 -> 2.1 and beyond. Several manuals have ended up being combined into this single manual. This manual discusses administrative transition and developer transition issues.
The command "whatnow" (for Solaris 2.x) is included in the "Admigration Toolkit" package (see below). The Admigration toolkit can be obtained from:
opcom.sun.ca:/pub/migration_tools/SUNWmigr.tar.Z
Admigration toolkit HTML documentation/code
Sample output:
% whatnow hostname hostname 4.x command only hostname /usr/ucb/hostname part of SCP package hostname /usr/bin/uname -n alternate command
The whatnow command is limited in that it may point to one command which may only implement a subset of the old command (e.g., pstat points to sar, while pstat -s is identical to swap -s)
You can't do a SunInstall "upgrade" from 4.1.x to Solaris2. You can use the Admigration toolkit (q.v.) to help you move from SunOS 4.1.x (Solaris 1, actually) to Solaris 2.
If you're moving from Solaris 2.1 to 2.2, or 2.2 to 2.3, ..., then you can use "upgrade" to preserve your existing partitions and local changes (including pkgadd!!), though it runs very slowly (about 1.5-2x the time for a reinstall) and does require that you have enough free space in / and /usr - make these big when you first install! If you run out of space in one of your partitions, you can always remove some components. Those will not be upgraded and can be installed elsewhere after initial upgrade (e.g., you can remove OW, Xil, Dxlib, manual pages, etc)
There is no need to backout patches before upgrading. In 2.2, the system would back them out for you, in 2.3 it won't back out the patches but removes them without a trace.
The upgrade doesn't work as well as a full install. E.g., the upgrade from 2.x (x<3) to 2.3 will leave aliases for all your ptys in /devices/pseudo.
The consensus seems to be that yes, it is, for many applications and most users. Your mileage may vary.
Binary compatibility was much improved in 2.3. That will help transition somewhat. The performance of 2.3 is adequate, though some parts of the system are still slower than SunOS 4.1.x. Solaris 2.3 is much more stable on MP machines than 2.2. The Solaris 2.3 version of OpenWindows is much faster and much more stable than the versions shipped with SunOS 4.1.x.
Solaris 2.1 and earlier should really be avoided. Solaris 2.2 should be avoided too, but some people need to stick to it until some applications get ported (2.2 is the last release with NeWS).
Solaris 2.3 still has some problems on high-end MP systems with large numbers of interactive users. Solaris 2.4 and Solaris 2.5 have delivered increasingly more stable and more scalable multi processing.
There is a number of reasons why people dislike Solaris.
1) Change. In general people dislike change. Change requires re-learning and retraining. Old system administration practices no longer work. Commands have been replaced by other commands, some commands behave differently. And they ask why the change was necessary. SunOS 4.x worked for them.
2) Lack of migration support. Sun did not provide a lot of tools to ease migration. Many applications wouldn't run in the binary compatibility mode. The source compatibility mode was probably compatible with some OS, but it certainly wasn't SunOS. Lots of public domain and third party stuff that was needed wasn't immediately available for Solaris. NIS+, buggy, resource hungry and unstable replaced NIS in incompatible ways.
3) Missing functionality. When people migrate, at first they don't tend to notice new functionality. Instead, they stumble upon missing functionality such as screenblank, clear_colormap and the like (but see 3.21). And perhaps worst of all, no C compiler, not even a crippled one.
4) Slow and buggy. The initial Solaris releases didn't perform at all well and were extremely unstable. This has improved drastically, with Solaris 2.5 being stable and quick, even without many patches.
There are improvements in Solaris 2.x.
1) OpenWindows 3.3+ (in Solaris 2.3+). Includes X11R5 and Display PostScript.
2) Motif & CDE.
3) ANSI-C and POSIX development environment.
4) POSIX threads (2.5)
5) POSIX and X/OPEN command environment
6) Multi-threaded kernel and real threads.
7) True multi-processing.
8) Goodies: vold, admintool and Wabi.
9) Easy patch installation/administration through installpatch.
10) All software in easy to manage "packages".
11) Power management software.
12) Access control lists
13) NFS Version 3 and NFS over TCP (Solaris 2.5+).
14) A better automounter, autofs (not more /tmp_mnt and symlinks).
15) Jumpstart/autoinstall.
16) Better MP support.
17) Faster networking (ATM, fastethernet).
Sun has recently started several projects to aid in the transition. Their WWW starting point is:
Solaris Migration Initiative home page
The project is a combination of new and existing efforts and includes:
1) Porting PD software to Solaris 2.x
2) Solaris Migration Tool: (formerly known as Pipeline tool) a tool
to help you port your code.
3) Admigration Toolset. Tools to help you convert your SunOS 4
environment and to help you adjust to the new Solaris 2.x environment.
4) Appmap: a tool to simplify application administration in a mixed
SunOS 4.x/Solaris 2.x environment
5) Solaris Transition CD
6) Native Solaris NIS
7) LP tools (simplified LP administration through NIS)
Yes you can. The on disk format in Solaris 2.x isn't different from SunOS 4.1.x, as long as they've been formatted under SunOS 4.1.x. Disks formatted on older fses need to be converted with "fsck -c". If "dumpfs | head" (SunOS 4) or "fstyp -v | head" (Solaris 2) lists "format dynamic" as one of the first lines, the disk does not need to be converted.
UIDs > 60002 may give problems when moving disks from SunOS 4.x to Solaris 2.x. This is fixed in a Solaris 2.5.1 which has MAXUID defined as 2147483648. Note too that UID and GID 60001 and 60002 have been defined as nobody and noaccess on Solaris 2.x. If the target SunOS 4 system uses such IDs, you need to renumber them to avoid the collision
Moving disks the other way around may give problems: Solaris 2.5 supports on disks ACLs, and when MAXUID in 2.5.1 is increased beyond 65535, that will give added difficulties.
There's nothing you need to do to enable System V IPC, but on boot up "ipcs" always says:
IPC status from <running system> as of <date> Message Queue facility not in system. Shared Memory facility not in system. Semaphore facility not in system.
This just means that no one has yet used the Message Queue/Shared Memory or Semaphore facility yet. They'll be loaded on first use.
If you really want to have them loaded at boot time, add the following to /etc/system:
forceload: sys/msgsys forceload: sys/semsys forceload: sys/shmsys
"RTFM" is an old saying: Read The "Fine" Manual. Sun still sells printed manuals, but doesn't automatically distribute them. As with all real UNIX systems, you do get a full set of online "man" pages. A smaller, lighter, bookshelf-friendly :-) set of CDROMs called "The AnswerBook"(tm) contains all the printed documents in machine-readable (PostScript) form, with hypertext capabilities and a keyword search engine. 90% of your introductory questions are answered therein!
In Solaris 2.x the Answerbook set gets increasingly more divided into pieces. It is currently split over a number of CDs, currently (2.5.1):
Solaris 2.x CD: Solaris 2.x User AnswerBook Solaris Desktop 1.x Wabi 2.x Answerbook Solaris Common Desktop Environment AnswerBook 1.0.x Updates for Solaris Operating Environment 2.x Solaris 2.x on Sun Hardware Answerbook Server Supplement NSKit 1.2 answerbook Solaris 2.x System Administrator AnswerBook (Solaris 2.5.1 Supplemental System Admin AnswerBook) Solaris 2.x Reference Manual AnswerBook Solstice AutoClient & AdminSuite Solstice AutoClient 2.0 AnswerBook Solstice AdminSuite 2.2 AnswerBook Solstice Online Disksuite DiskSuite 4.0 AnswerBook Solstice Backup Solstice Backup 4.2 AnswerBook Solaris 2.x Software Developer Kit All programming manuals. Solaris 2.x Driver Developer Kit Device driver developer manuals.
Only the first two CDs ship with the desktop edition, the third is SPARC specific. The last two CDs are part of two separate products; the SDK and DDK. The rest is server only, though the reference manuals are available in nroff source form.
There is some overlap between CDs.
As distributed with 2.1 and 2.2, the Answerbook search engine runs only with the OpenWindows ("xnews") server, not with MIT X11. This changed in 2.3. If you are using the MIT server instead of what Sun provides, you'll have to use one of several "answerbook workaround" scripts that are in circulation. The AnswerBook distributed with 2.3 and later runs with the OW3.3 X11R5+DPS server, so it should display on any X11+DPS server, such as on DEC, IBM and SGI workstations.
You should buy (or print from within Answerbook) at least the reference manual and the System and Network Administration books, because if your system becomes disabled you won't be able to run the Answerbook to find out how to fix it...
Solaris man uses a manual page index file called "windex" in place of the old "whatis" file. You can build this index with
catman -w -M <man-page-directory>
But, in 2.1, this will result in numerous "line too long" messages and a bogus windex file in /usr/share/man, and a core dump in /usr/openwin/man. (In 2.2, catman works in /usr/share/man, but says "line too long" in /usr/openwin/man). To add injury to insult, "man" normally won't show you a man page if it can't find the windex entry, even though the man page exists.
There's a "makewhatis" script in /usr/openwin/man that works better than catman. But watch it - by default it searches files in /usr/man, not in openwin, and it only looks in some predefined man subdirectories. Try changing its "for ..." command to "for i in man*", then use it like this: cd /usr/share/man; /usr/openwin/man/makewhatis . cd /usr/openwin/man; /usr/openwin/man/makewhatis .
Still (!), the openwin windex file is somewhat hosed (try "man answerbook" :-( ). You can always delete the bogus lines manually... or, you can alias man to "man -F", forcing it to look for the bloody file like you asked.
But wait, there's more! To see the read(2) man page, you can't just type "man 2 read" anymore - it has to be "man -s 2 read". Or, alias man to this little script:
#!/bin/sh if [ $# -gt 1 -a "$1" -gt "0" ]; then /bin/man -F -s $* else /bin/man -F $* fi
Most commercial software that ran on 4.x either will run in BCP mode, or is available for Solaris 2.x, or is being ported now. Solaris 2.3 BCP mode finally supports statically-linked executables. Solaris 2.5 BCP mode supports mixed mode (part static, part dynamic) executables too.
You can obtain a list of official 3rd party porting commitments, maintained by Sun's "Solaris Demand Center" (whatever that is), by sending electronic mail to "sparc_products@thegift.sun.com" -- this is an automatic reply server. The list shows what third party applications are currently available for Solaris, and lists expected dates for many more.
Sun's web pages contain a searchable index of commercial programs and a link to an outside contractor who gathers data on free and public domain programs.
A list of freeware (some "public domain", but mostly copyright- but-freely-distributable) [as well as commercial software??] that has been ported to Solaris 2.x is posted monthly to the newsgroup comp.unix.solaris by ric@coronacorp.com (Richard Steinberger). Look for this:
Subject: Solaris SW list. Monthly Post.
Some software that invariably needs minor tweaking after an OS upgrade is included here specially. It's almost always necessary to recompile it after an OS upgrade, but if that still doesn't give a working version, make sure you check the archives for the latest version:
Top - a process monitor Alternate (beta) site for Top
Lsof - list open files
Identd - a daemon that implements RFC1413
scsiinfo - a program that lists SCSI devices.
sysinfo - a system hardware information program.
If you use gcc, it is important to remember that you must re-run fixincludes or re-install gcc after an OS upgrade or you'll be compiling with the old include files which will essentially give you the above programs as if compiled for a previous OS release.
www.sun.com Sun's own WWW site, contains pointers to Sunsites, patches and has lots of info, press releases etc, etc.
Solaris transition home page Sun's Solaris 2.x migration support
Solaris 2.x/SPARC binaries in pkgadd format
Solaris 2.x/x86 binaries in pkgadd format
SunSites - Sun sponsored sites. Lots of good stuff there.
Sun SITE AskERIC at Syracuse University - Syracuse
Sun SITE Australia at Australian National University - Canberra
Sun SITE Central Europe at RWTH-Aachen - Germany
Sun SITE Chile at Universidad de Chile - Santiago
Sun SITE Czech Republic at Charles University - Prague
Sun SITE Denmark at Aalborg University - Aalborg
Sun SITE Digital Library at University of California at Berkeley
Sun SITE France at Conservatoire National des Arts-et-Metiers - Paris
Sun SITE Hong Kong at University of Science and Tech. - Hong Kong
Sun SITE Hungary at Lajos Kossuth University, Debrecen - Hungary
Sun SITE Italy at University of Milan - Milan
Sun SITE Israel at Hebrew University of Jerusalem - Jerusalem
Sun SITE Japan at Science University - Tokyo
Sun SITE Korea at Seoul National University - Seoul
Sun SITE Mexico at Universidad Nacional Autonoma de Mexico - Mexico
Sun SITE Nordic at Kungliga Tekniska HЖgskolan - Stockholm
Sun SITE Northern Europe at Imperial College - London
Sun SITE People's Republic of China at Tsinghua University - Beijing
Sun SITE Poland at Warsaw University - Warsaw
Sun SITE Russia at Moscow State University - Moscow
Sun SITE Thailand at Assumption University - Bangkok
Sun SITE Spain at Consejo Superior de Investigaciones Cientificas, RedIRIS - Madrid
Sun SITE Singapore at National University of Singapore - Singapore
Sun SITE South Africa at University of the Witwatersrand - Johannesburg
Sun SITE USA at University of North Carolina - Chapel Hill
Solaris at UMBC - Solaris tips & tricks by Vijay Gill
ftp.x.org - the master X11 site
ftp.quintus.com:/pub/GNU - GNU binaries
ftp.uu.net - UuNet communication archives
(mirrors abovementioned GNU binaries in systems/gnu/solaris2.3)
OpCom. (opcom.sun.ca) - run by Sun Microsystems' OpCom group - lots of stuff. Here is some of the stuff that's online:
Joe Shamblin's x86 site at Duke
server.berkeley.edu:/pub/x86solaris - x86 stuff
1) Stokely Consulting's list of Sun FAQs
2) Obsolete, SunOS 4.x only: Sun Computer Administration Frequently Asked Questions
3) The "Solaris 2 Porting FAQ"
4) comp.windows.open-look - Anything related to OpenWindows or the OPEN LOOK Graphical User Interface.
5) The Sun-Managers mailing list FAQ maintained by John DiMarco <jdd@cdf.toronto.edu>.
6) See also the "Solaris SW list. Monthly Post" above and the "whatlist" file.
First, read all the USENET newsgroups with "sun" in their name :-)
1) The Florida SunFlash is a "closed" mailing list for Sun owners. It contains mostly press releases from Sun and third-party vendors. This list contains information on conferences such as the Solaris Developer's Conference as well. It is normally distributed regionally - to find out about a mail point in your area, or for other information send mail to info-sunflash@Sun.COM.
Subscription requests should be sent to sunflash-request@Sun.COM. Archives are on solar.nova.edu, ftp.uu.net, sunsite.unc.edu, src.doc.ic.ac.uk and ftp.adelaide.edu.au
2) The Sun Managers list is an unmoderated mailing list for emergency-only requests. Subscribe and listen for a while, and read the regularly-posted Policy statement BEFORE sending mail to it, and to get a feel for what kinds of traffic it carries. Write to sun-managers-request@eecs.nwu.edu.
3) The solaris x86 list. Subscribe/unsubscribe by sending a message with subscribe/unsubscribe in the BODY of the message to solaris-x86-request@mlist.eis.com. A digested version of the list is also available. To subscribe send an email message to solaris-x86-digest-request@mlist.eis.com. There's also an archive of this list.
4) The Sun Security Bulletin announcement mailing list. Low volume, announcement only list. Subscribe by mailing security-alert@sun.com with subject "SUBSCRIBE cws user@some.host"
O'Reilly & Associates specializes in UNIX books. Their "UNIX In A Nutshell" has been updated for SVR4 and Solaris 2.0. Get their catalog by calling 800-998-9938 (1-707-829-0515) 7AM to 5PM PST.
SunSoft Press carries books specific to Solaris 2. Look for the inset with your End User Media Kit that lists the most relevant ones.
Prentice-Hall has reprints of much of the AT&T documentation. I'm not sure how much of this you need - a lot of the same material is in the Answerbook (see above).
The complete and often updated list Solaris x86 hardware options can be obtained by sending an email message without subject/body to:
x86hcl@sun.com (ascii) x86hcl.ps@sun.com (postscript)
or
x86-hwconfig@Cypress.West.Sun.Com
There's also an online version of all the lists.
Wabi is Sun's MS-Windows-under-unix emulator. The Wabi faqs can be obtained by sending an empty message to:
wabi-questions@East.Sun.com
The list of current Wabi apps can be obtained by mailing:
wabi-apps@East.Sun.COM
Applications that execute a lot of x86 code, run fastest on Solaris 2.x_86, as no x86 emulation needs to be done. Applications that are more windows intensive will run better on machines with faster graphics hardware.
The currently shipping version of Wabi is Wabi 2.2, which ships with Solaris 2.5.1.
Wabi only supports MS Windows 3.1 applications. A future version of Wabi will support Windows 95 applications.
Wabi will not be made available for SunOS 4.1.x.
Reports indicate that Wabi support will be dropped by Sun and replaced by some other PC on Sun product.
The answer depends on the limit you run into.
Solaris 2.x supports filesystems upto 1TB, SunOS 4.x requires ODS 1.0 to support filesystems over 2GB. Solaris 2.x (x<=5) doesn't support files > 2GB yet, because of limitations in NFSv2 (32 bit offsets only).
Solaris 2.x supports a virtually unlimited number of open filedescriptors, SunOS 4.x only supports 256 (default) or 1024 (with Sun DBE 1.x).
Solaris 2.x supports an unlimited number of pseudo terminals.
Solaris 2.x supports more SCSI disks.
Solaris 2.x limits can be tuned in /etc/system, requiring just a reboot. SunOS 4.x limits need to be tweaked in the config file and a new kernel needs to be build and installed.
NOTE: when the above says "unlimited", it just means that there is no "hard" limit, but performance may degrade over certain values. E.g., setting the number of available fds very high, will cause programs that loop closing all fds to be very slow in starting.
A full install of 2.2 is supposed to be 164 MB, but that doesn't include swap. Here is a net exchange between Casper Dik and Gil Tene:
In article <1993Apr2.083549.19177@fwi.uva.nl>, Casper writes: |> >How much disc space does SOLARIS take up ? That is should we buy a |> >424MB disc or get a 1Gb disc to put it on :-) |> |> Solaris 2.x takes about as much diskspace as SunOS 4.x: |> |> Partition/Slice Solaris SunOS |> / 10MB 8MB |> /usr 78MB 90MB |> /var 10MB 10MB |> /usr/openwin 83MB 83MB
Gil replies: On my system, with a full Solaris installation (EVERYTHING selected) + gnu's binary stuff for solaris (off of the Catalyst CD) installed in /opt I see a similar situation to the above plus :
16852 /opt/SUNWabe 19 /opt/SUNWcg12 7968 /opt/SUNWdiag 721 /opt/SUNWgt 7740 /opt/SUNWits 14609 /opt/cygnus-sol2-1.0
(output from "du -k -s /opt/*")
- SUNWabe is the end user answerbook stuff. (vi, mail, Deskset tools etc, etc)
- SUNWcg12 is (obviously) cg12 support.
- SUNWdiag is obvious too.
- SUNWgt is support for gt boards.
- SUNWits is the xgl3.0 library (it has libPEX5.so.1 in there too).
- cygnus-sol2-1.0 is the gcc2.0+tools stuff. I have gcc2.3.3 on another partition and that takes about the same space as 2.0 does.
Another important note : The full Solaris 2.1 answerbook takes up 164MB on disk. I highly recommend installing it and not using it off the CDROM drive. It's much more usable (faster) this way. And it always stays around -- even when you have something else in the CDROm drive.
1) Do it by hand. You did document every single change and check it into RCS, didn't you?
2) Automate it, using the AMToolkit (Administration Migration Toolkit) from the OpCom FTP server (q.v.)!
A SVR4 mechanism for "standardizing" the installation of optional software. Most vendors are expected to use this format for distributing add-on software for Solaris 2.x.
Packages can be installed/deinstalled with pkgadd/pkgrm which are standard SVR4 items, or with swm (CRT) or swmtool (GUI-based) which are provided only in Solaris 2.
Note that the "pkg" system keeps lots of files in /var/sadm/install, and in particular the file "contents", which is hundreds of KB, and that there are two copies of it while pkgadd is running, so you needs lots of free space where /var is, typically the root. This file must be kept around if you want, for example, to use pkgrm to remove a package, or pkgchk to verify months later that all of a a package's files are still intact.
Summary of pkg* commands:
pkginfo <pkg> - test for presents of package. pkgadd -d /<cdrom>/Solaris_2.3 <pkg ...> - add missing packages pkgrm <pkg ...> - remove packages. pkgchk -q <pkg> - test for existence of package pkgchk <options> [pkg] - check installed packages for integrity.
SunOS 5.x is delivered with the "automounter" enabled. The automounter is designed for NFS sites, to simplify maintenance of the list of filesystems that need mounting. However it is a burden for standalone sites.
The automounter takes over /home and in effect becomes the NFS server for it, so it no longer behaves like a normal directory. This is normally a Good Thing as it simplifies administration if everybody's home directory is /home/<username>.
To kill it off for standalone or small networks, you can comment out the three lines in /etc/init.d/nfs.client that start "if" (from the if to the fi!!), and reboot (Solaris 2.2) or remove the file /etc/rc2.d/S*autofs (Solaris 2.3 and later, the number depends on the OS release). You can always relink that file with /etc/init.d/autofs if you change your mind.
To leave the automounter running, but make it leave /home alone, simply comment out the /home line in /etc/auto_master, and then run "automount".
To learn about it, read the O'Reilly book "Managing NFS and NIS", or ftp the white paper 'The Art of Automounting". from sunsite.unc.edu in the directory /pub/sun-info/white-papers.
Solaris 2.2 introduced a new scheme for automatically mounting removable media. It consists of a program "vold" (volume daemon) which sits around watching for insertions of floppies and CD's, handles ejects, talks to the file manager, and invokes a second program called "rmmount" (removable media mounter) to mount the disk.
Note that on most SPARCstations, you must run "volcheck" whenever you insert a floppy, as the floppy hardware doesn't tell SunOS that a floppy was inserted and polling the drive would wear it out pretty quickly.
Advantages of this scheme:
- no longer need root; users can mount and unmount at will. - can do neat tricks like automagically start "workman" or other Audio CD player when audio CD inserted. - extensible - developers can write their own actions.
Drawbacks:
- can no longer access /dev/rfd0 to get at floppy; must use longer name like /vol/dev/rdsk/floppy0 - similarly, CD's get mounted on /cdrom/VOLNAME/SLICE, e.g., /cdrom/solaris_2_2/s0 is slice 0 of the Solaris 2 CD (nice that it does mount all the partitions, though!).
To read or write a non-filesystem floppy (tar, cpio, etc), put in the diskette and run "volcheck" from the commandline or click "Check for Floppy" in the filemgr to get it noticed; then access /vol/dev/rfd0/unlabeled (e.g. "tar tvf /vol/dev/rfd0/unlabeled").
[Solaris 2.3 and later: /vol/dev/rdiskette0/unlabeled, or /vol/dev/aliases/floppy0.]
If you want the old behavior, remove the /etc/rc2.d/S*volmgt link, and reboot.
System V Release 4 includes a feature called "shadow passwords". The encrypted passwords are moved out into a shadow password file (called /etc/shadow in this release) that is NOT publicly readable. The passwd file has always been readable so that, for example, ls -l could figure out who owns what. But having the passwd encryptions readable is a security risk (they can't be decrypted but the bad guy can encrypt common words and names etc. and compare them with the encryptions).
The Shadow Password feature is mostly transparent, but if you do any passwd hacking you have to know about it! And DO make sure that /etc/shadow is not publicly readable!
>... when I try to rlogin as root ... >it gives me the message "Not on system console >Connection closed.". What have I left out?
Solaris 2 comes out of the box a heck of a lot more secure than Solaris 1. There is no '+' in the hosts.equiv. root logins are not allowed anywhere except the console. All accounts require passwords. In order to allow root logins over the net, you need to edit the /etc/default/login file and comment out or otherwise change the CONSOLE= line.
This file's CONSOLE entry can actually be used in a variety of ways:
1) CONSOLE=/dev/console (default) - direct root logins only on console
2) CONSOLE=/dev/ttya - direct root logins only on /dev/ttya
3) CONSOLE= - direct root logins disallowed everywhere
4) #CONSOLE (or delete the line) - root logins allowed everywhere
/etc/hosts.equiv is still supported, but there is no default.
In addition to removing the password from /etc/shadow, you need to take one of the following steps:
Edit /etc/default/login and comment out PASSREQ=YES or change it to PASSREQ=NO. This allows all users to remove their password!
The second way is to give a particular user no password with the following entry in /etc/shadow:
user::9092:9999:9999::::
If you need help, ftp the file "ftp.anon" from ftp://ftp.math.fsu.edu/pub/solaris/ftp.anon.
ftpd(1M) is nearly complete when it comes to setting up anonymous ftp. It only leaves out /etc/nsswitch.conf. [S2.3]
Additionally, you must make sure that the filesystem ~ftp resides on is not mounted with the nosuid option. This is because the nosuid option also disables the kernel honoring device files which are required in the chroot environment for ~ftp.
For security reasons, it is important that no files under ~ftp are owned by ftp. If they are, anonymous users can modify them.
In Solaris 2.5 and later, you will need to copy /usr/lib/libmp.so.1 as well as provide a /dev/ticlts (for wu-ftpd).
The easiest way would be using the GUI-based Admintool which has a Printer Manager that is supposed to be able to do all this and more.
Hmmm, the lp system is totally different than what you're used to. The System V Line Printer System is a lot more, well, flexible. A cynic might say "complicated". Here's a very quick guide -- see the man pages for each of these commands for the details.
Let's say your Solaris2 workstation is called "sol" and the 4.1.x server is called "bertha" and you want the printer name to be "printer" (imaginative, eh?).
sol# lpsystem -t bsd bertha # says bertha is a bsd system sol# lpadmin -p printer -s bertha -T unknown -I any # creates "printer" on "sol" # to be printed on "bertha" sol# accept printer # allow queuing sol# enable printer # allow printing sol# lpstat -t # check the status
Finally, if that's your only printer, make it the default:
sol# lpadmin -d printer
On some systems you may have to turn on the port monitor.
For better or for worse, you need to know about printer content types. See the man page for "lpadmin".
To get transparent mode, try this:
sol# lpadmin -I any -p printer
It's a known bug, and looks fixed in 2.5. There's also a number of lpsched patches out for Solaris: 101025-xx (2.2), 101317-xx (2.3), 101959-xx (2.4) and 101960-xx (2.4/x86). Make sure you install those.
Regardless of what other patches you apply, if you have a printer connected to your system running Solaris 2.4 or later, and if that printer uses NeWSprint software, you must apply patch 102113-xx. This patch is included on the Solaris CD in 2.4 and later releases. This patch is also required if you are running Solaris 2.3 with kernel jumbo patch 101318-55 or later. Note that this is a NeWSprint patch, not a Solaris patch, and hence it will never be integrated into any Solaris release.
"lpstat" on the clients on a regular basis, for some reason this clears the old files from the queue directories.
Sun's Solaris migration team has a new printing solution available: SunSoft Print Client
It has many new features, including printcap-like printer configurations that can be shared via NIS, and currently the ability to be configured so that lpsched does not have to be run anymore on client-only systems (although you still need to run lpsched in order for admintool to work.)
Alternatively, you can get a Solaris port of the BSD lpr system from the following FTP site (get lpr-sol2-*.tar.gz):
Device drivers are linked in dynamically. When you add new devices, just shutdown the system and do
boot -r # use drive spec if not default diskto rebuild the /devices and /dev directories.
If you're just adding a SCSI disk, you don't need to reboot. Run the following script (as root):
#!/bin/sh # # add-disk # # Runs the commands to make Solaris locate a new disk that # has been plugged in after the system was booted. # /usr/sbin/drvconfig /usr/sbin/devlinks /usr/sbin/disks # or /usr/sbin/tapes for tapes /usr/ucb/ucblinks # Compatibility links exit 0
Note that this only works if you already have at least one SCSI disk on the system. (This is because the above just makes symbolic links and things, it does not load up the SCSI driver kernel modules, etc.)
Devices must be turned on and present when you configure the system. After adding devices you must boot -r with all the devices turned on. See also 3.14
They're now fragmented into 12 million tiny little pieces. Look in the following files to get oriented:
/etc/inittab - defines which programs init starts and when. /sbin/rcS, /etc/rcS.d/* - booting stuff /sbin/rc2, /etc/rc2.d/*, /sbin/rc3, /etc/rc3.d/* - stuff for multi-user startup.Note that all files in /etc/rc*.d/* are hardlinked from /etc/init.d (with better names), so you should grep in there.
There are many "run levels" to the System V init; the run level 3 is normally used for "multi user with networking."
When executing the scripts in an /etc/rc?.d directory, the K* scripts are executed first, followed by the S* scripts. Scripts ending in .sh are executed in the same shell and can be used to set environment variables used further on in the same directory.
A basic startup script looks like this:
#!/bin/sh # Sample init.d script. # Install a copy under /etc/init.d/your-daemon # make links to /etc/rc2.d/Sxxyour-daemon (or rc3.d) # and /etc/rc[01].d/Kxxyour-daemon. # Scripts ending in .sh are executed with the sh "." command. # Scripts not ending in .sh are executed as "sh script" case "$1" in start) #... commands to start daemon .... ;; stop) #... commands to stop daemon .... ;; esac
No. You can never have rc.local back the way it was. But then, it never really was purely a "local" rc file. To have a real "local" rc file with just your changes in it, copy this file into /etc/init.d/rc.local, and ln it to /etc/rc3.d/S99rc.local. Put your startup stuff in the "start" section.
#!/sbin/sh # /etc/init.d/rc.local - to be linked into /etc/rc3.d as # S99rc.local -- a place to hang local startup stuff. # started after everything else when going multi-user. # Ian Darwin, Toronto, November, 1992 # As with all system changes, use at own risk! case "$1" in 'start') echo "Starting local services...\c" if [ -f /usr/sbin/mydaemon ]; then /usr/sbin/mydaemon fi echo "" ;; 'stop') echo "$0: Not stopping any services." ;; *) echo "Usage: $0 { start | stop }" ;; esac
SVR4 (hence SunOS 5.x) tries to make everybody happy. The traditional (slow) System V "shutdown" runs all the rc0.d/* shell scripts with "stop" as the argument; many of them run ps(!) to look for processes to kill. The UCB "shutdown" tells init to kill all non-single-user processes, which is about two orders of magnitude faster. In old versions of Solaris (2.2 and before) the UCB version did everything it should except actually halt or reboot.
If you run a database (like Oracle) or INN, you should install a special /etc/rc0.d/K* script and make sure you always shutdown the long way.
Getty should be easy and was reportedly done at a number of sites. The port monitor isn't everyones favorite. But given that you can do much more with the SVR4 init, why would you want to change back? It would be much more trouble than it's worth.
I was hoping you wouldn't ask. PMadm stands for Port Monitor Admin, and it's part of a ridiculously complicated bit of software over-engineering that is destined to make everybody an expert.
Best advice for workstations: don't touch it! It works out of the box. For servers, you'll have to read the manual. This should be in admintool in Solaris 2.3 and later. For now, here are some basic instructions from Davy Curry.
"Not guaranteed, but they worked for me."
To add a terminal to a Solaris system:
1. Do a "pmadm -l" to see what's running. The serial ports on the CPU board are probably already being monitored by "zsmon".
PMTAG PMTYPE SVCTAG FLGS ID <PMSPECIFIC> zsmon ttymon ttya u root \ /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat ttya \ login: - tvi925 y #
2. If the port you want is not being monitored, you need to create a new port monitor with the command
sacadm -a -p PMTAG -t ttymon -c /usr/lib/saf/ttymon -v VERSION
where PMTAG is the name of the port monitor, e.g. "zsmon" or "alm1mon", and VERSION is the output of "ttyadm -V".
3. If the port you want is already being monitored, and you want to change something, you need to delete the current instance of the port monitor. To do this, use the command
pmadm -r -p PMTAG -s SVCTAG
where PMTAG and SVCTAG are as given in the output from "pmadm -l". Note that if the "I" is present in the <PMSPECIFIC> field (as it is above), you need to get rid of it.
4. Now, to create a specific instance of ttymon for a port, issue the command:
pmadm -a -p PMTAG -s SVCTAG -i root -fu -v 1 -m \ "`ttyadm -m ldterm,ttcompat -p 'PROMPT' -S YORN -T TERMTYPE \ -d DEVICE -l TTYID -s /usr/bin/login`"
Note the assorted quotes; Bourne shell (sh) and Korn (ksh) users leave off the second backslash!
In the above:
PMTAG is the port monitor name you made with "sacadm", e.g. "zsmon".
SVCTAG is the service tag, which can be the name of the port, e.g., "ttya" or "tty21".
PROMPT is the prompt you want to print, e.g. "login: ".
YORN is "y" to turn software carrier on (you want this for directly connected terminals" and "n" to leave it off (you want this for modems).
TERMTYPE is the value you want in $TERM.
DEVICE is the name of the device, e.g. "/dev/term/a" or "/dev/term/21".
TTYID is the line you want from /etc/ttydefs that sets the baud rate and stuff. I suggest you use one of the "contty" ones for directly connected terminals.
5. To disable ("turn off") a terminal, run
pmadm -d -p PMTAG -s SVCTAG
To enable ("turn on") a terminal, run
pmadm -e -p PMTAG -s SVCTAG
Ports are enabled by default when you "create" them as above.
For more details, see: Celeste's Tutorial on Solaris 2.x Modems & Terminals
Under 4.1.x you invoke screenblank in /etc/rc.local, but there's no screenblank in Solaris 2.x. Sun recommends that you have everybody put `xset s on' in their .xinitrc, but this may be hard to police, and in any event it won't work when nobody is logged in. The simplest workaround is to copy /usr/bin/screenblank from 4.1.x and run it in binary compatibility mode. See ``What happened to /etc/rc and /etc/rc.local?'' for how to invoke it.
Another possibility is to use xdm or dtlogin. That way the X server will continue to run and the screen will be blanked by it.
The 4.1.x screenblank didn't work for us. We use Jef Poskanzer's freeware screenblank.
Because of a bug in Solaris 2.3, you'll may to specify -DHAVE_POLL=0 when compiling this version.
Solaris 2.4 comes with power management software for those systems with a soft-switchable power supply. That may suit your needs better than screenblank. In Solaris 2.5 the software can remove the sync signal from your monitor causing newer monitors to go in energy saving standby mode. The Solaris 2.4 version had problems reenabling the monitor or graphics card.
The power-management software is on the SMCC Updates CD [2.4 2.5]
The power-management software can be used to switch off just the screen, by putting the following in the power.conf file:
# Name Threshold(s) Logical Dependent(s) /dev/kbd 600 /dev/mouse 600 /dev/fb 0 0 /dev/kbd /dev/mouse
Make sure you mark the "autoshutdown" line with "noshutdown" if you want keep your machine running.
The /usr/openwin/bin/dtpower utility can change these settings for you. (Solaris 2.5)
You can FTP Jef's screenload, screendump, etc., if you need that
functionality, and for free you get a pixrect (clone) library.
Get one of these:
http://www.acme.com/software/raster-pixrect/
ee.lbl.gov:/raster-pixrect_30dec93.tar.Z
The 4.1.x versions of these programs will not run under Solaris 2.2 or later. The pixrect BCP library is no longer supported.
There is a replacement for etherfind, but it has changed name; in fact it's a whole new program. It IS better. To find it, though, you would have to realize that network snooping is not really Ethernet-specific. To end the suspense :-), here it is:
% man -k snoop snoop snoop (1m) - capture network packets and inspect them %
It works differently - it has an immediate mode, a capture-to-disk mode, and a playback-from-disk mode. Read the man page for details.
The capture file format is described in RFC 1761.
The Classic, LX and the single processor models of the SS20 are still supported under some version of SunOS 4.1.x. A lot of people wanted these machines but only if they ran SunOS 4.1.x. When the Classic/LX came out, clone manufacturers were able to provide SunOS 4.1.x with it, Sun came out with SunOS 4.1.3C some time later.
The Classic, LX, SS4, SS5 and SS20 are supported in the most recent Solaris 1.x release, SunOS 4.1.4 (Solaris 1.1.2). The Classic and LX are supported since 4.1.3C (release for LX & Classic only), the SS20/SS5 since release 4.1.3_U1 rev B (Solaris 1.1.1B). The SS4 and SS20 with HyperSPARC since 4.1.4. Note that none of these OS versions support SuperSPARC MP or any of the new graphics hardware (ZX, TZX, SX, S24). The TCX adapter is only supported as a cgthree, and SunOS 4.x doesn't use all its acceleration features.
The Voyager is not supported under SunOS 4.1.x, too many new device drivers have been added plus the suspend resume feature.
The XDbus machines SS1000/SC2000 are also not supported under SunOS 4.1.x. Support for their kernel architecture and XDBus is missing in 4.x.
The UltraSPARC based machines are not supported under SunOS 4.1.x. The new supervisor mode instructions, the new MMU, buses and devices are not supported under 4.1.x.
Sun acquired the Business Systems Division of Cray Research and now supports the Cray CS6400, a 64 SuperSPARC machine that runs a modified version of Solaris 2.x, known as "Cray Solaris".
The largest Solaris 2.x machine you can currently buy is the Ultra-Enterprise 10000, a machine that supports upto 64 UltraSPARC cpus, 64 I/O channels and 64 GB of memory at the same time.
Yes! Actually, messages like
find : cannot open /: No such file or directory.
are due to a bug in the tree walking function (nftw(3)).
Fixed in 2.4 and in the 2.3 kernel jumbo patch 101318 (-41 or later)
Try using UUCP. The Solaris 2.x sparc serial driver has trouble receiving data at or above 9600 bps. Symptoms include sluggish response, `NOTICE: zs0: silo overflow' console messages, sending spurious control-Gs to the serial port, and applications that cannot be killed even with `kill -9'. This problem surfaces in many applications, including Kermit and tip. UUCP seems immune, though, because its protocol throttles input sufficiently.
People have reported success in later releases of Solaris (2.3+).
Solaris 2.5 supports much higher baudrates and hardware flowcontrol in two directions. The latter is also available as a patch for 2.3 (102028) and 2.4 (102845, note that this patch conflicts with patch 102062-08, which should be installed first if at all). The zs device can be set to 38400bps in 2.4 and earlier and 76800 in 2.5 and later.
Root's shell is /sbin/sh, which is statically linked.
Don't just insert a 'c' before "sh" as previously, as that would
look for /sbin/csh, which doesn't exist. Don't just change it to
/bin/csh, since that's really /usr/bin/csh, which is dynamically
linked, because:
1) /usr may not be mounted initially, and then
you're in deep (the shared libraries are in /usr!), and
2) There is code in the startup scripts that assumes that
everything critical is in /etc/lib, not /usr/lib.
Approach with caution!
Whenever you change root's shell, make sure you do it using vipw or "passwd -e". Both programs will check for a valid (in the sense of /etc/shells) file.
Safer bet - have an alternate root account, like "rootcsh", with uid 0, and /bin/csh as its shell. Put it after root's entry in the passwd file. Only drawback: you now have to remember to change all of root's passwords at the same time.
Third bet - in root's .profile, check if /usr is mounted and, if so, exec /bin/ksh or whatever.
An even better bet - leave root's shell alone, and use the sudo command for doing things as root.
The other machine (an NFS server) is running 4.1.x and needs a patch from Sun to update its network lock daemon (lockd). If you don't install the patch on the server, file locking will not work on files mounted from "thathost". The lockd jumbo patch fixes a bunch of other lock manager problems, so it may be a Good Thing To Get; however, it may also cause the machine on which the patch is installed to have trouble talking to servers with no patch or older patches, so Be Warned.
The lockd patches are: 100988 (4.1.3), 101817 (4.1-4.1.2) 101784 (4.1.3_U1), 102264 (4.1.4) and 100518 (for Online: Disksuite).
Make sure you install the latest version of those patches.
Append this line to /etc/system and reboot:
set scsi_options & ~0x80
This turns off Tagged Command Queuing, a SCSI feature that is improperly implemented in many older drives.
NOTE: this will seriously degrade performance on disks that do properly support tagged command queuing. Setting the SCSI options per broken target is therefor the preferred solution.
In Solaris 2.4 and later you can set those options per SCSI bus. See isp(7) and esp(7).
For some disks, all you need to do is decrease the maximum number of queued commands:
forceload: drv/esp set sd:sd_max_throttle=10
In later Solaris releases you can specify scsi_options per (broken) target or per SCSI bus. See esp(7d), isp(7d), from which this example /kernel/drv/esp.conf file is derived:
name="esp" parent="/iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000" reg=0xf,0x800000,0x40 target1-scsi-options=0x58 scsi-options=0x178;
As with any hardware addition, first try the obvious (boot -r after installing and power-cycling everything).
The adaptec is no longer supported; man -s7 sd no longer even lists it! So I guess they go over the cliff. Either that, or take the drives out and put them on a PC, where ST506 MFM drives are still supported.
The MD21 should work, though some people report that SCSI doesn't work in 4/260 boxes (bug-id #1118752), but that's fixed in 2.3 and later.
Several things have been done differently during the development of Solaris 2.5. More internal users run versions of Solaris 2.5 no more than one or two weeks old. A number of large customers ran 2.5 beta releases on production systems, in exchange for virtually unlimited engineering support for those machine.
Coupled with some other development policies this has resulted in a release of very high quality that doesn't come with 36 patches on the first release CD, instead with just 5 for OpenWindows and a number for unbundled products.
Solaris 2.5 should run most everything without requiring patches.
Solaris 2.x releases are essentially frozen several months before their general release date. During the early access/beta test period bugs are found both in the beta and in the previous release. That's why the moment a new release comes out a number of patches is ready. Some of those are on the Solaris 2.x CD. Others were released almost at the same time as 2.x, or even before 2.x becomes generally available.
Some bugs are found in the previous release that can't be fixed in the time for the next release. And bugs get added to new code.
The mandatory patches weren't mandatory, so they've been relabeled. They're now called ``recommended'' patches.
The recommended patches are those patches Sun recommends for trouble free system operation. With those patches installed, your chances on trouble free operation are higher. That doesn't mean you will run into trouble without them.
These recommended patches can be anonymously ftp'ed from official Sun ftp sites.
"If it ain't broke, don't fix it." In general you should only apply patches for security related problems. For each and every other patch you must consider two things: have I encountered this bug or am I very likely to encounter this bug in the near future. If neither is true, it is often best not to apply the patch. If you have a working system, why patch it? Patches do occasionally introduce new bugs and not applying patches is the best way to avoid those new bugs.
You should, however, install all patches that come with the Solaris 2.x CDs. Those patches have been tested together and supplement the base OS to the supported level. Some systems won't even boot if those patches aren't installed first.
Sites not sponsored by Sun, accessible for all:
ugle.unit.no:/pub/unix/sun-fixes
ftp.luth.se:/pub/unix/sun/all_patches
SunSites (carry recommended and security patches):
sunsite.unc.edu:/pub/sun-info/sun-patches
sunsite.sut.ac.jp:/pub/sun-info/sun-us/sun-patches
sunsite.doc.ic.ac.uk:/sun/sunsite-sun-info/sun-patches
Sunsolve:
sunsolve1.sun.com:/pub/patches
http://sunsolve1.sun.com/
These are Sun's own sites, they has the recommended patches up for anonymous ftp, packaged as one huge 2.x_Recommended.tar.Z file and as individual patches.
Starting with SunSolve CD 2.1.2 ALL Sun patches are shipped on the SunSolve CD.
Contract customers can get all patches by ftp from Sunsolve or via e-mail and query one of the online sunsolve-databases on the Internet.
The Solaris x86 driver updates can be obtained by HTTP from:
http://access1.sun.com/drivers/driverMain.html
http://sunsite.unc.edu/pub/sun-info/solaris-x86/sunsoft-drivers
The Solaris x86 driver updates can be obtained by anonymous ftp from:
ftp.uu.net:/vendor/sun/solaris/
sunsite.unc.edu:/pub/sun-info/solaris-x86/sunsoft-drivers
All the files that are replaced by a patch are stored under /var/sadm/patch/<patch-id>/save so the patch can be safely backed out. Newer patches will save the old files under /var/sadm/pkg/<pkg>/save/<patch-id>/undo.Z, for each package patches.
You can remove the <patchdir>/save directory provided you also remove the <patchdir>/.oldfilessaved file. Newer patches will not install a .oldfilessaved file.
Alternatively, you can install a patch w/o saving the old files by using the "-d" flag to installpatch.
No, unless otherwise stated in the patch README. If the previous patch installation saved the old files, you may want to reclaim that space.
Patches can be backed out with:
/var/sadm/patch/<patch-id>/backoutpatch <patch-id>
Backoutpatch can take an awful long time, especially when the patch contained a lot of files. This is fixed in later versions of backoutpatch.
Edit /etc/system and add the following line:
* System V pseudo terminals set pt_cnt = <num>
Halt the system and boot -r.
You can essentially have as many as you like, but you'll probably run into some other limit somewhere. More than 3000 are supported.
In the unlikely event that you run out of BSD-style ptys, you can increase them as well. The maximum there is probably 256 as all programs using BSD ptys need to hardcode all the possible device names and 256 was the maximum previously found in SunOS 4. BSD ttys are awkward to use and all programs I found support SYSV ptys without trouble.
* You don't need this. Increasing this value too much usually * just wastes memory. set npty = <num>
Halt the system and boot -r.
Add the following to /etc/system:
set rstchown = 0
This will defeat the quota system and may compromise the security of your system.
Prior to Solaris 2.4, the OS didn't do the bookkeeping necessary to obtain these values. In Solaris 2.4 the code was added to kernel and /usr/ucb/ps can now show these values.
Under Solaris 2.3 and earlier your only recourse is using the public domain utility top (See 2.3).
After installation, run the command /usr/sbin/rtc -z $TZ, where $TZ is your timezone. The default root crontab runs /usr/sbin/rtc -c once every day.
That way your clock will give the proper time whether you boot Solaris or DOS/Windows.
In 2.3 in earlier this requires poking the kernel. In Solaris 2.4+, this can be accomplished by adding the following lines to /etc/system:
* set hard limit on file descriptors set rlim_fd_max = 4096 * set soft limit on file descriptors set rlim_fd_cur = 1024
Raising the soft limit past 256 may confuse certain applications, especially BCP applications. Raising the limit past 1024 may confuse applications that use select().
Programs using stdio or even library calls that use stdio may break when they have more than 256 files open as that is the stdio limit. Programs using many filedescriptors should try and reserve a number of low numbered file descriptors for use by stdio.
Yes, that is possible. All partitions other than the system partitions (typically /, /usr, /var and /opt) can be shared by the two OSes. All partitions, including the system partitions, can be mounted and accessed by either OS.
The easiest way to set this up is to do separate suninstalls on two different disks. Then just choose the appropriate disk at boot time with the PROM's "boot" command.
Setting up both OSes on one disk is a little harder, but not much. You need to partition the disk to allow for both OSes. Almost any partition layout is possible, but one common setup might be:
a: / for Solaris 2 b: swap (shared) c: The usual (whole disk) d: / for Solaris 1 e: /usr for Solaris 1 g: /usr for Solaris 2
Again, it's most reliable to use suninstall to do the installations. If for some reason you choose not to use suninstall, make sure you run installboot for both bootable partitions.
With this setup, you choose between the two OSes in the PROM's "boot" command as follows:
To boot Solaris 2: boot To boot Solaris 1: boot disk:d
NOTE: In boot PROM versions <= 2.5, the "disk:d" syntax is not supported, and the PROM cannot boot from root partitions that begin or end beyond 1GB.
As root, go to directory /etc/lp/interfaces. Edit the file that corresponds to the printer name. Change the line that reads 'nobanner="no"' to 'nobanner="yes"'.
The supported way to change your hostname is:
# /usr/sbin/sys-unconfig
The system will halt and on subsequent boot will ask for its name and other networking parameters again.
You may wish to save a copy of /etc/nsswitch.conf beforehand as that file is overwritten by the configuration process.
Note that sys-unconfig is not supported on diskless or dataless workstations. On those, you'll need to edit files by hand. See the sys-unconfig(1M) for a list of the files that need changing.
Yes. In Solaris x86 2.1, these worked 'out of the box'.
In Solaris x86 2.4, they are no longer configured during the installation, but they still work if configured afterwards by hand. Sun apparently disabled them in this way because they are no longer officially supported, but fortunately, they did not actually remove them from the kernel, so you can configure them back in yourself as follows.
First verify the device's major number with grep:
# grep -i chanmux /etc/name_to_major chanmux <num>
Add the /dev entries, substituting whatever you found with grep for <number>:
mknod /dev/vt01 c <number> 1 mknod /dev/vt02 c <number> 2 etc...
add the following to /etc/inittab (after the co entry):
v1:234:respawn:/usr/lib/saf/ttymon -g -h -p "VT1 Login: " -T AT386 -d /dev/vt01 -l console v2:234:respawn:/usr/lib/saf/ttymon -g -h -p "VT2 Login: " -T AT386 -d /dev/vt02 -l console etc...
To get init to reread inittab, either reboot, or issue the command:
/usr/sbin/init q
Now, Alt-PrintScreen F1 switches to VT1, Alt-PrintScreen F2 switches to VT2, etc, Alt-PrintScreen P switches to previous screen in cyclic sequence, Alt-PrintScreen N switches to next screen in cyclic sequence. Alt-PrintScreen H switches to console screen (and not Alt-PrintScreen F8 as on Interactive Unix)
By default, all daemons inherit the umask 0 from init. This is most problematic for a service like ftp, which in a standard configuration leaves all uploaded files with mode 666.
To get daemons to use another umask execute the following commands in /bin/sh and reboot:
umask 022 # make sure umask.sh gets created with the proper mode echo "umask 022" > /etc/init.d/umask.sh for d in /etc/rc?.d do ln /etc/init.d/umask.sh $d/S00umask.sh done
Note: the trailing ".sh" of the scriptname is important, if you don't specify it, the script will will be executed in a sub-shell, not in the main shell that executes all other scripts.
Change the "-T sun" in the following line in /etc/inittab to "-T <termtype>":
co:234:respawn:/usr/lib/saf/ttymon -g -h \ -p "`uname -n` console login: " -T sun \ -d /dev/console -l console -m ldterm,ttcompat
(Line broken for readability)
If no terminal type is specified in the network (telnet/rlogin) protocol, the standard startup scripts (/etc/profile, /etc/.login) will set the terminal type to the default console type (sun for SPARCs, AT386 for x86).
To get the SunOS 4.x. behaviour back, all you need to do is set the type to "network", if not previously set.
The following parameters can be used to change the number of semaphores, the amount of shared memory and the number of IPC messages. They're set in /etc/system, as usual.
set semsys:seminfo_semusz = <value> set semsys:seminfo_semopm = <value> set semsys:seminfo_semume = <value> set semsys:seminfo_semaem = <value> set semsys:seminfo_semmap = <value> set semsys:seminfo_semvmx = <value> set semsys:seminfo_semmsl = <value> set semsys:seminfo_semmni = <value> set semsys:seminfo_semmns = <value> set semsys:seminfo_semmnu = <value> set shmsys:shminfo_shmmin = <value> set shmsys:shminfo_shmseg = <value> set shmsys:shminfo_shmmax = <value> set shmsys:shminfo_shmmni = <value> set msgsys:msginfo_msgseg = <value> set msgsys:msginfo_msgssz = <value> set msgsys:msginfo_msgtql = <value> set msgsys:msginfo_msgmap = <value> set msgsys:msginfo_msgmax = <value> set msgsys:msginfo_msgmnb = <value> set msgsys:msginfo_msgmni = <value>
Whether dtlogin is started or not is settable with /usr/dt/bin/dtconfig As dtlogin itself explain when invoked without arguments:
/usr/dt/bin/dtconfig -d (disable auto-start) /usr/dt/bin/dtconfig -e (enable auto-start) /usr/dt/bin/dtconfig -kill (kill dtlogin) /usr/dt/bin/dtconfig -reset (reset dtlogin) /usr/dt/bin/dtconfig -p (printer action update) /usr/dt/bin/dtconfig -inetd (inetd.conf /usr/dt daemons) /usr/dt/bin/dtconfig -inetd.ow (inetd.conf /usr/openwin daemons)
Under SunOS 4.1 it was next to impossible to run DNS name resolution without either a kludge fix or the NIS (V2 I guess). Under Solaris 2.1 it is incredibly simple, but you must ignore what the manual (SunOS 5.1 Administering NIS+ and DNS) says (the manual is fixed in Solaris 2.2). All that is required to make a non-NIS host use the DNS for name resolution is to change the host: line in the /etc/nsswitch.conf file to the following:
hosts: files dns
(i.e., when looking for hosts, look in /etc/hosts first, if not found there, try DNS, if still not found then give up) and set up a correct version of /etc/resolv.conf to tell the resolver routines (like gethostbyname) how to contact the DNS nameserver. You must have the names of machines which are somehow contacted during boot in the files in /etc and files must appear first in the hosts: line, otherwise the machine will hang during boot (at least ours did). Make sure that /etc/netconfig is as it was shipped. (In Solaris 2.3 and earlier, it will use "switch.so,tcpip.so" for ip, in Solaris 2.4 it just uses "-")
An idea whose time has come (it came to Ultrix a few years ago). You can control which of the "resolver" services are read from NIS (formerly YP), which from NIS+, which from the files in /etc, and which are from DNS (but only "hosts" can come from DNS).
A common example would be:
hosts: nis files
which means ask NIS for host info and, if it's not found, try the local machine's host table as a fallback.
Advice: if you're not using NIS or DNS, SunInstall probably put the right version in. If you are, ensure that hosts and passwd come from the network. However, many of the other services seldom if ever change. When was that last time you added a line in /etc/protocols? If your workstation has a local disk, it may be better to have programs on your machine look up these services locally, so use "files".
Terminology: Sun worried over the term "resolver", which technically means any "get info" routine (getpwent(3), gethostbyname(3), etc), but is also specifically attached to the DNS resolver. Therefore they used the term "source" to mean the things after the colon (files/DNS/NIS/NIS+) and "database" to mean the thing before the colon (passwd/group/hosts/services/netgroup etc).
A complete discussion can be found in nsswitch.conf(4).
Type "man nsswitch.conf" for more info. There is too much detail to summarize here. Briefly, [NOTFOUND=return] means that the name service whose entry it follows should be considered authoritative (so that if it's up and it says such a name doesn't exist, believe it and return instead of continuing to hunt for an answer).
Yes, you need the Solaris network transition kit available from Sun. A number of those have been made available over time:
1) NSkit 1.0. A version of SunOS 4.x NIS executables made to
work on Solaris 2.x. Fully included in patch 101363-08.
2) NSkit 1.1. Native, available from OPcom, but never left beta
stage. Didn't do DNS lookups well (the entire server hangs until
a DNS request is answered).
3) NSkit 1.2. Native. Freely available from the Solaris 2.x
migration initiative home page. Supports multi-homed hosts,
async DNS lookups and shadow password maps. Also shipped with
the 2.5 server kit.
NSkit 1.2 is available for SPARC and x86.
Sort of, with the NIS+ server implementation for Solaris 1.x that comes on the Solaris 2.x CD. This is a server side only implementation and requires NIS+ to run in YP compatibility mode.
NIS+ clients do not hard bind to nis+ servers in the same way that NIS clients bind to NIS servers. The clients have a list of NIS+ servers within the cold-start file. When they need to do a lookup they do a type of broadcast called a "manycast" and talk to the first server that responds. This way they can be sure to use the lightest loaded server for the request.
Yes, that is a known problem. The only operations allowed from a NIS client side on the netgroup table are the ypmatches, but not ypcat (i.e. no support for yp_first(), yp_next() or yp_all() calls). The netgroup table is kind of unique in this. The reason for this is that the netgroup table format changed quite significantly in NIS+ and the NIS+ server would take a big performance hit in converting the netgroups table to YP (key-value) format.
The good news is that it's not memory OR swap space you're being shown by 'ps'. Instead it's showing you the process ADDRESS space which includes 256 MB of address space reserved for the NIS+ transaction log. Given the cost of moving things around in memory and the fact that we have 4 GB of address space to play with it, this is a good idea. You've just got to stop thinking small. THINK BIG. It's only 1/16th of the total process address space being used. And if you ever exceed the 256 MB size of the transaction log you're doing something VERY wrong.
Start rpc.nisd with the -B switch. This can be done editing the server's /etc/init.d/rpc file and change 'EMULYP="-Y"' to
EMULYP="-Y -B"
Solaris 2.x provides a feature in ifconfig that allows having more than one IP address per interfaces. Undocumented but existing prior to 2.5, documented in 2.5 and later.
Syntax:
ifconfig IF:N ip-address up
where "IF" is an interface (e.g., le0) and N is a number between 1 and <MAX>. Removing the pseudo interface and associated address is done with "ifconfig IF:N 0.0.0.0 down".
As with physical interfaces, all you need to do is make the appropriate /etc/hostname.IF:X file.
The maximum number of virtual interfaces, <MAX> above, is 255 in Solaris releases prior to 2.6. Solaris 2.6 and Solaris 2.5.1 with the Solaris Internet Server Supplement (SISS) allow you to set this value with ndd, upto a hard maximum of 8192.
/usr/sbin/ndd -set /dev/ip ip_addrs_per_if 4000
There's no limit inspired by the code; so if you bring out adb you can increase the maximum even further.
No, you can share those filesystems with SunOS 4.x and other machines just fine. The NFS protocol rarely transmits the size of the underlying filesystems. The only programs on SunOS 4 clients that may give trouble are du and df, but normal filesystem use is just fine.
There are several agents available, including one from Sun.
Solstice Enterprise Agents, hit the "software download" icon
Solaris 2.6 ships with an SNMP agent.
Sun's hme fast ethernet adaptors support full-duplex ethernet; it isn't enabled by default because when first shipped the full-duplex standard hadn't materialized yet.
There are several ways of changing the default settings and force full-duplex mode; you may need to alter your switch settings as well.
Setting through /etc/system
set hme:hme_adv_autoneg_cap=0 set hme:hme_adv_100hdx_cap=0 set hme:hme_adv_100fdx_cap=1
Setting with ndd
ndd -set /dev/hme adv_autoneg_cap 0 ndd -set /dev/hme adv_100hdx_cap 0 ndd -set /dev/hme adv_100fdx_cap 1
In case you have multiple instances, you need to select the specific hme instance first, e.g., use the following to select hme1:
ndd -set /dev/hme instance 1
Try truss(1). truss -f -o file cmd args ... will put a trace of all system calls in "file". This often helps as a first step in diagnosing many failure modes, such as insufficient permissions on certain files etc..
A bug introduced in the 2.5 locale libraries make strcoll() return bogus values when confronted with empty strings. This bogus empty string comparison makes that strcoll no longer defines a strict order on strings, that confuses the hell out of qsort which promptly crashes.
Workaround: set LC_COLLATE to "C"
(Note that xview applications will usually reset LC_COLLATE to LC_ALL, so in cmdtool/shelltool windows, LC_COLLATE needs to be set again.)
This is a bug in OpenWindows. Using xhost + or starting "openwin -noauth" works around this problem. This is only recommended for stand-alone machines with no dial-in users. [ S 2.3 ]
Displaying answerbook requires support for the DPS extension in the X server. The DPS extension is supported by most common Unix workstations, but not by most PC/X offerings and is often an extra cost item for X terminals.
A number of people have reported success using ghostview as a replacement for the answerbook viewer, but this has the unfortunate side effect of not supporting the hypertext links in the documents.
A better solution is to install a client side Display PostScript extension.
Adobe has defined such a client side extension and call it DPS-NX. Bluestone sells a version.
This is a symptom of a bug in filemgr in Solaris 2.3. Either apply patch #101514 or run the following commands at system start-up:
mkdir /tmp/.removable chmod a+rwxt /tmp/.removable
That's a bug in libdps (fixed in 2.4). Sun compiles and links its software with its own compilers. The isinf() function is shipped with the SunPRO compilers, but not defined in any Solaris 2.3 library.
A workaround exists, and consists of adding the following to your program:
#include <ieeefp.h> int isinf(double x) { return !finite(x) && x==x; }
The PPP shipped with Solaris 2.3 doesn't interoperate with other PPP implementations. Patch #101425 fixes this.
You need patch #101448.
You're using gcc without properly installing the gcc fixed include files. Or you ran fixincludes after installing gcc w/o moving the gcc supplied varargs.h and stdarg.h files out of the way and moving them back again later. This often happens when people install gcc from a binary distribution. If there's a tmp directory in gcc's include directory, fixincludes didn't complete. You should have run "just-fixinc" instead.
Another possible cause is that you're using ``gcc -I/usr/include.''
When the system boots, the first invocation of ps will try to recreate /tmp/ps_data. To this end ps scans the /dev tree. Under some circumstances, a loop exists in /dev and ps will run forever. Most of the time this loop is caused by the symbolic link /dev/bd.off. While this link usually points to /dev/term/b, it sometimes get truncated and points to /dev instead.
Fix: rm -f /dev/bd.off; ln -s /dev/term/b /dev/bd.off
Use truss(1) to determine whether this is real the cause of your problem.
Make sure you have /usr/ccs/bin/m4 installed. It's in package SUNWbtool (m4 is included in SUNWcsu in 2.4 and later).
Other causes are bugs in Solaris 2.3 and various revisions of patches. E.g., syslogd is broken in all 101318 patches between level -42 and -50. It works again in 101318-54.
For 2.4, you may need patch 102534-xx and/or 102697-xx.
Some vendors still ship a version of RPC/NFS that allows at most 8 groups in the client credentials. Root on Solaris is by default in 10 groups. As a result, the Solaris 2.x mount command will send AUTH_UNIX credentials that are too big to cope with for the remote mount daemon resulting in the ``Invalid client credential'' error.
Workaround: put root and all your users in 8 or less groups. NOTE: You must logout and login again for changes in the number of groups to take effect. (or exit root's shell and re-su)
Starting with Solaris 2.4, a kernel workaround to limit NFS readdir requests to 1024 bytes was disabled by default. This breaks interoperability with buggy old NFS implementations (such as SunOS 3.2, Ultrix and NeXT)
There are two workarounds. The first one works and is:
mount all filesystems from such servers with rsize=1024.
The second one, which requires a patch for bugid #1193696 (101945-29 or later for SPARC, 101946-24 or later for x86)
Edit /etc/system and add:
set nfs:nfs_shrinkreaddir = 1
and reboot.
Patch 101945-17 introduced an bug in the NFS client code that makes that programs using NFS locking will sometimes go in an interruptible read. (I.e., you can kill the program that hangs)
Truss will show the program sleeping in read(2) while top will show it eating CPU. The ksh seems to have this quite a lot. There's also a lot of network traffic.
Fix: install a patch for bug-id #1198278 on your NFS clients. (101945-29 or later for SPARC, 101946-24 or later for x86)
Workaround: mount NFS filesystems with "noac", but this costs performance.
Boot with -as. The kernel will ask you all sorts of questions, including the name of the system file. Use the previous /etc/system file or specify /dev/null.
Boot with -a and it will ask you to rebuild the path_to_inst file. It is possible that you still can't boot after that: if you've added/removed controllers/disks, the numbering of the controllers may have changed. You may need to find the new name of /usr and then edit /etc/vfstab to change all the disk names.
The tcp/ip abort interval in Solaris 2.x is too short, the default value is 2 minutes. The result is that when an ACK isn't received in 2 minutes, the connection is closed. This is most often seen by sendmail, which will log
sendmail: SYSERR: collect: read timeout on connection from ...
You can fix this by running following command which increases the timeout to 8 minutes (unit is millisec), which is the Solaris 2.4+ (and patched 2.3) default.
/usr/sbin/ndd -set /dev/tcp tcp_ip_abort_interval 480000
This command should be placed in a script rc2.d script. (See 3.16)
(See 5.19 for another possible cause)
With the introduction of sendmail V8 for Solaris 2.x in patch form and in Solaris 2.5, a bug in sendmail.cf has suddenly started to play up. The end-of-line character is not defined for the ethernet mailer, causing sendmail to send bare newlines in violation of the SMTP protocol which requires CR-NL.To fix, find the following line in sendmail.cf:
Mether, P=[TCP], F=msDFMuCX, S=11, R=21, A=TCP $h
and change it to:
Mether, P=[TCP], F=msDFMuCX, S=11, R=21, A=TCP $h, E=\r\n
To be on the safe side, check all lines starting with "M" that contain P=[TCP] or P=[IPC]. They all should use "E=\r\n".
This bug is also fixed in the latest Solaris 2.x sendmail patches.
Solaris 2.x sets the don't fragment bit on all packets it send as part of MTU path discovery. The Solaris 2.x implementation is RFC compliant, but the MTU path discovery protocol will fail when there are broken routers in the path. Typical symptom is not being able to connect from a Solaris 2.x hosts but having no trouble from other hosts or being able to start a TCP/IP connection but not move any significant amount of data.
/usr/sbin/ndd -set /dev/ip ip_path_mtu_discovery 0
(See also 5.17)
Solaris 2.x will still send large packets over such links but without the don't fragment bit set. On a number of occasions, I've come across links that don't properly handle such packets. They're not fragmented, they're silently dropped instead.
So if the fix in 5.19 doesn't work you can resort to the following drastic measure which negatively impacts network performance:
/usr/sbin/ndd -set /dev/tcp tcp_mss_max 536
536 is the standard packet size that is guaranteed to work by virtue of the fact that most system will communicate outside the local net with packets that big. If the connection then starts to work, it's time to find the largest value that works.
It's also worth mentioning that the "ip_path_mtu_discovery" needs to be applied at both sides of a connection to fully work, applied at one side it will only affect outgoing large packets. (I.e., downloads from the site will succeed but uploads from a other Solaris 2.x machine w/o the workaround applied may still fail). The "tcp_mss_max" workaround need only be applied at one side.
If you need the "tcp_mss_max" workaround for some sites, there is a problem on the link between you and those sites. Get it fixed. Traceroute will tell you where the problem lies. Try traceroute host size, for varying sizes. If traceroute without a size parameter works, but traceroute with a size parameter of 1460 fails at some hop, the connection between that hop and the next is broken.
Solaris 2.x uses the "Content-Length:" header to tell the MUAs where messages should be split. Unfortunately, no-one else understands this convention. Instead, the old convention, ``split on "From " lines'' is used most of the time. Those mail readers expect extra lines with "From" to be escaped with ">".
Workaround: add "E" to the mailerflags of the local mailer. Edit /etc/mail/sendmail.cf on your Solaris machines, add E to F= on the line that reads:
Mlocal, P=/bin/mail, F=flsSDFMmnP, S=10, R=20, A=mail -d $u
so that it becomes:
Mlocal, P=/bin/mail, F=EflsSDFMmnP, S=10, R=20, A=mail -d $u
Mail/mailx use UUCP from line to determine sender, it should use the From: header only. To achieve this you can use the undocumented "from" mail variable in your .mailrc: "set from".
To make this the default behavior, add "set from" to /etc/mail/mailx.rc.
In the shadow table/file/map there is a field that indicates how long an account may be inactive before it is expired. On login, the entry in /var/adm/lastlog, the inactive expire time and the current date are compared. If the system determines that the user is expired, he will get "Login incorrect", indiscernible from a normal incorrect login. The fix is to change the user's shadow entry.
Remote, but unshared filesystems, such as /, /var, /var/adm, etc. should be mounted with the llock option. Solaris 2.x does this automatically for remote /, but not for remote /var or /var/adm. If you don't specify llock, the system will hang when it tries to do stuff to the *[wu]tmp files, early in the boot process. And lpsched may fail if it can't lock /var/spool/lp/SCHEDLOCK.
Workaround: Add the (undocumented) llock option to the mount options for /var and/or /var/adm. (It should be fixed in /etc/rcS.d/S70buildmnttab.sh)
Vacation was moved from /usr/ucb (in SunOS 4.x) to /usr/bin. Unfortunately, the full pathname must be specified in your .forward.
Workaround: add a link to /usr/ucb/vacation in /usr/bin on SunOS 4 machines, and add a link to /usr/bin/vacation in /usr/ucb on SunOS 5 machines.
In general, defunct processes are caused by a parent process not reaping its children. Find out which process is the parent process of all those zombies (ps -e). It's that process that has a bug.
In Solaris 2.3 (and presumably earlier) there is a bug in the pseudo tty modules that makes them hang in close. This causes processes to hang forever while exiting.
Fix: Apply patch 101415-02 (for 2.3).
In all Solaris 2 releases prior to 2.5 (also fixed in the latest 2.4 kernel jumbo patch), init (process 1) calls sync() every five minutes which can hang init for some considerable time. This can cause a lot of zombies accumulating with process 1 as parent, but occurs only in rare circumstances.
You need to increase the number of pseudo ttys (See 3.39).
You probably use a Cray as fileserver. It doesn't support all NFS operations ld wants to perform. Install the following patch: 101409-04: SunOS 5.3: Jumbo linker patch
[ Solaris 2.3 ]
Su won't run under a shell compiled under SunOS 4.1.x. Recompile your shell (tcsh/bash) under Solaris 2.x.
Several changes were made to the "sd" driver between 2.3 and 2.4. In particular, the code that resets the drive to the 512 block size is no longer called in the case of a data overrun. Accordingly, it is not currently possible to install 2.4 from a local non-Sun CDROM drive. Your best bet for the short term may be to either borrow a SunCD (locally or maybe from your Sun Rep) or to mount the CD remotely on a machine that is already up and running and can handle your non-Sun CDROM, and perform a network installation.
This is not a problem for non-SPARC versions of Solaris 2.x.
CDROMs that have been modified to use a 512 byte blocksize by default will work fine.
The Sun CD-ROM FAQ explains how to patch Solaris 2.x for using a non-Sun CD-ROM drive for booting/installation. It also includes other information about using CD-ROM drives on Sun.
Only network devices configured with an address at boot are visible to ifconfig (i.e., if /etc/hostname.IFN exists). To make a interface visible to ifconfig do:
ifconfig ifN plumb
You need to add -R<wherethelibraryis> to the link command line. E.g.,:
cc -L/usr/dt/lib -L/usr/openwin/lib \ -R/usr/dt/lib -R/usr/openwin/lib \ xprog.c -lXm -lXt -lX11
You must specify the Motif library on the command line before other X libraries.
WRONG:
cc .... -lXt -lXmRIGHT:
cc .... -lXm -lXt
There is no C compiler included in Solaris 2.x. The /usr/ucb/cc script you are executing is a wrapper for the SunSoft C compiler which calls the native C compiler with the /usr/ucb includes and libraries. You need to get yourself a C compiler. Alternatively, you may have forgotten to put the proper link from /usr/ccs/bin/ucbcc to /opt/SUNWspro/SCxxxx/cc in place. See also 6.1.
If you use SunPRO C 3.0 or later, you need to specify the commandline option ``-mt'' when compiling and linking. If you and earlier version of SunPRO C or when using gcc, you'll need to specify -D_REENTRANT on compile command lines and -lthread on the link command line. -lthread should precede -lc.
There are two possible causes for this kernel memory leak.
There's a bug in the volume management device driver that when unloaded leaks memory: fix with patch 101907-05 (sparc) or 101908-07 (x86). This bug especially affects systems not running vold, as it is triggered when the kernel decides to unload unused device drivers.
The NFS client cache will cache too much. A simple workaround is to add ``set nrnode = 1000'' to /etc/system and reboot. You may want to make this larger or smaller depending on how much memory you have. A good rule of thumb is about 20-30 rnodes per MB of memory.
Another possible candidate is an overflow in /tmp or other swap based (tmpfs) filesystems. Check with df/du.
The kernel complains that it can't load device drivers for devices you don't have. They're harmless, ignore them.
For some reason the nfs service has disappeared from your /etc/services file, NIS map or NIS+ table. You need to have an entry like:
nfsd 2049/udp nfs # NFS server daemon (clts) nfsd 2049/tcp nfs # NFS server daemon (cots)
If you use NIS+, you must make sure that the NIS+ entry is readable for the machine executing nfsd.
If you used your SunOS 4.x services file, that would explain it: SunOS 4.x doesn't have an entry for nfsd in /etc/services, Solaris 2.x requires one.
This will usually not happen until you upgrade to Solaris 2.4 or a later revision. Solaris 2.3 and earlier would always consult /etc/services, regardless of what nsswitch.conf said. /etc/services does contain the right NFS entries.
Solaris 2.4 and earlier don't have an entry for NFS over tcp, so this error is also likely to occur on 2.5+ NFS servers that are NIS/NIS+ clients of 2.4- servers. In 2.5 the error message will look like:
nfsd: Cannot get address for transport udp host \1 service nfs nfsd: Cannot establish NFS service over /dev/udp: transport setup problem. nfsd: Cannot get address for transport tcp host \1 service nfs nfsd: Cannot establish NFS service over /dev/tcp: transport setup problem.
That's caused by a bug in the Solaris 2.4 named. You need to install the appropriate one of the following patches: 102479-01: SunOS 5.4: memory leak/mismanagement in in.named 102480-01: SunOS 5.4_x86: memory leak/mismanagement in in.named
The latest version of these patches include bind 4.9.3: 102479-02: SunOS 5.4: DNS spoofing is possible per Cern ca-96.02 102480-02: SunOS 5.4_x86: DNS spoofing is possible per Cern ca-96.02
Solaris 2.4/x86 ld dumps core when passed the "-s" option. Workaround: Link without the -s option and use strip on the resulting executable.
Patch 101969-05 broke TCP/IP throughput. You need to backout this patch or obsolete it with the kernel jumbo patch (101945-27 or later). The latter is recommended.
On Solaris 2.4 x86, later kernel jumbo patches (101946-29) triggered bugs in some of the ethernet cards. This manifests itself as extremely poor TCP throughput. On such systems, you need to install DU10 or later.
In Solaris 2.4 a bug was introduced that makes tftpboot chroot, while it still needs to open a socket. The first request still gets a response, but all other requests meet with a 5 second delay.
Workaround:
mkdir /tftpboot/dev mknod /tftpboot/dev/udp c 11 41 chmod 755 /tftpboot/dev; chmod 666 /tftpboot/dev/udp
This is fixed with patch 102773-01 (sparc) and 102774-01 (x86).
If the mount point starts with /cdrom, there's a bug in the way /etc/mnttab gets updated for HSFS CDroms in Solaris 2.4. Edit /etc/mnttab and remove the dev= entry for those mountpoints that give you trouble.
If the mount point name starts with /net/HOSTNAME, where HOSTNAME is some other host, it's probably Sun bug 1207057. Try patch 102785-01 or later (SunOS 5.4) or 102783-01 or later (SunOS 5.3). But if HOSTNAME is the current host, it's probably Sun bug 1220440; unfortunately, this bug is still open as of Jan 2nd 1996.
If root no longer has a valid shell, your only recourse is to boot single user from CD.
You need to mount the root file system and fix /etc/passwd.
If you run NIS or NIS+, you have an easier solution; just add an account with uid 0 but with a different username and a valid shell. Use that account to fix the problem with the root account.
You installed a patch for your C++ compiler (101910 (SPARC) or 102486 (x86)) but forgot to install the required companion patch for libC.so.5.
Fix: install patch 101242-10 (SPARC) or 102859-01 (x86) or later.
This fix is included in Solaris 2.5+.
Solaris 2.4 has a combination of problems that make running with quotas of or with near-full disks almost impossible. The problems include writing message to /dev/console, which requires switching of interrupts and make the machine appear dead, clients caching upto 2MB of failed writes and retrying them, hammering the server to death.
Fix: kernel patch 101945-32 (sparc)/101946-29 (x86) or later. Needs to be applied on clients as well as servers.
This usually only happens on diskless/dataless clients. You installed a new kernel jumbo patch on the server that exports /usr to the client and failed to read the note in the patch readme that says:
NOTE: If this patch is applied to a server, it should also be applied to dataless clients that also mount /usr from that server. Failure to do so will generate this error message when openwin is started on the client: "Binding Unix socket: Invalid argument".
The fix is to apply the same kernel jumbo patch to the client.
Ps counts the mappings for the framebuffer as memory. Especially on the FFB where a number of different mappings of the device address space is used to optimize access this can cause large amounts of memory, but not physical memory, to be mapped and shown by ps.
It's not unusual for the FFB+ (Creator3D) to show a 500MB process size for the X server.
Solaris 2.3 FCS also has a number of Xsun memory leaks when using the SX. Get the SX patches or upgrade to a later release of Solaris 2.x.
/usr/proc/bin/pmap (new in 2.5) will show the exact mappings used by Xsun. "pmap -x" (new in 2.6) will even show how much of each mapping is shared/private resident, etc. If Xsun has a memory leak, you'll see a huge "[heap]" with pmap.
Solaris 2.5 and Solaris 2.4 kernel patch 101945-34 and later have a bug in their TCP retransmission algorithm that cause excessive retransmissions over slow links, Sun's bug ID is #1233827.
A work around for this bug is running the following commands at system boot, e.g., by adding them to /etc/init.d/inetinit (values are in milliseconds):
/usr/sbin/ndd -set /dev/tcp tcp_rexmit_interval_min 3000 /usr/sbin/ndd -set /dev/tcp tcp_rexmit_interval_initial 3000
someone else suggested different changes, because with the above retransmits when you do lose a packet take a long time. The following uses a smaller value for the minimal retransmit interval but also limits the outgoing packet size to 536 bytes, so retransmitted packets are smaller and lost packets too.
/usr/sbin/ndd -set /dev/tcp tcp_rexmit_interval_min 1000 /usr/sbin/ndd -set /dev/tcp tcp_rexmit_interval_initial 3000 /usr/sbin/ndd -set /dev/tcp tcp_mss_max 536
Patches for this bug have been released, as listed below. You should not combine the patches with the tcp_rexmit_interval setting listed here (patches listed are the first revisions with the fixes; newer versions fixing more problems have been released and can be applied instead)
101945-42: SunOS 5.4: patch for kernel 103169-06: SunOS 5.5: ip driver and ifconfig fixes 103447-03: SunOS 5.5: tcp patch 103448-03: SunOS 5.5_x86: tcp patch 103170-06: SunOS 5.5_x86: ip driver and ifconfig fixes 103582-01: SunOS 5.5.1: /kernel/drv/tcp patch 103630-01: SunOS 5.5.1: ip and ifconfig patch 103631-01: SunOS 5.5.1_x86: ip and ifconfig patch 103581-01: SunOS 5.5.1_x86: /kernel/drv/tcp patch 103632-01: SunOS 5.5.1_ppc: ip and ifconfig patch 103583-01: SunOS 5.5.1_ppc: /kernel/drv/tcp patch
These are two unrelated problems. To fix the socket problem, either copy "sockmod" from an earlier kernel patch such as 101946-12 or install patch 101946-35.
The performance problem is a device driver problem that doesn't affect all ethernet cards. To fix this problem, you need to install DU10 or later.
The first release of Solaris 2.5 NFS V3 has a bug in calculating the block allocations returned by stat. The server returns a value that is 16 times the right value and the client returns a value 16 times smaller to stat().
The net effect is that unpatched Solaris 2.5 machines look like they're having no problems with each other.
But on clients with the bug, files on servers returning the right value will have a block count 16 times too small. This breaks NFS v3 swap files in Solaris 2.5, as swap files will seem to have holes in them and swap will refuse to use them. If you see this problem, your server needs patching.
On correct clients served by buggy servers, files will appear to have 16 times as many blocks allocated as they should have. This will generally do no more damage than overly large du(1) or "ls -s" output.
There are two ways to fix this: one is to upgrade to Solaris 2.5.1, the other is to install the 2.5 NFS patches 103226 (SPARC) or 103227 (x86), revision -04 or later. As of this writing, patch 103226 has been superseded by patch 103477-06 (or later).
It is important that these patches are installed on clients and servers alike, especially on 2.5 clients using NFS swap files.
When the system shuts down, init(1m) updates /var/adm/utmp* to reflect that fact.
If you have a separate /var filesystem, this operation will happen after /var is unmounted and init complains:
INIT: failed write of utmpx entry:"s6" INIT: failed write of utmpx entry:"rb"
You can safely ignore these messages.
When installing a patch, the Solaris 2.5+ patch installation procedure will execute the script "checkinstall" with uid nobody.
If any of the patch files cannot be read by nobody or if any part of the path leading up to the patch directory an error similar to the following will appear:
./installpatch . Generating list of files to be patched... Verifying sufficient filesystem capacity (exhaustive method) ... Installing patch packages... pkgadd: ERROR: checkinstall script did not complete successfully ....
You can workaround this in two ways, one is to make sure that nobody can read all patch files and execute a "pwd" in the patch directory or add an account "install" to /etc/passwd:
install:x:0:1:installpatch braindamage:/:/bin/true
Installpatch uses "nobody" as a fallback if it cannot find the "install" user.
rpc.ttdbserverd is the RPC-based ToolTalk database server. It creates and manages database files kept in TT_DB directories. See ttdbserverd(1M).
The problem is usually caused by corrupted entries in some TT_DB directory. The solution is therefore to kill the running rpc.ttdbserverd, and to completely remove all local TT_DB directories.
rpc.ttdbserverd will be restarted from inetd when it is needed again. And it will rebuild the TT_DB directories automatically.
By default these TT_DB directories are created in the top directory of every filesystem, however one can use /etc/tt/partition_map to tell ttdbserverd where to put them. See partition_map(4) for more details.
A second possible cause is running out of filedescriptors, which can be fixed by upping the soft limit on the number of filedescriptors rpc.ttdbserverd starts with.
The /proc filesystem is a memory image of each process; it's a virtual filesystem that occupies no disk space.
/proc is used for programs such as ps(1) and top(public domain) and all the tools in /usr/proc/bin that can be used to examine process state.
The only way to remove /proc is to unmount it, but that will break a lot of useful programs.
The new named as shipped in Sun's latest bind patches prints message about all kinds of configuration problems.
This particular message indicates that named has learned that a particular domain is server by a nameserver from another nameserver. When asked, however, this first nameserver denies all knowledge of the particular domain.
This is known as a "lame delegation", a reference that points nowhere.
Due to limitations in Openboot PROMs, you can't boot any of the 32bit SPARCs (sun4c, sun4m, sun4d) from a root partition that has parts lying beyond the 2GB mark on a SCSI disk.
The Ultra PROMs are capable of this, but Solaris prior to version 2.6 also has a bug which effectively prevents Ultras from booting from large root partitions too.
The Ultras have environmental sensors that will cause system or board shutdowns in case of overheating. The typical cause of this warning is a blocked airflow or a broken CPU fan.
Where have you been? :-) Sun has dropped their old K&R C compiler, supposedly to create a market for multiple compiler suppliers to provide better performance and features. Here are some of the contenders:
1) SunPro C:
SunPro, SMCC, and various distributors sell a new ANSI-standard C compiler on the unbundled (extra cost) SPARCcompiler/SPARCworks CD-ROM. There are some other nice tools there too, like a "make tool" and a visual diff (interactive diff).
You have to license and pay per concurrent user.
Apogee sells C, C++, f77 and f90 compilers, mainly for SPARC. These compiler include the KAP preprocessors from Kuck and Associates.
3) Cygnus GCC:
Cygnus Support and the Free Software Foundation make the GNU C compiler for Solaris, a free software product. Source code and ready-to-run binaries can be installed from the CDware CD (Volume 4 or 5).
Like all GNU software, there are no restrictions on who can use it, how many people can use it at a time, what machines it can be run on, or how many copies you can install, run, give away, or sell.
Cygnus sells technical support for these tools, under annual support contracts.
The Cygnus distribution includes: gcc (ansi C compiler), gdb (good debugger), byacc (yacc repl), flex (lex repl), gprof, makeinfo, texindex, info, patch, cc (a link to gcc)
The Cygnus compiler on uunet is starting to show its age a bit. If you want to compile X11R5, you can get the latest version of GCC in source code, from the usual places (prep.ai.mit.edu or one of the many mirrored copies of it). Build and install that compiler using the Cygnus gcc binaries. Or get tech support from Cygnus; they produce a new version for their customers every three months, and will fix any bug you find.
4) Gcc.
Gcc is available from the GNU archives in source form. You need gcc 2.3.3 or later. You should not use GNU as or GNU ld. Make sure you run just-fixinc if you use a binary distribution. Better is to get a binary version and use that to bootstrap gcc from source.
GNU software is available from:
prep.ai.mit.edu:/pub/gnu
gatekeeper.dec.com:/pub/GNU
ftp.uu.net:/systems/gnu
wuarchive.wustl.edu:/mirrors/gnu
nic.funet.fi:/pub/gnu
When you install gcc, don't make the mistake of installing GNU binutils or GNU libc, they are not as capable as their counterparts you get with Solaris 2.x.
5) Info on other compiler vendors will be added if you send us some.
Solaris ships with everything you need, except for the compiler. All this stuff lives in /usr/ccs/bin and /usr/ccs/lib. If you still can't find it, make sure you have the following packages installed on your system:
for tools (sccs, lex, yacc, make, nm, truss, ld, as): SUNWbtool, SUNWsprot, SUNWtoo for libraries & headers: SUNWhea, SUNWarc, SUNWlibm, SUNWlibms SUNWdfbh, SUNWcg6h for ucb compat: SUNWsra, SUNWsrh
These packages are all on the Solaris 2.x CD.
The functionality provided by ranlib in SunOS 4.1.x is now merged into ar. It is no longer necessary to run ranlib on archive libraries. Fix makefiles that require ranlib by replacing it with "/bin/true".
A no-op ranlib has been reintroduced in 2.5.
There are several "patch kits" for X11R5 under Solaris 2.1. Most of them require gcc 2.3.3 or later and you must have run "fixincludes" when you install the gcc software.
The recommended patchkit is R5.SunOS5.patch.tar.Z available from ftp.x.org:/R5contrib. It works with gcc (2.3.3 or later) and SunPRO C.
X11R6 compiles out-of-the-box on Solaris 2.3.
There are several possible problems when compiling X11R6 on Solaris 2.4, all are solved after applying R6 fixes upto and including fix-12. These problems are:
The compilation of xc/programs/Xserver/Xext/shm.c will fail with a redefinition of shmat().
Compilation errors when using SC 2.0.x.
See also 6.6
Some changes in libc.so and libthread.so break the way libthread is linked with libX11.so. The most noticeable symptoms are failing signal handling in xinit, xterms that don't die after the inferior shell process exits and emacs-19 hanging after starting dired.
Apply all fixes upto fix-12 to the X11R6 sources. Remember to change OSMinorVersion to 4 in xc/config/cf/sun.cf as well and use "make Everything" or "make World", not just "make". Make sure you change the right OSMinorVersion in sun.cf, the first one is the x86 minor version, the second one is SPARC one. Change the one appropriate for your system or change both.
The resulting R6 will not run on Solaris 2.3 or earlier. If you want to have the same set of binaries for Solaris 2.3 and 2.4, you need to disable threaded X altogether by changing "#define ThreadedX YES" to "#define ThreadedX NO" in sun.cf.
Note that you must reinstall the X libraries with "make install" before things start working. There is no need to reinstall anything but libX11.so. Xterm, emacs etc., should start working after the change to libX11 is installed. Check your newly installed libX11 with dump -Lv libX11.so.6. If it still shows libthread as "NEEDED", the rebuild didn't work correctly. Double check your changes. (If you previously used the patch from the FAQ, make sure you remove it before applying fix-12.)
For multi-threaded X to work it necessary to install patch 101925-02 to fix problems in header files [2.4]. You need to reinstall gcc or re-run just-fixinc after installing that patch.
Solaris 2.2 doesn't have the full thread support required by X11R6. Compile R6 without multi-thread support or upgrade to 2.3 or later.
Someone at GNU made a bad mistake by adding a the following misfeature to gcc 2.7.0: in the absence of -R options, specify a -R option for each -L option on the commandline.
While this looks "neat" on the surface, this makes ld ignore LD_RUN_PATH, which is the mechanism used by R6 to set the RPATH. It also introduces a security hole, as it sets a relative RPATH for all X executables, including the set-uid ones.
Workaround:
remove the following bit from the gcc-lib/.../2.7.0/specs file:
%{!static:%{!R*:%{L*:-R %*}}}
then rebuild X.
This is fixed in gcc 2.7.1
Although it is possible to switch the TCX to dumb cg3 mode and run X11R6 on that, Matt Landau of the X consortium said the following on the matter:
"But why would you want an accelerated 24-bit framebuffer to behave like a dumb 8-bit framebuffer under Solaris 2?
"OpenWindows versions 3.3 and 3.4 (bundled with Solaris 2.3 and Solaris 2.4 respectively) are perfectly reasonable R5-based implementations of X, with a perfectly good R5 server that also does DPS and takes advantage of the TCX. They have none of the brokenness associated with the old X11/NeWS server from OpenWindows versions 3.2 and before.
"Of course, if you want R6 libraries and apps, you can build R6 and run R6 applications against the OpenWindows 3.4 server, and still get full benefit of the TCX. Works just fine."
No. Run Sun's Xsun instead, it works fine.
Run Configure, and use the solaris_2_0 hints, don't use the solaris_2_1 hints and don't use the config.sh you may already have. First you must make sure Configure and make don't find /usr/ucb/cc. (It must use gcc or the native C compiler: /opt/SUNWspro/bin/cc)
Some questions need a special answer.
Are your system (especially dbm) libraries compiled with gcc? [y] y
yes: gcc 2.3.3 or later uses the standard calling conventions, same as Sun's C.
Any additional cc flags? [ -traditional -Dvolatile=__volatile__ -I/usr/ucbinclude] -traditional -Dvolatile=__volatile__Remove /usr/ucbinclude.
Any additional libraries? [-lsocket -lnsl -ldbm -lmalloc -lm -lucb] -lsocket -lnsl -lm
Don't include -ldbm, -lmalloc and -lucb.
Perl 5 compiles out of the box.
Some of the socket constants have changed. E.g., SOCK_STREAM now has a value of 2, whereas SunOS 4.x uses a value of 1.
The MH config file for Solaris that comes with MH 6.8.3 should work OK, but there are some other problems: One of the Solaris 2.x headers conflicts with mhn.c and inc doesn't know how to separate messages based on the Content-Length header. A fix for both problems can be found in:
<ftp://ftp.wins.uva.nl/pub/solaris/mh-6.8.3-diff>
You need to get xv-3.x from ftp.cis.upenn.edu:/pub/xv. Don't use xv-3.01 from ftp.x.org. The latest version, xv-3.10, compiles fine w/o any of the ucb stuff.
See man page DLPI(7). Try NFSWATCH 4.2 for sample code using DLPI. It is available by ftp from: ftp.ecn.purdue.edu:/pub/davy/nfswatch4.3.tar.gz and gatekeeper.dec.com:/pub/net/ip/nfs/nfswatch4.3.tar.gz
Better yet, FTP the paper "How to Use DLPI in Solaris 2.x" by Neal Nuckolls of Sun Internet Engineering. Look in these FTP directories: opcom.sun.ca:/pub/drivers/dlpi
http://www.freebird.org/hints/papers/{dlpi,npi,tpi}.ps.Z
The C library has exploded. The manual page may give an indication where to find a specific function.
Those libraries are essentially split over two directories:
/usr/lib /usr/ccs/lib.
Important libraries:
/usr/lib: libsocket - socket functions libnsl - network services library
/usr/ccs/lib: libgen - regular expression functions libcurses - the SysVR4 curses/terminfo library.
See Intro(3) for more details.
They are in /usr/ucblib/libucb.so. The b* functions are replaced with the ANSI-C equivalents. Look in the Solaris porting FAQ for more details.
In Solaris 2.5, they're back in libc.so, together with many other commonly used BSD functions.
Not really. The Source code compatibility package is compatible with BSD 4.2, not SunOS 4.1.x. The consensus is that the library is broken beyond usability. If you use libucb to pick up some functions you need, it is often best to specify it after all other libraries and after libc with:
-lc -L/usr/ucblib -R/usr/ucblib -lucb
or preferably:
-lc /usr/ucblib/libucb.a
You're probably linking with libucb and didn't read question 6.18. (Readdir in libucb.so wants you to include sys/dir.h, but many SunOS 4.1.x programs included <dirent.h>, consequently, you're mixing native <dirent.h> struct dirent with libucb readdir(). The symptom of this mixup is that the first two characters of each filename are missing. Make sure you use a native compiler (default /opt/SUNWspro/bin/cc, which may not be in your PATH), and not /usr/ucb/cc.
It is easy to mixup the BSD libcurses and the SVR4 libcurses. One lives in /usr/ucblib, the other in /usr/ccs/lib, when you've installed SUNWarc. Note that when you specify:
-L/usr/ucblib -lucb -L/usr/ccs/lib -lcurses
you will pick the ucb version of libcurses, not the SVR4 version. If you always put libucb last, as recommended in 6.18, you will have no such problem.
Starting with Solaris 2.4, the package SUNWmfrun is included with the base OS. It is installed under the directory /usr/dt, where all the CDE stuff will appear (dt stands for desktop).
There are no Motif imake templates nor is mwm shipped with the base OS yet.
Remember that you must link with -R/usr/dt/lib.
The fourth argument to semctl() is a "union semun" that you need to define yourself. That your programs works on other systems is sheer luck. The argument passing convention on SPARC/V8 cause your luck to run out. Instead of passing the contents of small structs and unions in registers, a copy of the struct/union is made on the stack and a pointer to that struct is passed.
In short, on SPARC, passing a union containing an integer and just an integer, both by value, is not the same thing. On other systems it sometimes is.
Wrong, but it may work on other systems:
semctl(sem_fd, 0, SETVAL, 1);
Right:
union semun { int val; struct semid_ds *buf; ushort *array; } arg; arg.val = 1; semctl(sem_fd, 0, SETVAL, arg);
Solaris 2.4 and later (and Solaris 2.3 w/ high rev kernel jumbo patches) limit the number of ICMP error message to one per 500 milliseconds. To switch off this feature, use:
/usr/sbin/ndd -set /dev/ip ip_icmp_err_interval 0
In Solaris 2.x static linking is not supported for any of the system libraries. All the functions that use /etc/nsswitch.conf (getXXXbyYYY, getpwXXX, etc) require the dynamic linker to load the code to load these functions. It is not possible to write configurable/extensible functions in such a way that dynamic linking is not required. E.g., you can add your own nsswitch.conf backend which would not be known to programs statically linked to only the standard backend code.
Programs that link statically against any of the OS libraries may not run in the next release and are not ABI compliant.
Programs that link statically don't get some dynamic performance enhancements found in the shared libraries: using hardware multiply/divide on systems that support it; using fast mem*() operations on UltraSPARC etc. And you won't pick up performance enhancements in next releases: e.g., Solaris 2.5 comes with a 4x faster fread/fwrite and the "Name Server Cache Daemon".
If you don't care about ABI compliance, i.e., you won't ship your program as a product and don't care that you may need to recompile after an OS upgrade, here are some of your options:
Link dynamically against all but libdl:
cc -Bstatic .... -Bdynamic -ldl -Bstatic
Link against dl* stubs (gethostbyXXX, getpwXXX etc won't work any longer):
char *dlopen() { return 0;} int dlclose() { return 0;} char *dlsym() { return 0;} char *dlerror() { return "dynamic linking not loaded";}
If you don't want any dependencies on /usr, link against the dynamic libs in /etc/lib:
cc -Bstatic ... -Bdynamic -R/etc/lib -Wl,-I/etc/lib/ld.so.1 -ldl -Bstatic ....
If you still get undefined symbols, check with ldd for all your libraries if they have any dynamic dependencies. E.g.,
% ldd /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libdl.so.1 => /usr/lib/libdl.so.1 libc.so.1 => /usr/lib/libc.so.1 libintl.so.1 => /usr/lib/libintl.so.1 libw.so.1 => /usr/lib/libw.so.1
tells you that if you want to link libsocket statically, you need to link with -lnsl -ldl -lc -lintl and -lw as well.
Either install gdb 4.16 or later, or update the gdb 4.15.1 distribution with the following patch to bfd/elf32-sparc.c and include/elf/common.h:
*** gdb-4.15.1/bfd/elf32-sparc.c Fri Nov 3 12:30:15 1995 --- elf32-sparc.c Thu Nov 23 14:44:37 1995 *************** *** 1486,1491 **** --- 1486,1492 ---- #define TARGET_BIG_NAME "elf32-sparc" #define ELF_ARCH bfd_arch_sparc #define ELF_MACHINE_CODE EM_SPARC + #define ELF_MACHINE_ALT1 EM_SPARC32PLUS #define ELF_MAXPAGESIZE 0x10000 #define elf_backend_create_dynamic_sections \ _bfd_elf_create_dynamic_sections *** gdb-4.15.1/include/elf/common.h Fri Nov 3 20:20:25 1995 --- common.h Thu Nov 23 14:20:07 1995 *************** *** 83,88 **** --- 83,91 ---- #define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */ #define EM_PARISC 15 /* HPPA */ + + #define EM_SPARC32PLUS 18 /* Sun SPARC 32+ */ + #define EM_PPC 20 /* PowerPC */ /* If it is necessary to assign new unofficial EM_* values, please pick large
Internally, Solaris maintains time as the number of seconds since 1970-01-01 00:00:00 UTC (not counting leap seconds). This counter won't have any problem with dates in the year 2000; since it is maintained as a 32-bit signed integer value, it will work correctly through 2038-01-19 03:14:07 UTC, by which time Solaris (if it still exists) will have upgraded to a larger counter.
Though the Solaris kernel itself shouldn't have any problems with the year 2000, applications themselves may have problems, partly because some application writers unwisely chose to represent dates using two-digit years, and partly because some application writers mistakenly thought that localtime returns the year modulo 100, when it actually returns the year minus 1900. These kinds of problems are rarer in Solaris than with typical mainframe applications, but they sometimes do occur.
A year 2000 project at Sun plans to review all libraries, unbundled software, and some 3rd party apps in search of potential year 2000 problems, so that they are resolved well before the big day. Sun plans to make Solaris 2.6 year-2000 compliant when it is released. It also plans to issue patches for Solaris 2.5 and 2.5.1 by 1997-09-30, and for Solaris 1.1.1, 1.1.2, 2.3 and 2.4 by 1997-12-31.
Sun-maintained Solaris applications with known year-2000 problems as of Solaris 2.5.1 (unpatched) include the following.
* SCCS files store only the last two digits of the year, so SCCS stops working after 1999. Sun plans to work around this problem by having SCCS interpret two digit years to be in the date range 1969-2068; this means the revised SCCS will stop working after 2068.
* The Solaris 1 `date' command can't set the clock past 1999. This bug is partly fixed in Solaris 2 `date', which supports both 2-digit and 4-digit years; however, in Solaris 2 you should use 4-digit years when setting the date, to avoid some remaining bugs with 2-digit year handling.
* The following programs are known to have minor bugs related to using year-1900 instead of year modulo 100 when generating diagnostics, temporary file names, and the like:
atq fsck listen passwd sar timex ufsdump uucico uustat uuxqt xterm
* The -me, -mm, and -ms troff macro packages all assume that the current date is before January 1, 2000.
* `sortbib' mishandles bibliographies containing 2-digit years that span the year-2000 boundary.
* `ckdate' rejects years after 1999.
* Problems have been reported with installing Solaris on machines whose hardware date is past 1999.
* The filemgr `find after' and `find before' operations have only 2-digit inputs for years, and mishandle dates after 1999.
* cm (the calendar manager) mishandles dates after 2000-02-29.
* In Openstep, NSCalendarDate, NSDate*, Mail, and Prefrence need enhancements and fixes for years past 1999.
In addition, user applications that invoke `getdate' and `strptime' on 2-digit years are advised to check their assumptions carefully.
Patches for year 2000 problems will be made available for all releases not EOLed at January 1, 1995, in keeping with the 5 year support window. This includes the Solaris releases 2.5.1, 2.5, 2.4 and 2.3 as well as SunOS 4.1.3_U1 and 4.1.4.
Most of this material is either written by me or sent to me directly. Some of it is cribbed shamelessly from USENET postings in several groups.
Thanks to all people who contributed to this FAQ, you know who you are. The list is too long to be included in this FAQ.
--- End of Solaris 2.x FAQ -- Maintained by Casper Dik <Casper.Dik@Holland.Sun.COM> ---