Setting Up Amazon Linux Development Environment

2026-01-28

Overview

These steps setup a development environment for SlideRule. The target platform is a Graviton3 processor running Amazon Linux 2023 in AWS.

Steps

1. Logging in the first time

ssh -i .ssh/<mykey>.pem ec2-user@<ip address>
sudo dnf upgrade --refresh

2. Creating Users

sudo useradd -m -s /usr/bin/bash <username>
sudo passwd <username>
sudo usermod -aG wheel <username>
su - <username>

3. Setup Bash

Replace the appropriate section in the .bashrc file with the contents below

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
PS1="\n\[\033[01;32m\]\u@\h\[\033[00m\]\[\033[33m\] [\$CONDA_DEFAULT_ENV]\$(parse_git_branch):\[\033[01;34m\]\w\[\033[00m\]\n\$ "

Setup core dumps by adding the following to the end of the .bashrc file

ulimit -c unlimited

4. Managing Keys for Remote Login

  • create a local key on your laptop or desktop for remote use: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  • your new key is located in .ssh/id_rsa.pub

  • to log into a remote server with this key, while on the remote server copy and paste the key into the file ~/.ssh/authorized_keys

5. Managing Keys for GitHub

  • create a key on the server, while logged into your account: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  • add the key as an ssh key to your github account

6. Install and Configure Git

sudo dnf install git

Create the local file ~/.gitconfig in the user’s home directory with the following contents:

[user]
	name = <name>
	email = <email>

[push]
    default = simple

[diff]
    tool = vimdiff

[merge]
    tool = vimdiff

[difftool]
    prompt = false

[mergetool]
    keepBackup = false

[difftool "vimdiff"]
    cmd = vimdiff "$LOCAL" "$REMOTE"

[alias]
    dd = difftool --dir-diff

[credential "https://github.com"]
	helper =
	helper = !/usr/bin/gh auth git-credential

[credential "https://gist.github.com"]
	helper =
	helper = !/usr/bin/gh auth git-credential

7. Clone Repository

mkdir meta
cd meta
git clone git@github.com:SlideRuleEarth/sliderule.git

Install the pre-commit hooks

cd sliderule
pip install pre-commit
pre-commit install
pre-commit run --all-files

8. Installing and Configuring Docker

sudo dnf install docker
sudo usermod -aG docker <username>
newgrp docker

Then install Docker Compose plugin

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

9. Install Dependencies got Local Build

Navigate to targets/slideruleearth/docker/sliderule/Dockerfile.buildenv file and follow the same steps in that file to recreate the full development environment on your local machine.

10. Install and Configure Miniconda

wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-aarch64.sh
chmod +x Miniconda3-py39_4.12.0-Linux-aarch64.sh
./Miniconda3-py39_4.12.0-Linux-aarch64.sh
conda config --set changeps1 False
conda config --set auto_activate_base false

Once you have miniconda setup, you can navigate to the sliderule-python repository and run conda env create -f environment.yml to create a sliderule_env environment with everything you will need for the SlideRule Python client.

11. Install GitHub Command Line Client

sudo dnf install 'dnf-command(config-manager)'
sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
sudo dnf install gh

12. Install and Configure AWS Command Line Client

sudo dnf install awscli

Single Sign On

Run the following commands the first time to setup your machine:

aws configure sso --profile <profile> --use-device-code

Then to login:

mv ~/.hidden_aws ~/.aws || true
unset AWS_PROFILE
aws sso login --profile <profile> --use-device-code
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 742127912612.dkr.ecr.us-west-2.amazonaws.com
eval $(aws configure export-credentials --profile <profile> --format env)
export AWS_PROFILE=<profile>

And to logout (which is very useful for running as IAM role assigned to the instance):

mv ~/.aws ~/.hidden_aws || true
unset AWS_PROFILE

2-Factor Authentication

Make sure to setup an initial .aws/credentials file so that it has the sliderule profile access key and secret access key. The credentials file will look something like:

[default]
aws_access_key_id = _
aws_secret_access_key = _
aws_session_token = _

[sliderule]
aws_access_key_id = _
aws_secret_access_key = _

To populate the default keys and session token, run:

aws --profile=sliderule sts get-session-token --serial-number arn:aws:iam::$account_number:mfa/$user_name --token-code=$code

To login to the AWS Elastic Container Registry, run:

aws ecr get-login-password --region $region | docker login --username AWS --password-stdin $account_number.dkr.ecr.$region.amazonaws.com