Building SuperCollider for piCore Linux
NOTE: there is a newer and updated version available... /f0blog/building-supercollider-for-picore-linux-2/
These instructions show how to build, package and install SuperCollider, sc3-plugins and jackd for piCore - a variant of TinyCoreLinux for the Raspberry Pi.
introduction
piCore has many advantages over the common Raspbian system. It will boot a lot faster, is extremely light-weight and is easy to customise. And because the whole system always resides in RAM, SD card wear is minimal.
Its immutable-by-default design means one can unplug the power to the Raspberry Pi without performing and waiting for a proper shutdown nor risking corrupting the SD card. It also allows one to experiment without being afraid of messing up. A simple reboot will take the system back to a known state. For changes to be persistent, one must deliberately write them to the SD card (using the command filetool.sh -b
).
Some drawbacks are that piCore is more advanced to install and configure and that much common Linux software is missing from the built-in package manager (one will have to compile it oneself - hence this guide).
requirements
- an SD card - 2 GB is plenty
- a Raspberry pi - here a RPi 3B v1.2
- an ethernet cable
- a router with an internet connection
- a laptop - here running macOS
preparation
- download piCore-9.0.3.zip for armv7 (or piCore-9.0.3.zip for armv6 - see notes below)
- burn the zip file to the SD card using for example balenaEtcher
- put the SD card in the RPi and connect ethernet and 5V power
On the laptop, open a terminal and run the following commands:
ping 192.168.1.255 #first broadcast ping (stop with ctrl+c)
arp -a #figure out which IP address the RPi has (here 192.168.1.13)
ssh tc@192.168.1.13 #default password: piCore
sudo fdisk -u /dev/mmcblk0 #then press the following keys in order to delete and recreate partition2
p #note start of partition2 - StartLBA - usually 77824
d
2
n
p
2
77824 #enter start of partition2 from above
<RET> #type return to accept suggestion
w #write
filetool.sh -b
sudo reboot
ssh tc@192.168.1.13 #pass: piCore
sudo resize2fs /dev/mmcblk0p2 #resize partition2
jackd
Assuming piCore is now installed and partition2 resized like above...
#download and install build dependencies
tce-load -wil cmake compiletc python squashfs-tools libudev-dev libsndfile-dev readline-dev libsamplerate-dev fftw-dev git
#download and compile jackd
cd /tmp
git clone git://github.com/jackaudio/jack2 --depth 1
cd jack2
wget https://waf.io/waf-2.0.12
chmod +x waf-2.0.12
./waf-2.0.12 configure --alsa
./waf-2.0.12 build
sudo ./waf-2.0.12 install > /tmp/jack2_tmp.list
#create the jackd tcz extension package
cd /tmp
cat jack2_tmp.list | grep "/usr/local/" | grep -v "/share/man/\|.h \|.pc " | awk '{print $3}' > jack2.list
tar -T /tmp/jack2.list -czvf /tmp/jack2.tar.gz
mkdir /tmp/pkg && cd /tmp/pkg
tar -xf /tmp/jack2.tar.gz
cd ..
mksquashfs pkg/ jack2.tcz
sudo mv jack2.tcz ~
rm -rf /tmp/pkg
tce-load -i ~/jack2.tcz
jackd #check that it is working
On the laptop, open another terminal window and download the resulting compressed jackd package:
scp tc@192.168.1.13:jack2.tcz ~/Downloads #pass: piCore
SuperCollider
Assuming jackd is installed like above...
#download and compile SuperCollider
cd /tmp
git clone --recurse-submodules https://github.com/supercollider/supercollider.git
cd supercollider
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE="Release" -DBUILD_TESTING=OFF -DSUPERNOVA=OFF -DNATIVE=ON -DSC_IDE=OFF -DNO_X11=ON -DSC_QT=OFF -DSC_ED=OFF -DSC_EL=OFF -DSC_VIM=ON -DINSTALL_HELP=OFF -DNO_AVAHI=ON -DSC_ABLETON_LINK=OFF -DCMAKE_C_FLAGS="-lncurses" -DCMAKE_CXX_FLAGS="-lncurses" ..
make
sudo make install
cat install_manifest.txt | grep -v "/usr/local/include/\|/usr/local/share/pixmaps/\|/usr/local/share/mime/" > /tmp/sc.list
#create the SuperCollider tcz extension package
cd /tmp
tar -T /tmp/sc.list -czvf /tmp/sc.tar.gz
mkdir /tmp/pkg && cd /tmp/pkg
tar -xf /tmp/sc.tar.gz
cd ..
mksquashfs pkg/ supercollider.tcz
sudo mv supercollider.tcz ~
rm -rf /tmp/pkg
tce-load -i ~/supercollider.tcz
sclang -h #just to check that it is working
On the laptop, open another terminal window and download the resulting compressed SuperCollider package:
scp tc@192.168.1.13:supercollider.tcz ~/Downloads #pass: piCore
sc3-plugins
Assuming SuperCollider is installed like above...
#download and compile sc3-plugins
cd /tmp
git clone --recursive https://github.com/supercollider/sc3-plugins.git
cd sc3-plugins
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE="Release" -DSUPERNOVA=OFF -DNATIVE=ON -DSC_PATH=../../supercollider/ ..
make
sudo make install
cat install_manifest.txt | grep -v "/HelpSource\|.html\|/Help" > /tmp/scplugs.list
#create the sc3-plugins tcz extension package
cd /tmp
tar -T /tmp/scplugs.list -czvf /tmp/scplugs.tar.gz --exclude=*/HelpSource --exclude=*.html --exclude=*/Help
mkdir /tmp/pkg && cd /tmp/pkg
tar -xf /tmp/scplugs.tar.gz
cd ..
mksquashfs pkg/ sc3-plugins.tcz
sudo mv sc3-plugins.tcz ~
rm -rf /tmp/pkg
On the laptop, open another terminal window and download the resulting compressed sc3-plugins package:
scp tc@192.168.1.13:sc3-plugins.tcz ~/Downloads #pass: piCore
Now that the three tcz packages are created and downloaded to the laptop, we can erase the SD card and start afresh. (It is possible to continue working with the same piCore install, but unused build dependencies would waste some space).
restart and install
(for future installs you can skip all of the above and start here assuming you have kept the .tcz packages)
- trash the old system and burn piCore-9.0.3.zip to the SD card again
- put the SD card in the RPi and connect ethernet and 5V power
On the laptop, open a terminal and run the following commands:
ping 192.168.1.255 #first broadcast ping (stop with ctrl+c)
arp -a #figure out which IP address the RPi has (here 192.168.1.13)
ssh-keygen -R 192.168.1.13 #resets the ssh keys to be able to log in again
ssh tc@192.168.1.13 #default password: piCore
sudo fdisk -u /dev/mmcblk0 #then press the following keys in order to delete and recreate partition2
p #note start of partition2 - StartLBA - usually 77824
d
2
n
p
2
77824 #enter start of partition2 from above
<RET> #type return to accept suggestion
w #write
filetool.sh -b
sudo reboot
ssh tc@192.168.1.13 #pass: piCore
sudo resize2fs /dev/mmcblk0p2 #resize partition2
#install dependencies
tce-load -wi nano alsa alsa-utils libsamplerate libudev readline git fftw
On the laptop, open another terminal window and upload the three compressed packages:
cd ~/Downloads
scp jack2.tcz supercollider.tcz sc3-plugins.tcz tc@192.168.1.13:
Back on the Raspberry Pi...
cd ~
mv jack2.tcz supercollider.tcz sc3-plugins.tcz /mnt/mmcblk0p2/tce/optional/
echo jack2.tcz >> /mnt/mmcblk0p2/tce/onboot.lst
echo supercollider.tcz >> /mnt/mmcblk0p2/tce/onboot.lst
echo sc3-plugins.tcz >> /mnt/mmcblk0p2/tce/onboot.lst
echo -e "\nsudo /usr/local/sbin/alsactl -f /home/tc/mysound.state restore" >> /opt/bootlocal.sh
#autostart - optional
nano autostart.sh #add the following lines
#!/bin/sh
jackd -P75 -p16 -dalsa -dhw:0 -r44100 -p1024 -n3 &
sclang /home/tc/mycode.scd
chmod +x autostart.sh
nano mycode.scd #add the following lines
s.waitForBoot{
{SinOsc.ar([400, 404], 0, 0.5)}.play;
};
nano /opt/bootlocal.sh #add the following lines to the end
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
/home/tc/autostart.sh &
#IMPORTANT - make the changes permanent
filetool.sh -b
sudo reboot
The piCore system should now have SuperCollider installed and (optionally) start at boot.
volume
To adjust the volume log in and run the following commands...
alsamixer #set volume with arrow keys, ESC to exit
alsactl -f /home/tc/mysound.state store #save in custom alsa settings file
filetool.sh -b #make permanent
notes
- for RPi1 and RPi Zero you should probably get the armv6 version.
- for RPi2 and newer get the armv7 version (even though the files seem identical).
- running the
make
command with flag-j3
will usually just result in a out-of-memory freeze. - avahi is not activated because libavahi-client-dev is not available for piCore - maybe later.
- waf-2.0.12 seems to be the newest version that can build jack2.
- jackd and SuperCollider will be running as root when autostarting.
- the start-up time from applying power to SuperCollider is making sound is ~20 seconds.
- after the first backup (
filetool.sh -b
) thessh-keygen -R
will not be needed any longer. - CPU benchmarks are more or less the same as for running SC under Raspbian
//TODO: USB soundcard
Updates:
- 200401: simplified by using install_manifest.txt
- 210727: added ping and some comments, see updated version /f0blog/building-supercollider-for-picore-linux-2/