Thursday, June 14, 2018

GNU/Solaris

Since a few months or perhaps almost a couple of years, I've been trying to learn how to manually update a few software from an ordinary Solaris 11.3 GA. That's because even if I had a contract support I wouldn't have all the latest software versions I would like to use on my Solaris system.

Of course, that's not the Solaris main goals by nowadays as currently advertised. Nevertheless, against the vision one should get another system as a front-end to Solaris, I still prefer to also use Solaris as my front-end system because I also very much appreciate all the potential that Solaris has to offer in this area as well. But for that purpose I have to manually update several software to more current versions in order to keep pace with the modern world and natural evolution. It's true that Solaris 11.4 is promising a somewhat better catch-up with this, but still it doesn't seem to be among its main goals, of course! Solaris is huge and specially fitted to big-iron SPARC systems and I totally agree with this while I'm greatly delighted I still could enjoy it on my low-end toy x86_64 system.

SAFE HARBOUR / DISCLAMER
Please, note that I mean no Licenses, Rights or Copyright infringement at all in what I post here. It's just that I appreciate so much Solaris that I'd dream of (as if it were possible) having the best of many worlds merged on a single system. For instance, I would dream of something called GNU/Solaris somewhat as presented on Linux & GNU and somewhat in the sense of GNU's What's in a Name.

Thursday, June 7, 2018

Building libxslt 1.1.32


The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../libxslt-1.1.32.tar.gz
...

$ cd libxml2/libxslt-1.1.32-32

$ source ../setenv-1.1.32 32

Configuration file [version 4]: /stage/build/libxslt/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/libxslt/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/libxslt/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu99

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-1.1.32 32

For IPS package:

# gmake DESTDIR=/stage/prototype/libxslt/1.1.32/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@libxslt-1.1.32


Building libxml2 2.98

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../libxml2-2.9.8.tar.gz
...

$ cd libxml2/libxml2-2.9.8-32

$ source ../setenv-2.9.8 32

Configuration file [version 4]: /stage/build/libxml2/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/libxml2/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/libxml2/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu99

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-2.9.8 32

For IPS package:

# gmake DESTDIR=/stage/prototype/libxml2/2.9.8/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@libxml2-2.9.8


Building GNU libunistring 0.9.10

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../libunistring-0.9.10.tar.gz
...

$ cd libunistring/libunistring-0.9.10-32

$ source ../setenv-0.9.10 32

Configuration file [version 4]: /stage/build/libunistring/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/libunistring/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/libunistring/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-0.9.10 32

For IPS package:

# gmake DESTDIR=/stage/prototype/libunistring/0.9.10/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@libunistring-0.9.10


Building GNU libiconv 1.15

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../libiconv-1.15.tar.gz
...

$ cd libiconv/libiconv-1.15-32

$ source ../setenv-1.15 32

Configuration file [version 4]: /stage/build/libiconv/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/libiconv/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/libiconv/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-1.15 32

For IPS package:

# gmake DESTDIR=/stage/prototype/libiconv/1.15/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@libiconv-1.15


NOTE
This build is somewhat tricky because it has a cyclic dependency on GNU gettext, which depends back on GNU libiconv. One way to solve the issue is to build GNU libiconv first using --without-libintl-prefix, then GNU gettext and finally GNU libiconv once more using --with-libintl-prefix=/opt/gnu. But before getting to GNU gettext, one should pass by GNU libunistring, GNU libxml2 and perhaps ncurses.

Building GNU gperf 3.1

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../gperf-3.1.tar.gz
...

$ cd gperf/gperf-3.1-32

$ source ../setenv-3.1 32

Configuration file [version 4]: /stage/build/gperf/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/gperf/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/gperf/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-3.1 32

For IPS package:

# gmake DESTDIR=/stage/prototype/gperf/3.1/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@gperf-3.1


Buidling GNU readline 5.1

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../readline-5.1.tar.gz
...

$ cd readline/readline-5.1-32

$ source ../setenv-5.1 32

Configuration file [version 4]: /stage/build/readline/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/readline/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/readline/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-5.1 32

For IPS package:

# gmake DESTDIR=/stage/prototype/readline/5.1/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@readline-5.1


Tuesday, June 5, 2018

Building SQLite 3.24.0

I'm updating my SQLite to the latest version as by the time of this writing. The last time I did that (on July 2017, hence almost 1 year ago) I was able to build version 3.19.3. This time I'm building version 3.24.0. Just to make things more interesting I'm building it on an even older system, a 32-bits Solaris 11 Express SRU-14, wow!

