Skip to content
This repository has been archived by the owner on Feb 29, 2024. It is now read-only.
/ sim Public archive

Sim is an open source platform for carrying out algorithmic contests and programming classes.

License

Notifications You must be signed in to change notification settings

varqox/sim

Repository files navigation

Repository moved to monorepo: https://github.com/varqox/sim-project

Sim Build Status Coverity Scan Build Status Gitter chat

Sim is an open source platform for carrying out algorithmic contests

How to build

NOTE: There is a script scripts/setup_sim_on_debian_12.py. So if you need to look at very precise instructions that set up Sim, you can check out these scripts. If you intend to use it, first look at help, by just running the script without arguments, choose what you need and the script will guide you through the rest.

You will need meson build system to be installed (on most platforms it is in the meson package).

Dependencies:

  • Meson build system
  • gcc/g++ (with 32 bit support – for compiling submissions) with C++17 support
  • MariaDB server
  • MariaDB client library
  • libseccomp
  • libzip

Debian

sudo apt install g++ mariadb-server libmariadb-dev libseccomp-dev libzip-dev libssl-dev libcap-dev rustc fpc pkgconf meson

Ubuntu is not officially supported, you may try it, it may (not) work. Modern versions of some of the above packages are needed to build sim successfully.

Arch Linux

sudo pacman -S gcc mariadb mariadb-libs libseccomp libzip libcap rust fpc meson && \
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql && \
sudo systemctl enable mariadb && sudo systemctl start mariadb

Instructions: release build and installation step by step

  1. In case you installed MariaDB server for the first time, you should run:
sudo mysql_secure_installation
  1. First of all clone the repository and all its submodules
git clone --recursive https://github.com/varqox/sim && cd sim
  1. Then setup build directory:
meson setup release-build/ -Dbuildtype=release
  1. Build:
ninja -C release-build/
  1. Make sure that you have created a MariaDB account and a database for Sim, use command below to create an user sim@localhost and a database simdb (when asked for password, enter your mariadb root password, by default it is empty – if that does not work, try running the below command with sudo):
mysql -e "CREATE USER sim@localhost IDENTIFIED BY 'sim'; CREATE DATABASE simdb; GRANT ALL ON simdb.* TO 'sim'@'localhost';" -u root -p
  1. Configure a directory for a Sim instance
meson configure release-build --prefix $PWD/sim

This sets Sim instance's directory to $PWD/sim i.e. subdirectory sim of the current working directory. If you want to install Sim in other location, replace $PWD/sim with it.

  1. Install
meson install -C release-build

It will ask for MariaDB credentials. In previous step you created a MariaDB user and database, by default: username sim, password sim, database simdb and user host localhost.

  1. Run servers If you installed Sim in the default location:
sim/manage start

If you installed Sim elsewhere:

where-you-installed-sim/manage start

You can easily make it run in a background by adding -b parameter:

sim/manage -b start

Meson allows building and installing in one go:

meson install -C release-build

So building, installing and running can be combined into:

meson install -C release-build && sim/manage -b start
  1. Visit http://127.7.7.7:8080 via your web browser. By default a Sim root account was created there with following credentials:
username: sim
password: sim

Remember to change the password now (or later) if you want to make Sim website accessible to others. Do not make hacker's life easier!

  1. Well done! You have just fully set up Sim. There is a sim-server configuration file where-you-installed-sim/sim.conf (sim/sim.conf by default) where server parameters like address, workers etc. reside. Also, there are log files where-you-installed-sim/log/*.log that you can find useful if something didn't work.

  2. If you want to run Sim at system startup then you can use crontab -- just add these lines to your crontab (using command crontab -e):

@reboot sh -c 'until test -e /var/run/mysqld/mysqld.sock; do sleep 0.4; done; where-you-installed-sim/manage start&'

where-you-installed-sim = an absolute path to Sim instance's directory e.g. /home/your_username/sim/sim

  1. Feel free to report any bugs or things you would like to see.

Upgrading

Be aware that sometimes incompatible database or other inner changes won't allow for a smooth upgrade. In such cases sim-upgrader may come handy, grep the commit messages for it to check if it is needed.

To upgrade just type:

git pull --rebase --autostash
git submodule update --init --recursive
meson install -C release-build
sim/manage -b start

Release build

meson setup release-build/ -Dbuildtype=release -Ddefault_library=both
ninja -C release-build/

Development build

meson setup build/ -Dc_args=-DDEBUG -Dcpp_args='-DDEBUG -D_GLIBCXX_DEBUG' -Db_sanitize=undefined -Db_lundef=false
ninja -C build/

Installing

Run after building:

# we will use release-build build directory, if you use other just change all release-build below
meson configure release-build --prefix $PWD/sim # if you want to install to sim/ subdirectory
meson install -C release-build

Managing the Sim instance i.e. starting / stopping servers

For this, there is manage program in the instance's main directory. To start servers type:

sim/manage start # or other instance's directory

To stop servers:

sim/manage stop

For more options:

sim/manage help

Running tests

ninja -C build/ test # or other build directory

Development build targets

Formating C/C++ sources

To format all sources (clang-format is required):

ninja -C build format

Linting C/C++ sources

All sources

To lint all sources:

ninja -C build tidy

or

./tidy

Specified sources

To lint specified sources:

./tidy path/to/source.cc other/source.h

Static analysis

ninja -C build scan-build

About

Sim is an open source platform for carrying out algorithmic contests and programming classes.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages