Executive summary: Use OpenCSW.
A longer answer: There used to be two major providers of Open Source packages, of which one has forked, so the current number is three.
- OpenCSW - a fork of Blastwave, run by one of its founders, Phil Brown. OpenCSW has the most advanced build system (mGAR), most of the manpower after the fork, and the newest packages. Its SourceForge projects are named
gar
(packages) and opencsw
(tools).
- Sunfreeware - I don't know of any code repository of theirs.
- Blastwave - project started in 2002 by Dennis Clarke and Phil Brown, now being run by Clarke, uses a less advanced version of the build system (compared to OpenCSW),
has does not have a publicly available code repository.
There are two package management tools, pkg-get
and pkgutil
. Both work with OpenCSW and Blastwave. pkg-get is written in Korn shell, pkgutil is written in Perl and has a bit more features than pkg-get does. Both pkg-get and pkgutil automatically resolve and download dependencies.
As far as Firefox is concerned, version 3 is not available from OpenCSW yet. There is a package bundle you can download from elsewhere.
If you use a non-standard keyboard layout, the thing you might miss is the setxkbmap command. A dodgy binary on a random blog was the best I could find.
Another thing you'll miss is the GNU userland. OpenCSW can provide you with all the GNU core utils, with names prefixed with a 'g'; sed is gsed, grep is ggrep, and so forth. For interactive sessions, you can create aliases along the lines of:
alias sed=/opt/csw/bin/gsed
If you happen to need to compile a piece of software, there is a free Sun compiler, coming with a bundle with Sun Studio. You should be able to find it on Sun's website.
Building new packages is a bit of a PITA, unless you have some sort of a framework. The packages format is relatively simple, but Sun doesn't provide convenient package creation tools. I personally use OpenCSW's build system which automates all that away.
Sound card support is poor. If you want to listen to music, have your mp3 player ready.
Acrobat Reader for Solaris x86 was released only recently, and the version released is 4.0 (sic!).
There is Flashplayer, but after you install Firefox 3, you'll need to make the symlinks manually to have Firefox pick up the plugin.
Generally, it would be an overstatement to say that Solaris can be a convenient desktop even for a sysadmin. Expect rough edges. Of course, there are benefits of running the same platform as your desktop and server.
(1.) Is there a way to add EVERYTHING I have read/execute permission into my path? Sub-question, is this a bad idea?
...it's a bad idea for security reasons.
(2.) Does whereis only search my path? Is there some equivalent for finding files/directories I need without having to search the ENTIRE host and getting access-denied for every other directory?
You could use locate (or glocate available in findutils from OpenCSW) with the -r option which allows to use regular expressions: glocate -r /gcj$
(3.) Is there a way I can know for sure if a library/binary is definitely not available vs. just not in my path?
glocate can tell you that, assuming that gupdatedb
has been recently run.
(4.) Is there a way to tell, specifically for gcc if gcj is available?
The best way of going about it is to scan the installed packages. The list of installed files is in /var/sadm/install/contents
.
(5.) Can I compile gcj to my user directory without having to compile all of gcc with it?
Haven't tried, but you would still need to go through a lot of hassle. It's probably best to grab an already available gcj binary. If you have to compile it yourself, then it's best to use existing build descriptions, such as this one.
(6.) Is there a (universal) way, when building a binary, to flag the compile or make file to deal with any dependencies as it finds them rather than simply failing?
I assume you're thinking of something along the lines of Gentoo's emerge, which downloads and installs the dependent packages before it compiles the one you wanted. It's not easily done; especially if you compile everything as a regular user, because you need then to use a chroot environment. It's a good idea, but not trivial to do.
(7.) Does a typical user on a shared-host situation have the ability to use the OS package library to get packages at the user-level?
What do you mean by get packages? If what you want is to extract the contents of a .pkg file, you can use the pkgtrans command, like this: pkgtrans foo.pkg ./ all
However, there's also a possibility of doing something like pbuilder which creates a chroot environment, in which you do your compilation as well as package installations, all in the home directory.
Back to the gcj question, I think you need to specify the build time dependencies of your makefile and depend on a package that contains gcj, in a known path, and then you can use that path in your build description.
Generally, if you're in a shared hosting, compiling packages is going to be a pain, it's much better to find a system when you can install and remove packages, and write to /usr.
It's also a good idea to use some kind of a build framework, such as GAR, which does all the right things and removes lots of annoyances: it checks the build time dependencies, downloads tarballs, verified checksums, extracts, applies patches if any, configures, builds, installs, and makes a package, and you can specify everything in a single Makefile. Learning to use such a framework requires a bit of time, but if you tend to build packages yourself, the time spend on learning will pay off quickly.
Best Answer
/usr/sfw/bin
is the bundledgcc
path with Solaris 10. On Solaris 11.1,gcc
is, when installed, directly available in/usr/bin
as a symlink that points to/usr/gcc/<version>/bin/gcc
.There is now an on disk data format for ips packages (
.p5p
files) but I would suggest to download the whole repository (look for Oracle Solaris 11.1 repository image in the Solaris 11.1 download page) and create your own ips service. See this blog for details. That would allow to install whatever packagegcc
is dependent on and possibly other packages you might be still missing for your task.