Last active
November 14, 2017 23:29
-
-
Save josephernest/d0fd00ac5cf1c66b0cc1cf73fef6c85d to your computer and use it in GitHub Desktop.
Script to make the SamplerBox ISO Image
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -v | |
# CREATE A RASPBIAN JESSIE IMAGE FOR SAMPLERBOX | |
# 2016-08-31 | |
# | |
# USAGE: chmod 777 samplerbox_maker.sh ; nohup sudo ./samplerbox_maker.sh & | |
set -e | |
sudo apt-get update && sudo apt-get install -y cdebootstrap kpartx parted sshpass zip | |
image_name=samplerbox_20160831.img | |
image_size=1300 | |
hostname=samplerbox | |
root_password=root | |
http=http://mirrordirector.raspbian.org/raspbian/ | |
dd if=/dev/zero of=$image_name bs=1M count=$image_size | |
fdisk $image_name <<EOF | |
o | |
n | |
+64M | |
a | |
t | |
c | |
n | |
w | |
EOF | |
kpartx -av $image_name | |
partprobe /dev/loop0 | |
bootpart=/dev/mapper/loop0p1 | |
rootpart=/dev/mapper/loop0p2 | |
mkdosfs -n BOOT $bootpart | |
mkfs.ext4 -L ROOT $rootpart | |
sync | |
fdisk -l $image_name | |
mkdir -v sdcard | |
mount -v -t ext4 -o sync $rootpart sdcard | |
cdebootstrap --arch=armhf jessie sdcard $http --include=locales --allow-unauthenticated | |
sync | |
mount -v -t vfat -o sync $bootpart sdcard/boot | |
echo root:$root_password | chroot sdcard chpasswd | |
wget -O sdcard/raspberrypi.gpg.key http://archive.raspberrypi.org/debian/raspberrypi.gpg.key | |
chroot sdcard apt-key add raspberrypi.gpg.key | |
rm -v sdcard/raspberrypi.gpg.key | |
wget -O sdcard/raspbian.public.key http://mirrordirector.raspbian.org/raspbian.public.key | |
chroot sdcard apt-key add raspbian.public.key | |
rm -v sdcard/raspbian.public.key | |
chroot sdcard apt-key list | |
sed -i sdcard/etc/apt/sources.list -e "s/main/main contrib non-free firmware/" | |
#echo "deb http://archive.raspberrypi.org/debian/ wheezy main" >> sdcard/etc/apt/sources.list | |
echo "deb http://archive.raspberrypi.org/debian/ jessie main" >> sdcard/etc/apt/sources.list | |
echo Etc/UTC > sdcard/etc/timezone | |
echo en_GB.UTF-8 UTF-8 > sdcard/etc/locale.gen | |
cp -v /etc/default/keyboard sdcard/etc/default/keyboard | |
echo $hostname > sdcard/etc/hostname | |
echo "127.0.1.1 $hostname" >> sdcard/etc/hosts | |
chroot sdcard locale-gen LANG="en_GB.UTF-8" | |
chroot sdcard dpkg-reconfigure -f noninteractive locales | |
cat <<EOF > sdcard/boot/cmdline.txt | |
root=/dev/mmcblk0p2 ro rootwait console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 elevator=noop bcm2708.uart_clock=3000000 | |
EOF | |
cat <<EOF > sdcard/boot/config.txt | |
device_tree_param=i2c_arm=on | |
init_uart_clock=2441406 | |
init_uart_baud=38400 | |
gpu_mem=64 | |
boot_delay=0 | |
disable_splash=1 | |
disable_audio_dither=1 | |
EOF | |
cat <<EOF > sdcard/etc/fstab | |
/dev/sda1 /media auto nofail 0 0 | |
EOF | |
#/dev/sdb1 /media auto nofail 0 0 | |
# "allow-hotplug" instead of "auto" very important to prevent blocking on boot if no network present | |
cat <<EOF > sdcard/etc/network/interfaces | |
auto lo | |
iface lo inet loopback | |
allow-hotplug eth0 | |
iface eth0 inet dhcp | |
EOF | |
#echo "timeout 10;" >> sdcard/etc/dhcp/dhclient.conf | |
#echo "retry 1;" >> sdcard/etc/dhcp/dhclient.conf | |
chroot sdcard apt-get update | |
chroot sdcard apt-get -y upgrade | |
chroot sdcard apt-get -y dist-upgrade | |
chroot sdcard apt-get -y install libraspberrypi-bin libraspberrypi-dev libraspberrypi0 raspberrypi-bootloader ssh wireless-tools wpasupplicant usbutils | |
chroot sdcard apt-get clean | |
chroot sdcard apt-get -y install build-essential python-dev python-pip cython python-smbus python-numpy python-rpi.gpio python-serial portaudio19-dev alsa-utils git libportaudio2 libffi-dev | |
chroot sdcard apt-get clean | |
chroot sdcard apt-get autoremove -y | |
chroot sdcard pip install rtmidi-python pyaudio cffi sounddevice | |
# Allowing root to log into $release with password... " | |
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' sdcard/etc/ssh/sshd_config | |
# SamplerBox | |
chroot sdcard sh -c "cd /root ; git clone -b testing https://github.com/josephernest/SamplerBox.git ; cd SamplerBox ; python setup.py build_ext --inplace" | |
cat <<EOF > sdcard/root/SamplerBox/samplerbox.sh | |
#!/bin/sh | |
python /root/SamplerBox/samplerbox.py | |
EOF | |
chmod 777 sdcard/root/SamplerBox/samplerbox.sh | |
cat <<EOF > sdcard/etc/systemd/system/samplerbox.service | |
[Unit] | |
Description=Starts SamplerBox | |
DefaultDependencies=false | |
[Service] | |
Type=simple | |
ExecStart=/root/SamplerBox/samplerbox.sh | |
WorkingDirectory=/root/SamplerBox/ | |
[Install] | |
WantedBy=local-fs.target | |
EOF | |
cat <<EOF > sdcard/etc/motd | |
Welcome to SamplerBox! | |
###################### | |
* The filesystem is read-only, see http://www.samplerbox.org/faq#readonly | |
Here is how to remount as read-write: mount -o remount,rw / | |
* The SamplerBox program (/root/SamplerBox/samplerbox.py) should be | |
up and running. If not, try: systemctl status samplerbox | |
###################### | |
EOF | |
sed -i 's/ENV{pvolume}:="-20dB"/ENV{pvolume}:="-10dB"/' sdcard/usr/share/alsa/init/default | |
chroot sdcard systemctl enable /etc/systemd/system/samplerbox.service | |
sed -i 's/USE_SERIALPORT_MIDI = False/USE_SERIALPORT_MIDI = True/' sdcard/root/SamplerBox/samplerbox.py | |
sed -i 's/USE_I2C_7SEGMENTDISPLAY = False/USE_I2C_7SEGMENTDISPLAY = True/' sdcard/root/SamplerBox/samplerbox.py | |
sed -i 's/USE_BUTTONS = False/USE_BUTTONS = True/' sdcard/root/SamplerBox/samplerbox.py | |
sed -i 's,SAMPLES_DIR = ".",SAMPLES_DIR = "/media/",' sdcard/root/SamplerBox/samplerbox.py | |
echo 'i2c-dev' >> sdcard/etc/modules | |
echo 'snd_bcm2835' >> sdcard/etc/modules | |
# Unmounting mount points | |
sync | |
umount -v sdcard/boot | |
umount -v sdcard | |
kpartx -dv $image_name | |
sync | |
zip $image_name.zip $image_name | |
ls -la -h | |
#FINISHED | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment