Rewrite install script
This commit is contained in:
11
Makefile
11
Makefile
@@ -1,16 +1,11 @@
|
|||||||
SHELL := /bin/bash
|
|
||||||
# ---------------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------------- #
|
||||||
# Local commands
|
# Local commands
|
||||||
# ---------------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------------- #
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
||||||
|
# @arg $TARGET binary to install
|
||||||
all:
|
all:
|
||||||
# Install dotfiles
|
./install.pl
|
||||||
./bootstrap.sh
|
|
||||||
|
|
||||||
clean:
|
|
||||||
# Remove all temporary files and artefacts
|
|
||||||
rm -rf .dotlock tmp
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------------- #
|
||||||
# Docker commands
|
# Docker commands
|
||||||
|
|||||||
41
install.pl
Executable file
41
install.pl
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Cwd;
|
||||||
|
|
||||||
|
# Prevent running as root
|
||||||
|
if ($< == 0) {
|
||||||
|
print "Failed: Running as root. Please run as user, not sudo\n";
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate unique logfile
|
||||||
|
my $uuid = `uuidgen`;
|
||||||
|
chomp $uuid;
|
||||||
|
my $log_path = "$ENV{'HOME'}/.dotfiles.$uuid.log";
|
||||||
|
print "Logs: $log_path\n";
|
||||||
|
|
||||||
|
|
||||||
|
my $dir = getcwd;
|
||||||
|
my $install_dir = "$dir/install";
|
||||||
|
print "Installing $install_dir\n";
|
||||||
|
|
||||||
|
# Read scripts to be installed
|
||||||
|
opendir(DIR, $install_dir) or die "Could not open $install_dir\n";
|
||||||
|
my @files = readdir(DIR);
|
||||||
|
closedir(DIR);
|
||||||
|
@files = sort { lc($a) cmp lc($b) } @files;
|
||||||
|
|
||||||
|
foreach my $file (@files)
|
||||||
|
{
|
||||||
|
# Install all scripts by default
|
||||||
|
next if($file !~ /^\d{2}-.*\.sh$/);
|
||||||
|
|
||||||
|
print "Running $file...\r";
|
||||||
|
my $exit_status = system("/bin/bash -l $install_dir/$file >> $log_path 2>&1");
|
||||||
|
if ($exit_status != 0) {
|
||||||
|
print "Failure in $file, see above and logs for more detail.\n";
|
||||||
|
exit ($exit_status);
|
||||||
|
}
|
||||||
|
}
|
||||||
53
install.sh
53
install.sh
@@ -1,53 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
export install_dir="$dotfiles_dir/install"
|
|
||||||
source "$install_dir/utils.sh"
|
|
||||||
printf "\nInstalling ${C_CYAN}$REPOSITORY${C_NC}"
|
|
||||||
printf " as ${C_YELLOW}$USER${C_NC}\n"
|
|
||||||
|
|
||||||
# Prevent running as root
|
|
||||||
if [[ $USER == root ]]; then
|
|
||||||
printf "Failed: ${C_RED}Running as root${C_NC}\n"
|
|
||||||
printf "Please run as user, not ${C_YELLOW}sudo${C_NC}\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prevent concurrent runs
|
|
||||||
readonly install_lock_file="$dotfiles_dir/.dotlock"
|
|
||||||
if [ -f "$install_lock_file" ]; then
|
|
||||||
printf "Failed: ${C_RED}Script already running${C_NC}\n"
|
|
||||||
printf "Please wait for script to exit or ${C_YELLOW}make clean${C_NC}\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
touch "$install_lock_file"
|
|
||||||
|
|
||||||
# Install all scripts by default
|
|
||||||
if [ -z "$TARGET" ]; then
|
|
||||||
export TARGET="all"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$TARGET" == "all" ]; then
|
|
||||||
scripts=($install_dir/*.sh)
|
|
||||||
else
|
|
||||||
scripts=($install_dir/*-{bash,$TARGET}.sh)
|
|
||||||
fi
|
|
||||||
for script in "${scripts[@]}"; do
|
|
||||||
|
|
||||||
script_name="$(basename $script .sh)"
|
|
||||||
IFS='-' read -a script_fields <<<"$script_name"
|
|
||||||
script_number=${script_fields[0]}
|
|
||||||
script_target=${script_fields[1]}
|
|
||||||
|
|
||||||
printf "\nRunning #$script_number ${C_YELLOW}$script_target${C_NC}...\n${C_DGRAY}"
|
|
||||||
chmod +x "$script"
|
|
||||||
source "$script" | indent
|
|
||||||
printf "${C_NC}"
|
|
||||||
|
|
||||||
# Clean up if fails
|
|
||||||
done || make clean
|
|
||||||
|
|
||||||
printf "\nDone! Cleaning up...\n${C_DGRAY}"
|
|
||||||
make clean
|
|
||||||
printf "${C_NC}\n"
|
|
||||||
exit 0
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
clean
|
clean
|
||||||
update
|
update
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
bash_source="$dotfiles_dir/bash"
|
bash_source="$dotfiles_dir/bash"
|
||||||
bash_target="$HOME"
|
bash_target="$HOME"
|
||||||
link_folder "$bash_source" "$bash_target"
|
link_folder "$bash_source" "$bash_target"
|
||||||
echo "bash dotfiles are linked"
|
echo "bash dotfiles are linked"
|
||||||
|
|
||||||
source "$HOME/.bashrc"
|
|
||||||
echo "bashrc sourced"
|
|
||||||
|
|
||||||
sudo chmod -R 0644 /etc/update-motd.d/
|
sudo chmod -R 0644 /etc/update-motd.d/
|
||||||
|
|
||||||
bash --version
|
bash --version
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "fish"; then
|
if not_installed "fish"; then
|
||||||
echo "installing fish..."
|
echo "installing fish..."
|
||||||
add_ppa "fish-shell/release-3"
|
add_ppa "fish-shell/release-3"
|
||||||
update
|
update
|
||||||
install fish
|
install fish
|
||||||
|
|
||||||
fi
|
fi
|
||||||
echo "fish is installed"
|
echo "fish is installed"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# ssh key exists
|
# ssh key exists
|
||||||
ssh_target="$HOME/.ssh"
|
ssh_target="$HOME/.ssh"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# git dotfiles are symlinked
|
# git dotfiles are symlinked
|
||||||
git_source="$dotfiles_dir/git"
|
git_source="$dotfiles_dir/git"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# pyenv is installed
|
# pyenv is installed
|
||||||
if not_installed "pyenv"; then
|
if not_installed "pyenv"; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# python3 and pip3 are installed
|
# python3 and pip3 are installed
|
||||||
if not_installed "pip3"; then
|
if not_installed "pip3"; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# poetry is installed
|
# poetry is installed
|
||||||
if not_installed "poetry"; then
|
if not_installed "poetry"; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# nvm is installed
|
# nvm is installed
|
||||||
if not_installed "nvm"; then
|
if not_installed "nvm"; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# yarn is installed
|
# yarn is installed
|
||||||
if not_installed "yarn"; then
|
if not_installed "yarn"; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "java"; then
|
if not_installed "java"; then
|
||||||
echo "Installing java..."
|
echo "Installing java..."
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
vim_source="$dotfiles_dir/vim"
|
vim_source="$dotfiles_dir/vim"
|
||||||
vim_target="$XDG_CONFIG_HOME/nvim"
|
vim_target="$XDG_CONFIG_HOME/nvim"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "elm"; then
|
if not_installed "elm"; then
|
||||||
curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
|
curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
# docker is installed
|
# docker is installed
|
||||||
DOCKER_FOLDER="$HOME/.docker"
|
DOCKER_FOLDER="$HOME/.docker"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "firebase"; then
|
if not_installed "firebase"; then
|
||||||
echo "Installing firebase..."
|
echo "Installing firebase..."
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||||
unzip awscliv2.zip -d "$dotfiles_dir/tmp"
|
unzip awscliv2.zip -d "$dotfiles_dir/tmp"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "terraform"; then
|
if not_installed "terraform"; then
|
||||||
echo "Installing terraform..."
|
echo "Installing terraform..."
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
echo "cleaning"
|
echo "cleaning"
|
||||||
clean
|
clean
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
source "$(dirname $0)/utils.sh"
|
||||||
|
|
||||||
if not_installed "screenfetch"; then
|
if not_installed "screenfetch"; then
|
||||||
echo "Installing screenfetch..."
|
echo "Installing screenfetch..."
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
# Helper variables #
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
install_dir="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )";
|
||||||
|
dotfiles_dir="$(dirname "$install_dir")";
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------------- #
|
||||||
# Helper functions
|
# Helper functions
|
||||||
# ---------------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------------- #
|
||||||
@@ -8,28 +14,28 @@ clean() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
sudo apt-get update -qq
|
sudo apt-get update
|
||||||
}
|
}
|
||||||
|
|
||||||
# Non-interactive upgrade
|
# Non-interactive upgrade
|
||||||
# Skip if FAST_MODE is defined
|
|
||||||
upgrade() {
|
upgrade() {
|
||||||
[ "$FAST_MODE" != false ] && return
|
|
||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
sudo apt-get dist-upgrade -qq \
|
sudo apt-get \
|
||||||
-o Dpkg::Options::="--force-confdef" \
|
-o Dpkg::Options::="--force-confdef" \
|
||||||
-o Dpkg::Options::="--force-confold"
|
-o Dpkg::Options::="--force-confold" \
|
||||||
|
-y \
|
||||||
|
dist-upgrade
|
||||||
}
|
}
|
||||||
|
|
||||||
# @arg $1 packages to install
|
# @arg $1 packages to install
|
||||||
install() {
|
install() {
|
||||||
sudo apt-get install -qq $1
|
sudo apt-get install $1
|
||||||
refresh
|
refresh
|
||||||
}
|
}
|
||||||
|
|
||||||
# @arg $1 package list file to install
|
# @arg $1 package list file to install
|
||||||
install_file() {
|
install_file() {
|
||||||
sudo apt-get install -fqq $(cat $1)
|
sudo apt-get install -f $(cat $1)
|
||||||
refresh
|
refresh
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
setup.pl
15
setup.pl
@@ -4,6 +4,7 @@ use warnings;
|
|||||||
|
|
||||||
|
|
||||||
use Archive::Tar;
|
use Archive::Tar;
|
||||||
|
use File::Copy;
|
||||||
use File::Temp ();
|
use File::Temp ();
|
||||||
use IPC::System::Simple qw(capture);
|
use IPC::System::Simple qw(capture);
|
||||||
use LWP::Simple;
|
use LWP::Simple;
|
||||||
@@ -18,9 +19,12 @@ my $branch = $ENV{'DOTFILES_BRANCH'} // 'master';
|
|||||||
print "Using repository $author/$repository at $branch\n";
|
print "Using repository $author/$repository at $branch\n";
|
||||||
|
|
||||||
# Installer filename
|
# Installer filename
|
||||||
my $installer = $ENV{'DOTFILES_INSTALLER'} // 'install.sh';
|
my $installer = $ENV{'DOTFILES_INSTALLER'} // 'install.pl';
|
||||||
print "Using installer $installer\n";
|
print "Using installer $installer\n";
|
||||||
|
|
||||||
|
# Install location
|
||||||
|
my $dotfiles_dir = $ENV{'DOTFILES_DIR'} // "$ENV{'HOME'}/.dotfiles";
|
||||||
|
|
||||||
# Download repo
|
# Download repo
|
||||||
my $repository_url = "https://github.com/$author/$repository/archive/$branch.tar.gz";
|
my $repository_url = "https://github.com/$author/$repository/archive/$branch.tar.gz";
|
||||||
my $temp_handle = File::Temp->new();
|
my $temp_handle = File::Temp->new();
|
||||||
@@ -36,8 +40,13 @@ $tar->read($repository_temp);
|
|||||||
$tar->setcwd($temp_dir);
|
$tar->setcwd($temp_dir);
|
||||||
$tar->extract();
|
$tar->extract();
|
||||||
|
|
||||||
|
# Move dotfiles out of temporary dir
|
||||||
|
my $temp_dotfiles_dir = "$temp_dir/$repository-$branch";
|
||||||
|
print "Moving $temp_dotfiles_dir to $dotfiles_dir\n";
|
||||||
|
move($temp_dotfiles_dir, $dotfiles_dir);
|
||||||
|
|
||||||
# Install repo
|
# Install repo
|
||||||
my $installer_path = "$temp_dir/$repository-$branch/$installer";
|
my $installer_path = "$dotfiles_dir/$installer";
|
||||||
print 'Running installer <' . $installer_path . ">\n";
|
print 'Running installer ' . $installer_path . "\n";
|
||||||
my $output = capture([0,1,2], $^X, $installer_path);
|
my $output = capture([0,1,2], $^X, $installer_path);
|
||||||
print $output;
|
print $output;
|
||||||
|
|||||||
Reference in New Issue
Block a user