Setting Up Amazon Linux Development Environment
2023-12-11
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 Projects
mkdir meta
cd meta
git clone git@github.com:ICESat2-SlideRule/sliderule.git
git clone git@github.com:ICESat2-SlideRule/sliderule-python.git
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
sudo dnf groupinstall "Development Tools"
sudo dnf install \
cmake \
readline-devel \
lua-devel \
openssl-devel
libuuid-devel \
libtiff-devel \
sqlite-devel \
curl-devel \
python-devel \
meson \
llvm \
clang \
clang-tools-extra \
cppcheck
In an editor (e.g. vi), create a file in the /etc/ld.so.conf.d/
directory called local.conf
and in it put the one line below, and run sudo ldconfig
afterwards. This allows any applications that are linked to libraries installed in /usr/local/lib64
to be found.
/usr/local/lib64
Go through and install all of the dependencies for SlideRule/
# install rapidjson dependency
git clone https://github.com/Tencent/rapidjson.git
cd rapidjson
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
# install arrow dependency
git clone https://github.com/apache/arrow.git
cd arrow
mkdir build
cd build
cmake ../cpp -DARROW_PARQUET=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_SNAPPY=ON
make -j8
sudo make install
sudo ldconfig
# install proj9 gdal/pdal dependency
git clone https://github.com/OSGeo/PROJ.git
cd PROJ
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8
sudo make install
sudo ldconfig
# install geotiff gdal/pdal dependency
git clone https://github.com/OSGeo/libgeotiff.git
cd libgeotiff
mkdir build
cd build
cmake ../libgeotiff -DCMAKE_BUILD_TYPE=Release
make -j8
sudo make install
sudo ldconfig
# install geos gdal dependency
git clone https://github.com/libgeos/geos.git
cd geos
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8
sudo make install
sudo ldconfig
# install gdal dependency
git clone https://github.com/OSGeo/gdal.git
cd gdal
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8
sudo make install
sudo ldconfig
# install pistache dependency
git clone https://github.com/pistacheio/pistache.git
cd pistache
meson setup build
sudo meson install -C build
sudo ldconfig
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
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
13. Install Terraform & Packer
wget https://releases.hashicorp.com/terraform/1.3.1/terraform_1.3.1_linux_arm64.zip
unzip terraform_1.3.1_linux_arm64.zip
sudo mv terraform /usr/local/bin/
wget https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_linux_arm64.zip
unzip packer_1.8.3_linux_arm64.zip
sudo mv packer /usr/local/bin/