102 lines
2.8 KiB
Bash
Executable file
102 lines
2.8 KiB
Bash
Executable file
#!/bin/sh -x
|
|
|
|
# Using a git checkout in the current directory,
|
|
# set up the service (backend) part of agama
|
|
# so that it can be used by
|
|
# - the web frontend (as set up by setup.sh)
|
|
# - the CLI
|
|
# or both
|
|
|
|
# Exit on error; unset variables are an error
|
|
set -eu
|
|
|
|
MYDIR=$(realpath $(dirname $0))
|
|
|
|
# Helper:
|
|
# Ensure root privileges for the installation.
|
|
# In a testing container, we are root but there is no sudo.
|
|
if [ $(id --user) != 0 ]; then
|
|
SUDO=sudo
|
|
if [ $($SUDO id --user) != 0 ]; then
|
|
echo "We are not root and cannot sudo, cannot continue."
|
|
exit 1
|
|
fi
|
|
else
|
|
SUDO=""
|
|
fi
|
|
|
|
# Helper:
|
|
# Like "sed -e $1 < $2 > $3" but $3 is a system file owned by root
|
|
sudosed() {
|
|
echo "$2 -> $3"
|
|
sed -e "$1" "$2" | $SUDO tee "$3" > /dev/null
|
|
}
|
|
|
|
# - Install RPM dependencies
|
|
|
|
# this repo can be removed once python-language-data reaches Factory
|
|
test -f /etc/zypp/repos.d/d_l_python.repo || \
|
|
$SUDO zypper --non-interactive \
|
|
addrepo https://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_Tumbleweed/ d_l_python
|
|
$SUDO zypper --non-interactive --gpg-auto-import-keys install gcc gcc-c++ make openssl-devel ruby-devel \
|
|
python-langtable-data git augeas-devel jemalloc-devel awk || exit 1
|
|
|
|
# only install cargo if it is not available (avoid conflicts with rustup)
|
|
which cargo || $SUDO zypper --non-interactive install cargo
|
|
|
|
# - Install service rubygem dependencies
|
|
(
|
|
cd $MYDIR/service
|
|
bundle config set --local path 'vendor/bundle'
|
|
bundle install
|
|
)
|
|
|
|
# - build also rust service
|
|
(
|
|
cd $MYDIR/rust
|
|
cargo build
|
|
)
|
|
|
|
# - D-Bus configuration
|
|
$SUDO cp -v $MYDIR/service/share/dbus.conf /usr/share/dbus-1/agama.conf
|
|
|
|
# - D-Bus activation configuration
|
|
# (this could be left out but then we would rely
|
|
# on the manual startup via bin/agamactl)
|
|
(
|
|
cd $MYDIR/service/share
|
|
DBUSDIR=/usr/share/dbus-1/agama-services
|
|
|
|
# cleanup previous installation
|
|
[[ -d $DBUSDIR ]] && $SUDO rm -r $DBUSDIR
|
|
|
|
# create services
|
|
$SUDO mkdir -p $DBUSDIR
|
|
for SVC in org.opensuse.Agama*.service; do
|
|
sudosed "s@\(Exec\)=/usr/bin/@\1=$MYDIR/service/bin/@" $SVC $DBUSDIR/$SVC
|
|
done
|
|
sudosed "s@\(ExecStart\)=/usr/bin/@\1=$MYDIR/service/bin/@" \
|
|
agama.service /usr/lib/systemd/system/agama.service
|
|
)
|
|
|
|
# and same for rust service
|
|
(
|
|
cd $MYDIR/rust/share
|
|
DBUSDIR=/usr/share/dbus-1/agama-services
|
|
for SVC in org.opensuse.Agama*.service; do
|
|
# it is intention to use debug here to get more useful debugging output
|
|
sudosed "s@\(Exec\)=/usr/bin/@\1=$MYDIR/rust/target/debug/@" $SVC $DBUSDIR/$SVC
|
|
done
|
|
)
|
|
|
|
# systemd reload and start of service
|
|
(
|
|
$SUDO systemctl daemon-reload
|
|
# Start the separate dbus-daemon for Agama
|
|
# (in CI we run a custom cockpit-ws which replaces the cockpit.socket
|
|
# dependency, continue in that case)
|
|
$SUDO systemctl start agama.service || pgrep cockpit-ws
|
|
)
|
|
|
|
# - Make sure NetworkManager is running
|
|
$SUDO systemctl start NetworkManager
|