~kvik/wiki.9front.org

ref: b962b3f7da70cc249ae70c77d513a0af0306a154 wiki.9front.org/rc-httpd-werc.md -rw-r--r-- 3.4 KiB
b962b3f7kvik cwfs: link to a backup-to-usb article 1 year, 4 months ago

#Setting up rc-httpd

rc-httpd is a web server written in rc and shipped with 9front; It is used to host 9front.org and cat-v.org, among other related websites. It relies on listen/listen1 for network listening, and invokes /rc/bin/rc-httpd/select-handler in order to decide how to serve the requested page. For setting up a simple web page:

  • Set up listen to invoke rc-httpd: on a default 9front instalation (when configured as a cpu server), listen looks for unpriviledged services (that run as the user none) in /rc/bin/service, and priviledged ones (that run as the current user) in /rc/bin/service.auth. 9front also ships with a script that invokes rc-httpd each connection in /rc/bin/service/!tcp80; renaming this file to tcp80 in the same folder should work for most common cases; check listen(8) for more options and details. listen1 may also be useful to setup a oneshot server for testing.

  • Edit the script /rc/bin/rc-httpd/select-handler (you might have to create and chmod +x it) to set up the appropriate environment variables and handle the request. At the very least, set up FS_ROOT to point to the root directory of the server, PATH_INFO to the location (relative to $FS_ROOT) to be served (usually set to $location, which contains the path specified in the request) and exec one of the rc-httpd default handlers. $SERVER_NAME contains the address requested, useful if many websites are being hosted in the same machine. A example select-handler is shown below:

      #!/bin/rc
      
      PATH_INFO=$location
      
      switch($SERVER_NAME) {
      case example.com
          FS_ROOT=/sys/www/$SERVER_NAME
          exec static-or-index
      
      case *
          error 503
      }
    

    A list of available handlers, along with set/used environment variables and more information about the select-handler script is available at rc-httpd(8). /sys/log/www may contain useful debugging information, in case things don't work.

Congratulations! You've just got yourself a 100% genuine 9front-hosted webshit, complete with everything one could ever ask for! I'm sorry.

#Werc with rc-httpd

Werc is a minimalist web "anti-framework" written in rc; It powers 9front.org, cat-v.org and other related websites. For using it together with rc-httpd:

  • Download the most recent tarball from werc.cat-v.org and unpack it somewhere. This guide will use /sys/www/werc, replace accordingly.

  • Create your website page at /sys/www/werc/sites/<domain> and set it up appropriately. This is left as an exercise to the reader.

  • In your /rc/bin/rc-httpd/select-handler, set the PLAN9 variable to / (in order to support plan9port, werc expects PLAN9 to be set to the location where it can find the standard Plan 9 hierarchy and utilities; in Plan 9 (assuming a standard namespace), this is our root folder), make the appropriate arrangements, set FS_ROOT to the werc website path then exec static-or-cgi <path to werc.rc> (replace static-or-cgi with cgi if you don't want rc-httpd falling back to serving as static content). An example select-handler follows:

      #!/bin/rc
      
      PLAN9=/
      PATH_INFO=$location
      
      switch($SERVER_NAME) {
      case example.com
          FS_ROOT=/sys/www/werc/sites/$SERVER_NAME
          exec static-or-cgi /sys/www/werc/bin/werc.rc
      
      case *
          error 503
      }
    

Congratulations! Your 9front-hosted webshit should now be using werc.