MRCI/linux_build.sh
Maurice ONeal 6e068a8e83 New versioning system, type ids and a few bug fixes
Changed the versioning system to a 4 number system that have the first 2
numbers as major.minor for the host application itself and the next 2
numbers (tcp_rev.mod_rev) used by clients and modules to determine
compatibility. A full description of this new system has been edited
into protocol.md. This new system offically starts at v3.0.0.0.

Added the PROMPT data type id that will work exactly like PRIV_TEXT except
it tells the client that the command is asking for non-private information
from the user.

Added PROG and PROG_LAST type ids that can be used by commands to notify
the client of the progress of the command if it is long running. The
long running fs_* commands were updated to use these instead of TEXT for
progress updates.

PUB_IPC, PRIV_IPC and PUB_IPC_WITH_FEEDBACK have all been combined into
one: ASYNC_PAYLOAD. This type id is now the only means at which module
commands can now run async commands. The command process object will
now determine where to direct the async payload (public, private or
public with feedback) based on the async command id being requested.

A description for TERM_CMD was missing in data_types.md so it was added.

Refactored HALT_CMD to YIELD_CMD. The new name just seems more appropriate
or the effect it has on the command.

Module commands can now do input hooking using the new ASYNC_HOOK_INPUT
and ASYNC_UNHOOK async commands. input hooking basically makes it so all
client data gets redirected to the module command that initiated the hook.
This can be used to implement something like a EULA agreement that blocks
all actions that can place during the session until the user accepts or
anything else to that effect.

The command process object will now check the open sub-channels list
being sent by ASYNC_CAST or ASYNC_LIMITED_CAST in any order and will not
be required match exactly to open sub-channels list in the session object.
It however cannot contain sub-channels not already listed in session's
list or else the async payload will be blocked.

Fixed the CmdProcess::validAsync() function that was comparing the input
aysnc command id with the process's command id in some places which is
invalid logic for this function.

Fixed the 'cast' core command that was outputting a malformed async
payload that didn't include the open writable sub-channels list.

Fixed a bug that caused all casted payloads to be forwared to the clients
even when the sub-channel(s) are closed.

Fixed the 'set_disp_name' core command so it can now see the -new_name
argument properly.
2020-03-08 14:58:51 -04: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="3.0.0.0"
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