MRCI/linux_build.sh
Maurice ONeal 4d47fd187f Installation structor updates
changed the default installattion used in the linux_build.sh
script to create an installer that deauly installs the
application data files in the /var fold folder instead of
the user specific folder in /home.

also made it so it will now create a system user named after
the name of the application and use that user to run the
systemd service instead of the currently logged in user.
doing this harded system security by having the application
run as an under privileged user. this also opens up the
possibility to lock down direct writing access to the host
database to just the internal module (in a future update).

removed the -start command line argument and have just the
-host option to start new host instances. the -start option
would start the host as the current user so i decided to
remove it as a way to encourage end users to start/stop the
host via systemd.
2019-12-24 15:51:10 -05:00

148 lines
5.2 KiB
Bash

#!/bin/sh
qt_dir="$1"
installer_file="$2"
src_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
bin_name="mrci"
app_version="2.1.3"
app_name="MRCI"
install_dir="/opt/$bin_name"
var_dir="/var/opt/$bin_name"
bin_dir="/usr/bin"
tmp_dir="$HOME/.cache/mrci_build"
if [ ! -d "$qt_dir" ]; then
echo "a valid path to Qt was not provided, falling back to the default: /usr/lib/x86_64-linux-gnu/qt5/bin"
qt_dir="/usr/lib/x86_64-linux-gnu/qt5/bin"
else
PATH=$qt_dir:$PATH
fi
if [ "$installer_file" = "" ]; then
installer_file="$src_dir/$bin_name-$app_version.run"
fi
if [ -d "$tmp_dir" ]; then
rm -rf $tmp_dir
fi
if [ $? -eq 0 -a -d "$qt_dir" ]; then
mkdir -vp $tmp_dir
cp -r $src_dir/. $tmp_dir
cd $tmp_dir
qmake -config release
if [ $? -eq 0 ]; then
make
if [ $? -eq 0 ]; then
mkdir -v ./build/
mkdir -v ./build/sqldrivers
mkdir -v ./build/lib
ldd ./$bin_name | grep "libQt" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./build/lib
ldd ./$bin_name | grep "libicu" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./build/lib
ldd ./$bin_name | grep "libssl" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./build/lib
ldd ./$bin_name | grep "libcrypto" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./build/lib
mv -v ./$bin_name ./build/$bin_name
cp -v $qt_dir/../plugins/sqldrivers/libqsqlite.so ./build/sqldrivers
startup_script="./build/$bin_name.sh"
setup_script="./build/setup.sh"
uninstall_script="./build/uninstall.sh"
service_file="./build/$bin_name.service"
echo "#!/bin/sh" > $startup_script
echo "export QTDIR=$install_dir" >> $startup_script
echo "export QT_PLUGIN_PATH=$install_dir" >> $startup_script
echo "export LD_LIBRARY_PATH=\"$install_dir/lib:\$LD_LIBRARY_PATH\"" >> $startup_script
echo "export MRCI_DB_PATH=$var_dir/data.db" >> $startup_script
echo "$install_dir/$bin_name \$1 \$2 \$3" >> $startup_script
echo "#!/bin/sh" > $setup_script
echo "if [ -f \"$install_dir/uninstall.sh\" ]; then" >> $setup_script
echo " sh $install_dir/uninstall.sh" >> $setup_script
echo "fi" >> $setup_script
echo "if [ ! -d \"$install_dir\" ]; then" >> $setup_script
echo " sudo mkdir -p $install_dir" >> $setup_script
echo "fi" >> $setup_script
echo "if [ ! -d \"$var_dir\" ]; then" >> $setup_script
echo " sudo mkdir -p $var_dir" >> $setup_script
echo "fi" >> $setup_script
echo "cp -rfv ./lib $install_dir" >> $setup_script
echo "cp -rfv ./sqldrivers $install_dir" >> $setup_script
echo "cp -fv ./$bin_name $install_dir" >> $setup_script
echo "cp -fv ./$bin_name.sh $install_dir" >> $setup_script
echo "cp -fv ./uninstall.sh $install_dir" >> $setup_script
echo "cp -fv ./$bin_name.service /etc/systemd/system/$bin_name.service" >> $setup_script
echo "useradd -r $bin_name" >> $setup_script
echo "chmod 755 $install_dir/$bin_name" >> $setup_script
echo "chmod 755 $install_dir/$bin_name.sh" >> $setup_script
echo "chmod 755 $install_dir/uninstall.sh" >> $setup_script
echo "chmod 755 $install_dir" >> $setup_script
echo "chmod -R 755 $install_dir/lib" >> $setup_script
echo "chmod -R 755 $install_dir/sqldrivers" >> $setup_script
echo "chmod 755 /etc/systemd/system/$bin_name.service" >> $setup_script
echo "chown -R $bin_name:$bin_name $var_dir" >> $setup_script
echo "chmod -R 755 $var_dir" >> $setup_script
echo "ln -sf $install_dir/$bin_name.sh $bin_dir/$bin_name" >> $setup_script
echo "systemctl start $bin_name" >> $setup_script
echo "systemctl enable $bin_name" >> $setup_script
echo "if [ \$? -eq 0 ]; then" >> $setup_script
echo " echo \"\nInstallation finished. If you ever need to uninstall this application, run this command:\n\"" >> $setup_script
echo " echo \" $install_dir/uninstall.sh\n\"" >> $setup_script
echo "fi" >> $setup_script
echo "[Unit]" > $service_file
echo "Description=$app_name Host Daemon" >> $service_file
echo "After=network.target" >> $service_file
echo "" >> $service_file
echo "[Service]" >> $service_file
echo "Type=simple" >> $service_file
echo "User=$bin_name" >> $service_file
echo "Restart=on-failure" >> $service_file
echo "RestartSec=5" >> $service_file
echo "TimeoutStopSec=infinity" >> $service_file
echo "ExecStart=/usr/bin/env $bin_name -host" >> $service_file
echo "ExecStop=/usr/bin/env $bin_name -stop" >> $service_file
echo "" >> $service_file
echo "[Install]" >> $service_file
echo "WantedBy=multi-user.target" >> $service_file
echo "#!/bin/sh" > $uninstall_script
echo "systemctl -q stop $bin_name" >> $uninstall_script
echo "systemctl -q disable $bin_name" >> $uninstall_script
echo "rm -v /etc/systemd/system/$bin_name.service" >> $uninstall_script
echo "rm -v $bin_dir/$bin_name" >> $uninstall_script
echo "rm -rv $install_dir" >> $uninstall_script
echo "chown -R root:root $var_dir" >> $uninstall_script
echo "deluser $bin_name" >> $uninstall_script
chmod +x $setup_script
makeself ./build $installer_file "$app_name Installation" ./setup.sh
fi
fi
fi
if [ -d "$tmp_dir" ]; then
rm -rf $tmp_dir
fi