Pkgsrc on Ci20 Creator (v2) board

Ci20 is a great little board that I got recently since I wanted to experiment with a new architecture (mips)  Quick specifications are here :

SoC Ingenic JZ4780
CPU Dual 1.2GHz XBurst MIPS32 little endian
Caches 32kI + 32kD per core, 512K shared L2
RAM 1Gbyte DDR3
NAND 8 Gbyte

More detailed information is here https://elinux.org/CI20_Hardware  and here https://elinux.org/MIPS_Creator_CI20

The  board comes with Debian Linux mips  7.5  preinstalled and a custom kernel

Linux mipsbox 3.0.8-00847-g2e5af7d #1 SMP PREEMPT Wed Jun 24 10:10:52 BST 2015 mips GNU/Linux

There are possibilities to flash the NAND storage with newer images available from here https://elinux.org/CI20_Distros but I wanted to keep the stock kernel because of the custom drivers for the GPU that support mplayer hw-playback.

Before getting to work with the PKGSRC on Linux I wanted to build natively a newer GCC compiler (stock comes with GCC 4.6.3) So I have decided to give the 7.2.0 a try and build it natively.

Please note that I have used the –program-suffix=-4.6  and /usr/include/c++/4.6 in the configure – this is not correct but a dirty hack to overwrite the current GCC 4.6 files in Debian (it is a nightmare to remove the GCC related stuff as it has many dependencies)  It works quite well :)

 

Download GCC to the Ci20 
# wget https://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.gz
# tar -zxvf gcc-7.2.0.tar.gz
# ./configure -v --enable-languages=c,c++,objc,obj-c++ --prefix=/usr
 --program-suffix=-4.6 --enable-shared --enable-linker-build-id 
 --with-system-zlib --libexecdir=/usr/lib --without-included-gettext
 --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6
 --libdir=/usr/lib --enable-nls --with-sysroot=/ 
 --enable-clocale=gnu --enable-libstdcxx-debug
 --enable-libstdcxx-time=yes --enable-gnu-unique-object 
 --enable-plugin --with-mips-plt --with-arch-32=mips2 
 --with-tune-32=mips32 --enable-targets=all --with-arch-64=mips3
 --with-tune-64=mips64 --enable-checking=release 
 --build=mipsel-linux-gnu --host=mipsel-linux-gnu
 --target=mipsel-linux-gnu

It took approx 30 hours to build on my Ci20, be patient (also maybe
a good idea is to create some swap just in case you would run out of
memory, I did mine on a USB drive) 

# mount /dev/sda1 /mnt/usb
# dd if=/dev/zero of=/mnt/usb/swapfile bs=1M count=102
# chmod 600 /mnt/usb/swapfile 
# mkswap /mnt/usb/swapfile
# swapon /mnt/usb/swapfile 

Finally build GCC 

# make
# make install

Once we have the GCC 7.2 installed it will be in the old GCC 4.6 directory structure, but it does not matter

root@mipsbox:/usr/include/c++/4.6# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/mipsel-linux-gnu/7.2.0/lto-wrapper
Target: mipsel-linux-gnu
Configured with: ./configure -v --enable-languages=c,c++,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-mips-plt --with-arch-32=mips2 --with-tune-32=mips32 --enable-targets=all --with-arch-64=mips3 --with-tune-64=mips64 --enable-checking=release --build=mipsel-linux-gnu --host=mipsel-linux-gnu --target=mipsel-linux-gnu
Thread model: posix
gcc version 7.2.0 (GCC)

Now lets go and bootstrap pkgsrc on the Ci20 ! I have decided to keep the pkgsrc sources on a separate USB flash drive and the /usr/pkg on the NAND flash.

root@mipsbox:/disk# ftp ftp.netbsd.org
Connected to ftp.netbsd.org.
220 ftp.NetBSD.org FTP server (NetBSD-ftpd 20110904) ready.
Name (ftp.netbsd.org:root): ftp
331 Guest login ok, type your name as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pas
Passive mode on.
ftp> cd pub
250 CWD command successful.
ftp> cd pkgsrc
250-
 Please read the file README
 it was last modified on Tue Nov 18 09:53:20 2008 - 3299 days ago
