Raspberry Pi Model As Environment Variable
From Wiki
Jump to navigationJump to search
Overview
Run a script at start that leaves an environment variable set.
In this particular case, an application needed to know which version of a Raspberry Pi it was running on. This information is available in the kernel ring buffer, and is available in the /var/log/messages. I did not want to grep the log every time I needed the information, rather, I wanted an environment variable set.
Copy the text below into the respective files (you'll need to be root), then execute the following commands.
sudo chmod 755 /etc/init.d/rpimodel.sh sudo chmod 644 /etc/profile.d/rpimodel.sh sudo systemctl enable rpimodel
Next time the system is started, /etc/rpimodel should contain the Raspberry Pi model, and the environment variable RPIMODEL should be set.
$ cat /etc/rpimodel RPIMODEL="Raspberry Pi Zero W Rev 1.1" $ set | grep RPIMODEL RPIMODEL='Raspberry Pi Zero W Rev 1.1' $
/etc/init.d/rpimodel.sh
#! /bin/sh ### BEGIN INIT INFO # Provides: rpimodel # Required-Start: $syslog $network +ntp # Required-Stop: $null # Should-Start: glibc # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Set RPIMODEL based on dmesg # Description: Read the 'Machine model:' string using 'dmesg' # and export it as RPIMODEL variable. ### END INIT INFO PATH=/sbin:/bin . /lib/init/vars.sh . /lib/lsb/init-functions do_start () { RPIMODEL=`dmesg | grep -oP 'fdt:Machine model: \K.*'` export RPIMODEL echo "RPIMODEL=\"${RPIMODEL}\"" >/etc/rpimodel exit 0 } case "$1" in start|"") do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) # No-op ;; status) # No-op ;; *) echo "Usage: rpimodel.sh [start|stop]" >&2 exit 3 ;; esac :
/etc/profile.c/rpimodel.sh
if [ -r /etc/rpimodel ]; then . /etc/rpimodel export RPIMODEL fi
/lib/systemd/system/rpimodel.service
[Unit] SourcePath=/etc/init.d/rpimodel.sh Description=Set RPIMODEL based on dmesg Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target After=glibc.service [Service] Type=forking Restart=no TimeoutSec=5min IgnoreSIGPIPE=no KillMode=process GuessMainPID=no RemainAfterExit=yes SysVStartPriority=3 ExecStart=/etc/init.d/rpimodel.sh start ExecStop=/etc/init.d/rpimodel.sh stop [Install] WantedBy=multi-user.target