## page was renamed from Portal/Building

The HCoop portal runs https://members.hcoop.net and https://join.hcoop.net, generates the [[http://hcoop.net/who|member directory]], and manages the vmail user database.

<<TableOfContents>>

= Build Requirements =

The portal requires [[http://git.hcoop.net/?p=hcoop/mlt.git;a=summary|mlt]] (an html templating system for smlnj) and [[http://git.hcoop.net/?p=hcoop/smlsql.git;a=summary|smlsql]] (postgresql bindings for smlnj). They are managed in the standard hcoop git repositories. The password generating tool also relies upon [[https://packages.debian.org/search?keywords=apg|apg]] (automatic password generator).

The portal build utilities stored in and installed to `~hcoop/portal-tools/...`

 * `.../src`: checkouts of mlt and smlsql (portal build file references smlsql from here)
 * `.../etc`: location of default `mlt.conf`, `hcoop.header`, `hcoop.footer`
 * `.../bin`: `mlt` and `hcoop_header` binaries
 * `.../lib32`: 32-bit libraries needed by the smlsql
 * `.../cgi`: portal cgi binaries

mlt and smlsql licensed under the LGPL version 2.1 or any later version.

= Source =

The portal source lives in module `portal` of [[http://git.hcoop.net/?p=hcoop/portal.git;a=summary|our git server]].  The main check-out is in `/afs/hcoop.net/user/h/hc/hcoop/portal3`.

The portal source is available under the GPLv3 or any later version.

= Building =

Run `/afs/hcoop.net/common/etc/scripts/become-hcoop` before modifying files in the main check-out or running any git commands that would modify it.

There are small CGI wrappers which just run compiled binaries in `~hcoop/portal-tools/cgi/`. The file `mlt.conf` contains the CGI installation path (modify this to suit your system if building locally).  These wrappers are generated automatically by `mlt`.

== Publishing ==

To recompile and publish, login to the webserver hosting the portal (`navajos` as of 2018-03, but verify in the `hcoop.net` domtool configuration), enter the portal source directory, and run `~hcoop/portal-tools/bin/mlt`:

{{{
/afs/hcoop.net/common/etc/scripts/become-hcoop
cd ~/portal3
~/portal-tools/bin/mlt
}}}

== Regenerating Page Header ==

`header.mlt` and `footer.mlt` are built from assorted other files.  Running `make` in a check-out directory should build them.  See the Makefile for how they're built.  Note that `make` '''won't''' publish changes that you make onto the real web sites; you must use `mlt` for that.

Needed files for building:

 * hcoop_header is the one line script `cat $prefix/etc/hcoop.header | sed "s/TITLE/$1/g"`
 * hcoop_footer is the one line script `cat $prefix/etc/hcoop.footer`
 * You need `~hcoop/portal-tools/etc/hcoop.{header,footer}` (currently not tracked in git)

== Other Applications Within the Portal ==

There are some subdirectories of `portal` that contain different web apps, like `app` (the source for join.hcoop.net).  '''You must run `mlt` separately in any of these directories to publish changes in it'''. These include:

 * `app/` The Join script
 * `contact/` Emergency contact directory for admins
 * `listaddrs/` Lists all hcoop member email addresses
 * `mailman/` portal subscription helper program
 * `passgen/` Password reset tool
 * `remind/` Low balance reminder
 * `static/` Public member directory generator
 * `vmailpasswd` Vmail password changing


= Maintenance =

== Cron Jobs ==

The portal source contains a crontab which should be installed and run under the `hcoop` user. This sends out monthly dues reminders and periodically generates semi-static pages.

== Adding Machine ==

To support user requests for a machine, insert a `WebNode` into the database. The Debian version should be the release name (e.g. "squeeze").

{{{
INSERT INTO WebNode (id, name, descr, debian)
        VALUES ((select max(id)+1 from WebNode), $HOST, $DESCRIPTION, $DEBIANVERSION);
}}}

If the machine should show up in the portal for members to request permissions or packages on, add it to `ActiveWebNodes`.

{{{
insert into ActiveWebNode VALUES ((select id from WebNode where name = '$HOST'));
}}}


----
CategorySystemAdministration