$NetBSD: README.Solaris,v 1.29 2022/08/01 14:49:09 jperkin Exp $ This README describes pkgsrc on a variety of Solaris-derived operating systems. It corresponds to pkgsrc/platform/SunOS.mk. The relevant operating systems are: - illumos (open source fork, OpenIndiana, OmniOS, SmartOS, and others) - Solaris (from Sun/Oracle, also Sun Solaris, Oracle Solaris) - OpenSolaris (from Sun; superseded long ago by illumos) As of 2022, the primary platforms of interest where pkgsrc is known to work well are illumos distributions, Solaris 10, and Solaris 11. pkgsrc is not currently known to work on SunOS 4 or OpenSolaris. As of 2022-04-09, it isn't possible to use GNU ld. This is relevant on Tribblix: when bootstrapping, ensure /usr/gnu/bin is last in your $PATH. Prerequisites ------------- You will need a working C compiler. The two known options are gcc and Sun/Solaris Studio. gcc can come from the OS vendor, or other places. On some systems, it may only be possible to use the vendor gcc, or there might be no vendor gcc available by default. In general, there's better support for gcc in third-party software, and much better support for gcc on illumos. As with pkgsrc on other platforms, one should use the same compiler family and ideally the same compiler version for building all packages. The following packages are the minimum required on Solaris 8 to bootstrap and build packages. - SUNWsprot - SUNWarc - SUNWbtool - SUNWtoo - SUNWscpu - SUNWxcu4 Realistically you will need more, such as SUNWlibm, and SUNWlibC for C++ packages if you are using SunPro. Solaris Zones: To bootstrap pkgsrc on a Solaris 11 Zone, these packages are going to be required, regardless of the compiler used: - pkg:/system/header - pkg:/system/linker - pkg:/system/library/math - pkg:/library/glib2 - pkg:/library/zlib - pkg:/developer/library/lint - pkg:/developer/object-file If you are trying to bootstrap pkgsrc in a Solaris [8-10] Zone then you will need to install the following packages (assuming you will bootstrap using Sun's gcc package): - SUNWgccruntime - SUNWgcc - SUNWbinutils - SUNWbtool - SUNWggrp - SUNWxcu4 - SUNWcs - SUNWsprot - SUNWlibm - SUNWloc - SUNWsndm On illumos you can configure a ipkg or sparse branded zone to host your pkgsrc tree. Since the software database is generally managed independently from the host, the same essential development tools, required to deploy pkgsrc on the host distribution, need to be installed within the zone. OmniOS also provides pkgsrc branded zones. A pkgsrc zone is a sparse zone which is pre-configured to use the SmartOS binary package repository. Refer to https://omnios.org/setup/zones General ------ Solaris and illumos come by default with a mixed {32,64}-bit userland. This can include the compiler, which may have shipped as a 32-bit ELF. In this case, the compiler by default will create 32-bit executables and shared libraries, unless told otherwise. To build 64-bit binaries, pass '--abi=64' to bootstrap, and also see the crle(1) man page to configure the runtime linking environment. 64-bit runtime libraries can be usually found at /usr/lib/amd64. NB: passing '-m64' to the compiler is not needed when using --abi=64. It is unclear whether --abi=64 is still a requirement on some modern illumos distributions, which provide a 64bit compiler. Joyent doesn't mention it in their pkgsrc bootstrap guide for SmartOS. Generally, illumos-based distributions come with gcc, and gcc is the standard approach. As of 2022, there are no recent reports of using Sun/Oracle toolchains on illumos. If you are using gcc -------------------- If the gcc installation is not in your $PATH you will need to pass additional flags to bootstrap, for example: env CC=/opt/gcc-4.6.3/bin/gcc \ GCCBASE=/opt/gcc-4.6.3 \ ./bootstrap --abi=64 It is recommended that an external gcc be used only for bootstrapping, and that you set USE_PKGSRC_GCC=yes in mk.conf so that the appropriate pkgsrc gcc is installed and used. Binary SVR4 packages of gcc can be found through: https://www.opencsw.org/get-it/packages/ The CSW repo is most useful on Solaris 10, OpenSolaris and SXCE. On Solaris 11 it is preferrable to install the IPS package for the preferred GCC version, available in the official repository. See https://wiki.netbsd.org/pkgsrc/solarish/ for information about installing gcc on various illumos distributions. One can use a distribution-provided gcc, or a gcc that has been built from sources. Alternatively, see https://pkgsrc.smartos.org/install-on-illumos/ for binary kits and initial packages (including gcc) that run on illumos variants. If you are using Solaris Studio --------------------------- This section describes the use of Sun-provided compilers, variously termed WorkShop and Studio. You must ensure that the compiler tools and your $prefix are in your PATH. This includes /usr/ccs/{bin,lib} and e.g. /usr/pkg/{bin,sbin}. Usually, passing 'env CC=cc PKGSRC_COMPILER=sunpro' should be enough to use Solaris Studio. Additional compiler settings will be generated automatically by the boostrap process and written to $PREFIX/etc/mk.conf In the past, however, the following mk.conf variables have been recommended: CC= cc CXX= CC CPP= cc -E CXXCPP= CC -E NB: The make variable CC holds the command for the C compiler, and the command for the C++ compiler is CC. The following indented sections provide a list of Solaris packages that must be installed in order for pkgsrc to build C and C++ packages. WorkShop 5.0: SPROcc Sun WorkShop Compiler C 5.0 SPROcpl Sun WorkShop Compiler C++ 5.0 SPROild Sun WorkShop Incremental Linker SPROlang Sun WorkShop Compilers common components Sun ONE Studio 8: SPROcc Sun ONE Studio 8 Compiler C SPROcpl Sun ONE Studio 8 Compiler C++ SPROdwrfb DwarfSupportLibrary binaries SPROild Sun ONE Studio 8 Incremental Linker SPROlang Sun ONE Studio 8 Compilers Common Components SPROsbld Sun ONE Studio 8 Linker Stab Library SPROscl Sun ONE Studio 8 Standard Class Library for C++ SPROtlbn7 Sun ONE Studio 8 Tools.h++ 7.1 Class Library for C++ SPROutool Sun ONE Studio 8 Common Tools The corresponding 64-bit packages are also required to build 64-bit binaries and libraries. Oracle Studio 12 (IPS): pkg:/developer/developerstudio-12[3-6] Oracle Developer Studio 12.[3-6] pkg:/system/library/studio-runtime Runtime Support For Solaris Studio pkg:/consolidation/sunpro/sunpro-incorporation sunpro consolidation incorporation pkg:/group/feature/developer-studio-utilities Tools and runtime support libraries for use with Oracle Solaris Studio This will install the whole toolchain, along with the observability tools and the studio IDE. If you want to select individual packages, make sure to have runtime libraries installed. For instance, on Studio 12.6, you can do that with: pkg install --accept developerstudio-126/library/c++-libs \ developerstudio-126/library/c-libs \ developerstudio-126/library/f90-libs \ developerstudio-126/library/math-libs \ developerstudio-126/library/perflib \ developerstudio-126/library/studio-gccrt To build with Studio 12 on Solaris 11: env CC=/opt/developerstudio12.*/bin/cc \ SUNWSPROBASE=/opt/developerstudio12.* \ PKGSRC_COMPILER=sunpro \ ./bootstrap --abi=64 pkgsrc defaults to finding the Sun compiler in /opt/SUNWspro. If you use a different prefix, pass SUNWSPROBASE in the environment to bootstrap. If 'cc' is not in your path, pass CC as well. So, to build 64-bit Sun compiler bootstrap with a non-standard install: env CC=/opt/studio12/SUNWspro/bin/cc \ SUNWSPROBASE=/opt/studio12/SUNWspro \ ./bootstrap --abi=64 When bootstrap is finished your default mk.conf will contain ABI and SUNWSPROBASE so you will not need to set these variables again. Common problems --------------- Sometimes, when using libtool, /bin/ksh crashes with a segmentation fault. The workaround is to use another shell for the configure scripts, for example by installing shells/bash and adding the following lines to your mk.conf: CONFIG_SHELL= ${LOCALBASE}/bin/bash WRAPPER_SHELL= ${LOCALBASE}/bin/bash Then, rebuild the devel/libtool-base package.