Die Pakete binfmt-qemu-static
und qemu-user-static
werden für das
chroot in das Raspberry-Pi-System benötigt.
Image-Datei einrichten und mounten:
$ cd /tmp/
$ fallocate -l 4G 20YY-MM-DD-controlpi-generic.img
$ sudo losetup --find --show 20YY-MM-DD-controlpi-generic.img
$ sudo parted --script /dev/loop0 mklabel msdos
$ sudo parted --script /dev/loop0 mkpart primary fat32 0% 100M
$ sudo parted --script /dev/loop0 mkpart primary ext4 100M 100%
$ sudo mkfs.vfat -F32 /dev/loop0p1
$ sudo mkfs.ext4 -F /dev/loop0p2
$ sudo mount /dev/loop0p2 /mnt/
$ sudo mkdir /mnt/boot
$ sudo mount /dev/loop0p1 /mnt/boot/
Arch Linux ARM herunterladen und entpacken:
$ wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-armv7-latest.tar.gz
$ sudo tar xpf ArchLinuxARM-rpi-armv7-latest.tar.gz -C /mnt/
In chroot wechseln und Paket-Schlüssel einrichten:
$ TERM=xterm sudo arch-chroot /mnt/
# pacman-key --init
# pacman-key --populate archlinuxarm
Pakete entfernen und hinzufügen bis folgendes Minimalsystem erreicht ist:
# pacman -Q --deps --unrequired --unrequired
# pacman -Q --explicit
base
ccid
ethtool
fakeroot
gcc
git
i2c-tools
inetutils
jq
linux-rpi
make
openssh
pacman-contrib
parted
pcsclite
python
raspberrypi-bootloader
raspberrypi-firmware
rsync
sudo
swig
vim
# pacman -Syu
Das Journal soll nicht auf der SD-Karte gespeichert werden:
# rm -r /var/log/journal /var/log/lastlog
Standard-Benutzer von alarm
zu pi
umbenennen und Passwörter vergeben:
# mv /home/alarm /home/pi
# sed -i 's/alarm/pi/g' /etc/passwd /etc/shadow /etc/group /etc/gshadow
# passwd
# passwd pi
Bauen und Installieren des Paketes:
# su - pi
$ git clone https://aur.archlinux.org/pigpio.git
$ cd pigpio/
$ makepkg -s
$ mv pigpio-XX-Y-armv7h.pkg.tar.xz ~/
$ cd ~/
$ rm -r pigpio/
$ exit
# pacman -U /home/pi/pigpio-XX-Y-armv7h.pkg.tar.xz
Paket-Cache leeren:
# paccache -rk0
Python-Virtual-Environment unter pi
-Benutzer einrichten:
# su - pi
$ python -m venv controlpi-venv
$ source controlpi-venv/bin/activate
$ pip install -U pip setuptools wheel
ControlPi-Pakete installieren:
$ pip install git+git://git.graph-it.com/graphit/controlpi.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-statemachine.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-wsclient.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-wsserver.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-pinio.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-modbus.git
$ pip install git+git://git.graph-it.com/graphit/controlpi-nfc.git
$ exit
Von außerhalb des chroot:
$ sudo rsync -rlp etc /mnt/
$ sudo rsync -rlp boot /mnt/
$ rsync -rlp home/pi /mnt/home/
Dies installiert die folgenden Konfigurations-Dateien:
etc/
├── hostname
├── localtime -> /usr/share/zoneinfo/Europe/Berlin
├── modules-load.d
│ └── i2c.conf
├── resolv.conf -> /run/systemd/resolve/stub-resolv.conf
├── ssh
│ └── sshd_config.d
│ └── NoRootNoPassword.conf
├── sudoers.d
│ └── wheel
└── systemd
├── resolved.conf.d
│ └── NoNegCache.conf
└── system
├── controlpi.service
├── multi-user.target.wants
│ ├── controlpi.service -> /etc/systemd/system/controlpi.service
│ ├── pcscd.service -> /usr/lib/systemd/system/pcscd.service
│ └── pigpiod.service -> /usr/lib/systemd/system/pigpiod.service
└── pigpiod.service.d
└── override.conf
boot/
└── config.txt
home/
└── pi
├── conf.json
└── resize-fs.sh
Innerhalb des chroot eventuell Berechtigungen und Eigentürmer reparieren:
# chmod o-r /etc/sudoers.d/wheel
$ chmod -R go-rx .ssh/
In /home/pi/.ssh/authorized_keys
sollten die Public-Keys derjenigen
hinterlegt sein, die initial Zugriff per SSH haben sollen, da die
Konfiguration das Einloggen mit Passwort komplett unterbindet.
Von außerhalb des chroot:
$ sudo umount /mnt/boot/
$ sudo umount /mnt/
$ sudo losetup --detach /dev/loop0
$ xz 20YY-MM-DD-controlpi-generic.img
$ xz --decompress --stdout 20YY-MM-DD-controlpi-generic.img.xz | sudo dd of=/dev/sdx bs=1M oflag=sync status=progress