Browse Source

Implement the rest of the first script draft

master
Luke Murphy 5 years ago
parent
commit
d99581b46c
No known key found for this signature in database GPG Key ID: 5E2EF5A63E3718CC
  1. 184
      bibliotecha.sh

184
bibliotecha.sh

@ -40,6 +40,11 @@
APT_CMD="apt -q" APT_CMD="apt -q"
APT_INSTALL_CMD="$APT_CMD install -y --no-install-recommends" APT_INSTALL_CMD="$APT_CMD install -y --no-install-recommends"
CALIBRE_DATABASE_PATH="/opt/calibre-database"
CAPTIVE_PORTAL_PATH="/var/www/bibliotecha"
CALIBRE_WEB_PATH="/var/www/calibre-web"
LIGHTTPD_CONFIG_PATH="/etc/lighttpd/bibliotecha"
function await_any_key { function await_any_key {
echo "" echo ""
# shellcheck disable=SC2034 # shellcheck disable=SC2034
@ -99,10 +104,6 @@ function ensure_stretch_based_distribution {
local installing_on_stretch_based=1 local installing_on_stretch_based=1
if [ ! -f /usr/bin/foobar ]; then
installing_on_stretch_based=
fi
if [ ! -f /etc/apt/sources.list ]; then if [ ! -f /etc/apt/sources.list ]; then
installing_on_stretch_based= installing_on_stretch_based=
else else
@ -117,8 +118,9 @@ function ensure_stretch_based_distribution {
fi fi
if [ ! $installing_on_stretch_based ]; then if [ ! $installing_on_stretch_based ]; then
echo $"You should only run this on a Debian Stretch based system" echo "You should only run this on a Debian Stretch based system"
exit 0 echo "Cannot continue ..."
exit 1
fi fi
} }
@ -144,22 +146,15 @@ function disable_networking_services {
local services="dnsmasq hostapd" local services="dnsmasq hostapd"
systemctl stop ${services} 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 { function configure_network_interfaces {
echo "Configuring networking interfaces ..." echo "Configuring networking interfaces ..."
ethernet_interface=$(ls /sys/class/net/ | grep foo) # shellcheck disable=SC2010
# shellcheck disable=SC2155
ethernet_interface=$(ls /sys/class/net/ | grep en)
local ethernet_filename="/etc/network/interfaces.d/${ethernet_interface}" local ethernet_filename="/etc/network/interfaces.d/${ethernet_interface}"
if [[ -z "${ethernet_interface}" ]]; then if [[ -z "${ethernet_interface}" ]]; then
@ -175,6 +170,8 @@ function configure_network_interfaces {
echo "allow-hotplug ${ethernet_interface}"; echo "allow-hotplug ${ethernet_interface}";
echo "iface ${ethernet_interface} inet dhcp"; } > "${ethernet_filename}" echo "iface ${ethernet_interface} inet dhcp"; } > "${ethernet_filename}"
# shellcheck disable=SC2010
# shellcheck disable=SC2155
local wireless_interface=$(ls /sys/class/net/ | grep wl) local wireless_interface=$(ls /sys/class/net/ | grep wl)
local wireless_filename="/etc/network/interfaces.d/${wireless_interface}" local wireless_filename="/etc/network/interfaces.d/${wireless_interface}"
@ -196,6 +193,8 @@ function configure_network_interfaces {
function configure_dnsmasq { function configure_dnsmasq {
echo "Configuring dnsmasq ..." echo "Configuring dnsmasq ..."
# shellcheck disable=SC2010
# shellcheck disable=SC2155
local wireless_interface=$(ls /sys/class/net/ | grep wl) local wireless_interface=$(ls /sys/class/net/ | grep wl)
local wireless_filename="/etc/dnsmasq.d/${wireless_interface}.conf" local wireless_filename="/etc/dnsmasq.d/${wireless_interface}.conf"
@ -223,6 +222,8 @@ function configure_dnsmasq {
function configure_hostapd { function configure_hostapd {
echo "Configuring hostapd ..." echo "Configuring hostapd ..."
# shellcheck disable=SC2010
# shellcheck disable=SC2155
local wireless_interface=$(ls /sys/class/net/ | grep wl) local wireless_interface=$(ls /sys/class/net/ | grep wl)
local hostapd_filename="/etc/hostapd/hostapd.conf" local hostapd_filename="/etc/hostapd/hostapd.conf"
@ -252,28 +253,147 @@ function enable_networking_services {
local services="dnsmasq hostapd" local services="dnsmasq hostapd"
systemctl unmask hostapd systemctl unmask hostapd
systemctl enable ${services} systemctl enable "${services}"
}
function install_webserver {
echo "Installing lighttpd ..."
$APT_INSTALL_CMD lighttpd
}
function configure_webserver {
echo "Configuring bibliotecha under lighttpd ..."
if ! grep -q bibliotecha /etc/lighttpd/lighttpd.conf; then
echo ""
echo 'include "bibliotecha/bibliotecha.conf"' >> /etc/lighttpd/lighttpd.conf
fi
mkdir -p "$LIGHTTPD_CONFIG_PATH"
{ echo 'server.error-handler-404 = "/bibliotecha/index.html"'
echo ""
# shellcheck disable=SC2016
echo '$HTTP["host"] = "bibliotecha.library" {'
echo ' proxy.server = ("" => (("host" => "127.0.0.1", "port" => "8083")))'
echo '}'; } > "$LIGHTTPD_CONFIG_PATH/bibliotecha.conf"
}
function configure_captive_portal {
echo "Configuring the captive portal page ..."
$APT_INSTALL_CMD wget
captive_portal_url="https://git.vvvvvvaria.org/varia/bibliotecha-captive-portal/raw/branch/master/index.html"
mkdir -p "$CAPTIVE_PORTAL_PATH"
wget "$captive_portal_url" -O "$CAPTIVE_PORTAL_PATH/index.html"
chown -R www-data: "$CAPTIVE_PORTAL_PATH"
}
function install_calibre {
echo "Install Calibre ..."
$APT_INSTALL_CMD calibre
}
function configure_calibre_database {
echo "Configuring the Calibre database ..."
mkdir -p "$CALIBRE_DATABASE_PATH"
}
function install_calibreweb {
echo "Installing Calibre-web ..."
$APT_INSTALL_CMD git python3 python3-pip python3-dev python3-venv
# TODO(decentral1se): So, we're temporarily forking calibre-web because we
# ran into https://github.com/janeczku/calibre-web/issues/951. Hopefully this
# is resolved soon and we can continue on the regular upstream
calibre_web_url="https://github.com/decentral1se/calibre-web"
calibre_web_temp_branch="bibliotecha/temp-fork"
if [ ! -d "$CALIBRE_WEB_PATH" ]; then
git clone "$calibre_web_url" "$CALIBRE_WEB_PATH"
cd "$CALIBRE_WEB_PATH" && \
git fetch origin && \
git checkout "origin/$calibre_web_temp_branch"
fi
if [ ! -d "$CALIBRE_WEB_PATH/.venv" ]; then
# shellcheck disable=SC1091
cd "$CALIBRE_WEB_PATH" && \
python3 -m venv .venv && \
.venv/bin/pip install -r requirements.txt
fi
chown -R www-data: "$CALIBRE_WEB_PATH"
}
function configure_calibreweb {
echo "Configuring Calibre-web ..."
{ echo "Description=Calibre-Web"
echo ""
echo "[Service]"
echo "Type=simple"
echo "User=root"
echo "ExecStart=$CALIBRE_WEB_PATH/.venv/bin/python $CALIBRE_WEB_PATH/cps.py"
echo "WorkingDirectory=$CALIBRE_WEB_PATH"
echo ""
echo "[Install]"
echo "WantedBy=multi-user.target"; } > /etc/systemd/system/cps.service
systemctl enable cps.service
}
function show_post_install_banner {
echo ""
echo "Installation complete!"
echo ""
echo "The system will now reboot"
echo "Please see the manual for post-installation tasks"
echo "And help with troubleshooting the network configuration"
echo ""
echo " https://manual.bibliotecha.info/#TODO"
echo ""
}
function reboot_system {
echo "Rebooting system ..."
reboot
} }
function run_installation { function run_installation {
#ensure_root_account ensure_root_account
#ensure_stretch_based_distribution ensure_stretch_based_distribution
show_bibliotecha_banner
show_introduction_text
run_apt_update
#show_bibliotecha_banner install_networking_packages
#show_introduction_text disable_networking_services
configure_network_interfaces
configure_dnsmasq
configure_hostapd
enable_networking_services
#run_apt_update install_webserver
configure_webserver
configure_captive_portal
#install_networking_packages install_calibre
#disable_networking_services configure_calibre_database
#configure_network_interfaces install_calibreweb
#configure_dnsmasq configure_calibreweb
#configure_hostapd
#enable_networking_services
# TODO show_post_install_banner
# install lighttpd and configure it reboot_system
# install calibre web and configure it
} }
run_installation run_installation

Loading…
Cancel
Save