250 CWD command successful.
ftp> cd pkgsrc-2017Q3
250 CWD command successful.
ftp> get pkgsrc.tar.gz

Once it is downloaded, extract it on the USB drive and set symlinks

# pwd 
/mnt/usb
# tar -zxvf pkgsrc.tar.gz
# ln -s /mnt/usb/pkgsrc /usr/pkgsrc

and move onto the bootstrapping, also read the following https://wiki.netbsd.org/pkgsrc/how_to_use_pkgsrc_on_linux/

# echo "export SH=/bin/bash" >> /root/.bashrc

Relogin to root again and continue the bootstrap. The current bootstrap script does not understand the endianess of MIPS platforms, thus fails to produce correct arch type as mipseb or mipsel (Ci20 is mipsel)

I have produced a patch bootstrap that works for the Ci20

*** patched-bootstrap 2017-12-03 22:06:12.960991623 +0100
--- bootstrap 2017-10-23 03:00:23.000000000 +0200
***************
*** 1,6 ****
 #! /bin/sh
 
! # $NetBSD: bootstrap,v 1.243.4.1 2017/10/31 15:53:48 spz Exp $
 #
 # Copyright (c) 2001-2011 Alistair Crooks <agc@NetBSD.org>
 # All rights reserved.
--- 1,6 ----
 #! /bin/sh
 
! # $NetBSD: bootstrap,v 1.244 2017/10/22 19:29:20 bsiegert Exp $
 #
 # Copyright (c) 2001-2011 Alistair Crooks <agc@NetBSD.org>
 # All rights reserved.
***************
*** 691,697 ****
 need_awk=yes
 need_sed=yes
 set_opsys=yes
! machine_arch=mipsel
 check_compiler=yes
 if [ `uname -r` -lt 6 ]; then
 # IRIX 5's mkdir bails out with an error when trying to create with the -p
--- 691,697 ----
 need_awk=yes
 need_sed=yes
 set_opsys=yes
! machine_arch=mipseb
 check_compiler=yes
 if [ `uname -r` -lt 6 ]; then
 # IRIX 5's mkdir bails out with an error when trying to create with the -p
***************
*** 720,727 ****
 case "$machine_arch" in
 i?86) machine_arch=i386 ;;
 ppc64le) machine_arch=powerpc64le ;;
! mips) machine_arch=mipsel 
! esac
 ;;
 Minix)
 root_group=operator
--- 720,726 ----
 case "$machine_arch" in
 i?86) machine_arch=i386 ;;
 ppc64le) machine_arch=powerpc64le ;;
! esac
 ;;
 Minix)
 root_group=operator
