<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.csclub.uwaterloo.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R389li</id>
	<title>CSCWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.csclub.uwaterloo.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R389li"/>
	<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/Special:Contributions/R389li"/>
	<updated>2026-04-23T17:14:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=5428</id>
		<title>How to IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=5428"/>
		<updated>2025-09-18T05:59:22Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* syscom */ Add Cloaks section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Chat with us!&lt;br /&gt;
&lt;br /&gt;
== The Lounge ==&lt;br /&gt;
We have a web UI for IRC at [https://chat.csclub.uwaterloo.ca The Lounge].&lt;br /&gt;
[[File:The_lounge_screenshot.png|alt=The Lounge screenshot of #csc channel|400px|thumbnail|A screen capture of the #csc channel, as seen from The Lounge web client]]&lt;br /&gt;
If you are a first-time IRC user, this is by far the easiest way to join.&lt;br /&gt;
The steps are (roughly):&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login using your CSC credentials. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Follow the prompts to join the Libera server (make sure TLS is enabled). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Type &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Say hi! &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a termcom member, you will need to join the #csc-termcom channel, which requires nick (nickname) registration. To do this, run the following commands in The Lounge (or any IRC client):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/nick my_nickname&lt;br /&gt;
/msg NickServ REGISTER my_password my_email@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in your nickname, password and email as appropriate. You will receive an email from Libera asking you to verify your email address.&lt;br /&gt;
Once you have done so, go back to The Lounge, go the Libera window, click on the three-dots button in the top right corner, and click &amp;quot;Edit this network&amp;quot;. There, you can specify the nick and password which you just created.&lt;br /&gt;
== Mattermost ==&lt;br /&gt;
[[File:Mattermost-csc-sample.png|alt=Mattermost #csc screen capture, including a conversation between members of the channel|372x372px|right|thumbnail|A screen capture of the #csc channel, as seen from Mattermost desktop]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mattermost-phone-sample.jpg|alt=Mattermost android screenshot of #csc channel|362x362px|thumbnail|A screen capture of the #csc channel, as seen from Mattermost Android client]]&lt;br /&gt;
We self-host [https://mattermost.csclub.uwaterloo.ca/ Mattermost] now, it&#039;s easier to use if you&#039;re not familiar with IRC. If you know how to use IRC, we&#039;re #csc on libera.chat and there should be a #csc bridge that relays messages between #csc and our Mattermost instance.&lt;br /&gt;
&lt;br /&gt;
Both #csc on libera.chat ([https://web.libera.chat/#csc Libera Webchat] or via IRC clients e.g. irssi, weechat) and ~csc on Mattermost are official channels to interact with CSC members!&lt;br /&gt;
&lt;br /&gt;
=== Mattermost Setup ===&lt;br /&gt;
&lt;br /&gt;
Make an account at [https://mattermost.csclub.uwaterloo.ca/signup_email our self-hosted Mattermost]. For username, you can put your questid (i.e. your CSC username), although you can always set your full name as it will appear in Mattermost.&lt;br /&gt;
&lt;br /&gt;
The benefit of Mattermost over Slack and family is that Slack stores all your information on Slack&#039;s servers, wherever they are in the US. They do this so they can sell your data back to you (e.g. not allowing you to see old messages), but Slack is also closed-source even though it was derived from IRC. Mattermost is open-source and hosted on CSC servers.&lt;br /&gt;
&lt;br /&gt;
For iOS users, Mattermost&#039;s mobile app is also a superior option if you wish to receive push notifications as it supports Apple&#039;s native push via iCloud/APN.&lt;br /&gt;
&lt;br /&gt;
== Weechat ==&lt;br /&gt;
&lt;br /&gt;
[[File:Glowing-bear-screencap.png|alt=glowing-bear screen capture of #csc IRC channel|right|thumbnail|450px|A screen capture of the #csc IRC channel, as seen from glowing-bear client]]&lt;br /&gt;
&lt;br /&gt;
[[File:Weechat-Android-screenshot.png|alt=Weechat Android screen capture of #csc IRC channel|right|thumbnail|A screen capture of the #csc IRC channel, as seen from Weechat Android client]]&lt;br /&gt;
&lt;br /&gt;
This method will establish a persistent IRC session that you can connect to with different clients. A [https://weechat.org/ weechat] server program running on a CSClub server will remain connected to IRC networks at all times, and simply connecting to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program will give you all the chat history upon connection.&lt;br /&gt;
&lt;br /&gt;
To set up your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to a CS Club general-use server, such as &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, and run &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; in such a way that it will keep running after you log out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace ctdalek with your username:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh ctdalek@neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ screen -U weechat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;WeeChat&amp;quot; window should have opened up. Type the following commands into this window, replacing [yourpassword] with a password of your choice and [yourport] with a number in the range of [28100-28400]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /set relay.network.password [yourpassword]&lt;br /&gt;
  /relay add weechat [yourport]&lt;br /&gt;
  /save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have entered in all these commands, you don&#039;t need your terminal anymore. You can close your ssh window!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Your personal WeeChat server is set up. Now connect to it using a pretty client:&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.glowing-bear.org/ glowing-bear] &lt;br /&gt;
&lt;br /&gt;
is a free and open source web-based weechat client. It works well as a desktop client, and on iOS. To connect using glowing-bear, fill in &amp;quot;Connection Settings&amp;quot; with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;. Make sure to use the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; version of the website with this guide! &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; only works if you set up encryption. That&#039;s not covered here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended&#039;&#039;&#039;: [https://play.google.com/store/apps/details?id=com.ubergeek42.WeechatAndroid Weechat Android] is a free and open source android &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client. It gives notifications when your receive a direct message or your name is mentioned in one of the channels you are in. To connect using Weechat Android, fill in Settings &amp;gt; Connection with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Join the #csc IRC channel&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your weechat client (e.g. glowing-bear or Weechat Android), switch to the &#039;Libera&#039; tab and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /server add libera irc.libera.chat/6697 -ssl -autoconnect&lt;br /&gt;
  /set irc.server.libera.autojoin &amp;quot;#csc&amp;quot;&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;re now connected to the main IRC network! Connected by an SSL connection, so you&#039;re super sneaky as well. Way to go.&lt;br /&gt;
&lt;br /&gt;
Now, to join the CSC channel!&lt;br /&gt;
&lt;br /&gt;
In your client, you&#039;ll now have two buffers that you can switch to. One is called &amp;quot;weechat&amp;quot; and the other is &amp;quot;libera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Switch to the &amp;quot;libera&amp;quot; buffer and type:&lt;br /&gt;
&lt;br /&gt;
   /join #csc&lt;br /&gt;
&lt;br /&gt;
Congratulations you win!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Know some IRC commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the channel! Go ahead and say something, like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Good morning ctdalek http://www.total-knowledge.com/~ilya/mips/ugt.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to privately message someone, use &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /q [nick] [optional message] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will open a new tab with that person. For example &amp;lt;code&amp;gt;/q pj2melan ping pong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you want to join another channel, use &lt;br /&gt;
&amp;lt;pre&amp;gt;  /join [channel]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;Note about CSClub server restarts:&#039;&#039; If &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt; or any server you&#039;re using to run the &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; program on is restarted for any reason (we&#039;ll email you if it does), Make sure to run &amp;lt;code&amp;gt;screen -U weechat&amp;lt;/code&amp;gt; again to start your server. You won&#039;t have to reconfigure &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; (step 2) though.&lt;br /&gt;
&lt;br /&gt;
=== Securing Glowing Bear - SSL/TLS Setup ===&lt;br /&gt;
&lt;br /&gt;
With the default setup, when you log in to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay using a client such as glowing-bear or Weechat Android, &#039;&#039;your password is sent in the clear&#039;&#039;. If you believe this to be a bad thing, follow these steps to enable SSL encryption between you and your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay running on &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt; to generate an SSL certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ mkdir ~/.weechat/ssl&lt;br /&gt;
$ cd ~/.weechat/ssl&lt;br /&gt;
$ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out relay.pem # Fill in the fields as it asks&lt;br /&gt;
$ exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; to use the new certificate you generated, and add a new relay with a different password (since your old password was likely compromised):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client (glowing-bear, or Weechat Android), run&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /set relay.network.password [newpassword]&lt;br /&gt;
 /relay sslcertkey&lt;br /&gt;
 /relay del weechat&lt;br /&gt;
 /relay add ssl.weechat [yourport]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell your client to connect to your relay using SSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For glowing-bear, refresh and simply check the &amp;quot;Encryption. Check settings for help.&amp;quot; checkbox when logging in with your new password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For Weechat Android, in Settings &amp;gt; Connection, change Connection type to WeeChat SSL and change your Relay password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy fully encrypted communication!&lt;br /&gt;
&lt;br /&gt;
You might have warnings about untrusted certificates, but since you made the certificate yourself you can trust yourself and add required security exceptions.&lt;br /&gt;
&lt;br /&gt;
== Quick SSH-based Setup ==&lt;br /&gt;
&lt;br /&gt;
1. Open up an IRC client, i.e. &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt;. Launch &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt; in a screen session, which you&lt;br /&gt;
can return to later.&lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
  $ screen -U irssi&lt;br /&gt;
&lt;br /&gt;
2. In irssi, connect to the libera network and join our channel. &lt;br /&gt;
&lt;br /&gt;
  /server add -auto -net libera -ssl -ssl_verify irc.libera.chat 6697&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
  /join #csc&lt;br /&gt;
&lt;br /&gt;
3. Please set your nickname to your Quest ID so we know who you are.  &lt;br /&gt;
&lt;br /&gt;
  /nick $YOUR_QUEST_ID&lt;br /&gt;
  /save&lt;br /&gt;
&lt;br /&gt;
You can register your nickname on the libera network by messaging NickServ.&lt;br /&gt;
&lt;br /&gt;
  /msg NickServ REGISTER password email &lt;br /&gt;
&lt;br /&gt;
4. Close your screen session, which you can return to later.&lt;br /&gt;
&lt;br /&gt;
  CTRL-A CTRL-D&lt;br /&gt;
&lt;br /&gt;
5. Return to your screen session. You will have remained connected to the channel. &lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca -t &amp;quot;screen -Urd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Emacs ==&lt;br /&gt;
If you are comfortable with Emacs, then you can also configure the editor to act as an IRC client via &amp;lt;code&amp;gt;erc&amp;lt;/code&amp;gt;. For a quick introduction, you can run &amp;lt;code&amp;gt;M-x erc-tls&amp;lt;/code&amp;gt;where you will be prompted for a server, a port (the defaults are correct), and a nickname. For a detailed overview of possible configuration options see the [https://www.emacswiki.org/emacs/ERC ERC Emacs Wiki]. To prettify the default display and for simiilar QOL changes, consider applying some of the configuration options from [https://systemcrafters.cc/live-streams/june-04-2021/ this guide] by System Crafters.&lt;br /&gt;
&lt;br /&gt;
=== ZNC.el ===&lt;br /&gt;
To keep track of chat logs while your machine is powered down, consider setting up [[ZNC]] with the help of [https://www.emacswiki.org/emacs/ErcZNC ZNC.el]. &lt;br /&gt;
&lt;br /&gt;
== Cloaks ==&lt;br /&gt;
raymo (and bandali as a backup, but please don&#039;t bother him unless raymo is dead*) is a registered Libera #csc community owner and can give you a cloak of your choosing (csc/member/username is the usual, csc/syscom/username for syscom members and csc/sysadmin/username for the sysadmin) upon request (you must ask him nicely).&lt;br /&gt;
&lt;br /&gt;
Note to self (raymo): /join #libera-communities -&amp;gt; &amp;quot;Hey folks, could we please give X the csc/Y cloak? Thanks!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note to everyone else (except bandali/other community owners): this will not work if you are not a community owner&lt;br /&gt;
&lt;br /&gt;
Further note: Libera discourages frequent updates of community ownership, so we have never changed ownership since we moved to Libera from Freenode. raymo will be around for many many terms anyway...&lt;br /&gt;
&lt;br /&gt;
= syscom =&lt;br /&gt;
&lt;br /&gt;
To kick (and optionally ban) a user:&lt;br /&gt;
&lt;br /&gt;
 /cs op #&amp;lt;channel&amp;gt;&lt;br /&gt;
 /mode #&amp;lt;channel&amp;gt; +b &amp;lt;nick_to_ban&amp;gt;&lt;br /&gt;
 /kick &amp;lt;nick_to_kick&amp;gt;&lt;br /&gt;
 /mode -o &amp;lt;your_nick&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the user need not be banned you can skip the second line. If other accounts from the same user/host should be banned, replace &amp;lt;code&amp;gt;nick_to_ban/kick&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;nick!username@host&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;in which case you have more things to worry about and should probably find another Libera community owner for #csc&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=5263</id>
		<title>Machine List</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=5263"/>
		<updated>2024-06-24T20:34:06Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add details about Cobalamin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most of our machines are in the E7, F7, G7 and H7 racks (as of Jan. 2022) in the MC 3015 server room. There is an additional rack in the DC 3558 machine room on the third floor. Our office terminals are in the CSC office, in MC 3036/3037.&lt;br /&gt;
&lt;br /&gt;
= Web Server =&lt;br /&gt;
You are highly encouraged to avoid running anything that&#039;s not directly related to your CSC webspace on our web server. We have plenty of general-use machines; please use those instead. You can even edit web pages from any other machine--usually the only reason you&#039;d *need* to be on caffeine is for database access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;caffeine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Caffeine is the Computer Science Club&#039;s web server. It serves websites, databases for websites, and a large amount of other services.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Redundant active backup coming soon...)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* LXC virtual machine hosted on [[Machine List#phosphoric-acid|phosphoric-acid]]&lt;br /&gt;
** 12 vCPUs&lt;br /&gt;
** 32GB of RAM&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Club and member web sites with [https://www.apache.org/ Apache]&lt;br /&gt;
* [[MySQL]] databases&lt;br /&gt;
* [[PostgreSQL]] databases&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;mathnews&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
[[#xylitol|xylitol]] hosts a systemd-nspawn container which serves as the mathNEWS webserver. It is administered by mathNEWS, as a pilot for providing containers to select groups who have more specialized demands than the general-use infrastructure can meet.&lt;br /&gt;
&lt;br /&gt;
= General-Use Servers =&lt;br /&gt;
&lt;br /&gt;
These machines can be used for (nearly) anything you like (though be polite and remember that these are shared machines). Recall that when you signed the Machine Usage Agreement, you promised not to use these machines to generate profit (so no cryptocurrency mining).&lt;br /&gt;
&lt;br /&gt;
For computationally-intensive jobs (CPU/memory bound) we recommend running on high-fructose-corn-syrup, carbonated-water, sorbitol, mannitol, or corn-syrup, listed in roughly decreasing order of available resources. For low-intensity interactive jobs, such as IRC clients, we recommend running on neotame. &#039;&#039;&#039;&amp;lt;u&amp;gt;If you have a long-running computationally intensive job, it&#039;s good to nice[https://en.wikipedia.org/wiki/Nice_(Unix)] your process, and possibly let syscom know too.&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Dell PowerEdge 2950&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 × Intel Xeon E5405 (2.00 GHz, 4 cores each)&lt;br /&gt;
* 32 GB RAM&lt;br /&gt;
* eth0 (&amp;quot;Gb0&amp;quot;) mac addr 00:24:e8:52:41:27&lt;br /&gt;
* eth1 (&amp;quot;Gb1&amp;quot;) mac addr 00:24:e8:52:41:29&lt;br /&gt;
* IPMI mac addr 00:24:e8:52:41:2b&lt;br /&gt;
* 3 &amp;amp;times; Western-Digital 160GB SATA hard drive (445 GB software RAID0 array)&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* Use eth0/Gb0 for the mathstudentorgsnet connection&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Hosts 1 TB &amp;lt;tt&amp;gt;[[scratch|/scratch]]&amp;lt;/tt&amp;gt; and exports via NFS (sec=krb5)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;high-fructose-corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
High-fructose-corn-syrup (or hfcs) is a large SuperMicro server. It&#039;s been in CSC service since April 2012.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6272 (2.4 GHz, 16 cores each)&lt;br /&gt;
* 192 GB RAM&lt;br /&gt;
* Supermicro H8QGi+-F Motherboard Quad 1944-pin Socket [http://csclub.uwaterloo.ca/misc/manuals/motherboard-H8QGI+-F.pdf (Manual)]&lt;br /&gt;
* 500 GB Seagate Barracuda&lt;br /&gt;
* Supermicro Case Rackmount CSE-748TQ-R1400B 4U [http://csclub.uwaterloo.ca/misc/manuals/SC748.pdf (Manual)]&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Missing moba IO shield (as of January 2024)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;carbonated-water&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
carbonated-water is a Dell R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6176 processors (2.3 GHz, 12 cores each)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;neotame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
neotame is a SuperMicro server funded by MEF. It is the successor to taurine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;We strongly discourage running computationally-intensive jobs&#039;&#039;&#039; on neotame as many users run interactive applications such as IRC clients on it and any significant service degradation will be more likely to affect other users (who will probably notice right away).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 v4 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
* SSH server also listens on ports 21, 22, 53, 80, 81, 443, 8000, 8080 for your convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sorbitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sorbitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 v4 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
== &#039;&#039;mannitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mannitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 v4 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
= Office Terminals =&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to SSH into these machines, but we discourage you from trying to use these machines when you&#039;re not sitting in front of them. They are bounced at least every time our login manager, lightdm, throws a tantrum (which is several times a day). These are for use inside our physical office.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;cyanide&#039;&#039; ==&lt;br /&gt;
cyanide is a [https://support.apple.com/kb/sp710 Mac Mini (Late 2014)], identical in specification to powernap&lt;br /&gt;
&lt;br /&gt;
=== Spec ===&lt;br /&gt;
&lt;br /&gt;
* Intel i7-4578U (4) @ 3.500GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Intel Iris Graphics 5100&lt;br /&gt;
* 256GB On-board SSD&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;suika&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Suika is an office terminal built from various components donated by our members.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* AMD Ryzen 7 2700X&lt;br /&gt;
* 2x 8GB DDR4&lt;br /&gt;
* 1x Samsung 256GB SSD&lt;br /&gt;
* AMD Radeon RX 550 4GB&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;powernap&#039;&#039;==&lt;br /&gt;
powernap is a [https://support.apple.com/kb/sp710 Mac Mini (Late 2014)].&lt;br /&gt;
&lt;br /&gt;
=== Spec ===&lt;br /&gt;
&lt;br /&gt;
* Intel i7-4578U (4) @ 3.500GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Intel Iris Graphics 5100&lt;br /&gt;
* 256GB On-board SSD&lt;br /&gt;
&lt;br /&gt;
=== Speaker === &lt;br /&gt;
powernap has the office speakers (a pair of nice studio monitors) currently connected to it.&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
* MPD for playing music. Only office/termcom/syscom can log into powernap. Use `ncmpcpp` to control MPD.&lt;br /&gt;
** TODO: this is not the case anymore&lt;br /&gt;
* Bluetooth audio receiver. Only syscom can control bluetooth pairing. Use `bluetoothctl` to control bluetooth.&lt;br /&gt;
&lt;br /&gt;
Music is located in `/music` on the office terminals.&lt;br /&gt;
&lt;br /&gt;
= Progcom Only =&lt;br /&gt;
The Programme Committee has access to a VM on corn-syrup called &#039;progcom&#039;. They have sudo rights in this VM so they may install and run their own software inside it. This VM should only be accessible by members of progcom or syscom.&lt;br /&gt;
&lt;br /&gt;
= Codey Bot Only =&lt;br /&gt;
Ran on CSC Cloud in a separate Cloudstack project. codey-staging, codey-dev, codey-prod.&lt;br /&gt;
&lt;br /&gt;
TODO: migrating from cloudstack&lt;br /&gt;
&lt;br /&gt;
= Syscom Only =&lt;br /&gt;
&lt;br /&gt;
The following systems are only be accessible to members of the [[Systems Committee]] for a variety of reasons; the most common of which being that some of these machines host [[Kerberos]] authentication services for the CSC.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;xylitol&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
xylitol is a Dell PowerEdge R815 donated by CSCF. It is primarily a container host for services previously hosted on aspartame and dextrose, including munin, rt, mathnews, auth1, and dns1. It was provisioned with the intent to replace both of those hosts.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Dual AMD Opteron 6176 (2.3 GHz, 48 cores total)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 500GB volume group on RAID1 SSD (xylitol-mirrored)&lt;br /&gt;
* 500ish-GB volume group on RAID10 HDD (xylitol-raidten)&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;auth1&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[LDAP]] primary&lt;br /&gt;
*[[Kerberos]] primary&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;chat&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* The Lounge web IRC client (https://chat.csclub.uwaterloo.ca)&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;phosphoric-acid&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
phosphoric-acid is a Dell PowerEdge R815 donated by CSCF and is a clone of xylitol. It may be used to provide redundant cloud services in the future.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* (clone of Xylitol)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[#caffeine|caffeine]]&lt;br /&gt;
*[[#coffee|coffee]]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;coffee&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Virtual machine running on phosphoric-acid.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[Database#MySQL|MySQL]]&lt;br /&gt;
*[[Database#Postgres|Postgres]]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;cobalamin&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Dell PowerEdge 2950 donated to us by FEDS. Located in the Science machine room on the first floor of Physics, on Science Computing Rack 2. NICs are plugged into A1 and A2 on the adjacent rack. Acts as a backup server for many things.&lt;br /&gt;
&lt;br /&gt;
TODO: should replace with another Syscom server when Science Computing clears out the rack (ETA before 09/2024)&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 1 × Intel Xeon E5420 (2.50 GHz, 4 cores)&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Broadcom NetworkXtreme II&lt;br /&gt;
* 2x73GB Hard Drives, hardware RAID1&lt;br /&gt;
** Soon to be 2x1TB in MegaRAID1&lt;br /&gt;
*http://www.dell.com/support/home/ca/en/cabsdt1/product-support/servicetag/51TYRG1/configuration&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Containers: [[#auth2|auth2]] (kerberos)&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TODO: Mega unreliable.&#039;&#039;&#039; (Goes down once every few weeks... due to power outages in the PHYS server room)&lt;br /&gt;
** It is plugged into a UPS but the UPS has dead batteries.&lt;br /&gt;
* The network card requires non-free drivers. Be sure to use an installation disc with non-free.&lt;br /&gt;
&lt;br /&gt;
* We have separate IP ranges for cobalamin and its containers because the machine is located in a different building. They are:&lt;br /&gt;
** VLAN ID 506 (csc-data1): 129.97.18.16/29; gateway 129.97.18.17; mask 255.255.255.240&lt;br /&gt;
** VLAN ID 504 (csc-ipmi): 172.19.5.24/29; gateway 172.19.5.25; mask 255.255.255.248&lt;br /&gt;
* Physical access to the PHYS server rooms can be acquired by visiting Science Computing in PHYS 2006.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;auth2&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Container on [[#cobalamin|cobalamin]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[LDAP]] secondary&lt;br /&gt;
*[[Kerberos]] secondary&lt;br /&gt;
&lt;br /&gt;
MAC Address: c2:c0:00:00:00:a2&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;mail&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
mail is the CSC&#039;s mail server. It hosts mail delivery, imap(s), smtp(s), and mailman. It is also syscom-only. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
TODO: &amp;quot;HA&amp;quot;-ish configuration&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#xylitol|xylitol]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[Mail]] services&lt;br /&gt;
* mailman (web interface at [http://mailman.csclub.uwaterloo.ca/])&lt;br /&gt;
*[[Webmail]]&lt;br /&gt;
*[[ceo]] daemon&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;sodium-benzoate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Sodium-benzoate is our previous mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
It is currently sitting in the office pending repurposing. Will likely become a machine for backups in DC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon Quad Core E5405 @ 2.00 GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* vg0: 228 GB block device behind DELL PERC 6/i (contains root partition)&lt;br /&gt;
&lt;br /&gt;
Space disks are currently in the office underneath maltodextrin.&lt;br /&gt;
&lt;br /&gt;
TODO: gone??&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;potassium-benzoate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate is our mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 36 drive Supermicro chassis (SSG-6048R-E1CR36L) &lt;br /&gt;
* 1 x Intel Xeon E5-2630 v3 (8 cores, 2.40 GHz)&lt;br /&gt;
* 64 GB (4 x 16GB) of DDR4 (2133Mhz)  ECC RAM&lt;br /&gt;
* 2 x 1 TB Samsung Evo 850 SSD drives&lt;br /&gt;
* 17 x 4 TB Western Digital Gold drives (separate funding from MEF)&lt;br /&gt;
* 9 x 18TB Seagate Exos X18 (8 ZFS, Z2,1 hot-spare)&lt;br /&gt;
* 10 Gbps SFP+ card (loaned from CSCF)&lt;br /&gt;
* 50 Gbps Mellanox QSFP card (from ginkgo; currently unconnected)&lt;br /&gt;
&lt;br /&gt;
==== Network Connections ====&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate has two connections to our network:&lt;br /&gt;
&lt;br /&gt;
* 1 Gbps to our switch (used for management)&lt;br /&gt;
* 2 x 10 Gbps (LACP bond) to mc-rt-3015-mso-a (for mirror)&lt;br /&gt;
&lt;br /&gt;
Mirror&#039;s bandwidth is limited to 1 Gbps on each of the 4 campus internet links. Mirror&#039;s bandwidth is not limited on campus.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[[Mirror]]&lt;br /&gt;
*[[Talks]] mirror&lt;br /&gt;
*[[Debian_Repository|CSClub packages repository]]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;munin&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
munin is a syscom-only monitoring and accounting machine. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#xylitol|xylitol]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[http://munin.csclub.uwaterloo.ca munin] systems monitoring daemon&lt;br /&gt;
TODO: Debian 9?&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;yerba-mate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 GHz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* test-ipv6 (test-ipv6.csclub.uwaterloo.ca; a test-ipv6.com mirror)&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Also used for experimenting new CSC services.&lt;br /&gt;
&lt;br /&gt;
* TODO: use as backup server&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;citric-acid&#039;&#039;==&lt;br /&gt;
A Dell PowerEdge R815 (TODO: check model) provided by CSCF to replace [[Machine List#aspartame|aspartame]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Specs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 2 x AMD Opteron 6174 (12 cores, 2.20 GHz)&lt;br /&gt;
* 128 GB RAM&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Configured for [https://pass.uwaterloo.ca pass.uwaterloo.ca], a university-wide password manager hosted by CSC as a demo service for all Nexus (ADFS) user.&lt;br /&gt;
* [[Plane]], an internal (CSC) project management tool.&lt;br /&gt;
* Minio&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Being repurposed for Termcom training and development.&lt;br /&gt;
* TODO: migrate Vaultwarden (https://pass.csclub.uwaterloo.ca/)??&lt;br /&gt;
* UFW opened-ports: SSH, HTTP/HTTPS&lt;br /&gt;
* Upgraded to Podman 4.x&lt;br /&gt;
&lt;br /&gt;
= Cloud =&lt;br /&gt;
&lt;br /&gt;
These machines are used by [https://cloud.csclub.uwaterloo.ca cloud.csclub.uwaterloo.ca]. The machines themselves are restricted to Syscom only access.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;chamomile&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x 2.20GHz 12-core processors (AMD Opteron(tm) Processor 6174)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Cloudstack host&lt;br /&gt;
* TODO: cloudstack migration&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;riboflavin&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R515 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 2.6 GHz 8-core processors (AMD Opteron(tm) Processor 4376 HE)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
* 2x 500GB internal SSD&lt;br /&gt;
* 12x Seagate 4TB SSHD&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack block and object storage for csclub.cloud&lt;br /&gt;
* ????&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* TODO: cloudstack migration&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;guayusa&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 GHz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2TB PCI-Express Flash SSD&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* load-balancer-01&lt;br /&gt;
&lt;br /&gt;
Was used to experiment the following then-new CSC services:&lt;br /&gt;
&lt;br /&gt;
* cifs (for booting ginkgo from CD)&lt;br /&gt;
* caffeine-01 (testing of multi-node caffeine)&lt;br /&gt;
* TODO: ???&lt;br /&gt;
** block1.cloud&lt;br /&gt;
** object1.cloud&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* TODO: cloudstack migration&lt;br /&gt;
* TODO: ditch... Currently being used to set up NextCloud.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;ginkgo&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by MEF for CSC web hosting. Locate in MC 3015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2697 v4 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 256GB RAM&lt;br /&gt;
* 2 x 1.2 TB SSD (400GB of each for RAID 1)&lt;br /&gt;
* 10GbE onboard, 25GbE SFP+ card (also included 50GbE SFP+ card which will probably go in mirror)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* controller1.cloud&lt;br /&gt;
* db1.cloud&lt;br /&gt;
* router1.cloud (NAT for cloud tenant network)&lt;br /&gt;
* network1.cloud&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
* TODO: cloudstack migration&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;biloba&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by SLEF for CSC web hosting. Located in DC 3558. TODO: rack??&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon Gold 6140 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 384GB RAM&lt;br /&gt;
* 12 3.5&amp;quot; Hot Swap Drive Bays&lt;br /&gt;
** 2 x 480 GB SSD&lt;br /&gt;
* 10GbE onboard, 10GbE SFP+ card (on loan from CSCF)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
* TODO: cloudstack migration&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* caffeine&lt;br /&gt;
* mail&lt;br /&gt;
* mattermost&lt;br /&gt;
&lt;br /&gt;
= Storage =&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;fs00&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
fs00 is a &#039;&#039;&#039;NetApp FAS3040&#039;&#039;&#039; series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* dual SFP connection to core switch&lt;br /&gt;
&lt;br /&gt;
... TODO&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;fs01&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
fs01 is a &#039;&#039;&#039;NetApp FAS3040&#039;&#039;&#039; series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
... TODO&lt;br /&gt;
&lt;br /&gt;
TODO: disconnected??&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;fs10&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
fs10 is a &#039;&#039;&#039;NetApp FAS8040&#039;&#039;&#039; series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* FAS8040 (dual heads)&lt;br /&gt;
** ... TODO&lt;br /&gt;
* 6 DS4324 HDD shelves (24-disks each)&lt;br /&gt;
** 24 x 2TB HDDs (assorted brands/models)&lt;br /&gt;
** Dual IOM3 controllers.&lt;br /&gt;
** Loop 1: bottom 4 shelves&lt;br /&gt;
** Loop 2: top 2 shelves + SSD shelf&lt;br /&gt;
* 1 DS2246 SSD shelf (TODO: right model?)&lt;br /&gt;
** 24 Samsung SM1625 SSDs (MZ-6ER2000/0G3), 200GB (SAS 2, 2.5&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;mathnews&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
[[#xylitol|xylitol]] hosts a systemd-nspawn container which serves as the mathNEWS webserver. It is administered by mathNEWS, as a pilot for providing containers to select groups who have more specialized demands than the general-use infrastructure can meet.&lt;br /&gt;
&lt;br /&gt;
== ps3 ==&lt;br /&gt;
This is just a very wide PS3, the model that supported running Linux natively before it was removed. Firmware was updated to remove this feature, however it can still be done via. homebrew. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Specs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s a PS3.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2022-10-24&#039;&#039;&#039; - Thermal paste replaced + firmware updated to latest supported version, also modded.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;binaerpilot&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Tobi expansion board. It is currently attached to corn-syrup in the machine room and even more currently turned off until someone can figure out what is wrong with it.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;anamanaguchi&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Chestnut43 expansion board. It is currently in the hardware drawer in the CSC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;digital cutter&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
See [[Digital Cutter|here]].&lt;br /&gt;
&lt;br /&gt;
= Decommissioned =&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;aspartame&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
aspartame was a taurine clone donated by CSCF. It was once our primary file server, serving as the gateway interface to space on phlogiston. It also used to host the [[#auth1|auth1]] container, which has been temporarily moved to [[#dextrose|dextrose]]. Decomissioned in March 2021 after refusing to boot following a power outage.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;psilodump&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
psilodump is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling phlogiston, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
psilodump was plugged into aspartame. It&#039;s still installed but inaccessible.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;phlogiston&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
phlogiston is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling psilodump, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
phlogiston is turned off and should remain that way. It is misconfigured to have its drives overlap with those owned by psilodump, and if it is turned on, it will likely cause irreparable data loss.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 10GB RAM&lt;br /&gt;
&lt;br /&gt;
==== Notes from before decommissioning ====&lt;br /&gt;
&lt;br /&gt;
* The lxc files are still present and should not be started up, or else the two copies of auth1 will collide.&lt;br /&gt;
* It currently cannot route the 10.0.0.0/8 block to a misconfiguration on the NetApp. This should be fixed at some point.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;glomag&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Glomag hosted [[#caffeine|caffeine]]. Decommissioned April 6, 2018.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon X3450 @ 2.67 GHz&lt;br /&gt;
* 6 GB RAM&lt;br /&gt;
* vg0: 465 GB software RAID1 (contains root partition):&lt;br /&gt;
** 750 GB Seagate Barracuda SATA hard drive&lt;br /&gt;
** 500 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
* vg1: 596 GB software RAID1 (contains caffeine):&lt;br /&gt;
** 2 &amp;amp;times; 640 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Before its decommissioning, glomag hosted [[#caffeine|caffeine]], [[#mail|mail]], and [[#munin|munin]] as [[Virtualization#Linux_Container|Linux containers]]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;Lisp machine&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
A Symbolics XL1200 Lisp machine. Donated to a new home when we couldn&#039;t get it working.&lt;br /&gt;
&lt;br /&gt;
http://www.globalnerdy.com/2008/12/03/symbolics-xl1200-lisp-machine-free-to-a-good-home/ for some history on this hardware.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
Currently inoperable due to (at least) a missing console cable.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;ginseng&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Ginseng used to be our fileserver, before aspartame and the netapp took over.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Pentium Dual Core E2180&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/s3000ah_tps_1_1.pdf Intel S3000AHV Motherboard]&lt;br /&gt;
* 4 &amp;amp;times; 640 GB Western-Digital Caviar Blue in [[wikipedia:Nested_RAID_levels#RAID_10_.28RAID_1.2B0.29|RAID 10]] behind a [http://www.3ware.com/products/serial_ata2-9650.asp 3ware 9650SE RAID card].&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;calum&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Calum used to be our main server and was named after Calum T Dalek.  Purchased new by the club in 1994. &lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* SPARCserver 10 (headless SPARCstation 10)&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;paza&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
An iMac G3 that was used as a dumb terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 233Mhz PowerPC 740/750&lt;br /&gt;
* 96 MB RAM&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;romana&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Romana was a BeBox that has been in the CSC&#039;s possession since long before BeOS became defunct.&lt;br /&gt;
&lt;br /&gt;
Confirmed on March 19th, 2016 to be fully functional. An SSHv1 compatible client was installed from http://www.abstrakt.ch/be/ and a compatible firewalled daemon was started on Sucrose (living in /root, prefix is /root/ssh-romana). The insecure daemon is to be used a bastion host to jump to hosts only supporting &amp;gt;=SSHv2. The mail daemon on the BeBox has also been configured to send mail through mail.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 PowerPC based processors&lt;br /&gt;
* Stylish Blinken processor-load lights&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;sodium-citrate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Sodium-citrate was an SGI O2 machine.&lt;br /&gt;
&lt;br /&gt;
In order to net boot you need to set /proc/sys/net/ipv4/ip_no_pmtu_disc to 1. When the O2 boots, hit F5 at the boot menu and type bootp():.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* SGI O2 MIPS processor&lt;br /&gt;
* 423 MB (?) RAM&lt;br /&gt;
* 2 &amp;amp;times; 2 GB hard drive&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;acesulfame-potassium&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
An old office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium 4 2.67GHz&lt;br /&gt;
* 1GB RAM&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/ABIT_VT7.pdf ABIT VT7] Motherboard&lt;br /&gt;
* ATI Radeon 7000&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;skynet&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
skynet was a Sun E6500 machine donated by Sanjay Singh. It was never fully set up.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 15 full CPU/memory boards&lt;br /&gt;
** 2x UltraSPARC II 464MHz / 8MB Cache Processors&lt;br /&gt;
** ??? RAM?&lt;br /&gt;
* 1 I/O board (type=???)&lt;br /&gt;
** ???x disks?&lt;br /&gt;
* 1 CD-ROM drive&lt;br /&gt;
&lt;br /&gt;
*[http://mirror.csclub.uwaterloo.ca/csclub/sun_e6500/ent6k.srvr/ e6500 documentation (hosted on mirror, currently dead link)]&lt;br /&gt;
*[http://docs.oracle.com/cd/E19095-01/ent6k.srvr/ e6500 documentation (backup link)]&lt;br /&gt;
*[http://www.e6500.com/ e6500]&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;freebsd&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
FreeBSD was a virtual machine with FreeBSD installed.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Newer software&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;rainbowdragoneyes&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Rainbowdragoneyes was our Lemote Fuloong MIPS machine. This machine is aliased to rde.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 800MHz MIPS Loongson 2f CPU&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;denardo&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Due to some instability, general uselessness, and the acquisition of a more powerful SPARC machine from MFCF, denardo was decommissioned in February 2015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Sun Fire V210&lt;br /&gt;
* TI UltraSparc IIIi (Jalapeño)&lt;br /&gt;
* 2 GB RAM&lt;br /&gt;
* 160 GB RAID array&lt;br /&gt;
* ALOM on denardo-alom.csclub can be used to power machine on/off&lt;br /&gt;
==&#039;&#039;artificial-flavours&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Artificial-flavours was our secondary (backup services) server. It used to be an office terminal. It was decommissioned in February 2015 and transferred to the ownership of Women in Computer Science (WiCS).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Celeron 3.2GHz&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/Biostar_P4M80-M4.pdf Biostar P4M80-M4] Motherboard&lt;br /&gt;
* Western-Digital 80 GB ATA hard drive&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;potassium-citrate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Potassium-citrate is a dual-processor Alpha machine. It is on extended loan from pbarfuss.&lt;br /&gt;
&lt;br /&gt;
It is temporarily decommissioned pending the reinstallation of a supported operating system (such as OpenBSD).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Alphaserver CS20 (2 833MHz EV68al CPUs)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
* 36 GB Seagate SCSI hard drive&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;potassium-nitrate&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
This was a Sun Fire E2900 from a decommissioned MFCF compute cluster. It had a SPARC architecture and ran OpenBSD, unlike many of our other systems which are x86/x86-64 and Linux/Debian. After multiple unsuccessful attempts to boot a modern Linux kernel and possible hardware instability, it was determined to be non-cost-effective and non-effort-effective to put more work into running this machine. The system was reclaimed by MFCF where someone from CS had better luck running a suitable operating system (probably Solaris).&lt;br /&gt;
&lt;br /&gt;
The name is from saltpetre, because sparks.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 24 CPUs&lt;br /&gt;
* 90GB main memory&lt;br /&gt;
* 400GB scratch disk local storage in /scratch-potassium-nitrate&lt;br /&gt;
&lt;br /&gt;
There is a [[Sun 2900 Strategy Guide|setup guide]] available for this machine.&lt;br /&gt;
&lt;br /&gt;
See also [[Sun 2900]].&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;taurine&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: On August 21, 2019, just before 2:30PM EDT, we were informed that taurine caught fire&#039;&#039;&#039;. As a result, taurine has been decommissioned as of Fall 2019.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 136 GB LVM volume group&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Virtual machines&lt;br /&gt;
* BitlBee IRC instant messaging gateway (localhost only)&lt;br /&gt;
*[[ident]] server to maintain high connection cap to freenode&lt;br /&gt;
* Runs ssh on ports 21,22,53,80,81,443,8000,8080 for user&#039;s convenience.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;dextrose&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
dextrose was a [[#taurine|taurine]] clone donated by CSCF and was decommissioned in Fall 2019 after being replaced with a more powerful server.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;sucrose&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
sucrose was a [[#taurine|taurine]] clone donated by CSCF. It was decommissioned in Fall 2019 following multiple hardware failures.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;goto80&#039;&#039;==&lt;br /&gt;
&#039;&#039;&#039;Note (2022-10-25): This seems to have gone missing or otherwise left our hands.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This was small ARM machine we picked up in order to have similar hardware to the Real Time Operating Systems (CS 452) course. It has a [[TS-7800_JTAG|JTAG]] interface. Located was the office on the top shelf above strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 500 MHz Feroceon (ARM926ej-s compatible) processor&lt;br /&gt;
* ARMv5TEJ architecture&lt;br /&gt;
&lt;br /&gt;
Use -march=armv5te -mtune=arm926ej-s options to GCC.&lt;br /&gt;
&lt;br /&gt;
For information on the TS-7800&#039;s hardware see here:&lt;br /&gt;
http://www.embeddedarm.com/products/board-detail.php?product=ts-7800&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;nullsleep&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
nullsleep is an [http://csclub.uwaterloo.ca/misc/manuals/ASRock_ION_330.pdf ASRock ION 330] machine given to us by CSCF and funded by MEF.&lt;br /&gt;
&lt;br /&gt;
It&#039;s decommissioned on 2023-03-20 due to repeated unexpected shutdown. Replaced by [[#powernap|powernap]]. &lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel® Dual Core Atom™ 330&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* NVIDIA® ION™ graphics&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* DVD Burner&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Nullsleep has the office speakers (a pair of nice studio monitors) currently connected to it.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
Nullsleep runs MPD for playing music. Control of MPD is available only to users in the &amp;quot;audio&amp;quot; group.&lt;br /&gt;
Music is located in /music on the office terminal&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;bit-shifter&#039;&#039; ==&lt;br /&gt;
bit-shifter was an office terminal, decommissioned April 2023 due to extended age. It was upgraded to the same specs as Strombola at an unknown point in time.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core 2 Quad CPU Q8300&lt;br /&gt;
* 4GB RAM&lt;br /&gt;
* Nvidia GeForce GT 440&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Jacob Parker&#039;s Firewire Card&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;strombola&#039;&#039;==&lt;br /&gt;
Strombola was an office terminal named after Gordon Strombola. It was retired in April 2023.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium G4600 2 cores @ 3.6Ghz&lt;br /&gt;
* 8 GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Strombola used to have integrated 5.1 channel sound before we got new speakers and moved audio stuff to nullsleep.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;gwem&#039;&#039; ==&lt;br /&gt;
gwem was an office terminal that was created because AMD donated a graphics card. It entered CSC service in February 2012.&lt;br /&gt;
&lt;br /&gt;
=== Specs ===&lt;br /&gt;
&lt;br /&gt;
* AMD FX-8150 3.6GHz 8-Core CPU&lt;br /&gt;
* 16 GB RAM&lt;br /&gt;
* AMD Radeon 6870 HD 1GB GPU&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/ga-990fxa-ud7_e.pdf Gigabyte GA-990FXA-UD7] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;maltodextrin&#039;&#039; ==&lt;br /&gt;
(*specs are outdated at least as of 2023-05-27*)&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
Maltodextrin was an office terminal. It was upgraded in Spring 2014 after an unidentified failure. Not operational (no video output) as of July 2022.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i3-4130 @ 3.40 GHz&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
*[http://csclub.uwaterloo.ca/misc/manuals/E8425_H81I_PLUS.pdf ASUS H81-PLUS] Motherboard&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*[http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;natural-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Natural-flavours is an office terminal; it used to be our mirror.&lt;br /&gt;
&lt;br /&gt;
In Fall 2016, it received a major upgrade thanks the MathSoc&#039;s Capital Improvement Fund.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i7-6700k&lt;br /&gt;
* 2x8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Cup Holder (DVD drive has power, but not connected to mother board)&lt;br /&gt;
= UPS =&lt;br /&gt;
&lt;br /&gt;
All of the machines in the MC 3015 machine room are connected to one of our UPSs.&lt;br /&gt;
&lt;br /&gt;
All of our UPSs can be monitored via CSCF:&lt;br /&gt;
&lt;br /&gt;
* MC3015-UPS-B2&lt;br /&gt;
* mc-3015-e7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced July 2014) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-e7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-f7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced Feb 2017) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-f7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2010) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2004) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
&lt;br /&gt;
We will receive email alerts for any issues with the UPS. Their status can be monitored via [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
TODO: Fix labels &amp;amp; verify info is correct &amp;amp; figure out why we can&#039;t talk to cacti.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Observability&amp;diff=5255</id>
		<title>Observability</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Observability&amp;diff=5255"/>
		<updated>2024-05-27T02:14:56Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* Metrics */ make Alerts section and add Grafana alerts option&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are [https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html three pillars of observability]: metrics, logging and tracing. We are only interested in the first two.&lt;br /&gt;
&lt;br /&gt;
== Metrics ==&lt;br /&gt;
All of our machines are, or at least should be, running the Prometheus node exporter. This collects and sends machine metrics (e.g. RAM used, disk space) to the Prometheus server running at https://prometheus.csclub.uwaterloo.ca (currently a VM on phosphoric-acid). There are a few specialized exporters running on several other machines; a Postfix exporter is running on mail, an Apache exporter is running on caffeine, and an NGINX expoter is running on potassium-benzoate. There is also a custom exporter written by syscom running on potassium-benzoate for mirror stats.&lt;br /&gt;
&lt;br /&gt;
Most of the exporters use mutual TLS authentication with the Prometheus server. I set the expiration date for the TLS certs to 10 years. If you are reading this and it is 2031 or later, then go update the certs.&lt;br /&gt;
&lt;br /&gt;
I highly suggest becoming familiar with [https://prometheus.io/docs/prometheus/latest/querying/basics/ PromQL], the query language for Prometheus. You can run and visualize some queries at https://prometheus.csclub.uwaterloo.ca/prometheus. For example, here is a query to determine which machines are up or down:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up{job=&amp;quot;node_exporter&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Here&#039;s how we determine if a machine has NFS mounted. This will return 1 for machines which have NFS mounted, but will not return any records for machines which do not have NFS mounted. (We ignore the actual value of node_filesystem_device_error because it returns 1 for machines using Kerberized NFS.)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
count by (instance) (node_filesystem_device_error{mountpoint=&amp;quot;/users&amp;quot;, fstype=&amp;quot;nfs&amp;quot;})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Now this is a rather complicated expression which can return one of three values:&lt;br /&gt;
* 0: the machine is down&lt;br /&gt;
* 1: the machine is up, but NFS is not mounted&lt;br /&gt;
* 2: the machine is up and NFS is mounted&lt;br /&gt;
The [https://prometheus.io/docs/prometheus/latest/querying/operators/#logical-set-binary-operators or operator] in PromQL is key here.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sum by (instance) (&lt;br /&gt;
  (count by (instance) (node_filesystem_device_error{mountpoint=&amp;quot;/users&amp;quot;, fstype=&amp;quot;nfs&amp;quot;}))&lt;br /&gt;
  or up{job=&amp;quot;node_exporter&amp;quot;}&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alerts ==&lt;br /&gt;
We also use [https://prometheus.io/docs/alerting/latest/alertmanager/ AlertManager] to send email alerts from Prometheus metrics. We should figure out how to also send messages to IRC or similar.&lt;br /&gt;
&lt;br /&gt;
We also use the [https://github.com/prometheus/blackbox_exporter Blackbox prober exporter] to check if some of our web-based services are up.&lt;br /&gt;
&lt;br /&gt;
We make some pretty charts on Grafana (https://prometheus.csclub.uwaterloo.ca) from PromQL queries. Grafana also has an &#039;Explorer&#039; page where you can test out some queries before making chart panels from them.&lt;br /&gt;
&lt;br /&gt;
You can also create fine-grained alerts on Grafana (https://prometheus.csclub.uwaterloo.ca/alerting/list).&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
We now use [https://vector.dev/ Vector] for collecting and transforming logs, and [https://clickhouse.com/ ClickHouse] for storing log data.&lt;br /&gt;
&lt;br /&gt;
=== ClickHouse ===&lt;br /&gt;
ClickHouse is a very fast OLAP database which has great documentation for storing and analyzing [https://clickhouse.com/use-cases/logging-and-metrics logging and metrics]. Unfortunately, the CPU on phosphoric-acid (which hosts the prometheus VM) is so old that when we try to install the official deb package, the following error occurs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Instruction check fail. The CPU does not support SSSE3 instruction set.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
So we&#039;re going to download the &amp;quot;compat&amp;quot; version instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /root&lt;br /&gt;
wget https://s3.amazonaws.com/clickhouse-builds/master/amd64compat/clickhouse&lt;br /&gt;
chmod +x clickhouse&lt;br /&gt;
./clickhouse install&lt;br /&gt;
rm clickhouse&lt;br /&gt;
wget -O /etc/systemd/system/clickhouse-server.service https://github.com/ClickHouse/ClickHouse/raw/master/packages/clickhouse-server.service&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable clickhouse-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
By default, systemd limits the number of threads which a service can create, so we&#039;ll want to disable that. Run &amp;lt;code&amp;gt;systemctl edit clickhouse-server&amp;lt;/code&amp;gt; and paste the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
TasksMax=infinity&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Next, paste the following into /etc/clickhouse-server/users.d/csclub-users.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;clickhouse&amp;gt;&lt;br /&gt;
  &amp;lt;profiles&amp;gt;&lt;br /&gt;
    &amp;lt;default&amp;gt;&lt;br /&gt;
      &amp;lt;!-- disable logs (using too much disk space) --&amp;gt;&lt;br /&gt;
      &amp;lt;log_queries replace=&amp;quot;replace&amp;quot;&amp;gt;0&amp;lt;/log_queries&amp;gt;&lt;br /&gt;
      &amp;lt;log_query_threads replace=&amp;quot;replace&amp;quot;&amp;gt;0&amp;lt;/log_query_threads&amp;gt;&lt;br /&gt;
    &amp;lt;/default&amp;gt;&lt;br /&gt;
    &amp;lt;readonly&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Grafana needs to change settings queries --&amp;gt;&lt;br /&gt;
      &amp;lt;readonly&amp;gt;2&amp;lt;/readonly&amp;gt;&lt;br /&gt;
    &amp;lt;/readonly&amp;gt;&lt;br /&gt;
  &amp;lt;/profiles&amp;gt;&lt;br /&gt;
  &amp;lt;users&amp;gt;&lt;br /&gt;
    &amp;lt;default&amp;gt;&lt;br /&gt;
      &amp;lt;!-- The default user should only be allowed to connect from localhost --&amp;gt;&lt;br /&gt;
      &amp;lt;networks&amp;gt;&lt;br /&gt;
        &amp;lt;ip&amp;gt;::1&amp;lt;/ip&amp;gt;&lt;br /&gt;
        &amp;lt;ip&amp;gt;127.0.0.1&amp;lt;/ip&amp;gt;&lt;br /&gt;
      &amp;lt;/networks&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Allow the default user to create new users --&amp;gt;&lt;br /&gt;
      &amp;lt;access_management&amp;gt;1&amp;lt;/access_management&amp;gt;&lt;br /&gt;
      &amp;lt;named_collection_control&amp;gt;1&amp;lt;/named_collection_control&amp;gt;&lt;br /&gt;
      &amp;lt;show_named_collections&amp;gt;1&amp;lt;/show_named_collections&amp;gt;&lt;br /&gt;
      &amp;lt;show_named_collections_secrets&amp;gt;1&amp;lt;/show_named_collections_secrets&amp;gt;&lt;br /&gt;
    &amp;lt;/default&amp;gt;&lt;br /&gt;
  &amp;lt;/users&amp;gt;&lt;br /&gt;
&amp;lt;/clickhouse&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then paste the following into /etc/clickhouse-server/config/zzz-csclub.xml (we need the zzz prefix because the configuration files are merged in alphabetical order, and we want ours to be applied last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;clickhouse&amp;gt;&lt;br /&gt;
  &amp;lt;listen_host&amp;gt;127.0.0.1&amp;lt;/listen_host&amp;gt;&lt;br /&gt;
  &amp;lt;listen_host&amp;gt;::1&amp;lt;/listen_host&amp;gt;&lt;br /&gt;
  &amp;lt;logger&amp;gt;&lt;br /&gt;
    &amp;lt;level&amp;gt;information&amp;lt;/level&amp;gt;&lt;br /&gt;
    &amp;lt;size&amp;gt;100M&amp;lt;/size&amp;gt;&lt;br /&gt;
    &amp;lt;count&amp;gt;10&amp;lt;/count&amp;gt;&lt;br /&gt;
  &amp;lt;/logger&amp;gt;&lt;br /&gt;
  &amp;lt;mysql_port&amp;gt;&amp;lt;/mysql_port&amp;gt;&lt;br /&gt;
  &amp;lt;postgresql_port&amp;gt;&amp;lt;/postgresql_port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- disable logs (using too much disk space) --&amp;gt;&lt;br /&gt;
  &amp;lt;asynchronous_metric_log remove=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;metric_log remove=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;query_thread_log remove=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;query_log remove=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;query_views_log remove=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;part_log remove=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;session_log remove=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;text_log remove=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;trace_log remove=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/clickhouse&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then run &amp;lt;code&amp;gt;systemctl restart clickhouse-server&amp;lt;/code&amp;gt; and make sure that it&#039;s running.&lt;br /&gt;
&lt;br /&gt;
==== Schema ====&lt;br /&gt;
Run &amp;lt;code&amp;gt;clickhouse-client&amp;lt;/code&amp;gt; to get a SQL shell. First we need to create a new database and some users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE vector;&lt;br /&gt;
CREATE USER vector IDENTIFIED BY &#039;REPLACE_ME&#039;;&lt;br /&gt;
GRANT ALL ON vector.* TO vector;&lt;br /&gt;
CREATE USER grafana IDENTIFIED BY &#039;REPLACE_ME&#039; SETTINGS PROFILE &#039;readonly&#039;;&lt;br /&gt;
GRANT SHOW DATABASES, SHOW TABLES, SELECT, DICTGET ON *.* TO grafana;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some of our tables, we&#039;ll store the two-letter country code instead of a country&#039;s full name to save space. So we&#039;ll create a [https://clickhouse.com/docs/en/sql-reference/dictionaries dictionary] so that we can look up a country&#039;s full name. Exit the SQL shell, then, download the CSV file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget -O /var/lib/clickhouse/user_files/country_codes.csv &#039;https://datahub.io/core/country-list/r/data.csv&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then run &amp;lt;code&amp;gt;clickhouse-client&amp;lt;/code&amp;gt; and create the dictionary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DICTIONARY vector.country_codes_dictionary&lt;br /&gt;
(&lt;br /&gt;
    Name String,&lt;br /&gt;
    Code String&lt;br /&gt;
)&lt;br /&gt;
PRIMARY KEY Code&lt;br /&gt;
SOURCE(FILE(path &#039;/var/lib/clickhouse/user_files/country_codes.csv&#039; FORMAT &#039;CSVWithNames&#039;))&lt;br /&gt;
LIFETIME(MIN 0 MAX 0)&lt;br /&gt;
LAYOUT(HASHED_ARRAY());&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Perform a SELECT to fill the table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM country_codes_dictionary;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we need to create the tables for storing our actual log data (after they are transformed by Vector).&lt;br /&gt;
Create a table for failed SSH logins:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.failed_ssh_logins&lt;br /&gt;
(&lt;br /&gt;
    host LowCardinality(String),&lt;br /&gt;
    timestamp DateTime,&lt;br /&gt;
    ip_address IPv6,&lt;br /&gt;
    username String,&lt;br /&gt;
    country_code LowCardinality(String)&lt;br /&gt;
)&lt;br /&gt;
ENGINE = MergeTree()&lt;br /&gt;
PRIMARY KEY (host, timestamp)&lt;br /&gt;
TTL timestamp + INTERVAL 1 MONTH DELETE;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a table for storing mirror requests:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.mirror_requests&lt;br /&gt;
(&lt;br /&gt;
    distro LowCardinality(String),&lt;br /&gt;
    timestamp DateTime CODEC(Delta, ZSTD),&lt;br /&gt;
    ip_address IPv6,&lt;br /&gt;
    bytes_sent UInt64,&lt;br /&gt;
    user_agent String,&lt;br /&gt;
    country_code LowCardinality(String),&lt;br /&gt;
    region_name String,&lt;br /&gt;
    city String&lt;br /&gt;
)&lt;br /&gt;
ENGINE = MergeTree()&lt;br /&gt;
PRIMARY KEY (distro, timestamp, country_code, region_name, city)&lt;br /&gt;
TTL timestamp + INTERVAL 1 WEEK DELETE;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of ClickHouse&#039;s great features is [https://clickhouse.com/docs/en/guides/developer/cascading-materialized-views Materialized Views]. These allow us to automatically &amp;quot;forward&amp;quot; data from one table to another, and the second table can use a different storage engine to aggregate data and save space.&lt;br /&gt;
&lt;br /&gt;
We want to calculate the total number of requests and bytes sent for each distro, so let&#039;s create a table and view for that:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.mirror_requests_agg_by_distro&lt;br /&gt;
(&lt;br /&gt;
    distro LowCardinality(String),&lt;br /&gt;
    date Date CODEC(Delta, ZSTD),&lt;br /&gt;
    country_code LowCardinality(String),&lt;br /&gt;
    num_requests UInt64,&lt;br /&gt;
    bytes_sent UInt64&lt;br /&gt;
)&lt;br /&gt;
ENGINE = SummingMergeTree((num_requests, bytes_sent))&lt;br /&gt;
PRIMARY KEY (distro, toStartOfMonth(date), date, country_code)&lt;br /&gt;
TTL date + INTERVAL 1 MONTH&lt;br /&gt;
        GROUP BY distro, toStartOfMonth(date)&lt;br /&gt;
        SET num_requests = sum(num_requests),&lt;br /&gt;
            bytes_sent = sum(bytes_sent),&lt;br /&gt;
    date + INTERVAL 2 YEAR DELETE;&lt;br /&gt;
&lt;br /&gt;
CREATE MATERIALIZED VIEW vector.mirror_requests_agg_by_distro_mv&lt;br /&gt;
TO vector.mirror_requests_agg_by_distro&lt;br /&gt;
AS&lt;br /&gt;
SELECT&lt;br /&gt;
    distro,&lt;br /&gt;
    toDate(timestamp) AS date,&lt;br /&gt;
    country_code,&lt;br /&gt;
    sum(1) AS num_requests,&lt;br /&gt;
    sum(bytes_sent) AS bytes_sent&lt;br /&gt;
FROM vector.mirror_requests&lt;br /&gt;
GROUP BY distro, date, country_code;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We also wants some stats for Canada specifically:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.mirror_requests_agg_canada&lt;br /&gt;
(&lt;br /&gt;
    distro LowCardinality(String),&lt;br /&gt;
    date Date CODEC(Delta, ZSTD),&lt;br /&gt;
    region_name LowCardinality(String),&lt;br /&gt;
    city String,&lt;br /&gt;
    bytes_sent UInt64,&lt;br /&gt;
    num_requests UInt64&lt;br /&gt;
)&lt;br /&gt;
ENGINE = SummingMergeTree((bytes_sent, num_requests))&lt;br /&gt;
PRIMARY KEY (distro, toStartOfMonth(date), date, region_name, city)&lt;br /&gt;
TTL date + INTERVAL 1 MONTH&lt;br /&gt;
        GROUP BY distro, toStartOfMonth(date)&lt;br /&gt;
        SET num_requests = sum(num_requests),&lt;br /&gt;
            bytes_sent = sum(bytes_sent),&lt;br /&gt;
    date + INTERVAL 2 YEAR DELETE;&lt;br /&gt;
&lt;br /&gt;
CREATE MATERIALIZED VIEW vector.mirror_requests_agg_canada_mv&lt;br /&gt;
TO vector.mirror_requests_agg_canada&lt;br /&gt;
AS&lt;br /&gt;
SELECT&lt;br /&gt;
    distro,&lt;br /&gt;
    toDate(timestamp) as date,&lt;br /&gt;
    region_name,&lt;br /&gt;
    city,&lt;br /&gt;
    sum(bytes_sent) AS bytes_sent,&lt;br /&gt;
    sum(1) AS num_requests&lt;br /&gt;
FROM vector.mirror_requests&lt;br /&gt;
WHERE country_code = &#039;CA&#039;&lt;br /&gt;
GROUP BY distro, date, region_name, city;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We also want to keep stats just for the university:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.mirror_requests_agg_uw&lt;br /&gt;
(&lt;br /&gt;
    distro LowCardinality(String),&lt;br /&gt;
    date Date CODEC(Delta, ZSTD),&lt;br /&gt;
    bytes_sent UInt64,&lt;br /&gt;
    num_requests UInt64&lt;br /&gt;
)&lt;br /&gt;
ENGINE = SummingMergeTree((bytes_sent, num_requests))&lt;br /&gt;
PRIMARY KEY (distro, toStartOfMonth(date), date)&lt;br /&gt;
TTL date + INTERVAL 1 MONTH&lt;br /&gt;
        GROUP BY distro, toStartOfMonth(date)&lt;br /&gt;
        SET num_requests = sum(num_requests),&lt;br /&gt;
            bytes_sent = sum(bytes_sent),&lt;br /&gt;
    date + INTERVAL 2 YEAR DELETE;&lt;br /&gt;
&lt;br /&gt;
CREATE MATERIALIZED VIEW vector.mirror_requests_agg_uw_mv&lt;br /&gt;
TO vector.mirror_requests_agg_uw&lt;br /&gt;
AS&lt;br /&gt;
SELECT&lt;br /&gt;
    distro,&lt;br /&gt;
    toDate(timestamp) as date,&lt;br /&gt;
    sum(bytes_sent) AS bytes_sent,&lt;br /&gt;
    sum(1) AS num_requests&lt;br /&gt;
FROM vector.mirror_requests&lt;br /&gt;
WHERE isIPAddressInRange(IPv6NumToString(ip_address), &#039;::ffff:129.97.0.0/112&#039;)&lt;br /&gt;
   OR isIPAddressInRange(IPv6NumToString(ip_address), &#039;::ffff:10.0.0.0/104&#039;)&lt;br /&gt;
   OR isIPAddressInRange(IPv6NumToString(ip_address), &#039;::ffff:172.16.0.0/108&#039;)&lt;br /&gt;
   OR isIPAddressInRange(IPv6NumToString(ip_address), &#039;::ffff:192.168.0.0/112&#039;)&lt;br /&gt;
   OR isIPAddressInRange(IPv6NumToString(ip_address), &#039;2620:101:f000::/47&#039;)&lt;br /&gt;
   OR isIPAddressInRange(IPv6NumToString(ip_address), &#039;fd74:6b6a:8eca::/47&#039;)&lt;br /&gt;
GROUP BY distro, date, region_name, city;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we&#039;ll store some stats for IP subnets:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE vector.mirror_requests_agg_ip&lt;br /&gt;
(&lt;br /&gt;
    timestamp DateTime CODEC(Delta, ZSTD),&lt;br /&gt;
    cidr_start IPv6,&lt;br /&gt;
    country_code LowCardinality(String),&lt;br /&gt;
    num_requests UInt64,&lt;br /&gt;
    bytes_sent UInt64&lt;br /&gt;
)&lt;br /&gt;
ENGINE = SummingMergeTree((num_requests, bytes_sent))&lt;br /&gt;
PRIMARY KEY (timestamp, cidr_start, country_code)&lt;br /&gt;
TTL timestamp + toIntervalWeek(2);&lt;br /&gt;
&lt;br /&gt;
CREATE MATERIALIZED VIEW vector.mirror_requests_agg_ip_mv TO vector.mirror_requests_agg_ip AS&lt;br /&gt;
SELECT&lt;br /&gt;
    toStartOfFiveMinutes(timestamp) AS timestamp,&lt;br /&gt;
    IPv6CIDRToRange(ip_address, 120).1 AS cidr_start,&lt;br /&gt;
    country_code,&lt;br /&gt;
    sum(1) AS num_requests,&lt;br /&gt;
    sum(bytes_sent) AS bytes_sent&lt;br /&gt;
FROM vector.mirror_requests&lt;br /&gt;
GROUP BY&lt;br /&gt;
    timestamp,&lt;br /&gt;
    cidr_start,&lt;br /&gt;
    country_code;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GeoIP database ===&lt;br /&gt;
We&#039;ll want to look up geographic information for the IP addresses in our data. To do this, we&#039;ll use the [https://dev.maxmind.com/geoip/geolite2-free-geolocation-data MaxMind GeoLite2 databases]. Syscom already has a MaxMind account; the password is stored in the usual place. Install the latest geoipupdate package from [https://github.com/maxmind/geoipupdate/releases here], then edit /etc/GeoIP.conf as necessary (use the syscom account ID and license key). Set &amp;lt;code&amp;gt;EditionIDs&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;GeoLite2-City&amp;lt;/code&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use a systemd timer to run the geoipupdate script periodically. Paste the following into /etc/systemd/system/geoipupdate.service:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GeoIP Update&lt;br /&gt;
Documentation=https://dev.maxmind.com/geoip/updating-databases&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/geoipupdate&lt;br /&gt;
Nice=19&lt;br /&gt;
IOSchedulingClass=idle&lt;br /&gt;
IOSchedulingPriority=7&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
ReadWritePaths=/usr/share/GeoIP&lt;br /&gt;
ProtectHome=true&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
PrivateDevices=true&lt;br /&gt;
ProtectHostname=true&lt;br /&gt;
ProtectClock=true&lt;br /&gt;
ProtectKernelTunables=true&lt;br /&gt;
ProtectKernelModules=true&lt;br /&gt;
ProtectKernelLogs=true&lt;br /&gt;
ProtectControlGroups=true&lt;br /&gt;
LockPersonality=true&lt;br /&gt;
RestrictRealtime=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run &amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;systemctl start geoipupdate&amp;lt;/code&amp;gt; to download the database for the first time.&lt;br /&gt;
&lt;br /&gt;
Now paste the following into /etc/systemd/system/geoipupdate.timer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Automatic GeoIP database update&lt;br /&gt;
Documentation=https://dev.maxmind.com/geoip/updating-databases&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
RandomizedDelaySec=12h&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable geoipupdate.timer&lt;br /&gt;
systemctl start geoipupdate.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector ===&lt;br /&gt;
Vector allows you to create directed acyclic graphs (DAGs) for collecting and processing logs, which gives us a lot of flexibility. It also has a built-in scripting language, [https://vector.dev/docs/reference/vrl/ Vector Remap Language (VRL)] for slicing and dicing data. This allows us to remove fields which we don&#039;t need, add new fields which we do need, enrich an event with extra data, etc.&lt;br /&gt;
&lt;br /&gt;
Our data pipeline looks like this: Vector agents -&amp;gt; Vector aggregator -&amp;gt; ClickHouse. We use Grafana for visualization.&lt;br /&gt;
&lt;br /&gt;
We use mutual TLS between the agents and the aggregator to make sure that random people can&#039;t send us garbage data:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -newkey rsa:2048 -nodes -keyout aggregator.key -x509 -out aggregator.crt -days 36500&lt;br /&gt;
openssl req -newkey rsa:2048 -nodes -keyout agent.key -x509 -out agent.crt -days 36500&lt;br /&gt;
chown vector:vector *.crt *.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is what our vector.toml looks like on the general-use machines; currently, we only use it for collecting failed SSH login attempts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[sources.source_sshd]&lt;br /&gt;
type = &amp;quot;journald&amp;quot;&lt;br /&gt;
include_units = [&amp;quot;ssh.service&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[transforms.remap_sshd]&lt;br /&gt;
type = &amp;quot;remap&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;source_sshd&amp;quot;]&lt;br /&gt;
source = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  parsed, err = parse_regex(&lt;br /&gt;
    .message, r&#039;^(?:Connection (?:closed|reset)|Disconnected) (?:by|from) (?:invalid|authenticating) user (?P&amp;lt;user&amp;gt;[^ ]+) (?P&amp;lt;ip&amp;gt;[0-9.a-f:]+)&#039;&lt;br /&gt;
  )&lt;br /&gt;
  if is_null(err) {&lt;br /&gt;
    . = {&lt;br /&gt;
      &amp;quot;username&amp;quot;: parsed.user,&lt;br /&gt;
      &amp;quot;ip_address&amp;quot;: parsed.ip,&lt;br /&gt;
      &amp;quot;host&amp;quot;: .host,&lt;br /&gt;
      &amp;quot;timestamp&amp;quot;: .timestamp,&lt;br /&gt;
      &amp;quot;job&amp;quot;: &amp;quot;vector-sshd&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[transforms.filter_sshd]&lt;br /&gt;
type = &amp;quot;filter&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;remap_sshd&amp;quot;]&lt;br /&gt;
condition = &#039;.job == &amp;quot;vector-sshd&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
[sinks.aggregator]&lt;br /&gt;
type = &amp;quot;vector&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;filter_sshd&amp;quot;]&lt;br /&gt;
address = &amp;quot;prometheus:5045&amp;quot;&lt;br /&gt;
  [sinks.aggregator.tls]&lt;br /&gt;
  enabled = true&lt;br /&gt;
  ca_file = &amp;quot;/etc/vector/aggregator.crt&amp;quot;&lt;br /&gt;
  crt_file = &amp;quot;/etc/vector/agent.crt&amp;quot;&lt;br /&gt;
  key_file = &amp;quot;/etc/vector/agent.key&amp;quot;&lt;br /&gt;
  verify_hostname = false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The agent on potassium-benzoate collects NGINX logs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[sources.source_nginx]&lt;br /&gt;
type = &amp;quot;file&amp;quot;&lt;br /&gt;
include = [&amp;quot;/var/log/nginx/access.log&amp;quot;]&lt;br /&gt;
max_read_bytes = 65536&lt;br /&gt;
&lt;br /&gt;
[transforms.remap_nginx]&lt;br /&gt;
type = &amp;quot;remap&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;source_nginx&amp;quot;]&lt;br /&gt;
source = &amp;quot;&amp;quot;&amp;quot; &lt;br /&gt;
  parsed_log, err = parse_nginx_log(.message, &amp;quot;combined&amp;quot;)&lt;br /&gt;
  status = parsed_log.status&lt;br /&gt;
  request = string!(parsed_log.request || &amp;quot;&amp;quot;)&lt;br /&gt;
  if is_null(err) &amp;amp;&amp;amp; status == 200 {&lt;br /&gt;
    parsed_path, err = parse_regex(request, r&#039;^GET /+(?P&amp;lt;distro&amp;gt;[^/? ]+)&#039;)&lt;br /&gt;
    distro = parsed_path.distro&lt;br /&gt;
    ignore = [&lt;br /&gt;
      &amp;quot;server-status&amp;quot;, &amp;quot;stats&amp;quot;, &amp;quot;robots.txt&amp;quot;,&lt;br /&gt;
      &amp;quot;include&amp;quot;, &amp;quot;pub&amp;quot;, &amp;quot;news&amp;quot;, &amp;quot;index.html&amp;quot;, &amp;quot;sync.json&amp;quot;, &amp;quot;ups&amp;quot;,&lt;br /&gt;
      &amp;quot;pool&amp;quot;, &amp;quot;dists&amp;quot;, &amp;quot;csclub.asc&amp;quot;, &amp;quot;csclub.gpg&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
    if (&lt;br /&gt;
      is_null(err) &amp;amp;&amp;amp; !includes(ignore, distro) &amp;amp;&amp;amp; !contains(request, &amp;quot;..&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
      !starts_with(request, &amp;quot;#&amp;quot;) &amp;amp;&amp;amp; !starts_with(request, &amp;quot;%&amp;quot;) &amp;amp;&amp;amp; !starts_with(request, &amp;quot;.&amp;quot;)&lt;br /&gt;
    ) {&lt;br /&gt;
      . = {&lt;br /&gt;
        &amp;quot;distro&amp;quot;: distro,&lt;br /&gt;
        &amp;quot;user_agent&amp;quot;: parsed_log.agent,&lt;br /&gt;
        &amp;quot;ip_address&amp;quot;: parsed_log.client,&lt;br /&gt;
        &amp;quot;bytes_sent&amp;quot;: parsed_log.size,&lt;br /&gt;
        &amp;quot;timestamp&amp;quot;: parsed_log.timestamp,&lt;br /&gt;
        &amp;quot;job&amp;quot;: &amp;quot;vector-mirror&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, here&#039;s the aggregator config, which collects data from each agent and then inserts it into ClickHouse:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[enrichment_tables.enrich_geoip]                                                    &lt;br /&gt;
type = &amp;quot;geoip&amp;quot;                                                                      &lt;br /&gt;
path = &amp;quot;/usr/share/GeoIP/GeoLite2-City.mmdb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[sources.source_agents]      &lt;br /&gt;
type = &amp;quot;vector&amp;quot;&lt;br /&gt;
address = &amp;quot;[::]:5045&amp;quot;&lt;br /&gt;
  [sources.source_agents.tls]&lt;br /&gt;
  enabled = true&lt;br /&gt;
  ca_file = &amp;quot;/etc/vector/agent.crt&amp;quot;&lt;br /&gt;
  crt_file = &amp;quot;/etc/vector/aggregator.crt&amp;quot;&lt;br /&gt;
  key_file = &amp;quot;/etc/vector/aggregator.key&amp;quot;&lt;br /&gt;
  verify_hostname = false&lt;br /&gt;
&lt;br /&gt;
[transforms.transform_route]&lt;br /&gt;
type = &amp;quot;route&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;source_agents&amp;quot;]&lt;br /&gt;
route.sshd = &#039;.job == &amp;quot;vector-sshd&amp;quot;&#039;&lt;br /&gt;
route.mirror = &#039;.job == &amp;quot;vector-mirror&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
[transforms.transform_sshd]&lt;br /&gt;
type = &amp;quot;remap&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;transform_route.sshd&amp;quot;]&lt;br /&gt;
source = &amp;quot;&amp;quot;&amp;quot; &lt;br /&gt;
  ipinfo = get_enrichment_table_record(&amp;quot;enrich_geoip&amp;quot;, {&amp;quot;ip&amp;quot;: .ip_address}) ?? {}&lt;br /&gt;
  if is_ipv4!(.ip_address) &amp;amp;&amp;amp; (ip_cidr_contains!(&amp;quot;10.0.0.0/8&amp;quot;, .ip_address) \&lt;br /&gt;
                            || ip_cidr_contains!(&amp;quot;172.16.0.0/12&amp;quot;, .ip_address) \&lt;br /&gt;
                            || ip_cidr_contains!(&amp;quot;192.168.0.0/16&amp;quot;, .ip_address)) {&lt;br /&gt;
    ipinfo.country_code = &amp;quot;CA&amp;quot;;&lt;br /&gt;
    ipinfo.region_name = &amp;quot;Ontario&amp;quot;;&lt;br /&gt;
    ipinfo.city_name = &amp;quot;Waterloo&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  . = {&lt;br /&gt;
    &amp;quot;host&amp;quot;: .host,&lt;br /&gt;
    &amp;quot;timestamp&amp;quot;: .timestamp,&lt;br /&gt;
    &amp;quot;username&amp;quot;: .username,&lt;br /&gt;
    &amp;quot;ip_address&amp;quot;: ip_to_ipv6!(.ip_address),&lt;br /&gt;
    &amp;quot;country_code&amp;quot;: ipinfo.country_code || &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[transforms.transform_mirror]&lt;br /&gt;
type = &amp;quot;remap&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;transform_route.mirror&amp;quot;]&lt;br /&gt;
source = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  ipinfo = get_enrichment_table_record(&amp;quot;enrich_geoip&amp;quot;, {&amp;quot;ip&amp;quot;: .ip_address}) ?? {}&lt;br /&gt;
  if is_ipv4!(.ip_address) &amp;amp;&amp;amp; (ip_cidr_contains!(&amp;quot;10.0.0.0/8&amp;quot;, .ip_address) \&lt;br /&gt;
                            || ip_cidr_contains!(&amp;quot;172.16.0.0/12&amp;quot;, .ip_address) \&lt;br /&gt;
                            || ip_cidr_contains!(&amp;quot;192.168.0.0/16&amp;quot;, .ip_address)) {&lt;br /&gt;
    ipinfo.country_code = &amp;quot;CA&amp;quot;;&lt;br /&gt;
    ipinfo.region_name = &amp;quot;Ontario&amp;quot;;&lt;br /&gt;
    ipinfo.city_name = &amp;quot;Waterloo&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  . = {&lt;br /&gt;
    &amp;quot;distro&amp;quot;: .distro,&lt;br /&gt;
    &amp;quot;timestamp&amp;quot;: .timestamp,&lt;br /&gt;
    &amp;quot;ip_address&amp;quot;: ip_to_ipv6!(.ip_address),&lt;br /&gt;
    &amp;quot;bytes_sent&amp;quot;: .bytes_sent,&lt;br /&gt;
    &amp;quot;user_agent&amp;quot;: .user_agent,&lt;br /&gt;
    &amp;quot;country_code&amp;quot;: ipinfo.country_code || &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;region_name&amp;quot;: ipinfo.region_name || &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;city&amp;quot;: ipinfo.city_name || &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[transforms.transform_unmatched]&lt;br /&gt;
type = &amp;quot;remap&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;transform_route._unmatched&amp;quot;]&lt;br /&gt;
source = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  log(&amp;quot;unrecognized job: &amp;quot; + string!(.job || &amp;quot;null&amp;quot;), level: &amp;quot;warn&amp;quot;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[sinks.sink_unmatched]&lt;br /&gt;
type = &amp;quot;blackhole&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;transform_unmatched&amp;quot;]&lt;br /&gt;
print_interval_secs = 0&lt;br /&gt;
&lt;br /&gt;
[sinks.clickhouse_sshd]&lt;br /&gt;
type = &amp;quot;clickhouse&amp;quot;&lt;br /&gt;
inputs = [&amp;quot;transform_sshd&amp;quot;]&lt;br /&gt;
encoding.timestamp_format = &amp;quot;unix&amp;quot;&lt;br /&gt;
endpoint = &amp;quot;$CLICKHOUSE_ENDPOINT&amp;quot;&lt;br /&gt;
database = &amp;quot;$CLICKHOUSE_DATABASE&amp;quot;&lt;br /&gt;
table = &amp;quot;failed_ssh_logins&amp;quot;&lt;br /&gt;
  [sinks.clickhouse_sshd.auth]&lt;br /&gt;
  strategy = &amp;quot;basic&amp;quot;&lt;br /&gt;
  user = &amp;quot;$CLICKHOUSE_USER&amp;quot;&lt;br /&gt;
  password = &amp;quot;$CLICKHOUSE_PASSWORD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beats, Logstash and Loki (old) ===&lt;br /&gt;
We previously used Elastic Beats, Logstash and Grafana Loki for collecting and storing logs. One day I tried to upgrade Logstash and it exploded so badly that I figured it would be easier to just switch to Vector instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;The sections below are kept for historical purposes only and are no longer accurate.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use a combination of [https://www.elastic.co/beats/ Elastic Beats], [https://www.elastic.co/logstash/ Logstash] and [https://grafana.com/oss/loki/ Loki] for collecting, storing and querying our logs; for visualization, we use Grafana. Logstash and Loki are currently both running in the prometheus VM.&lt;br /&gt;
&lt;br /&gt;
The reason why I chose Loki over Elasticsearch is because Loki is &amp;lt;i&amp;gt;very&amp;lt;/i&amp;gt; space efficient with regards to storage. It also consumes way less RAM and CPU. This means that we can collect a lot of logs without worrying too much about resource usage.&lt;br /&gt;
&lt;br /&gt;
We have Journalbeat and/or Filebeat running on some of our machines to collect logs from sshd, Apache and NGINX. The Beats send these logs to Logstash, which does some pre-processing. The most useful contribution by Logstash is its GeoIP plugin, which allows us to enrich the logs with some geographical information from IP addresses (e.g. add city and country). Logstash sends these logs to Loki, and we can then view these from Grafana.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Sometimes the Loki output plugin for Logstash disappears after a reboot or an upgrade. If you see Logstash complaining about this in the journald logs, run this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/share/logstash&lt;br /&gt;
bin/logstash-plugin install logstash-output-loki&lt;br /&gt;
systemctl restart logstash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See [https://grafana.com/docs/loki/latest/clients/logstash/ here] for details.&lt;br /&gt;
&lt;br /&gt;
The language for querying logs in Loki is [https://grafana.com/docs/loki/latest/logql/ LogQL], which, syntactically, is very similar to PromQL. If you have already learned PromQL, then you should be able to pick up LogQL very easily. You can try out some LogQL queries from the &#039;Explore&#039; page on Grafana; make sure you toggle the data source to &#039;Loki&#039; in the top left corner. For the &#039;topk&#039; queries, you will also want to toggle &#039;Query type&#039; to &#039;Instant&#039; rather than &#039;Range&#039;.&lt;br /&gt;
&lt;br /&gt;
==== LogQL examples ====&lt;br /&gt;
Here are the number of failed SSH login attempts for each host for a given time range:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sum by (hostname) (&lt;br /&gt;
  count_over_time(&lt;br /&gt;
    {job=&amp;quot;logstash-sshd&amp;quot;} [$__range]&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$__range&amp;lt;/code&amp;gt; is a special [https://grafana.com/docs/grafana/latest/variables/variable-types/global-variables/ global variable] in Grafana which is equal to the time range in the top right corner of a chart.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Here are the top 10 IP addresses from which failed SSH login attempts arrived, for a given host and time range:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
topk(10,&lt;br /&gt;
  sum by (ip_address) (&lt;br /&gt;
    count_over_time(&lt;br /&gt;
      {job=&amp;quot;logstash-sshd&amp;quot;,hostname=&amp;quot;$hostname&amp;quot;} | json | __error__ = &amp;quot;&amp;quot;&lt;br /&gt;
      [$__range]&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
$hostname is a chart variable, which can be configured from a chart&#039;s settings.&lt;br /&gt;
&lt;br /&gt;
I configured Logstash to send logs to Loki as JSON, but it&#039;s a rather hacky solution, so occasionally invalid JSON is sent.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Here are the number of HTTP requests for the 15 distros on our mirror from the last hour:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
topk(15,&lt;br /&gt;
  sum by (distro) (&lt;br /&gt;
    count_over_time(&lt;br /&gt;
      {job=&amp;quot;logstash-nginx&amp;quot;} | json | __error__ = &amp;quot;&amp;quot; | distro != &amp;quot;server-status&amp;quot;&lt;br /&gt;
      [1h]&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Here are the number of total bytes sent over HTTP for the top 15 distros from the last hour. Note the use of the &amp;lt;code&amp;gt;unwrap&amp;lt;/code&amp;gt; operator.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
topk(15,&lt;br /&gt;
  sum by (distro) (&lt;br /&gt;
    sum_over_time(&lt;br /&gt;
      {job=&amp;quot;logstash-nginx&amp;quot;} | json | __error__ = &amp;quot;&amp;quot; | distro != &amp;quot;server-status&amp;quot; | unwrap bytes&lt;br /&gt;
      [1h]&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can see more examples on the Mirror Requests dashboard on Grafana.&lt;br /&gt;
&lt;br /&gt;
==== Avoid high cardinality ====&lt;br /&gt;
For both Prometheus and Loki, you must [https://prometheus.io/docs/practices/naming/#labels avoid high cardinality] labels at all costs. By high cardinality, I mean labels which can take on a very large number of values; for example, using a label to store IP addresses would be a very bad idea. This is because Prometheus and Loki use labels to store metrics/logs efficiently with compression; when two metrics have two different sets of labels, they cannot be stored together, which increases the storage space usage.&lt;br /&gt;
&lt;br /&gt;
With Loki, you can extract labels from your logs inside your query dynamically. One way to do this is with the &amp;lt;code&amp;gt;json&amp;lt;/code&amp;gt; operator; there are other ways to do this as well (see the LogQL docs). This basically means that we get infinite cardinality from our logs, the tradeoff being that queries may take longer to execute.&lt;br /&gt;
&lt;br /&gt;
Also, be very careful about what you send to Loki from Logstash - [https://grafana.com/docs/loki/latest/clients/logstash/#usage-and-configuration every field in a Logstash message becomes a Loki label]. Usage of the &amp;lt;code&amp;gt;prune&amp;lt;/code&amp;gt; command in Logstash is highly recommended.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=File:Image.png&amp;diff=5130</id>
		<title>File:Image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=File:Image.png&amp;diff=5130"/>
		<updated>2023-10-19T14:25:52Z</updated>

		<summary type="html">&lt;p&gt;R389li: R389li moved page File:Image.png to File:DONOTNAMEIMAGESImage.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[File:DONOTNAMEIMAGESImage.png]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=File:DONOTNAMEIMAGESImage.png&amp;diff=5129</id>
		<title>File:DONOTNAMEIMAGESImage.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=File:DONOTNAMEIMAGESImage.png&amp;diff=5129"/>
		<updated>2023-10-19T14:25:52Z</updated>

		<summary type="html">&lt;p&gt;R389li: R389li moved page File:Image.png to File:DONOTNAMEIMAGESImage.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;September pop runs&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_(Extra)_Ban_Someone&amp;diff=5108</id>
		<title>How to (Extra) Ban Someone</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_(Extra)_Ban_Someone&amp;diff=5108"/>
		<updated>2023-10-10T19:23:32Z</updated>

		<summary type="html">&lt;p&gt;R389li: Be less destructive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a (hopefully comprehensive) &#039;&#039;&#039;guide on ensuring their existing account (based on their WatIAM) is put out of action for good, and immediately&#039;&#039;&#039;. This guide is mainly intended for &#039;&#039;Syscom&#039;&#039; as it requires root or admin access to many CSC services.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Remove Membership ===&lt;br /&gt;
Through CEO&#039;s TUI (&amp;lt;code&amp;gt;ceo&amp;lt;/code&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
* Reset their password&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Screw Up Their Account ===&lt;br /&gt;
&lt;br /&gt;
* Change their Login Shell (through LDAP - [[Ceo#raymo&#039;s guide on how to fix things after screwing up|guide here]]) to something like &amp;lt;code&amp;gt;/sbin/nologin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/bin/false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: CEO will not allow this change, so LDAP is the best (and likely only way)&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Deauth Them Everywhere ===&lt;br /&gt;
&lt;br /&gt;
* Suspend Kerberos: https://wiki.csclub.uwaterloo.ca/Kerberos#Suspending_an_Account&lt;br /&gt;
* Remove their SSH keys:&lt;br /&gt;
** Run &amp;lt;code&amp;gt;sudo -u &amp;lt;user_to_ban&amp;gt; mv ~&amp;lt;user_to_ban&amp;gt;/.ssh/{authorized_keys,banned_keys}&amp;lt;/code&amp;gt; from a CSC machine.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Remove all Their Resources ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;u&amp;gt;Remove their CSC Cloud VMs&amp;lt;/u&amp;gt;&#039;&#039;&#039;: https://wiki.csclub.uwaterloo.ca/CloudStack#Administration&lt;br /&gt;
* (optional) Kill all processes they are running in General Use&lt;br /&gt;
* (optional) Delete their home directory - &#039;&#039;&#039;ONLY if necessary&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Acronyms&amp;diff=5038</id>
		<title>Acronyms</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Acronyms&amp;diff=5038"/>
		<updated>2023-07-25T01:07:56Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add acronyms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Over the F22, W23, S23 terms, many members within the office speculated what CSC stands for. Here are their postulations:&lt;br /&gt;
&lt;br /&gt;
* Caffeinated Students Club&lt;br /&gt;
* Calculator Slaves Club&lt;br /&gt;
* Calcium-deficient Students Club&lt;br /&gt;
* Camera-Shy Club&lt;br /&gt;
* Can&#039;t Sleep Club&lt;br /&gt;
* Can&#039;t Stop CSC&lt;br /&gt;
* Can&#039;t Succeed Club&lt;br /&gt;
* Card Skills Club&lt;br /&gt;
* Chair Sleeping Club&lt;br /&gt;
* Charge Smartphone Club&lt;br /&gt;
* Chess Studies Club&lt;br /&gt;
* Chopin Studies Club&lt;br /&gt;
* Clown Syndicate Club&lt;br /&gt;
* Coffee Supply Club&lt;br /&gt;
* Comic Sans Club&lt;br /&gt;
* Committee Sacking Club&lt;br /&gt;
* Communal Shoe Club&lt;br /&gt;
* Communal Shower Club&lt;br /&gt;
* Computer Stop-working Club&lt;br /&gt;
* Confidential Secrets Club&lt;br /&gt;
* Connection Sucks Club&lt;br /&gt;
* Constant Sacrificing Club&lt;br /&gt;
* Cool Shit Club&lt;br /&gt;
* Cool Students Club&lt;br /&gt;
* Copyright Safeguarding Club&lt;br /&gt;
* Co-op Suckers Club&lt;br /&gt;
* Crazy Superglue Club&lt;br /&gt;
* Creature Saving Club&lt;br /&gt;
* Crying Students Club&lt;br /&gt;
* CSC Scribbling Club&lt;br /&gt;
* CSC Systems Committee&lt;br /&gt;
* Cutting Sticker Club&lt;br /&gt;
* Culinary Students Club&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Saturday_11_February_2023&amp;diff=4987</id>
		<title>Meeting:Saturday 11 February 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Saturday_11_February_2023&amp;diff=4987"/>
		<updated>2023-02-16T05:53:25Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* Status Update */ correct speaker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status Update ==&lt;br /&gt;
&lt;br /&gt;
* Leo talked to Dave&lt;br /&gt;
** Got GPU server quote for ~40K&lt;br /&gt;
** RAM for mirror is being worked on&lt;br /&gt;
** Potential project to upgrade the CSCF NTP Raspberry Pis to use a crystal as backup&lt;br /&gt;
* Jonathan: Vaultwardern does not support LDAP. Will use local user database instead.&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
&lt;br /&gt;
* Investigate how to do a CIF proposal&lt;br /&gt;
* Wait for MEF to accept proposals for this term&lt;br /&gt;
* Leo to answer emails&lt;br /&gt;
* Finish Mac Mini Debian setup&lt;br /&gt;
* Investigate atomic clocks for better time keeping&lt;br /&gt;
* Make office more welcoming&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Main_Page&amp;diff=4978</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Main_Page&amp;diff=4978"/>
		<updated>2023-02-02T07:50:06Z</updated>

		<summary type="html">&lt;p&gt;R389li: Reverted edits by E5kwon (talk) to last revision by Y266shen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Wiki of the [[Computer Science Club]]. Feel free to start adding pages and information.&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages]]&lt;br /&gt;
&lt;br /&gt;
== New Member Highlights ==&lt;br /&gt;
To access our Linux machines, see [[How to SSH]] and select one of the general-use machines from [[Machine List#General-Use Servers]].&lt;br /&gt;
&lt;br /&gt;
To host a website, see [[Web Hosting]]. If you are trying to host websites for clubs, see [[Club Hosting]].&lt;br /&gt;
&lt;br /&gt;
To use our VPS services (similar to Linode and Amazon EC2), see [https://docs.cloud.csclub.uwaterloo.ca/ CSC Cloud Documentation]. Note that you&#039;ll need to activate your account on one of CSC&#039;s machines before using the management panel.&lt;br /&gt;
&lt;br /&gt;
To view instruction on playing music at the office, see [[Music]].&lt;br /&gt;
&lt;br /&gt;
To use our Nextcloud instance (similar to Google Drive and Dropbox), go to [https://files.csclub.uwaterloo.ca CSC Files].&lt;br /&gt;
&lt;br /&gt;
== Guides ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;-webkit-column-count:3; -moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[New Member Guide]]&lt;br /&gt;
* [[Budget Guide]]&lt;br /&gt;
* [[Club Hosting]]&lt;br /&gt;
* [[Web Hosting]]&lt;br /&gt;
* [[Git Hosting]]&lt;br /&gt;
* [[Exec Manual]]&lt;br /&gt;
* [[Sysadmin Guide]]&lt;br /&gt;
* [[Imapd Guide]]&lt;br /&gt;
* [[MEF Guide]]&lt;br /&gt;
* [[Office Policies]]&lt;br /&gt;
* [[Office Staff]]&lt;br /&gt;
* [[How to IRC]]&lt;br /&gt;
* [[How to SSH]]&lt;br /&gt;
* [[Talks Guide]]&lt;br /&gt;
* [[SCS Guide]]&lt;br /&gt;
* [[Kerberos | Password Reset ]]&lt;br /&gt;
* [[Disk Drive RMA Process]]&lt;br /&gt;
* [[ IPMI101 ]]&lt;br /&gt;
* [[Keys and Fobs]]&lt;br /&gt;
* [[BigBlueButton]]&lt;br /&gt;
* [https://docs.cloud.csclub.uwaterloo.ca/ CSC Cloud Documentation]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== News and Events ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;-webkit-column-count:3; -moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Meetings]]&lt;br /&gt;
* [[Talks]]&lt;br /&gt;
* [[Projects]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Machine/System Documentation ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;-webkit-column-count:3; -moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ADFS]]&lt;br /&gt;
* [[Application List]]&lt;br /&gt;
* [[Authentication]]&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[ceo]]&lt;br /&gt;
* [[Ceph]]&lt;br /&gt;
* [[Cloud Networking]]&lt;br /&gt;
* [[CloudStack]]&lt;br /&gt;
* [[CloudStack Templates]]&lt;br /&gt;
* [[DNS]]&lt;br /&gt;
* [[Debian Repository]]&lt;br /&gt;
* [[Firewall]]&lt;br /&gt;
* [[Hardware]]&lt;br /&gt;
* [[Kerberos]]&lt;br /&gt;
* [[Keycloak]]&lt;br /&gt;
* [[Kubernetes]]&lt;br /&gt;
* [[KVM]]&lt;br /&gt;
* [[LDAP]]&lt;br /&gt;
* [[Machine List]]&lt;br /&gt;
* [[Mail]]&lt;br /&gt;
* [[Mailing Lists]]&lt;br /&gt;
* [[Mirror]]&lt;br /&gt;
* [[Music]]&lt;br /&gt;
* [[MySQL]]&lt;br /&gt;
* [[New NetApp]]&lt;br /&gt;
* [[Network]]&lt;br /&gt;
* [[New CSC Machine]]&lt;br /&gt;
* [[Nextcloud]]&lt;br /&gt;
* [[NFS/Kerberos]]&lt;br /&gt;
* [[Observability]]&lt;br /&gt;
* [[OID Assignment]]&lt;br /&gt;
* [[Podman]]&lt;br /&gt;
* [[Printing]]&lt;br /&gt;
* [[Pulseaudio]]&lt;br /&gt;
* [[Scratch]]&lt;br /&gt;
* [[SNMP]]&lt;br /&gt;
* [[SSL]]&lt;br /&gt;
* [[Switches]]&lt;br /&gt;
* [[Syscom Todo]]&lt;br /&gt;
* [[Systemd-nspawn]]&lt;br /&gt;
* [[Two-Factor Authentication]]&lt;br /&gt;
* [[UID/GID Assignment]]&lt;br /&gt;
* [[Webmail]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;-webkit-column-count:3; -moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Budget]]&lt;br /&gt;
* [[Executive]]&lt;br /&gt;
* [[Past Executive]]&lt;br /&gt;
* [[History]]&lt;br /&gt;
* [[Library]]&lt;br /&gt;
* [[MEF Proposals]]&lt;br /&gt;
* [[Proposed Constitution Changes]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Historical or Obsolete Pages ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;-webkit-column-count:3; -moz-column-count:3; column-count:3;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Robot Arm]]&lt;br /&gt;
* [[Webcams]]&lt;br /&gt;
* [[Website]]&lt;br /&gt;
* [[Digital Cutter]]&lt;br /&gt;
* [[Electronics]]&lt;br /&gt;
* [[NetApp]]&lt;br /&gt;
* [[Frosh]]&lt;br /&gt;
* [[Virtualization (LXC Containers)]]&lt;br /&gt;
* [[Serial Connections]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=User:E5kwon/CnD_Ratings&amp;diff=4976</id>
		<title>User:E5kwon/CnD Ratings</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=User:E5kwon/CnD_Ratings&amp;diff=4976"/>
		<updated>2023-02-02T07:48:06Z</updated>

		<summary type="html">&lt;p&gt;R389li: R389li moved page CnD Ratings to E5kwon/CnD Ratings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kwon&#039;s CnD Ratings ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Rating&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Chicken and Fried Rice&lt;br /&gt;
|6.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Beef Chili&lt;br /&gt;
|7.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chocolate Croissant&lt;br /&gt;
|4.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chicken Stew&lt;br /&gt;
|7.5/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Beef Burrito&lt;br /&gt;
|4.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Breakfast Burrito&lt;br /&gt;
|3.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chicken Marinara Linguine&lt;br /&gt;
|3.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tikka Masala&lt;br /&gt;
|6.5/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Butter Chicken&lt;br /&gt;
|6.5/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jamaican Patty&lt;br /&gt;
|4.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Garlic Bread&lt;br /&gt;
|7.5/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Samosa&lt;br /&gt;
|7.5/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Western Sandwich&lt;br /&gt;
|5.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mac and Cheese&lt;br /&gt;
|6.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Chicken Briyani&lt;br /&gt;
|7.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Apple Fritter&lt;br /&gt;
|7.0/10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pasta Fagioli&lt;br /&gt;
|2.0/10&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4935</id>
		<title>Machine List</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4935"/>
		<updated>2022-12-18T21:50:31Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add citric-acid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most of our machines are in the E7, F7, G7 and H7 racks (as of Jan. 2022) in the MC 3015 server room. There is an additional rack in the DC 3558 machine room on the third floor. Our office terminals are in the CSC office, in MC 3036/3037.&lt;br /&gt;
&lt;br /&gt;
= Web Server =&lt;br /&gt;
You are highly encouraged to avoid running anything that&#039;s not directly related to your CSC webspace on our web server. We have plenty of general-use machines; please use those instead. You can even edit web pages from any other machine--usually the only reason you&#039;d *need* to be on caffeine is for database access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;caffeine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Caffeine is the Computer Science Club&#039;s web server. It serves websites, databases for websites, and a large amount of other services.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently a virtual machine hosted on phosphoric-acid&lt;br /&gt;
** 12 vCPUs&lt;br /&gt;
** 32GB of RAM&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Club and member web sites with [[Apache]]&lt;br /&gt;
* [[MySQL]] databases&lt;br /&gt;
* [[PostgreSQL]] databases&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
* mail was migrated to [[#mail|mail]]&lt;br /&gt;
&lt;br /&gt;
= General-Use Servers =&lt;br /&gt;
&lt;br /&gt;
These machines can be used for (nearly) anything you like (though be polite and remember that these are shared machines). Recall that when you signed the Machine Usage Agreement, you promised not to use these machines to generate profit (so no cryptocurrency mining).&lt;br /&gt;
&lt;br /&gt;
For computationally-intensive jobs (CPU/memory bound) we recommend running on high-fructose-corn-syrup, carbonated-water, sorbitol, mannitol, or corn-syrup, listed in roughly decreasing order of available resources. For low-intensity interactive jobs, such as IRC clients, we recommend running on neotame. If you have a long-running computationally intensive job, it&#039;s good to nice[https://en.wikipedia.org/wiki/Nice_(Unix)] your process, and possibly let syscom know too.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
PowerEdge 2950&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 × Intel Xeon E5405 (2.00 GHz, 4 cores each)&lt;br /&gt;
* 32 GB RAM&lt;br /&gt;
* eth0 (&amp;quot;Gb0&amp;quot;) mac addr 00:24:e8:52:41:27&lt;br /&gt;
* eth1 (&amp;quot;Gb1&amp;quot;) mac addr 00:24:e8:52:41:29&lt;br /&gt;
* IPMI mac addr 00:24:e8:52:41:2b&lt;br /&gt;
* 3 &amp;amp;times; Western-Digital 160GB SATA hard drive (445 GB software RAID0 array)&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* Use eth0/Gb0 for the mathstudentorgsnet connection&lt;br /&gt;
* has ipmi on corn-syrup-ipmi.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Hosts 1 TB &amp;lt;tt&amp;gt;[[scratch|/scratch]]&amp;lt;/tt&amp;gt; and exports via NFS (sec=krb5)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;high-fructose-corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
High-fructose-corn-syrup (or hfcs) is a large SuperMicro server. It&#039;s been in CSC service since April 2012.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6272 (2.4 GHz, 16 cores each)&lt;br /&gt;
* 192 GB RAM&lt;br /&gt;
* Supermicro H8QGi+-F Motherboard Quad 1944-pin Socket [http://csclub.uwaterloo.ca/misc/manuals/motherboard-H8QGI+-F.pdf (Manual)]&lt;br /&gt;
* 500 GB Seagate Barracuda&lt;br /&gt;
* Supermicro Case Rackmount CSE-748TQ-R1400B 4U [http://csclub.uwaterloo.ca/misc/manuals/SC748.pdf (Manual)]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;carbonated-water&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
carbonated-water is a Dell R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6176 processors (2.3 GHz, 12 cores each)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;neotame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
neotame is a SuperMicro server funded by MEF. It is the successor to taurine.&lt;br /&gt;
&lt;br /&gt;
We discourage running computationally-intensive jobs on neotame as many users run interactive applications such as IRC clients on it and any significant service degradation will be more likely to affect other users (who will probably notice right away).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* SSH server also listens on ports 21, 22, 53, 80, 81, 443, 8000, 8080 for your convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sorbitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sorbitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mannitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mannitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
= Office Terminals =&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to SSH into these machines, but we discourage you from trying to use these machines when you&#039;re not sitting in front of them. They are bounced at least every time our login manager, lightdm, throws a tantrum (which is several times a day). These are for use inside our physical office.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;bit-shifter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
bit-shifter is an office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel(R) Core(TM)2 Quad CPU    Q8300&lt;br /&gt;
* 4GB RAM&lt;br /&gt;
* Nvidia GeForce GT 440&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Jacob Parker&#039;s Firewire Card&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;gwem&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
gwem is an office terminal that was created because AMD donated a graphics card. It entered CSC service in February 2012.&lt;br /&gt;
&lt;br /&gt;
=== Specs ===&lt;br /&gt;
&lt;br /&gt;
* AMD FX-8150 3.6GHz 8-Core CPU&lt;br /&gt;
* 16 GB RAM&lt;br /&gt;
* AMD Radeon 6870 HD 1GB GPU&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ga-990fxa-ud7_e.pdf Gigabyte GA-990FXA-UD7] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;maltodextrin&#039;&#039; ==&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
Maltodextrin is an office terminal. It was upgraded in Spring 2014 after an unidentified failure.&lt;br /&gt;
Not operational (no video output) as of July 2022.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i3-4130 @ 3.40 GHz&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/E8425_H81I_PLUS.pdf ASUS H81-PLUS] Motherboard&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;natural-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Natural-flavours is an office terminal; it used to be our mirror.&lt;br /&gt;
&lt;br /&gt;
In Fall 2016, it received a major upgrade thanks the MathSoc&#039;s Capital Improvement Fund.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i7-6700k&lt;br /&gt;
* 2x8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Cup Holder (DVD drive has power, but not connected to mother board)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;strombola&#039;&#039;==&lt;br /&gt;
It is named after Gordon Strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium G4600 2 cores @ 3.6Ghz&lt;br /&gt;
* 8 GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Strombola used to have integrated 5.1 channel sound before we got new speakers and moved audio stuff to nullsleep.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;nullsleep&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
nullsleep is an [http://csclub.uwaterloo.ca/misc/manuals/ASRock_ION_330.pdf ASRock ION 330] machine given to us by CSCF and funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel® Dual Core Atom™ 330&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* NVIDIA® ION™ graphics&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* DVD Burner&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Nullsleep has the office speakers (a pair of nice studio monitors) currently connected to it.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
Nullsleep runs MPD for playing music. Control of MPD is available only to users in the &amp;quot;audio&amp;quot; group.&lt;br /&gt;
Music is located in /music on the office terminals&lt;br /&gt;
&lt;br /&gt;
= Progcom Only =&lt;br /&gt;
The Programme Committee has access to a VM on corn-syrup called &#039;progcom&#039;. They have sudo rights in this VM so they may install and run their own software inside it. This VM should only be accessible by members of progcom or syscom.&lt;br /&gt;
&lt;br /&gt;
= Syscom Only =&lt;br /&gt;
&lt;br /&gt;
The following systems may only be accessible to members of the [[Systems Committee]] for a variety of reasons; the most common of which being that some of these machines host [[Kerberos]] authentication services for the CSC.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;xylitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
xylitol is a Dell PowerEdge R815 donated by CSCF. It is primarily a container host for services previously hosted on aspartame and dextrose, including munin, rt, mathnews, auth1, and dns1. It was provisioned with the intent to replace both of those hosts.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Dual AMD Opteron 6176 (2.3 GHz, 48 cores total)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 500GB volume group on RAID1 SSD (xylitol-mirrored)&lt;br /&gt;
* 500ish-GB volume group on RAID10 HDD (xylitol-raidten)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth1&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] primary&lt;br /&gt;
* [[Kerberos]] primary&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chat&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* The Lounge web IRC client (https://chat.csclub.uwaterloo.ca)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phosphoric-acid&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phosphoric-acid is a Dell PowerEdge R815 donated by CSCF and is a clone of xylitol. It may be used to provide redundant cloud services in the future.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[#caffeine|caffeine]]&lt;br /&gt;
* [[#coffee|coffee]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;coffee&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine running on phosphoric-acid.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Database#MySQL|MySQL]]&lt;br /&gt;
* [[Database#Postgres|Postgres]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;cobalamin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Dell PowerEdge 2950 donated to us by FEDS. Located in the Science machine room on the first floor of Physics. Will act as a backup server for many things.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 1 × Intel Xeon E5420 (2.50 GHz, 4 cores)&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Broadcom NetworkXtreme II&lt;br /&gt;
* 2x73GB Hard Drives, hardware RAID1&lt;br /&gt;
** Soon to be 2x1TB in MegaRAID1&lt;br /&gt;
* http://www.dell.com/support/home/ca/en/cabsdt1/product-support/servicetag/51TYRG1/configuration&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Containers: [[#auth2|auth2]]&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* The network card requires non-free drivers. Be sure to use an installation disc with non-free.&lt;br /&gt;
&lt;br /&gt;
* We have separate IP ranges for cobalamin and its containers because the machine is located in a different building. They are:&lt;br /&gt;
&lt;br /&gt;
** VLAN ID 506 (csc-data1): 129.97.18.16/29; gateway 129.97.18.17; mask 255.255.255.240&lt;br /&gt;
** VLAN ID 504 (csc-ipmi): 172.19.5.24/29; gateway 172.19.5.25; mask 255.255.255.248&lt;br /&gt;
&lt;br /&gt;
* For some reason, the keyboard is shit. Try to avoid having to use it. It&#039;s doable, but painful. IPMI works now, and then we don&#039;t need to bug about physical access so it&#039;s better anyway.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth2&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#cobalamin|cobalamin]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] secondary&lt;br /&gt;
* [[Kerberos]] secondary&lt;br /&gt;
&lt;br /&gt;
MAC Address: c2:c0:00:00:00:a2&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mail&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mail is the CSC&#039;s mail server. It hosts mail delivery, imap(s), smtp(s), and mailman. It is also syscom-only. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#biloba|biloba]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mail]] services&lt;br /&gt;
* mailman (web interface at [http://mailman.csclub.uwaterloo.ca/])&lt;br /&gt;
* [[Webmail]]&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-benzoate is our previous mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
It is currently sitting in the office pending repurposing. Will likely become a machine for backups in DC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon Quad Core E5405 @ 2.00 GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* vg0: 228 GB block device behind DELL PERC 6/i (contains root partition)&lt;br /&gt;
&lt;br /&gt;
Space disks are currently in the office underneath maltodextrin.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate is our mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 36 drive Supermicro chassis (SSG-6048R-E1CR36L) &lt;br /&gt;
* 1 x Intel Xeon E5-2630 (8 cores, 2.40 GHz)&lt;br /&gt;
* 64 GB (4 x 16GB) of DDR4 (2133Mhz)  ECC RAM&lt;br /&gt;
* 2 x 1 TB Samsung Evo 850 SSD drives&lt;br /&gt;
* 17 x 4 TB Western Digital Gold drives (separate funding from MEF)&lt;br /&gt;
* 10 Gbps SFP+ card (loaned from CSCF)&lt;br /&gt;
* 50 Gbps Mellanox QSFP card (from ginkgo; currently unconnected)&lt;br /&gt;
&lt;br /&gt;
==== Network Connections ====&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate has two connections to our network:&lt;br /&gt;
&lt;br /&gt;
* 1 Gbps to our switch (used for management)&lt;br /&gt;
* 2 x 10 Gbps (LACP bond) to mc-rt-3015-mso-a (for mirror)&lt;br /&gt;
&lt;br /&gt;
Mirror&#039;s bandwidth is limited to 1 Gbps on each of the 4 campus internet links. Mirror&#039;s bandwidth is not limited on campus.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mirror]]&lt;br /&gt;
* [[Talks]] mirror&lt;br /&gt;
* [[Debian_Repository|CSClub packages repository]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;munin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
munin is a syscom-only monitoring and accounting machine. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#xylitol|xylitol]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://munin.csclub.uwaterloo.ca munin] systems monitoring daemon&lt;br /&gt;
== &#039;&#039;yerba-mate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 Hz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* test-ipv6 (test-ipv6.csclub.uwaterloo.ca; a test-ipv6.com mirror)&lt;br /&gt;
* shibboleth (under development)&lt;br /&gt;
&lt;br /&gt;
Also used for experimenting new CSC services.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;citric-acid&#039;&#039; ==&lt;br /&gt;
A Dell PowerEdge provided by CSCF to replace [[Machine List#aspartame|aspartame]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Specs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Being configured for [https://pass.uwaterloo.ca pass.uwaterloo.ca], a university-wide password manager hosted by CSC as a demo service for all Nexus (ADFS) users&lt;br /&gt;
&lt;br /&gt;
= Cloud =&lt;br /&gt;
&lt;br /&gt;
These machines are used by [https://cloud.csclub.uwaterloo.ca cloud.csclub.uwaterloo.ca]. The machines themselves are restricted to Syscom only access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chamomile&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x 2.20GHz 12-core processors&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack primary controller services for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;riboflavin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R515 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 2.6 GHz 8-core processors&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
* 2x 500GB internal SSD&lt;br /&gt;
* 12x Seagate 4TB SSHD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack block and object storage for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;guayusa&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 GHz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2TB PCI-Express Flash SSD&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
Currently being used to set up NextCloud.&lt;br /&gt;
&lt;br /&gt;
Was used to experiment the following then-new CSC services:&lt;br /&gt;
&lt;br /&gt;
* logstash (testing of logstash)&lt;br /&gt;
* load-balancer-01&lt;br /&gt;
* cifs (for booting ginkgo from CD)&lt;br /&gt;
* caffeine-01 (testing of multi-node caffeine)&lt;br /&gt;
* block1.cloud&lt;br /&gt;
* object1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginkgo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by MEF for CSC web hosting. Locate in MC 3015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2697 v4 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 256GB RAM&lt;br /&gt;
* 2 x 1.2 TB SSD (400GB of each for RAID 1)&lt;br /&gt;
* 10GbE onboard, 25GbE SFP+ card (also included 50GbE SFP+ card which will probably go in mirror)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* controller1.cloud&lt;br /&gt;
* db1.cloud&lt;br /&gt;
* router1.cloud (NAT for cloud tenant network)&lt;br /&gt;
* network1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;biloba&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by SLEF for CSC web hosting. Located in DC 3558.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon Gold 6140 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 384GB RAM&lt;br /&gt;
* 12 3.5&amp;quot; Hot Swap Drive Bays&lt;br /&gt;
** 2 x 480 GB SSD&lt;br /&gt;
* 10GbE onboard, 10GbE SFP+ card (on loan from CSCF)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* caffeine&lt;br /&gt;
* mail&lt;br /&gt;
* mattermost&lt;br /&gt;
&lt;br /&gt;
= Storage =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs00&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs00 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs01&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs01 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&lt;br /&gt;
== ps3 ==&lt;br /&gt;
This is just a very wide PS3, the model that supported running Linux natively before it was removed. Firmware was updated to remove this feature, however it can still be done via. homebrew. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Specs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* It&#039;s a PS3.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2022-10-24&#039;&#039;&#039; - Thermal paste replaced + firmware updated to latest supported version, also modded.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;binaerpilot&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Tobi expansion board. It is currently attached to corn-syrup in the machine room and even more currently turned off until someone can figure out what is wrong with it.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;anamanaguchi&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Chestnut43 expansion board. It is currently in the hardware drawer in the CSC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;digital cutter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
See [[Digital Cutter|here]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mathnews&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[#xylitol|xylitol]] hosts a systemd-nspawn container which serves as the mathNEWS webserver. It is administered by mathNEWS, as a pilot for providing containers to select groups who have more specialized demands than the general-use infrastructure can meet.&lt;br /&gt;
&lt;br /&gt;
= Decommissioned =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;aspartame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
aspartame was a taurine clone donated by CSCF. It was once our primary file server, serving as the gateway interface to space on phlogiston. It also used to host the [[#auth1|auth1]] container, which has been temporarily moved to [[#dextrose|dextrose]]. Decomissioned in March 2021 after refusing to boot following a power outage.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;psilodump&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
psilodump is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling phlogiston, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
psilodump was plugged into aspartame. It&#039;s still installed but inaccessible.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phlogiston&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phlogiston is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling psilodump, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
phlogiston is turned off and should remain that way. It is misconfigured to have its drives overlap with those owned by psilodump, and if it is turned on, it will likely cause irreparable data loss.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 10GB RAM&lt;br /&gt;
&lt;br /&gt;
==== Notes from before decommissioning ====&lt;br /&gt;
&lt;br /&gt;
* The lxc files are still present and should not be started up, or else the two copies of auth1 will collide.&lt;br /&gt;
* It currently cannot route the 10.0.0.0/8 block to a misconfiguration on the NetApp. This should be fixed at some point.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;glomag&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Glomag hosted [[#caffeine|caffeine]]. Decommissioned April 6, 2018.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon X3450 @ 2.67 GHz&lt;br /&gt;
* 6 GB RAM&lt;br /&gt;
* vg0: 465 GB software RAID1 (contains root partition):&lt;br /&gt;
** 750 GB Seagate Barracuda SATA hard drive&lt;br /&gt;
** 500 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
* vg1: 596 GB software RAID1 (contains caffeine):&lt;br /&gt;
** 2 &amp;amp;times; 640 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Before its decommissioning, glomag hosted [[#caffeine|caffeine]], [[#mail|mail]], and [[#munin|munin]] as [[Virtualization#Linux_Container|Linux containers]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;Lisp machine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Symbolics XL1200 Lisp machine. Donated to a new home when we couldn&#039;t get it working.&lt;br /&gt;
&lt;br /&gt;
http://www.globalnerdy.com/2008/12/03/symbolics-xl1200-lisp-machine-free-to-a-good-home/ for some history on this hardware.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
Currently inoperable due to (at least) a missing console cable.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginseng&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ginseng used to be our fileserver, before aspartame and the netapp took over.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Pentium Dual Core E2180&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/s3000ah_tps_1_1.pdf Intel S3000AHV Motherboard]&lt;br /&gt;
* 4 &amp;amp;times; 640 GB Western-Digital Caviar Blue in [http://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_10_.28RAID_1.2B0.29 RAID 10] behind a [http://www.3ware.com/products/serial_ata2-9650.asp 3ware 9650SE RAID card].&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;calum&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Calum used to be our main server and was named after Calum T Dalek.  Purchased new by the club in 1994. &lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* SPARCserver 10 (headless SPARCstation 10)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;paza&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An iMac G3 that was used as a dumb terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 233Mhz PowerPC 740/750&lt;br /&gt;
* 96 MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;romana&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Romana was a BeBox that has been in the CSC&#039;s possession since long before BeOS became defunct.&lt;br /&gt;
&lt;br /&gt;
Confirmed on March 19th, 2016 to be fully functional. An SSHv1 compatible client was installed from http://www.abstrakt.ch/be/ and a compatible firewalled daemon was started on Sucrose (living in /root, prefix is /root/ssh-romana). The insecure daemon is to be used a bastion host to jump to hosts only supporting &amp;gt;=SSHv2. The mail daemon on the BeBox has also been configured to send mail through mail.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 PowerPC based processors&lt;br /&gt;
* Stylish Blinken processor-load lights&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-citrate was an SGI O2 machine.&lt;br /&gt;
&lt;br /&gt;
In order to net boot you need to set /proc/sys/net/ipv4/ip_no_pmtu_disc to 1. When the O2 boots, hit F5 at the boot menu and type bootp():.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* SGI O2 MIPS processor&lt;br /&gt;
* 423 MB (?) RAM&lt;br /&gt;
* 2 &amp;amp;times; 2 GB hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;acesulfame-potassium&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An old office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium 4 2.67GHz&lt;br /&gt;
* 1GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ABIT_VT7.pdf ABIT VT7] Motherboard&lt;br /&gt;
* ATI Radeon 7000&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;skynet&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
skynet was a Sun E6500 machine donated by Sanjay Singh. It was never fully set up.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 15 full CPU/memory boards&lt;br /&gt;
** 2x UltraSPARC II 464MHz / 8MB Cache Processors&lt;br /&gt;
** ??? RAM?&lt;br /&gt;
* 1 I/O board (type=???)&lt;br /&gt;
** ???x disks?&lt;br /&gt;
* 1 CD-ROM drive&lt;br /&gt;
&lt;br /&gt;
* [http://mirror.csclub.uwaterloo.ca/csclub/sun_e6500/ent6k.srvr/ e6500 documentation (hosted on mirror, currently dead link)]&lt;br /&gt;
* [http://docs.oracle.com/cd/E19095-01/ent6k.srvr/ e6500 documentation (backup link)]&lt;br /&gt;
* [http://www.e6500.com/ e6500]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;freebsd&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
FreeBSD was a virtual machine with FreeBSD installed.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Newer software&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;rainbowdragoneyes&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Rainbowdragoneyes was our Lemote Fuloong MIPS machine. This machine is aliased to rde.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 800MHz MIPS Loongson 2f CPU&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;denardo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Due to some instability, general uselessness, and the acquisition of a more powerful SPARC machine from MFCF, denardo was decommissioned in February 2015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Sun Fire V210&lt;br /&gt;
* TI UltraSparc IIIi (Jalapeño)&lt;br /&gt;
* 2 GB RAM&lt;br /&gt;
* 160 GB RAID array&lt;br /&gt;
* ALOM on denardo-alom.csclub can be used to power machine on/off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;artificial-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Artificial-flavours was our secondary (backup services) server. It used to be an office terminal. It was decommissioned in February 2015 and transferred to the ownership of Women in Computer Science (WiCS).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Celeron 3.2GHz&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/Biostar_P4M80-M4.pdf Biostar P4M80-M4] Motherboard&lt;br /&gt;
* Western-Digital 80 GB ATA hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Potassium-citrate is a dual-processor Alpha machine. It is on extended loan from pbarfuss.&lt;br /&gt;
&lt;br /&gt;
It is temporarily decommissioned pending the reinstallation of a supported operating system (such as OpenBSD).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Alphaserver CS20 (2 833MHz EV68al CPUs)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
* 36 GB Seagate SCSI hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-nitrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This was a Sun Fire E2900 from a decommissioned MFCF compute cluster. It had a SPARC architecture and ran OpenBSD, unlike many of our other systems which are x86/x86-64 and Linux/Debian. After multiple unsuccessful attempts to boot a modern Linux kernel and possible hardware instability, it was determined to be non-cost-effective and non-effort-effective to put more work into running this machine. The system was reclaimed by MFCF where someone from CS had better luck running a suitable operating system (probably Solaris).&lt;br /&gt;
&lt;br /&gt;
The name is from saltpetre, because sparks.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 24 CPUs&lt;br /&gt;
* 90GB main memory&lt;br /&gt;
* 400GB scratch disk local storage in /scratch-potassium-nitrate&lt;br /&gt;
&lt;br /&gt;
There is a [[Sun 2900 Strategy Guide|setup guide]] available for this machine.&lt;br /&gt;
&lt;br /&gt;
See also [[Sun 2900]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;taurine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: On August 21, 2019, just before 2:30PM EDT, we were informed that taurine caught fire&#039;&#039;&#039;. As a result, taurine has been decommissioned as of Fall 2019.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 136 GB LVM volume group&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Virtual machines&lt;br /&gt;
* BitlBee IRC instant messaging gateway (localhost only)&lt;br /&gt;
* [[ident]] server to maintain high connection cap to freenode&lt;br /&gt;
* Runs ssh on ports 21,22,53,80,81,443,8000,8080 for user&#039;s convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;dextrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
dextrose was a [[#taurine|taurine]] clone donated by CSCF and was decommissioned in Fall 2019 after being replaced with a more powerful server.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sucrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sucrose was a [[#taurine|taurine]] clone donated by CSCF. It was decommissioned in Fall 2019 following multiple hardware failures.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;goto80&#039;&#039; ==&lt;br /&gt;
&#039;&#039;&#039;Note (2022-10-25): This seems to have gone missing or otherwise left our hands.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
This was small ARM machine we picked up in order to have similar hardware to the Real Time Operating Systems (CS 452) course. It has a [[TS-7800_JTAG|JTAG]] interface. Located was the office on the top shelf above strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 500 MHz Feroceon (ARM926ej-s compatible) processor&lt;br /&gt;
* ARMv5TEJ architecture&lt;br /&gt;
&lt;br /&gt;
Use -march=armv5te -mtune=arm926ej-s options to GCC.&lt;br /&gt;
&lt;br /&gt;
For information on the TS-7800&#039;s hardware see here:&lt;br /&gt;
http://www.embeddedarm.com/products/board-detail.php?product=ts-7800&lt;br /&gt;
&lt;br /&gt;
= UPS =&lt;br /&gt;
&lt;br /&gt;
All of the machines in the MC 3015 machine room are connected to one of our UPSs.&lt;br /&gt;
&lt;br /&gt;
All of our UPSs can be monitored via CSCF:&lt;br /&gt;
&lt;br /&gt;
* MC3015-UPS-B2&lt;br /&gt;
* mc-3015-e7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced July 2014) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-e7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-f7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced Feb 2017) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-f7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2010) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2004) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
&lt;br /&gt;
We will receive email alerts for any issues with the UPS. Their status can be monitored via [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
TODO: Fix labels &amp;amp; verify info is correct &amp;amp; figure out why we can&#039;t talk to cacti.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Firewall&amp;diff=4925</id>
		<title>Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Firewall&amp;diff=4925"/>
		<updated>2022-11-13T04:41:48Z</updated>

		<summary type="html">&lt;p&gt;R389li: Use the syscom account for Jira access&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Our networks are behind the University&#039;s Campus firewall. This means that traffic to us is automatically dropped at the edge of campus unless we have exceptions added for it.&lt;br /&gt;
&lt;br /&gt;
= Current Exceptions =&lt;br /&gt;
&lt;br /&gt;
== Office Terminals ==&lt;br /&gt;
&lt;br /&gt;
No exceptions in the campus firewall.&lt;br /&gt;
&lt;br /&gt;
== General Use ==&lt;br /&gt;
&lt;br /&gt;
* Port 22 (SSH), plus additional SSH ports on taurine (21, 53, 80, 81, 443, 8000, 8080)&lt;br /&gt;
* Ports 60000–61000 (Mosh)&lt;br /&gt;
* Ports 28000-28500 (TCP/UDP general use)&lt;br /&gt;
&lt;br /&gt;
== Webserver ==&lt;br /&gt;
&lt;br /&gt;
* caffeine has ports 22 (SSH), 80 (HTTP), 443 (HTTPS), 11068 (HTTP for rridge) and UDP 60000–61000 (Mosh)&lt;br /&gt;
* wiki is now a CNAME for caffeine&lt;br /&gt;
* git has ports 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
== Mail ==&lt;br /&gt;
&lt;br /&gt;
* mail has ports 25 (SMTP), 80 (HTTP), 143 (IMAP), 443 (HTTPS), 587 (MAIL SUBMISSION), 993 (IMAPS)&lt;br /&gt;
* mailman has ports 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
== Mirror ==&lt;br /&gt;
&lt;br /&gt;
* mirror has ports 21 (FTP), 22 (SSH), 80 (HTTP), 443 (HTTPS), 873 (RSYNC)&lt;br /&gt;
&lt;br /&gt;
== IPv6 Test ==&lt;br /&gt;
&lt;br /&gt;
* ds.test-ipv6, mtu1280.test-ipv6 have ports 80 (HTTP), 443 (HTTPS)&lt;br /&gt;
* v6ns1.test-ipv6 has port 53 (DNS)&lt;br /&gt;
&lt;br /&gt;
== Cloud ==&lt;br /&gt;
&lt;br /&gt;
* load-balancer: 22 (SSH), 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
* load-balancer.cloud: 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
* object.cloud.csclub: 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
== BigBlueButton ==&lt;br /&gt;
&lt;br /&gt;
* bbb has TCP ports 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
* bbb has UDP ports 16384 - 32768 (for WebRTC)&lt;br /&gt;
&lt;br /&gt;
== drone.io (ci) ==&lt;br /&gt;
&lt;br /&gt;
* ci has TCP ports 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
== progcom ==&lt;br /&gt;
* progcom has TCP ports 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
== Other Web Services ==&lt;br /&gt;
&lt;br /&gt;
rt, munin, prometheus&lt;br /&gt;
&lt;br /&gt;
* 80 (HTTP) and 443 (HTTPS)&lt;br /&gt;
&lt;br /&gt;
= Adding Exceptions =&lt;br /&gt;
&lt;br /&gt;
Create a ticket on the [https://uwaterloo.atlassian.net/servicedesk/customer/portal/2/group/413/create/805 UWaterloo Help Portal]. Use the syscom account unless you already have an account and IST knows it.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4923</id>
		<title>Office Policies</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4923"/>
		<updated>2022-11-04T03:18:28Z</updated>

		<summary type="html">&lt;p&gt;R389li: Protected &amp;quot;Office Policies&amp;quot;: Rules page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following are the day-to-day policies for running the CSC Office. They are set down by the Office Manager or, should there not be a current Office Manager, by the Secretary.&lt;br /&gt;
&lt;br /&gt;
* There must be an office staff member present in the office at all times when it is open.&lt;br /&gt;
* If issues arise, office staff are expected to be the adults and deal with them professionally, rather than making problems worse.&lt;br /&gt;
* Any significant incidents, including harassment, must be reported to the Office Manager, even if they get resolved.&lt;br /&gt;
* If there are people in the office, the doors should be open.&lt;br /&gt;
* Don&#039;t be excessively rude or loud in the office.&lt;br /&gt;
* Don&#039;t violate the privacy of others: e.g. if someone leaves their terminal unlocked, don&#039;t do anything that might get them angry at you.&lt;br /&gt;
* Desks and wheely chairs are primarily for use with office terminals: i.e. if you are sitting in/at one and are not using the terminal, anyone may kick you out to use the terminal.&lt;br /&gt;
* Chairs are for people over bags. If you leave a bag on a chair and someone comes along needing a seat, they take priority over your bag.&lt;br /&gt;
* If you leave your terminal and don&#039;t announce that you&#039;re coming back, or are gone for more than 5 minutes, someone else can take it.&lt;br /&gt;
* No sleeping in the office.&lt;br /&gt;
* No sex in the office.&lt;br /&gt;
* No distracting games in the office. Academics and club-related activities take priority.&lt;br /&gt;
* Nothing illegal in the office.&lt;br /&gt;
* The office is not your locker: if you choose to leave things here, you do so at your own risk; CSC/office staff is not responsible for any theft/loss/damage that may occur.&lt;br /&gt;
* The office is not your pantry: do not leave your food here.&lt;br /&gt;
* Clean up your garbage.&lt;br /&gt;
* The stapler may be used only inside the office, or for club business.&lt;br /&gt;
* The office phone is primarily for club business. You may use it for emergencies and brief calls, but do not use it excessively or to conduct business.&lt;br /&gt;
* Don&#039;t play music when you aren&#039;t in the office (but it&#039;s OK to leave with music queued up).&lt;br /&gt;
* Share the music queue.&lt;br /&gt;
* Keep music at a reasonable volume.&lt;br /&gt;
&lt;br /&gt;
[[Category:Policy]]&lt;br /&gt;
[[Category:Office]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4922</id>
		<title>Office Policies</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4922"/>
		<updated>2022-11-03T05:58:48Z</updated>

		<summary type="html">&lt;p&gt;R389li: Revert food change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following are the day-to-day policies for running the CSC Office. They are set down by the Office Manager or, should there not be a current Office Manager, by the Secretary.&lt;br /&gt;
&lt;br /&gt;
* There must be an office staff member present in the office at all times when it is open.&lt;br /&gt;
* If issues arise, office staff are expected to be the adults and deal with them professionally, rather than making problems worse.&lt;br /&gt;
* Any significant incidents, including harassment, must be reported to the Office Manager, even if they get resolved.&lt;br /&gt;
* If there are people in the office, the doors should be open.&lt;br /&gt;
* Don&#039;t be excessively rude or loud in the office.&lt;br /&gt;
* Don&#039;t violate the privacy of others: e.g. if someone leaves their terminal unlocked, don&#039;t do anything that might get them angry at you.&lt;br /&gt;
* Desks and wheely chairs are primarily for use with office terminals: i.e. if you are sitting in/at one and are not using the terminal, anyone may kick you out to use the terminal.&lt;br /&gt;
* Chairs are for people over bags. If you leave a bag on a chair and someone comes along needing a seat, they take priority over your bag.&lt;br /&gt;
* If you leave your terminal and don&#039;t announce that you&#039;re coming back, or are gone for more than 5 minutes, someone else can take it.&lt;br /&gt;
* No sleeping in the office.&lt;br /&gt;
* No sex in the office.&lt;br /&gt;
* No distracting games in the office. Academics and club-related activities take priority.&lt;br /&gt;
* Nothing illegal in the office.&lt;br /&gt;
* The office is not your locker: if you choose to leave things here, you do so at your own risk; CSC/office staff is not responsible for any theft/loss/damage that may occur.&lt;br /&gt;
* The office is not your pantry: do not leave your food here.&lt;br /&gt;
* Clean up your garbage.&lt;br /&gt;
* The stapler may be used only inside the office, or for club business.&lt;br /&gt;
* The office phone is primarily for club business. You may use it for emergencies and brief calls, but do not use it excessively or to conduct business.&lt;br /&gt;
* Don&#039;t play music when you aren&#039;t in the office (but it&#039;s OK to leave with music queued up).&lt;br /&gt;
* Share the music queue.&lt;br /&gt;
* Keep music at a reasonable volume.&lt;br /&gt;
&lt;br /&gt;
[[Category:Policy]]&lt;br /&gt;
[[Category:Office]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4921</id>
		<title>Office Policies</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Office_Policies&amp;diff=4921"/>
		<updated>2022-11-02T20:38:21Z</updated>

		<summary type="html">&lt;p&gt;R389li: Propose some new rules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following are the day-to-day policies for running the CSC Office. They are set down by the Office Manager or, should there not be a current Office Manager, by the Secretary.&lt;br /&gt;
&lt;br /&gt;
* There must be an office staff member present in the office at all times when it is open.&lt;br /&gt;
* If issues arise, office staff are expected to be the adults and deal with them professionally, rather than making problems worse.&lt;br /&gt;
* Any significant incidents, including harassment, must be reported to the Office Manager, even if they get resolved.&lt;br /&gt;
* If there are people in the office, the doors should be open.&lt;br /&gt;
* Don&#039;t be excessively rude or loud in the office.&lt;br /&gt;
* Don&#039;t violate the privacy of others: e.g. if someone leaves their terminal unlocked, don&#039;t do anything that might get them angry at you.&lt;br /&gt;
* Desks and wheely chairs are primarily for use with office terminals: i.e. if you are sitting in/at one and are not using the terminal, anyone may kick you out to use the terminal.&lt;br /&gt;
* Chairs are for people over bags. If you leave a bag on a chair and someone comes along needing a seat, they take priority over your bag.&lt;br /&gt;
* If you leave your terminal and don&#039;t announce that you&#039;re coming back, or are gone for more than 5 minutes, someone else can take it.&lt;br /&gt;
* No sleeping in the office.&lt;br /&gt;
* No sex in the office.&lt;br /&gt;
* No distracting games in the office. Academics and club-related activities take priority.&lt;br /&gt;
* Nothing illegal in the office.&lt;br /&gt;
* The office is not your locker: if you choose to leave things here, you do so at your own risk; CSC/office staff is not responsible for any theft/loss/damage that may occur.&lt;br /&gt;
* The office is not your pantry: if you leave food here it may get eaten.&lt;br /&gt;
* Clean up your garbage.&lt;br /&gt;
* The stapler may be used only inside the office, or for club business.&lt;br /&gt;
* The office phone is primarily for club business. You may use it for emergencies and brief calls, but do not use it excessively or to conduct business.&lt;br /&gt;
* Don&#039;t play music when you aren&#039;t in the office (but it&#039;s OK to leave with music queued up).&lt;br /&gt;
* Share the music queue.&lt;br /&gt;
* Keep music at a reasonable volume.&lt;br /&gt;
&lt;br /&gt;
[[Category:Policy]]&lt;br /&gt;
[[Category:Office]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=ZNC&amp;diff=4918</id>
		<title>ZNC</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=ZNC&amp;diff=4918"/>
		<updated>2022-11-01T17:52:59Z</updated>

		<summary type="html">&lt;p&gt;R389li: Sunset&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== ZNC will be sunset on 7 November, 2022. Please migrate to another service, like our The Lounge instance, which provides message history automatically. ===&lt;br /&gt;
This page describes client and server setup for ZNC with LDAP authentication.&lt;br /&gt;
If you&#039;re new to IRC, see [[How to IRC]] to get started. For more info on ZNC, see [https://wiki.znc.in/ZNC].&lt;br /&gt;
&lt;br /&gt;
== ZNC setup ==&lt;br /&gt;
These instructions show how to connect to the &amp;lt;code&amp;gt;#csc&amp;lt;/code&amp;gt; channel on libera.chat via ZNC.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Visit the ZNC web portal at [https://znc.csclub.uwaterloo.ca znc.csclub.uwaterloo.ca] and login using your CSC credentials.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Go to &amp;quot;Your Settings&amp;quot;. Under &amp;quot;Networks&amp;quot;, if you do not see a network called &amp;quot;libera&amp;quot;, then click &amp;quot;Add&amp;quot;, type &amp;quot;libera&amp;quot; for the Network Name, edit your nickname if desired, and enter the following into the IRC servers table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname            Port    SSL&lt;br /&gt;
irc.libera.chat     6697    [Checked]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
(Optional, but recommended): Under the settings for libera, check the box which says &amp;quot;Connect to IRC &amp;amp; automatically re-connect&amp;quot;. This will connect you to Libera as soon as you connect to ZNC.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Set your nick, alt. nick, and ident for libera. Make sure these all have the same value. By default these are set to %user% which will expand to your csc username.&lt;br /&gt;
If you are already logged in to libera with your csc username on a different IRC client, make sure to change your nick here&lt;br /&gt;
as two different connections cannot share the same nick.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under the &amp;quot;channels&amp;quot; section for libera, click &amp;quot;Add&amp;quot;, then enter &amp;lt;code&amp;gt;#csc&amp;lt;/code&amp;gt; in the &amp;quot;Channel Name&amp;quot; field, and check the boxes &amp;quot;Save to config&amp;quot;, &amp;quot;Detached&amp;quot;, and &amp;quot;Enabled&amp;quot;. Click &amp;quot;Add Channel and return&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Now you will connect to ZNC with an IRC client.&lt;br /&gt;
&lt;br /&gt;
== IRC Client setup ==&lt;br /&gt;
=== The Lounge (chat.csclub.uwaterloo.ca) ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under network settings, name can be anything you want.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Server should be set to &amp;lt;code&amp;gt;znc.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, and port &amp;lt;code&amp;gt;6697&amp;lt;/code&amp;gt;. The password is &amp;lt;code&amp;gt;&amp;lt;zncusername&amp;gt;:&amp;lt;zncpassword&amp;gt;&amp;lt;/code&amp;gt;. If you have multiple networks configured, i.e. Libera and Freenode, use &amp;lt;code&amp;gt;&amp;lt;zncusername&amp;gt;/&amp;lt;networkname&amp;gt;:&amp;lt;zncpassword&amp;gt;&amp;lt;/code&amp;gt; for the password. Also set your nick, username and real name.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under Authentication, choose &amp;lt;code&amp;gt;Username + password (SASL PLAIN)&amp;lt;/code&amp;gt;, and enter your LIBERA nick and password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weechat ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/server add myznc znc.csclub.uwaterloo.ca/6697 -username=&amp;lt;CSC_USERNAME&amp;gt;/libera -password=&amp;lt;CSC_PASSWORD&amp;gt; -ssl -autoconnect&lt;br /&gt;
/connect myznc&lt;br /&gt;
/join #csc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Don&#039;t forget to concatenate &amp;quot;/libera&amp;quot; to the end of your username.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If you did not check the autoconnect box, you will need to manually connect using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *status connect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To verify that you are connected to Libera, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *status ListNetworks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;IRC&amp;quot; column should have the value &amp;quot;Yes&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
A modified version of the backlog module [https://wiki.znc.in/Backlog] is enabled globally. To use this, first enable the &amp;lt;kbd&amp;gt;log&amp;lt;/kbd&amp;gt; module for your user via the web UI. You will then be able to request older logs for a channel from your IRC client, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *backlog #csc 42&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that you do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; need to specify the log path.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server setup ==&lt;br /&gt;
Note that the following instructions are about setting up a ZNC instance with support for LDAP authentication, similar to the CSC ZNC, and it is &#039;&#039;not&#039;&#039; about configuring an IRC client to connect to ZNC. For that, see the [[ZNC#Client_setup|Client setup]] section above.&lt;br /&gt;
&lt;br /&gt;
=== saslauthd setup ===&lt;br /&gt;
For LDAP authentication, we use the Cyrusauth module [https://wiki.znc.in/Cyrusauth], which needs to communicate with the SASL authentication daemon (saslauthd).&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
On the server, install the following packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;apt install sasl2-bin ca-certificates&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Open /etc/default/saslauthd, and change the following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
START=yes&lt;br /&gt;
MECHANISM=&amp;quot;ldap&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Paste the following into /etc/saslauthd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldap_servers: ldaps://auth1.csclub.uwaterloo.ca ldaps://auth2.csclub.uwaterloo.ca&lt;br /&gt;
ldap_search_base: ou=People,dc=csclub,dc=uwaterloo,dc=ca&lt;br /&gt;
ldap_filter: (uid=%u)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Start saslauthd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# service saslauthd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Test saslauthd to make sure it&#039;s working:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ testsaslauthd -u &amp;quot;your_csc_username&amp;quot; -p &amp;quot;your_csc_password&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see a response like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0: OK &amp;quot;Success.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
=== ZNC setup ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Install ZNC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# apt install znc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Add a user for ZNC and create an initial configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# useradd -s /bin/bash -m znc&lt;br /&gt;
# usermod -a -G sasl znc&lt;br /&gt;
# su - znc&lt;br /&gt;
$ znc --makeconf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the znc user &amp;lt;b&amp;gt;must&amp;lt;/b&amp;gt; be part of the sasl group to communicate with saslauthd.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Visit the web interface at &amp;lt;SERVER_IP&amp;gt;:&amp;lt;PORT&amp;gt;. Note that you may need to modify your browser settings so that you can visit a website at port 6667 or 6697.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Log in using your admin credentials, then go to &amp;quot;Global Settings&amp;quot;. Check the &amp;quot;cyrusauth&amp;quot; box, type &amp;quot;saslauthd&amp;quot; in the arguments input field, then scroll to the bottom and click &amp;quot;Save&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You will now need to connect to ZNC with an IRC client. The commands below assume Weechat is being used, but other clients should be similar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/server add myznc &amp;lt;SERVER_IP&amp;gt;/&amp;lt;PORT&amp;gt; -username=&amp;lt;ADMIN_USERNAME&amp;gt; -password=&amp;lt;ADMIN_PASSWORD&amp;gt;&lt;br /&gt;
/connect myznc&lt;br /&gt;
/msg *Cyrusauth CreateUsers yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will tell ZNC to create a new user on their first login.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You may optionally wish to create users from a template (i.e. dummy) user to share some common per-user settings, such as MaxNetworks. To do this, login to the ZNC web interface as admin and click on &amp;quot;Manage Users&amp;quot;. Add a new user called &amp;quot;dummy&amp;quot; with the desired settings, then click &amp;quot;save&amp;quot;.&lt;br /&gt;
Now open Weechat, login to ZNC as admin, and run the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *Cyrusauth CreateUsers clone dummy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will tell ZNC to clone new users using &amp;quot;dummy&amp;quot; as the template.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You may wish to optionally enable the adminlog module [https://wiki.znc.in/Adminlog] so that you can see who has logged in from where at what time. By default, these logs will be written to a file. To prevent this file from growing too long, install logrotate and paste the following into /etc/logrotate.d/znc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/znc/.znc/moddata/adminlog/znc.log {&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        compress&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will keep rotate logs every week, discarding logs after they have been rotated 4 times.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
=== NGINX tuning ===&lt;br /&gt;
If you are running ZNC behind NGINX as a reverse proxy, keep in mind that by default, NGINX will run one worker process per CPU core. To reduce this, change the following in &amp;lt;kbd&amp;gt;/etc/nginx/nginx.conf&amp;lt;/kbd&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
worker_processes 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Music&amp;diff=4907</id>
		<title>Music</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Music&amp;diff=4907"/>
		<updated>2022-10-25T22:37:18Z</updated>

		<summary type="html">&lt;p&gt;R389li: Rename syscom info to termcom info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Music is run off &amp;lt;code&amp;gt;nullsleep&amp;lt;/code&amp;gt;, since that&#039;s the computer with the speakers attached. &lt;br /&gt;
&lt;br /&gt;
All music files are in &amp;lt;code&amp;gt;/music&amp;lt;/code&amp;gt;. You may or may not be required to be a member of the audio group to actually play tracks&lt;br /&gt;
&lt;br /&gt;
View recently listened tracks: http://www.last.fm/user/csclub &lt;br /&gt;
&lt;br /&gt;
== How to play music ==&lt;br /&gt;
&lt;br /&gt;
# Run &amp;lt;code&amp;gt;ssh nullsleep&amp;lt;/code&amp;gt; from an office terminal.&lt;br /&gt;
# Run &amp;lt;code&amp;gt;ncmpcpp&amp;lt;/code&amp;gt;&lt;br /&gt;
# That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
== Controls ==&lt;br /&gt;
To view the keybindings of ncmpcpp, press F1 while it&#039;s running. &lt;br /&gt;
The number keys switch between tabs in it. &lt;br /&gt;
&lt;br /&gt;
* 1 is current playlist &lt;br /&gt;
* 2 is browsing files&lt;br /&gt;
* 3 is search&lt;br /&gt;
* 4 is browsing the media library&lt;br /&gt;
* 5 is browsing saved playlists, etc.&lt;br /&gt;
&lt;br /&gt;
== Termcom Info ==&lt;br /&gt;
&lt;br /&gt;
* We require https://github.com/hrkfdn/mpdas to get scrobbling working as it &amp;quot;official&amp;quot; last.fm integration was removed from mpd in 2013. &lt;br /&gt;
** n.b. https://github.com/hrkfdn/mpdas/issues/58&lt;br /&gt;
* To control the mixer on other terminals, use &amp;lt;code&amp;gt;PULSE_SERVER=nullsleep pavucontrol&amp;lt;/code&amp;gt;&lt;br /&gt;
* The official last.fm account credentials are stored in the exec password spot :)&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=User:R389li&amp;diff=4905</id>
		<title>User:R389li</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=User:R389li&amp;diff=4905"/>
		<updated>2022-10-19T20:27:49Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add terms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Whoami =&lt;br /&gt;
&lt;br /&gt;
* Better known as &amp;lt;code&amp;gt;raymo&amp;lt;/code&amp;gt; on the internet &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://raymond.li Raymond.Li]&amp;lt;/span&amp;gt;&lt;br /&gt;
* Current CSC sysadmin (w2022, s2022, f2022) and syscom member (s2021, f2021, w2022, s2022, f2022)&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://ctf.uwaterloo.ca CTF Club]&amp;lt;/span&amp;gt; president&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://github.com/Raymo111/i3lock-color i3lock-color]&amp;lt;/span&amp;gt; maintainer&lt;br /&gt;
* Recommends you DON&#039;T take 7 courses in a term. Ever.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=SSL&amp;diff=4893</id>
		<title>SSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=SSL&amp;diff=4893"/>
		<updated>2022-10-12T21:49:48Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add note to restart slapd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GlobalSign ==&lt;br /&gt;
&lt;br /&gt;
The CSC currently has an SSL Certificate from GlobalSign for *.csclub.uwaterloo.ca provided at no cost to us through IST.  GlobalSign likes to take a long time to respond to certificate signing requests (CSR) for wildcard certs, so our CSR really needs to be handed off to IST at least 2 weeks in advance. You can do it sooner – the certificate expiry date will be the old expiry date + 1 year (+ a bonus )  Having an invalid cert for any length of time leads to terrible breakage, followed by terrible workarounds and prolonged problems.&lt;br /&gt;
&lt;br /&gt;
When the certificate is due to expire in a month or two, syscom should (but apparently doesn&#039;t always) get an email notification. This will include a renewal link. Otherwise, use the [https://uwaterloo.ca/information-systems-technology/about/organizational-structure/information-security-services/certificate-authority/globalsign-signed-x5093-certificates/self-service-globalsign-ssl-certificates IST-CA self service system]. Please keep a copy of the key, CSR and (once issued) certificate in &amp;lt;tt&amp;gt;/home/sysadmin/certs&amp;lt;/tt&amp;gt;. The OpenSSL examples linked there are good to generate a 2048-bit RSA key and a corresponding CSR. It&#039;s probably a good idea to change the private key (as it&#039;s not that much effort anyways). Just sure your CSR is for &amp;lt;tt&amp;gt;*.csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
At the self-service portal, these options worked in 2013. If you need IST assistance, [mailto:ist-ca@uwaterloo.ca ist-ca@uwaterloo.ca] is the email address you should contact.&lt;br /&gt;
  Products: OrganizationSSL&lt;br /&gt;
  SSL Certificate Type: Wildcard SSL Certificate&lt;br /&gt;
  Validity Period: 1 year&lt;br /&gt;
  Are you switching from a Competitor? No, I am not switching&lt;br /&gt;
  Are you renewing this Certificate? Yes (paste current certificate)&lt;br /&gt;
  30-day bonus: Yes (why not?)&lt;br /&gt;
  Add specific Subject Alternative Names (SANs): No (*.csclub.uwaterloo.ca automatically adds csclub.uwaterloo.ca as a SAN)&lt;br /&gt;
  Enter Certificate Signing Request (CSR): Yes (paste CSR)&lt;br /&gt;
  Contact Information:&lt;br /&gt;
    First Name: Computer Science Club&lt;br /&gt;
    Last Name: Systems Committee&lt;br /&gt;
    Telephone: +1 519 888 4567 x33870&lt;br /&gt;
    Email Address: syscom@csclub.uwaterloo.ca&lt;br /&gt;
&lt;br /&gt;
=== Helpful links ===&lt;br /&gt;
* [https://support.globalsign.com/ssl/ssl-certificates-installation/generate-csr-openssl How to generate a new CSR and private key]&lt;br /&gt;
* [https://uwaterloo.atlassian.net/wiki/spaces/ISTKB/pages/262013183/How+to+obtain+a+new+GlobalSign+certificate+or+renew+an+existing+one How to obtain a new GlobalSign certificate or renew an existing one]&lt;br /&gt;
* [https://system.globalsign.com/bm/public/certificate/poporder.do?domain=PAR12271n5w6s27pvg8d92v4150t GlobalSign UWaterloo self-service page]&lt;br /&gt;
* [https://support.globalsign.com/ca-certificates/intermediate-certificates/organizationssl-intermediate-certificates GlobalSign intermediate certificate] (needed to create a certificate chain; see below)&lt;br /&gt;
&lt;br /&gt;
=== OpenSSL cheat sheet ===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Generate a new CSR and private key (do this in a new directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -out csclub.uwaterloo.ca.csr -new -newkey rsa:2048 -keyout csclub.uwaterloo.ca.key -nodes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enter the following information at the prompts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Country Name (2 letter code) [AU]:CA&lt;br /&gt;
State or Province Name (full name) [Some-State]:Ontario&lt;br /&gt;
Locality Name (eg, city) []:Waterloo&lt;br /&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:University of Waterloo&lt;br /&gt;
Organizational Unit Name (eg, section) []:Computer Science Club&lt;br /&gt;
Common Name (e.g. server FQDN or YOUR name) []:*.csclub.uwaterloo.ca&lt;br /&gt;
Email Address []:systems-committee@csclub.uwaterloo.ca&lt;br /&gt;
&lt;br /&gt;
Please enter the following &#039;extra&#039; attributes&lt;br /&gt;
to be sent with your certificate request&lt;br /&gt;
A challenge password []:&lt;br /&gt;
An optional company name []:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
View the information inside a CSR:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -noout -text -in csclub.uwaterloo.ca.csr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
View the information inside a private key:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl pkey -noout -text -in csclub.uwaterloo.ca.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
View information inside a certificate:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl x509 -noout -text -in csclub.uwaterloo.ca.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== csclub.cloud ===&lt;br /&gt;
Once a year, someone from IST will ask us to create a temporary TXT record for csclub.cloud to prove to GlobalSign that we own it. This must be created at the &amp;lt;b&amp;gt;root&amp;lt;/b&amp;gt; of the domain. Since this zone is managed dynamically (via the acme.sh script on biloba, see below), we need to freeze the domain and update /var/lib/bind/db.csclub.cloud directly. Here are the steps:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run &amp;lt;code&amp;gt;rndc freeze csclub.cloud&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Open /var/lib/bind/db.csclub.cloud and add a new TXT record. It&#039;ll look something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TXT &amp;quot;_globalsign-domain-verification=blablabla&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In the same file, make sure to also update the SOA serial number. It should generally be YYYYMMDDNN where NN is a monotonically increasing counter (YYYYMMDD is the current date).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Run a DNS query to make sure you can see the TXT record:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dig -t txt @dns1 csclub.cloud&lt;br /&gt;
dig -t txt @dns2 csclub.cloud&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Email back the person from IST and let them know that we created the TXT record.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Once the certificate has been renewed, delete the TXT record, update the SOA serial number, and run &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run &amp;lt;code&amp;gt;rndc thaw csclub.cloud&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Certificate Files ==&lt;br /&gt;
Let&#039;s say you obtain a new certificate for *.csclub.uwaterloo.ca. Here are the files which should be stored in the certs folder:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;csclub.uwaterloo.ca.key: private key created by openssl&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;csclub.uwaterloo.ca.csr: certificate signing request created by openssl&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;order: order number from GlobalSign&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;csclub.uwaterloo.ca.crt: certificate created by GlobalSign&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;globalsign-intermediate.crt: intermediate certificate from GlobalSign, obtainable from [https://support.globalsign.com/ca-certificates/intermediate-certificates/organizationssl-intermediate-certificates here]. As of this writing, we use the &amp;quot;OrganizationSSL SHA-256 R3 Intermediate Certificate&amp;quot;. Just click the &amp;quot;View in Base64&amp;quot; button and copy the contents.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There is an alternative way to get the intermediate certificate: if you run &amp;lt;code&amp;gt;openssl x509 -noout -text -in csclub.uwaterloo.ca.crt&amp;lt;/code&amp;gt;, under X509v3 extensions &amp;gt; Authority Information Access, there should be a field called &amp;quot;CA Issuers&amp;quot; which has a URL which looks like http://secure.globalsign.com/cacert/gsrsaovsslca2018.crt. You can download that file and convert it to PEM:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://secure.globalsign.com/cacert/gsrsaovsslca2018.crt&lt;br /&gt;
openssl x509 -inform der -in gsrsaovsslca2018.crt -out globalsign-intermediate.crt&lt;br /&gt;
rm gsrsaovsslca2018.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;csclub.uwaterloo.ca.chain: create this with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat csclub.uwaterloo.ca.crt globalsign-intermediate.crt &amp;gt; csclub.uwaterloo.ca.chain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;csclub.uwaterloo.ca.pem: create this with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat csclub.uwaterloo.ca.key csclub.uwaterloo.ca.chain &amp;gt; csclub.uwaterloo.ca.pem&lt;br /&gt;
chmod 600 csclub.uwaterloo.ca.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Certificate Locations ==&lt;br /&gt;
&lt;br /&gt;
Keep a copy of newly generated certificates in /home/sysadmin/certs on the NFS server (currently [[Machine_List#xylitol|xylitol]]).&lt;br /&gt;
&lt;br /&gt;
A list of places you&#039;ll need to put the new certificate to keep our services running. Private key (if applicable) should be kept next to the certificate with the extension .key.&lt;br /&gt;
&lt;br /&gt;
* caffeine:/etc/ssl/private/csclub-wildcard.crt (for Apache)&lt;br /&gt;
* coffee:/etc/ssl/private/csclub.uwaterloo.ca (for PostgreSQL and MariaDB)&lt;br /&gt;
* mail:/etc/ssl/private/csclub-wildcard.crt (for Apache, Postfix and Dovecot)&lt;br /&gt;
* mailman:/etc/ssl/private/csclub-wildcard-chain.crt (for Apache)&lt;br /&gt;
* rt:/etc/ssl/private/csclub-wildcard.crt (for Apache)&lt;br /&gt;
* potassium-benzoate:/etc/ssl/private/csclub-wildcard.crt (for nginx)&lt;br /&gt;
* phosphoric-acid:/etc/ssl/private/csclub-wildcard-chain.crt (for ceod)&lt;br /&gt;
* auth1:/etc/ssl/private/csclub-wildcard.crt (for slapd, make sure to &amp;lt;code&amp;gt;sudo service slapd restart&amp;lt;/code&amp;gt;)&lt;br /&gt;
* auth2:/etc/ssl/private/csclub-wildcard.crt (for slapd, make sure to &amp;lt;code&amp;gt;sudo service slapd restart&amp;lt;/code&amp;gt;)&lt;br /&gt;
* logstash:/etc/ssl/private/csclub-wildcard.crt (for nginx) [temporarily down 2020]&lt;br /&gt;
* mattermost:/etc/ssl/private/csclub-wildcard.crt (for nginx)&lt;br /&gt;
* load-balancer-0(1|2):/etc/ssl/private/csclub.uwaterloo.ca (for haproxy) [temporarily down 2020]&lt;br /&gt;
* chat:/etc/ssl/private/csclub-wildcard-chain.crt (for nginx)&lt;br /&gt;
* znc:/etc/ssl/private/csclub-wildcard-chain.crt (for ZNC and nginx)&lt;br /&gt;
* prometheus:/etc/ssl/private/csclub-wildcard-chain.crt (for Apache)&lt;br /&gt;
* bigbluebutton:/etc/nginx/ssl/csclub-wildcard-chain.crt (podman container on xylitol)&lt;br /&gt;
* icy:/etc/ssl/private/csclub-wildcard.pem (for Icecast)&lt;br /&gt;
* chamomile:/etc/ssl/private/cloud.csclub.uwaterloo.ca.chain.crt, /etc/ssl/private/csclub.cloud.chain, /etc/ssl/private/csclub.uwaterloo.ca.chain (for nginx)&lt;br /&gt;
* biloba:/etc/ssl/private/cloud.csclub.uwaterloo.ca.chain.crt, /etc/ssl/private/csclub.cloud.chain, /etc/ssl/private/csclub.uwaterloo.ca.chain (for nginx)&lt;br /&gt;
* nextcloud (nspawn container inside guayusa): /etc/ssl/private/csclub.uwaterloo.ca.chain (for nginx)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some services (e.g. Dovecot, Postfix) prefer to have the certificate chain in one file. Concatenate the appropriate intermediate root to the end of the certificate and store this as csclub-wildcard-chain.crt.&lt;br /&gt;
&lt;br /&gt;
=== More certificate locations ===&lt;br /&gt;
We have some SSL certificates which are not used by web servers, but still need to be renewed eventually.&lt;br /&gt;
&lt;br /&gt;
==== Prometheus node exporter ====&lt;br /&gt;
All of our Prometheus node exporters are using mTLS via stunnel (every bare-metal host, as well as caffeine, coffee and mail, is running this exporter). The certificates (both client and server) are set to expire in &amp;lt;b&amp;gt;September 2031&amp;lt;/b&amp;gt;; before then, create new keypairs in /opt/prometheus/tls, and deploy the new server.crt, node.crt and node.key to /etc/stunnel/tls on all machines. Restart prometheus and all of the node exporters.&lt;br /&gt;
&lt;br /&gt;
==== ADFS ====&lt;br /&gt;
See [[ADFS]]. When the university&#039;s IdP certificate expires (&amp;lt;b&amp;gt;October 2025&amp;lt;/b&amp;gt;), we can just download a new one and restart Apache; when our own certificate expires (&amp;lt;b&amp;gt;July 2031&amp;lt;/b&amp;gt;), we need to submit a new form to IST (please do this &amp;lt;i&amp;gt;before&amp;lt;/i&amp;gt; the cert expires).&lt;br /&gt;
&lt;br /&gt;
==== Keycloak ====&lt;br /&gt;
See [[Keycloak]]. When the saml-passthrough certificate expires (&amp;lt;b&amp;gt;January 2032&amp;lt;/b&amp;gt;), you need to create a new keypair in /srv/saml-passthrough on caffeine, and upload the new certificate into the Keycloak UI (IdP settings). When the Keycloak SP certificate expires (&amp;lt;b&amp;gt;December 2031&amp;lt;/b&amp;gt;), make sure to create a new keypair and upload it to the Keycloak UI (Realm Settings).&lt;br /&gt;
&lt;br /&gt;
== letsencrypt ==&lt;br /&gt;
&lt;br /&gt;
We support letsencrypt for our virtual hosts with custom domains. We use the &amp;lt;tt&amp;gt;cerbot&amp;lt;/tt&amp;gt; from debian repositories with a configuration file at &amp;lt;tt&amp;gt;/etc/letsencrypt/cli.ini&amp;lt;/tt&amp;gt;, and a systemd timer to handle renewals.&lt;br /&gt;
&lt;br /&gt;
The setup for a new domain is:&lt;br /&gt;
&lt;br /&gt;
# Become &amp;lt;tt&amp;gt;certbot&amp;lt;/tt&amp;gt; on caffine with &amp;lt;tt&amp;gt;sudo -u certbot bash&amp;lt;/tt&amp;gt; or similar.&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;certbot certonly -c /etc/letsencrypt/cli.ini -d DOMAIN --logs-dir /tmp&amp;lt;/tt&amp;gt;. The logs-dir isn&#039;t important and is only needed for troubleshooting.&lt;br /&gt;
# Set up the Apache site configuration using the example below. (apache config is in /etc/apache2) Note the permanent redirect to https.&lt;br /&gt;
# Make sure to commit your changes when you&#039;re done.&lt;br /&gt;
# Reloading apache config is &amp;lt;tt&amp;gt;sudo systemctl reload apache2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
     ServerName example.com&lt;br /&gt;
     ServerAlias *.example.com&lt;br /&gt;
     ServerAdmin example@csclub.uwaterloo.ca&lt;br /&gt;
 &lt;br /&gt;
     #DocumentRoot /users/example/www/&lt;br /&gt;
     Redirect permanent / https://example.com/&lt;br /&gt;
 &lt;br /&gt;
     ErrorLog /var/log/apache2/example-error.log&lt;br /&gt;
     CustomLog /var/log/apache2/example-access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost csclub:443&amp;gt;&lt;br /&gt;
     SSLEngine on&lt;br /&gt;
     SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem&lt;br /&gt;
     SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem&lt;br /&gt;
     SSLStrictSNIVHostCheck on&lt;br /&gt;
 &lt;br /&gt;
     ServerName example.com&lt;br /&gt;
     ServerAlias *.example.com&lt;br /&gt;
     ServerAdmin example@csclub.uwaterloo.ca&lt;br /&gt;
 &lt;br /&gt;
     DocumentRoot /users/example/www&lt;br /&gt;
 &lt;br /&gt;
     ErrorLog /var/log/apache2/example-error.log&lt;br /&gt;
     CustomLog /var/log/apache2/example-access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== acme.sh ==&lt;br /&gt;
We are using [https://github.com/acmesh-official/acme.sh acme.sh] for provisioning SSL certificates for some of our *.csclub.cloud domains. It is currently set up under /root/.acme.sh on biloba.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE&amp;lt;/b&amp;gt;: acme.sh has a cron job which automatically renews certificates before they expire and reloads NGINX, so you do not have to do anything after issuing and installing a certificate (i.e. &amp;quot;set-and-forget&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt    &lt;br /&gt;
git clone --depth 1 https://github.com/acmesh-official/acme.sh    &lt;br /&gt;
cd acme.sh    &lt;br /&gt;
./acme.sh --install -m syscom@csclub.uwaterloo.ca    &lt;br /&gt;
. &amp;quot;/root/.acme.sh/acme.sh.env&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important&amp;lt;/b&amp;gt;: If invoking acme.sh from another program, it needs the environment variables set in acme.sh.env. Currently, that is just&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LE_WORKING_DIR=&amp;quot;/root/.acme.sh&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For testing purposes, make sure to use the Let&#039;s Encrypt test server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh --set-default-ca --server letsencrypt_test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NGINX setup ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /var/www/.well-known/acme-challenge&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the following snippet to your default NGINX file (e.g. /etc/nginx/sites-enabled/default):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # For Let&#039;s Encrypt&lt;br /&gt;
  location /.well-known/acme-challenge/ {&lt;br /&gt;
    alias /var/www/.well-known/acme-challenge/;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now assuming that biloba has the IP address for *.csclub.cloud, you can test that everything is working:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh --issue -d app.merenber.csclub.cloud -w /var/www&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To install a certificate after it&#039;s been issued:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh --install-cert -d app.merenber.csclub.cloud \&lt;br /&gt;
    --key-file /etc/nginx/ceod/member-ssl/app.merenber.csclub.cloud.key \&lt;br /&gt;
    --fullchain-file /etc/nginx/ceod/member-ssl/app.merenber.csclub.cloud.chain \&lt;br /&gt;
    --reloadcmd &amp;quot;systemctl reload nginx&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
At this point, you should add your NGINX vhost file which uses that SSL certificate.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To remove a certificate:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh --remove -d app.merenber.csclub.cloud&lt;br /&gt;
rm -r /root/.acme.sh/app.merenber.csclub.cloud&lt;br /&gt;
rm /etc/nginx/ceod/member-ssl/app.merenber.csclub.cloud.chain&lt;br /&gt;
rm /etc/nginx/ceod/member-ssl/app.merenber.csclub.cloud.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Don&#039;t forget to remove the NGINX vhost file too.&lt;br /&gt;
&lt;br /&gt;
Once you think you&#039;re ready, use a real ACME provider, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh --set-default-ca --server letsencrypt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we have a [https://zerossl.com ZeroSSL] account, and ZeroSSL has no rate limit, we are going to use that instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acme.sh  --register-account  --server zerossl \&lt;br /&gt;
        --eab-kid  xxxxxxxxxxxx  \&lt;br /&gt;
        --eab-hmac-key  xxxxxxxxx&lt;br /&gt;
acme.sh --set-default-ca  --server zerossl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS challenge ===&lt;br /&gt;
To obtain a wildcard certificate (e.g. *.k8s.csclub.cloud), you will need to perform the DNS-01 challenge. We are going to use nsupdate to interact with our BIND9 server on dns1.&lt;br /&gt;
&lt;br /&gt;
On dns1, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tsig-keygen csc-cloud&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Paste the output into the appropriate section in /etc/bind/named.conf.local. Also paste it into a file somewhere on biloba, e.g. /etc/csc/csc-cloud-tsig.key.&lt;br /&gt;
&lt;br /&gt;
Add the following to the csclub.cloud zone block:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  allow-update {&lt;br /&gt;
    !{&lt;br /&gt;
      !127.0.0.1;&lt;br /&gt;
      !::1;&lt;br /&gt;
      !129.97.134.0/24;&lt;br /&gt;
      !2620:101:f000:4901::/64;&lt;br /&gt;
      any;&lt;br /&gt;
    };&lt;br /&gt;
    key csc-cloud;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(We&#039;re basically trying to restrict updates to the given IP ranges. See https://serverfault.com/a/417229.)&lt;br /&gt;
&lt;br /&gt;
The &#039;bind&#039; user can&#039;t write to files under /etc/bind, so we&#039;re going to move our zone file to /var/lib/bind instead.&lt;br /&gt;
Comment out &#039;file &amp;quot;/etc/bind/db.csclub.cloud&amp;quot;;&#039; from named.conf.local and add this line below it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  file &amp;quot;/var/lib/bind/db.csclub.cloud&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  cp /etc/bind/db.csclub.cloud /var/lib/bind/db.csclub.cloud&lt;br /&gt;
  chown bind:bind /var/lib/bind/db.csclub.cloud&lt;br /&gt;
  rndc reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On biloba, check that everything&#039;s working:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  nsupdate -k /etc/csc/csc-cloud-tsig.key -v &amp;lt;&amp;lt;EOF&lt;br /&gt;
  update add test.csclub.cloud 300 A 0.0.0.0&lt;br /&gt;
  send&lt;br /&gt;
  EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use a tool such as &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; to make sure that the update was successful.&lt;br /&gt;
If it worked, you can delete the record:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  nsupdate -k /etc/csc/csc-cloud-tsig.key -v &amp;lt;&amp;lt;EOF&lt;br /&gt;
  delete test.csclub.cloud&lt;br /&gt;
  send&lt;br /&gt;
  EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now we are ready to actually perform the challenge with acme.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  export NSUPDATE_SERVER=&amp;quot;dns1.csclub.uwaterloo.ca&amp;quot;&lt;br /&gt;
  export NSUPDATE_KEY=&amp;quot;/etc/csc/csc-cloud-tsig.key&amp;quot;&lt;br /&gt;
  acme.sh --issue --dns dns_nsupdate -d &#039;k8s.csclub.cloud&#039; -d &#039;*.k8s.csclub.cloud&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(If something goes wrong, use the &amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt; flag.)&lt;br /&gt;
&lt;br /&gt;
If all went well, just install the certificate as usual:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  acme.sh --install-cert -d k8s.csclub.cloud \&lt;br /&gt;
    --key-file /etc/nginx/ceod/syscom-ssl/k8s.csclub.cloud.key \&lt;br /&gt;
    --fullchain-file /etc/nginx/ceod/syscom-ssl/k8s.csclub.cloud.chain \&lt;br /&gt;
    --reloadcmd &#039;systemctl reload nginx&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4882</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4882"/>
		<updated>2022-09-16T03:19:20Z</updated>

		<summary type="html">&lt;p&gt;R389li: Standardize formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (IMAPd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 &amp;lt;code&amp;gt;Progcom: Peter Stevens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 LI: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 WW: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 SA: bioster&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 LI: Ryan Golbeck&lt;br /&gt;
 WW: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 WW: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 LI: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 WW: Stefanus Du Toit&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 WW: jnopporn&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 LI: David Tenty (daltenty)&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
Keyed office staffers: j3camero, jdonland, m2ellis, mimcpher, nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LI: Edgar Bering (ebering)&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LI: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LI: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LI: John Ladan (jladan)&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LI: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 FR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LI: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LI: Aishwarya Gupta (a72gupta)&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LI: Yomna Nasser (ynasser)&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray drove all CSC activity virtual. Though everyone thought the pandemic would quickly be over, the Alpha, then Delta, then Omicron variants resulted in the majority of classes being held online until February 2022.&lt;br /&gt;
&lt;br /&gt;
As a result, the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
In 2021, CSC rapidly expanded the Program Committee, introducing subcommittees including Design, Events, Marketing, Photography, Reps, Discord mods, and Discord bot developers. The website committee also expanded, and the terminal committee was officially repurposed to serve a syscom-in-training role (since the office remained closed and the terminals powered off).&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;br /&gt;
 LI: Santiago Montemayor (smontema) (appointed 2022-06-02)&lt;br /&gt;
 FR: Sat Arora (s97arora) (appointed 2022-06-23)&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Amy Wang (a258wang)&lt;br /&gt;
 VP: Anna Wang (aj2wang)&lt;br /&gt;
 TR: Simon Zeng (s33zeng)&lt;br /&gt;
 AV: Mabel Kwok (m23kwok)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Shahan Nedadahandeh (snedadah)&lt;br /&gt;
 OF: &lt;br /&gt;
 LI: &lt;br /&gt;
 FR:&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4881</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4881"/>
		<updated>2022-09-16T03:09:08Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* Spring */ Fix title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (IMAPd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
Progcom: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 TR:&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
*Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 Librarian: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 Webmaster: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP: &lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: bioster&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 Librarian: Ryan Golbeck&lt;br /&gt;
 Webmaster: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 Librarian: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
 SA: &lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 Webmaster: jnopporn&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 Librarian: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
&lt;br /&gt;
 Keyed office staffers: j3camero,jdonland,m2ellis,mimcpher,nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LIB: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LIB: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 FR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LIB: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LIB: Aishwarya Gupta (a72gupta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LIB: Yomna Nasser (ynasser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray drove all CSC activity virtual. Though everyone thought the pandemic would quickly be over, the Alpha, then Delta, then Omicron variants resulted in the majority of classes being held online until February 2022.&lt;br /&gt;
&lt;br /&gt;
As a result, the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
In 2021, CSC rapidly expanded the Program Committee, introducing subcommittees including Design, Events, Marketing, Photography, Reps, Discord mods, and Discord bot developers. The website committee also expanded, and the terminal committee was officially repurposed to serve a syscom-in-training role (since the office remained closed and the terminals powered off).&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;br /&gt;
 LI: Santiago Montemayor (smontema) (appointed 2022-06-02)&lt;br /&gt;
 FR: Sat Arora (s97arora) (appointed 2022-06-23)&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Amy Wang (a258wang)&lt;br /&gt;
 VP: Anna Wang (aj2wang)&lt;br /&gt;
 TR: Simon Zeng (s33zeng)&lt;br /&gt;
 AV: Mabel Kwok (m23kwok)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Shahan Nedadahandeh (snedadah)&lt;br /&gt;
 OF: &lt;br /&gt;
 LI: &lt;br /&gt;
 FR:&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4880</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4880"/>
		<updated>2022-09-16T03:07:00Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* 2022 */ Update with initial F22 exec list and add 2021 history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (IMAPd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
Progcom: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 TR:&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
*Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 Librarian: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 Webmaster: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP: &lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: bioster&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 Librarian: Ryan Golbeck&lt;br /&gt;
 Webmaster: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 Librarian: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
 SA: &lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 Webmaster: jnopporn&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 Librarian: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
&lt;br /&gt;
 Keyed office staffers: j3camero,jdonland,m2ellis,mimcpher,nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LIB: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LIB: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 IMAPD: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LIB: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LIB: Aishwarya Gupta (a72gupta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LIB: Yomna Nasser (ynasser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray drove all CSC activity virtual. Though everyone thought the pandemic would quickly be over, the Alpha, then Delta, then Omicron variants resulted in the majority of classes being held online until February 2022.&lt;br /&gt;
&lt;br /&gt;
As a result, the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
In 2021, CSC rapidly expanded the Program Committee, introducing subcommittees including Design, Events, Marketing, Photography, Reps, Discord mods, and Discord bot developers. The website committee also expanded, and the terminal committee was officially repurposed to serve a syscom-in-training role (since the office remained closed and the terminals powered off).&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;br /&gt;
 LI: Santiago Montemayor (smontema) (appointed 2022-06-02)&lt;br /&gt;
 FR: Sat Arora (s97arora) (appointed 2022-06-23)&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Amy Wang (a258wang)&lt;br /&gt;
 VP: Anna Wang (aj2wang)&lt;br /&gt;
 TR: Simon Zeng (s33zeng)&lt;br /&gt;
 AV: Mabel Kwok (m23kwok)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Shahan Nedadahandeh (snedadah)&lt;br /&gt;
 OF: &lt;br /&gt;
 LI: &lt;br /&gt;
 FR:&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4879</id>
		<title>Git Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4879"/>
		<updated>2022-09-15T02:04:55Z</updated>

		<summary type="html">&lt;p&gt;R389li: Document locale issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We have a [https://git.csclub.uwaterloo.ca Gitea] instance running on [[Machine List#caffeine|caffeine]]. You can sign in via LDAP to the web interface. Projects used by CSC as a whole are owned by the [https://git.csclub.uwaterloo.ca/public public] organization, except for website-committee related repos, which are owned by the [https://git.csclub.uwaterloo.ca/www www] org.&lt;br /&gt;
&lt;br /&gt;
== Installation Details ==&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/gitea&amp;lt;/code&amp;gt; on caffeine contains the configs for Gitea. It&#039;s installed as a Debian package, with additional files in &amp;lt;code&amp;gt;/var/lib/gitea/&amp;lt;/code&amp;gt;and a systemd service at &amp;lt;code&amp;gt;/lib/systemd/system/gitea.service&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There is a custom locale (used to define CSC-custom strings in some pages) at &amp;lt;code&amp;gt;/var/lib/gitea/custom/options/locale/locale_en-US.ini&amp;lt;/code&amp;gt; that may need to be updated when the Gitea APT package is updated. To update this, run the &amp;lt;code&amp;gt;update_custom_locale.sh&amp;lt;/code&amp;gt; in that directory (as root).&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;quot;It&#039;s basically GitHub&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- raymo&lt;br /&gt;
&lt;br /&gt;
=== SSH keys ===&lt;br /&gt;
It is recommended to setup [https://git.csclub.uwaterloo.ca/user/settings/keys SSH keys] so that you do not have to enter your password each time you push to a repo. Once you have uploaded your public key, add the following to your ~/.ssh/config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host csclub.uwaterloo.ca&lt;br /&gt;
        HostName csclub.uwaterloo.ca&lt;br /&gt;
        IdentityFile ~/.ssh/id_rsa&lt;br /&gt;
        User git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Replace ~/.ssh/id_rsa by the location of your private SSH key.) Now you should be able to clone, push and pull over SSH.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
We are running a CI server at https://ci.csclub.uwaterloo.ca. It uses OAuth via Gitea for logins, so you need to have logged in to Gitea first. See https://docs.drone.io/ for documentation. All you have to do is create a .drone.yml file in your repo, then enable CI on the repo from the CSC Drone website. There is an example [https://git.csclub.uwaterloo.ca/merenber/drone-test here].&lt;br /&gt;
&lt;br /&gt;
== Pushing and pulling from the filesystem ==&lt;br /&gt;
(for syscom only)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need to keep the ability to push/pull from the filesystem, in addition to Gitea, you will need to take the following steps.&lt;br /&gt;
In this example, we are migrating a repo called &#039;public/repo.git&#039;, which is a folder under /srv/git on caffeine (which is a symlink to /users/git).&lt;br /&gt;
The way we&#039;re doing this right now is kind of hacky, but it works:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clone the original repo locally: &amp;lt;code&amp;gt;git clone /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the old repo (from phosphoric-acid, which has no_root_squash): &amp;lt;code&amp;gt;rm -rf /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create a new repo with the name &#039;repo&#039; from the Gitea web UI. This should create a bare repository at &amp;lt;code&amp;gt;/srv/git/public/repo.git&amp;lt;/code&amp;gt;. (Make sure you choose the &#039;public&#039; org from the dropdown.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Push the original repo to the new remote:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd repo&lt;br /&gt;
git remote add gitea https://git.csclub.uwaterloo.ca/public/repo.git&lt;br /&gt;
git push gitea master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Remove any git gooks which require gitea:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm $(grep -IRl gitea /srv/git/public/repo.git/hooks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Change file permissions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R git:git /srv/git/public/repo.git&lt;br /&gt;
chmod -R g+w /srv/git/public/repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will need to do this from phosphoric-acid (due to NFS root squashing).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Note that the repo folder SHOULD be owned by git:git. Anything else will likely break Gitea. (If a user pushes something to the folder and their umask doesn&#039;t allow group members to read, for example, then Gitea will be unable to read the repo.)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This means that only trusted users should be in the git group - ideally, only syscom members.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Shlink&amp;diff=4873</id>
		<title>Shlink</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Shlink&amp;diff=4873"/>
		<updated>2022-09-10T18:58:04Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add setup instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://shlink.io/ Shlink] is a self-hosted URL shortener. We run an instance on [[Machine List#caffeine|caffeine]], currently for exec-use only.&lt;br /&gt;
&lt;br /&gt;
== Installation Details ==&lt;br /&gt;
Shlink was installed manually (as of F2022 there is currently no Debian package for it). Its files are in &amp;lt;code&amp;gt;/usr/local/lib/shlink&amp;lt;/code&amp;gt; on caffeine, with a symlink of &amp;lt;code&amp;gt;bin/cli&amp;lt;/code&amp;gt; (the Shlink CLI) to &amp;lt;code&amp;gt;/usr/local/bin/shlink&amp;lt;/code&amp;gt; as recommended by Shlink&#039;s docs. Due to Shlink only supporting PHP 8.2, which is in debian-unstable at the moment, the installation and CLI scripts were modified to use the &amp;lt;code&amp;gt;php8.2&amp;lt;/code&amp;gt; binary installed from &amp;lt;code&amp;gt;packages.sury.org&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The web client (used to manage shortlinks graphically, the other option being the CLI) sources are located in &amp;lt;code&amp;gt;/usr/local/bin/shlink/web-client/&amp;lt;/code&amp;gt;. Apache is configured (through &amp;lt;code&amp;gt;sites-available/csc-links.conf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;sites-real/csc-links&amp;lt;/code&amp;gt;) to serve actual shortlinks through [https://csclub.ca csclub.ca] (which itself redirects to the CSC homepage) and the web client through [https://links.csclub.uwaterloo.ca links.csclub.uwaterloo.ca].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Links can be managed at [https://links.csclub.uwaterloo.ca links.csclub.uwaterloo.ca], or through the CLI (currently restricted to the &amp;lt;code&amp;gt;staff&amp;lt;/code&amp;gt; group).&lt;br /&gt;
[[File:Shlink1.png|none|thumb|When you open it for the first time, you will see an interface that looks like this. Click &#039;&#039;&#039;Add a server&#039;&#039;&#039;.]]&lt;br /&gt;
[[File:Shlink2.png|none|thumb|Enter the details as follows. Name: &amp;lt;code&amp;gt;csclub.ca&amp;lt;/code&amp;gt; URL: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://csclub.ca&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; API key: The exec API key (in the usual exec passwords location, or ask an exec for it if you aren&#039;t one)]]&lt;br /&gt;
On the next interface, &#039;&#039;&#039;custom slug&#039;&#039;&#039; is the part of the URL that can be customized. If it is left blank, a random 4-character slug will be generated.&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;code&amp;gt;csctest&amp;lt;/code&amp;gt; parameter to disable tracking on test requests.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=File:Shlink2.png&amp;diff=4872</id>
		<title>File:Shlink2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=File:Shlink2.png&amp;diff=4872"/>
		<updated>2022-09-10T18:51:43Z</updated>

		<summary type="html">&lt;p&gt;R389li: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shlink setup process step 2&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=File:Shlink1.png&amp;diff=4871</id>
		<title>File:Shlink1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=File:Shlink1.png&amp;diff=4871"/>
		<updated>2022-09-10T18:48:59Z</updated>

		<summary type="html">&lt;p&gt;R389li: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shlink setup process step 1&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Shlink&amp;diff=4866</id>
		<title>Shlink</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Shlink&amp;diff=4866"/>
		<updated>2022-08-29T06:11:25Z</updated>

		<summary type="html">&lt;p&gt;R389li: Create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://shlink.io/ Shlink] is a self-hosted URL shortener. We run an instance on [[Machine List#caffeine|caffeine]], currently for exec-use only.&lt;br /&gt;
&lt;br /&gt;
== Installation Details ==&lt;br /&gt;
Shlink was installed manually (as of F2022 there is currently no Debian package for it). Its files are in &amp;lt;code&amp;gt;/usr/local/lib/shlink&amp;lt;/code&amp;gt; on caffeine, with a symlink of &amp;lt;code&amp;gt;bin/cli&amp;lt;/code&amp;gt; (the Shlink CLI) to &amp;lt;code&amp;gt;/usr/local/bin/shlink&amp;lt;/code&amp;gt; as recommended by Shlink&#039;s docs. Due to Shlink only supporting PHP 8.2, which is in debian-unstable at the moment, the installation and CLI scripts were modified to use the &amp;lt;code&amp;gt;php8.2&amp;lt;/code&amp;gt; binary installed from &amp;lt;code&amp;gt;packages.sury.org&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The web client (used to manage shortlinks graphically, the other option being the CLI) sources are located in &amp;lt;code&amp;gt;/usr/local/bin/shlink/web-client/&amp;lt;/code&amp;gt;. Apache is configured (through &amp;lt;code&amp;gt;sites-available/csc-links.conf&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;sites-real/csc-links&amp;lt;/code&amp;gt;) to serve actual shortlinks through [https://csclub.ca csclub.ca] (which itself redirects to the CSC homepage) and the web client through [https://links.csclub.uwaterloo.ca links.csclub.uwaterloo.ca].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Links can be managed at [https://links.csclub.uwaterloo.ca links.csclub.uwaterloo.ca], or through the CLI (currently restricted to the &amp;lt;code&amp;gt;staff&amp;lt;/code&amp;gt; group).&lt;br /&gt;
&lt;br /&gt;
Use the &amp;lt;code&amp;gt;csctest&amp;lt;/code&amp;gt; parameter to disable tracking on test requests.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Database&amp;diff=4865</id>
		<title>Database</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Database&amp;diff=4865"/>
		<updated>2022-08-28T20:25:15Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add port&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;IMPORTANT NOTE: This is an upgraded database service offered by the CSC. It is not currently available to members, please see [[MySQL]] for current database information.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The CSC provides MySQL and Postgres databases to members.&lt;br /&gt;
&lt;br /&gt;
If you want to run something different (e.g., MongoDB), you can compile/run it yourself. &#039;&#039;&#039;Please&#039;&#039;&#039; stay up to date with security updates and &#039;&#039;&#039;DO NOT&#039;&#039;&#039; run it on a port open to the internet (see [[Firewall|Firewall]]).&lt;br /&gt;
&lt;br /&gt;
Database services are provided on [[Machine_List#coffee|coffee]], through port 3306.&lt;br /&gt;
&lt;br /&gt;
== Servers ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL ===&lt;br /&gt;
&lt;br /&gt;
=== Postgres ===&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL ===&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
To connect to MySQL from PHP, you need to specify the SSL Cipher of &#039;DHE-RSA-AES256-SHA:AES128-SHA&#039;. For PHP PDO:&lt;br /&gt;
&lt;br /&gt;
  $pdo = new PDO(&#039;mysql:host=coffee.csclub.uwaterloo.ca;dbname=DBNAME&#039;, &#039;USERNAME&#039;, &#039;PASSWORD&#039;, [&lt;br /&gt;
    PDO::MYSQL_ATTR_SSL_CIPHER =&amp;gt; &#039;DHE-RSA-AES256-SHA:AES128-SHA&#039;         &lt;br /&gt;
  ]);                                                                      &lt;br /&gt;
  $pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4864</id>
		<title>Git Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4864"/>
		<updated>2022-08-28T19:46:19Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add installation details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We have a [https://git.csclub.uwaterloo.ca Gitea] instance running on [[Machine List#caffeine|caffeine]]. You can sign in via LDAP to the web interface. Projects used by CSC as a whole are owned by the [https://git.csclub.uwaterloo.ca/public public] organization, except for website-committee related repos, which are owned by the [https://git.csclub.uwaterloo.ca/www www] org.&lt;br /&gt;
&lt;br /&gt;
== Installation Details ==&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/gitea&amp;lt;/code&amp;gt; on caffeine contains the configs for Gitea. It&#039;s installed as a Debian package, with additional files in &amp;lt;code&amp;gt;/var/lib/gitea/&amp;lt;/code&amp;gt;and a systemd service at &amp;lt;code&amp;gt;/lib/systemd/system/gitea.service&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;quot;It&#039;s basically GitHub&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- raymo&lt;br /&gt;
&lt;br /&gt;
=== SSH keys ===&lt;br /&gt;
It is recommended to setup [https://git.csclub.uwaterloo.ca/user/settings/keys SSH keys] so that you do not have to enter your password each time you push to a repo. Once you have uploaded your public key, add the following to your ~/.ssh/config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host csclub.uwaterloo.ca&lt;br /&gt;
        HostName csclub.uwaterloo.ca&lt;br /&gt;
        IdentityFile ~/.ssh/id_rsa&lt;br /&gt;
        User git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Replace ~/.ssh/id_rsa by the location of your private SSH key.) Now you should be able to clone, push and pull over SSH.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
We are running a CI server at https://ci.csclub.uwaterloo.ca. It uses OAuth via Gitea for logins, so you need to have logged in to Gitea first. See https://docs.drone.io/ for documentation. All you have to do is create a .drone.yml file in your repo, then enable CI on the repo from the CSC Drone website. There is an example [https://git.csclub.uwaterloo.ca/merenber/drone-test here].&lt;br /&gt;
&lt;br /&gt;
== Pushing and pulling from the filesystem ==&lt;br /&gt;
(for syscom only)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need to keep the ability to push/pull from the filesystem, in addition to Gitea, you will need to take the following steps.&lt;br /&gt;
In this example, we are migrating a repo called &#039;public/repo.git&#039;, which is a folder under /srv/git on caffeine (which is a symlink to /users/git).&lt;br /&gt;
The way we&#039;re doing this right now is kind of hacky, but it works:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clone the original repo locally: &amp;lt;code&amp;gt;git clone /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the old repo (from phosphoric-acid, which has no_root_squash): &amp;lt;code&amp;gt;rm -rf /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create a new repo with the name &#039;repo&#039; from the Gitea web UI. This should create a bare repository at &amp;lt;code&amp;gt;/srv/git/public/repo.git&amp;lt;/code&amp;gt;. (Make sure you choose the &#039;public&#039; org from the dropdown.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Push the original repo to the new remote:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd repo&lt;br /&gt;
git remote add gitea https://git.csclub.uwaterloo.ca/public/repo.git&lt;br /&gt;
git push gitea master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Remove any git gooks which require gitea:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm $(grep -IRl gitea /srv/git/public/repo.git/hooks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Change file permissions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R git:git /srv/git/public/repo.git&lt;br /&gt;
chmod -R g+w /srv/git/public/repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will need to do this from phosphoric-acid (due to NFS root squashing).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Note that the repo folder SHOULD be owned by git:git. Anything else will likely break Gitea. (If a user pushes something to the folder and their umask doesn&#039;t allow group members to read, for example, then Gitea will be unable to read the repo.)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This means that only trusted users should be in the git group - ideally, only syscom members.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4863</id>
		<title>Git Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Git_Hosting&amp;diff=4863"/>
		<updated>2022-08-28T19:43:30Z</updated>

		<summary type="html">&lt;p&gt;R389li: Grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We have a [https://git.csclub.uwaterloo.ca gitea] instance running on [[Machine List#caffeine|caffeine]]. You can sign in via LDAP to the web interface. Projects used by CSC as a whole are owned by the [https://git.csclub.uwaterloo.ca/public public] organization, except for website-committee related repos, which are owned by the [https://git.csclub.uwaterloo.ca/www www] org.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;quot;It&#039;s basically GitHub&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- raymo&lt;br /&gt;
&lt;br /&gt;
=== SSH keys ===&lt;br /&gt;
It is recommended to setup [https://git.csclub.uwaterloo.ca/user/settings/keys SSH keys] so that you do not have to enter your password each time you push to a repo. Once you have uploaded your public key, add the following to your ~/.ssh/config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host csclub.uwaterloo.ca&lt;br /&gt;
        HostName csclub.uwaterloo.ca&lt;br /&gt;
        IdentityFile ~/.ssh/id_rsa&lt;br /&gt;
        User git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Replace ~/.ssh/id_rsa by the location of your private SSH key.) Now you should be able to clone, push and pull over SSH.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
We are running a CI server at https://ci.csclub.uwaterloo.ca. It uses OAuth via Gitea for logins, so you need to have logged in to Gitea first. See https://docs.drone.io/ for documentation. All you have to do is create a .drone.yml file in your repo, then enable CI on the repo from the CSC Drone website. There is an example [https://git.csclub.uwaterloo.ca/merenber/drone-test here].&lt;br /&gt;
&lt;br /&gt;
== Pushing and pulling from the filesystem ==&lt;br /&gt;
(for syscom only)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need to keep the ability to push/pull from the filesystem, in addition to Gitea, you will need to take the following steps.&lt;br /&gt;
In this example, we are migrating a repo called &#039;public/repo.git&#039;, which is a folder under /srv/git on caffeine (which is a symlink to /users/git).&lt;br /&gt;
The way we&#039;re doing this right now is kind of hacky, but it works:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clone the original repo locally: &amp;lt;code&amp;gt;git clone /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the old repo (from phosphoric-acid, which has no_root_squash): &amp;lt;code&amp;gt;rm -rf /srv/git/public/repo.git&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create a new repo with the name &#039;repo&#039; from the Gitea web UI. This should create a bare repository at &amp;lt;code&amp;gt;/srv/git/public/repo.git&amp;lt;/code&amp;gt;. (Make sure you choose the &#039;public&#039; org from the dropdown.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Push the original repo to the new remote:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd repo&lt;br /&gt;
git remote add gitea https://git.csclub.uwaterloo.ca/public/repo.git&lt;br /&gt;
git push gitea master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Remove any git gooks which require gitea:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm $(grep -IRl gitea /srv/git/public/repo.git/hooks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Change file permissions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R git:git /srv/git/public/repo.git&lt;br /&gt;
chmod -R g+w /srv/git/public/repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will need to do this from phosphoric-acid (due to NFS root squashing).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Note that the repo folder SHOULD be owned by git:git. Anything else will likely break Gitea. (If a user pushes something to the folder and their umask doesn&#039;t allow group members to read, for example, then Gitea will be unable to read the repo.)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This means that only trusted users should be in the git group - ideally, only syscom members.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=4850</id>
		<title>How to IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=4850"/>
		<updated>2022-07-30T05:25:37Z</updated>

		<summary type="html">&lt;p&gt;R389li: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Chat with us!&lt;br /&gt;
&lt;br /&gt;
== The Lounge ==&lt;br /&gt;
We have a web UI for IRC at [https://chat.csclub.uwaterloo.ca The Lounge].&lt;br /&gt;
[[File:The_lounge_screenshot.png|alt=The Lounge screenshot of #csc channel|400px|thumbnail|A screen capture of the #csc channel, as seen from The Lounge web client]]&lt;br /&gt;
If you are a first-time IRC user, this is by far the easiest way to join.&lt;br /&gt;
The steps are (roughly):&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login using your CSC credentials. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Follow the prompts to join the Libera server (make sure TLS is enabled). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Type &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Say hi! &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a termcom member, you will need to join the #csc-termcom channel, which requires nick (nickname) registration. To do this, run the following commands in The Lounge (or any IRC client):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/nick my_nickname&lt;br /&gt;
/msg NickServ REGISTER my_password my_email@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in your nickname, password and email as appropriate. You will receive an email from Libera asking you to verify your email address.&lt;br /&gt;
Once you have done so, go back to The Lounge, go the Libera window, click on the three-dots button in the top right corner, and click &amp;quot;Edit this network&amp;quot;. There, you can specify the nick and password which you just created.&lt;br /&gt;
== Mattermost ==&lt;br /&gt;
[[File:Mattermost-csc-sample.png|alt=Mattermost #csc screen capture, including a conversation between members of the channel|372x372px|right|thumbnail|A screen capture of the #csc channel, as seen from Mattermost desktop]]&lt;br /&gt;
&lt;br /&gt;
[[File:Mattermost-phone-sample.jpg|alt=Mattermost android screenshot of #csc channel|362x362px|thumbnail|A screen capture of the #csc channel, as seen from Mattermost Android client]]&lt;br /&gt;
We self-host [https://mattermost.csclub.uwaterloo.ca/ Mattermost] now, it&#039;s easier to use if you&#039;re not familiar with IRC. If you know how to use IRC, we&#039;re #csc on libera.chat and there should be a #csc bridge that relays messages between #csc and our Mattermost instance.&lt;br /&gt;
&lt;br /&gt;
Both #csc on libera.chat ([https://web.libera.chat/#csc Libera Webchat] or via IRC clients e.g. irssi, weechat) and ~csc on Mattermost are official channels to interact with CSC members!&lt;br /&gt;
&lt;br /&gt;
=== Mattermost Setup ===&lt;br /&gt;
&lt;br /&gt;
Make an account at [https://mattermost.csclub.uwaterloo.ca/signup_email our self-hosted Mattermost]. For username, you can put your questid (i.e. your CSC username), although you can always set your full name as it will appear in Mattermost.&lt;br /&gt;
&lt;br /&gt;
The benefit of Mattermost over Slack and family is that Slack stores all your information on Slack&#039;s servers, wherever they are in the US. They do this so they can sell your data back to you (e.g. not allowing you to see old messages), but Slack is also closed-source even though it was derived from IRC. Mattermost is open-source and hosted on CSC servers.&lt;br /&gt;
&lt;br /&gt;
For iOS users, Mattermost&#039;s mobile app is also a superior option if you wish to receive push notifications as it supports Apple&#039;s native push via iCloud/APN.&lt;br /&gt;
&lt;br /&gt;
== Weechat ==&lt;br /&gt;
&lt;br /&gt;
[[File:Glowing-bear-screencap.png|alt=glowing-bear screen capture of #csc IRC channel|right|thumbnail|450px|A screen capture of the #csc IRC channel, as seen from glowing-bear client]]&lt;br /&gt;
&lt;br /&gt;
[[File:Weechat-Android-screenshot.png|alt=Weechat Android screen capture of #csc IRC channel|right|thumbnail|A screen capture of the #csc IRC channel, as seen from Weechat Android client]]&lt;br /&gt;
&lt;br /&gt;
This method will establish a persistent IRC session that you can connect to with different clients. A [https://weechat.org/ weechat] server program running on a CSClub server will remain connected to IRC networks at all times, and simply connecting to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program will give you all the chat history upon connection.&lt;br /&gt;
&lt;br /&gt;
To set up your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to a CS Club general-use server, such as &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, and run &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; in such a way that it will keep running after you log out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace ctdalek with your username:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh ctdalek@neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ screen -U weechat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;WeeChat&amp;quot; window should have opened up. Type the following commands into this window, replacing [yourpassword] with a password of your choice and [yourport] with a number in the range of [28100-28400]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /set relay.network.password [yourpassword]&lt;br /&gt;
  /relay add weechat [yourport]&lt;br /&gt;
  /save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have entered in all these commands, you don&#039;t need your terminal anymore. You can close your ssh window!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Your personal WeeChat server is set up. Now connect to it using a pretty client:&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.glowing-bear.org/ glowing-bear] is a free and open source web-based weechat client. It works well as a desktop client, and on iOS. To connect using glowing-bear, fill in &amp;quot;Connection Settings&amp;quot; with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;. Make sure to use the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; version of the website with this guide! &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; only works if you set up encryption. That&#039;s not covered here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended&#039;&#039;&#039;: [https://play.google.com/store/apps/details?id=com.ubergeek42.WeechatAndroid Weechat Android] is a free and open source android &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client. It gives notifications when your receive a direct message or your name is mentioned in one of the channels you are in. To connect using Weechat Android, fill in Settings &amp;gt; Connection with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Join the #csc IRC channel&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your weechat client (e.g. glowing-bear or Weechat Android), switch to the &#039;Libera&#039; tab and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /server add libera irc.libera.chat/6697 -ssl -autoconnect&lt;br /&gt;
  /set irc.server.libera.autojoin &amp;quot;#csc&amp;quot;&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;re now connected to the main IRC network! Connected by an SSL connection, so you&#039;re super sneaky as well. Way to go.&lt;br /&gt;
&lt;br /&gt;
Now, to join the CSC channel!&lt;br /&gt;
&lt;br /&gt;
In your client, you&#039;ll now have two buffers that you can switch to. One is called &amp;quot;weechat&amp;quot; and the other is &amp;quot;libera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Switch to the &amp;quot;libera&amp;quot; buffer and type:&lt;br /&gt;
&lt;br /&gt;
   /join #csc&lt;br /&gt;
&lt;br /&gt;
Congratulations you win!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Know some IRC commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the channel! Go ahead and say something, like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Good morning ctdalek http://www.total-knowledge.com/~ilya/mips/ugt.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to privately message someone, use &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /q [nick] [optional message] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will open a new tab with that person. For example &amp;lt;code&amp;gt;/q pj2melan ping pong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you want to join another channel, use &lt;br /&gt;
&amp;lt;pre&amp;gt;  /join [channel]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;Note about CSClub server restarts:&#039;&#039; If &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt; or any server you&#039;re using to run the &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; program on is restarted for any reason (we&#039;ll email you if it does), Make sure to run &amp;lt;code&amp;gt;screen -U weechat&amp;lt;/code&amp;gt; again to start your server. You won&#039;t have to reconfigure &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; (step 2) though.&lt;br /&gt;
&lt;br /&gt;
=== Securing Glowing Bear - SSL/TLS Setup ===&lt;br /&gt;
&lt;br /&gt;
With the default setup, when you log in to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay using a client such as glowing-bear or Weechat Android, &#039;&#039;your password is sent in the clear&#039;&#039;. If you believe this to be a bad thing, follow these steps to enable SSL encryption between you and your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay running on &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt; to generate an SSL certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ mkdir ~/.weechat/ssl&lt;br /&gt;
$ cd ~/.weechat/ssl&lt;br /&gt;
$ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out relay.pem # Fill in the fields as it asks&lt;br /&gt;
$ exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; to use the new certificate you generated, and add a new relay with a different password (since your old password was likely compromised):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client (glowing-bear, or Weechat Android), run&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /set relay.network.password [newpassword]&lt;br /&gt;
 /relay sslcertkey&lt;br /&gt;
 /relay del weechat&lt;br /&gt;
 /relay add ssl.weechat [yourport]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell your client to connect to your relay using SSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For glowing-bear, refresh and simply check the &amp;quot;Encryption. Check settings for help.&amp;quot; checkbox when logging in with your new password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For Weechat Android, in Settings &amp;gt; Connection, change Connection type to WeeChat SSL and change your Relay password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy fully encrypted communication!&lt;br /&gt;
&lt;br /&gt;
You might have warnings about untrusted certificates, but since you made the certificate yourself you can trust yourself and add required security exceptions.&lt;br /&gt;
&lt;br /&gt;
== Quick SSH-based Setup ==&lt;br /&gt;
&lt;br /&gt;
1. Open up an IRC client, i.e. &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt;. Launch &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt; in a screen session, which you&lt;br /&gt;
can return to later.&lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
  $ screen -U irssi&lt;br /&gt;
&lt;br /&gt;
2. In irssi, connect to the libera network and join our channel. &lt;br /&gt;
&lt;br /&gt;
  /server add -auto -net libera -ssl -ssl_verify irc.libera.chat 6697&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
  /join #csc&lt;br /&gt;
&lt;br /&gt;
3. Please set your nickname to your Quest ID so we know who you are.  &lt;br /&gt;
&lt;br /&gt;
  /nick $YOUR_QUEST_ID&lt;br /&gt;
  /save&lt;br /&gt;
&lt;br /&gt;
You can register your nickname on the libera network by messaging NickServ.&lt;br /&gt;
&lt;br /&gt;
  /msg NickServ REGISTER password email &lt;br /&gt;
&lt;br /&gt;
4. Close your screen session, which you can return to later.&lt;br /&gt;
&lt;br /&gt;
  CTRL-A CTRL-D&lt;br /&gt;
&lt;br /&gt;
5. Return to your screen session. You will have remained connected to the channel. &lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca -t &amp;quot;screen -Urd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= syscom =&lt;br /&gt;
&lt;br /&gt;
To kick (and optionally ban) a user:&lt;br /&gt;
&lt;br /&gt;
 /cs op #&amp;lt;channel&amp;gt;&lt;br /&gt;
 /mode #&amp;lt;channel&amp;gt; +b &amp;lt;nick_to_ban&amp;gt;&lt;br /&gt;
 /kick &amp;lt;nick_to_kick&amp;gt;&lt;br /&gt;
 /mode -o &amp;lt;your_nick&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the user need not be banned you can skip the second line. If other accounts from the same user/host should be banned, replace &amp;lt;code&amp;gt;nick_to_ban/kick&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;nick!username@host&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=ZNC&amp;diff=4848</id>
		<title>ZNC</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=ZNC&amp;diff=4848"/>
		<updated>2022-07-30T05:09:40Z</updated>

		<summary type="html">&lt;p&gt;R389li: Fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes client and server setup for ZNC with LDAP authentication.&lt;br /&gt;
If you&#039;re new to IRC, see [[How to IRC]] to get started. For more info on ZNC, see [https://wiki.znc.in/ZNC].&lt;br /&gt;
&lt;br /&gt;
== ZNC setup ==&lt;br /&gt;
These instructions show how to connect to the &amp;lt;code&amp;gt;#csc&amp;lt;/code&amp;gt; channel on libera.chat via ZNC.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Visit the ZNC web portal at [https://znc.csclub.uwaterloo.ca znc.csclub.uwaterloo.ca] and login using your CSC credentials.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Go to &amp;quot;Your Settings&amp;quot;. Under &amp;quot;Networks&amp;quot;, if you do not see a network called &amp;quot;libera&amp;quot;, then click &amp;quot;Add&amp;quot;, type &amp;quot;libera&amp;quot; for the Network Name, edit your nickname if desired, and enter the following into the IRC servers table:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname            Port    SSL&lt;br /&gt;
irc.libera.chat     6697    [Checked]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
(Optional, but recommended): Under the settings for libera, check the box which says &amp;quot;Connect to IRC &amp;amp; automatically re-connect&amp;quot;. This will connect you to Libera as soon as you connect to ZNC.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Set your nick, alt. nick, and ident for libera. Make sure these all have the same value. By default these are set to %user% which will expand to your csc username.&lt;br /&gt;
If you are already logged in to libera with your csc username on a different IRC client, make sure to change your nick here&lt;br /&gt;
as two different connections cannot share the same nick.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under the &amp;quot;channels&amp;quot; section for libera, click &amp;quot;Add&amp;quot;, then enter &amp;lt;code&amp;gt;#csc&amp;lt;/code&amp;gt; in the &amp;quot;Channel Name&amp;quot; field, and check the boxes &amp;quot;Save to config&amp;quot;, &amp;quot;Detached&amp;quot;, and &amp;quot;Enabled&amp;quot;. Click &amp;quot;Add Channel and return&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Now you will connect to ZNC with an IRC client.&lt;br /&gt;
&lt;br /&gt;
== IRC Client setup ==&lt;br /&gt;
=== The Lounge (chat.csclub.uwaterloo.ca) ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under network settings, name can be anything you want.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Server should be set to &amp;lt;code&amp;gt;znc.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, and port &amp;lt;code&amp;gt;6697&amp;lt;/code&amp;gt;. The password is &amp;lt;code&amp;gt;&amp;lt;zncusername&amp;gt;:&amp;lt;zncpassword&amp;gt;&amp;lt;/code&amp;gt;. If you have multiple networks configured, i.e. Libera and Freenode, use &amp;lt;code&amp;gt;&amp;lt;zncusername&amp;gt;/&amp;lt;networkname&amp;gt;:&amp;lt;zncpassword&amp;gt;&amp;lt;/code&amp;gt; for the password. Also set your nick, username and real name.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under Authentication, choose &amp;lt;code&amp;gt;Username + password (SASL PLAIN)&amp;lt;/code&amp;gt;, and enter your LIBERA nick and password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weechat ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/server add myznc znc.csclub.uwaterloo.ca/6697 -username=&amp;lt;CSC_USERNAME&amp;gt;/libera -password=&amp;lt;CSC_PASSWORD&amp;gt; -ssl -autoconnect&lt;br /&gt;
/connect myznc&lt;br /&gt;
/join #csc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Don&#039;t forget to concatenate &amp;quot;/libera&amp;quot; to the end of your username.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If you did not check the autoconnect box, you will need to manually connect using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *status connect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To verify that you are connected to Libera, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *status ListNetworks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;IRC&amp;quot; column should have the value &amp;quot;Yes&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
A modified version of the backlog module [https://wiki.znc.in/Backlog] is enabled globally. To use this, first enable the &amp;lt;kbd&amp;gt;log&amp;lt;/kbd&amp;gt; module for your user via the web UI. You will then be able to request older logs for a channel from your IRC client, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *backlog #csc 42&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that you do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; need to specify the log path.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server setup ==&lt;br /&gt;
Note that the following instructions are about setting up a ZNC instance with support for LDAP authentication, similar to the CSC ZNC, and it is &#039;&#039;not&#039;&#039; about configuring an IRC client to connect to ZNC. For that, see the [[ZNC#Client_setup|Client setup]] section above.&lt;br /&gt;
&lt;br /&gt;
=== saslauthd setup ===&lt;br /&gt;
For LDAP authentication, we use the Cyrusauth module [https://wiki.znc.in/Cyrusauth], which needs to communicate with the SASL authentication daemon (saslauthd).&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
On the server, install the following packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;apt install sasl2-bin ca-certificates&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Open /etc/default/saslauthd, and change the following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
START=yes&lt;br /&gt;
MECHANISM=&amp;quot;ldap&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Paste the following into /etc/saslauthd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldap_servers: ldaps://auth1.csclub.uwaterloo.ca ldaps://auth2.csclub.uwaterloo.ca&lt;br /&gt;
ldap_search_base: ou=People,dc=csclub,dc=uwaterloo,dc=ca&lt;br /&gt;
ldap_filter: (uid=%u)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Start saslauthd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# service saslauthd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Test saslauthd to make sure it&#039;s working:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ testsaslauthd -u &amp;quot;your_csc_username&amp;quot; -p &amp;quot;your_csc_password&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should see a response like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0: OK &amp;quot;Success.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
=== ZNC setup ===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Install ZNC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# apt install znc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Add a user for ZNC and create an initial configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# useradd -s /bin/bash -m znc&lt;br /&gt;
# usermod -a -G sasl znc&lt;br /&gt;
# su - znc&lt;br /&gt;
$ znc --makeconf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the znc user &amp;lt;b&amp;gt;must&amp;lt;/b&amp;gt; be part of the sasl group to communicate with saslauthd.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Visit the web interface at &amp;lt;SERVER_IP&amp;gt;:&amp;lt;PORT&amp;gt;. Note that you may need to modify your browser settings so that you can visit a website at port 6667 or 6697.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Log in using your admin credentials, then go to &amp;quot;Global Settings&amp;quot;. Check the &amp;quot;cyrusauth&amp;quot; box, type &amp;quot;saslauthd&amp;quot; in the arguments input field, then scroll to the bottom and click &amp;quot;Save&amp;quot;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You will now need to connect to ZNC with an IRC client. The commands below assume Weechat is being used, but other clients should be similar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/server add myznc &amp;lt;SERVER_IP&amp;gt;/&amp;lt;PORT&amp;gt; -username=&amp;lt;ADMIN_USERNAME&amp;gt; -password=&amp;lt;ADMIN_PASSWORD&amp;gt;&lt;br /&gt;
/connect myznc&lt;br /&gt;
/msg *Cyrusauth CreateUsers yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will tell ZNC to create a new user on their first login.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You may optionally wish to create users from a template (i.e. dummy) user to share some common per-user settings, such as MaxNetworks. To do this, login to the ZNC web interface as admin and click on &amp;quot;Manage Users&amp;quot;. Add a new user called &amp;quot;dummy&amp;quot; with the desired settings, then click &amp;quot;save&amp;quot;.&lt;br /&gt;
Now open Weechat, login to ZNC as admin, and run the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/msg *Cyrusauth CreateUsers clone dummy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will tell ZNC to clone new users using &amp;quot;dummy&amp;quot; as the template.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You may wish to optionally enable the adminlog module [https://wiki.znc.in/Adminlog] so that you can see who has logged in from where at what time. By default, these logs will be written to a file. To prevent this file from growing too long, install logrotate and paste the following into /etc/logrotate.d/znc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/znc/.znc/moddata/adminlog/znc.log {&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        compress&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will keep rotate logs every week, discarding logs after they have been rotated 4 times.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
=== NGINX tuning ===&lt;br /&gt;
If you are running ZNC behind NGINX as a reverse proxy, keep in mind that by default, NGINX will run one worker process per CPU core. To reduce this, change the following in &amp;lt;kbd&amp;gt;/etc/nginx/nginx.conf&amp;lt;/kbd&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
worker_processes 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=4847</id>
		<title>How to IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=How_to_IRC&amp;diff=4847"/>
		<updated>2022-07-30T05:08:11Z</updated>

		<summary type="html">&lt;p&gt;R389li: Fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Chatting with us =&lt;br /&gt;
&lt;br /&gt;
== The Lounge ==&lt;br /&gt;
We have a web UI for IRC at [https://chat.csclub.uwaterloo.ca The Lounge].&lt;br /&gt;
[[File:The_lounge_screenshot.png|alt=The Lounge screenshot of #csc channel|400px|top|left|thumbnail|A screen capture of the #csc channel, as seen from The Lounge web client]]&lt;br /&gt;
If you are a first-time IRC user, this is by far the easiest way to join.&lt;br /&gt;
The steps are (roughly):&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Login using your CSC credentials. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Follow the prompts to join the Libera server (make sure TLS is enabled). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Type &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Say hi! &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a termcom member, you will need to join the #csc-termcom channel, which requires nick (nickname) registration. To do this, run the following commands in The Lounge (or any IRC client):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/nick my_nickname&lt;br /&gt;
/msg NickServ REGISTER my_password my_email@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in your nickname, password and email as appropriate. You will receive an email from Libera asking you to verify your email address.&lt;br /&gt;
Once you have done so, go back to The Lounge, go the Libera window, click on the three-dots button in the top right corner, and click &amp;quot;Edit this network&amp;quot;. There, you can specify the nick and password which you just created.&lt;br /&gt;
== Mattermost ==&lt;br /&gt;
We self-host [https://mattermost.csclub.uwaterloo.ca/ Mattermost] now, it&#039;s easier to use if you&#039;re not familiar with IRC. If you know how to use IRC, we&#039;re #csc on libera.chat and there should be a #csc bridge that relays messages between #csc and our Mattermost instance.&lt;br /&gt;
&lt;br /&gt;
Both #csc on libera.chat ([https://web.libera.chat/#csc Libera Webchat] or via IRC clients e.g. irssi, weechat) and ~csc on Mattermost are official channels to interact with CSC members!&lt;br /&gt;
&lt;br /&gt;
= Mattermost Setup =&lt;br /&gt;
&lt;br /&gt;
[[File:Mattermost-phone-sample.jpg|alt=Mattermost android screenshot of #csc channel|200px|top|left|thumbnail|A screen capture of the #csc channel, as seen from Mattermost Android client]]&lt;br /&gt;
[[File:Mattermost-csc-sample.png|alt=Mattermost #csc screen capture, including a conversation between members of the channel|200px|top|right|thumbnail|A screen capture of the #csc channel, as seen from Mattermost desktop]]&lt;br /&gt;
&lt;br /&gt;
Make an account at [https://mattermost.csclub.uwaterloo.ca/signup_email our self-hosted Mattermost]. For username, you can put your questid (i.e. your CSC username), although you can always set your full name as it will appear in Mattermost.&lt;br /&gt;
&lt;br /&gt;
The benefit of Mattermost over Slack and family is that Slack stores all your information on Slack&#039;s servers, wherever they are in the US. They do this so they can sell your data back to you (e.g. not allowing you to see old messages), but Slack is also closed-source even though it was derived from IRC. Mattermost is open-source and hosted on CSC servers.&lt;br /&gt;
&lt;br /&gt;
For iOS users, Mattermost&#039;s mobile app is also a superior option if you wish to receive push notifications as it supports Apple&#039;s native push via iCloud/APN.&lt;br /&gt;
&lt;br /&gt;
= IRC Setup =&lt;br /&gt;
&lt;br /&gt;
[[File:Glowing-bear-screencap.png|alt=glowing-bear screen capture of #csc IRC channel|right|thumbnail|450px|A screen capture of the #csc IRC channel, as seen from glowing-bear client]]&lt;br /&gt;
&lt;br /&gt;
[[File:Weechat-Android-screenshot.png|alt=Weechat Android screen capture of #csc IRC channel|right|thumbnail|A screen capture of the #csc IRC channel, as seen from Weechat Android client]]&lt;br /&gt;
&lt;br /&gt;
This method will establish a persistent IRC session that you can connect to with different clients. A [https://weechat.org/ weechat] server program running on a CSClub server will remain connected to IRC networks at all times, and simply connecting to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program will give you all the chat history upon connection.&lt;br /&gt;
&lt;br /&gt;
To set up your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; server program:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to a CS Club general-use server, such as &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, and run &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; in such a way that it will keep running after you log out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace ctdalek with your username:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh ctdalek@neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ screen -U weechat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;WeeChat&amp;quot; window should have opened up. Type the following commands into this window, replacing [yourpassword] with a password of your choice and [yourport] with a number in the range of [28100-28400]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /set relay.network.password [yourpassword]&lt;br /&gt;
  /relay add weechat [yourport]&lt;br /&gt;
  /save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have entered in all these commands, you don&#039;t need your terminal anymore. You can close your ssh window!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Your personal WeeChat server is set up. Now connect to it using a pretty client:&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.glowing-bear.org/ glowing-bear] is a free and open source web-based weechat client. It works well as a desktop client, and on iOS. To connect using glowing-bear, fill in &amp;quot;Connection Settings&amp;quot; with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;. Make sure to use the &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt; version of the website with this guide! &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; only works if you set up encryption. That&#039;s not covered here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended&#039;&#039;&#039;: [https://play.google.com/store/apps/details?id=com.ubergeek42.WeechatAndroid Weechat Android] is a free and open source android &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client. It gives notifications when your receive a direct message or your name is mentioned in one of the channels you are in. To connect using Weechat Android, fill in Settings &amp;gt; Connection with &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[yourport]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[yourpassword]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Join the #csc IRC channel&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your weechat client (e.g. glowing-bear or Weechat Android), switch to the &#039;Libera&#039; tab and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /server add libera irc.libera.chat/6697 -ssl -autoconnect&lt;br /&gt;
  /set irc.server.libera.autojoin &amp;quot;#csc&amp;quot;&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;re now connected to the main IRC network! Connected by an SSL connection, so you&#039;re super sneaky as well. Way to go.&lt;br /&gt;
&lt;br /&gt;
Now, to join the CSC channel!&lt;br /&gt;
&lt;br /&gt;
In your client, you&#039;ll now have two buffers that you can switch to. One is called &amp;quot;weechat&amp;quot; and the other is &amp;quot;libera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Switch to the &amp;quot;libera&amp;quot; buffer and type:&lt;br /&gt;
&lt;br /&gt;
  &amp;gt; /join #csc&lt;br /&gt;
&lt;br /&gt;
Congratulations you win!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Know some IRC commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the channel! Go ahead and say something, like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Good morning ctdalek http://www.total-knowledge.com/~ilya/mips/ugt.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to privately message someone, use &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /q [nick] [optional message] &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will open a new tab with that person. For example &amp;lt;code&amp;gt;/q pj2melan ping pong&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you want to join another channel, use &lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
  /join [channel]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example &amp;lt;code&amp;gt;/join #csc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;Note about CSClub server restarts:&#039;&#039; If &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt; or any server you&#039;re using to run the &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; program on is restarted for any reason (we&#039;ll email you if it does), Make sure to run &amp;lt;code&amp;gt;screen -U weechat&amp;lt;/code&amp;gt; again to start your server. You won&#039;t have to reconfigure &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; (step 2) though.&lt;br /&gt;
&lt;br /&gt;
== Securing Glowing Bear - SSL/TLS Setup ==&lt;br /&gt;
&lt;br /&gt;
With the default setup, when you log in to your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay using a client such as glowing-bear or Weechat Android, &#039;&#039;your password is sent in the clear&#039;&#039;. If you believe this to be a bad thing, follow these steps to enable SSL encryption between you and your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; relay running on &amp;lt;code&amp;gt;neotame&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to &amp;lt;code&amp;gt;neotame.csclub.uwaterloo.ca&amp;lt;/code&amp;gt; to generate an SSL certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
$ mkdir ~/.weechat/ssl&lt;br /&gt;
$ cd ~/.weechat/ssl&lt;br /&gt;
$ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out relay.pem # Fill in the fields as it asks&lt;br /&gt;
$ exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; to use the new certificate you generated, and add a new relay with a different password (since your old password was likely compromised):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In your &amp;lt;code&amp;gt;weechat&amp;lt;/code&amp;gt; client (glowing-bear, or Weechat Android), run&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; /set relay.network.password [newpassword]&lt;br /&gt;
&amp;gt; /relay sslcertkey&lt;br /&gt;
&amp;gt; /relay del weechat&lt;br /&gt;
&amp;gt; /relay add ssl.weechat [yourport]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Tell your client to connect to your relay using SSL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For glowing-bear, refresh and simply check the &amp;quot;Encryption. Check settings for help.&amp;quot; checkbox when logging in with your new password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For Weechat Android, in Settings &amp;gt; Connection, change Connection type to WeeChat SSL and change your Relay password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy fully encrypted communication!&lt;br /&gt;
&lt;br /&gt;
You might have warnings about untrusted certificates, but since you made the certificate yourself you can trust yourself and add required security exceptions.&lt;br /&gt;
&lt;br /&gt;
== Quick SSH-based Setup ==&lt;br /&gt;
&lt;br /&gt;
1. Open up an IRC client, i.e. &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt;. Launch &amp;lt;code&amp;gt;irssi&amp;lt;/code&amp;gt; in a screen session, which you&lt;br /&gt;
can return to later.&lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca&lt;br /&gt;
  $ screen -U irssi&lt;br /&gt;
&lt;br /&gt;
2. In irssi, connect to the libera network and join our channel. &lt;br /&gt;
&lt;br /&gt;
  /server add -auto -net libera -ssl -ssl_verify irc.libera.chat 6697&lt;br /&gt;
  /save&lt;br /&gt;
  /connect libera&lt;br /&gt;
  /join #csc&lt;br /&gt;
&lt;br /&gt;
3. Please set your nickname to your Quest ID so we know who you are.  &lt;br /&gt;
&lt;br /&gt;
  /nick $YOUR_QUEST_ID&lt;br /&gt;
  /save&lt;br /&gt;
&lt;br /&gt;
You can register your nickname on the libera network by messaging NickServ.&lt;br /&gt;
&lt;br /&gt;
  /msg NickServ REGISTER password email &lt;br /&gt;
&lt;br /&gt;
4. Close your screen session, which you can return to later.&lt;br /&gt;
&lt;br /&gt;
  CTRL-A CTRL-D&lt;br /&gt;
&lt;br /&gt;
5. Return to your screen session. You will have remained connected to the channel. &lt;br /&gt;
&lt;br /&gt;
  $ ssh neotame.csclub.uwaterloo.ca -t &amp;quot;screen -Urd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= syscom =&lt;br /&gt;
&lt;br /&gt;
To kick (and optionally ban) a user:&lt;br /&gt;
&lt;br /&gt;
 /cs op #&amp;lt;channel&amp;gt;&lt;br /&gt;
 /mode #&amp;lt;channel&amp;gt; +b &amp;lt;nick_to_ban&amp;gt;&lt;br /&gt;
 /kick &amp;lt;nick_to_kick&amp;gt;&lt;br /&gt;
 /mode -o &amp;lt;your_nick&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the user need not be banned you can skip the second line. If other accounts from the same user/host should be banned, replace &amp;lt;code&amp;gt;nick_to_ban/kick&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;nick!username@host&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4839</id>
		<title>Machine List</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4839"/>
		<updated>2022-07-26T03:53:20Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* guayusa */ Update with NextCloud&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most of our machines are in the E7, F7, G7 and H7 racks (as of Jan. 2022) in the MC 3015 server room. There is an additional rack in the DC 3558 machine room on the third floor. Our office terminals are in the CSC office, in MC 3036/3037.&lt;br /&gt;
&lt;br /&gt;
= Web Server =&lt;br /&gt;
You are highly encouraged to avoid running anything that&#039;s not directly related to your CSC webspace on our web server. We have plenty of general-use machines; please use those instead. You can even edit web pages from any other machine--usually the only reason you&#039;d *need* to be on caffeine is for database access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;caffeine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Caffeine is the Computer Science Club&#039;s web server. It serves websites, databases for websites, and a large amount of other services.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently a virtual machine hosted on phosphoric-acid&lt;br /&gt;
** 12 vCPUs&lt;br /&gt;
** 32GB of RAM&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Club and member web sites with [[Apache]]&lt;br /&gt;
* [[MySQL]] databases&lt;br /&gt;
* [[PostgreSQL]] databases&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
* mail was migrated to [[#mail|mail]]&lt;br /&gt;
&lt;br /&gt;
= General-Use Servers =&lt;br /&gt;
&lt;br /&gt;
These machines can be used for (nearly) anything you like (though be polite and remember that these are shared machines). Recall that when you signed the Machine Usage Agreement, you promised not to use these machines to generate profit (so no cryptocurrency mining).&lt;br /&gt;
&lt;br /&gt;
For computationally-intensive jobs (CPU/memory bound) we recommend running on high-fructose-corn-syrup, carbonated-water, sorbitol, mannitol, or corn-syrup, listed in roughly decreasing order of available resources. For low-intensity interactive jobs, such as IRC clients, we recommend running on neotame. If you have a long-running computationally intensive job, it&#039;s good to nice[https://en.wikipedia.org/wiki/Nice_(Unix)] your process, and possibly let syscom know too.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
PowerEdge 2950&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 × Intel Xeon E5405 (2.00 GHz, 4 cores each)&lt;br /&gt;
* 32 GB RAM&lt;br /&gt;
* eth0 (&amp;quot;Gb0&amp;quot;) mac addr 00:24:e8:52:41:27&lt;br /&gt;
* eth1 (&amp;quot;Gb1&amp;quot;) mac addr 00:24:e8:52:41:29&lt;br /&gt;
* IPMI mac addr 00:24:e8:52:41:2b&lt;br /&gt;
* 3 &amp;amp;times; Western-Digital 160GB SATA hard drive (445 GB software RAID0 array)&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* Use eth0/Gb0 for the mathstudentorgsnet connection&lt;br /&gt;
* has ipmi on corn-syrup-ipmi.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Hosts 1 TB &amp;lt;tt&amp;gt;[[scratch|/scratch]]&amp;lt;/tt&amp;gt; and exports via NFS (sec=krb5)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;high-fructose-corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
High-fructose-corn-syrup (or hfcs) is a large SuperMicro server. It&#039;s been in CSC service since April 2012.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6272 (2.4 GHz, 16 cores each)&lt;br /&gt;
* 192 GB RAM&lt;br /&gt;
* Supermicro H8QGi+-F Motherboard Quad 1944-pin Socket [http://csclub.uwaterloo.ca/misc/manuals/motherboard-H8QGI+-F.pdf (Manual)]&lt;br /&gt;
* 500 GB Seagate Barracuda&lt;br /&gt;
* Supermicro Case Rackmount CSE-748TQ-R1400B 4U [http://csclub.uwaterloo.ca/misc/manuals/SC748.pdf (Manual)]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;carbonated-water&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
carbonated-water is a Dell R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6176 processors (2.3 GHz, 12 cores each)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;neotame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
neotame is a SuperMicro server funded by MEF. It is the successor to taurine.&lt;br /&gt;
&lt;br /&gt;
We discourage running computationally-intensive jobs on neotame as many users run interactive applications such as IRC clients on it and any significant service degradation will be more likely to affect other users (who will probably notice right away).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* SSH server also listens on ports 21, 22, 53, 80, 81, 443, 8000, 8080 for your convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sorbitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sorbitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mannitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mannitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
= Office Terminals =&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to SSH into these machines, but we discourage you from trying to use these machines when you&#039;re not sitting in front of them. They are bounced at least every time our login manager, lightdm, throws a tantrum (which is several times a day). These are for use inside our physical office.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;bit-shifter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
bit-shifter is an office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel(R) Core(TM)2 Quad CPU    Q8300&lt;br /&gt;
* 4GB RAM&lt;br /&gt;
* Nvidia GeForce GT 440&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Jacob Parker&#039;s Firewire Card&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;gwem&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
gwem is an office terminal that was created because AMD donated a graphics card. It entered CSC service in February 2012.&lt;br /&gt;
&lt;br /&gt;
=== Specs ===&lt;br /&gt;
&lt;br /&gt;
* AMD FX-8150 3.6GHz 8-Core CPU&lt;br /&gt;
* 16 GB RAM&lt;br /&gt;
* AMD Radeon 6870 HD 1GB GPU&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ga-990fxa-ud7_e.pdf Gigabyte GA-990FXA-UD7] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;maltodextrin&#039;&#039; ==&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
Maltodextrin is an office terminal. It was upgraded in Spring 2014 after an unidentified failure.&lt;br /&gt;
Not operational (no video output) as of July 2022.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i3-4130 @ 3.40 GHz&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/E8425_H81I_PLUS.pdf ASUS H81-PLUS] Motherboard&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;natural-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Natural-flavours is an office terminal; it used to be our mirror.&lt;br /&gt;
&lt;br /&gt;
In Fall 2016, it received a major upgrade thanks the MathSoc&#039;s Capital Improvement Fund.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i7-6700k&lt;br /&gt;
* 2x8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Cup Holder (DVD drive has power, but not connected to mother board)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;strombola&#039;&#039;==&lt;br /&gt;
It is named after Gordon Strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Core2 Quad Q8200 @ 2.33GHz&lt;br /&gt;
* 4 GB RAM&lt;br /&gt;
* nVidia GeForce 8600 GTS&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/strombola.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Strombola used to have integrated 5.1 channel sound before we got new speakers and moved audio stuff to nullsleep.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;nullsleep&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
nullsleep is an [http://csclub.uwaterloo.ca/misc/manuals/ASRock_ION_330.pdf ASRock ION 330] machine given to us by CSCF and funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel® Dual Core Atom™ 330&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* NVIDIA® ION™ graphics&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* DVD Burner&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Nullsleep has the office speakers (a pair of nice studio monitors) currently connected to it.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
Nullsleep runs MPD for playing music. Control of MPD is available only to users in the &amp;quot;audio&amp;quot; group.&lt;br /&gt;
Music is located in /music on the office terminals&lt;br /&gt;
&lt;br /&gt;
= Progcom Only =&lt;br /&gt;
The Programme Committee has access to a VM on corn-syrup called &#039;progcom&#039;. They have sudo rights in this VM so they may install and run their own software inside it. This VM should only be accessible by members of progcom or syscom.&lt;br /&gt;
&lt;br /&gt;
= Syscom Only =&lt;br /&gt;
&lt;br /&gt;
The following systems may only be accessible to members of the [[Systems Committee]] for a variety of reasons; the most common of which being that some of these machines host [[Kerberos]] authentication services for the CSC.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;xylitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
xylitol is a Dell PowerEdge R815 donated by CSCF. It is primarily a container host for services previously hosted on aspartame and dextrose, including munin, rt, mathnews, auth1, and dns1. It was provisioned with the intent to replace both of those hosts.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Dual AMD Opteron 6176 (2.3 GHz, 48 cores total)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 500GB volume group on RAID1 SSD (xylitol-mirrored)&lt;br /&gt;
* 500ish-GB volume group on RAID10 HDD (xylitol-raidten)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth1&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] primary&lt;br /&gt;
* [[Kerberos]] primary&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chat&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* The Lounge web IRC client (https://chat.csclub.uwaterloo.ca)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phosphoric-acid&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phosphoric-acid is a Dell PowerEdge R815 donated by CSCF and is a clone of xylitol. It may be used to provide redundant cloud services in the future.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[#caffeine|caffeine]]&lt;br /&gt;
* [[#coffee|coffee]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;coffee&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine running on phosphoric-acid.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Database#MySQL|MySQL]]&lt;br /&gt;
* [[Database#Postgres|Postgres]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;cobalamin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Dell PowerEdge 2950 donated to us by FEDS. Located in the Science machine room on the first floor of Physics. Will act as a backup server for many things.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 1 × Intel Xeon E5420 (2.50 GHz, 4 cores)&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Broadcom NetworkXtreme II&lt;br /&gt;
* 2x73GB Hard Drives, hardware RAID1&lt;br /&gt;
** Soon to be 2x1TB in MegaRAID1&lt;br /&gt;
* http://www.dell.com/support/home/ca/en/cabsdt1/product-support/servicetag/51TYRG1/configuration&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Containers: [[#auth2|auth2]]&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* The network card requires non-free drivers. Be sure to use an installation disc with non-free.&lt;br /&gt;
&lt;br /&gt;
* We have separate IP ranges for cobalamin and its containers because the machine is located in a different building. They are:&lt;br /&gt;
&lt;br /&gt;
** VLAN ID 506 (csc-data1): 129.97.18.16/29; gateway 129.97.18.17; mask 255.255.255.240&lt;br /&gt;
** VLAN ID 504 (csc-ipmi): 172.19.5.24/29; gateway 172.19.5.25; mask 255.255.255.248&lt;br /&gt;
&lt;br /&gt;
* For some reason, the keyboard is shit. Try to avoid having to use it. It&#039;s doable, but painful. IPMI works now, and then we don&#039;t need to bug about physical access so it&#039;s better anyway.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth2&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#cobalamin|cobalamin]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] secondary&lt;br /&gt;
* [[Kerberos]] secondary&lt;br /&gt;
&lt;br /&gt;
MAC Address: c2:c0:00:00:00:a2&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mail&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mail is the CSC&#039;s mail server. It hosts mail delivery, imap(s), smtp(s), and mailman. It is also syscom-only. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#biloba|biloba]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mail]] services&lt;br /&gt;
* mailman (web interface at [http://mailman.csclub.uwaterloo.ca/])&lt;br /&gt;
* [[Webmail]]&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-benzoate is our previous mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
It is currently sitting in the office pending repurposing. Will likely become a machine for backups in DC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon Quad Core E5405 @ 2.00 GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* vg0: 228 GB block device behind DELL PERC 6/i (contains root partition)&lt;br /&gt;
&lt;br /&gt;
Space disks are currently in the office underneath maltodextrin.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate is our mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 36 drive Supermicro chassis (SSG-6048R-E1CR36L) &lt;br /&gt;
* 1 x Intel Xeon E5-2630 (8 cores, 2.40 GHz)&lt;br /&gt;
* 64 GB (4 x 16GB) of DDR4 (2133Mhz)  ECC RAM&lt;br /&gt;
* 2 x 1 TB Samsung Evo 850 SSD drives&lt;br /&gt;
* 17 x 4 TB Western Digital Gold drives (separate funding from MEF)&lt;br /&gt;
* 10 Gbps SFP+ card (loaned from CSCF)&lt;br /&gt;
* 50 Gbps Mellanox QSFP card (from ginkgo; currently unconnected)&lt;br /&gt;
&lt;br /&gt;
==== Network Connections ====&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate has two connections to our network:&lt;br /&gt;
&lt;br /&gt;
* 1 Gbps to our switch (used for management)&lt;br /&gt;
* 2 x 10 Gbps (LACP bond) to mc-rt-3015-mso-a (for mirror)&lt;br /&gt;
&lt;br /&gt;
Mirror&#039;s bandwidth is limited to 1 Gbps on each of the 4 campus internet links. Mirror&#039;s bandwidth is not limited on campus.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mirror]]&lt;br /&gt;
* [[Talks]] mirror&lt;br /&gt;
* [[Debian_Repository|CSClub packages repository]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;munin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
munin is a syscom-only monitoring and accounting machine. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#xylitol|xylitol]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://munin.csclub.uwaterloo.ca munin] systems monitoring daemon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;yerba-mate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 Hz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* test-ipv6 (test-ipv6.csclub.uwaterloo.ca; a test-ipv6.com mirror)&lt;br /&gt;
* mattermost (under development)&lt;br /&gt;
* shibboleth (under development)&lt;br /&gt;
&lt;br /&gt;
Also used for experimenting new CSC services.&lt;br /&gt;
&lt;br /&gt;
= Cloud =&lt;br /&gt;
&lt;br /&gt;
These machines are used by [https://cloud.csclub.uwaterloo.ca cloud.csclub.uwaterloo.ca]. The machines themselves are restricted to Syscom only access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chamomile&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x 2.20GHz 12-core processors&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack primary controller services for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;riboflavin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R515 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 2.6 GHz 8-core processors&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
* 2x 500GB internal SSD&lt;br /&gt;
* 12x Seagate 4TB SSHD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack block and object storage for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;guayusa&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 GHz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2TB PCI-Express Flash SSD&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
Currently being used to set up NextCloud.&lt;br /&gt;
&lt;br /&gt;
Was used to experiment the following then-new CSC services:&lt;br /&gt;
&lt;br /&gt;
* logstash (testing of logstash)&lt;br /&gt;
* load-balancer-01&lt;br /&gt;
* cifs (for booting ginkgo from CD)&lt;br /&gt;
* caffeine-01 (testing of multi-node caffeine)&lt;br /&gt;
* block1.cloud&lt;br /&gt;
* object1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginkgo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by MEF for CSC web hosting. Locate in MC 3015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2697 v4 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 256GB RAM&lt;br /&gt;
* 2 x 1.2 TB SSD (400GB of each for RAID 1)&lt;br /&gt;
* 10GbE onboard, 25GbE SFP+ card (also included 50GbE SFP+ card which will probably go in mirror)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* controller1.cloud&lt;br /&gt;
* db1.cloud&lt;br /&gt;
* router1.cloud (NAT for cloud tenant network)&lt;br /&gt;
* network1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;biloba&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by SLEF for CSC web hosting. Located in DC 3558.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon Gold 6140 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 384GB RAM&lt;br /&gt;
* 12 3.5&amp;quot; Hot Swap Drive Bays&lt;br /&gt;
** 2 x 480 GB SSD&lt;br /&gt;
* 10GbE onboard, 10GbE SFP+ card (on loan from CSCF)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* caffeine&lt;br /&gt;
* mail&lt;br /&gt;
* mattermost&lt;br /&gt;
&lt;br /&gt;
= Storage =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs00&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs00 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs01&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs01 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;goto80&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a small ARM machine we picked up in order to have similar hardware to the Real Time Operating Systems (CS 452) course. It has a [[TS-7800_JTAG|JTAG]] interface. Located in the office on the top shelf above strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 500 MHz Feroceon (ARM926ej-s compatible) processor&lt;br /&gt;
* ARMv5TEJ architecture&lt;br /&gt;
&lt;br /&gt;
Use -march=armv5te -mtune=arm926ej-s options to GCC.&lt;br /&gt;
&lt;br /&gt;
For information on the TS-7800&#039;s hardware see here:&lt;br /&gt;
http://www.embeddedarm.com/products/board-detail.php?product=ts-7800&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;binaerpilot&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Tobi expansion board. It is currently attached to corn-syrup in the machine room and even more currently turned off until someone can figure out what is wrong with it.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;anamanaguchi&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Chestnut43 expansion board. It is currently in the hardware drawer in the CSC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;digital cutter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
See [[Digital Cutter|here]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mathnews&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[#xylitol|xylitol]] hosts a systemd-nspawn container which serves as the mathNEWS webserver. It is administered by mathNEWS, as a pilot for providing containers to select groups who have more specialized demands than the general-use infrastructure can meet.&lt;br /&gt;
&lt;br /&gt;
= Decommissioned =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;aspartame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
aspartame was a taurine clone donated by CSCF. It was once our primary file server, serving as the gateway interface to space on phlogiston. It also used to host the [[#auth1|auth1]] container, which has been temporarily moved to [[#dextrose|dextrose]]. Decomissioned in March 2021 after refusing to boot following a power outage.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;psilodump&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
psilodump is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling phlogiston, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
psilodump was plugged into aspartame. It&#039;s still installed but inaccessible.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phlogiston&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phlogiston is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling psilodump, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
phlogiston is turned off and should remain that way. It is misconfigured to have its drives overlap with those owned by psilodump, and if it is turned on, it will likely cause irreparable data loss.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 10GB RAM&lt;br /&gt;
&lt;br /&gt;
==== Notes from before decommissioning ====&lt;br /&gt;
&lt;br /&gt;
* The lxc files are still present and should not be started up, or else the two copies of auth1 will collide.&lt;br /&gt;
* It currently cannot route the 10.0.0.0/8 block to a misconfiguration on the NetApp. This should be fixed at some point.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;glomag&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Glomag hosted [[#caffeine|caffeine]]. Decommissioned April 6, 2018.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon X3450 @ 2.67 GHz&lt;br /&gt;
* 6 GB RAM&lt;br /&gt;
* vg0: 465 GB software RAID1 (contains root partition):&lt;br /&gt;
** 750 GB Seagate Barracuda SATA hard drive&lt;br /&gt;
** 500 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
* vg1: 596 GB software RAID1 (contains caffeine):&lt;br /&gt;
** 2 &amp;amp;times; 640 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Before its decommissioning, glomag hosted [[#caffeine|caffeine]], [[#mail|mail]], and [[#munin|munin]] as [[Virtualization#Linux_Container|Linux containers]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;Lisp machine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Symbolics XL1200 Lisp machine. Donated to a new home when we couldn&#039;t get it working.&lt;br /&gt;
&lt;br /&gt;
http://www.globalnerdy.com/2008/12/03/symbolics-xl1200-lisp-machine-free-to-a-good-home/ for some history on this hardware.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
Currently inoperable due to (at least) a missing console cable.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginseng&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ginseng used to be our fileserver, before aspartame and the netapp took over.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Pentium Dual Core E2180&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/s3000ah_tps_1_1.pdf Intel S3000AHV Motherboard]&lt;br /&gt;
* 4 &amp;amp;times; 640 GB Western-Digital Caviar Blue in [http://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_10_.28RAID_1.2B0.29 RAID 10] behind a [http://www.3ware.com/products/serial_ata2-9650.asp 3ware 9650SE RAID card].&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;calum&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Calum used to be our main server and was named after Calum T Dalek.  Purchased new by the club in 1994. &lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* SPARCserver 10 (headless SPARCstation 10)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;paza&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An iMac G3 that was used as a dumb terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 233Mhz PowerPC 740/750&lt;br /&gt;
* 96 MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;romana&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Romana was a BeBox that has been in the CSC&#039;s possession since long before BeOS became defunct.&lt;br /&gt;
&lt;br /&gt;
Confirmed on March 19th, 2016 to be fully functional. An SSHv1 compatible client was installed from http://www.abstrakt.ch/be/ and a compatible firewalled daemon was started on Sucrose (living in /root, prefix is /root/ssh-romana). The insecure daemon is to be used a bastion host to jump to hosts only supporting &amp;gt;=SSHv2. The mail daemon on the BeBox has also been configured to send mail through mail.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 PowerPC based processors&lt;br /&gt;
* Stylish Blinken processor-load lights&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-citrate was an SGI O2 machine.&lt;br /&gt;
&lt;br /&gt;
In order to net boot you need to set /proc/sys/net/ipv4/ip_no_pmtu_disc to 1. When the O2 boots, hit F5 at the boot menu and type bootp():.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* SGI O2 MIPS processor&lt;br /&gt;
* 423 MB (?) RAM&lt;br /&gt;
* 2 &amp;amp;times; 2 GB hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;acesulfame-potassium&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An old office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium 4 2.67GHz&lt;br /&gt;
* 1GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ABIT_VT7.pdf ABIT VT7] Motherboard&lt;br /&gt;
* ATI Radeon 7000&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;skynet&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
skynet was a Sun E6500 machine donated by Sanjay Singh. It was never fully set up.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 15 full CPU/memory boards&lt;br /&gt;
** 2x UltraSPARC II 464MHz / 8MB Cache Processors&lt;br /&gt;
** ??? RAM?&lt;br /&gt;
* 1 I/O board (type=???)&lt;br /&gt;
** ???x disks?&lt;br /&gt;
* 1 CD-ROM drive&lt;br /&gt;
&lt;br /&gt;
* [http://mirror.csclub.uwaterloo.ca/csclub/sun_e6500/ent6k.srvr/ e6500 documentation (hosted on mirror, currently dead link)]&lt;br /&gt;
* [http://docs.oracle.com/cd/E19095-01/ent6k.srvr/ e6500 documentation (backup link)]&lt;br /&gt;
* [http://www.e6500.com/ e6500]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;freebsd&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
FreeBSD was a virtual machine with FreeBSD installed.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Newer software&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;rainbowdragoneyes&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Rainbowdragoneyes was our Lemote Fuloong MIPS machine. This machine is aliased to rde.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 800MHz MIPS Loongson 2f CPU&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;denardo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Due to some instability, general uselessness, and the acquisition of a more powerful SPARC machine from MFCF, denardo was decommissioned in February 2015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Sun Fire V210&lt;br /&gt;
* TI UltraSparc IIIi (Jalapeño)&lt;br /&gt;
* 2 GB RAM&lt;br /&gt;
* 160 GB RAID array&lt;br /&gt;
* ALOM on denardo-alom.csclub can be used to power machine on/off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;artificial-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Artificial-flavours was our secondary (backup services) server. It used to be an office terminal. It was decommissioned in February 2015 and transferred to the ownership of Women in Computer Science (WiCS).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Celeron 3.2GHz&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/Biostar_P4M80-M4.pdf Biostar P4M80-M4] Motherboard&lt;br /&gt;
* Western-Digital 80 GB ATA hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Potassium-citrate is a dual-processor Alpha machine. It is on extended loan from pbarfuss.&lt;br /&gt;
&lt;br /&gt;
It is temporarily decommissioned pending the reinstallation of a supported operating system (such as OpenBSD).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Alphaserver CS20 (2 833MHz EV68al CPUs)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
* 36 GB Seagate SCSI hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-nitrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This was a Sun Fire E2900 from a decommissioned MFCF compute cluster. It had a SPARC architecture and ran OpenBSD, unlike many of our other systems which are x86/x86-64 and Linux/Debian. After multiple unsuccessful attempts to boot a modern Linux kernel and possible hardware instability, it was determined to be non-cost-effective and non-effort-effective to put more work into running this machine. The system was reclaimed by MFCF where someone from CS had better luck running a suitable operating system (probably Solaris).&lt;br /&gt;
&lt;br /&gt;
The name is from saltpetre, because sparks.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 24 CPUs&lt;br /&gt;
* 90GB main memory&lt;br /&gt;
* 400GB scratch disk local storage in /scratch-potassium-nitrate&lt;br /&gt;
&lt;br /&gt;
There is a [[Sun 2900 Strategy Guide|setup guide]] available for this machine.&lt;br /&gt;
&lt;br /&gt;
See also [[Sun 2900]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;taurine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: On August 21, 2019, just before 2:30PM EDT, we were informed that taurine caught fire&#039;&#039;&#039;. As a result, taurine has been decommissioned as of Fall 2019.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 136 GB LVM volume group&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Virtual machines&lt;br /&gt;
* BitlBee IRC instant messaging gateway (localhost only)&lt;br /&gt;
* [[ident]] server to maintain high connection cap to freenode&lt;br /&gt;
* Runs ssh on ports 21,22,53,80,81,443,8000,8080 for user&#039;s convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;dextrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
dextrose was a [[#taurine|taurine]] clone donated by CSCF and was decommissioned in Fall 2019 after being replaced with a more powerful server.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sucrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sucrose was a [[#taurine|taurine]] clone donated by CSCF. It was decommissioned in Fall 2019 following multiple hardware failures.&lt;br /&gt;
&lt;br /&gt;
= UPS =&lt;br /&gt;
&lt;br /&gt;
All of the machines in the MC 3015 machine room are connected to one of our UPSs.&lt;br /&gt;
&lt;br /&gt;
All of our UPSs can be monitored via CSCF:&lt;br /&gt;
&lt;br /&gt;
* MC3015-UPS-B2&lt;br /&gt;
* mc-3015-e7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced July 2014) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-e7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-f7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced Feb 2017) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-f7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2010) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2004) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
&lt;br /&gt;
We will receive email alerts for any issues with the UPS. Their status can be monitored via [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
TODO: Fix labels &amp;amp; verify info is correct &amp;amp; figure out why we can&#039;t talk to cacti.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4833</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4833"/>
		<updated>2022-07-02T01:09:11Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* Spring */ Add s97arora to FR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (IMAPd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
Progcom: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 TR:&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
*Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 Librarian: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 Webmaster: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP: &lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: bioster&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 Librarian: Ryan Golbeck&lt;br /&gt;
 Webmaster: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 Librarian: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
 SA: &lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 Webmaster: jnopporn&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 Librarian: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
&lt;br /&gt;
 Keyed office staffers: j3camero,jdonland,m2ellis,mimcpher,nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LIB: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LIB: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 IMAPD: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LIB: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LIB: Aishwarya Gupta (a72gupta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LIB: Yomna Nasser (ynasser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray&lt;br /&gt;
drove all CSC activity virtual. Though everyone thought the pandemic would&lt;br /&gt;
quickly be over, the Alpha, then Delta, then Omicron variants resulted in&lt;br /&gt;
the majority of classes being held online until February 2022. As a result,&lt;br /&gt;
the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;br /&gt;
 LI: Santiago Montemayor (smontema) (appointed 2022-06-02)&lt;br /&gt;
 FR: Sat Arora (s97arora) (appointed 2022-06-23)&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Printing&amp;diff=4820</id>
		<title>Printing</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Printing&amp;diff=4820"/>
		<updated>2022-06-10T01:09:33Z</updated>

		<summary type="html">&lt;p&gt;R389li: Undo revision 4819 by R389li (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setting up printers =&lt;br /&gt;
&lt;br /&gt;
We support the MathSoc printer on our office terminals. Users may also wish to print to uPrint via their browsers.&lt;br /&gt;
&lt;br /&gt;
== MathSoc Printer ==&lt;br /&gt;
&lt;br /&gt;
The new MathSoc Printer is a Brother MFC-L8900CDW. Its hostname is lp-mc3038.mathsoc.uwaterloo.ca and its IP is 172.19.4.99/28, the CSC manages the 172.19.4.96/28 subnet/VLAN for printers and other similar devices. The IP address is assigned by our DHCP server and the port is assigned to the correct VLAN for this subnet. If MathSoc upgrades their printer, they will have to contact us to reconfigure the port/DHCP.&lt;br /&gt;
&lt;br /&gt;
The CSC&#039;s office terminals&#039; CUPS servers have these printers configured to use the &amp;quot;Brother MFC9840CDW Foomatic/Postscript&amp;quot; driver. It seems to work fine.&lt;br /&gt;
&lt;br /&gt;
= Setting up CUPS, the printing subsystem =&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;cups&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Go to &amp;lt;tt&amp;gt;http://localhost:631/&amp;lt;/tt&amp;gt;. Go to &#039;Add Printer&#039;. You may need to supply the root username/password.&lt;br /&gt;
# Click &#039;Internet Printing Protocol (ipp)&#039;. CSC doesn&#039;t have any local printers, chances are all printers are connected via LAN. If it is LAN, then it is ipp.&lt;br /&gt;
# Enter connection, name, and description of the printer.&lt;br /&gt;
&lt;br /&gt;
If there is a machine with printing already properly set up, you may copy the file /etc/cups/printers.conf to the corresponding location on machines that aren&#039;t set up. Ensure that you stop CUPS (sudo service cups stop) on the fresh machine before copying over printers.conf (and don&#039;t forget to start it again afterward).&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Printing&amp;diff=4819</id>
		<title>Printing</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Printing&amp;diff=4819"/>
		<updated>2022-06-09T22:41:25Z</updated>

		<summary type="html">&lt;p&gt;R389li: Update MathSoc printer IP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setting up printers =&lt;br /&gt;
&lt;br /&gt;
We support the MathSoc printer on our office terminals. Users may also wish to print to uPrint via their browsers.&lt;br /&gt;
&lt;br /&gt;
== MathSoc Printer ==&lt;br /&gt;
&lt;br /&gt;
The new MathSoc Printer is a Brother MFC-L8900CDW. Its hostname is lp-mc3038.mathsoc.uwaterloo.ca and its IP is 172.14.4.99/28, the CSC manages the 172.19.4.96/28 subnet/VLAN for printers and other similar devices. The IP address is assigned by our DHCP server and the port is assigned to the correct VLAN for this subnet. If MathSoc upgrades their printer, they will have to contact us to reconfigure the port/DHCP.&lt;br /&gt;
&lt;br /&gt;
The CSC&#039;s office terminals&#039; CUPS servers have these printers configured to use the &amp;quot;Brother MFC9840CDW Foomatic/Postscript&amp;quot; driver. It seems to work fine.&lt;br /&gt;
&lt;br /&gt;
= Setting up CUPS, the printing subsystem =&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;cups&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Go to &amp;lt;tt&amp;gt;http://localhost:631/&amp;lt;/tt&amp;gt;. Go to &#039;Add Printer&#039;. You may need to supply the root username/password.&lt;br /&gt;
# Click &#039;Internet Printing Protocol (ipp)&#039;. CSC doesn&#039;t have any local printers, chances are all printers are connected via LAN. If it is LAN, then it is ipp.&lt;br /&gt;
# Enter connection, name, and description of the printer.&lt;br /&gt;
&lt;br /&gt;
If there is a machine with printing already properly set up, you may copy the file /etc/cups/printers.conf to the corresponding location on machines that aren&#039;t set up. Ensure that you stop CUPS (sudo service cups stop) on the fresh machine before copying over printers.conf (and don&#039;t forget to start it again afterward).&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4817</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4817"/>
		<updated>2022-06-07T02:17:32Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* S22 */ add smontema&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (Imapd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
Progcom: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 TR:&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
*Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 Librarian: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 Webmaster: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP: &lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: bioster&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 Librarian: Ryan Golbeck&lt;br /&gt;
 Webmaster: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 Librarian: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
 SA: &lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 Webmaster: jnopporn&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 Librarian: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
&lt;br /&gt;
 Keyed office staffers: j3camero,jdonland,m2ellis,mimcpher,nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LIB: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LIB: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 IMAPD: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LIB: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LIB: Aishwarya Gupta (a72gupta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LIB: Yomna Nasser (ynasser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray&lt;br /&gt;
drove all CSC activity virtual. Though everyone thought the pandemic would&lt;br /&gt;
quickly be over, the Alpha, then Delta, then Omicron variants resulted in&lt;br /&gt;
the majority of classes being held online until February 2022. As a result,&lt;br /&gt;
the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;br /&gt;
 LI: Santiago Montemayor (smontema) (appointed 2022=06=02)&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Sysadmin_Guide&amp;diff=4814</id>
		<title>Sysadmin Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Sysadmin_Guide&amp;diff=4814"/>
		<updated>2022-06-05T00:50:44Z</updated>

		<summary type="html">&lt;p&gt;R389li: Members don&amp;#039;t get top-level UW subdomains&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The system administrator chairs the [[Systems Committee]], and is responsible for keeping all of our computers in working order. The CSC computing environment is good, but not nearly perfect, and the sysadmin should look for ways to improve it. We don&#039;t have a strict &amp;quot;if it works, don&#039;t touch it&amp;quot; policy, and encourage people to try new things to see if they work better. Because of this, we don&#039;t have &amp;quot;5 nines&amp;quot; uptime or anything close, but do have a modern computing environment that is constantly improving. Our systems should be, and often are, better at the end of term than the beginning.&lt;br /&gt;
&lt;br /&gt;
Early in the term, the sysadmin should consider what hardware upgrades we would like to have, and send proposals to the treasurer to add to the budget. A bit later, this happens again with MEF proposals.&lt;br /&gt;
&lt;br /&gt;
The sysadmin should also make sure requests by our users (to systems-committee@csclub) are answered, and make recommendations to the Executive Council to add new systems committee members or reevaluate old ones.&lt;br /&gt;
&lt;br /&gt;
=== Power Outages ===&lt;br /&gt;
Occasionally MC will undergo planned power outages. These usually last from the morning until the evening. a2brenna or someone from IST will hopefully give us a notice in advance. When this happens, you should:&lt;br /&gt;
==== Pre-Outage ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Send an email to csc-general announcing the outage (example [https://mailman.csclub.uwaterloo.ca/private/csc-general/2016-November/000694.html here])&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Create an announcement on our main website announcing the outage&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Announce the outage in the #csc IRC channel and update the channel topic to show outage information&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Schedule the shutdown the night before the outage using the &amp;lt;code&amp;gt;shutdown&amp;lt;/code&amp;gt; command on all of our MC machines, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo shutdown 06:00 &amp;quot;CSC systems will be unavailable for a power outage 7am -&amp;gt; 5pm. This machine will shutdown at 6:00AM EDT.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If the real machines hosting the web server (phosphoric-acid) and mirror (potassium-benzoate) cannot be kept up during the outage,&lt;br /&gt;
set up a backup web server in an LXC container on a machine which is not located in MC (currently there is a container named dr-website&lt;br /&gt;
on biloba). &#039;&#039;&#039;After&#039;&#039;&#039; the MC machines have shutdown, assign the IP addresses of csclub.uwaterloo.ca and mirror.csclub.uwaterloo.ca to&lt;br /&gt;
the backup container.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
TODO: Consider using keepalived to automate this process.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Post-Outage ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Log back into each MC machine and make sure that &amp;lt;code&amp;gt;/users&amp;lt;/code&amp;gt; was mounted correctly. If not, check /etc/network/interfaces to get the name of the VLAN device, and use &amp;lt;code&amp;gt;ip addr&amp;lt;/code&amp;gt; to see if the interface is up. If it is not up, try to use ifup; if that doesn&#039;t work, manually bring up the device and assign it the appropriate IP addresses using iproute2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# check /etc/network/interfaces for the interface name and IP&lt;br /&gt;
ip link add name ens3.530 link ens3 type vlan id 530&lt;br /&gt;
ip addr add dev ens3.530 172.19.168.49/27&lt;br /&gt;
ip addr add dev ens3.530 fd74:6b6a:8eca:4903:c5c::49/64&lt;br /&gt;
ip link set dev ens3.530 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Let&#039;s Encrypt certificates ===&lt;br /&gt;
Make sure to read [[SSL]] first.&lt;br /&gt;
&lt;br /&gt;
We handle LE certs for members and clubs who host their websites on our servers. The certs should be renewed automatically; if they do not, then something is very wrong. There are plans underway to migrate from &amp;lt;code&amp;gt;certbot&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;dehydrate&amp;lt;/code&amp;gt; since the apt version of certbot appears to be broken.&lt;br /&gt;
&lt;br /&gt;
If you get an email LE warning you that a cert is about to expire, login to caffeine and check /var/log/letsencrypt/letsencrypt.log. There should usually be some clue as to what went wrong. Often, a club or member decides that they no longer want to host their website on our servers, in which case the cert can safely be removed via &amp;lt;code&amp;gt;certbot delete --cert-name CERT_NAME&amp;lt;/code&amp;gt;. Make sure to also delete the corresponding Apache config files. Sometimes a subset of the domains for a member have become invalid, in which case they must be removed from the cert. One way to do this is via &amp;lt;code&amp;gt;certbot certonly --webroot -d domain1.com -d domain2.com ...&amp;lt;/code&amp;gt;. Only list the domains which are still valid with the &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; flags; omitted domains will be removed. Make sure to update the corresponding Apache config files.&lt;br /&gt;
&lt;br /&gt;
=== uwaterloo.ca subdomains ===&lt;br /&gt;
Make sure to read [[Web Hosting]] first.&lt;br /&gt;
&lt;br /&gt;
If a club requests a uwaterloo.ca subdomain, first make sure that their website is being hosted on our servers. Then, forward the email to hostmaster (at) uwaterloo.ca, and ask them to make the domain a CNAME for caffeine.csclub.uwaterloo.ca. You will also need to add a VirtualHost entry in /etc/apache2 on caffeine, redirecting requests to /users/club_name/www.&lt;br /&gt;
&lt;br /&gt;
Make sure to create a new Let&#039;s Encrypt certificate for the domain.&lt;br /&gt;
&lt;br /&gt;
Members do not get their own top-level uwaterloo.ca subdomains, they can instead request a &amp;lt;WatIAM&amp;gt;.members.csclub.uwaterloo.ca subdomain.&lt;br /&gt;
&lt;br /&gt;
=== Mailing list subscriptions ===&lt;br /&gt;
At the very least, you need to be subscribed to the [https://mailman.csclub.uwaterloo.ca/listinfo/syscom syscom] and [https://mailman.csclub.uwaterloo.ca/listinfo/exec exec] mailing lists. You may also wish to subscribe to the following:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://mailman.csclub.uwaterloo.ca/listinfo/git git]: Get alerts on some git commits (mainly Apache configs)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://mailman.csclub.uwaterloo.ca/listinfo/packages packages]: Get alerts of when packages are added to our Debian repository&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://mailman.csclub.uwaterloo.ca/listinfo/ceo ceo]: Get alerts on new user accounts&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Mailing_Lists&amp;diff=4811</id>
		<title>Mailing Lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Mailing_Lists&amp;diff=4811"/>
		<updated>2022-05-31T23:15:02Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add Moderation instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Systems Mailing Lists ==&lt;br /&gt;
&lt;br /&gt;
The following mailing lists are the targets of various automated notifications. Subscribe to them to receive these notifications.&lt;br /&gt;
&lt;br /&gt;
=== git@csclub.uwaterloo.ca ===&lt;br /&gt;
&lt;br /&gt;
Commits to club [http://gitweb.csclub.uwaterloo.ca/ git repositories] are sent to this [http://csclub.uwaterloo.ca/mailman/listinfo/git list] in patch form.&lt;br /&gt;
&lt;br /&gt;
=== packages@csclub.uwaterloo.ca ===&lt;br /&gt;
&lt;br /&gt;
Changes to our [http://debian.csclub.uwaterloo.ca/ debian repository] are sent to this [http://csclub.uwaterloo.ca/mailman/listinfo/packages list].&lt;br /&gt;
&lt;br /&gt;
=== ceo@csclub.uwaterloo.ca ===&lt;br /&gt;
&lt;br /&gt;
[[CEO]] sends a note to this [http://csclub.uwaterloo.ca/mailman/listinfo/ceo list] every time a new member or club is added.&lt;br /&gt;
&lt;br /&gt;
== Technical Details ==&lt;br /&gt;
&lt;br /&gt;
Most of our mailing lists are handled through [http://www.gnu.org/software/mailman/index.html Mailman], including the lists for the [[Executive]] (&amp;lt;tt&amp;gt;exec@csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;), the Program Committee (&amp;lt;tt&amp;gt;progcom@csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;), and the [[Systems Committee]] (&amp;lt;tt&amp;gt;syscom@csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Moderation ==&lt;br /&gt;
Our mailing lists need to be moderated. The process for that is this:&lt;br /&gt;
&lt;br /&gt;
# When you become an exec, you are automatically subscribed to the &amp;lt;code&amp;gt;exec-moderators&amp;lt;/code&amp;gt; mailing list.&lt;br /&gt;
# You should now [https://mailman.csclub.uwaterloo.ca/accounts/signup/?next=/postorius/lists/ create a mailman account] &#039;&#039;&#039;with your CSC email&#039;&#039;&#039;, and sign up for a weekly shift to mod the &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; mailing list.&lt;br /&gt;
# You can then remove yourself from the &amp;lt;code&amp;gt;exec-moderators&amp;lt;/code&amp;gt; mailing list. To do this, go to [https://mailman.csclub.uwaterloo.ca/postorius/lists/exec-moderators.csclub.uwaterloo.ca/ this page] and click &#039;&#039;&#039;Unsubscribe&#039;&#039;&#039; (in red).&lt;br /&gt;
# When it&#039;s your turn to mod the list, go to [https://mailman.csclub.uwaterloo.ca/postorius/lists/exec.csclub.uwaterloo.ca/held_messages held messages] and read through each email before clicking &#039;&#039;&#039;Accept&#039;&#039;&#039; if it is not spam.&lt;br /&gt;
# If it IS spam, copy the email address it is from, and click &#039;&#039;&#039;Discard.&#039;&#039;&#039; &#039;&#039;&#039;DO NOT CLICK REJECT&#039;&#039;&#039;.&lt;br /&gt;
# Go to [https://mailman.csclub.uwaterloo.ca/postorius/lists/exec.csclub.uwaterloo.ca/settings/message_acceptance#id_discard_these_nonmembers message acceptance] and add the address to the &#039;&#039;&#039;Discard These Non-Members&#039;&#039;&#039; box. Don&#039;t forget to click &#039;&#039;&#039;Save Changes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Mailman 3 ==&lt;br /&gt;
Starting from April 2021, we now use [https://docs.mailman3.org/ Mailman 3] for managing our mailing lists. Mailman 3 is split into three&lt;br /&gt;
independent components:&lt;br /&gt;
&lt;br /&gt;
* Mailman 3 Core is responsible for sending and receiving emails.&lt;br /&gt;
* Postorius is the web admin UI for creating and managing mailing lists.&lt;br /&gt;
* HyperKitty is the archiver, where past messages can be viewed and searched.&lt;br /&gt;
&lt;br /&gt;
=== Day-to-Day Operations ===&lt;br /&gt;
The Django admin site for Mailman 3 is accessible from [https://mailman.csclub.uwaterloo.ca/admin/ here]. Generally, you&#039;ll only need to use&lt;br /&gt;
this to see the list of accounts, and to assign/remove permissions from them.&lt;br /&gt;
&lt;br /&gt;
If you are logged in as a superuser, you should be able to see a list of all the mailing lists from&lt;br /&gt;
[https://mailman.csclub.uwaterloo.ca/postorius/lists here]. After clicking on a list, you should be able to access and modify all of its&lt;br /&gt;
settings, including subscription policy and message acceptance. Most of the setting names should be self-explanatory. For example, under&lt;br /&gt;
&#039;Held Messages&#039;, you can see a list of all held messages, and take an action on each one (discard, reject, accept, etc.).&lt;br /&gt;
&lt;br /&gt;
Unfortunately it is not possible to subscribe a new member from the web UI, although you can unsubscribe them (open issue [https://gitlab.com/mailman/postorius/-/issues/189 here]). You can do this from the command line in the mail container. For example, to add people to the exec list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo&lt;br /&gt;
su -s /bin/bash list&lt;br /&gt;
. /opt/mailman3/bin/activate&lt;br /&gt;
mailman addmembers - exec@csclub.uwaterloo.ca&lt;br /&gt;
person1@csclub.uwaterloo.ca&lt;br /&gt;
person2@csclub.uwaterloo.ca&lt;br /&gt;
...&lt;br /&gt;
^D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You need to press Ctrl-D (EOF) after entering the list of new members.&lt;br /&gt;
&lt;br /&gt;
==== Creating a new list ====&lt;br /&gt;
This can be done from the Postorius UI. Unfortunately, ever since we moved Mailman 3 into its container, its copy of postfix_lmtp (and postfix_lmtp.db) is out of sync with the mail container&#039;s version (since they each have their own filesystem). So after creating a new list, copy those files over and reload Postfix (from inside the mail container):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# from xylitol&lt;br /&gt;
cp -a /vm/mailman/opt/mailman3/data/postfix_lmtp /vm/mail/rootfs/opt/mailman3/data/&lt;br /&gt;
cp -a /vm/mailman/opt/mailman3/data/postfix_lmtp.db /vm/mail/rootfs/opt/mailman3/data/&lt;br /&gt;
# from mail&lt;br /&gt;
postfix reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I have never actually attempted this before, so I am not certain that it will work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Make sure you disable the Pipermail archiver&amp;lt;/b&amp;gt; (go to Settings -&amp;gt; Archiving and uncheck the Pipermail box). That archiver only works for lists which were migrated from Mailman 2.&lt;br /&gt;
&lt;br /&gt;
==== User gets subscribed to the same list twice ====&lt;br /&gt;
Sometimes a user gets subscribed to a list twice and it becomes impossible to unsubscribe them. This actually happened to us before, and as of this writing, it is still [https://gitlab.com/mailman/mailman/-/issues/826 an open issue]. If this happens again, just run the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -s /bin/bash list&lt;br /&gt;
cd /opt/mailman3&lt;br /&gt;
. bin/activate&lt;br /&gt;
mailman shell -r delete_dup_sub Yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;b&amp;gt;Update&amp;lt;/b&amp;gt;: We now use the pip package of mailman (from PyPI) instead of the Debian package, since the Debian package was giving us too many issues. All of the configs are now in /etc/mailman3, and the data files are in /opt/mailman3. A virtualenv was created in /opt/mailman3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Update 2&amp;lt;/b&amp;gt;: Mailman has been moved into its own [[systemd-nspawn]] container. It communicates with the mail container via a dedicated veth pair. Some relevant changes include: apply [https://gitlab.com/mailman/hyperkitty/-/merge_requests/379 this] patch; edit /opt/mailman3/lib/python3.9/site-packages/mailman/database/alembic/versions/bc0c49c6dda2_use_utf8mb4_in_mysql.py so that the type of autoresponse_postings_text is SAUnicodeLarge instead of SAUnicode4Byte; update main.cf and master.cf (and postfix_lmtp and postfix_lmtp.db in /opt/mailman3/data) to account for the new veth pair IP address of the mailman container.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Update 3&amp;lt;/b&amp;gt;: So apparently Django tries to send emails over localhost by default, which doesn&#039;t work for us because the mail and mailman containers are now separate. Add the following params to /etc/mailman3/settings.py:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EMAIL_HOST = &#039;ve-mail&#039;&lt;br /&gt;
EMAIL_PORT = 10025&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See [https://docs.djangoproject.com/en/4.0/topics/email/#smtp-backend here] for more details. &amp;quot;ve-mail&amp;quot; is an alias set in /etc/hosts.&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
The steps below describe how Mailman 3 was installed on the mail container and how we migrated the lists from Mailman 2. Note that some lists&lt;br /&gt;
were not migrated due to inactivity. See &amp;lt;code&amp;gt;/var/lib/mailman/data/aliases&amp;lt;/code&amp;gt; in the mail container to see which lists were not&lt;br /&gt;
migrated.&lt;br /&gt;
&lt;br /&gt;
==== Database setup ====&lt;br /&gt;
Log into the coffee VM as root, run &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;, and create new databases for Mailman 3 and HyperKitty:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE mailman3;    &lt;br /&gt;
CREATE USER mailman3 IDENTIFIED BY &#039;replace_this_password&#039;;    &lt;br /&gt;
GRANT ALL PRIVILEGES ON mailman3.* TO mailman3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Repeat the steps above for &amp;lt;code&amp;gt;mailman3web&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;mailman3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning:&amp;lt;/b&amp;gt; Make sure the MariaDB version is 10.2 or newer. The default package in Debian 10 and above should be fine.&lt;br /&gt;
&lt;br /&gt;
==== Mail container setup ====&lt;br /&gt;
First, install some prerequisites which we&#039;ll need later:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt update    &lt;br /&gt;
apt install python3-pip python3-mysqldb memcached python3-pylibmc python3-xapian    &lt;br /&gt;
pip3 install git+https://github.com/notanumber/xapian-haystack.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of this writing (2021-04-17), the package &amp;lt;code&amp;gt;python3-xapian-haystack&amp;lt;/code&amp;gt; in the Debian repositories is broken. Make sure to install&lt;br /&gt;
the latest version off of GitHub, as shown above.&lt;br /&gt;
&lt;br /&gt;
Unfortunately memcached will fail due to Debian&#039;s default LXC configuration being [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931545 unable to create new namespaces]. The easiest workaround for this is to just disable mount namespaces in the systemd service. Run &amp;lt;code&amp;gt;systemctl edit memcached.service&amp;lt;/code&amp;gt;, then paste the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Service]    &lt;br /&gt;
PrivateTmp=false    &lt;br /&gt;
ProtectSystem=false    &lt;br /&gt;
PrivateDevices=false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then restart memcached.&lt;br /&gt;
&lt;br /&gt;
==== Installing the Mailman 3 suite ====&lt;br /&gt;
Get ready, because as soon as you install the full Mailman 3 suite, a lot of services are going to start failing, fast. The worst part is that&lt;br /&gt;
the mail container is currently set up to email failed cron jobs to the syscom list, and Mailman 3 installs a cron job which runs &amp;lt;i&amp;gt;once per minute&amp;lt;/i&amp;gt;, which will cause a lot of spam. Make sure to read these instructions carefully before executing them.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt install mailman3-full&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the command above works for you on the first try, consider yourself lucky. It certainly didn&#039;t for me. If it fails, the first thing you want to do is comment out all the lines in &amp;lt;code&amp;gt;/etc/cron.d/mailman3-web&amp;lt;/code&amp;gt; because otherwise the syscom list will get spammed. We are going to edit some files, then try to reinstall the whole suite again.&lt;br /&gt;
&lt;br /&gt;
First, open &amp;lt;code&amp;gt;/etc/mailman3/mailman.cfg&amp;lt;/code&amp;gt;. Under &amp;lt;code&amp;gt;[general]&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;site_owner&amp;lt;/code&amp;gt; to your personal email address, temporarily. Under &amp;lt;code&amp;gt;[database]&amp;lt;/code&amp;gt;, set:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class: mailman.database.mysql.MySQLDatabase&lt;br /&gt;
url: mysql+mysqldb://mailman3:my_password@coffee.csclub.uwaterloo.ca/mailman3?charset=utf8&amp;amp;use_unicode=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note how we are using the mysqldb (mysqlclient) driver, not the default pymysql. Make sure to replace &amp;lt;code&amp;gt;my_password&amp;lt;/code&amp;gt; with the password you created for the &amp;lt;code&amp;gt;mailman3&amp;lt;/code&amp;gt; database.&lt;br /&gt;
&lt;br /&gt;
Under &amp;lt;code&amp;gt;[mta]&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;smtp_port&amp;lt;/code&amp;gt; to 10025 (there&#039;s an entry in &amp;lt;code&amp;gt;/etc/postfix/master.cf&amp;lt;/code&amp;gt; for Mailman). Also make sure that the following lines are present at the end of the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[archiver.hyperkitty]&lt;br /&gt;
class: mailman_hyperkitty.Archiver&lt;br /&gt;
enable: yes&lt;br /&gt;
configuration: /etc/mailman3/mailman-hyperkitty.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next file we need to edit is &amp;lt;code&amp;gt;/etc/mailman3/mailman-web.py&amp;lt;/code&amp;gt;. Go to the &amp;lt;code&amp;gt;DATABASES&amp;lt;/code&amp;gt; variable and make sure &#039;ENGINE&#039; is set to &#039;django.db.backends.mysql&#039;. Fill in the username, password, host, and DB name for &amp;lt;code&amp;gt;mailman3web&amp;lt;/code&amp;gt;. Uncomment the MySQL-specific options under &#039;OPTIONS&#039;. Also set &#039;charset&#039; to &#039;utf8mb4&#039; in &#039;OPTIONS&#039;. This is important - MariaDB, like MySQL, only uses 3 bytes per Unicode character by default, which means that if someone sends us an email with a 4-byte Unicode emoji in it, HyperKitty will explode. So make sure to use &#039;utf8mb4&#039;.&lt;br /&gt;
The final variable should look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DATABASES = { &lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.mysql&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;mailman3web&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;mailman3web&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;my_password&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;coffee.csclub.uwaterloo.ca&#039;,&lt;br /&gt;
        &#039;PORT&#039;: &#039;&#039;, &lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;init_command&#039;: &amp;quot;SET sql_mode=&#039;STRICT_TRANS_TABLES&#039;&amp;quot;,&lt;br /&gt;
            &#039;charset&#039;: &#039;utf8mb4&#039;,&lt;br /&gt;
        },&lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Some more variables you need to set/unset:&lt;br /&gt;
&lt;br /&gt;
* Set EMAILNAME to &#039;csclub.uwaterloo.ca&#039;.&lt;br /&gt;
* Set HOSTNAME to &#039;mailman.csclub.uwaterloo.ca&#039;.&lt;br /&gt;
* Set POSTORIUS_TEMPLATE_BASE_URL to &#039;https://mailman.csclub.uwaterloo.ca/mailman3/&#039;. If you want to strip out the &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; part, you&#039;ll need to edit the Apache config as well - see the relevant section below.&lt;br /&gt;
* Set TIME_ZONE to &#039;America/Toronto&#039;.&lt;br /&gt;
* Comment out &#039;django_mailman3.lib.auth.fedora&#039; under INSTALLED_APPS.&lt;br /&gt;
&lt;br /&gt;
We need to instruct Django to use memcached for caching. Add the following section to mailman-web.py:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CACHES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.core.cache.backends.memcached.PyLibMCCache&#039;,&lt;br /&gt;
        &#039;LOCATION&#039;: &#039;127.0.0.1:11211&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also need to want to use Xapian as the backend for full-text search (the default engine, Whoosh, is written in pure Python and has horrible performance). Add the following section to mailman-web.py:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HAYSTACK_CONNECTIONS = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;xapian_backend.XapianEngine&#039;,&lt;br /&gt;
        &#039;PATH&#039;: &#039;/var/lib/mailman3/web/xapian_index&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We also don&#039;t want to run one qcluster process on each CPU core, so add the following section as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Q_CLUSTER = {&lt;br /&gt;
    &#039;timeout&#039;: 300,&lt;br /&gt;
    &#039;save_limit&#039;: 100,&lt;br /&gt;
    &#039;orm&#039;: &#039;default&#039;,&lt;br /&gt;
    &#039;poll&#039;: 5,&lt;br /&gt;
    &#039;workers&#039;: 4,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We also want to disable log emails because this will quickly spam our inboxes. (This is also bad for privacy because the HTTP Authorization header is kept in the log, which contains people&#039;s base64-encoded passwords). Copy the &amp;lt;code&amp;gt;LOGGING&amp;lt;/code&amp;gt; variable from &amp;lt;code&amp;gt;/usr/share/mailman3-web/settings.py&amp;lt;/code&amp;gt; into mailman-web.py and remove all mentions of &#039;mail_admins&#039;.&lt;br /&gt;
&lt;br /&gt;
The next file we need to edit is &amp;lt;code&amp;gt;/etc/mailman3/mailman-hyperkitty.cfg&amp;lt;/code&amp;gt;. Set &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt; to the same value as MAILMAN_ARCHIVER_KEY in mailman-web.py (without the quotation marks). Also set &amp;lt;code&amp;gt;base_url&amp;lt;/code&amp;gt; to https://mailman.csclub.uwaterloo.ca/mailman3/hyperkitty/.&lt;br /&gt;
&lt;br /&gt;
The next file we need to edit is &amp;lt;code&amp;gt;/etc/mailman3/uwsgi.ini&amp;lt;/code&amp;gt;. The default buffer size limit for uWSGI is too low and can cause requests to fail. Add the following line to uwsgi.ini:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buffer-size = 32768&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Patching the source files ====&lt;br /&gt;
Unfortunately some of the packages which we have installed have bugs in them which we need to fix.&lt;br /&gt;
&lt;br /&gt;
===== Xapian word size limit =====&lt;br /&gt;
The first one is in the Haystack-Xapian backend: occasionally we have very large words which exceed Xapian&#039;s limit (see [https://gitlab.com/mailman/hyperkitty/-/issues/322 this GitLab issue]). Open &amp;lt;code&amp;gt;/usr/local/lib/python3.7/dist-packages/xapian_backend.py&amp;lt;/code&amp;gt;, add &amp;lt;code&amp;gt;import traceback&amp;lt;/code&amp;gt; at the top of the file, and make sure the bottom of the &amp;lt;code&amp;gt;update()&amp;lt;/code&amp;gt; function (around line 500) looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                # finally, replace or add the document to the database&lt;br /&gt;
                database.replace_document(document_id, document)&lt;br /&gt;
&lt;br /&gt;
        except UnicodeDecodeError:&lt;br /&gt;
            sys.stderr.write(&#039;Chunk failed.\n&#039;)&lt;br /&gt;
            pass&lt;br /&gt;
&lt;br /&gt;
        except xapian.InvalidArgumentError:&lt;br /&gt;
            traceback.print_exc()&lt;br /&gt;
&lt;br /&gt;
        finally:&lt;br /&gt;
            try:&lt;br /&gt;
                database.close()&lt;br /&gt;
            except:&lt;br /&gt;
                traceback.print_exc()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(We&#039;re just ignoring any errors caused by long words so that the entire indexing job doesn&#039;t fail.)&lt;br /&gt;
&lt;br /&gt;
===== Xapian six import =====&lt;br /&gt;
Same file: open xapian_backend.py and at the top, replace &amp;lt;code&amp;gt;from django.utils import six&amp;lt;/code&amp;gt; by &amp;lt;code&amp;gt;import six&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Mailman3 restclient URL quoting =====&lt;br /&gt;
Next, we need to edit Mailman 3&#039;s REST client, because there is a bug where if someone&#039;s email address contains a space, the REST client doesn&#039;t URL-encode it properly (one of us should probably file an issue on GitLab for this at some point). Open &amp;lt;code&amp;gt;/usr/lib/python3/dist-packages/mailmanclient/client.py&amp;lt;/code&amp;gt;, and at the top of the file, add the following line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, in the `get_user` function, replace&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
response, content = self._connection.call(&lt;br /&gt;
    &#039;users/{0}&#039;.format(address))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
response, content = self._connection.call(&lt;br /&gt;
    &#039;users/{0}&#039;.format(quote(str(address))))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Hyperkitty URL truncation =====&lt;br /&gt;
Hyperkitty truncates each URL in each message to 76 characters. This is way too little. Most Google Docs links will go way past that limit. As of this writing, that limit is unfortunately hard-coded in the Django templates, so we&#039;re going to have to edit them.&lt;br /&gt;
&lt;br /&gt;
There&#039;s actually another problem with the Django templates, which is the fact that URLs enclosed in angle brackets (&amp;amp;lt;&amp;amp;gt;) don&#039;t get quoted properly. So we&#039;re going to fix that too. (This might have been fixed in a more recent version of Hyperkitty).&lt;br /&gt;
&lt;br /&gt;
Go to &amp;lt;code&amp;gt;/usr/lib/python3/dist-packages/hyperkitty/templates/hyperkitty&amp;lt;/code&amp;gt; and find all files which contain the line &amp;lt;code&amp;gt;urlizetrunc:76&amp;lt;/code&amp;gt;, and replace them with &amp;lt;code&amp;gt;urlize&amp;lt;/code&amp;gt;. Also make sure that &#039;urlize&#039; occurs right after &#039;email.content&#039; in the filter pipeline. You can find these files using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/lib/python3/dist-packages/hyperkitty/templates/hyperkitty&lt;br /&gt;
grep -IRl &#039;urlizetrunc:76&#039; .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For example, in &amp;lt;code&amp;gt;ajax/temp_message.html&amp;lt;/code&amp;gt;, the template should look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{ email.content|urlize|snip_quoted|wordwrap:90|escapeemaillinks }}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing Mailman 3, again ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Now&amp;lt;/b&amp;gt; we are ready to reinstall mailman3-full:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt install mailman3-full&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Restart the mailman3 and mailman3-web services and make sure they are running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart mailman3&lt;br /&gt;
systemctl restart mailman3-web&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cron configuration ====&lt;br /&gt;
&lt;br /&gt;
Open &amp;lt;code&amp;gt;/etc/default/cron&amp;lt;/code&amp;gt; and set the following line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXTRA_OPTS=&amp;quot;-L 4&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will prevent cron from spamming the logs, which will inevitably happen since mailman3-web runs very frequent jobs. Restart cron:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart cron&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also uncomment the lines in &amp;lt;code&amp;gt;/etc/cron.d/mailman3-web&amp;lt;/code&amp;gt; which you commented out earlier.&lt;br /&gt;
&lt;br /&gt;
Optional, but recommended: change the minutely cron job in &amp;lt;code&amp;gt;/etc/cron.d/mailman3-web&amp;lt;/code&amp;gt; to run every 15 minutes instead (or even once an hour). Once a minute just sounds like too much. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/15       * * * * www-data     [ -f /usr/bin/django-admin ] &amp;amp;&amp;amp; flock -n /var/run/mailman3-web/cron.minutely /usr/share/mailman3-web/manage.py runjobs minutely&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing extra archivers ====&lt;br /&gt;
I wrote some extra archivers for Mailman which are available [https://git.csclub.uwaterloo.ca/merenber/extra-mailman-archivers.git here]. One of them is called &#039;monthly_archiver&#039; and it just dumps each message into a maildir directory for the current year and month. The motivation for this was to preserve message headers, since HyperKitty does not store headers. The other archiver is called &#039;pipermail&#039;, and it does two things: it passes each message to Pipermail, and it also appends it to the Mailman 2 mbox file. The idea behind this one was to have a backup in case we need to re-install Mailman 3 from scratch. Hopefully we never have to do that.&lt;br /&gt;
&lt;br /&gt;
To install the archivers (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone my_username@csclub.uwaterloo.ca:/srv/git/merenber/extra-mailman-archivers.git&lt;br /&gt;
cd extra-mailman-archivers&lt;br /&gt;
pip3 install .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open mailman.cfg and add the following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[archiver.monthly_archiver]&lt;br /&gt;
class: extra_mailman_archivers.monthly_archiver.MonthlyArchiver&lt;br /&gt;
enable: yes &lt;br /&gt;
&lt;br /&gt;
[archiver.pipermail]&lt;br /&gt;
class: extra_mailman_archivers.pipermail.Pipermail&lt;br /&gt;
enable: yes &lt;br /&gt;
configuration: /etc/mailman3/mailman-pipermail.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also create the file &amp;lt;code&amp;gt;/etc/mailman3/mailman-pipermail.cfg&amp;lt;/code&amp;gt; and paste the following inside it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
base_url:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then restart mailman3.&lt;br /&gt;
&lt;br /&gt;
You should now be able to view &#039;monthly_archiver&#039; and &#039;pipermail&#039; as archiver options for each list in Postorius. As a general rule of thumb, you only need monthly_archiver for the lists which are not moderated, so that we can use the headers to delete spam later. The pipermail archiver only really needs to be used for the exec and syscom lists, since those are the most important ones.&lt;br /&gt;
&lt;br /&gt;
==== Postfix changes ====&lt;br /&gt;
Open &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; and add the following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
owner_request_special = no&lt;br /&gt;
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp&lt;br /&gt;
local_recipient_maps =&lt;br /&gt;
        proxy:unix:passwd.byname,&lt;br /&gt;
        $alias_maps,&lt;br /&gt;
        hash:/var/lib/mailman3/data/postfix_lmtp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache httpd changes ====&lt;br /&gt;
Copy the contents of &amp;lt;code&amp;gt;/etc/mailman3/apache.conf&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;/etc/apache2/sites-real/mailman&amp;lt;/code&amp;gt; (or wherever the config file is for the Mailman page). You may have to customize some lines. Then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod proxy_uwsgi&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Postorius setup ====&lt;br /&gt;
Now cd into &amp;lt;code&amp;gt;/usr/share/mailman3-web&amp;lt;/code&amp;gt;, and run &amp;lt;code&amp;gt;./manage.py createsuperuser&amp;lt;/code&amp;gt;. Use &#039;sysadmin&#039; as the username and use the syscom mailing list as the email address.&lt;br /&gt;
&lt;br /&gt;
Now go to https://mailman.csclub.uwaterloo.ca/mailman3/postorius/lists/, and sign in as the user you just created. You will get an email confirmation.&lt;br /&gt;
&lt;br /&gt;
You have probably noticed that the site name is still set to &#039;example.com&#039;. Go to https://mailman.csclub.uwaterloo.ca/mailman3/admin/, then click on &#039;Sites&#039;. Click on &#039;example.com&#039;, then set &#039;Domain name&#039; to mailman.csclub.uwaterloo.ca. Set the display name to something reasonable.&lt;br /&gt;
&lt;br /&gt;
Now go to https://mailman.csclub.uwaterloo.ca/mailman3/postorius/domains, click on &#039;New domain&#039;, and create a new domain.&lt;br /&gt;
&lt;br /&gt;
Also click on &#039;Templates&#039; and add two new templates:&lt;br /&gt;
&lt;br /&gt;
* &#039;The footer for a regular (non-digest) message.&#039;&lt;br /&gt;
* &#039;The footer for a digest message.&#039;&lt;br /&gt;
&lt;br /&gt;
The contents of these should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
_______________________________________________&lt;br /&gt;
$display_name mailing list -- $listname&lt;br /&gt;
To unsubscribe send an email to ${short_listname}-leave@${domain}&lt;br /&gt;
https://mailman.csclub.uwaterloo.ca/mailman3/postorius/lists/${list_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason why we need to specify this is because many of our old lists had footer templates which used %()s placeholders, which [https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/2DCMJGCKSCXTSRIOVV6GPWKEHJHVAGOP/#2DCMJGCKSCXTSRIOVV6GPWKEHJHVAGOP have no meaning in Mailman 3]. [https://gitlab.com/mailman/mailman/tree/master/src/mailman/templates/en These] are the default templates, and [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/templates.html#templated-texts these] are the placeholders you can use.&lt;br /&gt;
Also note that you can have domain-wide templates and per-list templates.&lt;br /&gt;
&lt;br /&gt;
==== Importing lists from Mailman 2 ====&lt;br /&gt;
&amp;lt;b&amp;gt;Make sure to read [https://docs.mailman3.org/en/latest/migration.html this] first.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before we continue - unfortunately the current version of HyperKitty in the Debian repos doesn&#039;t contain a fix which allows bad &#039;Subject&#039; headers to be skipped (see [https://gitlab.com/mailman/hyperkitty/-/issues/317 this] issue). So we&#039;re going to need to download a more recent version of the file we need:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/lib/python3/dist-packages/hyperkitty/management/commands&lt;br /&gt;
mv hyperkitty_import.py hyperkitty_import.py.bak&lt;br /&gt;
curl -sLOJ &#039;https://gitlab.com/mailman/hyperkitty/-/raw/master/hyperkitty/management/commands/hyperkitty_import.py?inline=false&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&#039;re also going to need to download a newer version of a specific Mailman 3 file which [https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/JEPMB3HW4FI57EUMOST4L7BD2ILIIS3P/ occasionally causes the import21 command to fail]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/lib/python3/dist-packages/mailman/commands&lt;br /&gt;
mv cli_import.py cli_import.py.bak&lt;br /&gt;
curl -sLOJ &#039;https://gitlab.com/mailman/mailman/-/raw/master/src/mailman/commands/cli_import.py?inline=false&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&#039;re also going to need to modify a few columns in the database because the csc-industry mailing list has a long description which exceeds the default alotted size. Log back into coffee as root, run &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;, and execute the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USE mailman3;&lt;br /&gt;
ALTER TABLE mailinglist MODIFY info VARCHAR(1024);&lt;br /&gt;
ALTER TABLE mailinglist MODIFY autoresponse_postings_text VARCHAR(1024);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before migrating a list from Mailman 2, you will need to create a list with exact the same name in Mailman 3. Go to https://mailman.csclub.uwaterloo.ca/mailman3/postorius/lists, click &#039;New list&#039;, and follow the prompts. Go to the list settings and change what you need.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; For all of the commands below, it is crucial that you run the &amp;lt;code&amp;gt;mailman&amp;lt;/code&amp;gt; command as the &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; user and the &amp;lt;code&amp;gt;manage.py&amp;lt;/code&amp;gt; command as the &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; user. Otherwise, you can create files which only root can access, causing horrible breakage.&lt;br /&gt;
&lt;br /&gt;
In this example, we&#039;re going to import the mailing list called &#039;test&#039;. The process should be the same for the other lists.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -s /bin/bash list&lt;br /&gt;
mailman import21 test@csclub.uwaterloo.ca /var/lib/mailman/lists/test/config.pck&lt;br /&gt;
exit&lt;br /&gt;
su -s /bin/bash www-data&lt;br /&gt;
cd /usr/share/mailman3-web&lt;br /&gt;
./manage.py hyperkitty_import -l test@csclub.uwaterloo.ca -v3 /var/lib/mailman/archives/private/test.mbox/test.mbox&lt;br /&gt;
./manage.py update_index_one_list -v3 test@csclub.uwaterloo.ca&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now open &amp;lt;code&amp;gt;/var/lib/mailman/data/aliases&amp;lt;/code&amp;gt; and comment out all of the addresses for the list which we just migrated. Then run, as root,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postalias /var/lib/mailman/data/aliases&lt;br /&gt;
postfix reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you are done migrating all of the lists, make sure sysadmin (or exec/syscom) is the site owner of Mailman,&lt;br /&gt;
not your personal email. Open &amp;lt;code&amp;gt;/etc/mailman3/mailman.cfg&amp;lt;/code&amp;gt;, and under &amp;lt;code&amp;gt;[mailman]&amp;lt;/code&amp;gt;, make sure you have the&lt;br /&gt;
following line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
site_owner: sysadmin@csclub.uwaterloo.ca&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then restart mailman3.&lt;br /&gt;
&lt;br /&gt;
==== Custom URL ====&lt;br /&gt;
If you wish to strip out the &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; from all of the Mailman 3 URLs, there are several files which you&#039;ll need to edit.&lt;br /&gt;
&lt;br /&gt;
First, open &amp;lt;code&amp;gt;/etc/mailman3/mailman-hyperkitty.cfg&amp;lt;/code&amp;gt; and take out &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;base_url&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next, open &amp;lt;code&amp;gt;etc/mailman3/mailman-web.py&amp;lt;/code&amp;gt; and add:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STATIC_URL = &#039;/static/&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also take out &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;POSTORIUS_TEMPLATE_BASE_URL&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
Now open your Apache config and do the following:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;Alias /mailman3/favicon.ico&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Alias /mailman3/static&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Add the following lines to redirect people still using the old URLs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RedirectMatch permanent &amp;quot;^/mailman3$&amp;quot; &amp;quot;/&amp;quot;&lt;br /&gt;
RedirectMatch permanent &amp;quot;^/mailman3/(.*)$&amp;quot; &amp;quot;/$1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Add the following to your ProxyPass section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ProxyPass /mailman3 !&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also remove &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; from the other ProxyPass entries.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Now run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl restart mailman3&lt;br /&gt;
systemctl restart mailman3-web&lt;br /&gt;
systemctl reload apache2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now go to https://mailman.csclub.uwaterloo.ca/postorius/domains and edit any templates which have hardcoded &amp;lt;code&amp;gt;/mailman3&amp;lt;/code&amp;gt; in a URL. You will need to do this for any list-specific templates as well.&lt;br /&gt;
&lt;br /&gt;
==== Shutting down Mailman 2 for good ====&lt;br /&gt;
Open &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; and remove &amp;lt;code&amp;gt;hash:/var/lib/mailman/data/aliases&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;alias_maps&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;postfix reload&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open the Apache config and comment out all of the lines relevant to Mailman 2, except for those necessary to show Pipermail. Reload Apache.&lt;br /&gt;
&lt;br /&gt;
Open &amp;lt;code&amp;gt;/etc/cron.d/mailman&amp;lt;/code&amp;gt; and comment out everything.&lt;br /&gt;
&lt;br /&gt;
Now run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl stop mailman&lt;br /&gt;
systemctl mask mailman&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== HyperKitty scripts ====&lt;br /&gt;
There are a couple of scripts in &amp;lt;code&amp;gt;/usr/share/mailman3-web&amp;lt;/code&amp;gt; for deleting messages from HyperKitty. The first deletes all messages from HyperKitty (this should only be used if you need to re-migrate a mailing list). Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./hyperkitty_delete_all.py name_of_list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The other script deletes all messages which have been flagged by SpamAssassin as being spam:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./hyperkitty_delete_spam.py --month 2021-April name_of_list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This requires the monthly_archiver to be enabled. Alternatively, if you want to delete spam using the Mailman 2 mbox file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./hyperkitty_delete_spam.py --mbox name_of_list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that using the mbox file will take a very long time.&lt;br /&gt;
&lt;br /&gt;
==== Mailman 2 to 3 setting mappings ====&lt;br /&gt;
Here is a &amp;lt;b&amp;gt;very rough&amp;lt;/b&amp;gt; mapping of Mailman 2 to Mailman 3 (Postorius) settings. Note that some of them are not perfectly equivalent. There are also some settings in Mailman 2 which are not available in Mailman 3 and vice versa.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Mailman 2 setting&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Mailman 3 setting&lt;br /&gt;
|-&lt;br /&gt;
|General Options -&amp;gt; owner&lt;br /&gt;
|Users -&amp;gt; Owners&lt;br /&gt;
|-&lt;br /&gt;
|Non-digest options -&amp;gt; msg_footer&lt;br /&gt;
|Templates -&amp;gt; &#039;The footer for a regular (non-digest) message.&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Digest options -&amp;gt; digest_footer&lt;br /&gt;
|Templates -&amp;gt; &#039;The footer for a digest message.&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Subscription rules -&amp;gt; advertised&lt;br /&gt;
|Settings -&amp;gt; List Identity -&amp;gt; Show list on index page&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Subscription rules -&amp;gt; subscribe_policy&lt;br /&gt;
|Settings -&amp;gt; Subscription Policy -&amp;gt; Subscription Policy&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Subscription rules -&amp;gt; ban_list&lt;br /&gt;
|Banned addresses (Note that this only bans subscriptions, not posts.)&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Sender filters -&amp;gt; default_member_moderation, generic_nonmember_action&lt;br /&gt;
|Settings -&amp;gt; Message Acceptance -&amp;gt; Default action to take when a member posts to the list&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Sender filters -&amp;gt; discard_these_nonmembers&lt;br /&gt;
|Users -&amp;gt; Non-members -&amp;gt; add a non-member, then go to Non-member Options -&amp;gt; Administration options -&amp;gt; Moderation and choose &#039;Discard&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Privacy options -&amp;gt; Recipient filters -&amp;gt; require_explicit_destination&lt;br /&gt;
|Settings -&amp;gt; Message Acceptance -&amp;gt; Require Explicit Destination&lt;br /&gt;
|-&lt;br /&gt;
|Archiving options -&amp;gt; archive, archive_private&lt;br /&gt;
|Settings -&amp;gt; Archiving -&amp;gt; Archive policy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that except for the templates, most settings &amp;lt;i&amp;gt;should&amp;lt;/i&amp;gt; be imported correctly via the &amp;lt;code&amp;gt;mailman import21&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
[[Category:Systems]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4810</id>
		<title>Meeting:Termcom/Saturday 2 April 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4810"/>
		<updated>2022-05-28T02:19:15Z</updated>

		<summary type="html">&lt;p&gt;R389li: Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;larr; [[Termcom/Saturday 5 March 2022]] | [[Termcom/Saturday 2 April 2022]] &amp;amp;rarr;&lt;br /&gt;
&lt;br /&gt;
Last meeting of the term, good luck on exams!&lt;br /&gt;
&lt;br /&gt;
= Termcom members in attendance =&lt;br /&gt;
r389li, dzlin, j2767wan, jtoft (👋), r345liu&lt;br /&gt;
&lt;br /&gt;
= Tasks completed last few weeks =&lt;br /&gt;
* r389li got USBs for the office, plugged in Nullsleep and booted it up&lt;br /&gt;
&lt;br /&gt;
= Tasks for the week =&lt;br /&gt;
* a268wang and d278liu will continue working on Merlin and migrate the prometheus VM to the k8s cluster&lt;br /&gt;
* j2767wan will continue setting up NextCloud locally&lt;br /&gt;
* r4tandon will continue looking into how to make the Visual Editor on this Wiki work&lt;br /&gt;
* r345liu and y266shen will fix the last failing project(s?) (Apache/Debian/???) in mirror-checker&lt;br /&gt;
* r389li will try and fix Nullsleep&#039;s networking&lt;br /&gt;
* r389li will also upload the Unix 101 recording and update [https://csclub.uwaterloo.ca/~termcom/unix101 https://csclub.uwaterloo.ca/~termcom/unix101]&lt;br /&gt;
* dzlin and s7raviku will upgrade Postgres on coffee, ensuring data is migrated to the new database&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
* Convert the [[Ceph]] mount on [[Machine List#Cloud Cloud machines]] to a systemd.mount so NGINX won&#039;t try to start (and fail) before its FS is mounted&lt;br /&gt;
* MathNEWS container migration (LXC -&amp;gt; systemd-nspawn)&lt;br /&gt;
* Fix Guayusa&lt;br /&gt;
* Get the specs of the FusioIO card&lt;br /&gt;
&lt;br /&gt;
= Syscom mailing list moderator =&lt;br /&gt;
a268wang&lt;br /&gt;
&lt;br /&gt;
[[Category:Termcom]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=CloudStack_Templates&amp;diff=4809</id>
		<title>CloudStack Templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=CloudStack_Templates&amp;diff=4809"/>
		<updated>2022-05-28T02:15:41Z</updated>

		<summary type="html">&lt;p&gt;R389li: Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to create CloudStack templates from which CloudStack VMs are based.&lt;br /&gt;
&lt;br /&gt;
Official documentation: https://docs.cloudstack.apache.org/en/latest/adminguide/templates.html&lt;br /&gt;
&lt;br /&gt;
We require that cloud templates be prepared with [https://cloud-init.io/ cloud-init]. cloud-init is a program which passes configuration data (e.g. user&#039;s SSH key) from a cloud provider to a VM at boot time. Most &amp;quot;major&amp;quot; GNU/Linux distributions have public cloud images which are (mostly) ready-to-use thanks to cloud-init.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
There are two ways to create a template:&lt;br /&gt;
&lt;br /&gt;
1. Convert the root disk volume of an existing VM into a template, or&lt;br /&gt;
&lt;br /&gt;
2. Take a QCOW2 file, mount it over NBD, and modify files as necessary&lt;br /&gt;
&lt;br /&gt;
The first option takes more time, but is generally easier. You can use either option; just keep in mind that some commands, such as &amp;lt;code&amp;gt;systemctl&amp;lt;/code&amp;gt;, can only be executed in a live system.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
=== Downloading ===&lt;br /&gt;
If you are downloading a template over HTTP(S), there&#039;s one weird problem which I found out the hard way - the CloudStack Systems VMs&#039; iptables rules are configured to block outgoing traffic to VLAN 134. I have no idea why CloudStack decides to do this, but you&#039;re going to have to work around those rules if you want to download a file hosted on a machine on-campus.&lt;br /&gt;
&lt;br /&gt;
SSH into the Secondary Storage VM, e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -i /var/lib/cloudstack/management/.ssh/id_rsa -p 3922 root@169.254.12.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the first rule of the OUTPUT chain will accept all traffic:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iptables -L -vn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If not, add such a rule:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iptables -I OUTPUT 1 -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Uploading ===&lt;br /&gt;
If you are uploading a QCOW2 image directly from your computer, you need to be on the campus network. For some reason the web UI tries to contact the management server directly, which of course has a private IP address. So either configure your browser to use a SOCKS proxy, or use the campus VPN.&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
We&#039;re going to start with Debian since it&#039;s the first template which I created. Other distributions are mostly similar.&lt;br /&gt;
&lt;br /&gt;
From the CloudStack UI, as the admin user, click on Templates, then &#039;Register Template From URL&#039;. Create a new template using this URL (change the release if necessary): https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2. The following checkboxes should be checked: Extractable, HVM (don&#039;t make it public - we want members to use our modified templates instead).&lt;br /&gt;
&lt;br /&gt;
Create a new VM using this template. Use the admin keypair during creation. Once it&#039;s ready, SSH into it using the admin keypair (on biloba or chamomile):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -i /var/lib/cloudstack/management/.ssh/id_rsa debian@172.19.134.129&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace the IP address as necessary.&lt;br /&gt;
&lt;br /&gt;
=== IPv6 setup ===&lt;br /&gt;
We want the IPv6 address in our machines to be derived from the IPv4 address - for example, 172.19.134.129 becomes 2620:101:f000:4903::129. (Yes, I am aware that 129 in decimal is not the same as 129 in hex. But it makes it easier to remember.)&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to create some custom scripts which inject an IPv6 address at startup:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /etc/csc&lt;br /&gt;
&lt;br /&gt;
# Here&#039;s a script to disable Router Advertisements (RA) and Duplicate Address Detection (DAD)&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; /etc/csc/ipv6-sysctl.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
set -ex&lt;br /&gt;
while read interface _; do    &lt;br /&gt;
        if [ $interface = lo ]; then&lt;br /&gt;
                continue&lt;br /&gt;
        fi&lt;br /&gt;
        sysctl net.ipv6.conf.$interface.accept_ra=0&lt;br /&gt;
        sysctl net.ipv6.conf.$interface.accept_dad=0&lt;br /&gt;
done &amp;lt; &amp;lt;(ip -brief link show)&lt;br /&gt;
EOF&lt;br /&gt;
chmod +x /etc/csc/ipv6-sysctl.sh&lt;br /&gt;
&lt;br /&gt;
# Here&#039;s a script to derive the IPv6 address from the IPv4 address&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; /etc/csc/ipv6-addr.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
set -ex&lt;br /&gt;
INTERFACE=&lt;br /&gt;
IPV4_ADDRESS=&lt;br /&gt;
while read interface _ address; do&lt;br /&gt;
        if ! echo $address | grep -q &#039;^172\.19\.134\.&#039;; then&lt;br /&gt;
                continue&lt;br /&gt;
        fi&lt;br /&gt;
        INTERFACE=$interface&lt;br /&gt;
        IPV4_ADDRESS=$address&lt;br /&gt;
        break&lt;br /&gt;
done &amp;lt; &amp;lt;(ip -4 -brief addr show)&lt;br /&gt;
if [ -z &amp;quot;$INTERFACE&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Could not find primary interface&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
NUM=$(echo $IPV4_ADDRESS | grep -oP &#039;^172\.19\.134\.\K(\d+)&#039;)&lt;br /&gt;
IPV6_ADDRESS=&amp;quot;2620:101:f000:4903::$NUM/64&amp;quot;&lt;br /&gt;
ip -6 addr add $IPV6_ADDRESS dev $INTERFACE&lt;br /&gt;
ip -6 route add default via 2620:101:f000:4903::1 dev $INTERFACE&lt;br /&gt;
EOF&lt;br /&gt;
chmod +x /etc/csc/ipv6-addr.sh&lt;br /&gt;
&lt;br /&gt;
# Create some systemd services&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/systemd/system/csc-ipv6-sysctl.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Disable IPv6 RAs and DAD&lt;br /&gt;
# needed to avoid a dependency on basic.target&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
After=network-pre.target&lt;br /&gt;
Before=networking.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/etc/csc/ipv6-sysctl.sh&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/systemd/system/csc-ipv6-addr.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Allocate IPv6 address&lt;br /&gt;
Requires=csc-ipv6-sysctl.service&lt;br /&gt;
After=csc-ipv6-sysctl.service&lt;br /&gt;
Requires=network.target&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/etc/csc/ipv6-addr.sh&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# Enable the systemd services&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable csc-ipv6-sysctl&lt;br /&gt;
systemctl enable csc-ipv6-addr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== dhclient ===&lt;br /&gt;
OPen /etc/dhcp/dhclient.conf and remove the following fields from &#039;request&#039;: domain-name, domain-name-servers, domain-search, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, ntp-servers&lt;br /&gt;
&lt;br /&gt;
=== resolv.conf ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm /etc/resolv.conf&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/resolv.conf&lt;br /&gt;
search      csclub.uwaterloo.ca uwaterloo.ca&lt;br /&gt;
options     rotate timeout:1 attempts:1 ndots:2&lt;br /&gt;
&lt;br /&gt;
# CSC Nameservers&lt;br /&gt;
nameserver  2620:101:f000:4901:c5c::4&lt;br /&gt;
nameserver  2620:101:f000:7300:c5c::20&lt;br /&gt;
nameserver  129.97.134.4&lt;br /&gt;
nameserver  129.97.18.20&lt;br /&gt;
&lt;br /&gt;
# IST Anycast (fallback)&lt;br /&gt;
#nameserver  129.97.2.1&lt;br /&gt;
#nameserver  129.97.2.2&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== chrony ===&lt;br /&gt;
Open /etc/chrony/chrony.conf, comment out the &#039;pool&#039; line, and add the following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#server   ntp.csclub.uwaterloo.ca&lt;br /&gt;
server   129.97.167.12&lt;br /&gt;
#server   ntp.student.cs.uwaterloo.ca&lt;br /&gt;
server   129.97.167.4&lt;br /&gt;
#server   ntp.cs.uwaterloo.ca&lt;br /&gt;
server   129.97.15.14&lt;br /&gt;
#server   ntp.cscf.uwaterloo.ca&lt;br /&gt;
server   129.97.15.15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mirrors ===&lt;br /&gt;
Open /etc/apt/sources.list and replace &amp;lt;code&amp;gt;deb.debian.org&amp;lt;/code&amp;gt; by &amp;lt;code&amp;gt;mirror.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;. Also replace &amp;lt;code&amp;gt;security.debian.org&amp;lt;/code&amp;gt; by &amp;lt;code&amp;gt;mirror.csclub.uwaterloo.ca&amp;lt;/code&amp;gt;. Comment out the deb-src lines.&lt;br /&gt;
&lt;br /&gt;
=== MOTD ===&lt;br /&gt;
Add a custom MOTD in /etc/motd. Make sure to thank our sponsors (MEF and CSCF).&lt;br /&gt;
&lt;br /&gt;
=== sshd ===&lt;br /&gt;
Add/set the following line in /etc/ssh/sshd_config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PrintLastLog=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reset cloud-init ===&lt;br /&gt;
We need to undo the work done by cloud-init:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo debian &amp;gt; /etc/hostname&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/hosts&lt;br /&gt;
127.0.0.1       localhost&lt;br /&gt;
::1             localhost ip6-localhost ip6-loopback&lt;br /&gt;
ff02::1         ip6-allnodes&lt;br /&gt;
ff02::2         ip6-allrouters&lt;br /&gt;
EOF&lt;br /&gt;
cloud-init clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
Try to leave as little trace as possible:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt clean&lt;br /&gt;
&lt;br /&gt;
# Clear logs&lt;br /&gt;
rm -f /var/log/*.log&lt;br /&gt;
rm -f /var/log/syslog&lt;br /&gt;
rm -f /var/log/messages&lt;br /&gt;
journalctl --vacuum-size=1&lt;br /&gt;
&lt;br /&gt;
# Clear history files&lt;br /&gt;
rm -f ~/.viminfo&lt;br /&gt;
rm -f ~/.bash_history&lt;br /&gt;
history -c&lt;br /&gt;
exit&lt;br /&gt;
# do this^ for the debian user too&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create the template ===&lt;br /&gt;
Power off the VM from the CloudStack UI, and follow the instructions here: http://docs.cloudstack.apache.org/en/latest/adminguide/templates.html#creating-a-template-from-an-existing-virtual-machine. (You&#039;re basically converting the root disk into a template.)&lt;br /&gt;
&lt;br /&gt;
After you create the template, click on it from the UI, go to &#039;Settings&#039;, and delete SSH.PublicKey.&lt;br /&gt;
&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
Cloud image (replace release if necessary): https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64-disk-kvm.img&lt;br /&gt;
&lt;br /&gt;
All of the instructions for Debian apply, except for the changes below.&lt;br /&gt;
&lt;br /&gt;
=== systemd-networkd ===&lt;br /&gt;
Ubuntu uses systemd-networkd instead of ifupdown, so in the custom systemd services which we create, replace &#039;networking.service&#039; by &#039;systemd-networkd.service&#039;.&lt;br /&gt;
&lt;br /&gt;
For some reason systemd-networkd thinks that it&#039;s OK to accept router advertisements &amp;lt;i&amp;gt;despite us explicitly disabling them at the kernel level&amp;lt;/i&amp;gt;, so we need to add the following snippet to /etc/cloud/cloud.cfg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
  version: 2&lt;br /&gt;
  ethernets:&lt;br /&gt;
    id0:&lt;br /&gt;
      match:&lt;br /&gt;
        name: en*&lt;br /&gt;
      dhcp4: true&lt;br /&gt;
      accept-ra: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While you&#039;re at it, add/set the following keys to /etc/cloud/cloud.cfg as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt_preserve_sources_list: true&lt;br /&gt;
manage_etc_hosts: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(These preserve our changes to /etc/apt/sources.list and /etc/hosts, respectively.)&lt;br /&gt;
&lt;br /&gt;
=== systemd-timesyncd ===&lt;br /&gt;
Ubuntu uses systemd-timesyncd instead of chrony, so open /etc/systemd/timesyncd.conf and set the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ntp.csclub.uwaterloo.ca ntp.student.cs.uwaterloo.ca&lt;br /&gt;
NTP=129.97.167.12 129.97.167.4&lt;br /&gt;
# ntp.cs.uwaterloo.ca ntp.cscf.uwaterloo.ca&lt;br /&gt;
FallbackNTP=129.97.15.14 129.97.15.15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mirrors ===&lt;br /&gt;
Open /etc/apt/sources.list and replace &#039;zone1.clouds.archive.ubuntu.com&#039; with &#039;mirror.csclub.uwaterloo.ca&#039;. Also replace &#039;security.ubuntu.com&#039; with &#039;mirror.csclub.uwaterloo.ca&#039;.&lt;br /&gt;
&lt;br /&gt;
=== MOTD ===&lt;br /&gt;
In addition to setting /etc/motd, disable some of these noisy MOTD headers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 640 /etc/update-motd.d/00-header&lt;br /&gt;
chmod 640 /etc/update-motd.d/10-help-text&lt;br /&gt;
chmod 640 /etc/update-motd.d/50-landscape-sysinfo&lt;br /&gt;
chmod 640 /etc/update-motd.d/50-motd-news&lt;br /&gt;
chmod 640 /etc/update-motd.d/88-esm-announce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reset cloud-init ===&lt;br /&gt;
Follow the same instructions for Debian, but paste &#039;ubuntu&#039; into /etc/hostname.&lt;br /&gt;
&lt;br /&gt;
== CentOS Stream ==&lt;br /&gt;
Download one of the GenericCloud images from here: https://cloud.centos.org/centos/8-stream/x86_64/images/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;: I&#039;ve noticed that the default user in CentOS Stream 9 is called &#039;cloud-user&#039; instead of &#039;centos&#039;.&lt;br /&gt;
&lt;br /&gt;
All of the instructions for Debian apply, except for the changes below.&lt;br /&gt;
&lt;br /&gt;
No text editor is installed, so you&#039;ll want to install vim/nano.&lt;br /&gt;
&lt;br /&gt;
=== NetworkManager ===&lt;br /&gt;
CentOS uses NetworkManager instead of ifupdown, so replace &#039;networking.service&#039; by &#039;NetworkManager.service&#039; in our custom systemd services.&lt;br /&gt;
&lt;br /&gt;
In csc-ipv6-addr.service, replace &#039;network.target&#039; by &#039;network-online.target&#039; (otherwise the IPv4 address will not have been assigned by the time our script runs).&lt;br /&gt;
&lt;br /&gt;
cloud-init has trouble reading DHCP data from NetworkManager for some reason, so install dhclient instead and add this line to the &amp;lt;code&amp;gt;[Main]&amp;lt;/code&amp;gt; section of /etc/NetworkManager/NetworkManager.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dhcp = dhclient&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you logout of the VM, make sure to also &amp;lt;code&amp;gt;rm -f /var/lib/NetworkManager/*&amp;lt;/code&amp;gt; to get rid of stale dhclient lease files.&lt;br /&gt;
&lt;br /&gt;
=== chrony ===&lt;br /&gt;
The file to edit is /etc/chrony.conf, not /etc/chrony/chrony.conf.&lt;br /&gt;
&lt;br /&gt;
=== Mirrors ===&lt;br /&gt;
In /etc/yum.repos.d, for each .repo file, comment out the &#039;mirrorlist=&#039; line and add e.g.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
baseurl=http://mirror.csclub.uwaterloo.ca/$contentdir/$stream/BaseOS/$basearch/os/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace &#039;BaseOS&#039; by the name of the repo. For the Extras repo, write &#039;extras&#039; as the repo name.&lt;br /&gt;
&lt;br /&gt;
=== cloud.cfg configuration ===&lt;br /&gt;
There is a bug in the cloud-init configuration which was fixed in RHEL 8.2 but the fix doesn&#039;t seem to have made it to CentOS Stream 8 (it may already be fixed in CentOS Stream 9). See [https://bugzilla.redhat.com/show_bug.cgi?id=1888761 here] and [https://bugzilla.redhat.com/show_bug.cgi?id=1963981 here].&lt;br /&gt;
&lt;br /&gt;
In /etc/cloud/cloud.cfg, comment out the line &#039;ssh_genkeytypes: ~&#039; and add this line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ssh_genkeytypes: [&#039;rsa&#039;, &#039;ecdsa&#039;, &#039;ed25519&#039;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also add the following to /etc/cloud/cloud.cfg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    manage_etc_hosts: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hosts configuration ===&lt;br /&gt;
Paste the following into /etc/hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Paste &#039;localhost.localdomain&#039; into /etc/hostname.&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
Run &amp;lt;code&amp;gt;dnf clean all&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;apt clean&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Fedora ==&lt;br /&gt;
All of the instructions for CentOS Stream apply, except for the changes below.&lt;br /&gt;
&lt;br /&gt;
=== Mount the QEMU image ===&lt;br /&gt;
Unfortunately cloud-init completely failed when I tried to use the Fedora Cloud image (https://alt.fedoraproject.org/cloud/) on a CloudStack VM. So we&#039;re going to download the QEMU image and mount it over NBD (instructions: https://gist.github.com/shamil/62935d9b456a6f9877b5). Note that Fedora uses btrfs, so you&#039;ll need to run something like &amp;lt;code&amp;gt;mount -t btrfs /dev/nbd0p5 /mnt/fedora&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Add &amp;lt;code&amp;gt;dhcp = dhclient&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;[Main]&amp;lt;/code&amp;gt; section of /etc/NetworkManager/NetworkManager.conf in the mounted filesystem. Unmount the filesystem, remove the NBD device, and move/copy the modified QEMU image to /var/www/csc-cloud-images. You should now be able to download the image from the CloudStack UI using the URL &amp;lt;nowiki&amp;gt;http://biloba.cloud.csclub.uwaterloo.ca/csc-cloud-images/&amp;lt;name_of_file&amp;gt;.&amp;lt;/nowiki&amp;gt; Make sure to edit the iptables rules in the System Storage VM first (see [[#Limitations]]).&lt;br /&gt;
&lt;br /&gt;
=== Mirrors ===&lt;br /&gt;
For each file in /etc/yum.repos.d, comment out &#039;metalink&#039; and set &#039;baseurl&#039; to use the CSC mirror (except for cisco-openh264). For example, fedora.repo should use http://mirror.csclub.uwaterloo.ca/fedora/linux/releases/35/Everything/x86_64/os/.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4805</id>
		<title>Past Executive</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Past_Executive&amp;diff=4805"/>
		<updated>2022-05-20T05:36:43Z</updated>

		<summary type="html">&lt;p&gt;R389li: Add S22&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Data sources for this exec list have been: CSC records, MathNEWS.&lt;br /&gt;
According to the warrior wiki dudes, there was an article about the CSC being founded in the chevron: &#039;&#039;This week on campus&#039;&#039;. The Chevron. January 5 1968. Page 16. -- somebody should get a copy of that.&lt;br /&gt;
&lt;br /&gt;
= Definitions =&lt;br /&gt;
 #define PR President&lt;br /&gt;
 #define VP Vice-president&lt;br /&gt;
 #define TR Treasurer&lt;br /&gt;
 #define SE Secretary&lt;br /&gt;
 #define AV Assistant Vice-president&lt;br /&gt;
 #define SA Sysadmin&lt;br /&gt;
 #define OF Office Manager&lt;br /&gt;
 #define LI Librarian&lt;br /&gt;
 #define FL Flasher&lt;br /&gt;
 #define DE Deity&lt;br /&gt;
 #define WW Webmaster&lt;br /&gt;
 #define SE-TR Secretary-Treasurer (Position was split)&lt;br /&gt;
 #define FR Fridge Regent (Imapd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;margin-left: 1em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Founding 1967=&lt;br /&gt;
&lt;br /&gt;
 Sponsor - J. Peter Sprung&lt;br /&gt;
 PR: K. Rugger&lt;br /&gt;
 VP: R. Jaques&lt;br /&gt;
 SE-TR: G. Sutherland&lt;br /&gt;
&lt;br /&gt;
 Founding Members:&lt;br /&gt;
 B. Kindree&lt;br /&gt;
 R. Melen&lt;br /&gt;
 V. Neglia&lt;br /&gt;
 R. Charney&lt;br /&gt;
 R. Truman&lt;br /&gt;
 Glenn Berry&lt;br /&gt;
 D. Meek&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
Committee members: R. Stallwerthy, C. de Vries&lt;br /&gt;
&lt;br /&gt;
=1968=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Bill Kindred&lt;br /&gt;
 VP: Rick Jacques&lt;br /&gt;
 SE-TR: Graham Sutherland&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SE-TR: Glenn Berry&lt;br /&gt;
&lt;br /&gt;
=1969=&lt;br /&gt;
&lt;br /&gt;
Unknown, only one letter found in the folder &#039;ACM History&#039; addressed to Glenn Berry, which makes it likely that he was SE-TR once again. May be indicated in membership lists. The club appears to have died this academic year.&lt;br /&gt;
&lt;br /&gt;
=1970=&lt;br /&gt;
&lt;br /&gt;
===A note on ACM affiliation===&lt;br /&gt;
&lt;br /&gt;
The first attempt at joining the ACM was started with an informal inquiry Dec 5, 1967. This lead to a series of constitution edits (working towards affiliation) in Winter 1968. There was a break for the spring (no correspondence found, I presume we were waiting on a reply). In the fall records indicate that our constitution and chartering was rejected, further correspondence was sent in Fall 1968 by Glenn Berry. A new inquiry, seemingly unaware of the first was sent Dec 7, 1970&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Rick Beach&lt;br /&gt;
 VP: Lee Santon&lt;br /&gt;
 TR: Randy Melen&lt;br /&gt;
 SE: Vic Neglia&lt;br /&gt;
&lt;br /&gt;
=1971=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 VP: James H. &amp;quot;Jim&amp;quot; Finch and James W. Welch both signed letters as VP.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 VP: James W. Welch&lt;br /&gt;
&lt;br /&gt;
=1972=&lt;br /&gt;
&lt;br /&gt;
It appears we visited Western and Western visited us this year (there is some reference to a similar occurrence the year previous). Documents from 1973 indicate a termly exec structure, this probably goes back to 1972.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Mike Campbell&lt;br /&gt;
 VP: Edgar Hew&lt;br /&gt;
 SE-TR: Doug Lacy&lt;br /&gt;
&lt;br /&gt;
There is also stuff from James W. Welch without a position.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian McIntosh&lt;br /&gt;
&lt;br /&gt;
=1973=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 SE: Douglas E. Lacy&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Parry&lt;br /&gt;
 VP: Ray Walden&lt;br /&gt;
 TR: Slavko Stemberger&lt;br /&gt;
 SE: Mario Festival&lt;br /&gt;
&lt;br /&gt;
=1974=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Russell Crook&lt;br /&gt;
&lt;br /&gt;
=1975-1977=&lt;br /&gt;
&lt;br /&gt;
 Faculty Sponsor: Morven Gentleman??&lt;br /&gt;
&lt;br /&gt;
 Peter Raynham reports (first hand account): president for at least 2 or 3 terms in this period.&lt;br /&gt;
 Sylvia Eng: 1975/6 as some position.&lt;br /&gt;
 Dave Buckingham: a VP at some point&lt;br /&gt;
 Allison Nolan: 1977 time&lt;br /&gt;
 Peter Stevens: 1977&lt;br /&gt;
 Russel Crook???&lt;br /&gt;
&lt;br /&gt;
Dennis Ritchie came. So did Jeffrey D. Ullman.&lt;br /&gt;
&lt;br /&gt;
=1976=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
Progcom: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
=1977=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Spring=== &lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Andrzej Jan Taramina&lt;br /&gt;
 Progcom: Allison Nowlan&lt;br /&gt;
&lt;br /&gt;
=1978=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Peter Stevens&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: K.G. Dykes&lt;br /&gt;
 SE: Kandry Mutheardy&lt;br /&gt;
&lt;br /&gt;
Brian Kernighan gave a talk this term. So did Ken Thompson.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
=1979=&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Robert Biddle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1987=&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
 VP: Ted Timar&lt;br /&gt;
 TR: Gayla Boritz&lt;br /&gt;
 SE: Edwin Hoogerbeets&lt;br /&gt;
&lt;br /&gt;
=1988=&lt;br /&gt;
&lt;br /&gt;
Tim Timar - cc&#039;d on memos/mentioned on mathsoc minutes in 1987/88.&lt;br /&gt;
The Sysadmin and Office Manager positions seem to have been created somewhere in here. The &#039;Record Management Profile&#039; that Rob*n Stewart did as an assignment in 1991-1992 for some class at UBC&lt;br /&gt;
indicates the existence of both positions. We acquired an HP-9000 in the summer of 1988 and as this was our first &amp;quot;real&amp;quot; computer (previously we had an IBM PC and terminal), the sysadmin position was created, starting with the Fall 1988 term.&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Jim Boritz&lt;br /&gt;
(Source: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 SA: Wade Richards&lt;br /&gt;
&lt;br /&gt;
=1989=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
https://mirror.csclub.uwaterloo.ca/csclub/bill-gates-1989-big.jpg&lt;br /&gt;
&lt;br /&gt;
Left to right:  Jim Boritz (bottom), Wade Richards (top), Ted Timar, ???, Keven Smith, Bill Gates (not exec), Angela Chambers, Ross Ridge (top), Sean Goggin (bottom), ??? &lt;br /&gt;
&lt;br /&gt;
 PR: Barry W. Smith&lt;br /&gt;
 VP: Angela Chambers&lt;br /&gt;
 TR:&lt;br /&gt;
 SE: Sean Goggin&lt;br /&gt;
 SA: Wade Richards / Ross Ridge&lt;br /&gt;
&lt;br /&gt;
(President Kevin Smith confirmed: https://csclub.uwaterloo.ca/misc/procedure.pdf)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Jim Thornton&lt;br /&gt;
 VP: Gayla Boritz&lt;br /&gt;
 TR: David Fenger&lt;br /&gt;
 SE: Kivi Shapiro&lt;br /&gt;
 SA: Reid Pinchback&lt;br /&gt;
&lt;br /&gt;
Assistance to sysadmin: Jim Boritz.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: James Boritz&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 SA: Ross Ridge&lt;br /&gt;
&lt;br /&gt;
=1990=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 TR: Jim Thornton&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 TR: Karen Smith&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
*Robyn/Robin signed her emails as Rob*n and requested to be listed as such on this page.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Wade Richards&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart - attended mathsoc meeting on our behalf.&lt;br /&gt;
 Kivi Shapiro - attended mathsoc meeting on our behalf.&lt;br /&gt;
              - Censured by mathsoc for his actions during the election.&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
=1991=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 VP: Edmond Bourne&lt;br /&gt;
 TR: Carolyn Duke&lt;br /&gt;
 SE: Rob*n Stewart&lt;br /&gt;
 Shannon Mann - attended mathsoc meeting on our behalf.&lt;br /&gt;
&lt;br /&gt;
John McCarthy came this term.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 Jason Knell - attended mathsoc meeting on our and PMC&#039;s behalf.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mike Van Lingen&lt;br /&gt;
 Wiktor Wiewiorowski - attended mathsoc meeting on our behalf this term.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1992=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Norm Ross&lt;br /&gt;
 SE: Brent Williams&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick&lt;br /&gt;
 TR: Stephen A. Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 TR: Mark Plumb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1993=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 VP: Tim Prime&lt;br /&gt;
 OF: Dave Ebbo&lt;br /&gt;
 LI: Norm Ross&lt;br /&gt;
&lt;br /&gt;
Other exec for this term: Ellen Hsiang, Sam Coulombe, Peter Gray&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Mark Tompsett &lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
&lt;br /&gt;
=1994=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Ian Goldberg&lt;br /&gt;
 TR: Mark Tompsett&lt;br /&gt;
 SE: Tom Rathbourne&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Dale Wick (?)&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
 SA: Ian Goldberg (?)&lt;br /&gt;
 Norm Ross assisted with finances.&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Ross Ridge&lt;br /&gt;
 VP: Tom Rathbourne (?)&lt;br /&gt;
 TR: Rob Leitman&lt;br /&gt;
 SA: Zygo Blaxell&lt;br /&gt;
 LI: Michael Van Biesbrouck&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1995=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 TR: Sharlene Schmeichel&lt;br /&gt;
 Amy Brown and Rob Ridge purchased books.&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 TR: Steve Mills&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Amy Brown (arbrown) &lt;br /&gt;
 VP: Christina Norman (cbnorman)&lt;br /&gt;
 TR: Steven Mills (samills)&lt;br /&gt;
 SE: Allyson Graham (akgraham)&lt;br /&gt;
 SA: Gavin Peters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1996=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Nikita Borisov (nborisov)&lt;br /&gt;
 VP: Joseph Deu Ngoc (dtdeungo) &lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Sharlene Schmeichel (saschmei)&lt;br /&gt;
 SA: Dave Brown (dagbrown)&lt;br /&gt;
 OF: Somsack Tsai (stsai)&lt;br /&gt;
 LI: Devin Carless (dccarles)&lt;br /&gt;
 FL: Allyson Graham (akgraham)&lt;br /&gt;
 DE: Ian Goldberg (iagoldbe)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Blake Winton (bwinton)&lt;br /&gt;
 VP: Nick Harvey (njaharve)&lt;br /&gt;
 TR: Nikita Borisov (nborisov)&lt;br /&gt;
 SE: Viet-Trung Luu (vluu)&lt;br /&gt;
 SA: Drew Hamilton (awhamilt)&lt;br /&gt;
 OF: Jillian Arnott (jarnott)&lt;br /&gt;
 LI: Ross Ridge (rridge)&lt;br /&gt;
 FL: Devin Carless (dccarles)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Shannon Mann (sjbmann) &lt;br /&gt;
 VP: Joe &amp;quot;Frosh&amp;quot; Deu Ngoc (jtdeungo)    resigned (heavy workload)&lt;br /&gt;
 TR: Michal Van Biesbrouck (mlvanbie) &lt;br /&gt;
 SE: Nikita Borisov (nborisov) &lt;br /&gt;
 SA: Chris Rovers &lt;br /&gt;
 OF: Dax Hutcheon (ddhutche)            became VP upon jtduengo&#039;s resignation&lt;br /&gt;
 LI: Aliz Csenki (acsenki) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel) &lt;br /&gt;
 DE: Skuld (no uwuserid yet...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1997=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Dima Brodsky &lt;br /&gt;
 VP: Nikita Borisov (nborisov)&lt;br /&gt;
 TR: Stephen Mills (samills)&lt;br /&gt;
 SE: Evan Jones (ejones)&lt;br /&gt;
 SA: Alex Brodsky&lt;br /&gt;
 OF: Chris Doherty&lt;br /&gt;
 LI: Matt Corks &lt;br /&gt;
 FL: Paul Prescod&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Chris Rovers (cdrovers) &lt;br /&gt;
 VP: Michael van Biesbrouck (mlvanbie) &lt;br /&gt;
 TR: Somsack Tsai (stsai) &lt;br /&gt;
 SE: Matt Corks (mvcorks)&lt;br /&gt;
 SA: Lennart Sorensen (lsorense) &lt;br /&gt;
 LI: Chmielowiec (archmiel) &lt;br /&gt;
 OF: Devin Carless (dccarles) &lt;br /&gt;
 FL: Aaron Chmielowiec (archmiel)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 1998 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Suresh Naidu  &lt;br /&gt;
 VP: Viet-Trung Luu &lt;br /&gt;
 TR: Tim Coleman &lt;br /&gt;
 SE: Dax Hutcheon &lt;br /&gt;
 Librarian: Dax Hutcheon &lt;br /&gt;
 Flasher: Dax Hutcheon &lt;br /&gt;
 Webmaster: Dax Hutcheon &lt;br /&gt;
 SA: Robin Powell&lt;br /&gt;
 OF: Aaron Chmielowiec&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 Position	Name	You might call them...&lt;br /&gt;
 President	roconnor	Russell O&#039;Connor&lt;br /&gt;
 Vice-president	trwcolem	Tim Coleman&lt;br /&gt;
 Treasurer	knzarysk	Karl Zaryski&lt;br /&gt;
 Secretary	(bwinton)	(Blake Winton)&lt;br /&gt;
 Sysadmin	wbiggs	Billy Biggs&lt;br /&gt;
 Librarian	snaidu	Suresh Naidu&lt;br /&gt;
 Flasher	pechrysl	Paul Chrysler&lt;br /&gt;
 Office Manager	dccarles	Devin Carless&lt;br /&gt;
 WWWW	trwcolem	Tim Coleman&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 President	Joe Deu Ngoc	jtdeungo&lt;br /&gt;
 Vice-President	Wai Ling Yee	wlyee&lt;br /&gt;
 Treasurer	Fjord	j2lynn&lt;br /&gt;
 Secretary	Matt Corks	mvcorks&lt;br /&gt;
 Sysadmin	Andrew Hamilton	awhamilt&lt;br /&gt;
&lt;br /&gt;
 World Wide Web Wench	Dax Hutcheon	ddhutche&lt;br /&gt;
 Office Manager	Richard Bell	rlbell&lt;br /&gt;
 Librarian	Damian Gryski	dgryski&lt;br /&gt;
 Flasher	Paul Chrysler	pechrysl&lt;br /&gt;
 Official Deity	Ian Goldberg	iagoldbe&lt;br /&gt;
 Official Chairbeing	Calum T. Dalek	calum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1999=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2000=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Will Chartrand (wgchartr)&lt;br /&gt;
 VP: Gavin Duggan (geduggan)&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: Lennart Sorensen (lsorense)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP: &lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA: bioster&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2001=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: geduggan&lt;br /&gt;
 VP:&lt;br /&gt;
 TR:&lt;br /&gt;
 SE:&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
=2002=&lt;br /&gt;
&lt;br /&gt;
https://web.archive.org/web/20130715012002/http://www.mathnews.uwaterloo.ca/Issues/mn8902/cscflash.php&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Billy Biggs&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: Melissa Basinger&lt;br /&gt;
 SE: James Perry&lt;br /&gt;
 SA: Barry Genova&lt;br /&gt;
 Librarian: Ryan Golbeck&lt;br /&gt;
 Webmaster: Jonathan Beverley&lt;br /&gt;
 Office Manager: Sayan Li&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Alex Pop&lt;br /&gt;
 VP: Melissa Basinger&lt;br /&gt;
 TR: Siyan Li&lt;br /&gt;
 SE: James A Morrison&lt;br /&gt;
 SA: Jonathan Beverley&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: James A. Morrison&lt;br /&gt;
 VP: Stefanus Du Toit&lt;br /&gt;
 TR: James Perry&lt;br /&gt;
 SE: Michael Biggs&lt;br /&gt;
 SA: Ryan Golbeck&lt;br /&gt;
 Librarian: Mark Sherry, Cassandra Schopf&lt;br /&gt;
 Webmaster: Stefanus Du Toit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2003=&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Kannan Vijayan (kvijayan)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: James Perry (jeperry)&lt;br /&gt;
 SE: Wojciech Kosnik (wkosnik)&lt;br /&gt;
 SA: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 LI: Simon Law (sfllaw)&lt;br /&gt;
 WM: Julie Lavoie (jlavoie)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Stefanus Du Toit (sjdutoit)&lt;br /&gt;
 VP: Meg Darragh (m2darrag)&lt;br /&gt;
 TR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SE: James Perry (jeperry)&lt;br /&gt;
 SA: Simon Law (sfllaw)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2004=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Simon Law (sfllaw)&lt;br /&gt;
 VP: fspacek&lt;br /&gt;
 TR: ljain&lt;br /&gt;
 SE: Julie Lavoie (jlavoie)&lt;br /&gt;
 SA: Tor Myklebust(tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: dnmorton ?&lt;br /&gt;
 VP: Tim Loach (tloach)&lt;br /&gt;
 TR: Michael Biggs (mbiggs)&lt;br /&gt;
 SE: Lesley Northam (lanortha)&lt;br /&gt;
 SA: &lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: jeperry&lt;br /&gt;
 VP: mtsay&lt;br /&gt;
 TR: Mark Sherry (mdsherry)&lt;br /&gt;
 SE: Tor Myklebust (tmyklebu)&lt;br /&gt;
 SA: jlavoie&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2005=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: mtsay&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Holden Karau (hkarau)&lt;br /&gt;
 SE: domorton&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
&lt;br /&gt;
 PR: Mark Sherry (mdsherry)&lt;br /&gt;
 VP: Martin Kess (mdkess)&lt;br /&gt;
 TR: Ali Piccioni (apiccion)&lt;br /&gt;
 SE: Michael Biggs (mbiggs)&lt;br /&gt;
 SA: Tor Myklebust (tmyklebu)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Tim Loach (tloach)&lt;br /&gt;
 VP: Lesley Northam (lanortha)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: The Professor&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2006=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
&lt;br /&gt;
 PR: Tor Myklebust (tmyklebu)&lt;br /&gt;
 VP: Michael Druker (mdruker)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: Mark Sherry (mdsherry)&lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: David Tenty (daltenty)&lt;br /&gt;
 SE: Chris Evensen (cevensen)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
&lt;br /&gt;
 PR: Martin Kess (mdkess)&lt;br /&gt;
 VP: Mark Sherry (mdsherry)&lt;br /&gt;
 TR: Sylvan L. Mably (slmably)&lt;br /&gt;
 SE: Caelyn McAulay (cmcaulay) &lt;br /&gt;
 SA: William O&#039;Connor (woconnor)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2007=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: David Bartley (dtbartle)&lt;br /&gt;
 VP: David Belanger (dbelange)&lt;br /&gt;
 TR: Caelyn McAulay (cmcaulay)&lt;br /&gt;
 SE: David Tenty (daltenty)&lt;br /&gt;
 SA: Holden Karau (hkarau)&lt;br /&gt;
 Webmaster: jnopporn&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Gaelan D&#039;costa (gdcosta)&lt;br /&gt;
 VP: Kyle Larose (kmlarose)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Erik Louie (elouie)&lt;br /&gt;
 SA: Michael Spang (mspang)&lt;br /&gt;
 Librarian: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Holden Karau (hkarau)&lt;br /&gt;
 VP: Alex McCausland (amccausl)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Sean Cumming (sgcummin)&lt;br /&gt;
 SA: David Tenty (daltenty)&lt;br /&gt;
 OF:&lt;br /&gt;
 WW: dtbartle / jnopporn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2008=&lt;br /&gt;
&lt;br /&gt;
===Winter ===&lt;br /&gt;
 PR: Sean Cumming (sgcummin)&lt;br /&gt;
 VP: Matt Lawrence (m3lawren)&lt;br /&gt;
 TR: Mateusz Tarkowski (mtarkows)&lt;br /&gt;
 SE: Edgar Bering (ebering)&lt;br /&gt;
 SA: Jordan Saunders (jmsaunde)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Summer ===&lt;br /&gt;
 PR: Brennan Taylor (b4taylor)&lt;br /&gt;
 VP: Qifan Xi (qxi)&lt;br /&gt;
 TR: Matt Lawrence (m3lawren)&lt;br /&gt;
 SE: Nick Guenther (nguenthe)&lt;br /&gt;
 SA:&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall ===&lt;br /&gt;
 PR: Matthew Lawrence (m3lawren)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Gregson (mgregson)&lt;br /&gt;
 SE: James Simpson (j2simpso) resigned for medical reasons, replaced by Dominik &#039;Domo&#039; Chłobowski&lt;br /&gt;
 SA: Kyle Spaans (kspaans)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2009=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Michael Gregson (mgregson)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Brennan Taylor (b4taylor)&lt;br /&gt;
 SE: James Simpson (j2simpso)  resigned for business reasons, replaced by Rebecca Putinski (rjputins) &lt;br /&gt;
 SA: Jacob Parker (j3parker) &lt;br /&gt;
 OF: XinChi Yang / Sapphyre Gervais (x23yang / sagervai) (both)&lt;br /&gt;
&lt;br /&gt;
===Spring ===&lt;br /&gt;
 PR: Michael Spang (mspang)&lt;br /&gt;
 VP: Jacob Parker (j3parker)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF:&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Michael Spang (mspang)&lt;br /&gt;
 SE: Brennan Taylor (b4taylor)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Rebecca Putinski (rjputins)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2010=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Kyle Spaans (kspaans)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Sapphyre Gervais (sagervai)&lt;br /&gt;
 SE: Ajnu Jacob (ajacob)&lt;br /&gt;
 SA: Matthew Thiffault (mthiffau)&lt;br /&gt;
 OF: Jacob Parker (j3parker)&lt;br /&gt;
&lt;br /&gt;
 Keyed office staffers: j3camero,jdonland,m2ellis,mimcpher,nsasherr&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Jeff Cameron (j3camero)&lt;br /&gt;
 VP: Brennan Taylor (b4taylor)&lt;br /&gt;
 TR: Vardhan Mudunuru (vmudunur)&lt;br /&gt;
 SE: Matthew Lawrence (m3lawren)&lt;br /&gt;
 SA: Michael Ellis (m2ellis)&lt;br /&gt;
 OF: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Jacob Parker (j3parker)&lt;br /&gt;
 VP: Edgar Bering (ebering)&lt;br /&gt;
 TR: Rebecca Putinski (rjputins)&lt;br /&gt;
 SE: Kyle Spaans (kspaans)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Amir Sayed Khader (askhader)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2011=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Edgar Bering (ebering)&lt;br /&gt;
 VP: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Elana &amp;quot;Alana&amp;quot; Hashman (ehashman)&lt;br /&gt;
 SA: Peter &amp;quot;Bofh&amp;quot; Barfuss (pbarfuss)&lt;br /&gt;
 OF: Marc Burns (Marc Burns)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Matthew Thiffault (mthiffau)&lt;br /&gt;
 VP: Matthew McPherrin (mimcpher)&lt;br /&gt;
 TR: Kyle Spaans (kspaans)&lt;br /&gt;
 SE: Kwame Andrew Ansong (kansong)&lt;br /&gt;
 SA: Jeremy Brandon Roman (jbroman)&lt;br /&gt;
 OF: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Katharine Hyatt (kshyatt)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Anthony &amp;quot;hatguy/hotgay&amp;quot; Brennan (a2brenna)&lt;br /&gt;
 OF: Kyle Spaans (kspaans)&lt;br /&gt;
 LIB: Edgar Bering (ebering)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2012=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Elana Hashman (ehashman)&lt;br /&gt;
 TR: Jacob Parker (j3parker)&lt;br /&gt;
 SE: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: Jennifer &amp;quot;Emily&amp;quot; Wong (jy2wong)&lt;br /&gt;
&lt;br /&gt;
===Summer===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Luqman Aden (laden)&lt;br /&gt;
 TR: Matthew McPherrin (mimcpher)&lt;br /&gt;
 SE: Elana Hashman (ehashman)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Marc Burns (m4burns)&lt;br /&gt;
 VP: Salem Talha (satalha)&lt;br /&gt;
 TR: Jennifer Wong (jy2wong)&lt;br /&gt;
 SE: Elana Hashman (ehashman), resigned&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Luqman Aden (laden)&lt;br /&gt;
 LIB: John Ladan (jladan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=2013=&lt;br /&gt;
&lt;br /&gt;
===Winter===&lt;br /&gt;
 PR: Anthony Brennan (a2brenna)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: John Mumford (jsmumfor)&lt;br /&gt;
 SE: Matt Olechnowicz (mgolechn)&lt;br /&gt;
 SA: Sarah Harvey (sharvey)&lt;br /&gt;
 OF: Bryan Coutts (b2coutts)&lt;br /&gt;
 LIB: Matthew McPherrin (mimcpher)&lt;br /&gt;
&lt;br /&gt;
===Spring===&lt;br /&gt;
 PR: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Youn Jin Kim (yj7kim)&lt;br /&gt;
 SA: Anthony Brennan (a2brenna)&lt;br /&gt;
 OF: Marc Burns (m4burns)&lt;br /&gt;
 IMAPD: Dominik Chlobowski (dchlobow)&lt;br /&gt;
&lt;br /&gt;
===Fall===&lt;br /&gt;
 PR: Elana Hashman (ehashman)&lt;br /&gt;
 VP: Marc Burns (m4burns)&lt;br /&gt;
 TR: Dominik Chlobowski (dchlobow)&lt;br /&gt;
 SE: Edward Lee (e45lee)&lt;br /&gt;
 SA: Jeremy Roman (jbroman)&lt;br /&gt;
 OF: Alexis Hunt (aechunt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2014 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Bryan Coutts (b2coutts)&lt;br /&gt;
 VP: Visishta Vijayanand (vvijayan)&lt;br /&gt;
 TR: Marc Burns (m4burns)&lt;br /&gt;
 SE: Mark Farrell (m4farrel)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Nicholas Black (nablack)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Joseph Chouinard (jchouina)&lt;br /&gt;
 SE: Ifaz Kabir (ikabir)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Matthew Thiffault (mthiffau)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Youn Jin Kim (yj7kim)&lt;br /&gt;
 VP: Theodor Belaire (tbelaire)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Shane Robert Creighton-Young (srcreigh)&lt;br /&gt;
 SA: Alexis Hunt (aechunt)&lt;br /&gt;
 OF: Mark Farrell (m4farrel)&lt;br /&gt;
 LIB: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
&lt;br /&gt;
= 2015 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Gianni Leonardo Gambetti (glgambet)&lt;br /&gt;
 VP: Luke Franceschini (l3france)&lt;br /&gt;
 TR: Edward Lee (e45lee)&lt;br /&gt;
 SE: Patrick James Melanson (pj2melan)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Shikhar Singh (s285sing)&lt;br /&gt;
 LIB: Aishwarya Gupta (a72gupta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 TR: Jonathan Bailey (jj2baile)&lt;br /&gt;
 SE: Keri Warr (kpwarr)&lt;br /&gt;
 SA: Nik Black (nablack)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
 LIB: Yomna Nasser (ynasser)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Simone Hu (ss2hu)&lt;br /&gt;
 VP: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Jordan Taylore Upiter (jtupiter)&lt;br /&gt;
 SE: Daniel Marin (dmarin)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2016 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Patrick Melanson (pj2melan)&lt;br /&gt;
 Acting VP, progcom chair: Theo Belaire (tbelaire)&lt;br /&gt;
 TR: Luqman Aden (laden)&lt;br /&gt;
 SE: Naomi Koo (m3koo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Reila Zheng (wy2zheng)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
 PR: Luqman Aden (laden)&lt;br /&gt;
 VP: Melissa Angelica Mary Tedesco (matedesc)&lt;br /&gt;
 TR: Jonathan Jerel Bailey (jj2baile)&lt;br /&gt;
 SE: Aditya Shivam Kothari (askothar)&lt;br /&gt;
 SA: Jordan Xavier Pryde (jxpryde)&lt;br /&gt;
 OF: Zachary Seguin (ztseguin)&lt;br /&gt;
 LI: Charlie Wang (s455wang)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
 PR: Charlie Wang (s455wang)&lt;br /&gt;
 VP: Bryan Coutts (b2coutts)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Uday Barar (ubarar)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Jamie Sinn (j2sinn)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Ilia Chtcherbakov (ischtche)&lt;br /&gt;
&lt;br /&gt;
= 2017 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
 PR: Wilson Cheang (wyschean)&lt;br /&gt;
 VP: Tristan Hume (tghume)&lt;br /&gt;
 TR: Jordan Pryde (jxpryde)&lt;br /&gt;
 SE: Amir Fata (aafata)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Felix Bauckholt (fbaukcho)&lt;br /&gt;
 LI: Connor Murphy (cfmurph)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Felix Bauckholt (fbauckho)&lt;br /&gt;
 VP: Zichuan Wei (z34wei)&lt;br /&gt;
 TR: Laura Song (lhsong)&lt;br /&gt;
 SE: Bo Mo (bzmo)&lt;br /&gt;
 SA: Zachary Seguin (ztseguin)&lt;br /&gt;
 OF: Uday Barar (ubarar)&lt;br /&gt;
 LI: Patrick Melanson (pj2melan)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 SE: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Felix Bauckholt (fbauckho)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
= 2018 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Patrick Melanson (pj2melan)&lt;br /&gt;
 VP: Charlie Wang (s455wang)&lt;br /&gt;
 TR: Ashley Dewiputri Pranajaya (adpranaj)&lt;br /&gt;
 SE: Arshia Mufti (a2mufti)&lt;br /&gt;
 SA: Jordan Pryde (jxpryde)&lt;br /&gt;
 OF: Zoë Laing (zlaing)&lt;br /&gt;
 LI: Zichuan Wei (z34wei)&lt;br /&gt;
 FR: Uday Barar (ubarar)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Melissa Tedesco (matedesc)&lt;br /&gt;
 VP: Dhruv Jauhar (djauhar)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Marc Mailhot (mnmailho)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Aditya Thakral (a3thakra)&lt;br /&gt;
 LI: Archer Zhang (z577zhan)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Zichuan Wei (z34wei)&lt;br /&gt;
 VP: Uday Barar (ubarar)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Jennifer Zhou (c7zou)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Neil Parikh (n3parikh)&lt;br /&gt;
 FR:&lt;br /&gt;
&lt;br /&gt;
= 2019 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Marc Mailhot (mnmailho)&lt;br /&gt;
 VP: Victor Brestoiu (vabresto)&lt;br /&gt;
 TR: Tristan Hume (tghume)&lt;br /&gt;
 AV: Aditya Thakral (a3thakra)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Archer Zhang (z577zhan)&lt;br /&gt;
 LI: Rishabh Minocha (rkminoch)&lt;br /&gt;
 FR: Marc Mailhot (mnmailho)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Uday Barar (ubarar)&lt;br /&gt;
 VP: Rajat Malhotra (r24malho)&lt;br /&gt;
 TR: Raghav Sethi (r5sethi)&lt;br /&gt;
 AV: Bo Mo (bzmo)&lt;br /&gt;
 SA: Charlie Wang (s455wang)&lt;br /&gt;
 OF: Hannah Wong (sm7wong)&lt;br /&gt;
 LI: Nolan Munce (nmmunce)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dhruv Jauhar (djauhar)&lt;br /&gt;
 VP: Aditya Thakral (a3thakra)&lt;br /&gt;
 TR: Rishabh Minocha (rkminoch)&lt;br /&gt;
 AV: Tammy Khalaf (tekhalaf)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
 OF: Zihan Zhang (z577zhan)&lt;br /&gt;
 LI: Raghav Sethi (r5sethi)&lt;br /&gt;
&lt;br /&gt;
= 2020 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
The office was closed midway through this term due to the COVID-19 pandemic.&lt;br /&gt;
The pandemic that threw the University and rest of the world into disarray&lt;br /&gt;
drove all CSC activity virtual. Though everyone thought the pandemic would&lt;br /&gt;
quickly be over, the Alpha, then Delta, then Omicron variants resulted in&lt;br /&gt;
the majority of classes being held online until February 2022. As a result,&lt;br /&gt;
the office would stay closed for a full 5 terms, and only reopen in W2022.&lt;br /&gt;
&lt;br /&gt;
 PR: Richard Shi (r27shi)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 TR: Alex Tomala (actomala)&lt;br /&gt;
 AV: Neil Parikh (n3parikh)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
 OF: Alexander Zvorygin (azvorygi)&lt;br /&gt;
 LI: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 FR: Richard Shi (r27shi)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Neil Parikh (n3parikh)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova)&lt;br /&gt;
 SA: Amin Bandali (abandali)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Mokai Xu (m92xu)&lt;br /&gt;
 VP: Anastassia Gaikovaia (agaikova) (stepped down as of 2020-11-30)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Edwin Yang (e37yang)&lt;br /&gt;
 SA: Murphy Berzish (mtrberzi)&lt;br /&gt;
&lt;br /&gt;
= 2021 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Nakul Vijhani (nvijhani)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Kallen Tu (k4tu)&lt;br /&gt;
 VP: Gordon Le (g2le)&lt;br /&gt;
 TR: Neil Parikh (n3parikh)&lt;br /&gt;
 AV: Ravindu Angammana (rbangamm)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
&lt;br /&gt;
=== Fall ===&lt;br /&gt;
&lt;br /&gt;
 PR: Dora Su (d43su)&lt;br /&gt;
 VP: Jason Sang (jzsang)&lt;br /&gt;
 TR: Yanni Wang (y3859wan)&lt;br /&gt;
 AV: Anjing Li (a348li)&lt;br /&gt;
 SA: Max Erenberg (merenber)&lt;br /&gt;
 Advising: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
= 2022 =&lt;br /&gt;
&lt;br /&gt;
=== Winter ===&lt;br /&gt;
&lt;br /&gt;
 PR: Juthika Hoque (j3hoque)&lt;br /&gt;
 VP: Eric Huang (e48huang)&lt;br /&gt;
 TR: Eden Chan (e223chan)&lt;br /&gt;
 AV: Dina Orucevic (dmorucev)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Neil Parikh (n3parikh)&lt;br /&gt;
&lt;br /&gt;
=== Spring ===&lt;br /&gt;
&lt;br /&gt;
 PR: Eden Chan (e223chan)&lt;br /&gt;
 VP: Bonnie Peng (b38peng)&lt;br /&gt;
 TR: Sat Arora (s97arora)&lt;br /&gt;
 AV: Haley Song (h79song)&lt;br /&gt;
 SA: Raymond Li (r389li)&lt;br /&gt;
 WW: Amy Wang (a258wang)&lt;br /&gt;
 OF: Sat Arora (s97arora)&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Club_Hosting&amp;diff=4788</id>
		<title>Club Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Club_Hosting&amp;diff=4788"/>
		<updated>2022-05-04T00:52:47Z</updated>

		<summary type="html">&lt;p&gt;R389li: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Computer Science Club provides web hosting to other clubs free of charge. We host many club web sites. If you have a question about our hosting service, contact syscom at csclub dot uwaterloo dot ca or visit our office in MC 3036.&lt;br /&gt;
&lt;br /&gt;
== Hosting Features ==&lt;br /&gt;
&lt;br /&gt;
* 4 GB web space&lt;br /&gt;
* Scripting&lt;br /&gt;
** PHP (mod_fcgid)&lt;br /&gt;
** Perl (https://wiki.csclub.uwaterloo.ca/Web_Hosting#Dynamic_Sites)&lt;br /&gt;
** Python (https://wiki.csclub.uwaterloo.ca/Web_Hosting#Dynamic_Sites)&lt;br /&gt;
*** Django (https://wiki.csclub.uwaterloo.ca/Web_Hosting#Dynamic_Sites)&lt;br /&gt;
** Ruby (https://wiki.csclub.uwaterloo.ca/Web_Hosting#Dynamic_Sites)&lt;br /&gt;
* Databases&lt;br /&gt;
** [[MySQL]]&lt;br /&gt;
&lt;br /&gt;
This is not an exhaustive list. Contact us if you want something not listed or installed.&lt;br /&gt;
&lt;br /&gt;
== Getting Hosted ==&lt;br /&gt;
&lt;br /&gt;
To get hosted, you need a &#039;&#039;&#039;club account&#039;&#039;&#039; and one &#039;&#039;&#039;user account&#039;&#039;&#039; for each person who will be updating the club&#039;s web site or other files.&lt;br /&gt;
&lt;br /&gt;
The general process to get yourself an account on our systems to host your club website is:&lt;br /&gt;
&lt;br /&gt;
1. Request a free club account on the CSC systems by emailing syscom@csclub.uwaterloo.ca from an official club email (an official club email is one that is posted on your website or Facebook page, for example). Something along the lines of &amp;quot;I am from the ActSci club and am the current webmaster. Can I be registered for a club account to access the ActSci website?&amp;quot; Include the WatIAM userids (Quest ID) of any club reps that should be authorized to manage the club account in your email.&lt;br /&gt;
&lt;br /&gt;
2. For each club rep that needs access, an email needs to be sent to syscom with the following information, if they don&#039;t already have a CSC account:&lt;br /&gt;
&lt;br /&gt;
* a scan or photograph copy of the rep&#039;s WatCard,&lt;br /&gt;
* their WatIAM userid, and&lt;br /&gt;
* their acknowledgement of having read, understood, and agreeing with our Machine Usage Agreement.&lt;br /&gt;
&lt;br /&gt;
These can be sent in one email or separately.&lt;br /&gt;
&lt;br /&gt;
3. Once syscom receives these, the users will be given permission to access your club website by adding you to your corresponding club group (for example, the actsci user group).&lt;br /&gt;
&lt;br /&gt;
=== Club Account ===&lt;br /&gt;
&lt;br /&gt;
Each club we host has a &amp;quot;club account&amp;quot; that owns and stores club resources. You can request a club account via email or in person. The club account:&lt;br /&gt;
&lt;br /&gt;
* Is named after the club, possibly abbreviated.&lt;br /&gt;
* Has a home directory named /users/clubname, where club files are stored.&lt;br /&gt;
* Is not permitted to log in. You must use your own user account to login.&lt;br /&gt;
&lt;br /&gt;
The Systems Committee will create club accounts when sent a request from the club&#039;s email address to syscom@csclub.uwaterloo.ca. Verification of the club&#039;s university affiliation may be required, for instance by contacting the Federation of Students or the club&#039;s faculty advisor.&lt;br /&gt;
&lt;br /&gt;
=== User Accounts ===&lt;br /&gt;
&lt;br /&gt;
Each user who needs access to the club account must have his/her own user account on our machines. There are two ways to get an account:&lt;br /&gt;
&lt;br /&gt;
* Become a member of the Computer Science Club. Membership is $2.00 per term.&lt;br /&gt;
* Request a free &amp;quot;club representative&amp;quot; account. These accounts are to be used solely for managing the club account, and expire at the end of the term.&lt;br /&gt;
&lt;br /&gt;
Club representatives can request renewal of their free accounts (for one or more terms) if they still need the account to manage the club account in future terms.&lt;br /&gt;
&lt;br /&gt;
Your user account must also be authorized to change club files. Each club has a &amp;quot;club group&amp;quot; whose members may update the clubs files. We add (and remove) users to the group when we are asked to do so by the club exec. The exec must email the Systems Committee (syscom@csclub.uwaterloo.ca) from a club email address.&lt;br /&gt;
&lt;br /&gt;
Any office staff member may create and renew both member and club representative accounts using [[ceo]]. Only Systems Committee members may modify club access lists.&lt;br /&gt;
&lt;br /&gt;
== Accessing Club Resources ==&lt;br /&gt;
&lt;br /&gt;
At this point, you have a user account and a club account, and need to get started with your web site. Before you can do anything, you need to log into our machines somehow. &lt;br /&gt;
&lt;br /&gt;
=== Shell Access ===&lt;br /&gt;
&lt;br /&gt;
To gain shell access to your site, you can:&lt;br /&gt;
&lt;br /&gt;
* Log in using a terminal in the office&lt;br /&gt;
* Log in from anywhere using SSH. We discourage SSH&#039;ing into our web server (caffeine), you should use a different general-use machine (like corn-syrup.csclub.uwaterloo.ca)&lt;br /&gt;
&lt;br /&gt;
The club&#039;s files are stored in /users/clubname.&lt;br /&gt;
&lt;br /&gt;
If you want, you can become the club user by typing &amp;quot;become_club clubname&amp;quot;. This is not usually necessary, as the permissions should allow you to make changes as yourself.&lt;br /&gt;
&lt;br /&gt;
=== SFTP File Access ===&lt;br /&gt;
&lt;br /&gt;
You may access files stored on our servers, or upload new ones, via SFTP and SCP. If you are a Windows user you should use [http://winscp.net/ WinSCP] or a similar client with SFTP/SCP abilities. If you are using OS X you can use the sftp or scp Terminal commands, or you can install a graphical client such as [http://cyberduck.ch/ Cyberduck]. Similarly on GNU/Linux you can use the shell commands or a graphical client such as gftp.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
=== Web Hosting ===&lt;br /&gt;
&lt;br /&gt;
See [[Web Hosting]].&lt;br /&gt;
&lt;br /&gt;
=== Databases ===&lt;br /&gt;
&lt;br /&gt;
See [[MySQL]].&lt;br /&gt;
&lt;br /&gt;
You can create a MySQL database yourself through [[ceo]] by following [[MySQL#Using_ceo|these instructions]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4784</id>
		<title>Machine List</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Machine_List&amp;diff=4784"/>
		<updated>2022-04-28T21:49:13Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* mathnews */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most of our machines are in the E7, F7, G7 and H7 racks (as of Jan. 2022) in the MC 3015 server room. There is an additional rack in the DC 3558 machine room on the third floor. Our office terminals are in the CSC office, in MC 3036/3037.&lt;br /&gt;
&lt;br /&gt;
= Web Server =&lt;br /&gt;
You are highly encouraged to avoid running anything that&#039;s not directly related to your CSC webspace on our web server. We have plenty of general-use machines; please use those instead. You can even edit web pages from any other machine--usually the only reason you&#039;d *need* to be on caffeine is for database access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;caffeine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Caffeine is the Computer Science Club&#039;s web server. It serves websites, databases for websites, and a large amount of other services.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently a virtual machine hosted on phosphoric-acid&lt;br /&gt;
** 12 vCPUs&lt;br /&gt;
** 32GB of RAM&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Club and member web sites with [[Apache]]&lt;br /&gt;
* [[MySQL]] databases&lt;br /&gt;
* [[PostgreSQL]] databases&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
* mail was migrated to [[#mail|mail]]&lt;br /&gt;
&lt;br /&gt;
= General-Use Servers =&lt;br /&gt;
&lt;br /&gt;
These machines can be used for (nearly) anything you like (though be polite and remember that these are shared machines). Recall that when you signed the Machine Usage Agreement, you promised not to use these machines to generate profit (so no cryptocurrency mining).&lt;br /&gt;
&lt;br /&gt;
For computationally-intensive jobs (CPU/memory bound) we recommend running on high-fructose-corn-syrup, carbonated-water, sorbitol, mannitol, or corn-syrup, listed in roughly decreasing order of available resources. For low-intensity interactive jobs, such as IRC clients, we recommend running on neotame. If you have a long-running computationally intensive job, it&#039;s good to nice[https://en.wikipedia.org/wiki/Nice_(Unix)] your process, and possibly let syscom know too.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
PowerEdge 2950&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 × Intel Xeon E5405 (2.00 GHz, 4 cores each)&lt;br /&gt;
* 32 GB RAM&lt;br /&gt;
* eth0 (&amp;quot;Gb0&amp;quot;) mac addr 00:24:e8:52:41:27&lt;br /&gt;
* eth1 (&amp;quot;Gb1&amp;quot;) mac addr 00:24:e8:52:41:29&lt;br /&gt;
* IPMI mac addr 00:24:e8:52:41:2b&lt;br /&gt;
* 3 &amp;amp;times; Western-Digital 160GB SATA hard drive (445 GB software RAID0 array)&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* Use eth0/Gb0 for the mathstudentorgsnet connection&lt;br /&gt;
* has ipmi on corn-syrup-ipmi.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Hosts 1 TB &amp;lt;tt&amp;gt;[[scratch|/scratch]]&amp;lt;/tt&amp;gt; and exports via NFS (sec=krb5)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;high-fructose-corn-syrup&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
High-fructose-corn-syrup (or hfcs) is a large SuperMicro server. It&#039;s been in CSC service since April 2012.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6272 (2.4 GHz, 16 cores each)&lt;br /&gt;
* 192 GB RAM&lt;br /&gt;
* Supermicro H8QGi+-F Motherboard Quad 1944-pin Socket [http://csclub.uwaterloo.ca/misc/manuals/motherboard-H8QGI+-F.pdf (Manual)]&lt;br /&gt;
* 500 GB Seagate Barracuda&lt;br /&gt;
* Supermicro Case Rackmount CSE-748TQ-R1400B 4U [http://csclub.uwaterloo.ca/misc/manuals/SC748.pdf (Manual)]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;carbonated-water&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
carbonated-water is a Dell R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x AMD Opteron 6176 processors (2.3 GHz, 12 cores each)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;neotame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
neotame is a SuperMicro server funded by MEF. It is the successor to taurine.&lt;br /&gt;
&lt;br /&gt;
We discourage running computationally-intensive jobs on neotame as many users run interactive applications such as IRC clients on it and any significant service degradation will be more likely to affect other users (who will probably notice right away).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* SSH server also listens on ports 21, 22, 53, 80, 81, 443, 8000, 8080 for your convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sorbitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sorbitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mannitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mannitol is a SuperMicro server funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2630 processors (2.2 GHz, 10 cores/20 threads each)&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
&lt;br /&gt;
= Office Terminals =&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to SSH into these machines, but we discourage you from trying to use these machines when you&#039;re not sitting in front of them. They are bounced at least every time our login manager, lightdm, throws a tantrum (which is several times a day). These are for use inside our physical office.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;bit-shifter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
bit-shifter is an office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel(R) Core(TM)2 Quad CPU    Q8300&lt;br /&gt;
* 4GB RAM&lt;br /&gt;
* Nvidia GeForce GT 440&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Jacob Parker&#039;s Firewire Card&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;gwem&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
gwem is an office terminal that was created because AMD donated a graphics card. It entered CSC service in February 2012.&lt;br /&gt;
&lt;br /&gt;
=== Specs ===&lt;br /&gt;
&lt;br /&gt;
* AMD FX-8150 3.6GHz 8-Core CPU&lt;br /&gt;
* 16 GB RAM&lt;br /&gt;
* AMD Radeon 6870 HD 1GB GPU&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ga-990fxa-ud7_e.pdf Gigabyte GA-990FXA-UD7] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;maltodextrin&#039;&#039; ==&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/motherboard_manual_ga-ep45-ud3l.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
Maltodextrin is an office terminal. It was upgraded in Spring 2014 after an unidentified failure.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i3-4130 @ 3.40 GHz&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/E8425_H81I_PLUS.pdf ASUS H81-PLUS] Motherboard&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://csclub.uwaterloo.ca/office/webcam Office webcam]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;natural-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Natural-flavours is an office terminal; it used to be our mirror.&lt;br /&gt;
&lt;br /&gt;
In Fall 2016, it received a major upgrade thanks the MathSoc&#039;s Capital Improvement Fund.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Core i7-6700k&lt;br /&gt;
* 2x8GB RAM&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* Cup Holder (DVD drive has power, but not connected to mother board)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;strombola&#039;&#039;==&lt;br /&gt;
It is named after Gordon Strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Core2 Quad Q8200 @ 2.33GHz&lt;br /&gt;
* 4 GB RAM&lt;br /&gt;
* nVidia GeForce 8600 GTS&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/strombola.pdf Gigabyte GA-EP45-UD3L] Motherboard&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Strombola used to have integrated 5.1 channel sound before we got new speakers and moved audio stuff to nullsleep.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;nullsleep&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
nullsleep is an [http://csclub.uwaterloo.ca/misc/manuals/ASRock_ION_330.pdf ASRock ION 330] machine given to us by CSCF and funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel® Dual Core Atom™ 330&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* NVIDIA® ION™ graphics&lt;br /&gt;
* 1x 64GB SanDisk SDSSDP064G SSD&lt;br /&gt;
* DVD Burner&lt;br /&gt;
&lt;br /&gt;
==== Speakers ====&lt;br /&gt;
Nullsleep has the office speakers (a pair of nice studio monitors) currently connected to it.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
Nullsleep runs MPD for playing music. Control of MPD is available only to users in the &amp;quot;audio&amp;quot; group.&lt;br /&gt;
Music is located in /music on the office terminals&lt;br /&gt;
&lt;br /&gt;
= Progcom Only =&lt;br /&gt;
The Programme Committee has access to a VM on corn-syrup called &#039;progcom&#039;. They have sudo rights in this VM so they may install and run their own software inside it. This VM should only be accessible by members of progcom or syscom.&lt;br /&gt;
&lt;br /&gt;
= Syscom Only =&lt;br /&gt;
&lt;br /&gt;
The following systems may only be accessible to members of the [[Systems Committee]] for a variety of reasons; the most common of which being that some of these machines host [[Kerberos]] authentication services for the CSC.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;xylitol&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
xylitol is a Dell PowerEdge R815 donated by CSCF. It is primarily a container host for services previously hosted on aspartame and dextrose, including munin, rt, mathnews, auth1, and dns1. It was provisioned with the intent to replace both of those hosts.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Dual AMD Opteron 6176 (2.3 GHz, 48 cores total)&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 500GB volume group on RAID1 SSD (xylitol-mirrored)&lt;br /&gt;
* 500ish-GB volume group on RAID10 HDD (xylitol-raidten)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth1&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] primary&lt;br /&gt;
* [[Kerberos]] primary&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chat&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#xylitol|xylitol]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* The Lounge web IRC client (https://chat.csclub.uwaterloo.ca)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phosphoric-acid&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phosphoric-acid is a Dell PowerEdge R815 donated by CSCF and is a clone of xylitol. It may be used to provide redundant cloud services in the future.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[#caffeine|caffeine]]&lt;br /&gt;
* [[#coffee|coffee]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;coffee&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine running on phosphoric-acid.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Database#MySQL|MySQL]]&lt;br /&gt;
* [[Database#Postgres|Postgres]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;cobalamin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Dell PowerEdge 2950 donated to us by FEDS. Located in the Science machine room on the first floor of Physics. Will act as a backup server for many things.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 1 × Intel Xeon E5420 (2.50 GHz, 4 cores)&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* Broadcom NetworkXtreme II&lt;br /&gt;
* 2x73GB Hard Drives, hardware RAID1&lt;br /&gt;
** Soon to be 2x1TB in MegaRAID1&lt;br /&gt;
* http://www.dell.com/support/home/ca/en/cabsdt1/product-support/servicetag/51TYRG1/configuration&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Containers: [[#auth2|auth2]]&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* The network card requires non-free drivers. Be sure to use an installation disc with non-free.&lt;br /&gt;
&lt;br /&gt;
* We have separate IP ranges for cobalamin and its containers because the machine is located in a different building. They are:&lt;br /&gt;
&lt;br /&gt;
** VLAN ID 506 (csc-data1): 129.97.18.16/29; gateway 129.97.18.17; mask 255.255.255.240&lt;br /&gt;
** VLAN ID 504 (csc-ipmi): 172.19.5.24/29; gateway 172.19.5.25; mask 255.255.255.248&lt;br /&gt;
&lt;br /&gt;
* For some reason, the keyboard is shit. Try to avoid having to use it. It&#039;s doable, but painful. IPMI works now, and then we don&#039;t need to bug about physical access so it&#039;s better anyway.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;auth2&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Container on [[#cobalamin|cobalamin]].&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[LDAP]] secondary&lt;br /&gt;
* [[Kerberos]] secondary&lt;br /&gt;
&lt;br /&gt;
MAC Address: c2:c0:00:00:00:a2&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mail&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
mail is the CSC&#039;s mail server. It hosts mail delivery, imap(s), smtp(s), and mailman. It is also syscom-only. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#biloba|biloba]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mail]] services&lt;br /&gt;
* mailman (web interface at [http://mailman.csclub.uwaterloo.ca/])&lt;br /&gt;
* [[Webmail]]&lt;br /&gt;
* [[ceo]] daemon&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-benzoate is our previous mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
It is currently sitting in the office pending repurposing. Will likely become a machine for backups in DC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon Quad Core E5405 @ 2.00 GHz&lt;br /&gt;
* 16GB RAM&lt;br /&gt;
* vg0: 228 GB block device behind DELL PERC 6/i (contains root partition)&lt;br /&gt;
&lt;br /&gt;
Space disks are currently in the office underneath maltodextrin.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-benzoate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate is our mirror server, funded by MEF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 36 drive Supermicro chassis (SSG-6048R-E1CR36L) &lt;br /&gt;
* 1 x Intel Xeon E5-2630 (8 cores, 2.40 GHz)&lt;br /&gt;
* 64 GB (4 x 16GB) of DDR4 (2133Mhz)  ECC RAM&lt;br /&gt;
* 2 x 1 TB Samsung Evo 850 SSD drives&lt;br /&gt;
* 17 x 4 TB Western Digital Gold drives (separate funding from MEF)&lt;br /&gt;
* 10 Gbps SFP+ card (loaned from CSCF)&lt;br /&gt;
* 50 Gbps Mellanox QSFP card (from ginkgo; currently unconnected)&lt;br /&gt;
&lt;br /&gt;
==== Network Connections ====&lt;br /&gt;
&lt;br /&gt;
potassium-benzoate has two connections to our network:&lt;br /&gt;
&lt;br /&gt;
* 1 Gbps to our switch (used for management)&lt;br /&gt;
* 2 x 10 Gbps (LACP bond) to mc-rt-3015-mso-a (for mirror)&lt;br /&gt;
&lt;br /&gt;
Mirror&#039;s bandwidth is limited to 1 Gbps on each of the 4 campus internet links. Mirror&#039;s bandwidth is not limited on campus.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [[Mirror]]&lt;br /&gt;
* [[Talks]] mirror&lt;br /&gt;
* [[Debian_Repository|CSClub packages repository]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;munin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
munin is a syscom-only monitoring and accounting machine. It is a [[Virtualization#Linux_Containers|Linux container]] at present.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* currently hosted on [[#xylitol|xylitol]]&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* [http://munin.csclub.uwaterloo.ca munin] systems monitoring daemon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;yerba-mate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 Hz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* test-ipv6 (test-ipv6.csclub.uwaterloo.ca; a test-ipv6.com mirror)&lt;br /&gt;
* mattermost (under development)&lt;br /&gt;
* shibboleth (under development)&lt;br /&gt;
&lt;br /&gt;
Also used for experimenting new CSC services.&lt;br /&gt;
&lt;br /&gt;
= Cloud =&lt;br /&gt;
&lt;br /&gt;
These machines are used by [https://cloud.csclub.uwaterloo.ca cloud.csclub.uwaterloo.ca]. The machines themselves are restricted to Syscom only access.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;chamomile&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R815 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 4x 2.20GHz 12-core processors&lt;br /&gt;
* 128GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack primary controller services for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;riboflavin&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge R515 provided by CSCF.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 2.6 GHz 8-core processors&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 10GbE connection to core router&lt;br /&gt;
* 2x 500GB internal SSD&lt;br /&gt;
* 12x Seagate 4TB SSHD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack block and object storage for csclub.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;guayusa&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Dell PowerEdge 2950 donated by a CSC member.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x 3.00 GHz quad core Intel Xeon 5160&lt;br /&gt;
* 32GB RAM&lt;br /&gt;
* 2TB PCI-Express Flash SSD&lt;br /&gt;
* 2x75GB 15k drives (RAID 1)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
Currently in use for experimenting new CSC services.&lt;br /&gt;
&lt;br /&gt;
* logstash (testing of logstash)&lt;br /&gt;
* load-balancer-01&lt;br /&gt;
* cifs (for booting ginkgo from CD)&lt;br /&gt;
* caffeine-01 (testing of multi-node caffeine)&lt;br /&gt;
* block1.cloud&lt;br /&gt;
* object1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginkgo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by MEF for CSC web hosting. Locate in MC 3015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon E5-2697 v4 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 256GB RAM&lt;br /&gt;
* 2 x 1.2 TB SSD (400GB of each for RAID 1)&lt;br /&gt;
* 10GbE onboard, 25GbE SFP+ card (also included 50GbE SFP+ card which will probably go in mirror)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* controller1.cloud&lt;br /&gt;
* db1.cloud&lt;br /&gt;
* router1.cloud (NAT for cloud tenant network)&lt;br /&gt;
* network1.cloud&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;biloba&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Supermicro server funded by SLEF for CSC web hosting. Located in DC 3558.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2x Intel Xeon Gold 6140 @ 2.30GHz [18 cores each]&lt;br /&gt;
* 384GB RAM&lt;br /&gt;
* 12 3.5&amp;quot; Hot Swap Drive Bays&lt;br /&gt;
** 2 x 480 GB SSD&lt;br /&gt;
* 10GbE onboard, 10GbE SFP+ card (on loan from CSCF)&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* OpenStack Compute machine&lt;br /&gt;
&lt;br /&gt;
No longer in use:&lt;br /&gt;
&lt;br /&gt;
* caffeine&lt;br /&gt;
* mail&lt;br /&gt;
* mattermost&lt;br /&gt;
&lt;br /&gt;
= Storage =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs00&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs00 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;fs01&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
fs01 is a NetApp FAS3040 series fileserver donated by CSCF.&lt;br /&gt;
&lt;br /&gt;
It is currently being used for testing of a HA NetApp nodes and serving home directories directly from the NetApp filer.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;goto80&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a small ARM machine we picked up in order to have similar hardware to the Real Time Operating Systems (CS 452) course. It has a [[TS-7800_JTAG|JTAG]] interface. Located in the office on the top shelf above strombola.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 500 MHz Feroceon (ARM926ej-s compatible) processor&lt;br /&gt;
* ARMv5TEJ architecture&lt;br /&gt;
&lt;br /&gt;
Use -march=armv5te -mtune=arm926ej-s options to GCC.&lt;br /&gt;
&lt;br /&gt;
For information on the TS-7800&#039;s hardware see here:&lt;br /&gt;
http://www.embeddedarm.com/products/board-detail.php?product=ts-7800&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;binaerpilot&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Tobi expansion board. It is currently attached to corn-syrup in the machine room and even more currently turned off until someone can figure out what is wrong with it.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;anamanaguchi&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This is a Gumstix Overo Tide CPU on a Chestnut43 expansion board. It is currently in the hardware drawer in the CSC.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* TI OMAP 3530 750Mhz (ARM Cortex-A8)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;digital cutter&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
See [[Digital Cutter|here]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;mathnews&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[#xylitol|xylitol]] hosts a systemd-nspawn container which serves as the mathNEWS webserver. It is administered by mathNEWS, as a pilot for providing containers to select groups who have more specialized demands than the general-use infrastructure can meet.&lt;br /&gt;
&lt;br /&gt;
= Decommissioned =&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;aspartame&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
aspartame was a taurine clone donated by CSCF. It was once our primary file server, serving as the gateway interface to space on phlogiston. It also used to host the [[#auth1|auth1]] container, which has been temporarily moved to [[#dextrose|dextrose]]. Decomissioned in March 2021 after refusing to boot following a power outage.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;psilodump&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
psilodump is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling phlogiston, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
psilodump was plugged into aspartame. It&#039;s still installed but inaccessible.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;phlogiston&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
phlogiston is a NetApp FAS3000 series fileserver donated by CSCF. It, along with its sibling psilodump, hosted disk shelves exported as iSCSI block devices.&lt;br /&gt;
&lt;br /&gt;
phlogiston is turned off and should remain that way. It is misconfigured to have its drives overlap with those owned by psilodump, and if it is turned on, it will likely cause irreparable data loss.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 10GB RAM&lt;br /&gt;
&lt;br /&gt;
==== Notes from before decommissioning ====&lt;br /&gt;
&lt;br /&gt;
* The lxc files are still present and should not be started up, or else the two copies of auth1 will collide.&lt;br /&gt;
* It currently cannot route the 10.0.0.0/8 block to a misconfiguration on the NetApp. This should be fixed at some point.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;glomag&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Glomag hosted [[#caffeine|caffeine]]. Decommissioned April 6, 2018.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Xeon X3450 @ 2.67 GHz&lt;br /&gt;
* 6 GB RAM&lt;br /&gt;
* vg0: 465 GB software RAID1 (contains root partition):&lt;br /&gt;
** 750 GB Seagate Barracuda SATA hard drive&lt;br /&gt;
** 500 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
* vg1: 596 GB software RAID1 (contains caffeine):&lt;br /&gt;
** 2 &amp;amp;times; 640 GB Western-Digital Caviar Blue SATA hard drive&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Before its decommissioning, glomag hosted [[#caffeine|caffeine]], [[#mail|mail]], and [[#munin|munin]] as [[Virtualization#Linux_Container|Linux containers]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;Lisp machine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
A Symbolics XL1200 Lisp machine. Donated to a new home when we couldn&#039;t get it working.&lt;br /&gt;
&lt;br /&gt;
http://www.globalnerdy.com/2008/12/03/symbolics-xl1200-lisp-machine-free-to-a-good-home/ for some history on this hardware.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
Currently inoperable due to (at least) a missing console cable.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;ginseng&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Ginseng used to be our fileserver, before aspartame and the netapp took over.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Pentium Dual Core E2180&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/s3000ah_tps_1_1.pdf Intel S3000AHV Motherboard]&lt;br /&gt;
* 4 &amp;amp;times; 640 GB Western-Digital Caviar Blue in [http://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_10_.28RAID_1.2B0.29 RAID 10] behind a [http://www.3ware.com/products/serial_ata2-9650.asp 3ware 9650SE RAID card].&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;calum&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Calum used to be our main server and was named after Calum T Dalek.  Purchased new by the club in 1994. &lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* SPARCserver 10 (headless SPARCstation 10)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;paza&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An iMac G3 that was used as a dumb terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 233Mhz PowerPC 740/750&lt;br /&gt;
* 96 MB RAM&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;romana&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Romana was a BeBox that has been in the CSC&#039;s possession since long before BeOS became defunct.&lt;br /&gt;
&lt;br /&gt;
Confirmed on March 19th, 2016 to be fully functional. An SSHv1 compatible client was installed from http://www.abstrakt.ch/be/ and a compatible firewalled daemon was started on Sucrose (living in /root, prefix is /root/ssh-romana). The insecure daemon is to be used a bastion host to jump to hosts only supporting &amp;gt;=SSHv2. The mail daemon on the BeBox has also been configured to send mail through mail.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 PowerPC based processors&lt;br /&gt;
* Stylish Blinken processor-load lights&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sodium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Sodium-citrate was an SGI O2 machine.&lt;br /&gt;
&lt;br /&gt;
In order to net boot you need to set /proc/sys/net/ipv4/ip_no_pmtu_disc to 1. When the O2 boots, hit F5 at the boot menu and type bootp():.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* SGI O2 MIPS processor&lt;br /&gt;
* 423 MB (?) RAM&lt;br /&gt;
* 2 &amp;amp;times; 2 GB hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;acesulfame-potassium&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
An old office terminal.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Intel Pentium 4 2.67GHz&lt;br /&gt;
* 1GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/ABIT_VT7.pdf ABIT VT7] Motherboard&lt;br /&gt;
* ATI Radeon 7000&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;skynet&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
skynet was a Sun E6500 machine donated by Sanjay Singh. It was never fully set up.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 15 full CPU/memory boards&lt;br /&gt;
** 2x UltraSPARC II 464MHz / 8MB Cache Processors&lt;br /&gt;
** ??? RAM?&lt;br /&gt;
* 1 I/O board (type=???)&lt;br /&gt;
** ???x disks?&lt;br /&gt;
* 1 CD-ROM drive&lt;br /&gt;
&lt;br /&gt;
* [http://mirror.csclub.uwaterloo.ca/csclub/sun_e6500/ent6k.srvr/ e6500 documentation (hosted on mirror, currently dead link)]&lt;br /&gt;
* [http://docs.oracle.com/cd/E19095-01/ent6k.srvr/ e6500 documentation (backup link)]&lt;br /&gt;
* [http://www.e6500.com/ e6500]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;freebsd&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
FreeBSD was a virtual machine with FreeBSD installed.&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Newer software&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;rainbowdragoneyes&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Rainbowdragoneyes was our Lemote Fuloong MIPS machine. This machine is aliased to rde.csclub.uwaterloo.ca.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 800MHz MIPS Loongson 2f CPU&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;denardo&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Due to some instability, general uselessness, and the acquisition of a more powerful SPARC machine from MFCF, denardo was decommissioned in February 2015.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Sun Fire V210&lt;br /&gt;
* TI UltraSparc IIIi (Jalapeño)&lt;br /&gt;
* 2 GB RAM&lt;br /&gt;
* 160 GB RAID array&lt;br /&gt;
* ALOM on denardo-alom.csclub can be used to power machine on/off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;artificial-flavours&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Artificial-flavours was our secondary (backup services) server. It used to be an office terminal. It was decommissioned in February 2015 and transferred to the ownership of Women in Computer Science (WiCS).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* Intel Celeron 3.2GHz&lt;br /&gt;
* 2GB RAM&lt;br /&gt;
* [http://csclub.uwaterloo.ca/misc/manuals/Biostar_P4M80-M4.pdf Biostar P4M80-M4] Motherboard&lt;br /&gt;
* Western-Digital 80 GB ATA hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-citrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Potassium-citrate is a dual-processor Alpha machine. It is on extended loan from pbarfuss.&lt;br /&gt;
&lt;br /&gt;
It is temporarily decommissioned pending the reinstallation of a supported operating system (such as OpenBSD).&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
* Alphaserver CS20 (2 833MHz EV68al CPUs)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
* 36 GB Seagate SCSI hard drive&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;potassium-nitrate&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
This was a Sun Fire E2900 from a decommissioned MFCF compute cluster. It had a SPARC architecture and ran OpenBSD, unlike many of our other systems which are x86/x86-64 and Linux/Debian. After multiple unsuccessful attempts to boot a modern Linux kernel and possible hardware instability, it was determined to be non-cost-effective and non-effort-effective to put more work into running this machine. The system was reclaimed by MFCF where someone from CS had better luck running a suitable operating system (probably Solaris).&lt;br /&gt;
&lt;br /&gt;
The name is from saltpetre, because sparks.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 24 CPUs&lt;br /&gt;
* 90GB main memory&lt;br /&gt;
* 400GB scratch disk local storage in /scratch-potassium-nitrate&lt;br /&gt;
&lt;br /&gt;
There is a [[Sun 2900 Strategy Guide|setup guide]] available for this machine.&lt;br /&gt;
&lt;br /&gt;
See also [[Sun 2900]].&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;taurine&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: On August 21, 2019, just before 2:30PM EDT, we were informed that taurine caught fire&#039;&#039;&#039;. As a result, taurine has been decommissioned as of Fall 2019.&lt;br /&gt;
&lt;br /&gt;
==== Specs ====&lt;br /&gt;
&lt;br /&gt;
* 2 AMD Opteron 2218 CPUs&lt;br /&gt;
* 8GB RAM&lt;br /&gt;
* 136 GB LVM volume group&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
* Virtual machines&lt;br /&gt;
* BitlBee IRC instant messaging gateway (localhost only)&lt;br /&gt;
* [[ident]] server to maintain high connection cap to freenode&lt;br /&gt;
* Runs ssh on ports 21,22,53,80,81,443,8000,8080 for user&#039;s convenience.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;dextrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
dextrose was a [[#taurine|taurine]] clone donated by CSCF and was decommissioned in Fall 2019 after being replaced with a more powerful server.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;sucrose&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
sucrose was a [[#taurine|taurine]] clone donated by CSCF. It was decommissioned in Fall 2019 following multiple hardware failures.&lt;br /&gt;
&lt;br /&gt;
= UPS =&lt;br /&gt;
&lt;br /&gt;
All of the machines in the MC 3015 machine room are connected to one of our UPSs.&lt;br /&gt;
&lt;br /&gt;
All of our UPSs can be monitored via CSCF:&lt;br /&gt;
&lt;br /&gt;
* MC3015-UPS-B2&lt;br /&gt;
* mc-3015-e7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced July 2014) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-e7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-f7-ups-1.cs.uwaterloo.ca (rbc55, batteries replaced Feb 2017) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-f7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2010) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-g7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-g7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-1.cs.uwaterloo.ca (su5000t, batteries replaced 2004) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-1&amp;amp;var-Interval=30m)&lt;br /&gt;
* mc-3015-h7-ups-2.cs.uwaterloo.ca (unknown) (https://metrics.cscf.uwaterloo.ca/grafana/dashboard/db/ups-statistics?orgId=1&amp;amp;var-UPS=mc-3015-h7-ups-2&amp;amp;var-Interval=30m)&lt;br /&gt;
&lt;br /&gt;
We will receive email alerts for any issues with the UPS. Their status can be monitored via [[SNMP]].&lt;br /&gt;
&lt;br /&gt;
TODO: Fix labels &amp;amp; verify info is correct &amp;amp; figure out why we can&#039;t talk to cacti.&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Web_Hosting&amp;diff=4779</id>
		<title>Web Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Web_Hosting&amp;diff=4779"/>
		<updated>2022-04-12T21:33:14Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* ***NOTICE*** */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The CSC offers web hosting for [[Club Hosting|clubs]] and [http://csclub.uwaterloo.ca/about/ our members] in accordance with our [http://csclub.uwaterloo.ca/services/machine_usage Machine Usage Agreement]. This is a quick guide for the kinds of hosting we offer on our webserver, &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;, also known as [[Machine List#caffeine|caffeine]].&lt;br /&gt;
&lt;br /&gt;
We run an Apache httpd webserver and we offer you the use of a [[MySQL|MySQL database]].&lt;br /&gt;
&lt;br /&gt;
== What can I host on my website? ==&lt;br /&gt;
&lt;br /&gt;
Web hosting is provided in accordance with the CSC [http://csclub.uwaterloo.ca/services/machine_usage Machine Usage Agreement]. As a reminder, you are &#039;&#039;&#039;not permitted&#039;&#039;&#039; to host any of the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ads.&#039;&#039;&#039; Advertisements are not permitted because using our machines for commercial purposes is forbidden by university policy.&lt;br /&gt;
* &#039;&#039;&#039;Your start-up&#039;s website.&#039;&#039;&#039; Again, commercial use of our hosting is not permitted.&lt;br /&gt;
* &#039;&#039;&#039;Unauthorized copyrighted materials.&#039;&#039;&#039; Violating the law is a violation of our Machine Usage Agreement.&lt;br /&gt;
&lt;br /&gt;
Please note that &#039;&#039;&#039;this is not an exhaustive list. Websites may be taken down &#039;&#039;without notice&#039;&#039;&#039;&#039;&#039; at the discretion of the Systems Committee. (We will always let you know that we took your site down, but if it is breaking our shared environment, we can&#039;t provide an advance warning.)&lt;br /&gt;
&lt;br /&gt;
Some great examples of things members host on our webserver:&lt;br /&gt;
&lt;br /&gt;
* Academic projects!&lt;br /&gt;
* A personal website or blog!&lt;br /&gt;
* [[Club Hosting|Club websites!]]&lt;br /&gt;
&lt;br /&gt;
== How do I make a website? ==&lt;br /&gt;
&lt;br /&gt;
If this is your first time making a website, this section may be useful to you.&lt;br /&gt;
&lt;br /&gt;
To build your website, CS Club suggests you use http://blog.getpelican.com/ (Python) or https://jekyllrb.com/ (Ruby). They generate static sites and are faster, simpler and more secure than CMSs like WordPress (dynamic and written in PHP) for small sites. We routinely disable WordPress sites that are more than a few weeks out of date (or if a critical security flaw is disclosed).&lt;br /&gt;
&lt;br /&gt;
You can transfer files to the CS Club via SFTP If you run Windows use https://winscp.net/eng/index.php, if you use OS X use https://cyberduck.io/?l=en, and Linux users can directly access SFTP by using ssh:// urls in their GUI file managers. You can use SSH for direct shell access, just run &amp;lt;tt&amp;gt;ssh ctdalek@corn-syrup.csclub.uwaterloo.ca&amp;lt;/tt&amp;gt; or look at https://wiki.csclub.uwaterloo.ca/Machine_List for our other machines. Please do not connect to caffeine (the actual web server) unless you need to debug code. You can also just create your site on our servers or in our office to avoid having to shuffle files around. Your home directory is distributed everywhere via NFS. Bonus points if you use Git to sync your own computer with our servers, if you do this we recommend using git.uwaterloo.ca as your upstream repository.&lt;br /&gt;
&lt;br /&gt;
If you need help, email &amp;lt;tt&amp;gt;syscom@csclub.uwaterloo.ca[mailto:syscom@csclub.uwaterloo.ca]&amp;lt;/tt&amp;gt; or come to the CS Club office on the MC 3rd floor across from the Mathsoc CnD.&lt;br /&gt;
&lt;br /&gt;
== DNS and Your Domain Name ==&lt;br /&gt;
&lt;br /&gt;
You can serve files without any additional configuration by placing them in your &amp;lt;tt&amp;gt;www&amp;lt;/tt&amp;gt; directory and accessing them at &amp;lt;tt&amp;gt;http://csclub.uwaterloo.ca/~userid&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;userid&amp;lt;/tt&amp;gt; is your CSC user ID. However, many of our members and clubs prefer to use a custom domain name.&lt;br /&gt;
&lt;br /&gt;
Note that this means you &#039;&#039;do not&#039;&#039; have to register a domain name to be able to use our services. You can just put a website at &amp;lt;tt&amp;gt;http://csclub.uwaterloo.ca/~userid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== uwaterloo.ca domain Names ===&lt;br /&gt;
&lt;br /&gt;
If you represent a UWaterloo organization, you may be eligible for a custom &amp;lt;tt&amp;gt;uwaterloo.ca&amp;lt;/tt&amp;gt; domain name, such as &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;. We can request this on your behalf.&lt;br /&gt;
&lt;br /&gt;
In order to do so, we must have verified that the organization is a legitimate UWaterloo-affiliated group, and that you, the representative, are authorized to request a domain name on their behalf. This all takes place when you request [[Club Hosting|club hosting]] with the Computer Science Club.&lt;br /&gt;
&lt;br /&gt;
Once you register as a club representative of your particular organization, you can send an email from your official club account to syscom@csclub.uwaterloo.ca to request the domain &amp;lt;tt&amp;gt;yourdomain.uwaterloo.ca&amp;lt;/tt&amp;gt;. Assuming it is available, we will file a ticket and request the domain in your name.&lt;br /&gt;
&lt;br /&gt;
=== Your personal domain name ===&lt;br /&gt;
&lt;br /&gt;
These virtual hosts must be approved by the Executive and Systems Committee. If interested, send syscom@csclub.uwaterloo.ca an email. If your request is approved, the Systems Committee will direct you to create a CNAME record for your domain and point it at &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you are interested in receiving mail or having other records on your domain, the apex of your domain cannot be a CNAME. If this is the case, then your domain should contain an &amp;quot;A&amp;quot; record of &amp;lt;tt&amp;gt;129.97.134.17&amp;lt;/tt&amp;gt; and a (optional, but recommended) &amp;quot;AAAA&amp;quot; record of &amp;lt;tt&amp;gt;2620:101:f000:4901:c5c::caff:e12e&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you want TLS on your personal domain, mention this in your email to syscom (syscom: see [[SSL#letsencrypt]]).&lt;br /&gt;
&lt;br /&gt;
== Static Sites ==&lt;br /&gt;
&lt;br /&gt;
You can place all your static content into your web directory, &amp;lt;tt&amp;gt;/users/userid/www&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you have been approved for a virtual host, you can access this content using your personal domain once the Systems Committee makes the appropriate configuration changes. Here is an example configuration file:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName foobar.uwaterloo.ca&lt;br /&gt;
  	ServerAlias *.foobar.uwaterloo.ca foobar&lt;br /&gt;
  	ServerAdmin your@email.here.tld&lt;br /&gt;
  &lt;br /&gt;
  	DocumentRoot /users/userid/www/&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog /var/log/apache2/luser-userid-error.log&lt;br /&gt;
  	CustomLog /var/log/apache2/luser-userid-access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dynamic Sites ==&lt;br /&gt;
&lt;br /&gt;
If you require use of a database, we offer you the sole choice of MySQL. See [[MySQL|this guide]] for how to create your database and connect to MySQL.&lt;br /&gt;
&lt;br /&gt;
=== ***NOTICE*** ===&lt;br /&gt;
&lt;br /&gt;
  We &#039;&#039;&#039;STRONGLY&#039;&#039;&#039; discourage the use of content management systems such as&lt;br /&gt;
  WordPress. These packages are notorious for the number of security&lt;br /&gt;
  vulnerabilities they contain and pose a threat to our systems if they are not&lt;br /&gt;
  kept up to date. The Systems Committee &#039;&#039;&#039;WILL,&#039;&#039;&#039; at its discretion, disable&lt;br /&gt;
  any website using a package such as WordPress that is not updated to the latest&lt;br /&gt;
  version or that is found to contain exploitable security flaws. In such a case,&lt;br /&gt;
  the member or club serving that site will be notified of the termination; the&lt;br /&gt;
  site will not be re-enabled until the issues are addressed.&lt;br /&gt;
&lt;br /&gt;
When pages are parked, access to them is restricted to on-campus IPs, so you can still fix your page, but anyone off-campus will not be able to access it, and will be shown this page instead: [https://csclub.uwaterloo.ca/~sysadmin/insecure/ https://csclub.uwaterloo.ca/~sysadmin/insecure/].&lt;br /&gt;
&lt;br /&gt;
=== Using PHP ===&lt;br /&gt;
&lt;br /&gt;
Because we use Apache, it&#039;s as simple as placing your &amp;lt;tt&amp;gt;index.php&amp;lt;/tt&amp;gt; file in your &amp;lt;tt&amp;gt;/users/userid/www&amp;lt;/tt&amp;gt;. That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
You can even include rewrite rules in an &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; file in your web directory.&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy (Python, Ruby, Perl, etc.) ===&lt;br /&gt;
&lt;br /&gt;
(In progress... Cliff Notes below)&lt;br /&gt;
&lt;br /&gt;
If computationally expensive, please run the server on a general-use server and proxy to Caffeine.&lt;br /&gt;
&lt;br /&gt;
If Python, (1) use a [http://docs.python-guide.org/en/latest/dev/virtualenvs/ virtual environment] (2) host your app (within the virtualenv) with [http://gunicorn.org/ Gunicorn] on a high port (but campus firewalled, i.e. NOT Ports 28000-28500).&lt;br /&gt;
&lt;br /&gt;
If Ruby (Note, I&#039;ve never used Ruby so take this with a grain of salt), use [http://unicorn.bogomips.org/ Unicorn] in the same way.&lt;br /&gt;
&lt;br /&gt;
==== .htaccess Config ====&lt;br /&gt;
&lt;br /&gt;
Put the following in the appropriate .htaccess file (e.g. if you were running your app at ~ctdalek/python-app, put the .htaccess in ~ctdalek/www/python-app alongside the static files). Replace HOST with localhost if running on Caffeine or the hostname if running elsewhere; replace port with your chosen port number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
# If you want websockets, uncomment this:&lt;br /&gt;
#RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
#RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
#RewriteRule .* ws://HOST:RANDOM_PORT%{REQUEST_URI} [L,P]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-d&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-f&lt;br /&gt;
RewriteRule &amp;quot;index.html&amp;quot; &amp;quot;http://HOST:RANDOM_PORT/&amp;quot; [P]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-d&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-f&lt;br /&gt;
RewriteRule &amp;quot;^(.*)$&amp;quot; &amp;quot;http://HOST:RANDOM_PORT/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requiring Authentication ==&lt;br /&gt;
&lt;br /&gt;
You can require users to authenticate through the University&#039;s Central Authentication System (CAS) by adding the following contents to your .htaccess configuration file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AuthType CAS&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;lt;pre&amp;gt;Require valid-user&amp;lt;/pre&amp;gt; with &amp;lt;pre&amp;gt;Require user ctdalek&amp;lt;/pre&amp;gt; to restrict to specific users. See https://doubledoublesecurity.ca/uw/cas/user.html for more information.&lt;br /&gt;
&lt;br /&gt;
== Syscom ==&lt;br /&gt;
&lt;br /&gt;
=== Disabling insecure or infringing sites ===&lt;br /&gt;
&lt;br /&gt;
To disable a webspace that has known security vulnerabilities add the following snippet to `/etc/apache2/conf-available/disable-vuln-site.conf`. This rewrites all accesses of the directory or its children to the given file. Note that our disable page always returns HTTP status code 503 (Service Unavailable).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory /users/$BADUSER/www&amp;gt;&lt;br /&gt;
     AllowOverride None&lt;br /&gt;
     Redirect 503 /&lt;br /&gt;
     ErrorDocument 503 /~sysadmin/insecure/index.html&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For infringing sites:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory &amp;quot;/users/$BADUSER/www/infringing-directory&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Redirect 503 /&lt;br /&gt;
    ErrorDocument 503 /~sysadmin/infringing/index.html&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For club domains (e.g. club1.uwaterloo.ca), redirect to the CSC domain instead:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory &amp;quot;/users/$BADCLUB/www&amp;quot;&amp;gt;&lt;br /&gt;
   AllowOverride None&lt;br /&gt;
   RewriteEngine On&lt;br /&gt;
   RewriteRule . %{REQUEST_SCHEME}://csclub.uwaterloo.ca/~sysadmin/insecure/index.php [L,P]&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Expired Websites ===&lt;br /&gt;
&lt;br /&gt;
There is a cron job running hourly on caffeine which disables expired member&#039;s websites (and re-enables them when they&#039;ve renewed their membership).&lt;br /&gt;
&lt;br /&gt;
The script is here: https://git.csclub.uwaterloo.ca/public/expire-sites&lt;br /&gt;
&lt;br /&gt;
Some highlights:&lt;br /&gt;
&lt;br /&gt;
* The script provides a 1-month grace period (corresponding to the grace period of pam-csc)&lt;br /&gt;
* The expired page returns HTTP status code of 503 (Service Unavailable)&lt;br /&gt;
&lt;br /&gt;
=== Sample Apache config for website with both a custom domain and a UW subdomain ===&lt;br /&gt;
&lt;br /&gt;
 Define ENTITY_NAME pmclub&lt;br /&gt;
 Define CUSTOM_DOMAIN puremath.club&lt;br /&gt;
 Define UW_SUBDOMAIN ${ENTITY_NAME}.uwaterloo.ca&lt;br /&gt;
 Define ADMIN_EMAIL ${ENTITY_NAME}@csclub.uwaterloo.ca&lt;br /&gt;
 Define ENTITY_HOME https://csclub.uwaterloo.ca/~${ENTITY_NAME}&lt;br /&gt;
 &lt;br /&gt;
 Define APACHE_LOG_DIR /var/log/apache2&lt;br /&gt;
 Define ERROR_LOG ${APACHE_LOG_DIR}/${ENTITY_NAME}-error.log&lt;br /&gt;
 Define CUSTOM_LOG &amp;quot;${APACHE_LOG_DIR}/${ENTITY_NAME}-access.log combined&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 	ServerName ${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAlias *.${CUSTOM_DOMAIN} ${UW_SUBDOMAIN} *.${UW_SUBDOMAIN} ${ENTITY_NAME}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent / https://${CUSTOM_DOMAIN}/&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost csclub:443&amp;gt;&lt;br /&gt;
 	SSLEngine on&lt;br /&gt;
 	SSLCertificateFile /etc/letsencrypt/live/${CUSTOM_DOMAIN}/fullchain.pem&lt;br /&gt;
 	SSLCertificateKeyFile /etc/letsencrypt/live/${CUSTOM_DOMAIN}/privkey.pem&lt;br /&gt;
 	SSLStrictSNIVHostCheck on&lt;br /&gt;
 &lt;br /&gt;
 	ServerName ${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAlias *.${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	DocumentRoot /users/${ENTITY_NAME}/www&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent /&amp;lt;special page&amp;gt; ${ENTITY_HOME}/&amp;lt;special path&amp;gt;/&amp;lt;special file&amp;gt;&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost csclub:443&amp;gt;&lt;br /&gt;
 	SSLEngine on&lt;br /&gt;
 	SSLCertificateFile /etc/letsencrypt/live/${UW_SUBDOMAIN}/fullchain.pem&lt;br /&gt;
 	SSLCertificateKeyFile /etc/letsencrypt/live/${UW_SUBDOMAIN}/privkey.pem&lt;br /&gt;
 	SSLStrictSNIVHostCheck on&lt;br /&gt;
 &lt;br /&gt;
 	ServerName ${UW_SUBDOMAIN}&lt;br /&gt;
 	ServerAlias *.${UW_SUBDOMAIN}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent / https://${CUSTOM_DOMAIN}/&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Web_Hosting&amp;diff=4778</id>
		<title>Web Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Web_Hosting&amp;diff=4778"/>
		<updated>2022-04-12T21:33:06Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* ***NOTICE*** */ Add parking page example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The CSC offers web hosting for [[Club Hosting|clubs]] and [http://csclub.uwaterloo.ca/about/ our members] in accordance with our [http://csclub.uwaterloo.ca/services/machine_usage Machine Usage Agreement]. This is a quick guide for the kinds of hosting we offer on our webserver, &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;, also known as [[Machine List#caffeine|caffeine]].&lt;br /&gt;
&lt;br /&gt;
We run an Apache httpd webserver and we offer you the use of a [[MySQL|MySQL database]].&lt;br /&gt;
&lt;br /&gt;
== What can I host on my website? ==&lt;br /&gt;
&lt;br /&gt;
Web hosting is provided in accordance with the CSC [http://csclub.uwaterloo.ca/services/machine_usage Machine Usage Agreement]. As a reminder, you are &#039;&#039;&#039;not permitted&#039;&#039;&#039; to host any of the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ads.&#039;&#039;&#039; Advertisements are not permitted because using our machines for commercial purposes is forbidden by university policy.&lt;br /&gt;
* &#039;&#039;&#039;Your start-up&#039;s website.&#039;&#039;&#039; Again, commercial use of our hosting is not permitted.&lt;br /&gt;
* &#039;&#039;&#039;Unauthorized copyrighted materials.&#039;&#039;&#039; Violating the law is a violation of our Machine Usage Agreement.&lt;br /&gt;
&lt;br /&gt;
Please note that &#039;&#039;&#039;this is not an exhaustive list. Websites may be taken down &#039;&#039;without notice&#039;&#039;&#039;&#039;&#039; at the discretion of the Systems Committee. (We will always let you know that we took your site down, but if it is breaking our shared environment, we can&#039;t provide an advance warning.)&lt;br /&gt;
&lt;br /&gt;
Some great examples of things members host on our webserver:&lt;br /&gt;
&lt;br /&gt;
* Academic projects!&lt;br /&gt;
* A personal website or blog!&lt;br /&gt;
* [[Club Hosting|Club websites!]]&lt;br /&gt;
&lt;br /&gt;
== How do I make a website? ==&lt;br /&gt;
&lt;br /&gt;
If this is your first time making a website, this section may be useful to you.&lt;br /&gt;
&lt;br /&gt;
To build your website, CS Club suggests you use http://blog.getpelican.com/ (Python) or https://jekyllrb.com/ (Ruby). They generate static sites and are faster, simpler and more secure than CMSs like WordPress (dynamic and written in PHP) for small sites. We routinely disable WordPress sites that are more than a few weeks out of date (or if a critical security flaw is disclosed).&lt;br /&gt;
&lt;br /&gt;
You can transfer files to the CS Club via SFTP If you run Windows use https://winscp.net/eng/index.php, if you use OS X use https://cyberduck.io/?l=en, and Linux users can directly access SFTP by using ssh:// urls in their GUI file managers. You can use SSH for direct shell access, just run &amp;lt;tt&amp;gt;ssh ctdalek@corn-syrup.csclub.uwaterloo.ca&amp;lt;/tt&amp;gt; or look at https://wiki.csclub.uwaterloo.ca/Machine_List for our other machines. Please do not connect to caffeine (the actual web server) unless you need to debug code. You can also just create your site on our servers or in our office to avoid having to shuffle files around. Your home directory is distributed everywhere via NFS. Bonus points if you use Git to sync your own computer with our servers, if you do this we recommend using git.uwaterloo.ca as your upstream repository.&lt;br /&gt;
&lt;br /&gt;
If you need help, email &amp;lt;tt&amp;gt;syscom@csclub.uwaterloo.ca[mailto:syscom@csclub.uwaterloo.ca]&amp;lt;/tt&amp;gt; or come to the CS Club office on the MC 3rd floor across from the Mathsoc CnD.&lt;br /&gt;
&lt;br /&gt;
== DNS and Your Domain Name ==&lt;br /&gt;
&lt;br /&gt;
You can serve files without any additional configuration by placing them in your &amp;lt;tt&amp;gt;www&amp;lt;/tt&amp;gt; directory and accessing them at &amp;lt;tt&amp;gt;http://csclub.uwaterloo.ca/~userid&amp;lt;/tt&amp;gt;, where &amp;lt;tt&amp;gt;userid&amp;lt;/tt&amp;gt; is your CSC user ID. However, many of our members and clubs prefer to use a custom domain name.&lt;br /&gt;
&lt;br /&gt;
Note that this means you &#039;&#039;do not&#039;&#039; have to register a domain name to be able to use our services. You can just put a website at &amp;lt;tt&amp;gt;http://csclub.uwaterloo.ca/~userid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== uwaterloo.ca domain Names ===&lt;br /&gt;
&lt;br /&gt;
If you represent a UWaterloo organization, you may be eligible for a custom &amp;lt;tt&amp;gt;uwaterloo.ca&amp;lt;/tt&amp;gt; domain name, such as &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;. We can request this on your behalf.&lt;br /&gt;
&lt;br /&gt;
In order to do so, we must have verified that the organization is a legitimate UWaterloo-affiliated group, and that you, the representative, are authorized to request a domain name on their behalf. This all takes place when you request [[Club Hosting|club hosting]] with the Computer Science Club.&lt;br /&gt;
&lt;br /&gt;
Once you register as a club representative of your particular organization, you can send an email from your official club account to syscom@csclub.uwaterloo.ca to request the domain &amp;lt;tt&amp;gt;yourdomain.uwaterloo.ca&amp;lt;/tt&amp;gt;. Assuming it is available, we will file a ticket and request the domain in your name.&lt;br /&gt;
&lt;br /&gt;
=== Your personal domain name ===&lt;br /&gt;
&lt;br /&gt;
These virtual hosts must be approved by the Executive and Systems Committee. If interested, send syscom@csclub.uwaterloo.ca an email. If your request is approved, the Systems Committee will direct you to create a CNAME record for your domain and point it at &amp;lt;tt&amp;gt;csclub.uwaterloo.ca&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you are interested in receiving mail or having other records on your domain, the apex of your domain cannot be a CNAME. If this is the case, then your domain should contain an &amp;quot;A&amp;quot; record of &amp;lt;tt&amp;gt;129.97.134.17&amp;lt;/tt&amp;gt; and a (optional, but recommended) &amp;quot;AAAA&amp;quot; record of &amp;lt;tt&amp;gt;2620:101:f000:4901:c5c::caff:e12e&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you want TLS on your personal domain, mention this in your email to syscom (syscom: see [[SSL#letsencrypt]]).&lt;br /&gt;
&lt;br /&gt;
== Static Sites ==&lt;br /&gt;
&lt;br /&gt;
You can place all your static content into your web directory, &amp;lt;tt&amp;gt;/users/userid/www&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you have been approved for a virtual host, you can access this content using your personal domain once the Systems Committee makes the appropriate configuration changes. Here is an example configuration file:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  	ServerName foobar.uwaterloo.ca&lt;br /&gt;
  	ServerAlias *.foobar.uwaterloo.ca foobar&lt;br /&gt;
  	ServerAdmin your@email.here.tld&lt;br /&gt;
  &lt;br /&gt;
  	DocumentRoot /users/userid/www/&lt;br /&gt;
  &lt;br /&gt;
  	ErrorLog /var/log/apache2/luser-userid-error.log&lt;br /&gt;
  	CustomLog /var/log/apache2/luser-userid-access.log combined&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dynamic Sites ==&lt;br /&gt;
&lt;br /&gt;
If you require use of a database, we offer you the sole choice of MySQL. See [[MySQL|this guide]] for how to create your database and connect to MySQL.&lt;br /&gt;
&lt;br /&gt;
=== ***NOTICE*** ===&lt;br /&gt;
&lt;br /&gt;
  We &#039;&#039;&#039;STRONGLY&#039;&#039;&#039; discourage the use of content management systems such as&lt;br /&gt;
  WordPress. These packages are notorious for the number of security&lt;br /&gt;
  vulnerabilities they contain and pose a threat to our systems if they are not&lt;br /&gt;
  kept up to date. The Systems Committee &#039;&#039;&#039;WILL,&#039;&#039;&#039; at its discretion, disable&lt;br /&gt;
  any website using a package such as WordPress that is not updated to the latest&lt;br /&gt;
  version or that is found to contain exploitable security flaws. In such a case,&lt;br /&gt;
  the member or club serving that site will be notified of the termination; the&lt;br /&gt;
  site will not be re-enabled until the issues are addressed.&lt;br /&gt;
&lt;br /&gt;
When pages are parked, access to them is restricted to on-campus IPs, so you can still fix your page, but anyone off-campus will not be able to access it, and will be shown this page instead: see [https://csclub.uwaterloo.ca/~sysadmin/insecure/ https://csclub.uwaterloo.ca/~sysadmin/insecure/].&lt;br /&gt;
&lt;br /&gt;
=== Using PHP ===&lt;br /&gt;
&lt;br /&gt;
Because we use Apache, it&#039;s as simple as placing your &amp;lt;tt&amp;gt;index.php&amp;lt;/tt&amp;gt; file in your &amp;lt;tt&amp;gt;/users/userid/www&amp;lt;/tt&amp;gt;. That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
You can even include rewrite rules in an &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; file in your web directory.&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy (Python, Ruby, Perl, etc.) ===&lt;br /&gt;
&lt;br /&gt;
(In progress... Cliff Notes below)&lt;br /&gt;
&lt;br /&gt;
If computationally expensive, please run the server on a general-use server and proxy to Caffeine.&lt;br /&gt;
&lt;br /&gt;
If Python, (1) use a [http://docs.python-guide.org/en/latest/dev/virtualenvs/ virtual environment] (2) host your app (within the virtualenv) with [http://gunicorn.org/ Gunicorn] on a high port (but campus firewalled, i.e. NOT Ports 28000-28500).&lt;br /&gt;
&lt;br /&gt;
If Ruby (Note, I&#039;ve never used Ruby so take this with a grain of salt), use [http://unicorn.bogomips.org/ Unicorn] in the same way.&lt;br /&gt;
&lt;br /&gt;
==== .htaccess Config ====&lt;br /&gt;
&lt;br /&gt;
Put the following in the appropriate .htaccess file (e.g. if you were running your app at ~ctdalek/python-app, put the .htaccess in ~ctdalek/www/python-app alongside the static files). Replace HOST with localhost if running on Caffeine or the hostname if running elsewhere; replace port with your chosen port number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
# If you want websockets, uncomment this:&lt;br /&gt;
#RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
#RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
#RewriteRule .* ws://HOST:RANDOM_PORT%{REQUEST_URI} [L,P]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-d&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-f&lt;br /&gt;
RewriteRule &amp;quot;index.html&amp;quot; &amp;quot;http://HOST:RANDOM_PORT/&amp;quot; [P]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-d&lt;br /&gt;
RewriteCond %{SCRIPT_FILENAME} !-f&lt;br /&gt;
RewriteRule &amp;quot;^(.*)$&amp;quot; &amp;quot;http://HOST:RANDOM_PORT/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requiring Authentication ==&lt;br /&gt;
&lt;br /&gt;
You can require users to authenticate through the University&#039;s Central Authentication System (CAS) by adding the following contents to your .htaccess configuration file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AuthType CAS&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can replace &amp;lt;pre&amp;gt;Require valid-user&amp;lt;/pre&amp;gt; with &amp;lt;pre&amp;gt;Require user ctdalek&amp;lt;/pre&amp;gt; to restrict to specific users. See https://doubledoublesecurity.ca/uw/cas/user.html for more information.&lt;br /&gt;
&lt;br /&gt;
== Syscom ==&lt;br /&gt;
&lt;br /&gt;
=== Disabling insecure or infringing sites ===&lt;br /&gt;
&lt;br /&gt;
To disable a webspace that has known security vulnerabilities add the following snippet to `/etc/apache2/conf-available/disable-vuln-site.conf`. This rewrites all accesses of the directory or its children to the given file. Note that our disable page always returns HTTP status code 503 (Service Unavailable).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory /users/$BADUSER/www&amp;gt;&lt;br /&gt;
     AllowOverride None&lt;br /&gt;
     Redirect 503 /&lt;br /&gt;
     ErrorDocument 503 /~sysadmin/insecure/index.html&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For infringing sites:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory &amp;quot;/users/$BADUSER/www/infringing-directory&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Redirect 503 /&lt;br /&gt;
    ErrorDocument 503 /~sysadmin/infringing/index.html&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For club domains (e.g. club1.uwaterloo.ca), redirect to the CSC domain instead:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory &amp;quot;/users/$BADCLUB/www&amp;quot;&amp;gt;&lt;br /&gt;
   AllowOverride None&lt;br /&gt;
   RewriteEngine On&lt;br /&gt;
   RewriteRule . %{REQUEST_SCHEME}://csclub.uwaterloo.ca/~sysadmin/insecure/index.php [L,P]&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Expired Websites ===&lt;br /&gt;
&lt;br /&gt;
There is a cron job running hourly on caffeine which disables expired member&#039;s websites (and re-enables them when they&#039;ve renewed their membership).&lt;br /&gt;
&lt;br /&gt;
The script is here: https://git.csclub.uwaterloo.ca/public/expire-sites&lt;br /&gt;
&lt;br /&gt;
Some highlights:&lt;br /&gt;
&lt;br /&gt;
* The script provides a 1-month grace period (corresponding to the grace period of pam-csc)&lt;br /&gt;
* The expired page returns HTTP status code of 503 (Service Unavailable)&lt;br /&gt;
&lt;br /&gt;
=== Sample Apache config for website with both a custom domain and a UW subdomain ===&lt;br /&gt;
&lt;br /&gt;
 Define ENTITY_NAME pmclub&lt;br /&gt;
 Define CUSTOM_DOMAIN puremath.club&lt;br /&gt;
 Define UW_SUBDOMAIN ${ENTITY_NAME}.uwaterloo.ca&lt;br /&gt;
 Define ADMIN_EMAIL ${ENTITY_NAME}@csclub.uwaterloo.ca&lt;br /&gt;
 Define ENTITY_HOME https://csclub.uwaterloo.ca/~${ENTITY_NAME}&lt;br /&gt;
 &lt;br /&gt;
 Define APACHE_LOG_DIR /var/log/apache2&lt;br /&gt;
 Define ERROR_LOG ${APACHE_LOG_DIR}/${ENTITY_NAME}-error.log&lt;br /&gt;
 Define CUSTOM_LOG &amp;quot;${APACHE_LOG_DIR}/${ENTITY_NAME}-access.log combined&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
 	ServerName ${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAlias *.${CUSTOM_DOMAIN} ${UW_SUBDOMAIN} *.${UW_SUBDOMAIN} ${ENTITY_NAME}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent / https://${CUSTOM_DOMAIN}/&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost csclub:443&amp;gt;&lt;br /&gt;
 	SSLEngine on&lt;br /&gt;
 	SSLCertificateFile /etc/letsencrypt/live/${CUSTOM_DOMAIN}/fullchain.pem&lt;br /&gt;
 	SSLCertificateKeyFile /etc/letsencrypt/live/${CUSTOM_DOMAIN}/privkey.pem&lt;br /&gt;
 	SSLStrictSNIVHostCheck on&lt;br /&gt;
 &lt;br /&gt;
 	ServerName ${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAlias *.${CUSTOM_DOMAIN}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	DocumentRoot /users/${ENTITY_NAME}/www&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent /&amp;lt;special page&amp;gt; ${ENTITY_HOME}/&amp;lt;special path&amp;gt;/&amp;lt;special file&amp;gt;&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;VirtualHost csclub:443&amp;gt;&lt;br /&gt;
 	SSLEngine on&lt;br /&gt;
 	SSLCertificateFile /etc/letsencrypt/live/${UW_SUBDOMAIN}/fullchain.pem&lt;br /&gt;
 	SSLCertificateKeyFile /etc/letsencrypt/live/${UW_SUBDOMAIN}/privkey.pem&lt;br /&gt;
 	SSLStrictSNIVHostCheck on&lt;br /&gt;
 &lt;br /&gt;
 	ServerName ${UW_SUBDOMAIN}&lt;br /&gt;
 	ServerAlias *.${UW_SUBDOMAIN}&lt;br /&gt;
 	ServerAdmin ${ADMIN_EMAIL}&lt;br /&gt;
 &lt;br /&gt;
 	Redirect permanent / https://${CUSTOM_DOMAIN}/&lt;br /&gt;
 &lt;br /&gt;
 	ErrorLog ${ERROR_LOG}&lt;br /&gt;
 	CustomLog ${CUSTOM_LOG}&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4777</id>
		<title>Meeting:Termcom/Saturday 2 April 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4777"/>
		<updated>2022-04-02T23:47:16Z</updated>

		<summary type="html">&lt;p&gt;R389li: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;larr; [[Termcom/Saturday 5 March 2022]] | [[Termcom/Saturday 2 April 2022]] &amp;amp;rarr;&lt;br /&gt;
&lt;br /&gt;
Last meeting of the term, good luck on exams!&lt;br /&gt;
&lt;br /&gt;
= Termcom members in attendance =&lt;br /&gt;
r389li, dzlin, j2767wan, jtoft (👋), r345liu&lt;br /&gt;
&lt;br /&gt;
= Tasks completed last few weeks =&lt;br /&gt;
* r389li got USBs for the office, plugged in Nullsleep and booted it up&lt;br /&gt;
&lt;br /&gt;
= Tasks for the week =&lt;br /&gt;
* a268wang and d278liu will continue working on Merlin and migrate the prometheus VM to the k8s cluster&lt;br /&gt;
* j2767wan will continue setting up NextCloud locally&lt;br /&gt;
* r4tandon will continue looking into how to make the Visual Editor on this Wiki work&lt;br /&gt;
* r345liu and y266shen will fix the last failing project(s?) (Apache/Debian/???) in mirror-checker&lt;br /&gt;
* r389li will try and fix Nullsleep&#039;s networking&lt;br /&gt;
* r389li will also upload the Unix 101 recording and update [https://csclub.uwaterloo.ca/~termcom/unix101 https://csclub.uwaterloo.ca/~termcom/unix101]&lt;br /&gt;
* dzlin and s7raviku will upgrade Postgres on coffee, ensuring data is migrated to the new database&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
* convert the [[Ceph]] mount on [[Machine List#Cloud Cloud machines]] to a systemd.mount so NGINX won&#039;t try to start (and fail) before its FS is mounted&lt;br /&gt;
* MathNEWS container migration (LXC -&amp;gt; systemd-nspawn)&lt;br /&gt;
* Fix Guayusa&lt;br /&gt;
* get the specs of the FusioIO card&lt;br /&gt;
&lt;br /&gt;
= Syscom mailing list moderator =&lt;br /&gt;
a268wang&lt;br /&gt;
&lt;br /&gt;
[[Category:Termcom]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4776</id>
		<title>Meeting:Termcom/Saturday 2 April 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_2_April_2022&amp;diff=4776"/>
		<updated>2022-04-02T23:46:37Z</updated>

		<summary type="html">&lt;p&gt;R389li: Create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;larr; [[Termcom/Saturday 5 March 2022]] | [[Termcom/Saturday 2 April 2022]] &amp;amp;rarr;&lt;br /&gt;
&lt;br /&gt;
Last meeting of the term, good luck on exams!&lt;br /&gt;
&lt;br /&gt;
= Termcom members in attendance =&lt;br /&gt;
r389li, dzlin, j2767wan, jtoft (👋), r345liu&lt;br /&gt;
&lt;br /&gt;
= Tasks completed last few weeks =&lt;br /&gt;
* r389li got USBs for the office, plugged in Nullsleep and booted it up&lt;br /&gt;
&lt;br /&gt;
= Tasks for the week =&lt;br /&gt;
* a268wang and d278liu will continue working on Merlin and migrate the prometheus VM to the k8s cluster&lt;br /&gt;
* j2767wan will continue setting up NextCloud locally&lt;br /&gt;
* r4tandon will continue looking into how to make the Visual Editor on this Wiki work&lt;br /&gt;
* r345liu and y266shen will fix the last failing project(s?) (Apache/Debian/???) in mirror-checker&lt;br /&gt;
* r389li will try and fix Nullsleep&#039;s networking&lt;br /&gt;
* r389li will also upload the Unix 101 recording and update [https://csclub.uwaterloo.ca/~termcom/unix101 https://csclub.uwaterloo.ca/~termcom/unix101]&lt;br /&gt;
* dzlin and s7raviku will upgrade Postgres on coffee, ensuring data is migrated to the new database&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
* convert the [[Ceph]] mount on [[Machine List#Cloud Cloud machines]] to a systemd.mount so NGINX won&#039;t try to start (and fail) before its FS is mounted&lt;br /&gt;
* MathNEWS container migration (LXC -&amp;gt; systemd-nspawn)&lt;br /&gt;
* Fix Guayusa&lt;br /&gt;
&lt;br /&gt;
= Syscom mailing list moderator =&lt;br /&gt;
a268wang&lt;br /&gt;
&lt;br /&gt;
[[Category:Termcom]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
	<entry>
		<id>https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_5_March_2022&amp;diff=4775</id>
		<title>Meeting:Termcom/Saturday 5 March 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.csclub.uwaterloo.ca/index.php?title=Meeting:Termcom/Saturday_5_March_2022&amp;diff=4775"/>
		<updated>2022-03-27T00:16:29Z</updated>

		<summary type="html">&lt;p&gt;R389li: Fix dates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;larr; [[Termcom/Saturday 26 February 2022]] | [[Termcom/Saturday 26 March 2022]] &amp;amp;rarr;&lt;br /&gt;
&lt;br /&gt;
= Termcom members in attendance =&lt;br /&gt;
r389li, a268wang, d9hui, dzlin, j2767wan, r4tandon (👋), s7raviku&lt;br /&gt;
&lt;br /&gt;
= Tasks completed last week =&lt;br /&gt;
* merenber and r389li recompiled [[Kerberos]] 1.17 for focal and bullseye. Cloud machines and office terminals now mount the &amp;lt;code&amp;gt;/users&amp;lt;/code&amp;gt; directory successfully from NetApp.&lt;br /&gt;
&lt;br /&gt;
= Tasks for the week =&lt;br /&gt;
* a268wang and d278liu will continue working on Merlin and migrate the prometheus VM to the k8s cluster&lt;br /&gt;
* dzlin will fix sorbitol again (more errors)&lt;br /&gt;
* j2767wan will continue looking into how to make the Visual Editor on this Wiki work&lt;br /&gt;
* r345liu will fix the last failing project (Apache IIRC) in mirror-checker&lt;br /&gt;
* r345liu will also make an Alpine image for [[CloudStack]], using &amp;lt;s&amp;gt;[[CloudStack Templates]]&amp;lt;/s&amp;gt; something he found on GitHub (hmm sus)&lt;br /&gt;
* r389li/merenber will look into and fix the I/O errors on focal (related to NetApp mounting).&lt;br /&gt;
* r389li will also convert the [[Ceph]] mount on [[Machine List#Cloud Cloud machines]] to a systemd.mount so NGINX won&#039;t try to start (and fail) before its FS is mounted&lt;br /&gt;
* s7raviku will upgrade coffee to Bullseye, taking care to first backup the VM and ensure Postgres data is migrated to the new database&lt;br /&gt;
&lt;br /&gt;
= Unix 101 =&lt;br /&gt;
Description: Join CSC&#039;s Systems Committee (syscom) for an introductory series on GNU/Linux!&lt;br /&gt;
&lt;br /&gt;
== Final Plans ==&lt;br /&gt;
4 talks this term, the rest in the future.&lt;br /&gt;
&lt;br /&gt;
=== Unix 101 - SSH &amp;amp; Bash/CLI ===&lt;br /&gt;
Location: In-person, room TBD&lt;br /&gt;
&lt;br /&gt;
Date/Time: Friday March 18th, 2-3pm&lt;br /&gt;
* j2767wan: SSH - 15 mins&lt;br /&gt;
* dzlin: bash and basic CLI commands - 30-40 mins&lt;br /&gt;
&lt;br /&gt;
=== Unix 101 - FS/Perms &amp;amp; vim ===&lt;br /&gt;
Location: Online (Twitch)&lt;br /&gt;
&lt;br /&gt;
Date/Time: Saturday March 26th, 2-3pm&lt;br /&gt;
* s7raviku: FS/perms&lt;br /&gt;
* r345liu: vim&lt;br /&gt;
&lt;br /&gt;
= Syscom mailing list moderator =&lt;br /&gt;
r345liu&lt;br /&gt;
&lt;br /&gt;
[[Category:Termcom]]&lt;/div&gt;</summary>
		<author><name>R389li</name></author>
	</entry>
</feed>