Repository moved to monorepo: https://github.com/varqox/sim-project
Sim is an open source platform for carrying out algorithmic contests
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).
- Meson build system
- gcc/g++ (with 32 bit support – for compiling submissions) with C++17 support
- MariaDB server
- MariaDB client library
- libseccomp
- libzip
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.
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
- 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.
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
meson setup release-build/ -Dbuildtype=release -Ddefault_library=both
ninja -C release-build/
meson setup build/ -Dc_args=-DDEBUG -Dcpp_args='-DDEBUG -D_GLIBCXX_DEBUG' -Db_sanitize=undefined -Db_lundef=false
ninja -C build/
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
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
ninja -C build/ test # or other build directory
To format all sources (clang-format is required):
ninja -C build format
To lint all sources:
ninja -C build tidy
or
./tidy
To lint specified sources:
./tidy path/to/source.cc other/source.h
ninja -C build scan-build