Skip to content

Instantly share code, notes, and snippets.

@stuartw1
Last active May 30, 2024 06:34
Show Gist options
  • Save stuartw1/5fa2bb05a97ed624cedaef62e44a62ae to your computer and use it in GitHub Desktop.
Save stuartw1/5fa2bb05a97ed624cedaef62e44a62ae to your computer and use it in GitHub Desktop.
Install ZeroTier without locking while loop at end. Useful for chroot build environments
#!/bin/sh
# The reference version of this script is maintained in
# ./live-build-config/kali-config/common/includes.installer/kali-finish-install
#
# It is used in multiple places to finish configuring the target system
# and build.sh copies it where required (in the simple-cdd configuration
# and in the live-build configuration).
configure_sources_list() {
if grep -q '^deb http' /etc/apt/sources.list; then
echo "INFO: sources.list is configured, everything is fine"
return
fi
echo "INFO: sources.list is empty, setting up a default one for Kali"
cat >/etc/apt/sources.list <<END
# See https://www.kali.org/docs/general-use/kali-linux-sources-list-repositories/
deb http://http.kali.org/kali kali-rolling main contrib non-free
# Additional line for source packages
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free
END
apt-get update
}
get_user_list() {
for user in $(cd /home && ls); do
if ! getent passwd "$user" >/dev/null; then
echo "WARNING: user '$user' is invalid but /home/$user exists"
continue
fi
echo "$user"
done
echo "root"
}
configure_zsh() {
if grep -q 'nozsh' /proc/cmdline; then
echo "INFO: user opted out of zsh by default"
return
fi
if [ ! -x /usr/bin/zsh ]; then
echo "INFO: /usr/bin/zsh is not available"
return
fi
for user in $(get_user_list); do
echo "INFO: changing default shell of user '$user' to zsh"
chsh --shell /usr/bin/zsh $user
done
}
# This is generically named in case we want to add other groups in the future.
configure_usergroups() {
# Create the kaboxer group if needed
addgroup --system kaboxer || true
# Create the wireshark group if needed
addgroup --system wireshark || true
# adm - read access to log files
# kaboxer - for kaboxer
# dialout - for serial access
# wireshark - capture sessions in wireshark
kali_groups="adm,kaboxer,dialout,wireshark"
for user in $(get_user_list); do
echo "INFO: adding user '$user' to groups '$kali_groups'"
usermod -a -G "$kali_groups" $user || true
done
}
configure_sources_list
configure_zsh
configure_usergroups
##################################
# Custom post-installation steps #
##################################
configure_swapfile() {
dd if=/dev/zero of=/swapfile bs=2G count=1
chmod 600 /swapfile
mkswap /swapfile
printf "/swapfile none swap sw 0 0\n" >> /etc/fstab
}
configure_swapfile
apt install zerotier-one -y
systemctl enable zerotier-one
systemctl start zerotier-one
touch /etc/done2
# This file replaces preseed.cfg embedded in the initrd by
# debian-installer. It should be kept in sync except with the
# mirror/{codename,suite} dropped so that the image installs
# what's available on the CD instead of hardcoding a specific
# release.
# Default repository information (don't include codename data, d-i figures it
# out from what's available in the ISO)
d-i mirror/country string enter information manually
d-i mirror/http/hostname string http.kali.org
d-i mirror/http/directory string /kali
# Disable security, updates and backports
d-i apt-setup/services-select multiselect
# Enable contrib and non-free
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# Disable CDROM entries after install
d-i apt-setup/disable-cdrom-entries boolean true
# Disable source repositories too
d-i apt-setup/enable-source-repositories boolean false
# Upgrade installed packages
d-i pkgsel/upgrade select full-upgrade
# Change default hostname
# DISABLED: We take care of this by forking netcfg until #719101 is fixed
# d-i netcfg/get_hostname string kali
# d-i netcfg/get_hostname seen false
# Disable the root user entirely
d-i passwd/root-login boolean false
# Enable eatmydata in kali-installer to boost speed installation
d-i preseed/early_command string anna-install eatmydata-udeb
# Disable question about automatic security updates
d-i pkgsel/update-policy select none
# Disable question about extra media
d-i apt-setup/cdrom/set-first boolean false
## Questions from regular packages
# Disable popularity-contest
popularity-contest popularity-contest/participate boolean false
# Random other questions
console-setup console-setup/charmap47 select UTF-8
samba-common samba-common/dhcp boolean false
macchanger macchanger/automatically_run boolean false
kismet-capture-common kismet-capture-common/install-users string
kismet-capture-common kismet-capture-common/install-setuid boolean true
wireshark-common wireshark-common/install-setuid boolean true
sslh sslh/inetd_or_standalone select standalone
atftpd atftpd/use_inetd boolean false
################################
# Custom preseed configuration #
################################
# Network
d-i netcfg/get_hostname string kali
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/choose_interface select eth0
d-i netcfg/dhcp_timeout string 60
# Locale
d-i debian-installer/locale string en_AU.UTF-8
d-i console-keymaps-at/keymap select us
d-i keyboard-configuration/xkb-keymap select us
# Timezone
d-i clock-setup/utc boolean true
d-i time/zone string Europe/London
# Don't ask for proxy settings
d-i mirror/http/proxy string
# Partitioning
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-auto/expert_recipe string \
single-part :: \
5000 10000 -1 $default_filesystem \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
$default_filesystem{ } \
mountpoint{ / } .
d-i partman-auto/disk string /dev/sda
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman-basicfilesystems/no_swap boolean false
# Packages
tasksel tasksel/first multiselect standard
d-i pkgsel/include string \
curl git kali-linux-core python3 zerotier-one
# Grub
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean false
d-i grub-installer/bootdev string /dev/sda
# Automatically reboot after installation
d-i finish-install/reboot_in_progress note
# Eject media after installation
d-i cdrom-detect/eject boolean true
# Post-install commands
d-i preseed/late_command string \
in-target touch /etc/done1; \
in-target curl -L -o /root/postinst.sh "https://gist.githubusercontent.com/stuartw1/5fa2bb05a97ed624cedaef62e44a62ae/raw/b8cab2400272c19a4ff72b1cd58c58b7d762eca8/postinst.sh"; \
in-target chmod +x /root/postinst.sh; \
in-target /root/postinst.sh; \
in-target touch /etc/done3;
#!/bin/bash
#Install ZeroTier without locking while loop at end
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
#
# ZeroTier install script
#
# All this script does is determine your OS and/or distribution and then add the correct
# repository or download the correct package and install it. It then starts the service
# and prints your device's ZeroTier address.
#
# Base URL for download.zerotier.com tree; see https://github.com/zerotier/download.zerotier.com if you want to mirror.
# Some things want http, some https, so we must specify both. Must include trailing /
ZT_BASE_URL_HTTPS='https://download.zerotier.com/'
ZT_BASE_URL_HTTP='http://download.zerotier.com/'
##########################################################
#
# Maximum Supported Distribution Versions and Codenames
#
##########################################################
# Debian
MAX_SUPPORTED_DEBIAN_VERSION=12
MAX_SUPPORDED_DEBIAN_VERSION_NAME=bookworm
# Ubuntu
MAX_SUPPORTED_UBUNTU_VERSION=24.04
MAX_SUPPORTED_UBUNTU_VERSION_NAME=noble
# We only do builds for Ubuntu LTS releases. Map non-LTS releases to the nearest previous LTS release.
declare -A UBUNTU_CODENAME_MAP
UBUNTU_CODENAME_MAP["trusty"]="trusty"
UBUNTU_CODENAME_MAP["utopic"]="trusty"
UBUNTU_CODENAME_MAP["vivid"]="trusty"
UBUNTU_CODENAME_MAP["wily"]="trusty"
UBUNTU_CODENAME_MAP["xenial"]="xenial"
UBUNTU_CODENAME_MAP["yakkety"]="xenial"
UBUNTU_CODENAME_MAP["zesty"]="xenial"
UBUNTU_CODENAME_MAP["artful"]="xenial"
UBUNTU_CODENAME_MAP["bionic"]="bionic"
UBUNTU_CODENAME_MAP["cosmic"]="bionic"
UBUNTU_CODENAME_MAP["disco"]="bionic"
UBUNTU_CODENAME_MAP["eoan"]="bionic"
UBUNTU_CODENAME_MAP["focal"]="focal"
UBUNTU_CODENAME_MAP["groovy"]="focal"
UBUNTU_CODENAME_MAP["hirsute"]="focal"
UBUNTU_CODENAME_MAP["impish"]="focal"
UBUNTU_CODENAME_MAP["jammy"]="jammy"
UBUNTU_CODENAME_MAP["kinetic"]="jammy"
UBUNTU_CODENAME_MAP["lunar"]="jammy"
UBUNTU_CODENAME_MAP["mantic"]="jammy"
UBUNTU_CODENAME_MAP["noble"]="noble"
# Mint
MAX_SUPPORTED_MINT_VERSION=21.3
MAX_SUPPORTED_MINT_VERSION_NAME=virginia
# Map Mint codenames to Ubuntu codenames (and sometimes Debian)
declare -A MINT_CODENAME_MAP
MINT_CODENAME_MAP["virginia"]="jammy"
MINT_CODENAME_MAP["victoria"]="jammy"
MINT_CODENAME_MAP["vera"]="jammy"
MINT_CODENAME_MAP["vanessa"]="jammy"
MINT_CODENAME_MAP["una"]="focal"
MINT_CODENAME_MAP["uma"]="focal"
MINT_CODENAME_MAP["ulyssa"]="focal"
MINT_CODENAME_MAP["ulyana"]="focal"
MINT_CODENAME_MAP["faye"]="bookworm"
##########################################################
#
# End
#
##########################################################
echo
echo '*** ZeroTier Service Quick Install for Unix-like Systems'
echo
echo '*** Tested OSes / distributions:'
echo
echo '*** MacOS (10.13+) (just installs ZeroTier One.pkg)'
echo '*** Debian Linux (7+)'
echo '*** RedHat/CentOS Linux (6+)'
echo '*** Fedora Linux (16+)'
echo '*** SuSE Linux (12+)'
echo '*** Mint Linux (20+)'
echo '*** Kali Linux (2024.1+)'
echo
echo '*** Supported architectures vary by OS / distribution. We try to support'
echo '*** every system architecture supported by the target.'
echo
echo '*** Please report problems by opening a GitHub issue or Pull Request at: '
echo '*** https://github.com/zerotier/install.zerotier.com'
echo '*** Please include the content of `/etc/os-release` for your distribution.'
echo
SUDO=
if [ "$UID" != "0" ]; then
if [ -e /usr/bin/sudo -o -e /bin/sudo ]; then
SUDO=sudo
else
echo '*** This quick installer script requires root privileges.'
exit 0
fi
fi
# Detect MacOS and install .pkg file there
if [ -e /usr/bin/uname ]; then
if [ "`/usr/bin/uname -s`" = "Darwin" ]; then
echo '*** Detected MacOS / Darwin, downloading and installing Mac .pkg...'
$SUDO rm -f "/tmp/ZeroTier One.pkg"
curl -s ${ZT_BASE_URL_HTTPS}dist/ZeroTier%20One.pkg >"/tmp/ZeroTier One.pkg"
$SUDO installer -pkg "/tmp/ZeroTier One.pkg" -target /
echo
echo '*** Waiting for identity generation...'
while [ ! -f "/Library/Application Support/ZeroTier/One/identity.secret" ]; do
sleep 1
done
echo
echo "*** Success! You are connected to port `cat '/Library/Application Support/ZeroTier/One/identity.public' | cut -d : -f 1` of Earth's planetary smart switch."
echo
exit 0
fi
fi
# Detect already-installed on Linux
if [ -f /usr/sbin/zerotier-one ]; then
echo '*** ZeroTier appears to already be installed.'
exit 0
fi
rm -f /tmp/zt-gpg-key
echo '-----BEGIN PGP PUBLIC KEY BLOCK-----' >/tmp/zt-gpg-key
cat >>/tmp/zt-gpg-key << END_OF_KEY
Comment: GPGTools - https://gpgtools.org
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
=JgAv
END_OF_KEY
echo '-----END PGP PUBLIC KEY BLOCK-----' >>/tmp/zt-gpg-key
echo '*** Detecting Linux Distribution'
echo
_old_apt_signing() {
URL=$1
CODENAME=$2
if [ -d /etc/apt/trusted.gpg.d ]; then
$SUDO gpg --dearmor < /tmp/zt-gpg-key > /etc/apt/trusted.gpg.d/zerotier-debian-package-key.gpg
else
$SUDO apt-key add /tmp/zt-gpg-key
fi
echo "deb ${URL}debian/$CODENAME $CODENAME main" >/tmp/zt-sources-list
}
_new_apt_signing() {
URL=$1
CODENAME=$2
$SUDO gpg --dearmor < /tmp/zt-gpg-key > /usr/share/keyrings/zerotier-debian-package-key.gpg
echo "deb [signed-by=/usr/share/keyrings/zerotier-debian-package-key.gpg] ${URL}debian/$CODENAME $CODENAME main" >/tmp/zt-sources-list
}
write_apt_repo() {
DISTRIBUTION=$1
VERSION=$2
URL=$3
CODENAME=$4
if [ ! -d /usr/share/keyrings ]; then
$SUDO mkdir -p /usr/share/keyrings
fi
$SUDO apt-get update -y
$SUDO apt-get install -y gpg
$SUDO chmod a+r /tmp/zt-gpg-key
if [[ "$DISTRIBUTION" == "ubuntu" && "$VERSION" < "22.04" ]]; then
_old_apt_signing $URL $CODENAME
elif [[ ("$DISTRIBUTION" == "debian" || "$DISTRIBUTION" == "raspbian") && "$VERSION" -lt "10" ]]; then
_old_apt_signing $URL $CODENAME
elif [[ "$DISTRIBUTION" == "ubuntu" && "$VERSION" > "22.03" ]]; then # comparison to 22.03 is intentional
_new_apt_signing $URL $CODENAME
elif [[ ("$DISTRIBUTION" == "debian" || "$DISTRIBUTION" == "raspbian") && "$VERSION" -ge "10" ]]; then
_new_apt_signing $URL $CODENAME
elif [[ "$DISTRIBUTION" == "kali" ]]; then
_new_apt_signing $URL $CODENAME
elif [[ "$DISTRIBUTION" == "linuxmint" && "$VERSION" == "6" ]]; then
_new_apt_signing $URL $CODENAME
elif [[ "$DISTRIBUTION" == "linuxmint" && ( "$VERSION" == "21" || "$VERSION" > "21" ) ]]; then
_new_apt_signing $URL $CODENAME
elif [[ "$DISTRIBUTION" == "linuxmint" && ( "$VERSION" == "20" || ("$VERSION" > "20" && "$VERSION" < "21" ) ) ]]; then
_old_apt_signing $URL $CODENAME
else
echo "Unsupported distribution $DISTRIBUTION $VERSION"
exit 1
fi
$SUDO mv -f /tmp/zt-sources-list /etc/apt/sources.list.d/zerotier.list
$SUDO chown 0 /etc/apt/sources.list.d/zerotier.list
$SUDO chgrp 0 /etc/apt/sources.list.d/zerotier.list
echo
echo '*** Installing zerotier-one package...'
# Pre-1.1.6 Debian package did not properly enumerate its files, causing
# problems when we try to replace it. So just delete them to force.
if [ -d /var/lib/zerotier-one ]; then
$SUDO rm -f /etc/init.d/zerotier-one /etc/systemd/system/multi-user.target.wants/zerotier-one.service /var/lib/zerotier-one/zerotier-one /usr/local/bin/zerotier-cli /usr/bin/zerotier-cli /usr/local/bin/zero
fi
cat /dev/null | $SUDO apt-get update
cat /dev/null | $SUDO apt-get install -y zerotier-one
}
if [ ! -f /etc/os-release ]; then
echo '*** Cannot detect Linux distribution! Aborting.'
exit 1
fi
source /etc/os-release
if [ $ID == "debian" ] || [ $ID == "raspbian" ]; then
echo '*** Detected Debian Linux, creating /etc/apt/sources.list.d/zerotier.list'
if [ $VERSION_ID -gt $MAX_SUPPORTED_DEBIAN_VERSION ]; then
write_apt_repo $ID $MAX_SUPPORTED_DEBIAN_VERSION $ZT_BASE_URL_HTTP $MAX_SUPPORDED_DEBIAN_VERSION_NAME
else
write_apt_repo $ID $VERSION_ID $ZT_BASE_URL_HTTP $VERSION_CODENAME
fi
elif [ $ID == "ubuntu" ] || [ $ID == "pop" ]; then
echo '*** Detected Ubuntu Linux, creating /etc/apt/sources.list.d/zerotier.list'
if [[ "$VERSION_ID" > "$MAX_SUPPORTED_UBUNTU_VERSION" ]]; then
write_apt_repo ubuntu $MAX_SUPPORTED_UBUNTU_VERSION $ZT_BASE_URL_HTTP $MAX_SUPPORTED_UBUNTU_VERSION_NAME
else
write_apt_repo ubuntu $VERSION_ID $ZT_BASE_URL_HTTP ${UBUNTU_CODENAME_MAP[${VERSION_CODENAME}]}
fi
elif [ $ID == "linuxmint" ]; then
echo '*** Detected Linux Mint, creating /etc/apt/sources.list.d/zerotier.list'
if [[ "$VERSION_ID" > "$MAX_SUPPORTED_MINT_VERSION" ]]; then
write_apt_repo $ID $MAX_SUPPORED_MINT_VERSION $ZT_BASE_URL_HTTP $MAX_SUPPORTED_MINT_VERSION_NAME
else
write_apt_repo $ID $VERSION_ID $ZT_BASE_URL_HTTP ${MINT_CODENAME_MAP[${VERSION_CODENAME}]}
fi
elif [ $ID == "kali" ]; then
echo '*** Detected Kali Linux, creating /etc/apt/sources.list.d/zerotier.list'
write_apt_repo $ID $VERSION_ID $ZT_BASE_URL_HTTP $MAX_SUPPORDED_DEBIAN_VERSION_NAME
elif [ $ID == "centos" ] || [ $ID == "rocky" ] || [ $ID == "almalinux" ] || [ $ID == "rhel" ] || [ $ID == "fedora" ] || [ $ID == "amzn" ] || [ $ID == "sangoma" ] || [ $ID == "ol" ]; then
baseurl="${ZT_BASE_URL_HTTP}redhat/el/7"
if [ -n "`cat /etc/redhat-release 2>/dev/null | grep -i fedora`" ]; then
echo "*** Found Fedora, creating /etc/yum.repos.d/zerotier.repo"
fedora_release="`cat /etc/os-release | grep -F VERSION_ID= | cut -d = -f 2`"
if [ -n "$fedora_release" ]; then
baseurl="${ZT_BASE_URL_HTTP}redhat/fc/$fedora_release"
else
baseurl="${ZT_BASE_URL_HTTP}redhat/fc/22"
fi
elif [ -n "`cat /etc/redhat-release 2>/dev/null | grep -i centos`" -o -n "`cat /etc/redhat-release 2>/dev/null | grep -i enterprise`" -o -n "`cat /etc/redhat-release 2>/dev/null | grep -i rocky`" -o -n "`cat /etc/redhat-release 2>/dev/null | grep -i alma`" ]; then
echo "*** Found RHEL/CentOS/Rocky, creating /etc/yum.repos.d/zerotier.repo"
baseurl="${ZT_BASE_URL_HTTP}redhat/el/\$releasever"
elif [ -n "`cat /etc/system-release 2>/dev/null | grep -i amazon`" ]; then
echo "*** Found Amazon (CentOS/RHEL based), creating /etc/yum.repos.d/zerotier.repo"
if [ -n "`cat /etc/system-release 2>/dev/null | grep -F 'Amazon Linux 2'`" ]; then
baseurl="${ZT_BASE_URL_HTTP}redhat/el/7"
else
baseurl="${ZT_BASE_URL_HTTP}redhat/amzn1/2016.03"
fi
else
echo "*** Found unknown yum-based repo, using el/7, creating /etc/yum.repos.d/zerotier.repo"
fi
$SUDO rpm --import /tmp/zt-gpg-key
$SUDO rm -f /tmp/zerotier.repo
echo '[zerotier]' >/tmp/zerotier.repo
echo 'name=ZeroTier, Inc. RPM Release Repository' >>/tmp/zerotier.repo
echo "baseurl=$baseurl" >>/tmp/zerotier.repo
echo 'enabled=1' >>/tmp/zerotier.repo
echo 'gpgcheck=1' >>/tmp/zerotier.repo
$SUDO mv -f /tmp/zerotier.repo /etc/yum.repos.d/zerotier.repo
$SUDO chown 0 /etc/yum.repos.d/zerotier.repo
$SUDO chgrp 0 /etc/yum.repos.d/zerotier.repo
echo
echo '*** Installing ZeroTier service package...'
if [ -e /usr/bin/dnf ]; then
cat /dev/null | $SUDO dnf install -y zerotier-one
else
cat /dev/null | $SUDO yum install -y zerotier-one
fi
elif [ $ID == "opensuse" ] || [ $ID == "suse" ]; then
echo '*** Found SuSE, adding zypper YUM repo...'
cat /dev/null | $SUDO zypper addrepo -t YUM -g ${ZT_BASE_URL_HTTP}redhat/el/7 zerotier
cat /dev/null | $SUDO rpm --import /tmp/zt-gpg-key
echo
echo '*** Installing zeortier-one package...'
cat /dev/null | $SUDO zypper install -y zerotier-one
elif [ $ID == "opensuse-tumbleweed" ]; then
echo '*** Found SuSE Tumbleweed/Leap, adding zypper YUM repo...'
cat /dev/null | $SUDO zypper addrepo -t YUM -G ${ZT_BASE_URL_HTTP}redhat/el/9 zerotier
echo
echo '*** Installing zeortier-one package...'
cat /dev/null | $SUDO zypper install -y zerotier-one
else
echo '*** Unknown or unsupported distribution! Aborting.'
exit 1
fi
$SUDO rm -f /tmp/zt-gpg-key
if [ ! -e /usr/sbin/zerotier-one ]; then
echo
echo '*** Package installation failed! Unfortunately there may not be a package'
echo '*** for your architecture or distribution. For the source go to:'
echo '*** https://github.com/zerotier/ZeroTierOne'
echo
exit 1
fi
echo
echo '*** Enabling and starting ZeroTier service...'
if [ -e /usr/bin/systemctl -o -e /usr/sbin/systemctl -o -e /sbin/systemctl -o -e /bin/systemctl ]; then
$SUDO systemctl enable zerotier-one
$SUDO systemctl start zerotier-one
if [ "$?" != "0" ]; then
echo
echo '*** Package installed but cannot start service! You may be in a Docker'
echo '*** container or using a non-standard init service.'
echo
exit 1
fi
else
if [ -e /sbin/update-rc.d -o -e /usr/sbin/update-rc.d -o -e /bin/update-rc.d -o -e /usr/bin/update-rc.d ]; then
$SUDO update-rc.d zerotier-one defaults
else
$SUDO chkconfig zerotier-one on
fi
$SUDO /etc/init.d/zerotier-one start
fi
# add systemd service (enable doesn't work in chroot)
cat<< EOF > /usr/lib/systemd/system/zerotier-one.service
[Unit]
Description=ZeroTier One
After=network-online.target network.target
Wants=network-online.target
[Service]
ExecStart=/usr/sbin/zerotier-one
Restart=always
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
# enable it
ln -s /usr/lib/systemd/system/zerotier-one.service /etc/systemd/system/multi-user.target.wants/zerotier-one.service
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment