Skip to content

Instantly share code, notes, and snippets.

@kyagi
Last active May 7, 2023 23:58
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 kyagi/c28935eeb83b3b03a296a7ed2a179abc to your computer and use it in GitHub Desktop.
Save kyagi/c28935eeb83b3b03a296a7ed2a179abc to your computer and use it in GitHub Desktop.
#!/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
@kyagi
Copy link
Author

kyagi commented Apr 22, 2023

It takes about 20 minutes on t4g.small instance.
スクリーンショット 2023-04-22 23 28 15

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