Last active
May 7, 2023 23:58
-
-
Save kyagi/c28935eeb83b3b03a296a7ed2a179abc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash -x | |
# This script will be executed by root user and stored at | |
# /var/lib/cloud/instance/user-data.txt when invoking ec2. | |
# | |
# You can see the log from AWS Management Console in the following way. | |
# EC2: Actions > Monitor and troubleshoot > Get system log | |
################################################################################ | |
# variables | |
################################################################################ | |
# system | |
default_user='ec2-user' | |
default_timezone='Asia/Tokyo' | |
default_hostname='workstation' | |
# programming languages | |
python_version='3.11.3' | |
ruby_version='3.2.2' | |
node_version='20.0.0' | |
################################################################################ | |
# script | |
################################################################################ | |
# system configurations | |
timedatectl set-timezone ${default_timezone} | |
hostnamectl set-hostname ${default_hostname} | |
# dnf expansions | |
dnf install -y dnf-plugins-core | |
# installation: docker | |
dnf install -y docker | |
groupadd docker | |
usermod -aG docker ${default_user} | |
sudo -u ${default_user} newgrp docker | |
systemctl start docker | |
# installation: build essentials | |
dnf install -y gcc git | |
dnf install -y bzip2-devel libffi-devel libyaml-devel openssl-devel readline-devel sqlite-devel xz-devel zlib-devel | |
# installation: utilities | |
dnf install -y jq tree | |
# installation: admin tools | |
dnf install -y iotop htop socat wireshark-cli | |
# installation: pyenv | |
# ref: https://github.com/pyenv/pyenv#installation | |
sudo -u ${default_user} -i git clone https://github.com/pyenv/pyenv.git /home/${default_user}/.pyenv | |
sudo -u ${default_user} -i echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i echo 'eval "$(pyenv init -)"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i source /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i TMPDIR="${PWD}/tmp" pyenv install ${python_version} | |
sudo -u ${default_user} -i pyenv global ${python_version} | |
# installation: rbenv | |
# ref: https://github.com/rbenv/rbenv#installation | |
sudo -u ${default_user} -i git clone https://github.com/rbenv/rbenv.git /home/${default_user}/.rbenv | |
sudo -u ${default_user} -i echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i source /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i mkdir -p /home/${default_user}/.rbenv/plugins | |
sudo -u ${default_user} -i git clone https://github.com/rbenv/ruby-build.git /home/${default_user}/.rbenv/plugins/ruby-build | |
sudo -u ${default_user} -i TMPDIR="${PWD}/tmp" rbenv install ${ruby_version} | |
sudo -u ${default_user} -i rbenv global ${ruby_version} | |
# installation: nodenv | |
# ref: https://github.com/nodenv/nodenv#installation | |
# ref: https://github.com/nodenv/node-build#installation | |
sudo -u ${default_user} -i git clone https://github.com/nodenv/nodenv.git /home/${default_user}/.nodenv | |
sudo -u ${default_user} -i echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i source /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i /home/${default_user}/.nodenv/bin/nodenv init | |
sudo -u ${default_user} -i echo 'eval "$(nodenv init - bash)"' >> /home/${default_user}/.bash_profile | |
sudo -u ${default_user} -i mkdir -p /home/${default_user}/.nodenv/plugins | |
sudo -u ${default_user} -i git clone https://github.com/nodenv/node-build.git /home/${default_user}/.nodenv/plugins/node-build | |
sudo -u ${default_user} -i TMPDIR="${PWD}/tmp" nodenv install ${node_version} | |
sudo -u ${default_user} -i nodenv global ${node_version} | |
# installation: node tools | |
sudo -u ${default_user} -i nodenv install -g vtop | |
# installation: rust | |
# ref: https://www.rust-lang.org/tools/install | |
sudo -u ${default_user} -i curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u ${default_user} -i sh -s -- -y | |
sudo -u ${default_user} -i echo 'source "$HOME/.cargo/env"' >> /home/${default_user}/.bash_profile | |
# installation: rust tools | |
sudo -u ${default_user} -i cargo install cargo-watch cargo-audit cargo-tarpaulin cargo-expand ripgrep fd-find xh | |
# installation: fzf | |
# ref: https://github.com/junegunn/fzf#installation | |
sudo -u ${default_user} -i git clone --depth 1 https://github.com/junegunn/fzf.git /home/${default_user}/.fzf | |
sudo -u ${default_user} -i yes | sudo -u ${default_user} -i /home/${default_user}/.fzf/install | |
sudo -u ${default_user} -i echo 'source .bashrc' >> /home/${default_user}/.bash_profile |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It takes about 20 minutes on t4g.small instance.