***************
*** 869,875 ****
 # "i386" can support 64-bit, e.g. SunOS, defaults to 32-bit.
 i386/64) abi=64 machine_arch=x86_64 ;;
 i386/*) abi=32 machine_arch=i386 ;;
- mips/*) abi=32 machine_arch=mipsel ;;
 # XXX: powerpc untested
 powerpc/64) abi=64 machine_arch=powerpc64 ;;
 powerpc/*) abi=32 machine_arch=powerpc ;;
--- 868,873 ----

After you patch the /usr/pkgsrc/bootstrap/bootstrap, you can run it and after 1 hour the pkgsrc will get bootstrapped successfully on the Ci20 Debian mipsel

# cd /usr/pkgsrc/bootstrap
# ./bootstrap

To bmake packages afterwards make sure you have the following directories in path/usr/pkg/bin and /usr/pkg/sbin

What I found however were these minor issues during bmake build afterwards

/usr/pkgsrc/deve/readline

root@mipsbox:/usr/pkgsrc/devel/readline# /usr/pkg/bin/bmake 
=> Bootstrap dependency digest>=20010302: found digest-20160304
===> Skipping vulnerability checks.
WARNING: No /usr/pkg/pkgdb/pkg-vulnerabilities file found.
WARNING: To fix run: `/usr/pkg/sbin/pkg_admin -K /usr/pkg/pkgdb fetch-pkg-vulnerabilities'.
=> Checksum SHA1 OK for readline-7.0.tar.gz
=> Checksum RMD160 OK for readline-7.0.tar.gz
=> Checksum SHA512 OK for readline-7.0.tar.gz
===> Installing dependencies for readline-7.0
=> Tool dependency libtool-base>=2.4.2nb9: found libtool-base-2.4.6
=> Tool dependency nbpatch-[0-9]*: found nbpatch-20151107
=> Build dependency cwrappers>=20150314: found cwrappers-20170611
===> Overriding tools for readline-7.0
===> Extracting for readline-7.0
===> Patching for readline-7.0
=> Applying pkgsrc patches for readline-7.0
===> Creating toolchain wrappers for readline-7.0
===> Configuring for readline-7.0
=> Modifying GNU configure scripts to avoid --recheck
=> Replacing config-guess with pkgsrc versions
=> Replacing config-sub with pkgsrc versions
=> Replacing install-sh with pkgsrc version
checking build system type... mipsel-debian-linux-gnu
checking host system type... mipsel-debian-linux-gnu

Beginning configuration for readline-7.0 for mipsel-debian-linux-gnu

checking whether make sets $(MAKE)... yes
checking for mipsel-debian-linux-gcc... /usr/bin/gcc
checking whether the C compiler works... no
configure: error: in `/disk/pkgsrc/devel/readline/work/readline-7.0':
configure: error: C compiler cannot create executables
See `config.log' for more details
*** Error code 77

Stop.
bmake[1]: stopped in /usr/pkgsrc/devel/readline
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/devel/readline

The problem is during the following configure test (lets check the cofig.log)

root@mipsbox:/usr/pkgsrc/devel/readline# less /disk/pkgsrc/devel/readline/work/readline-7.0/config.log
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by readline configure 7.0, which was
generated by GNU Autoconf 2.69. Invocation command line was

$ ./configure --prefix=/usr/pkg --build=mipsel-debian-linux --host=mipsel-debian-linux --infodir=/usr/pkg/info --mandir=/usr/pkg/man
<--snip-->
gcc version 7.2.0 (GCC) 
configure:2792: $? = 0
configure:2781: /usr/bin/gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:2792: $? = 1
configure:2781: /usr/bin/gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'; did you mean '--version'?
gcc: fatal error: no input files
compilation terminated.
configure:2792: $? = 1
configure:2812: checking whether the C compiler works
configure:2834: /usr/bin/gcc -O2 -D_FORTIFY_SOURCE=2 -Wl,-R/usr/pkg/lib conftest.c >&5
as: Invalid transform rule: l:termcap:
configure:2838: $? = 1
configure:2876: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "readline"
| #define PACKAGE_TARNAME "readline"
| #define PACKAGE_VERSION "7.0"
| #define PACKAGE_STRING "readline 7.0"
| #define PACKAGE_BUGREPORT "bug-readline@gnu.org"
| #define PACKAGE_URL ""
| /* end confdefs.h. */
| 
| int
| main ()
| {
| 
| ;
| return 0;
| }
configure:2881: error: in `/disk/pkgsrc/devel/readline/work/readline-7.0':
configure:2883: error: C compiler cannot create executables
See `config.log' for more details

What worked however was going to the work dir of readline and doing the following

