This is how you would create a livable FreeBSD instance on EC2 by hand. The smart thing to do is to automate most of these actions. But I do it this way so you can see and understand all the different techniques. I want to create FreeBSD instances in EC2 and I want some of the management benefits that come from native AWS technologies like CloudWatch. It can be done, but it takes a bit of extra work because FreeBSD isn't Linux, and AWS doesn't directly support FreeBSD.
Prepping in AWS land
Before we go far, we will want some things setup in AWS IAM and VPC. I assume you have already created a VPC, decided what network numbers you're going to use, created a subnet and so on. If you haven't done those basic things, you need to go do them. I also assume you've created an ssh key and uploaded it to your AWS account.
I use the AWS-managed policy
CloudWatchAgentServerPolicy. The right way to do this is to assign a role to the instance, then assign the policies to the role.
We will want a security group that allows access to the right IP addresses (e.g., on-prem, your house, your office, etc.)
Launch the instance
Go to the EC2 console. Pick AWS Marketplace. Pick the one created by Colin Percival on the FreeBSD team. Choose security group, role, storage, etc.
Login for the first time
Go to the EC2 console and lookup the IP address of the instance you just launched. Assuming that IP address is 22.214.171.124 you'd login like this:
Become root so you can update this thing a bit.
su - root
Install typical stuff. These are some of the packages I install:
So I just do:
pkg install bash tmux curl python2 python3 git sudo
Add user for myself. Just run
adduser and manually answer the questions. When it asks
Invite user into other groups I type
wheel so that my unprivileged login ID is in the
sudoers file so that I can sudo from my unprivileged account. Use
visudo. Find the commented out rule that allows wheel to run any command. Uncomment it. Save and exit.
Update the passwd file
vipw. Edit the line that has root. The second field is null, which is why root had no password when you logged in. Put a
* or some other garbage in there, so it looks like this:
I remove the toor user. I don't think it has any purpose in a cloud environment.
Let's prevent it from allowing passwords at all.
- Then run
service sshd restart
Ok at this point the system is pretty usable. Before you give up your root privileges, ssh into your instance as your unprivileged user. Make sure you can
sudo and such. If that works, we can finally get on to the AWS-specific stuff.
Enable AWS Monitoring
In prior versions of this doc, I recommended installing the cwlogs agent and the EC2 monitoring agent. Both of those have been deprecated by AWS in favour of their unified CloudWatch Agent. That agent, however, is only distributed in binary form and the only binaries they ship are Linux and Windows binaries.
I now use Telegraf and configure it to send its output to CloudWatch metrics.
sudo pkg install telegraf(No dependencies! Whee!)
- Here's the telegraf.conf file that I use.