Roughly speaking the procedure is virtually the same, but there were minor hurdles which I still don't know if they are due to new version or the older system. Anyway, I document the workarounds so that it shall help build some knowledge on the matter for future attempts on building newer versions.

Thursday, May 31, 2018

Building Mercurial 4.6

On a world where the popular way is to adopt Linux and Git I still would select Solaris and Mercurial as more specific and powerful alternatives.

Solaris 11.3 GA offers Mercurial 3.4 (still straight through from Selenic Consulting) while Solaris 11 Express offered the even older ancient version 1.3.1. Of course, that's crazy for the present time as they both can be considered relics! So I set to instate an upgraded version all by myself instead of waiting or relying on the official distribution of Solaris, which understandably is not strongly focused on this particular matter.

My goal is to achieve the following even under a legacy Solaris 11 Express 32-bits!

$ hg --version
Mercurial Distributed SCM (version 4.6)
(see https://mercurial-scm.org for more information)

Copyright (C) 2005-2018 Matt Mackall and others
This is free software; see the source for copying conditions. 

There is NO warranty; not even for ... A PARTICULAR PURPOSE. (Wow!)

As usual, I begin by downloading the source-code tarball from the official web site and, once more, I perform the basic building strategy and general assumptions already detailed on one of my previous posts: Staged Building.

Wednesday, May 30, 2018

Installing Docutils 0.14

I've recently built and installed Python version 2.7.15 on Solaris 11 Express. Soon after I was trying to install the latest version of Mercurial (4.6 at the time of this writing), but on the last moments I've got to know the required dependency on Docutils, a Python utility which positions itself as:
"Docutils is an open-source text processing system for processing plaintext documentation into useful formats, such as HTML, LaTeX, man-pages, open-document or XML. It includes reStructuredText, the easy to read, easy to use, what-you-see-is-what-you-get plaintext markup language."
People seem to prefer, for obvious reasons I presume, the acronym ReST instead of the very long name ReStructuredText and I've visited the ReST Primer in order to know a little something about it and, well, OK, thank you. Anyway:
"This primer introduces the most common features of reStructuredText, but there are a lot more to explore. The Quick reStructuredText user reference is a good place to go next. For complete details, the reStructuredText Markup Specification is the place to go [1]."
To install it:

Tuesday, May 29, 2018

Building Python 2.7.15

On this post I'll document how to build the (up to this writing) latest version of Python version 2 series. But instead of doing it under a 64-bits Solaris 11.3 GA, this time I'll do it under a 32-bits Solaris 11 Express SRU-14. I'll do so because Python has become an important technology upon which many other depend and because running 32-bits software is still important in the 3rd world where most of people remain on a deprived situation and there's not enough discarded 64-bits hardware for them to reuse. Running a 32-bits Solaris on these legacy hardware is pure gold them. This way deprived people have a chance of getting latest Python on legacy hardware they can afford. It's true one could argue, for instance, that running FreeBSD or even Linux could be more appealing to this scenario, but that's not Solaris, which IMO still is overall better than both of them.

$ python
Python 2.7.15 (default, May 27 2018, 21:38:19)
[GCC 3.4.3 (csl-sol210-3_4-20050802)] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>>
 


$ cat /etc/release
            Oracle Solaris 11 Express snv_151a X86
     Copyright (c) 2010, Oracle ...  All rights reserved.
                  Assembled 04 November 2010


$ pkg info entire |grep Summary |sed 's/.*[\(]\(.*\)[\)].*/\1/'
Oracle Solaris 11 Express 2010.11 SRU 14


$ isainfo -v
32-bit i386 applications
        ssse3 ahf sse3 sse2 sse fxsr mmx cmov sep cx8 tsc fpu
 


Monday, May 28, 2018

Building pkg-config 0.29.2

The latest version, 0.29.2 (up to this writing), of the pkg-config tool from FreeeDesktop.org, is missing in Solaris 11 Express, but present on Solaris 11.3 GA under an IPS package of the same name, although outdated as to version 0.23. This small utility is extremely handy while building software from source-code and can also be integrated into GNU autoconf and automake utilities.

What surprised me was its dependency on at least glib-2.0. The bundled version of glib failed to build (at least under a 32-bits Solaris 11 Express). But that wasn't really an issue because since Solaris 11 Express, glib is part of Solaris 11 IPS repositories.

Building libffi 3.0.13

The library libffi (from Foreign Function Interface) is a required dependency at least for building Python. It's reported to be used on Ruby and OpenJDK among others as well. The last time I've checked its official website the latest version was 3.2.1, BUT somehow from minor version 1 and beyond, that is, all versions following the 3.0.x branch seems buggy and don't build under (32-bits) Solaris 11 Express, despite the alleged platform support. Nevertheless, it's true I could built version 3.2.1 under Solaris 11.3 GA both 32 and 64 bits, hence the buggy thing on Solaris 11 Express could be other outdate GNU tools as well. In fact, interestingly, Solaris 11.3 GA (since Solaris 11 Express) still packages version 3.0.9 on its official repositories. I don't know if version 3.0.13 brings any enhancement to Solaris, but it builds successfully and is presumably better so I otherwise use it.

NOTE
Version 3.2.1 (libffi.so.6.0.4) can be successfully built under Solaris 11.3 GA, either 32-bits or 64-bits. Hence I'm wondering if the 32-bits version built under Solaris 11.3 could be reused on a 32-bits Solaris 11 Express. AFAIK the only dependencies are on libc.so.1 and libgcc_s.so.1.

Sunday, May 27, 2018

Java 7 removal


By the way, after a lot of work updating Java, one may think of getting rid of legacy Java 7 in Solaris 11.3 GA, but I regret to inform that forcing this may cripple the system or at least lead to some unsupported configuration.

NOTE
If, on the other hand, an Ad Hoc Java installation has been made without IPS, then it may be easier to work out the removal as long as one assures no further dependencies would be broken.

Friday, May 25, 2018

Updating Java ad hoc

If one somehow depends on Java and it's not the case of a legacy dependency which will be insulated on an island system of yet very restricted subnetwork, then it will certainly need to get Java updated from time to time, because of security fixes and required new functionalities and support. But in addition, if the system isn't a more recent Solaris 11 where one can't or doesn't want IPS taking care of the update, then it will be necessary to perform an ad hoc Java update. That's probably the case with a Solaris 11 Express system or even Solaris 10, although I do highlight that in case of a Solaris 10, perhaps fortunately there's an additional option to using the old SVr4 package system to get the update in place in a presumably easier way.

Thursday, May 24, 2018

The Java Archive

One may get to the official The Java Archive (as I call it) download page which link is found to the bottom of the official Java SE Downloads page. As dully warned by Oracle the legacy artifacts are unsupported and security flawed:
 
"The Java Archive offers access to some of our historical Java releases. WARNING: These older versions of the JRE and JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production."

Updating Java via IPS

The world knows Java, for the good, and for the bad, whatever. Bottom line is one way or the other you're gonna need to handle its existence and pervasiveness. Fortunately, Java is Oracle's as well as Solaris is and thus there's an easier way of handling it via IPS, even if one doesn't have an agreement for having access to an IPS support repository. This post is about a more streamlined way of how to do it based on the article: How to Update Only Java on Your Oracle Solaris 11 System. For this post I assume just a publicly available Solaris 11.3 GA system.

Saturday, May 12, 2018

Terminator

Terminator (by Chris Jones) is a very convenient command-line GUI middleware. That's because it excels on multiplexing a single GUI window for multiple GNOME terminals. One could try to achieve similar results by simply running GNU screen with multiple (split terminal) regions within a single GNOME terminal but in the end it can't keep up with all the features of a specialized GUI software as Terminator. The main focus of GNU screen is not the GUI thing, but the underlying shell process thing.

Under Solaris 11.3, Terminator is dependent on Python 2 and GTK+ 2:

The command-line GUI

To achieve an efficient and functional UNIX command-line interface should be easy, but that's not always the case, because of the myriad of options and personal tastes, needless to say the many specific scenarios with unique requirements that may come into play.

On the seek for the "perfect terminal" I actually like to combine three things:

  • GNOME terminals
    The fundamental underlying GUI terminal.
     
  • Terminator
    The fundamental GUI window multiplexer.
     
  • GNU screen
    The fundamental underlying shell process preserver. 
     

Wednesday, April 11, 2018

Building zlib 1.2.11

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building.

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../zlib-1.2.11.tar.xz
...

$ cd zlib/zlib-1.2.11-64

$ source ../setenv 64

CONFIG_SHELL=/usr/bin/bash

CC=/usr/bin/gcc CFLAGS=-m64 -march=core2 -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m64 -march=core2 -std=gnu++03

LD=/usr/bin/ld LDFLAGS=-m64 -march=core2

PATH=/opt/gnu/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=x86_64-pc-solaris2.11 \
    --prefix=/opt/... \
    ...


$ gmake -j3

For IPS package:

$ gmake DESTDIR=/stage/prototype/zlib/1.2.11/64 install

For immediate use:

$ sudo gmake install
$ sudo zfs snapshot -r .../opt/...@zlib-1.2.11