Feat(domserver): docker compose testing #1

Merged
ytshih merged 16 commits from ytshih/testing into main 2025-04-07 20:44:26 +08:00
12 changed files with 231 additions and 31 deletions
Showing only changes of commit 83a95fe49c - Show all commits

View File

@@ -2,7 +2,7 @@
## Usage ## Usage
0. Install Arch Linux for domserver and **Debian 11** for judgehost. 0. Install Arch Linux for domserver and **Debian 12** for judgehost.
1. Fill in the vars in `group_vars`. 1. Fill in the vars in `group_vars`.
2. Fill in `domserver` and `judgehost` groups in `hosts` file. 2. Fill in `domserver` and `judgehost` groups in `hosts` file.
3. Run `ansible-playbook playbooks/domserver`. 3. Run `ansible-playbook playbooks/domserver`.
@@ -12,10 +12,18 @@
## Trouble shooting ## Trouble shooting
### I give up
Just use Debian 12 + docker.
### Judgehost cannot startup ### Judgehost cannot startup
The cgroups v2 support had been patched since October, 2024. However the latest The cgroups v2 support had been patched since October, 2024. However the latest
release of domjudge is 8.3.1, which was published on September, 2024. release of domjudge is 8.3.1, which was published on September, 2024.
Therefore, before cgroups v2 patch came out as a stable release, we still have Therefore, before cgroups v2 patch came out as a stable release, we still have
to use a older release, like Debian 11, to make things work. to use a older release, like Debian 12, to make things work.
### PHP syntax error
PHP version on Debian 11 is too old, use Debian 12 instead.

View File

@@ -1,3 +1,3 @@
--- ---
domjudge_base_dir: /opt/domjudge/midterm domjudge_base_dir: /opt/domjudge
domserver_url: https://cp1.konchin.com domserver_url: https://cp1.konchin.com/

2
hosts
View File

@@ -7,7 +7,7 @@ localhost ansible_connection=local
[judgehost] [judgehost]
10.4.2.227 10.4.2.227
10.4.2.228 #10.4.2.228
[all:vars] [all:vars]
ansible_python_interpreter=/usr/bin/python3 ansible_python_interpreter=/usr/bin/python3

View File

@@ -2,5 +2,6 @@
- name: Install judgehost - name: Install judgehost
hosts: judgehost hosts: judgehost
roles: roles:
- role: install_packages_debian11 #- role: install_packages_debian
- role: configure_judgehost_legacy #- role: configure_judgehost_legacy
- role: configure_judgehost

View File

@@ -21,8 +21,11 @@ services:
CONTAINER_TIMEZONE: Asia/Taipei CONTAINER_TIMEZONE: Asia/Taipei
restart: always restart: always
volumes: volumes:
- "restapi_secret:/opt/domjudge/domserver/etc/restapi.secret"
- "./config/php/domjudge.conf:/etc/php/8.2/fpm/pool.d/domjudge.conf" - "./config/php/domjudge.conf:/etc/php/8.2/fpm/pool.d/domjudge.conf"
depends_on: depends_on:
- mariadb - mariadb
ports: ports:
- "127.0.0.1:8080:80" - "127.0.0.1:8080:80"
volumes:
restapi_secret: {}

View File

@@ -1,6 +1,10 @@
--- ---
- name: Reboot - name: Reboot
ansible.builtin.reboot: {} ansible.builtin.reboot: {}
- name: Update grub
ansible.builtin.command: |
update-grub
changed_when: true
- name: Restart judgehost docker compose - name: Restart judgehost docker compose
community.docker.docker_compose_v2: community.docker.docker_compose_v2:
project_src: "{{ domjudge_base_dir }}" project_src: "{{ domjudge_base_dir }}"

View File

