Skip to content

Instantly share code, notes, and snippets.

@mckern
Last active June 2, 2021 01:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mckern/607392cc243cafadd33e822d24a502bb to your computer and use it in GitHub Desktop.
Save mckern/607392cc243cafadd33e822d24a502bb to your computer and use it in GitHub Desktop.
Bad technical challenges
Hi Ryan,
We are excited to move you forward in the process! Please let us know if you have any questions.
<redacted>'s operations challenge is our primary means of understanding your troubleshooting and
programming abilities and the beginning of our understanding of the rest of your qualifications.
The challenge is divided into two parts.
For part one, we would like to assess your debugging and general Linux skills by asking you to install
the "apache2" package on a server that is misconfigured in many ways. It is your job to find, document,
and manually address these problems such that you are able to verify that the Apache web server is
accessible from the Internet. When you've verified the host is functional, please reply-all to this email
thread with your documentation of what you found, how you found it, and what you did to resolve the problems.
Your server for part one is <redacted>. It is accessible via SSH. The root password for all three
instances is <redacted>.
For part two, we would like you to construct a rudimentary configuration management tool and use it
to configure two servers for production service of a simple PHP web application. You are not allowed
to use off-the-shelf tools like (but not limited to) Puppet, Chef, Fabric, or Ansible. Instead, we
would like you to implement a tool a bit like Puppet or Chef that meets the following specifications
and then use that tool to configure the two servers.
Requirements for your rudimentary configuration management tool:
* If your tool has dependencies not available on a standard Ubuntu instance you may
include a bootstrap.sh program to resolve them
* Your tool must provide an abstraction that allows specifying a file's content and
metadata (owner, group, mode)
* Your tool must provide an abstraction that allows installing and removing Debian packages
* Your tool must provide some mechanism for restarting a service when relevant files or
packages are updated
* Your tool must be idempotent - it must be safe to apply your configuration
over and over again
* Don't forget to document the basic architecture of your tool, how to install it,
how to write configurations, and how to invoke them
Requirements for the configuration your tool will execute:
* Your configuration must specify a web server capable of running the PHP application below
* Both servers must respond 200 OK and include the string "Hello, world!" in their response to
requests from curl -sv "http://ADDRESS"; ( http://address%22/ );
( http://address%22 ( http://address%22/ )/ ); (using the public IP address)
* For the purposes of this challenge, please do not reboot any of the provided servers.
Here is the PHP application in question:
<?php
header("Content-Type: text/plain");
echo "Hello, world!\n";
Your servers for part two are <redacted> and <redacted>. They are accessible via SSH.
When your tool and configuration are able to configure these two servers and you've verified they
respond appropriately please tar up your code, configuration, and Git/Mercurial/other history and
reply-all to this email.
There is no time limit, no penalty for taking your time, and no benefit in going above-and-beyond.
Show us your best work :)
Good luck!
@mckern
Copy link
Author

mckern commented Apr 24, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment