2018-06-14 10:43:51 -07:00
|
|
|
#!/bin/bash
|
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
echo ""
|
|
|
|
echo "Error: You must provide a platform name as argument"
|
|
|
|
echo ""
|
|
|
|
echo "Usage: ./install.sh [platform] where [platform] can be"
|
|
|
|
echo " win Install OpenPLC on Windows over Cygwin"
|
|
|
|
echo " linux Install OpenPLC on a Debian-based Linux distribution"
|
2019-01-31 14:38:16 -08:00
|
|
|
echo " docker Install OpenPLC in a Docker container"
|
2018-06-14 10:43:51 -07:00
|
|
|
echo " rpi Install OpenPLC on a Raspberry Pi"
|
2018-10-09 11:52:58 -07:00
|
|
|
echo " neuron Install OpenPLC on a UniPi Neuron PLC"
|
2018-06-14 10:43:51 -07:00
|
|
|
echo " custom Skip all specific package installation and tries to install"
|
|
|
|
echo " OpenPLC assuming your system already has all dependencies met."
|
|
|
|
echo " This option can be useful if you're trying to install OpenPLC"
|
|
|
|
echo " on an unsuported Linux platform or had manually installed"
|
|
|
|
echo " all the dependency packages before."
|
|
|
|
echo ""
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
set -x
|
|
|
|
# arg1: sudo or blank
|
|
|
|
function linux_install_deps {
|
|
|
|
$1 apt-get update
|
|
|
|
$1 apt-get install -y build-essential pkg-config bison flex autoconf \
|
|
|
|
automake libtool make git python2.7 python-pip \
|
|
|
|
sqlite3 cmake git
|
|
|
|
}
|
|
|
|
|
|
|
|
function install_py_deps {
|
|
|
|
$1 pip install -r requirements.txt
|
|
|
|
}
|
|
|
|
|
|
|
|
function install_all_libs {
|
|
|
|
echo ""
|
2018-06-14 10:43:51 -07:00
|
|
|
echo "[MATIEC COMPILER]"
|
|
|
|
cd utils/matiec_src
|
|
|
|
autoreconf -i
|
|
|
|
./configure
|
|
|
|
make
|
|
|
|
cp ./iec2c ../../webserver/
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling MatIEC"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[ST OPTIMIZER]"
|
|
|
|
cd utils/st_optimizer_src
|
|
|
|
g++ st_optimizer.cpp -o st_optimizer
|
|
|
|
cp ./st_optimizer ../../webserver/
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling ST Optimizer"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
echo ""
|
|
|
|
echo "[GLUE GENERATOR]"
|
|
|
|
cd utils/glue_generator_src
|
|
|
|
g++ glue_generator.cpp -o glue_generator
|
|
|
|
cp ./glue_generator ../../webserver/core
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling Glue Generator"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
echo ""
|
|
|
|
echo "[OPEN DNP3]"
|
|
|
|
cd utils/dnp3_src
|
|
|
|
echo "creating swapfile..."
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 dd if=/dev/zero of=swapfile bs=1M count=1000
|
|
|
|
$1 mkswap swapfile
|
|
|
|
$1 swapon swapfile
|
2018-06-14 10:43:51 -07:00
|
|
|
cmake ../dnp3_src
|
|
|
|
make
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 make install
|
2018-06-14 10:43:51 -07:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error installing OpenDNP3"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 ldconfig
|
2018-06-14 10:43:51 -07:00
|
|
|
echo "removing swapfile..."
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 swapoff swapfile
|
|
|
|
$1 rm -f ./swapfile
|
2018-06-14 10:43:51 -07:00
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2018-08-10 17:18:20 -07:00
|
|
|
echo ""
|
|
|
|
echo "[LIBMODBUS]"
|
|
|
|
cd utils/libmodbus_src
|
2018-08-10 17:38:15 -07:00
|
|
|
./autogen.sh
|
2018-08-10 17:45:22 -07:00
|
|
|
./configure
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 make install
|
2018-08-10 17:18:20 -07:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error installing Libmodbus"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 ldconfig
|
2018-08-10 17:18:20 -07:00
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
if [ "$1" == "sudo" ]; then
|
|
|
|
echo ""
|
|
|
|
echo "[OPENPLC SERVICE]"
|
|
|
|
WORKING_DIR=$(pwd)
|
|
|
|
echo -e "[Unit]\n\
|
2018-08-31 11:04:31 -07:00
|
|
|
Description=OpenPLC Service\n\
|
|
|
|
After=network.target\n\
|
|
|
|
\n\
|
|
|
|
[Service]\n\
|
|
|
|
Type=simple\n\
|
|
|
|
Restart=always\n\
|
|
|
|
RestartSec=1\n\
|
|
|
|
User=root\n\
|
|
|
|
Group=root\n\
|
|
|
|
WorkingDirectory=$WORKING_DIR\n\
|
|
|
|
ExecStart=$WORKING_DIR/start_openplc.sh\n\
|
|
|
|
\n\
|
|
|
|
[Install]\n\
|
|
|
|
WantedBy=multi-user.target" >> openplc.service
|
2019-02-01 10:17:33 -08:00
|
|
|
$1 cp -rf ./openplc.service /lib/systemd/system/
|
|
|
|
rm -rf openplc.service
|
|
|
|
$1 "Enabling OpenPLC Service..."
|
|
|
|
$1 systemctl daemon-reload
|
|
|
|
$1 systemctl enable openplc
|
|
|
|
fi
|
|
|
|
}
|
2019-01-31 14:38:16 -08:00
|
|
|
|
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
if [ "$1" == "win" ]; then
|
|
|
|
echo "Installing OpenPLC on Windows"
|
|
|
|
cp ./utils/apt-cyg/apt-cyg ./
|
|
|
|
cp ./utils/apt-cyg/wget.exe /bin
|
|
|
|
install apt-cyg /bin
|
|
|
|
apt-cyg install lynx
|
|
|
|
rm -f /bin/wget.exe
|
|
|
|
apt-cyg install wget gcc-core gcc-g++ git pkg-config automake autoconf libtool make python2 python2-pip sqlite3
|
|
|
|
lynx -source https://bootstrap.pypa.io/get-pip.py > get-pip.py
|
|
|
|
python get-pip.py
|
|
|
|
pip install flask
|
|
|
|
pip install flask-login
|
|
|
|
pip install pyserial
|
2019-01-31 08:04:29 -08:00
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[MATIEC COMPILER]"
|
2019-02-01 10:17:33 -08:00
|
|
|
cp ./utils/matiec_src/bin_win32/*.* ./webserver/
|
2019-01-31 08:04:29 -08:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling MatIEC"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[ST OPTIMIZER]"
|
|
|
|
cd utils/st_optimizer_src
|
|
|
|
g++ st_optimizer.cpp -o st_optimizer
|
2019-02-01 10:17:33 -08:00
|
|
|
cp ./st_optimizer.exe ../../webserver/
|
2019-01-31 08:04:29 -08:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling ST Optimizer"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-01-31 08:04:29 -08:00
|
|
|
echo ""
|
|
|
|
echo "[GLUE GENERATOR]"
|
|
|
|
cd utils/glue_generator_src
|
|
|
|
g++ glue_generator.cpp -o glue_generator
|
2019-02-01 10:17:33 -08:00
|
|
|
cp ./glue_generator.exe ../../webserver/core
|
2019-01-31 08:04:29 -08:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error compiling Glue Generator"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-01-31 08:04:29 -08:00
|
|
|
echo ""
|
|
|
|
echo "[OPEN DNP3]"
|
2019-02-01 10:17:33 -08:00
|
|
|
cd webserver/core
|
|
|
|
mv dnp3.cpp dnp3.disabled
|
2019-01-31 08:04:29 -08:00
|
|
|
if [ $? -ne 0 ]; then
|
2019-02-01 10:17:33 -08:00
|
|
|
echo "Error disabling OpenDNP3"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
mv dnp3_dummy.disabled dnp3_dummy.cpp
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error disabling OpenDNP3"
|
2019-01-31 08:04:29 -08:00
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[LIBMODBUS]"
|
|
|
|
cd utils/libmodbus_src
|
|
|
|
./autogen.sh
|
|
|
|
./configure
|
2019-02-01 10:17:33 -08:00
|
|
|
make install
|
2019-01-31 08:04:29 -08:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error installing Libmodbus"
|
|
|
|
echo "OpenPLC was NOT installed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
cd ../..
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
2019-02-01 10:17:33 -08:00
|
|
|
./change_hardware_layer.sh blank
|
2019-01-31 08:04:29 -08:00
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
2018-06-14 10:43:51 -07:00
|
|
|
|
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
elif [ "$1" == "linux" ]; then
|
|
|
|
echo "Installing OpenPLC on Linux"
|
|
|
|
linux_install_deps sudo
|
|
|
|
|
|
|
|
install_py_deps
|
|
|
|
install_py_deps sudo
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
install_all_libs sudo
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
echo ""
|
2019-02-01 10:17:33 -08:00
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
|
|
|
./change_hardware_layer.sh blank_linux
|
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
2019-01-31 14:38:16 -08:00
|
|
|
|
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
elif [ "$1" == "docker" ]; then
|
|
|
|
echo "Installing OpenPLC on Linux inside Docker"
|
|
|
|
linux_install_deps
|
|
|
|
install_py_deps
|
|
|
|
install_all_libs
|
2018-08-31 11:04:31 -07:00
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
echo ""
|
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
|
|
|
./change_hardware_layer.sh blank_linux
|
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
2018-10-09 11:52:58 -07:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
elif [ "$1" == "rpi" ]; then
|
|
|
|
echo "Installing OpenPLC on Raspberry Pi"
|
|
|
|
|
|
|
|
linux_install_deps sudo
|
|
|
|
|
|
|
|
install_py_deps
|
|
|
|
install_py_deps sudo
|
2018-10-09 11:52:58 -07:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
install_all_libs sudo
|
2018-10-09 11:52:58 -07:00
|
|
|
|
|
|
|
echo ""
|
2019-02-01 10:17:33 -08:00
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
|
|
|
./change_hardware_layer.sh blank_linux
|
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
2018-10-09 11:52:58 -07:00
|
|
|
|
2019-01-31 14:38:16 -08:00
|
|
|
|
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
elif [ "$1" == "neuron" ]; then
|
|
|
|
echo "Installing OpenPLC on UniPi Neuron PLC"
|
|
|
|
linux_install_deps sudo
|
|
|
|
|
|
|
|
install_py_deps
|
|
|
|
install_py_deps sudo
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
install_all_libs sudo
|
2018-10-09 11:52:58 -07:00
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
|
|
|
./change_hardware_layer.sh blank_linux
|
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
|
2018-08-10 17:18:20 -07:00
|
|
|
|
|
|
|
elif [ "$1" == "custom" ]; then
|
|
|
|
echo "Installing OpenPLC on Custom Platform"
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2019-02-01 10:17:33 -08:00
|
|
|
install_all_libs
|
2019-01-31 14:38:16 -08:00
|
|
|
|
2018-08-10 17:18:20 -07:00
|
|
|
echo ""
|
|
|
|
echo "[FINALIZING]"
|
|
|
|
cd webserver/scripts
|
|
|
|
./change_hardware_layer.sh blank_linux
|
|
|
|
./compile_program.sh blank_program.st
|
|
|
|
cp ./start_openplc.sh ../../
|
|
|
|
|
|
|
|
|
2018-06-14 10:43:51 -07:00
|
|
|
else
|
|
|
|
echo ""
|
|
|
|
echo "Error: unrecognized platform"
|
|
|
|
echo ""
|
|
|
|
echo "Usage: ./install.sh [platform] where [platform] can be"
|
|
|
|
echo " win Install OpenPLC on Windows over Cygwin"
|
|
|
|
echo " linux Install OpenPLC on a Debian-based Linux distribution"
|
|
|
|
echo " rpi Install OpenPLC on a Raspberry Pi"
|
|
|
|
echo " custom Skip all specific package installation and tries to install"
|
|
|
|
echo " OpenPLC assuming your system already has all dependencies met."
|
|
|
|
echo " This option can be useful if you're trying to install OpenPLC"
|
|
|
|
echo " on an unsuported Linux platform or had manually installed"
|
|
|
|
echo " all the dependency packages before."
|
|
|
|
echo ""
|
|
|
|
exit 1
|
|
|
|
fi
|