@@ -1,10 +1,23 @@
--- ---
- name: Add boot parameters - name: Add boot parameters (Archlinux)
ansible.builtin.lineinfile: ansible.builtin.lineinfile:
path: /boot/loader/entries/arch.conf path: /boot/loader/entries/arch.conf
line: >- line: >-
options cgroup_enable=memory options cgroup_enable=memory
notify: Reboot notify: Reboot
when: ansible_facts['distribution'] == "Archlinux"
- name: Add boot parameters (Debian)
ansible.builtin.lineinfile:
path: /etc/default/grub
regexp: '^GRUB_CMDLINE_LINUX_DEFAULT='
line: >-
GRUB_CMDLINE_LINUX_DEFAULT="quiet
cgroup_enable=memory swapaccount=1 isolcpus=0
systemd.unified_cgroup_hierarchy=0"
notify:
- Update grub
- Reboot
when: ansible_facts['distribution'] == "Debian"
- name: Flush handlers - name: Flush handlers
ansible.builtin.meta: flush_handlers ansible.builtin.meta: flush_handlers

View File

@@ -0,0 +1,14 @@
---
- name: Update grub
ansible.builtin.command: |
update-grub
changed_when: true
- name: Reboot
ansible.builtin.reboot:
- name: Systemd daemon-reload
ansible.builtin.systemd_service:
daemon_reload: true
- name: Restart judgehost
ansible.builtin.systemd_service:
name: domjudge-judgehost.target
state: restarted

View File

@@ -1,4 +1,138 @@
--- ---
- name: Show domjudge base dir - name: Run ./configure
tags: [make]
ansible.builtin.command: >-
./configure
--with-baseurl={{ domserver_url }}
--prefix={{ domjudge_base_dir }}
args:
chdir: "{{ domjudge_base_dir }}"
become: true
become_user: domjudge
changed_when: true
register: debug
- name: Debug
tags: [make]
ansible.builtin.debug: ansible.builtin.debug:
var: domjudge_base_dir var: debug.stdout_lines
- name: Run make judgehost
tags: [make]
ansible.builtin.command: |
make judgehost
args:
chdir: "{{ domjudge_base_dir }}"
become: true
become_user: domjudge
register: debug
- name: Debug
tags: [make]
ansible.builtin.debug:
var: debug.stdout_lines
- name: Run make install-judgehost
tags: [make]
ansible.builtin.command: |
make install-judgehost
args:
chdir: "{{ domjudge_base_dir }}"
notify:
- Systemd daemon-reload
register: debug
- name: Debug
tags: [make]
ansible.builtin.debug:
var: debug.stdout_lines
- name: Create domjudge-run group
tags: [make]
ansible.builtin.group:
name: domjudge-run
- name: Add domjudge-run user
tags: [make]
ansible.builtin.user:
name: domjudge-run
home: /nonexistent
group: domjudge-run
shell: /bin/false
- name: Add domjudge-run-0 user
tags: [make]
ansible.builtin.user:
name: domjudge-run-0
home: /nonexistent
group: domjudge-run
shell: /bin/false
- name: Copy sudoers-domjudge
tags: [make]
ansible.builtin.copy:
src: "{{ domjudge_base_dir }}/etc/sudoers-domjudge"
dest: /etc/sudoers.d/sudoers-domjudge
remote_src: true
mode: '0440'
owner: root
group: root
- name: Run misc-tools/dj_make_chroot
ansible.builtin.command: |
./misc-tools/dj_make_chroot
args:
chdir: "{{ domjudge_base_dir }}"
- name: Modify boot options
ansible.builtin.lineinfile:
path: /etc/default/grub
regexp: '^GRUB_CMDLINE_LINUX_DEFAULT='
line: >-
GRUB_CMDLINE_LINUX_DEFAULT="quiet
cgroup_enable=memory swapaccount=1 isolcpus=0
systemd.unified_cgroup_hierarchy=0"
notify:
- Update grub
- Reboot
- name: Flush handlers
ansible.builtin.meta: flush_handlers
- name: Fetch judgehost password
tags: [make]
community.docker.docker_compose_v2_exec:
project_src: "{{ domjudge_base_dir }}"
service: domserver
command: >-
sed -nr 's/^.*\W+judgehost\W+(.+)$/\1/p'
/opt/domjudge/domserver/etc/restapi.secret
delegate_to: "{{ groups['domserver'] | first }}"
run_once: true
register: fetch_reg
- name: Set judgehost facts
tags: [make]
ansible.builtin.set_fact:
domserver_url: "{{ domserver_url }}"
judgehost_password: "{{ fetch_reg['stdout'] }}"
run_once: true
- name: Show judgehost password
tags: [make]
ansible.builtin.debug:
var: judgehost_password
- name: Install restapi.secret
tags: [make]
ansible.builtin.copy:
content: >-
default {{ domserver_url }}/api judgehost {{ judgehost_password }}
dest: "{{ domjudge_base_dir }}/judgehost/etc/restapi.secret"
mode: '0640'
owner: domjudge
group: domjudge
- name: Flush handlers
tags: [make]
ansible.builtin.meta: flush_handlers
- name: Enable and start domjudge-judgehost.target
tags: [make]
ansible.builtin.systemd_service:
name: domjudge-judgehost.target
state: started
enabled: true

