For about six months I ve been using a Raspberry Pi 3 as my desktop computer at home.
The overall experience is fine, but I had to do a few adjustments.
First was to use KeePass, the second to compile gcc for cross-compilation (ie use
buildroot).
KeePass
I m using
KeePass +
KeeFox to maintain my passwords on the various websites (and avoid reusing the same everywhere).
For this to work on the Raspberry Pi, one need to use mono from Xamarin:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mono-runtime
The install instruction comes from
mono-project and the initial pointer was found on
raspberrypi forums,
stackoverflow and
Benny Michielsen s blog.
And for some plugin to work I think I had to
apt-get install mono-complete
.
Compiling gcc
Using the Raspberry Pi 3, I recovered an old project based on buildroot for the raspberry pi 2. And just for building the tool-chain I had a few issues.
First the compilation would stop during mnp compilation:
/usr/bin/gcc -std=gnu99 -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_divrem_1 -O2 -Wa,--noexecstack tmp-divrem_1.s -fPIC -DPIC -o .libs/divrem_1.o
tmp-divrem_1.s: Assembler messages:
tmp-divrem_1.s:129: Error: selected processor does not support ARM mode mls r1,r4,r8,r11'
tmp-divrem_1.s:145: Error: selected processor does not support ARM mode mls r1,r4,r8,r11'
tmp-divrem_1.s:158: Error: selected processor does not support ARM mode mls r1,r4,r8,r11'
tmp-divrem_1.s:175: Error: selected processor does not support ARM mode mls r1,r4,r3,r8'
tmp-divrem_1.s:209: Error: selected processor does not support ARM mode mls r11,r4,r12,r3'
Makefile:768: recipe for target 'divrem_1.lo' failed
make[]: *** [divrem_1.lo] Error 1
I Googled the error and found
this post on the Raspberry Pi forum not really helpful
But I finally found an explanation on
Jan Hrach s page on the subject.
The raspbian distribution is still optimized for the first Raspberry Pi so basically the compiler is limited to the old raspberypi instructions. While I was compiling gcc for a Raspberry Pi 2 so needed the extra ones.
The proposed solution is to basically update raspbian to debian proper.
While this is a neat idea, I still wanted to get some raspbian specific packages (like the kernel) but wanted to be sure that everything else comes from debian. So I did some
apt pinning.
First I experienced that pinning is not sufficient so when updating
source.list
with plain debian Jessie, make sure to add theses lines before the raspbian lines:
# add official debian jessie (real armhf gcc)
deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ jessie main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
deb http://ftp.fr.debian.org/debian/ jessie-updates main
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main
Then run the following to get the debian gpg keys, but don t yet upgrade your system:
apt update
apt install debian-archive-keyring
Now, let s add the pinning.
First if you were using
APT::Default-Release "stable";
in your
apt.conf
(
as I did) remove it. It does not mix well with fine grained pinning we will then implement.
Then, fill your
/etc/apt/preferences
file with the following:
# Debian
Package: *
Pin: release o=Debian,a=stable,n=jessie
Pin-Priority: 700
# Raspbian
Package: *
Pin: release o=Raspbian,a=stable,n=jessie
Pin-Priority: 600
Package: *
Pin: release o=Raspberry Pi Foundation,a=stable,n=jessie
Pin-Priority: 600
# Mono
Package: *
Pin: release v=7.0,o=Xamarin,a=stable,n=wheezy,l=Xamarin-Stable,c=main
Pin-Priority: 800
Note: You can use
apt-cache policy
(no parameter) to debug pinning.
The pinning above is mainly based on the origin field of the repositories (
o=
)
Finally you can upgrade your system:
apt update
apt-cache policy gcc
rm /var/cache/apt/archives/*
apt upgrade
apt-cache policy gcc
Note: Removing the cache ensure we download the packages from debian as raspbian is using the exact same naming but we now they are not compiled with a real armhf tool-chain.
Second issue with gcc
The build stopped on
recipe for target 's-attrtab' failed
. There are many references on the web, that one was easy, it just need more memory, so I added some swap on the external SSD I was already using to work on buildroot.
Conclusion
That s it for today, not bad considering my last post was more that 3 years ago