Hopm-NowWithInit

Ight this is Hopm,
(fancy subtitle): Now with init!


So ehh, I don't know how to write things professionally but:

<jrmu> ok can you put it on the wiki? You can create a new page or add a new page to the almanack, or add it to the end of https://wiki.ircnow.org/?n=Hopm.Install
<jrmu> maybe add a new section and keep the old content intact until you are 100% sure it is a full replacement

So first of all I'll give you the 1:1 without cleaning it up (not sorry) but be warned it will not work unless you use my weird HOPM build as well.

#!/bin/ksh

daemon="/usr/local/bin/hopm"
daemon_user="_hopm"
daemon_flags="-c ../../../../etc/hopm -d" # Do not include .conf as per https://github.com/ircd-hybrid/hopm/blob/1.1.x/INSTALL.md

. /etc/rc.d/rc.subr

# I could write this a better place but I chose to do it here.
# Reloading HOPM _WILL_ kill it.
# Aparently theres a bug in HOPM so it has to run in debug mode.  It might have something to do with my weird configure flags :)

rc_cmd $1

You're going to want to place that in a file located at /etc/rc.d/hopm You must ensure root can read and execute that file.

Secondly a user named _hopm with the homedir builds the the HOPM program with the configure flags "--bindir=/usr/local/bin --prefix=/var/hopm/hopm --localstatedir=/var"

Your hopm conf is now located at /etc/hopm.conf (You have to create it yourself, see <insert jrmu's HOPM guide here>)

Ensure /var/log/scan.log and /var/log/hopm.log and /var/run/hopm.pid is readable and writeable by _hopm

And that should be it just `$ rcctl start hopm' and you'll be good to go, and if you're scared of crashes you can add `*/5 * * * * rcctl check hopm || rcctl start hopm' to roots crontab

Currently known bugs: reloading = crash and startup takes a while because of debug flag.
Heres an ansible task for the smart and lazy (make sure hopm.version is 1.1.10 or the current latest:

---
  # Note to future contributer (probably just me): This file is getting long, I want to seperate its modules soon[tm].
  - name: Create HOPM service account.
    user:
      name: _hopm
      password: '*'
      comment: "HOPM Daemon"
      shell: "/sbin/nologin"
      home: "/var/hopm"

  - name: Does hopm-$relase exist?
    stat:
      name: "/var/hopm/hopm-{{ hopm.release }}"
    register: does_hopm_release_exist

  - name: Install dependency packages.
    openbsd_pkg:
      name: "{{ packages }}"
    vars:
      packages:
        - gtar--
        - gmake
    tags: packages

  - name: Build HOPM.
    block:
      - name: Download HOPM source code tar file.
        get_url:
          url: "https://github.com/ircd-hybrid/hopm/archive/refs/tags/{{ hopm.release }}.tar.gz"
          dest: "/var/hopm/{{ hopm.release }}.tar.gz"

      - name: Unarchive HOPM source code tar file.
        unarchive:
          src: "/var/hopm/{{ hopm.release }}.tar.gz"
          dest: "/var/hopm/"
          remote_src: true

      - name: Delete HOPM source code tar file.
        file:
          name: "/var/hopm/{{ hopm.release }}.tar.gz"
          state: absent

      - name: $ ./configure
        shell:
          cmd: "/var/hopm/hopm-{{ hopm.release }}/configure --bindir=/usr/local/bin --prefix=/var/hopm/hopm --localstatedir=/var"
          chdir: "/var/hopm/hopm-{{ hopm.release }}/"

      - name: $ gmake # We _need_ to use gmake for unknown reason.  Ask the HOPM devs.
        shell:
          cmd: "gmake"
          chdir: "/var/hopm/hopm-{{ hopm.release }}/"
    become: true
    become_user: "_hopm"
    when: not does_hopm_release_exist.stat.exists

  - name: $ gmake install
    shell:
      cmd: "gmake install"
      chdir: "/var/hopm/hopm-{{ hopm.release }}/"
    when: not does_hopm_release_exist.stat.exists

  - name: HOPM file prequsits.
    file:
      path: "{{ item }}"
      owner: _hopm
      group: wheel
      mode: '644' # QUOTES ARE IMPORTENT FOR SANITY.
      state: touch
    loop:
      - /var/log/scan.log
      - /var/log/hopm.log
      - /var/run/hopm.pid
    when: not does_hopm_release_exist.stat.exists

  - name: Copy rc.d/hopm
    copy:
      src: rc.d/hopm
      dest: /etc/rc.d/hopm
      owner: root
      group: wheel
      mode: '755' # Must be quoted like this!

  - name: Copy hopm.conf (template).
    template:
      src: hopm.conf.j2
      dest: /etc/hopm.conf
      owner: _hopm
      group: wheel
      mode: 464
    notify: Restart hopm

  - name: Add HOPM to logrotation list.
    blockinfile:
      name: /etc/newsyslog.conf
      block: |
        # HOPM
        /var/log/scan.log _hopm:wheel 644 3 * $D Z "pkill -USR1 hopm"
        /var/log/hopm.log _hopm:wheel 644 3 * $D Z "pkill -USR1 hopm"

  - name: Add HOPM autorestart to root's crontab.
    cron:
      minute: "*/5"
      job: "rcctl check hopm || rcctl start hopm"
      name: "irc_hopm_autorestart"