Hi Alain, I don't the knowledge to help you bootstrap new versions of GHC and create the PKGSRC, but I'm really missing a package with a more recent version of GHC for SmartOS. So I really appreciate the effort you are making.
You can definitely count me in as a tester for the GHC 8.0.2 package when you get there. On Mon, Jul 24, 2017 at 10:52 PM, Alain O'Dea <alain.o...@gmail.com> wrote: > On Sun, Jul 23, 2017 at 11:49 AM Alain O'Dea <alain.o...@gmail.com> wrote: > >> On Sat, Jul 22, 2017 at 5:01 PM Alain O'Dea <alain.o...@gmail.com> wrote: >> >>> On Sun, Jul 9, 2017 at 12:25 AM Alain O'Dea <alain.o...@gmail.com> >>> wrote: >>> >>>> On Sat, Jul 8, 2017 at 2:23 PM Alain O'Dea <alain.o...@gmail.com> >>>> wrote: >>>> >>>>> On Sat, Jul 8, 2017 at 10:41 AM Alain O'Dea <alain.o...@gmail.com> >>>>> wrote: >>>>> >>>>>> I've got the build from GHC 7.6.3 in PKGSRC thru GHC 7.10.3 up to GHC >>>>>> 8.0.2 (latest stable) working with manual builds. >>>>>> >>>>>> I've been working in a PKGSRC 2017Q1 sandbox on the latest pkgbuild >>>>>> image to make it package-friendly. >>>>>> >>>>>> Here's my plan: >>>>>> 1. Create wip/ghc7x which builds GHC 7.10.3 by build depending on >>>>>> lang/ghc >>>>>> 2. Create wip/ghc8 which builds GHC 8.0.2 by build depending on >>>>>> wip/ghc7x >>>>>> >>>>>> I ran into an odd issue with the GHC 7.10.3 I built. It is a 64-bit >>>>>> binary, but is somehow linked against some 32-bit libraries (ncurses, >>>>>> iconv, gmp) and won't run. >>>>>> >>>>>> [root@ghc-builder-x86-64-smartos ~]# ghc >>>>>> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF >>>>>> class: ELFCLASS32 >>>>>> Killed >>>>>> [root@ghc-builder-x86-64-smartos ~]# ldd >>>>>> /opt/local/lib/ghc-7.10.3/bin/ghc >>>>>> libncurses.so.6 => /opt/local/lib//libncurses.so.6 - >>>>>> wrong ELF class: ELFCLASS32 >>>>>> libiconv.so.2 => /opt/local/lib//libiconv.so.2 - >>>>>> wrong ELF class: ELFCLASS32 >>>>>> libgmp.so.10 => /opt/local/lib//libgmp.so.10 - wrong ELF >>>>>> class: ELFCLASS32 >>>>>> libm.so.2 => /usr/lib/amd64/libm.so.2 >>>>>> librt.so.1 => /usr/lib/amd64/librt.so.1 >>>>>> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >>>>>> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >>>>>> libssp.so.0 => /usr/lib/amd64/libssp.so.0 >>>>>> libssp.so.0 (LIBSSP_1.0) => (version not found) >>>>>> libc.so.1 => /usr/lib/amd64/libc.so.1 >>>>>> libgcc_s.so.1 => /usr/lib/64/libgcc_s.so.1 >>>>>> >>>>> >>>>> I also found this: >>>>> => Checking for work-directory references in ghc-7.10.3b >>>>> ERROR: /opt/local/lib/ghc-7.10.3/settings: ("readelf command", >>>>> "/home/pbulk/build/wip/ghc7x/work/.tools/bin/readelf"), >>>>> ERROR: *** The above files still have references to the build >>>>> directory. >>>>> ERROR: This is possibly an error that should be fixed by unwrapping >>>>> ERROR: the files or adding missing tools to the package makefile! >>>>> *** Error code 1 >>>>> >>>>> It originates in GHC's aclocal.m4. It is somehow picking up the >>>>> sandbox tools instead of the platform tools. This came up unrelated to >>>>> SmartOS on #ghc as well last night and I regrettably missed the >>>>> opportunity >>>>> to engage their core team. >>>>> >>>>> I fix it directly by including a patch for settings.in which >>>>> disregards the ar, ld, and readelf detected by their autoconf and put in >>>>> correct /opt/local/bin (ar and readelf) or /usr/bin (only for ld) >>>>> equivalents. I also fix the libssp link errors seen in compiling client >>>>> code with GHC by including -lssp in the linker options configs in >>>>> settings.in. >>>>> >>>>> PKGSRC support for GHC 7.10.3 is pretty close to releasable now. The >>>>> pkgbuild image is an outstanding workbench for this, so thank you Jonathan >>>>> for putting that together. >>>>> >>>> >>>> Still getting broken binaries out of the build: >>>> >>>> [root@ghc-builder-x86-64-smartos /opt/local]# ghci >>>> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF class: >>>> ELFCLASS32 >>>> Killed >>>> [root@ghc-builder-x86-64-smartos /opt/local]# ghc >>>> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF class: >>>> ELFCLASS32 >>>> Killed >>>> [root@ghc-builder-x86-64-smartos /opt/local]# ldd >>>> /opt/local/lib/ghc-7.10.3/bin/ghc >>>> libssp.so.0 => /usr/lib/amd64/libssp.so.0 >>>> libssp.so.0 (LIBSSP_1.0) => (version not found) >>>> libncurses.so.6 => /opt/local/lib//libncurses.so.6 - >>>> wrong ELF class: ELFCLASS32 >>>> libiconv.so.2 => /opt/local/lib//libiconv.so.2 - wrong >>>> ELF class: ELFCLASS32 >>>> libgmp.so.10 => /opt/local/lib//libgmp.so.10 - wrong ELF >>>> class: ELFCLASS32 >>>> libm.so.2 => /usr/lib/amd64/libm.so.2 >>>> librt.so.1 => /usr/lib/amd64/librt.so.1 >>>> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >>>> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >>>> libc.so.1 => /usr/lib/amd64/libc.so.1 >>>> libgcc_s.so.1 => /usr/lib/64/libgcc_s.so.1 >>>> >>>> The ghc binary looks fine in the pkgbuild work .destdir: >>>> --<root@pkgbuild>-(/data/chroot/dev-2017Q1-x86_64)-</ >>>> home/pbulk/build/wip/ghc7x/work>-- >>>> -> ldd .destdir/opt/local/lib/ghc-7.10.3/bin/ghc >>>> libssp.so.0 => /opt/local/gcc49/x86_64-sun- >>>> solaris2.11/lib/amd64/libssp.so.0 >>>> libncurses.so.6 => /opt/local/lib//libncurses.so.6 >>>> libiconv.so.2 => /opt/local/lib//libiconv.so.2 >>>> libgmp.so.10 => /opt/local/lib//libgmp.so.10 >>>> libm.so.2 => /usr/lib/amd64/libm.so.2 >>>> librt.so.1 => /usr/lib/amd64/librt.so.1 >>>> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >>>> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >>>> libc.so.1 => /usr/lib/amd64/libc.so.1 >>>> libgcc_s.so.1 => /opt/local/gcc49/x86_64-sun- >>>> solaris2.11/lib/amd64/libgcc_s.so.1 >>>> libumem.so.1 => /lib/64/libumem.so.1 >>>> >>>> I'm not sure why libcurses, libiconv, and libgmp come out wrong, while >>>> libm, librt, libdl, libpthread, libc, and libgcc_s all come out fine. I >>>> really have no idea why ldd shows a second libssp in the base-multiarch >>>> 17.1.0 zone I extracted /data/packages/SmartOS/2017Q1/ >>>> x86_64/All/ghc-7.10.3b.tgz into. >>>> >>>> I think it's an issue with how I'm building my sandbox. I'm using >>>> `run-sandbox 2017Q1-x86_64`. >>>> >>>> When I run my package on base-64 17.1.0, it appears to work. I can >>>> compile hello.hs: >>>> main = putStrLn "Hello, World" >>>> >>>> but ghci segfaults: >>>> [root@ghc-builder-x86-64-smartos /opt/local]# ghci >>>> GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help >>>> Segmentation Fault (core dumped) >>>> >>>> I ran ghci with truss and got this tail: >>>> /2: setcontext(0xFFFFFD7FFEEBE4B0) >>>> /2: Received signal #14, SIGALRM, in lwp_park() [caught] >>>> /2: siginfo: SIG#0 >>>> /2: lwp_park(0x00000000, 0) Err#91 ERESTART >>>> /2: lwp_sigmask(SIG_SETMASK, 0x00002000, 0x00000000, 0x00000000, >>>> 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF] >>>> /2: setcontext(0xFFFFFD7FFEEBE4B0) >>>> /1: Incurred fault #6, FLTBOUNDS %pc = 0x0432FE0C >>>> /1: siginfo: SIGSEGV SEGV_ACCERR addr=0x0432FE0C >>>> /1: Received signal #11, SIGSEGV [default] >>>> /1: siginfo: SIGSEGV SEGV_ACCERR addr=0x0432FE0C >>>> >>>> It's not clear what ghci is attempting when it segfaults. When I build >>>> manually external to PKGSRC it works. >>>> >>>> I wondering if the extra slash in the lib paths is causing grief. >>>> >>>> I have a branch with my WIP on it: >>>> https://github.com/AlainODea/pkgsrc-wip/blob/ao-ghc7x/ghc7x/Makefile >>>> >>> >>> New strategy. I took pkgsrc-wip/ghc as a basis (much cleaner) and used >>> it's bootstrap to build GHC 7.10.3. >>> >>> Still getting segfaults, but I have decent details documented: >>> https://gist.github.com/AlainODea/c9a1da84efc8e22e3ba637af8a3f53c2 >>> >>> I'm out of my depth here. I've tried some basic mdb hacking to figure >>> out what happened, but I'm not getting far with that. >>> >>> I think I have it located in foreignExportStablePtr, but I'm not sure. >>> >>> Has anyone seen seg faults in GHCi after building GHC on SmartOS >>> recently? >>> >> >> Confirmed. The 7.10.2 boot GHC at https://us-east.manta.joyent. >> com/pkgsrc/public/distfiles-local/ghc-7.10.2-boot-x86_64- >> unknown-solaris2.tar.xz is broken and unusable. I build GHC 7.10.3 >> successfully with PKGSRC GHC 7.6.3 and it works. >> >> I have a working Illumos-compatible x86_64 GHC 7.10.3 bindist. >> >> Here's how I built it: >> >> Get dependencies: >> >> ```bash >> pkgin update >> pkgin -y full-upgrade >> pkgin -y install build-essential ghc >> ``` >> >> Fix broken PKGSRC-installed GHC handling of SSP (append -lssp to its >> linker args): >> >> ```bash >> curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/ >> 2dc2142db60ea3597d2bc1d09c5b406d66cc34e3/ghc_settings.patch >> patch /opt/local/lib/ghc-7.6.3/settings ghc_settings.patch >> ``` >> >> Get GHC 7.10.3b source distribution: >> >> ```bash >> curl -OL https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3b-src. >> tar.xz.sig >> curl -OL https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3b-src.tar.xz >> gpg --verify ghc-7.10.3b-src.tar.xz.sig >> curl -OL https://alainodea.com/.well-known/97DB64AD.asc >> ``` >> >> Expect this output from the GPG verify (97DB64AD is Ben Gamari's PGP key): >> >> ```plain >> gpg: Signature made Tue Dec 29 10:20:42 2015 UTC using RSA key ID 97DB64AD >> gpg: Good signature from "Benjamin Gamari <b...@well-typed.com>" >> gpg: WARNING: This key is not certified with a trusted signature! >> gpg: There is no indication that the signature belongs to the >> owner. >> Primary key fingerprint: FFEB 7CE8 1E16 A36B 3E2D ED6F 2DE0 4D4E 97DB >> 64AD >> ``` >> >> There's a note coming on the haskell.org downloads page to clarify that >> Ben's key is the trusted key for this. Hopefully they'll also include a TLS >> verified link to his public key. >> >> Next step is to extract and build GHC 7.10.3: >> >> ```bash >> tar xf ghc-7.10.3b-src.tar.xz >> cd ghc-7.10.3/ >> curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/ >> c2b3a19b0e11d8287336f61b016db0072ddebc92/ghc_7.10.3_settings.in.patch >> patch settings.in ghc_7.10.3_settings.in.patch >> patch settings ghc_settings.patch >> pushd utils/lndir >> gcc lndir.c -o /opt/local/bin/lndir >> popd >> ./configure --prefix /opt/local --disable-ld-override >> gmake >> gmake binary-dist # you could stop here and use this to make a PKGSRC GHC >> 7.10.3 for further bootstrapping >> gmake install >> ``` >> >> Completing the step above and binary packaging it is the smart thing I >> think. The advantage of this is that it doesn't require introducing another >> bootstrap compiler. It just uses the binary GHC 7.8.3 in PKGSRC already. >> I'm going to try to make wip/ghc use that PKGSRC ghc binary as the >> bootstrap and bypass the distfiles-local issue. >> >> Optional next step is to extract and build GHC 8.0.2, but I think it >> would be better to complete the above and get GHC 7.10.3 into PKGSRC as a >> binary as it has a clean story and a less insane build: >> >> ```bash >> tar xf ghc-8.0.2-src.tar.xz >> cd ghc-8.0.2/ >> curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/ >> c2b3a19b0e11d8287336f61b016db0072ddebc92/ghc_8.0.2_settings.in.patch >> ./configure --prefix /opt/local --disable-ld-override >> gmake >> gmake binary-dist >> gmake install >> ``` >> > > Caveat: there's almost certainly a better way a PKGSRC expert would know > to do what I'm suggesting below. Particularly, I think there has to be a > way to get wip/ghc to get its bootstrap from PKGSRC rather than a external > distfile. > > https://pkgsrc.joyent.com/packages/SmartOS/2017Q2/ > multiarch/All/ghc-7.6.3nb11.tgz can be extracted and repackaged as > https://us-east.manta.joyent.com/pkgsrc/public/distfiles-local/ghc-7.10.2- > boot-x86_64-unknown-solaris2.tar.xz and the wip/ghc in PKGSRC WIP should > work after distinfo is updated with the appropriate hashes. > > Effectively this means there is no special bootstrap compiler, it's just > an older PKGSRC binary whose provenance is known. > > This is achievable by unpacking and repacking the latest PKGSRC binary ghc: > > ```bash > curl -OL https://pkgsrc.joyent.com/packages/SmartOS/2017Q2/ > multiarch/All/ghc-7.6.3nb11.tgz > boot_work=$(mktemp --directory) > boot_dist=$(mktemp --directory) > cd ${boot_work} > ar xf ghc-7.6.3nb11.tgz > tar xf ghc-7.6.3nb11.tmp.tgz > cd lib > mv ghc-7.6.3{,-boot} > tar cJf ${boot_dist}/ghc-7.10.2-boot-x86_64-unknown-solaris2.tar.xz > ``` > > And because it's Manta you can use SnapLinks (mln) to create links > (negligible storage cost) per GHC version you want to package. Any GHC > 7.10.* is good for GHC 7.10.* through GHC 8.2.1 and hopefully will hang on > for a good while. No need to duplicate data. > > For example, you want wip/ghc to build GHC 8.0.2 so you SnapLink 8.0.2 to > 7.10.3 (which you would regrettably need to build and upload unless there's > a trick for pulling it direct from PKGSRC): > > ```bash > mln ~~/public/distfiles-local/ghc-{8.0.2,7.10.3}-boot-x86_64- > unknown-solaris2.tar.xz > ``` > > From there on all versions of GHC are conceivably open for PKGSRC > packaging. The obvious candidate being GHC 8.0.2 which is a stable release > broadly supported by community tools. > > *smartos-discuss* | Archives > <https://www.listbox.com/member/archive/184463/=now> > <https://www.listbox.com/member/archive/rss/184463/27132202-899a9698> | > Modify > <https://www.listbox.com/member/?&> > Your Subscription <http://www.listbox.com> > -- Danny Navarro | http://dannynavarro.net ------------------------------------------- smartos-discuss Archives: https://www.listbox.com/member/archive/184463/=now RSS Feed: https://www.listbox.com/member/archive/rss/184463/25769125-55cfbc00 Modify Your Subscription: https://www.listbox.com/member/?member_id=25769125&id_secret=25769125-7688e9fb Powered by Listbox: http://www.listbox.com