root@mipsbox:# cd /usr/pkgsrc/devel/readline/work/readline-7.0
root@mipsbox:# ./configure --prefix=/usr/pkg 
root@mipsbox:# echo "readline-7.0" > /usr/pkgsrc/devel/readline/work/.configure_done
root@mipsbox:# cd /usr/pkgsrc/devel/readline/work/readline-7.0/
root@mipsbox:# /usr/pkg/bin/bmake 
root@mipsbox:# echo "readline-7.0" > /usr/pkgsrc/devel/readline/work/.build_done
root@mipsbox:# mkdir -p work/.destdir/usr/pkg/info
root@mipsbox:# touch work/.destdir/usr/pkg/info/history.info
root@mipsbox:# touch work/.destdir/usr/pkg/info/readline.info
root@mipsbox:# touch work/.destdir/usr/pkg/info/rluserman.info
root@mipsbox:# touch work/.destdir/usr/pkg/lib/libhistory.la
root@mipsbox:# touch work/.destdir/usr/pkg/lib/libreadline.la
root@mipsbox:# mkdir -p work/.destdir/usr/pkg/man/man3
root@mipsbox:# touch work/.destdir/usr/pkg/man/man3/readline.3
root@mipsbox:# cd /usr/pkgsrc/devel/readline
root@mipsbox:# /usr/pkg/bin/bmake install 

Same approach as above worked for /usr/pkgsrc/lang/python27

root@mipsbox:/usr/pkg/bin# ./python2.7
Python 2.7.14 (default, Dec 3 2017, 18:36:28) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Here is the list of packages that I have made so far

drwxr-xr-x 2 root root 728 Dec 3 20:00 bigreqsproto-1.1.2
drwxr-xr-x 2 root root 728 Dec 2 15:07 bmake-20150505
drwxr-xr-x 2 root root 800 Dec 2 15:07 bootstrap-mk-files-20170802
drwxr-xr-x 2 root root 800 Dec 3 22:07 bzip2-1.0.6nb1
drwxr-xr-x 2 root root 656 Dec 2 15:01 cwrappers-20170611
drwxr-xr-x 2 root root 728 Dec 3 19:56 damageproto-1.2.1
drwxr-xr-x 2 root root 800 Dec 3 22:07 db4-4.8.30
drwxr-xr-x 2 root root 728 Dec 2 15:31 digest-20160304
drwxr-xr-x 2 root root 944 Dec 3 21:32 docbook-xml-4.5
drwxr-xr-x 2 root root 872 Dec 3 21:32 docbook-xsl-1.79.1nb2
drwxr-xr-x 2 root root 728 Dec 3 19:48 dri2proto-2.8
drwxr-xr-x 2 root root 728 Dec 3 19:50 dri3proto-1.0
drwxr-xr-x 2 root root 728 Dec 3 19:55 fixesproto-5.0
drwxr-xr-x 2 root root 728 Dec 3 19:52 glproto-1.4.17
drwxr-xr-x 2 root root 728 Dec 3 19:54 inputproto-2.3.2
drwxr-xr-x 2 root root 728 Dec 2 15:35 kbproto-1.0.7
drwxr-xr-x 2 root root 1016 Dec 3 22:07 libffi-3.2.1nb4
drwxr-xr-x 2 root root 944 Dec 3 21:35 libgpg-error-1.27
drwxr-xr-x 2 root root 728 Dec 2 15:32 libtool-base-2.4.6
drwxr-xr-x 2 root root 728 Dec 3 20:05 libXau-1.0.8
drwxr-xr-x 2 root root 728 Dec 3 20:07 libXdmcp-1.1.2
drwxr-xr-x 2 root root 728 Dec 3 19:47 libxml2-2.9.6
drwxr-xr-x 2 root root 872 Dec 3 22:07 mozilla-rootcerts-1.0.20170121nb6
drwxr-xr-x 2 root root 728 Dec 2 15:08 nawk-20121220nb1
drwxr-xr-x 2 root root 728 Dec 2 15:32 nbpatch-20151107
drwxr-xr-x 2 root root 728 Dec 3 11:02 pax-20080110nb2
drwxr-xr-x 2 root root 944 Dec 3 21:32 perl-5.26.0nb3
drwxr-xr-x 2 root root 728 Dec 2 15:35 pkgconf-1.3.5
-rw-r--r-- 1 root root 2170880 Dec 3 22:07 pkgdb.byfile.db
drwxr-xr-x 2 root root 944 Dec 2 15:30 pkg_install-20170419
drwxr-xr-x 2 root root 728 Dec 3 19:51 presentproto-1.1
drwxr-xr-x 2 root root 656 Dec 3 09:25 pth-2.0.7nb5
drwxr-xr-x 2 root root 656 Dec 3 22:07 python27-2.7.14
drwxr-xr-x 2 root root 728 Dec 3 19:58 randrproto-1.5.0
drwxr-xr-x 2 root root 800 Dec 3 10:45 readline-7.0
drwxr-xr-x 2 root root 728 Dec 2 15:35 renderproto-0.11.1
drwxr-xr-x 2 root root 728 Dec 3 19:59 tradcpp-0.5.2nb2
drwxr-xr-x 2 root root 728 Dec 3 21:29 unzip-6.0nb8
drwxr-xr-x 2 root root 728 Dec 3 19:47 xcb-proto-1.12
drwxr-xr-x 2 root root 728 Dec 3 20:01 xcmiscproto-1.2.2
drwxr-xr-x 2 root root 728 Dec 3 19:53 xextproto-7.3.0
drwxr-xr-x 2 root root 728 Dec 3 20:02 xf86bigfontproto-1.2.0
drwxr-xr-x 2 root root 728 Dec 3 19:57 xf86driproto-2.1.1nb1
drwxr-xr-x 2 root root 728 Dec 3 19:56 xf86vidmodeproto-2.3.1
drwxr-xr-x 2 root root 1144 Dec 3 19:47 xmlcatmgr-2.2nb1
drwxr-xr-x 2 root root 728 Dec 2 15:35 xproto-7.0.31
drwxr-xr-x 2 root root 728 Dec 3 20:03 xtrans-1.3.5
drwxr-xr-x 2 root root 800 Dec 3 19:47 xz-5.2.3nb1

 

 

 

 

