a2cloud/scripts/install_comm_tools

276 lines
8.4 KiB
Bash
Executable File

#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 noexpandtab filetype=sh:
# install_comm_tools - temporary script for comm tools from ivan.sh
#
# To the extent possible under law, T. Joseph Carter and Ivan Drucker have
# waived all copyright and related or neighboring rights to the a2cloud
# scripts themselves. Software used or installed by these scripts is subject
# to other licenses. This work is published from the United States.
# Find the path of our source directory
a2cSource="$( dirname "${BASH_SOURCE[0]}" )/.."
pushd $a2cSource >/dev/null
a2cSource="$PWD"
popd >/dev/null
if [[ ! -f "$a2cSource/.a2cloud_source" ]]; then
printf "\na2cloud: cannot find a2cloud source directory in $a2cSource.\n\n"
exit 1
fi
# Make sure ras2_{os,arch} get set
. "$a2cSource/scripts/system_ident" -q
install_curl() {
if ! hash curl 2> /dev/null; then
### CommTools: Install curl
echo "A2CLOUD: Installing curl..."
sudo apt-get -y install curl
sudo apt-get -y clean
else
echo "A2CLOUD: curl is already installed."
fi
}
install_lrzsz() {
if ! hash sz 2> /dev/null; then
### CommTools: Install lrzsz
echo "A2CLOUD: Installing rzsz for X/Y/Zmodem transfers..."
sudo apt-get -y install lrzsz
sudo apt-get -y clean
else
echo "A2CLOUD: rzsz is already installed."
fi
}
install_ftp() {
if ! hash ftp 2> /dev/null; then
### CommTools: Install ftp
echo "A2CLOUD: Installing ftp..."
sudo apt-get -y install ftp
sudo apt-get -y clean
else
echo "A2CLOUD: ftp is already installed."
fi
}
install_lftp() {
if ! hash lftp 2> /dev/null; then
echo "a2cloud: Installing lftp..."
sudo apt-get -y install lftp
sudo apt-get -y clean
else
echo "a2cloud: lftp is already installed."
fi
}
install_mc() {
if ! hash mc 2> /dev/null; then
echo "a2cloud: Installing mc..."
sudo apt-get -y install mc
sudo apt-get -y clean
else
echo "a2cloud: mc is already installed."
fi
}
install_lynx() {
if ! hash lynx 2> /dev/null; then
### CommTools: Install lynx
echo "A2CLOUD: Installing lynx..."
sudo apt-get -y install lynx
sudo apt-get -y clean
else
echo "A2CLOUD: lynx is already installed."
fi
}
install_links() {
if ! hash links 2> /dev/null; then
### CommTools: Install links
echo "A2CLOUD: Installing links..."
sudo apt-get -y --force-yes install links
sudo apt-get -y clean
else
echo "A2CLOUD: links is already installed."
fi
}
install_a2news() {
### CommTools: Install tin + a2news script
sudo install -o root -g root -m 755 "$a2cSource/setup/a2news" /usr/local/bin/a2news
if ! hash tin 2> /dev/null; then
echo "A2CLOUD: Installing tin..."
sudo apt-get -y install tin
sudo apt-get -y clean
else
echo "A2CLOUD: tin is already installed."
fi
# Leaving this here just in case, but it should not be necessary anymore.
# ### CommTools: Configure exim4 to use ipv4 to kill console errors
# # have exim4 use IPv4 only to prevent log errors (IPv6 is off by default in Raspbian)
# if [[ $(grep ' ; ::1' /etc/exim4/update-exim4.conf.conf) ]]; then
# echo "A2CLOUD: Setting exim4 to use only IPv4 to prevent startup error messages..."
# sudo sed -i 's/ ; ::1//' /etc/exim4/update-exim4.conf.conf
# sudo update-exim4.conf
# sudo rm /var/log/exim4/mainlog /var/log/exim4/paniclog &> /dev/null
# fi
# restore exim4 log directory if occupied by a file put there by earlier A2CLOUD versions
if [[ -f /var/log/exim4 ]]; then
echo "A2CLOUD: Restoring exim4 log directory..."
sudo rm /var/log/exim4
sudo mkdir /var/log/exim4
sudo chown Debian-exim:adm /var/log/exim4
sudo chmod 2750 /var/log/exim4
fi
}
install_a2chat() {
### CommTools: Install irssi + a2chat script
sudo install -o root -g root -m 755 "$a2cSource/setup/a2chat" /usr/local/bin/a2chat
if ! hash irssi 2> /dev/null; then
echo "A2CLOUD: Installing a2chat/irssi..."
sudo apt-get -y install irssi
sudo apt-get -y clean
else
echo "A2CLOUD: a2chat/irssi is already installed."
fi
}
install_telnet() {
### CommTools: Install telnet
if ! hash telnet 2> /dev/null; then
echo "A2CLOUD: Installing telnet..."
sudo apt-get -y install telnet
sudo apt-get -y clean
else
echo "A2CLOUD: telnet is already installed."
fi
}
install_oysttyer() {
rm_file() {
if [[ -f $1 ]]; then
echo "Removing $1"
sudo rm -f "$1"
fi
}
try_rmdir() {
if [[ -d $1 ]]; then
if sudo rmdir $1 &>/dev/null; then
echo "Removing directory $1"
else
echo "Cannot remove $1"
fi
fi
}
### CommTools: Install Oysttyer (formerly TTYtter)
# Do we need to check for the readline module here as well?
local perlVersion=$(perl -e 'print $^V' | cut -c 2-)
local oysttyerWork="$(mktemp -d /tmp/oysttyer.XXXXXXXXXXXX)"
pushd "$oysttyerWork" >/dev/null
# Remove old ttytter
# Previous versions of a2cloud symlinked ttytter to oysttyer. I don't think
# we want to do that, because Debian won't in buster when we start using
# their oysttyer package.
if [[ -f /usr/local/bin/ttytter || -f /usr/local/share/perl/${perlVersion}/Term/ReadLine/TTYtter.pm ]]; then
echo "Removing ttytter in favor of oysttyer..."
sudo rm -f /usr/local/bin/ttytter
fi
# Now install the Debian's package
echo "Installing Debian's Term::ReadKey (libterm-readline-gnu-perl)..."
sudo apt-get -y install libterm-readline-gnu-perl
# Remove locally installed Term::ReadKey (libterm-readline-gnu-perl
if [[ -f /usr/local/man/man3/Term::ReadKey.3pm ]]; then
cat <<-EOF
You have a locally installed Term::ReadKey from an older version of a2cloud.
We will try to remove it, but locally installed perl modules are rather
difficult to completely remove. What we cannot remove will not interfere
with a running system, but if you like a tidy system, you'll need to clean
up a few perl files yourself.
EOF
rm_file "/usr/local/man/man3/Term::ReadKey.3pm"
# Deleting perl modules properly is hard, next to impossible, and this
# could be in man places. We'll do what we can.
for ver in 5.14.2 5.20.2 $perlVersion; do
for perlDir in perl arm-linux-gnueabihf/perl i686-linux-gnu/perl x86_64-linux-gnu/perl; do
if [[ -f /usr/local/lib/$perlDir/$ver/Term/ReadKey.pm ]]; then
rm_file "/usr/local/lib/$perlDir/$ver/Term/ReadKey.pm"
try_rmdir "/usr/local/lib/$perlDir/$ver/Term"
rm_file "/usr/local/lib/$perlDir/$ver/auto/Term/ReadKey/autosplit.ix"
rm_file "/usr/local/lib/$perlDir/$ver/auto/Term/ReadKey/ReadKey.so"
try_rmdir "/usr/local/lib/$perlDir/$ver/auto/Term/ReadKey"
try_rmdir "/usr/local/lib/$perlDir/$ver/auto/Term"
echo "Additional cleaning may be needed under:"
echo " /usr/local/lib/$perlDir/$ver"
fi
done
done
fi
# Old TTYtter author still maintains the readline module for oysttyer
echo "Installing Term::ReadLine::TTYtter..."
if sudo apt-get -y install libterm-readline-ttytter-perl; then
# We have a package now, so remove any locally installed version
if [[ -f /usr/local/share/perl/$perlVersion/Term/ReadLine/TTYtter.pm ]]; then
echo "Removing local Term::ReadLine::TTYtter in favor of the package we installed."
sudo rm -f "/usr/local/share/perl/$perlVersion/Term/ReadLine/readline_ttytter.pm"
sudo rm -f "/usr/local/share/perl/$perlVersion/Term/ReadLine/TTYtter.pm"
fi
else
# We haven't got a package, install it locally
echo "No package. That's all right, we'll install it locally..."
# We don't need to make anything for this, just copy the files
wget -O Term-ReadLine-TTYtter-1.4.tar.gz http://search.cpan.org/CPAN/authors/id/C/CK/CKAISER/Term-ReadLine-TTYtter-1.4.tar.gz
tar zxf Term-ReadLine-TTYtter-1.4.tar.gz
cd Term-ReadLine-TTYtter-1.4
sudo install -m 755 -o root -g root -d /usr/local/share/perl/$perlVersion/Term/ReadLine
sudo install -m 644 -o root -g root ReadLine/readline_ttytter.pm ReadLine/TTYtter.pm /usr/local/share/perl/$perlVersion/Term/ReadLine
cd ..
fi
# Actually install oysttyer now, if needed
echo "Installing oysttyer..."
if sudo apt-get -y install oysttyer; then
if [[ -f /usr/local/bin/oysttyer ]]; then
echo "Removing local oysttyer in favor of the package we installed."
sudo rm -f /usr/local/bin/oysttyer
fi
else
echo "No package. That's all right, we'll install it locally..."
wget -O oysttyer-2.9.1.tar.gz https://github.com/oysttyer/oysttyer/archive/2.9.1.tar.gz
tar -zxf oysttyer-2.9.1.tar.gz
sudo install -m 755 -o root -g root oysttyer-2.9.1/oysttyer.pl /usr/local/bin/oysttyer
fi
sudo apt-get clean
popd >/dev/null
rm -rf "$oysttyerWork"
}
install_curl
install_lrzsz
install_ftp
install_lftp
install_mc
install_lynx
install_links
install_a2news
install_a2chat
install_telnet
install_oysttyer