diff --git a/README.md b/README.md index 309190b..62a91d7 100644 --- a/README.md +++ b/README.md @@ -10,22 +10,10 @@ To bootstrap a macOS instance: $ curl -O https://git.infektor.net/config/bootstrap/raw/main/bootstrap-macOS.sh && chmod +x bootstrap-macOS.sh && ./bootstrap-macOS.sh ``` -To bootstrap a Debian based Linux instance: +To bootstrap a Linux instance: ```console -$ wget https://git.infektor.net/config/bootstrap/raw/main/bootstrap-Debian.sh && chmod +x bootstrap-Debian.sh && ./bootstrap-Debian.sh -``` - -To bootstrap a Arch Linux based instance: - -```console -$ curl -O https://git.infektor.net/config/bootstrap/raw/main/bootstrap-Arch.sh && chmod +x bootstrap-Arch.sh && ./bootstrap-Arch.sh -``` - -To bootstrap a Fedora Linux instance: - -```console -$ curl -O https://git.infektor.net/config/bootstrap/raw/main/bootstrap-Fedora.sh && chmod +x bootstrap-Fedora.sh && ./bootstrap-Fedora.sh +$ wget https://git.infektor.net/config/bootstrap/raw/main/bootstrap-Linux.sh && chmod +x bootstrap-Linux.sh && ./bootstrap-Linux.sh ``` To bootstrap a Windows instance: diff --git a/bootstrap-Debian.sh b/bootstrap-Debian.sh deleted file mode 100755 index 1bbdb95..0000000 --- a/bootstrap-Debian.sh +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/bash - -set -e - -show_usage() { - echo "usage: $0 [-h] [-y]" -} - -show_help() { - show_usage - echo - echo "Bootstrap a Debian based distribution with:" - echo - echo "* update apt cache" - echo "* upgrade apt packages" - echo "* git - from apt" - echo "* python - from apt" - echo "* python-pip - from apt" - echo "* virtualenv - from pip" - echo "* SSH key - from ssh-keygen" - echo "* GitHub public key - with SSH key" - echo "* GitLab public key - with SSH key" - echo "* BitBucket Cloud public key - with SSH key" - echo "* Gogs Cloud public key - with SSH key" - echo "* conduit - configuration manager" - echo - echo "If any already exist they will not be reinstalled." - echo - echo "optional arguments:" - echo " -h show this help message and exit" - echo " -y assume yes when prompted" -} - -yes=0 - -while getopts 'hy' opt; do - case $opt in - h) show_help; exit 0 ;; - y) yes=1 ;; - *) show_usage; exit 1 ;; - esac -done - -missing() { - which $1 &> /dev/null && return 1 || return 0 -} - -agree() { - local check=^[Nn]$ - [ $yes -eq 1 ] && [[ ! "$2" =~ $check ]] && return 0 - [[ "$2" =~ $check ]] && local default="[y/N]" || local default="[Y/n]" - read -p "$1 $default? " answer - case "$answer" in - y|Y|yes) return 0 ;; - n|N|no) return 1 ;; - '') [[ "$2" =~ $check ]] && return 1 || return 0 ;; - *) echo "invalid input: $answer" && return `agree "$1"` ;; - esac -} - -apt_install() { - sudo apt install --yes --install-recommends $1 > /dev/null -} - -pip_install() { - pip install --user $1 > /dev/null -} - -export PATH=~/.local/bin:$PATH - -agree "Update apt cache" && sudo apt update > /dev/null -agree "Upgrade apt packages" "N" && sudo apt upgrade > /dev/null - -missing git && agree "Install git" && apt_install git - -if missing pip; then - agree "Install python-pip" && apt_install python-pip - agree "Upgrade pip with pip" && \ - sudo -H pip_install --upgrade pip > /dev/null -fi - -missing virtualenv && agree "Install virtualenv" && pip_install virtualenv - -if [ ! -f ~/.ssh/id_rsa ] && agree "Generate SSH key"; then - read -rp "SSH email: " email - [ ! -d ~/.ssh ] && mkdir -p ~/.ssh - ssh-keygen -t rsa -b 4096 -C "$email" -N "" -f ~/.ssh/id_rsa -fi - -if ! missing virtualenv && agree "Set SSH keys on remote Git servers"; then - env=$(mktemp -d) - virtualenv $env > /dev/null - source $env/bin/activate - pip install git+https://code.infektor.net/config/bootstrap.git > /dev/null - python -c 'import bootstrap; bootstrap.set_ssh_keys()' - deactivate - rm -r $env -fi - -missing conduit && agree "Install conduit" && \ - pip_install git+ssh://git@github.com/kbenzie/conduit.git - -echo "To use installed pip packages update your PATH:" -echo 'export PATH=~/.local/bin:$PATH' - -[ -f $0 ] && agree "Remove $0" "N" && rm $0 || exit 0 diff --git a/bootstrap-Fedora.sh b/bootstrap-Fedora.sh deleted file mode 100755 index dbd7c23..0000000 --- a/bootstrap-Fedora.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -set -e - -show_usage() { - echo "usage: $0 [-h] [-y]" -} - -show_help() { - show_usage - echo - echo "Bootstrap a Debian based distribution with:" - echo - echo "* upgrade dnf packages" - echo "* git - from dnf" - echo "* virtualenv - from dnf" - echo "* SSH key - from ssh-keygen" - echo "* GitHub public key - with SSH key" - echo "* GitLab public key - with SSH key" - echo "* BitBucket Cloud public key - with SSH key" - echo "* Gogs Cloud public key - with SSH key" - echo "* conduit - configuration manager" - echo - echo "If any already exist they will not be reinstalled." - echo - echo "optional arguments:" - echo " -h show this help message and exit" - echo " -y assume yes when prompted" -} - -yes=0 - -while getopts 'hy' opt; do - case $opt in - h) show_help; exit 0 ;; - y) yes=1 ;; - *) show_usage; exit 1 ;; - esac -done - -missing() { - which $1 &> /dev/null && return 1 || return 0 -} - -agree() { - local check=^[Nn]$ - [ $yes -eq 1 ] && [[ ! "$2" =~ $check ]] && return 0 - [[ "$2" =~ $check ]] && local default="[y/N]" || local default="[Y/n]" - read -p "$1 $default? " answer - case "$answer" in - y|Y|yes) return 0 ;; - n|N|no) return 1 ;; - '') [[ "$2" =~ $check ]] && return 1 || return 0 ;; - *) echo "invalid input: $answer" && return `agree "$1"` ;; - esac -} - -dnf_install() { - sudo dnf install --assumeyes $1 -} - -pip_install() { - pip install --user $1 -} - -export PATH=~/.local/bin:$PATH - -agree "Upgrade dnf packages" "N" && sudo dnf upgrade - -missing git && agree "Install git" && dnf_install git - -if missing pip; then - agree "Install python3-pip" && dnf_install python3-pip - agree "Upgrade pip with pip" && \ - sudo -H pip_install --upgrade pip -fi - -missing virtualenv && agree "Install virtualenv" && pip_install virtualenv - -if [ ! -f ~/.ssh/id_rsa ] && agree "Generate SSH key"; then - read -rp "SSH email: " email - [ ! -d ~/.ssh ] && mkdir -p ~/.ssh - ssh-keygen -t rsa -b 4096 -C "$email" -N "" -f ~/.ssh/id_rsa -fi - -if ! missing virtualenv && agree "Set SSH keys on remote Git servers"; then - env=$(mktemp -d) - virtualenv $env > /dev/null - source $env/bin/activate - pip install git+https://code.infektor.net/config/bootstrap.git - python -c 'import bootstrap; bootstrap.set_ssh_keys()' - deactivate - rm -r $env -fi - -missing conduit && agree "Install conduit" && \ - pip_install git+ssh://git@github.com/kbenzie/conduit.git - -echo "To use installed pip packages update your PATH:" -echo 'export PATH=~/.local/bin:$PATH' - -[ -f $0 ] && agree "Remove $0" "N" && rm $0 || exit 0 diff --git a/bootstrap-Linux.sh b/bootstrap-Linux.sh new file mode 100755 index 0000000..b2f28b7 --- /dev/null +++ b/bootstrap-Linux.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +set -e + +show_usage() { + echo "usage: $0 [-h] [-y]" +} + +show_help() { + show_usage + echo + echo "Bootstrap Fedora or Debian-based Linux distribution with:" + echo + echo "* Update packages" + echo "* Install git, python3-pip" + echo "* Install ansible" + echo "* Clone configuration repository" + echo "* Install 1password" + echo + echo "If any already exist they will not be reinstalled." + echo + echo "optional arguments:" + echo " -h show this help message and exit" + echo " -y assume yes when prompted" +} + +yes=0 + +while getopts 'hy' opt; do + case $opt in + h) show_help; exit 0 ;; + y) yes=1 ;; + *) show_usage; exit 1 ;; + esac +done + +agree() { + local check=^[Nn]$ + [ $yes -eq 1 ] && [[ ! "$2" =~ $check ]] && return 0 + [[ "$2" =~ $check ]] && local default="[y/N]" || local default="[Y/n]" + read -p "$1 $default? " answer + case "$answer" in + y|Y|yes) return 0 ;; + n|N|no) return 1 ;; + '') [[ "$2" =~ $check ]] && return 1 || return 0 ;; + *) echo "invalid input: $answer" && return `agree "$1"` ;; + esac +} + +if command -v apt &> /dev/null; then + agree "Update apt cache" && sudo apt-get update + agree "Upgrade apt packages" "N" && sudo apt-get upgrade + echo "Install git python3-pip" + sudo apt-get install --yes git python3-pip +fi + +if command -v dnf &> /dev/null; then + agree "Upgrade dnf packages" "N" && sudo dnf upgrade + echo "Install git python3-pip" + sudo dnf install --assumeyes git python3-pip +fi + +echo "Install ansible" +pip install --user --break-system-packages ansible jmespath + +if [ ! -d ~/.config/local ]; then + echo "Clone configuration repository" + git clone https://git.infektor.net/config/local.git ~/.config/local +fi + +agree "Install 1password" && \ + ~/.local/bin/ansible-playbook ~/.config/local/playbooks/1password.yaml + +echo "Done"