Advertisement

About astr0baby

Please run Adblock or similar... we have been told to do so since Carl Sagan wrote the Contact .
This entry was posted in Uncategorized. Bookmark the permalink.

2 Responses to Pkgsrc on Ci20 Creator (v2) board

  1. Dustin Scott says:

    I attempted to post this on a NETBSD email string, but not sure if I correctly sent it.
    So I’ll post here too, since this is one of the 3 entries that comes up when searching this issue.
    Hi,

    Sorry if creating a zombie thread here, but after some tinkering I believe I’ve found a work around.

    I’m using a customer Linux From Scratch build myself, but encountered and resolved the issue.

    The issue comes from packages that attempt to use pkgsrc’s internal termcap definitions, to prevent circular references on ncurses. This works fine for BSD distros, but on linux we probably already have ncurses installed via outside methods in /usr/lib or /usr/local/lib, unaffected by pkgsrc’s versions.

    Additionally providing the override TERMCAP_TYPE=”curses” Doesn’t help in the case that the installer is flagging for the internal TERMCAP_TYPE as pkgsrc will override whatever you provide when the Makefile is ran.

    To resolve it for pkgsrc as a whole you can modify pkgsrc’s defaults in:

    /usr/pkgsrc/mk/termcap.builtin.mk

    ~line 83 after the BUILTIN_LIB_FOUND.termlib if statements

    #OVERRIDING FOR LFS

    BUILTIN_LIBNAME.termcap= curses

    and if your find is in /bin like mine probably run a “ln /bin/find /usr/bin/find” (One of the Perl installers seems to hard code to the /usr/bin/find location and will bomb)

    As for making PKGSRC work more by default, I’d have to think about how to get the logic to detect a system ncurses version that won’t be affected by pkgsrc’s version. I don’t think it’d be too hard, but still testing my quick modification of the file myself.

    I still need to test it from a clean pkgsrc tree myself. Hope this helps!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.