Sim
Sim is an open source platform for carrying out algorithmic contests
How to build
NOTE: There are two scripts
scripts/setup-sim-for-camp-on-debian11.sh
andscripts/setup-public-sim-on-debian11.sh
. 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 them, first look and edit the configuration options inside the scripts to your needs.
scripts/setup-sim-for-camp-on-debian11.sh
setups sim and an Nginx HTTPS proxy for an offline camp on Debian 11.scripts/setup-public-sim-on-debian11.sh
setups Nginx, Certbot, emails, and much more.
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++-multilib mariadb-server libmariadb-dev libseccomp-dev libzip-dev libssl-dev 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 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
- In case you installed MariaDB server for the first time, you should run:
sudo mysql_secure_installation
- First of all clone the repository and all its submodules
git clone --recursive https://github.com/varqox/sim && cd sim
- Then setup build directory:
meson setup release-build/ -Dbuildtype=release
- Build:
ninja -C release-build/
- 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 databasesimdb
(when asked for password, enter your mariadb root password, by default it is empty – if that does not work, try running the below command withsudo
):
mysql -e "CREATE USER sim@localhost IDENTIFIED BY 'sim'; CREATE DATABASE simdb; GRANT ALL ON simdb.* TO 'sim'@'localhost';" -u root -p
- 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.
- 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
.
- 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 startMeson allows building and installing in one go:
meson install -C release-buildSo building, installing and running can be combined into:
meson install -C release-build && sim/manage -b start
- 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!
-
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 likeaddress
,workers
etc. reside. Also, there are log fileswhere-you-installed-sim/log/*.log
that you can find useful if something didn't work. -
If you want to run Sim at system startup then you can use
crontab
-- just add these lines to your crontab (using commandcrontab -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
- 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