#!/bin/sh set -e if [ "x$TRACE" != "x" ]; then set -x; fi # ++ # ++++ # ++++ # ++++++++++ # +++ | # ++ | # + -== ==| # ( <*> <*> # | | # | __| # | +++ # \ =+ # \ + more info here: # |\++++++ https://github.com/moul/sh.moul.io # | ++++ ||// # ____| |____ _||/__ # / --- \ \| ||| # / _ _ _ / \ \ / # | / / //_//_// | | | sub_help() { cat < [options] Subcommands: authorized_keys [USER] add keys from github.com/moul.keys into .ssh/authorized_keys install_brew install homebrew install_docker use get.docker.com script to install docker install_go [VERSION] download go binary and configure path install_gvm install gvm (go version manager) install_hub install hub (with homebrew) install_tools install common tools (tmux, htop, git, ssh, curl, wget, mosh, emacs) adduser [USER] create a new moul user, install SSH keys, configure docker & sudo info print system info docker_prune prune docker things disk_placeholder create a /placeholder file on disk More info: https://github.com/moul/sh.moul.io EOF } sub_authorized_keys() { USER=${1:-${USER}} set -x umask 077 mkdir -p .ssh echo "" >> .ssh/authorized_keys echo "# https://github.com/${USER}.keys" >> .ssh/authorized_keys curl -s https://github.com/${USER}.keys >> .ssh/authorized_keys echo "" >> .ssh/authorized_keys } sub_install_docker() { set -x curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh # check if docker-compose is available } sub_install_tools() { # FIXME: support other distributions set -x sudo apt -y install tmux htop emacs-nox git ssh curl wget mosh make } GO_VERSION=${GO_VERSION:-1.17.7} sub_install_go() { GO_VERSION=${1:-${GO_VERSION}} # FIXME: support other distributions # FIXME: auto-detect last version dest=/usr/local/ if [ "$(uname -m)" = "x86_64" ]; then arch="amd64" else arch="386" fi if [ -d "$dest/go" ]; then echo "[-] '$dest' already exists, cannot continue." ( set -x $dest/go/bin/go version ) exit 0 fi set -xe curl -sOL https://storage.googleapis.com/golang/go${GO_VERSION}.linux-${arch}.tar.gz tar -C $dest -xf go${GO_VERSION}.linux-${arch}.tar.gz echo 'export GOPATH=$HOME/go' >> ~/.profile echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.profile $dest/go/bin/go version rm -f go${GO_VERSION}.linux-${arch}.tar.gz } sub_adduser() { USER=${1:-moul} set -x useradd -m ${USER} usermod -aG docker ${USER} usermod --shell=/bin/bash ${USER} mkdir -p /home/${USER}/.ssh umask 077 curl -s https://github.com/${USER}.keys | grep -v "Not Found" >> /home/${USER}/.ssh/authorized_keys chown -R ${USER}:${USER} /home/${USER}/.ssh echo "${USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers } sub_info() { set -x set +e date uptime lsb_release -a cat /etc/debian_version cat /proc/cmdline cat /proc/loadavg w | grep -v tmux | head last | grep -v tmux | head } sub_docker_prune() { set -x docker system prune -f docker volume prune -f } sub_install_brew() { set -xe /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> /home/moul/.profile . $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) brew install hello } sub_install_gvm() { set -xe GO_VERSION=${1:-${GO_VERSION}} curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash . $HOME/.gvm/scripts/gvm gvm install go1.4 -B gvm use go1.4 GOROOT_BOOTSTRAP=$GOROOT gvm install go${GO_VERSION} gvm use go${GO_VERSION} go get moul.io/moulsay moulsay yo } sub_install_hub() { set -xe sub_install_brew . $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) brew install hub } sub_disk_placeholder() { # https://brianschrader.com/archive/why-all-my-servers-have-an-8gb-empty-file/ set -xe sudo truncate -s 8G /placeholder } main() { subcommand=$1 case $subcommand in "" | "-h" | "--help") sub_help ;; *) shift sub_${subcommand} $@ if [ $? = 127 ]; then echo "Error: '$subcommand' is not a known subcommand." >&2 echo " Run 'curl -s https://sh.moul.io | sh' for a list of known subcommands." >&2 fi ;; esac } main "$@" # Usage: curl -s https://sh.moul.io | sh -s -- [options]