Hydro Contest OS

Hydro Contest OS is the standardized workstation environment maintained by the technical team for XCPC onsite contests, providing consistent compilers, IDEs, desktop settings, user restrictions, and onsite operations tools across venues and seasons.

Hydro Contest OS 2025 Installation Guide

Deploy the 2025 image automatically with the CLI Deploy Toolkit or install it manually with Calamares.

Boot and installation modes

The default boot entry uses the CLI Deploy Toolkit autoinstall configuration to deploy the image automatically to the first available disk. The process requires no user interaction, and the system is ready to use immediately after installation. This is the recommended deployment method. See the automatic installation guide below to customize the configuration.

Disk safety note: The default automatic deployment rebuilds the target disk according to its configuration. Test the boot entry, target disk, and networking on matching hardware before lab-wide deployment.

For dual-boot installations or other cases requiring manual disk selection, use the Install ICPC Contest Image boot entry. It starts a live environment where the image can be installed manually with Calamares. This method is not recommended for contest environments because it requires manual intervention on every machine.

Automatic installation guide

The autoinstall feature is a subset of the Subiquity installer used by Ubuntu Server. It provides unattended installation and system configuration.

The 2025 CLI Deploy Toolkit supports only a limited subset of network and user-data configuration. All other Subiquity configuration keys will be ignored.

Configuration can be supplied as:

  • #cloud-config user data containing autoinstall: directives
  • configuration written directly to the installation medium

Autoinstall using cloud-config

The recommended way to supply the autoinstall configuration is through cloud-init. This applies the configuration to the installer without modifying the installation medium. Cloud-init is flexible, and in most environments the easiest option is to provide user data through the NoCloud data source.

Autoinstall from the installation medium

Alternatively, place a file named autoinstall.yaml on the installation medium. The installer checks two locations:

  • The root of the installation medium. After writing the ISO to a USB drive, copy autoinstall.yaml to the partition containing the ISO files, next to the casper directory.
  • The root filesystem of the installation system. This usually requires modifying the ISO and is not recommended.
#cloud-config
autoinstall:
  version: 1
  user-data:
    # Password for the default user
    # Generate a SHA-512 password hash with "openssl passwd -6 passw0rd"
    password: '$6$UKai2yFOPb8$KAVcYf7BkWWqxnyR24Is/1rvcSTfuOA3uiA65OszXtsmuo3kif4W6gdND0iclBS6ihrN2N5PoiObUVulfEOxg/'

    # Do not expire the password on first login
    chpasswd:
      expire: false

    # Configure SSH public keys for root and the default user
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIElY6Wzp70KNeMRGDBsLMCfDIwe3qZ5lmpzFvAnrbLfr sysops

    # Configure automatic login for the default user
    write_files:
      - path: /etc/gdm3/custom.conf
        content: |
          [daemon]
          AutomaticLoginEnable=true
          AutomaticLogin=icpc

          [security]

          [xdmcp]

          [chooser]

          [debug]
        owner: root:root
        permissions: '0644'

  network:
    version: 2
    wifis:
      # CLI Deploy Toolkit extension, not a standard cloud-init feature
      # __autodetect__ selects the first available Wi-Fi adapter
      __autodetect__:
        dhcp4: true
        dhcp-identifier: mac
        optional: true
        access-points:
          icpc-contest:
            password: 'p@s$w0rd'

__autodetect__ is a CLI Deploy Toolkit extension that selects the first available Wi-Fi adapter and connects to the specified wireless network. Complete a full installation, first boot, automatic login, and network test before production deployment.