Sim is an open source platform for carrying out algorithmic contests
You will need meson
build system to be installed (on most platforms it is in the meson package).
- Meson build system (Debian package: meson)
- gcc/g++ (with 32 bit support โ for compiling submissions) with C++17 support (Debian package: g++-multilib)
- MariaDB (Debian package: mariadb-server)
- MariaDB client library (Debian packages: libmariadbclient-dev)
- libseccomp (Debian package: libseccomp-dev)
- libzip (Debian package: libzip-dev)
sudo apt-get install g++-multilib mariadb-server libmariadbclient-dev libseccomp-dev libzip-dev meson libssl-dev
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 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