WIP: A first stab at getting the script out and done
This commit is contained in:
commit
ea57dea11e
5
README.md
Normal file
5
README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# bibliotecha-install
|
||||
|
||||
The script to install Bibliotecha.
|
||||
|
||||
> https://install.bibliotecha.info
|
281
bibliotecha.sh
Executable file
281
bibliotecha.sh
Executable file
@ -0,0 +1,281 @@
|
||||
#!/bin/bash
|
||||
# ____ _ _ _ _ _ _
|
||||
# | _ \(_) | | (_) | | | |
|
||||
# | |_) |_| |__ | |_ ___ | |_ ___ ___| |__ __ _
|
||||
# | _ <| | '_ \| | |/ _ \| __/ _ \/ __| '_ \ / _` |
|
||||
# | |_) | | |_) | | | (_) | || __/ (__| | | | (_| |
|
||||
# |____/|_|_.__/|_|_|\___/ \__\___|\___|_| |_|\__,_|
|
||||
#
|
||||
# Digital books need libraries too
|
||||
#
|
||||
# This install script is intended for use with Debian based
|
||||
# distributions. More specifically, Debian Stretch, which is
|
||||
# currently the latest distribution release from the Debian
|
||||
# project.
|
||||
#
|
||||
# License
|
||||
# =======
|
||||
#
|
||||
# Copyright (C) 2019 Bibliotecha Contributors <info@varia.zone>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Thanks
|
||||
# =====
|
||||
#
|
||||
# This script is based on the good work of the Freedombone project:
|
||||
# https://code.freedombone.net/bashrc/freedombone/src/stretch/src/freedombone
|
||||
|
||||
APT_CMD="apt -q"
|
||||
APT_INSTALL_CMD="$APT_CMD install -y --no-install-recommends"
|
||||
|
||||
function await_any_key {
|
||||
echo ""
|
||||
# shellcheck disable=SC2034
|
||||
read -n1 -rsp $"Press any key to continue ..." key
|
||||
echo ""
|
||||
}
|
||||
|
||||
function ensure_root_account {
|
||||
echo "Checking user account ..."
|
||||
|
||||
if ! id | grep -q root; then
|
||||
echo ""
|
||||
echo "This script must be run as root"
|
||||
echo "You can switch to the root user account with:"
|
||||
echo "$ sudo -i"
|
||||
echo ""
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
function show_bibliotecha_banner {
|
||||
echo ""
|
||||
echo " ____ _ _ _ _ _ _ "
|
||||
echo " | _ \(_) | | (_) | | | |"
|
||||
echo " | |_) |_| |__ | |_ ___ | |_ ___ ___| |__ __ _ "
|
||||
echo " | _ <| | '_ \| | |/ _ \| __/ _ \/ __| '_ \ / _' |"
|
||||
echo " | |_) | | |_) | | | (_) | || __/ (__| | | | (_| |"
|
||||
echo " |____/|_|_.__/|_|_|\___/ \__\___|\___|_| |_|\__,_|"
|
||||
echo ""
|
||||
echo " Digital books need libraries too"
|
||||
echo ""
|
||||
}
|
||||
|
||||
function show_introduction_text {
|
||||
echo ""
|
||||
echo "Welcome to the Bibliotecha installation script"
|
||||
echo ""
|
||||
echo "This script will setup the following infrastructure:"
|
||||
echo ""
|
||||
echo "* A Python 3 environment"
|
||||
echo "* A Wifi hotspot, DNS server and DHCP service"
|
||||
echo "* A Lighttpd web server"
|
||||
echo "* A Calibre server"
|
||||
echo "* A Calibre-web service"
|
||||
echo ""
|
||||
echo "Once the script is finished, please see post-install steps"
|
||||
echo "that are documented and available from the Bibliotecha manual:"
|
||||
echo ""
|
||||
echo " https://manual.bibliotecha.info/#TODO"
|
||||
echo ""
|
||||
|
||||
await_any_key
|
||||
}
|
||||
|
||||
function ensure_stretch_based_distribution {
|
||||
echo "Checking distribution ..."
|
||||
|
||||
local installing_on_stretch_based=1
|
||||
|
||||
if [ ! -f /usr/bin/foobar ]; then
|
||||
installing_on_stretch_based=
|
||||
fi
|
||||
|
||||
if [ ! -f /etc/apt/sources.list ]; then
|
||||
installing_on_stretch_based=
|
||||
else
|
||||
if ! grep -q 'stretch' /etc/apt/sources.list; then
|
||||
installing_on_stretch_based=
|
||||
fi
|
||||
if ! grep -q 'debian' /etc/apt/sources.list; then
|
||||
if ! grep -q 'raspbian' /etc/apt/sources.list; then
|
||||
installing_on_stretch_based=
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! $installing_on_stretch_based ]; then
|
||||
echo $"You should only run this on a Debian Stretch based system"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
function run_apt_update {
|
||||
echo "Running a package listing update ..."
|
||||
|
||||
$APT_CMD update
|
||||
}
|
||||
|
||||
function install_networking_packages {
|
||||
echo "Installing networking packages ..."
|
||||
|
||||
$APT_INSTALL_CMD \
|
||||
dhcpcd \
|
||||
dnsmasq \
|
||||
dnsutils \
|
||||
hostapd \
|
||||
wireless-tools
|
||||
}
|
||||
|
||||
function disable_networking_services {
|
||||
echo "Stopping the networking services ..."
|
||||
|
||||
local services="dnsmasq hostapd"
|
||||
|
||||
systemctl stop ${services}
|
||||
}
|
||||
|
||||
function ensure_variable_set {
|
||||
local variable="${1}"
|
||||
|
||||
if [[ -z "${variable}" ]]; then
|
||||
echo $"${variable} is not set. Cannot proceed ..."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function configure_network_interfaces {
|
||||
echo "Configuring networking interfaces ..."
|
||||
|
||||
ethernet_interface=$(ls /sys/class/net/ | grep foo)
|
||||
local ethernet_filename="/etc/network/interfaces.d/${ethernet_interface}"
|
||||
|
||||
if [[ -z "${ethernet_interface}" ]]; then
|
||||
echo ""
|
||||
echo "Could not determine the ethernet interface"
|
||||
echo "Please ensure you've configure 'predictable network interfaces'"
|
||||
echo "Please see #TODO for more"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
{ echo "auto eth0";
|
||||
echo "allow-hotplug ${ethernet_interface}";
|
||||
echo "iface ${ethernet_interface} inet dhcp"; } > "${ethernet_filename}"
|
||||
|
||||
local wireless_interface=$(ls /sys/class/net/ | grep wl)
|
||||
local wireless_filename="/etc/network/interfaces.d/${wireless_interface}"
|
||||
|
||||
if [[ -z "${wireless_interface}" ]]; then
|
||||
echo ""
|
||||
echo "Could not determine the wireless interface"
|
||||
echo "Please ensure you've configure 'predictable network interfaces'"
|
||||
echo "Please see #TODO for more"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
{ echo "auto ${wireless_interface}";
|
||||
echo "iface ${wireless_interface} int static";
|
||||
echo " address 10.0.0.1";
|
||||
echo " netmask 255.255.255.0"; } > "${wireless_filename}"
|
||||
}
|
||||
|
||||
function configure_dnsmasq {
|
||||
echo "Configuring dnsmasq ..."
|
||||
|
||||
local wireless_interface=$(ls /sys/class/net/ | grep wl)
|
||||
local wireless_filename="/etc/dnsmasq.d/${wireless_interface}.conf"
|
||||
|
||||
if [[ -z "${wireless_interface}" ]]; then
|
||||
echo ""
|
||||
echo "Could not determine the wireless interface"
|
||||
echo "Please ensure you've configure 'predictable network interfaces'"
|
||||
echo "Please see #TODO for more"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
{ echo "bogus-priv"
|
||||
echo "server=/library/10.0.0.1"
|
||||
echo "local=/library/"
|
||||
echo "address=/#/10.0.0.1"
|
||||
echo "interface=${wireless_interface}"
|
||||
echo "domain=library"
|
||||
echo "dhcp-range=10.0.0.50,10.0.0.200,255.255.255.0,12h"
|
||||
echo "dhcp-option=3,10.0.0.1"
|
||||
echo "dhcp-option=6,10.0.0.1"
|
||||
echo "dhcp-authoritative"; } > "${wireless_filename}"
|
||||
}
|
||||
|
||||
function configure_hostapd {
|
||||
echo "Configuring hostapd ..."
|
||||
|
||||
local wireless_interface=$(ls /sys/class/net/ | grep wl)
|
||||
local hostapd_filename="/etc/hostapd/hostapd.conf"
|
||||
|
||||
if [[ -z "${wireless_interface}" ]]; then
|
||||
echo ""
|
||||
echo "Could not determine the wireless interface"
|
||||
echo "Please ensure you've configure 'predictable network interfaces'"
|
||||
echo "Please see #TODO for more"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
{ echo "interface=${wireless_interface}"
|
||||
echo "ssid=Bibliotecha"
|
||||
echo "hw_mode=g"
|
||||
echo "channel=11"
|
||||
echo "auth_algs=1"; } > "${hostapd_filename}"
|
||||
|
||||
sed -i \
|
||||
's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' \
|
||||
/etc/default/hostapd
|
||||
}
|
||||
|
||||
function enable_networking_services {
|
||||
echo "Enabling network services ..."
|
||||
|
||||
local services="dnsmasq hostapd"
|
||||
|
||||
systemctl unmask hostapd
|
||||
systemctl enable ${services}
|
||||
}
|
||||
|
||||
function run_installation {
|
||||
#ensure_root_account
|
||||
#ensure_stretch_based_distribution
|
||||
|
||||
#show_bibliotecha_banner
|
||||
#show_introduction_text
|
||||
|
||||
#run_apt_update
|
||||
|
||||
#install_networking_packages
|
||||
#disable_networking_services
|
||||
#configure_network_interfaces
|
||||
#configure_dnsmasq
|
||||
#configure_hostapd
|
||||
#enable_networking_services
|
||||
|
||||
# TODO
|
||||
# install lighttpd and configure it
|
||||
# install calibre web and configure it
|
||||
# setup drone and make sure things are being tested
|
||||
}
|
||||
|
||||
run_installation
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user