View File

@@ -1,25 +1,43 @@
- name: Download domjudge tarball
ansible.builtin.get_url:
url: "{{ domjudge_tarball_url }}"
dest: /opt/
mode: '0644'
owner: root
group: root
register: downloaded_tarball
- name: Install domjudge directory - name: Install domjudge directory
ansible.builtin.file: ansible.builtin.file:
path: "{{ domjudge_base_dir }}" path: "{{ domjudge_base_dir | dirname }}"
state: directory state: directory
recurse: true recurse: true
mode: '0700' mode: '0750'
owner: domjudge
group: domjudge
- name: Install domjudge by tarball
block:
- name: Create tmp for domjudge tarball
ansible.builtin.file:
path: /run/domjudge
state: directory
mode: '0755'
owner: root owner: root
group: root group: root
- name: Extract domjudge tarball - name: Download domjudge tarball
ansible.builtin.get_url:
url: "{{ domjudge_tarball_url }}"
dest: /run/domjudge/
mode: '0644'
owner: domjudge
group: domjudge
register: downloaded_tarball
- name: Extract domjudge tarball
ansible.builtin.unarchive: ansible.builtin.unarchive:
src: "{{ downloaded_tarball.dest }}" src: "{{ downloaded_tarball.dest }}"
dest: "{{ domjudge_base_dir }}" dest: /run/domjudge/
remote_src: true remote_src: true
owner: domjudge
group: domjudge
register: domjudge_extracted register: domjudge_extracted
- name: Set new domjudge_base_dir - name: Set new domjudge_base_dir
ansible.builtin.set_fact: ansible.builtin.set_fact:
domjudge_base_dir: "{{ domjudge_extracted.dest }}" domjudge_extracted_dir: "{{ domjudge_extracted.dest }}/domjudge-{{ judgehost_version }}"
- name: Move content to domjudge base directory
ansible.builtin.shell: |
echo "{{ domjudge_extracted_dir }}"
echo "{{ domjudge_base_dir }}"
mv {{ domjudge_extracted_dir }} {{ domjudge_base_dir }}
args:
creates: "{{ domjudge_base_dir }}"

View File

@@ -1,5 +1,10 @@
--- ---
- name: Add domjudge user
ansible.builtin.user:
name: domjudge
create_home: true
- name: Import domjudge download - name: Import domjudge download
ansible.builtin.import_tasks: download.yml ansible.builtin.import_tasks: download.yml
- name: Import domjudge configure - name: Import domjudge configure
ansible.builtin.import_tasks: configure.yml ansible.builtin.import_tasks: configure.yml
notify: Restart judgehost