215 lines
5.8 KiB
Bash
Executable File
215 lines
5.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
called_backup=false
|
|
called_update=false
|
|
curdate=$(date '+%Y-%m-%d')
|
|
script_dir=$(dirname "$0")
|
|
show_note=false
|
|
# absolute path to this scripts parent directory (package root)
|
|
package_dir=$(readlink -f "$0" | xargs dirname | xargs dirname)
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
function install_collection () {
|
|
read -p "Install $1? [y/N]: " response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
if [ "${called_update}" = false ]; then
|
|
echo 'Updating APT before Installing'
|
|
sudo apt update
|
|
called_update=true
|
|
fi
|
|
echo "Installing $1"
|
|
sudo apt install "${@:2}" -y
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
# call this function before editing bashrc, will only make backup if needed
|
|
function make_bashrc_backup () {
|
|
if [ "${called_backup}" = false ]; then
|
|
called_backup=true
|
|
if [[ ! -f "${HOME}/bashrc.backup.${curdate}" ]]; then
|
|
echo 'backing up existing bashrc'
|
|
cp "${HOME}/.bashrc" "${HOME}/bashrc.backup.${curdate}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Configure PATH for scripts in this package? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
make_bashrc_backup
|
|
( cat << BASHRC
|
|
|
|
# ABS include shell scripts
|
|
export PATH="${package_dir}:\$PATH"
|
|
|
|
BASHRC
|
|
) >> "${HOME}/.bashrc"
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
install_collection 'core utilities: (curl, python3, jq, htop, etc.)' curl fail2ban git htop jq grep gzip net-tools goaccess dnsutils bash-completion cron vim make chrony build-essential gcc inotify-tools python3 python-is-python3 screen bc
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
install_collection 'extra utilities: (ncdu, zip, php, rclone, etc.)' ncdu zip unzip iftop colorized-logs php-cli ca-certificates gnupg lsb-release rclone
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
if [[ -n $(command -v "php") ]]; then
|
|
read -p 'Install PHP Composer? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
return_dir=$(pwd)
|
|
cd "${package_dir}"
|
|
"${package_dir}/composer-install/composer-install.sh"
|
|
if [[ -f "composer.phar" ]]; then
|
|
sudo mv composer.phar /usr/bin/composer
|
|
fi
|
|
cd "${return_dir}"
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
fi
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Install Docker? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
"${script_dir}/../docker-install/docker-install.sh"
|
|
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Add user to docker group? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
sudo groupadd docker
|
|
sudo usermod -aG docker "${USER}"
|
|
show_note=true
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
install_collection 'Ruby: (ruby, build-essential)' ruby-full build-essential zlib1g-dev
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
if [[ -n $(command -v "ruby") ]]; then
|
|
read -p 'Configure GEM_HOME and PATH for Ruby support? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
make_bashrc_backup
|
|
( cat << 'BASHRC'
|
|
|
|
# ABS configure ruby gems
|
|
export GEM_HOME="$HOME/gems"
|
|
export PATH="$HOME/gems/bin:$PATH"
|
|
|
|
BASHRC
|
|
) >> "${HOME}/.bashrc"
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
fi
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Install Node.js v22? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
sudo "${script_dir}/../nodesource/scripts/deb/setup_lts.x"
|
|
sudo apt install nodejs -y
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Install Node.js packages "yarn" and "http-server" globally? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
sudo npm install --global yarn
|
|
sudo npm install --global http-server
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
read -p 'Install GoLang? [y/N]: ' response
|
|
case "${response}" in
|
|
[Yy]* )
|
|
make_bashrc_backup
|
|
sudo apt install wget jq -y
|
|
# load json file with version info, filter to only stable versions, take the first (newest), strip to just numeric
|
|
version_flag=''
|
|
go_version=$(wget --quiet --output-document - 'https://go.dev/dl/?mode=json' | jq -r '.[] | select( .stable ) | .version' | head -n 1 | sed 's/[^0-9.]*//g')
|
|
if [[ -n "${go_version}" ]]; then
|
|
version_flag='--version'
|
|
echo "Installing GoLand Version: ${go_version}"
|
|
fi
|
|
|
|
"${script_dir}/../golang-install/goinstall.sh" "${version_flag}" "${go_version}"
|
|
;;
|
|
* )
|
|
echo 'Skipping'
|
|
;;
|
|
esac
|
|
echo ''
|
|
|
|
# ----------------------------------------------------------
|
|
|
|
if [ "${show_note}" = true ]; then
|
|
echo -e "\e[33myou will need to logout and back in before the 'docker' group will show up"
|
|
echo ''
|
|
fi
|
|
|
|
if [ "${called_backup}" = true ]; then
|
|
echo -e "\e[33mremember some changes will not take effect until you run:"
|
|
echo -e "\e[36msource ~/.bashrc\e[m"
|
|
echo ''
|
|
fi
|
|
|