Install Raspberry Pi
The xPL protocol is light enough to run on simple machines such as the Raspberry Pi.
Contents
[hide]Install Raspbian
Several distributions are available for the Raspberry Pi. This wiki bases on the console version of Raspbian.
Prepare an SD card
On a Linux computer, download it:
su cd /tmp wget https://downloads.raspberrypi.org/raspbian_lite_latest -O raspbian-lite.zip sha1sum raspbian-lite.zip unzip raspbian-lite.zip.zip mv *-raspbian-*-lite.img raspbian-lite.img
Insert a card reader with the SD card you wish to use and write the image:
fdisk -l RPI_DISK='/dev/sdb' umount $RPI_DISK* ls -lh raspbian-lite.img | sed -e 's/.*root/Copying/' | sed -e 's/G.*rasp/G file rasp/' dd if=raspbian-lite.img of=$RPI_DISK status=progress conv=fsync && \ aplay /usr/share/sounds/alsa/Front_Center.wav eject $RPI_DISK
Unplug the SD card reader and plug it in again. Find the mount point:
df -h | grep $RPI_DISK RPI_DISK_MOUNTPOINT='/media/francois/boot'
Remove init=/usr/lib/raspi-config/init_resize.sh
from:
nano -w $RPI_DISK_MOUNTPOINT/cmdline.txt
Eject the SD card reader:
eject $RPI_DISK
Change root settings
Insert the SD card in the Raspberry Pi and boot it.
sudo su passwd apt update apt upgrade
Setup aliases:
nano .bashrc source .bashrc
Specify what to do with pageUp/Down keys:
nano /etc/inputrc
Allow ssh:
# change: PermitRootLogin yes nano /etc/ssh/sshd_config service ssh restart
Locales
Set the regional parameters:
raspi-config
Then edit ~.bashrc
and add:
# Locales export LC_ALL=C
Swap partition
Add a 1 GB swap partition
cfdisk /dev/mmcblk0 swaplabel -L swap /dev/mmcblk0p3
Edit /etc/fstab
and add:
LABEL=swap none swap sw 0 0
Remove the default swapfile:
update-rc.d -f dphys-swapfile remove swapoff -a rm /var/swap
Reboot and check:
swapon -s
Ethernet
Check the Ethernet connection:
ifconfig | grep 'inet ' ping -c 4 google.com
Change host name:
raspi-config
Give a static IP address:
nano /etc/dhcpcd.conf
Add the following lines:
# Set a static IP address interface eth0 static ip_address=192.168.1.18/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.3
Restart the machine and re-enable SSH:
reboot raspi-config ifconfig | grep 'inet '
Set-up Apple FileProtocol (AFP) sharing:
apt install netatalk nano /etc/netatalk/AppleVolumes.default
Programming tools
Install Perl documentation reader:
apt-get install perl-doc
Users
Removing the default user can close security gaps:
userdel -r pi
Add a data partition for the users' home
cfdisk /dev/mmcblk0 mke2fs -t ext4 -L data /dev/mmcblk0p4
Edit /etc/fstab
and add:
LABEL=data /home ext4 defaults,noatime 0 1
Reboot the machine:
reboot lsblk -o name,label,mountpoint
Add the control
user:
useradd -m -g users -G users,dialout,audio -s /bin/bash control passwd control
Backup
Zeroing unused blocks on the SD card should be better for later compression:
apt install secure-delete lsblk -o name,label,mountpoint
Zero the swap partition:
swapoff /dev/mmcblk0p3 dd if=/dev/zero of=/dev/mmcblk0p3 mkswap -L swap /dev/mmcblk0p3
Zero fill unused blocks of the data partition:
sfill -lzv /home/
Zero fill unused blocks of the system partition:
umount /home mount -o remount,rw / sfill -lzv /
Stop the machine:
halt
Extract the SD card, insert it in a reader and plug it in a Linux PC.
Save the whole disk:
lsblk -o name,label,fstype,size,mountpoint RPI_DISK='/dev/sdb' RPI_BACKUP_FILE='/home/user/Desktop/rpi.img.bz2' umount $RPI_DISK* dd if=$RPI_DISK status=progress | bzip2 -9f >$RPI_BACKUP_FILE ls -lh $RPI_BACKUP_FILE
Restore the whole disk:
bunzip2 -dc $RPI_BACKUP_FILE | dd of=$RPI_DISK status=progress
Checks
CPU usage
Check CPU usage:
ps -eo pcpu,user,args | sort -k 1 -r | head -10 echo && ps -eo pcpu,user,args | grep -v ' 0.0 ' | grep -v '%CPU' | sort -k 1 -r | sed 's/[ ^I]\/.*\/perl//' | sed 's/.pl[ ^I].*/.pl/'
Process priorities
Check process priorities:
ps ax -o nice,pid,user,args | grep -v ' NI ' | sort
The lowest numbers correspond to the highest priorities.
Change the priority level of xPL devices:
ps ax -o nice,pid,user,args | grep -v ' grep ' | grep -i xpl- USER='control' NEW_LEVEL=-10 SYSTEM_IFS=$IFS; IFS=$'\n'; task_list=(`ps ax -o pid,user,args | grep -v ' grep ' | grep -i '/xpl-'`) IFS=$SYSTEM_IFS for item in "${task_list[@]}" ; do task_id=`echo "${item}" | sed "s/$USER.*//"` # echo $task_id renice $NEW_LEVEL -p $task_id >/dev/null done ps ax -o nice,pid,user,args | grep -v ' grep ' | grep -i xpl-
Links
Here some interesting pages for the installation process: