Projects/KDE on Solaris/OpenSolaris

From KDE TechBase

KDE on OpenSolaris is like Projects/KDE on Solaris but with some extra setup steps. There are IPS packages available intermittently, when the KDE IPS package server is up (it's a VM at the end of a DSL line - see the archives of [email protected] to find it). Using OSOL as a build platform is possible, but you'll need at least one Nevada machine as well.

Effortless building of KDE4.2

1. Install OpenSolaris 2009.6
Make sure you have enough memory (~1.5G) and swap (~2G)
2. pfexec pkg install SUNWmercurial
3. hg clone http://solaris.bionicmutton.org/hg/kde4-specs-42
4a. If you want to use sun studio express, modify kde4-specs-42/specs/tools/vbox/install-deps accordingly:
44,45c44 < #PKGS="sunstudioexpress \ < PKGS="$SUNSTUDIOEXPRESS_DEPS \ --- > PKGS="sunstudioexpress \ modify kde4-specs-42/specs/tools/vbox/setup-be-remote accordingly: 28,38d27 < if ! -d /opt/SUNWspro ; then < info "spro" < if ! -f $spro ; then < echo "$spro not found" < exit 1 < fi < bunzip2 -c $spro | pfexec tar xf - < rm $spro < fi < < 49,50c38,39 < CC=/opt/SUNWspro/bin/cc < CXX=/opt/SUNWspro/bin/CC --- > CC=/usr/bin/cc > CXX=/usr/bin/CC 4b. If you want to use SunStudio12, set it up as described somewhere in the rest of the page
5. chmod +x ./setup-be-remote ./cbe-auto-1.7.0-rc1 ./install-deps ./install-deps ./setup-be-remote 6. Go for a walk, sleep, enjoy the life, send an ironic thank you to the pkg creators
7. Follow the instructions given in the output
8. Logout and login to your brand new KDE4.2(3) session*

(* this step is not really working ATM)

Installing KDE4 IPS packages

The current KDE4 IPS package server is the machine pkg in the domain bionicmutton.org; the IPS server runs on port 10000. This is a fairly standard IPS setup. The bionicmutton domain is Adriaan's and has been previously used to serve up SysV packages as well. The IPS server is in a VirtualBox at the end of a DSL line, so it's not necessarily up or fast. Eventually we will be moving to a more convention IPS repo like pending/ or contrib/.

First you need to set up a pkg authority to be able to get packages from bionicmutton at all. The first line creates the authority; the second fetches a catalog from it and the third checks that at least one of the packages can be found. Only the first is strictly necessary.

pfexec pkg set-authority \

   -O http://<host.domain>:10000/ bionicmutton

pfexec pkg refresh bionicmutton pkg search -r KDEgdm-integration

Remember that KDE includes setuid code. Remember that installing packages from untrusted and unsigned third parties is insecure. Remember that the KDE codebase is huge and not extensively tested on OpenSolaris yet. Consider whether you really want to install KDE4 on the machine you're working on. Then decide to do it anyway. You will need KDEbase-apps for things like Konqueror and Konsole, and KDEgdm-integration to be able to choose KDE as a session; other KDE packages may be installed as you need them (such as KDEpim, KDEgames, etc.). There is a KDEconsolidation package as well that pulls in everything we know of.

pfexec pkg install KDEbase-apps \

   KDEgdm-integration

After installing KDEgdm-integration, you should be able to log out and choose KDE as a session type from the login manager. Then you get a full KDE 4.1.3 desktop. On my machine with Radeon graphics it is very slow to start up and launch applications, but fairly fast after that. There is a discussion on performance tweaking on [email protected].

Please report problems to KDE bug tracker with Operating System set to "Solaris". Please check for duplicates [1] first.

Building KDE4 on OpenSolaris

It is possible to build and install KDE4 on an OpenSolaris machine. It requires much more setup than on a Nevada or Solaris 10 system. You can skip at least some of the CBE setup, but you will have to install lots of other tools and headers. You need the Nevada machine (a VirtualBox will do) because you cannot install SunStudio 12 and patches on OpenSolaris; the available compiler on OpenSolaris (Sun Studio Express) does not work for KDE4.

Installing Tools

Set up SunStudio 12 (not Studio Express) and patch it up as described on the Projects/KDE on Solaris page. Tar that up and then extract it on your OpenSolaris machine. This will give you /opt/SUNWspro. Leave that alone.

You will also need to install more development tools with the following package installation command: pfexec pkg install SUNWmercurial \

   SUNWgmake \
   SUNWcurl \
   SUNWgnu-automake-110 \
   SUNWaconf \
   SUNWgnome-common-devel 

And now you need more bits and pieces. The easiest way I've found it to install Studio Express because it drags in whatever it is, and then uninstall Studio Express because you don't really want it. pfexec pkg install sunstudioexpress pfexec pkg uninstall sunstudioexpress

Installing Headers

OpenSolaris ships without many of the headers you will need, instead packaging them separately (like the -devel packages in Linux, but with less-consistent naming). You will need at least the following: pfexec pkg install SUNWhea \

   SUNWaudh \
   SUNWsfwhea \
   SUNWxorg-headers

Installing Other Dependencies

Although the build will warn you about them much later, you should install the following dependencies (which will also pull in headers) now. pfexec pkg install SUNWmysql5 \

   SUNWlibmng \
   SUNWgnu-gettext \
   SUNWgnu-libiconv \
   SUNWiconv-unicode \
   SUNWperl-xml-parser \
   SUNWGtk \
   SUNWicu \
   SUNWgnome-media-mp3 \
   SUNWpostgr-83-libs \
   SUNWpostgr-83-devel \
   SUNWcups \
   SUNWlibtool \
   SUNWsvn \
   SUNWbison \
   SUNWflexlex \
   SUNWdoxygen \
   SUNWPython25

Configuring Paths

For consistency, let's set up some standard directories in your home directory. Then we need to set up your build environment -- in this example by adding to your .bash_profile, but you may want to do that differently.

mkdir ~/src ~/bin ~/packages cat >> ~/.bash_profile PATH=/opt/SUNWspro/bin:/opt/dtbld/bin:$HOME/bin:$PATH:/usr/sbin CC=/opt/SUNWspro/bin/cc CXX=/opt/SUNWspro/bin/CC MAKE=/usr/bin/gmake export CC CXX MAKE PATH

Don't worry that /opt/dtbld doesn't exist yet. We'll create it shortly. Note that we are adding the Studio12 paths to your environment and also ~/bin, which we will use to override some of the system path defaults.

Installing CBE Components

Next, we'll fetch sources for pkgtool and build it. The pkgtool program is used to build SysV packages and is part of the CBE (Common Build Environment). We won't be building all of the CBE, though. cd ~/src wget http://ovh.dl.sourceforge.net/sourceforge/pkgbuild/pkgbuild-1.3.3.tar.bz2 gtar xvjf pkgbuild-1.3.3.tar.bz2 cd pkgbuild-1.3.3 ./configure --prefix=/opt/dtbld

  1. Lots of output snipped

gmake

  1. Not much output snipped

pfexec gmake install

  1. More output snipped

pfexec chgrp bin /opt/dtbld/{bin,lib} Check if /opt/dtbld/bin/pkgtool will run; for instance pkgtool --help should do the trick. You can remove ~/src/pkgbuild-1.3.3* now. You need to fix up the groups on bin and lib or the next installations will fail -- suspended for administrative reasons.

Next up we will install some other CBE components, using KDE's copy of their specfiles. We need to get the KDE specfile repository for this, though: cd ~/src hg clone http://solaris.bionicmutton.org/hg/kde4-specs-dev cd kde4-specs-dev/specs gmake CBEcmake CBEyasm This will build and install cmake 2.6.2 and yasm into /opt/dtbld. The cmake is newer than what CBE 1.7.0 will deliver; yasm is the same as CBE yasm.

Installing the Rest

You will need to put some symlinks into your ~/bin (or switch around your PATH, but I think using symlinks is safer). There is a target check-version that will check the versions of installed components and what's in your path and print out a report. Something like this:

$ make check-version ! $AUTOMAKE is unset and automake is not in your PATH. ! Make sure an automake is available (CBEautomake). ! install is not GNU install; make sure GNU install ! is in your path and can be called as "install" ! System will probably not compile properly. ! hit ^C now to abort compilation.

It's a good idea to listen to what check-version prints, because it will save you from mysterious compile failures much later. To solve typical problems, we add symlinks in ~/bin as follows:

cd ~/bin ln -s `which automake-1.10` automake ln -s `which aclocal-1.10` aclocal ln -s `which ginstall` install ln -s `which gmake` make for i in autoconf autoheader autom4te autoreconf do

   ln -s `which $i` $i

done

Configuring the Build

All of the build action happens in ~/src/kde4-specs-dev/specs, and packages and other build things happen in ~/packages; the latter is configurable through pkgtool's ~/.pkgtoolrc and the former is where you checked out the sources. You still need to configure the build to make it an OpenSolaris build instead of a regular one; the difference is: - A regular build builds all of the dependencies in /opt/foss, including many duplicates of packages already installed on the system. - An OSOL build uses as many of the installed system packages as is feasible.

To configure for OSOL, do the following: cd ~/src/kde4-specs-dev/specs cat > Makefile.config PKGTOOL_ARGS=--without-64 --with-osol This suppresses 64-bit builds (of limited use if your interest is only KDE, which is going to be built in 32-bit mode anyway) and changes the dependencies to OSOL style. For documentation on what can go in Makefile.config, see the Makefile.

Now do a test build of a single package, to see if things work a little: make FOSShier

Building KDE in Four Big Steps

To break down the build into a few somewhat manageable steps, we distinguish Qt, KDEgdm-integration, BOOST and KDEconsolidation. Build them in turn: cd ~/src/kde4-specs-dev/specs make FOSSqt make KDEgdm-integration make FOSSboost make KDEconsolidation Those will pull in the dependencies they need one-by-one. It can take a long time to download and build it all; count on about a day on a modern desktop. Look in Makefile.templates for other interesting targets.

Creating KDE4 IPS packages

If you want to create your own IPS packages (in order to test them before contributing them to OpenSolaris contrib repo eventually, maybe), you will need to follow a series of steps:

Enabling your own IPS repo

You will need a IPS repository running in your machine up & running: pfexec svccfg -s pkg/server "setprop pkg/port=10000" pfexec svcadm refresh pkg/server pfexec svcadm enable pkg/server Once you have your own IPS repo listening in localhost, you will need to recognize it as a valid authority from where to install packages: pfexec pkg set-authority -O http://localhost:10000 localrepo You can check that it's configured properly if it appears as a valid IPS repo: pkg authority

  1. Some other repos

localrepo http://localhost:10000/

Creating the IPS packages and commiting them to the repo

To create the IPS packages, you can use the ips-$PACKAGE target of make, using the following format (for the case of FOSShier): make ips-FOSShier One tool you can use to find out what the direct or indirect dependencies are for a package is 'show-missing' which is a target in tools/Makefile.admin: make -f tools/Makefile.admin show-missing TARGET=KDElibs

Troubleshooting

OSOL System Issues

Swap - If the build dies claiming fbe is out of free space, it is likely that your swap is too small. About 1 Gb should be fine, but 2 Gb is recommended. To set your swap size to 2 Gb, execute the following as root, replacing 'rpool/swap' with the location of your swap partition, given by 'zfs list':

pfexec zfs set volsize=2G rpool/swap

Reboot afterward, as the change may not register immediately with the kernel.

Qt Jambi

Ant - If the system claims it can't find ant, or CBEant then you need to install JDS-CBE from http://opensolaris.org/os/project/jds/contributing/building/ . The ANT_HOME is often not set for you, so set it to the following in your shell profile:

export ANT_HOME=/opt/jdsbld

java.lang.OutOfHeapSpaceError - Sometimes the given heap space for the XSLT generation at the beginning of the compile isn't enough and the build stops. Add the following to your .bashrc or shell profile to increase to a suitable size of 256m:

export ANT_OPTS=-Xmx256m