pkgsrc/bootstrap/README.Solaris

237 lines
8.1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$NetBSD: README.Solaris,v 1.28 2022/04/27 17:43:34 nia 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 Joyents 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.joyent.com/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.