-#!/bin/bash -l
+#!/bin/bash
# Copyright (C) 2016 Ian Kelling
# This program is free software: you can redistribute it and/or modify
set -eE -o pipefail
trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
-script_dir=$(readlink -f "${BASH_SOURCE%/*}")
-cd "$script_dir"
+usage() {
+ cat <<EOF
+Usage: ${0##*/} [OPTIONS] [DOMAIN_NAME]
+Setup dependencies, apache, and gitweb. Then call build.rb.
+
+Default DOMAIN_NAME is iankelling.org. Domain is expected to resolve
+so we can get a let's encrypt cert.
+
+-p PORT Apache port, default is *:443.
+-h|--help Print help and exit.
+
+Note: Uses GNU getopt options parsing style
+EOF
+ exit $1
+}
+
+##### begin command line parsing ########
+
+port="*:443"
+temp=$(getopt -l help, p:h "$@") || usage 1
+eval set -- "$temp"
+while true; do
+ case $1 in
+ -p) port=$2; shift 2 ;;
+ -h|--help) usage ;;
+ --) shift; break ;;
+ *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
+ esac
+done
+
+##### end command line parsing ########
+
+x="$(readlink -f "$BASH_SOURCE")"
+script_dir=${x%/*}
+cd $script_dir
domain=${1:-iankelling.org} # use argument for testing site
gitroot=/a/bin/githtml
+if [[ $EUID != 0 ]]; then
+ s=sudo
+fi
+
+deb8=false
+if grep -xFq 'VERSION_ID="8"' /etc/os-release; then
+ deb8=true
+fi
+
shopt -s extglob
-type -P a2enmod &>/dev/null || pi apache2
+type -P a2enmod &>/dev/null || $s apt-get -y install apache2
+type -P sqlite3 &>/dev/null || $s apt-get -y install sqlite3
+
acme-tiny-wrapper $domain
pkgs=(
# build.rb dependencies
- ruby-pygments.rb ruby-safe-yaml ruby-redcarpet
+ ruby-pygments.rb ruby-safe-yaml ruby-sass
# python pkgs used for o(n^2) voting blog entry
python-bcrypt python-passlib
# gitweb pkgs
gitweb highlight
)
-pi ${pkgs[@]}
+if $deb8; then
+ pkgs+=(build-essential ruby-dev)
+else
+ pkgs+=(ruby-redcarpet)
+fi
+
+$s apt-get -y install ${pkgs[@]}
+if $deb8; then
+ sudo gem install redcarpet
+fi
chmod og+x _site/on2vote/vote.py
# It's example apache config seems to say we can use cgi or cgid,
# and googling cgid it seems a newer faster alternative. I also
# depend on this in my o(n^2) python script.
-sudo a2enmod cgid
+$s a2enmod cgid
# additional settings from browsing https://git-scm.com/docs/gitweb.conf
-s dd of=/etc/gitweb.conf <<EOF
+$s dd of=/etc/gitweb.conf <<EOF
\$feature{'highlight'}{'default'} = [1];
# highlighting doesn't work on files without extension.
# I noticed in terminal "highlight file" won't do it (unknown file type)
);
our \$home_link_str = 'git';
our \$site_footer = '$PWD/_site/gitweb-footer.html';
-push @stylesheets, "/gitweb-site.css";
-push @stylesheets, "/common.css";
+push @stylesheets, "/css/gitweb-site.css";
our \$favicon = '/assets/favicon.png';
# default is 25, cuts off descriptions.
our \$projects_list_description_width = 40;
our \$highlight_force = 1;
EOF
-apache-site - $domain <<EOF
+apache-site -p $port - $domain <<EOF
# to run python script on my site:
<Directory /var/www/$domain/html/on2vote>
# to run python scripts with cgi
EOF
-# my projects all have README or --help with a short single line
-# description which I parse and put into the gitweb description.
-_git_desc_readme() {
- while read -r line; do
- [[ $line ]] || continue
- if echo "$line" | grep "^ *[#*]" &>/dev/null; then
- continue
- fi
- echo "$line" > .git/description
- break
- done < README*
-}
-gitweb_descriptions() {
- for d in $gitroot/*; do
- d=$(readlink -f $d)
- cd $d/..
- e ${PWD##*/}
- shopt -s nullglob
- f=(!(LICENSE|COPYING|README|.git))
- shopt -u nullglob
- if [[ ${#f[@]} == 1 && ! -d $f ]]; then
- if [[ ! -x $f ]]; then
- if [[ $f == *-function ]]; then
- ${f%-function} --help | sed -n '2p' > .git/description
- else
- _git_desc_readme
- fi
- else
- $f --help | sed -n '2p' > .git/description
- fi
- else
- _git_desc_readme
- fi
- done
-}
-gitweb_descriptions
+$script_dir/gitweb-descriptions $gitroot
$script_dir/build.rb
-s lnf -T $script_dir/_site /var/www/$domain/html
+$s rm -rf /var/www/$domain/html
+$s ln -sT $script_dir/_site /var/www/$domain/html