wmbusmeters/install.sh

335 wiersze
9.3 KiB
Bash
Czysty Zwykły widok Historia

2019-02-23 17:30:16 +00:00
#!/bin/bash
2019-04-25 20:29:15 +00:00
if [ "$1" == "" ] || [ "$1" == "-h" ]
2019-02-23 17:30:16 +00:00
then
2019-04-26 14:58:47 +00:00
echo "Usage: install.sh [binary] [root] [OPTIONS]
2019-04-25 20:29:15 +00:00
Example: install.sh build/wmbusmeters /
2019-04-25 20:29:15 +00:00
Options:
--no-adduser Do not add wmbusmeters user
--no-udev-rules Do not add udev rules
"
2019-02-23 17:30:16 +00:00
exit 0
fi
if [ ! "$(basename "$1")" = "wmbusmeters" ]
2019-02-23 17:30:16 +00:00
then
echo Oups, please only try to install wmbusmeters using this script.
exit 1
fi
if [ ! -x "$1" ]
then
echo This is not an executable.
exit 1
fi
2019-02-23 18:49:30 +00:00
if [ ! -d "$2" ]
then
echo Oups, please supply a valid root directory.
exit 1
2019-02-23 17:30:16 +00:00
fi
2019-04-26 14:58:47 +00:00
SRC=$1
2019-02-23 18:49:30 +00:00
ROOT="${2%/}"
2019-04-25 20:29:15 +00:00
ADDUSER=true
ADDUDEVRULES=true
while [ $# -ne 0 ]
do
ARG="$1"
shift
2019-04-25 20:29:15 +00:00
case "$ARG" in
--no-adduser)
ADDUSER=false
;;
--no-udev-rules)
ADDUDEVRULES=false
shift
;;
esac
done
2019-02-23 18:49:30 +00:00
####################################################################
##
## Intall binaries
##
rm -f "$ROOT"/usr/bin/wmbusmeters "$ROOT"/usr/sbin/wmbusmetersd
mkdir -p "$ROOT"/usr/bin
mkdir -p "$ROOT"/usr/sbin
cp "$SRC" "$ROOT"/usr/bin/wmbusmeters
ln -s /usr/bin/wmbusmeters "$ROOT"/usr/sbin/wmbusmetersd
2019-02-23 17:30:16 +00:00
echo binaries: installed "$ROOT"/usr/bin/wmbusmeters and "$ROOT"/usr/sbin/wmbusmetersd
2019-02-23 17:30:16 +00:00
####################################################################
##
## Intall wmbusmeters manual page
##
rm -f "$ROOT"/usr/share/man/man1/wmbusmeters.1.gz
mkdir -p "$ROOT"/usr/share/man/man1
gzip -c wmbusmeters.1 > "$ROOT"/usr/share/man/man1/wmbusmeters.1.gz
echo man page: installed "$ROOT"/usr/share/man/man1/wmbusmeters.1.gz
####################################################################
##
## Create wmbusmeters user
##
2019-02-23 17:30:16 +00:00
ID=$(id -u wmbusmeters 2>/dev/null)
if [ -f "$ROOT"/usr/sbin/nologin ]
2019-04-25 20:29:15 +00:00
then
USERSHELL="$ROOT/usr/sbin/nologin"
elif [ -f "$ROOT"/sbin/nologin ]
2019-04-25 20:29:15 +00:00
then
USERSHELL="$ROOT/sbin/nologin"
else
USERSHELL="/bin/false"
fi
2019-02-23 18:49:30 +00:00
if [ "$ADDUSER" = "true" ]
2019-02-23 17:30:16 +00:00
then
2019-02-23 18:49:30 +00:00
if [ "$ID" = "" ]
then
# Create the wmbusmeters user
2019-04-25 20:29:15 +00:00
useradd --system --shell $USERSHELL --groups dialout wmbusmeters
2019-02-23 18:49:30 +00:00
echo user: added wmbusmeters
else
echo user: wmbusmeters unmodified
fi
if [ ! -z "$SUDO_USER" ]
then
if [ "$(groups $SUDO_USER | grep -o wmbusmeters)" = "" ]
then
# Add user to the wmbusmeters group.
usermod -a -G wmbusmeters $SUDO_USER
echo user: added $SUDO_USER to group wmbusmeters
else
echo user: user $SUDO_USER already added group wmbusmeters
fi
fi
2019-02-23 17:30:16 +00:00
fi
####################################################################
##
## Prepare for /run/wmbusmeters.pid
##
#if [ ! -d "$ROOT"/var/run ]
#then
# # Create /var/run
# mkdir -p "$ROOT"/var/run
# echo pid store: created /var/run
#fi
####################################################################
##
## Prepare for /var/log/wmbusmeters and /var/log/wmbusmeters/meter_readings
##
if [ ! -d "$ROOT"/var/log/wmbusmeters/meter_readings ]
then
# Create the log directories
mkdir -p "$ROOT"/var/log/wmbusmeters/meter_readings
chown -R wmbusmeters:wmbusmeters "$ROOT"/var/log/wmbusmeters
echo log: created "$ROOT"/var/log/wmbusmeters/meter_readings
fi
####################################################################
##
## Install /etc/logrotate.d/wmbusmeters
##
if [ ! -f "$ROOT"/etc/logrotate.d/wmbusmeters ]
then
mkdir -p "$ROOT"/etc/logrotate.d
# Create logrotate file
cat <<EOF > "$ROOT"/etc/logrotate.d/wmbusmeters
/var/log/wmbusmeters/*.log {
rotate 12
weekly
compress
missingok
postrotate
/bin/kill -HUP `cat /run/wmbusmeters/wmbusmeters.pid 2> /dev/null` 2> /dev/null || true
endscript
EOF
echo logrotate: created "$ROOT"/etc/logrotate.d/wmbusmeters
else
echo conf file: "$ROOT"/etc/logrotate.d/wmbusmeters unchanged
fi
####################################################################
##
## Install /etc/wmbusmeters.conf
##
if [ ! -f "$ROOT"/etc/wmbusmeters.conf ]
2019-02-23 17:30:16 +00:00
then
# Create default configuration
mkdir -p "$ROOT"/etc/
cat <<EOF > "$ROOT"/etc/wmbusmeters.conf
2019-02-24 16:31:32 +00:00
loglevel=normal
2019-02-23 17:30:16 +00:00
device=auto
logtelegrams=false
format=json
meterfiles=/var/log/wmbusmeters/meter_readings
2019-04-20 10:57:11 +00:00
meterfilesaction=overwrite
2019-02-24 14:20:55 +00:00
logfile=/var/log/wmbusmeters/wmbusmeters.log
2019-02-23 17:30:16 +00:00
EOF
chmod 644 "$ROOT"/etc/wmbusmeters.conf
echo conf file: created "$ROOT"/etc/wmbusmeters.conf
2019-02-23 17:30:16 +00:00
else
echo conf file: "$ROOT"/etc/wmbusmeters.conf unchanged
2019-02-23 17:30:16 +00:00
fi
####################################################################
##
## Create /etc/wmbusmeters.d
##
if [ ! -d "$ROOT"/etc/wmbusmeters.d ]
2019-02-23 17:30:16 +00:00
then
# Create the configuration directory
mkdir -p "$ROOT"/etc/wmbusmeters.d
chmod -R 755 "$ROOT"/etc/wmbusmeters.d
echo conf dir: created "$ROOT"/etc/wmbusmeters.d
2019-02-23 17:30:16 +00:00
else
echo conf dir: "$ROOT"/etc/wmbusmeters.d unchanged
2019-02-23 17:30:16 +00:00
fi
####################################################################
##
## Create /lib/systemd/system/wmbusmeters.service
##
SYSTEMD_NEEDS_RELOAD=false
if [ -f "$ROOT"/lib/systemd/system/wmbusmeters.service ]
then
echo systemd: removing "$ROOT"/lib/systemd/system/wmbusmeters.service
echo systemd: backup stored here: ~/old.wmbusmeters.service.backup
cp "$ROOT"/lib/systemd/system/wmbusmeters.service ~/old.wmbusmeters@.service.backup
rm "$ROOT"/lib/systemd/system/wmbusmeters.service
SYSTEMD_NEEDS_RELOAD=true
fi
if [ -f "$ROOT"/lib/systemd/system/wmbusmeters@.service ]
then
echo systemd: removing "$ROOT"/lib/systemd/system/wmbusmeters@.service
echo systemd: backup stored here: ~/old.wmbusmeters@.service.backup
cp "$ROOT"/lib/systemd/system/wmbusmeters@.service ~/old.wmbusmeters@.service.backup
rm "$ROOT"/lib/systemd/system/wmbusmeters@.service
SYSTEMD_NEEDS_RELOAD=true
fi
if [ ! -f "$ROOT"/lib/systemd/system/wmbusmeters@.service ]
2019-02-23 17:30:16 +00:00
then
mkdir -p "$ROOT"/lib/systemd/system/
2019-02-23 18:49:30 +00:00
# Create service file
cat <<'EOF' > "$ROOT"/lib/systemd/system/wmbusmeters@.service
2019-02-23 17:30:16 +00:00
[Unit]
Description="wmbusmeters service on %I"
Documentation=https://github.com/weetmuts/wmbusmeters
Documentation=man:wmbusmeters(1)
2019-02-23 17:30:16 +00:00
After=network.target
StopWhenUnneeded=true
StartLimitIntervalSec=10
StartLimitInterval=10
StartLimitBurst=3
2019-02-23 17:30:16 +00:00
[Service]
Type=forking
PrivateTmp=yes
2019-02-23 17:30:16 +00:00
User=wmbusmeters
Group=wmbusmeters
Restart=always
RestartSec=1
# Run ExecStartPre with root-permissions
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /var/log/wmbusmeters/meter_readings
ExecStartPre=/bin/chown -R wmbusmeters:wmbusmeters /var/log/wmbusmeters
ExecStartPre=-/bin/mkdir -p /run/wmbusmeters
ExecStartPre=/bin/chown -R wmbusmeters:wmbusmeters /run/wmbusmeters
ExecStart=/usr/sbin/wmbusmetersd --device='%I' /run/wmbusmeters/wmbusmeters-%i.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/wmbusmeters/wmbusmeters-%i.pid
2019-02-23 17:30:16 +00:00
[Install]
WantedBy=multi-user.target
EOF
echo systemd: installed "$ROOT"/lib/systemd/system/wmbusmeters@.service
2019-02-23 18:49:30 +00:00
else
echo systemd: "$ROOT"/lib/systemd/system/wmbusmeters@.service unchanged
2019-02-23 17:30:16 +00:00
fi
####################################################################
##
## Create /etc/udev/rules.d/99-wmbus-usb-serial.rules
##
UDEV_NEEDS_RELOAD=false
2019-04-25 20:29:15 +00:00
if [ "$ADDUDEVRULES" = "true" ]
then
if [ -f "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules ]
then
echo udev: removing "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
echo udev: backup stored here: ~/old.wmbusmeters-wmbus-usb-serial.rules.backup
cp "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules ~/old.wmbusmeters-wmbus-usb-serial.rules.backup
rm "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
UDEV_NEEDS_RELOAD=true
fi
if [ ! -f "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules ]
2019-04-25 20:29:15 +00:00
then
mkdir -p "$ROOT"/etc/udev/rules.d
2019-04-25 20:29:15 +00:00
# Create service file
cat <<EOF > "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",SYMLINK+="im871a_%n",MODE="0660", GROUP="wmbusmeters",TAG+="systemd",ENV{SYSTEMD_WANTS}="wmbusmeters@/dev/im871a_%n.service"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001",SYMLINK+="amb8465_%n",MODE="0660", GROUP="wmbusmeters",TAG+="systemd",ENV{SYSTEMD_WANTS}="wmbusmeters@/dev/amb8465_%n.service"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838",SYMLINK+="rtlsdr_%n",MODE="0660", GROUP="wmbusmeters",TAG+="systemd",ENV{SYSTEMD_WANTS}="wmbusmeters@/dev/rtlsdr_%n.service"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0863",SYMLINK+="rfmrx2_%n",MODE="0660", GROUP="wmbusmeters",TAG+="systemd",ENV{SYSTEMD_WANTS}="wmbusmeters@/dev/rfmrx2_%n.service"
EOF
echo udev: installed "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
2019-04-25 20:29:15 +00:00
else
echo udev: "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules unchanged
2019-04-25 20:29:15 +00:00
fi
fi
if [ "$SYSTEMD_NEEDS_RELOAD" = "true" ]
then
D=$(diff "$ROOT"/lib/systemd/system/wmbusmeters@.service ~/old.wmbusmeters@.service.backup)
if [ "$D" != "" ]
then
echo
echo
echo You need to reload systemd configuration! Please do:
echo sudo systemctl daemon-reload
fi
fi
if [ "$UDEV_NEEDS_RELOAD" = "true" ]
then
D=$(diff "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules ~/old.wmbusmeters-wmbus-usb-serial.rules.backup)
if [ "$D" != "" ]
then
echo
echo
echo You need to reload udev configuration! Please do:
echo "sudo udevadm control --reload-rules"
echo "sudo udevadm trigger"
fi
fi