SpectreOS-old/strap.sh
2018-04-23 13:50:51 +02:00

174 lines
3.8 KiB
Bash
Executable file

#!/bin/sh
# strap.sh - install and setup BlackArch Linux keyring
# default mirror url
MIRROR='https://www.mirrorservice.org/sites/blackarch.org/blackarch/'
# simple error message wrapper
err()
{
echo >&2 `tput bold; tput setaf 1`"[-] ERROR: ${*}"`tput sgr0`
exit 1337
}
# simple warning message wrapper
warn()
{
echo >&2 `tput bold; tput setaf 1`"[!] WARNING: ${*}"`tput sgr0`
}
# simple echo wrapper
msg()
{
echo `tput bold; tput setaf 2`"[+] ${*}"`tput sgr0`
}
# check for root privilege
check_priv()
{
if [ $EUID -ne 0 ] ; then
err "you must be root"
fi
}
# make a temporary directory and cd into
make_tmp_dir()
{
tmp=`mktemp -d /tmp/blackarch_strap.XXXXXXXX`
trap "rm -rf $tmp" EXIT
cd "$tmp"
}
# retrieve the BlackArch Linux keyring
fetch_keyring()
{
curl -s -O \
'https://www.blackarch.org/keyring/blackarch-keyring.pkg.tar.xz{,.sig}'
}
# verify the keyring signature
# note: this is pointless if you do not verify the key fingerprint
verify_keyring()
{
gpg \
--keyserver pgp.mit.edu \
--recv-keys 4345771566D76038C7FEB43863EC0ADBEA87E4E3 > /dev/null 2>&1
if ! gpg \
--keyserver-options no-auto-key-retrieve \
--with-fingerprint blackarch-keyring.pkg.tar.xz.sig > /dev/null 2>&1
then
err 'invalid keyring signature. please stop by irc.freenode.net/blackarch'
fi
}
# delete the signature files
delete_signature()
{
if [ -f "blackarch-keyring.pkg.tar.xz.sig" ] ; then
rm blackarch-keyring.pkg.tar.xz.sig
fi
}
# make sure /etc/pacman.d/gnupg is usable
check_pacman_gnupg()
{
pacman-key --init
}
# install the keyring
install_keyring()
{
if ! pacman --config /dev/null \
--noconfirm -U blackarch-keyring.pkg.tar.xz
then
err 'keyring installation failed'
fi
# just in case
pacman-key --populate
}
# ask user for mirror
get_mirror()
{
printf " -> enter a BlackArch Linux mirror url (default: $MIRROR): "
while read line ; do
case "$line" in
http://*|https://*|ftp://*)
msg 'checking mirror...'
if ! curl -sI "$line/blackarch/os/i686/blackarch.db" |
head -n1 | grep -q 200
then
warn 'blackarch.db not found on given mirror'
warn "using default mirror $MIRROR"
else
MIRROR=$line
msg "using mirror $MIRROR"
fi
break
;;
*)
warn 'you did not specify a correct mirror url'
msg "using default mirror $MIRROR"
return
;;
esac
done < /dev/tty
}
# update pacman.conf
update_pacman_conf()
{
# delete blackarch related entries if existing
sed -i '/blackarch/{N;d}' /etc/pacman.conf
cat >> "/etc/pacman.conf" << EOF
[blackarch]
Server = $MIRROR/\$repo/os/\$arch
EOF
}
# synchronize and update
pacman_update()
{
pacman -Syy
}
pacman_upgrade()
{
echo 'perform full system upgrade? (pacman -Su) [Yn]:'
read conf < /dev/tty
case "$conf" in
''|y|Y) pacman -Su ;;
n|N) warn 'some blackarch packages may not work without an up-to-date system.' ;;
esac
}
# setup blackarch linux
blackarch_setup()
{
check_priv
msg 'installing blackarch keyring...'
make_tmp_dir
fetch_keyring
verify_keyring
delete_signature
check_pacman_gnupg
install_keyring
echo
msg 'keyring installed successfully'
# check if pacman.conf has already a mirror
if ! grep -q "\[blackarch\]" /etc/pacman.conf; then
msg 'configuring pacman'
get_mirror
msg 'updating pacman.conf'
update_pacman_conf
fi
msg 'updating package databases'
pacman_update
msg 'BlackArch Linux is ready!'
}
blackarch_setup