fix address
[iankelling.org] / setup.sh
index be4c4d7b89a420190a10d3ed2aeb575a86eaef46..41e7d5089c9e1f18924ef69543fd4ce905c4db80 100755 (executable)
--- a/setup.sh
+++ b/setup.sh
@@ -1,4 +1,4 @@
-#!/bin/bash -l
+#!/bin/bash
 # Copyright (C) 2016 Ian Kelling
 
 # This program is free software: you can redistribute it and/or modify
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This script depends on a few other git repos of mine, such as
-# distro-functions, basic-https-conf, acme-tiny-wrapper
 
 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] [LETSENCRYPT_EMAIL]
+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.
+
+This script depends on a few other git repos of mine: distro-functions
+and basic-https-conf.
+
+
+-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
+email=$2
+if [[ $email ]]; then
+  email_arg="-e $email"
+  fi
 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
+type -P ffmpeg &>/dev/null || $s apt-get -y install ffmpeg
 
-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
 
 
@@ -50,11 +108,11 @@ 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)
@@ -72,19 +130,20 @@ our @extra_breadcrumbs = (
 );
 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 \$projects_list_description_width = 50;
 # a bit superflous since they are all me
 our \$omit_owner = true;
 # highlight scripts with no extension, uses a patch
 # that is on it's way upstream.
 our \$highlight_force = 1;
+our \$home_text = "$script_dir/_site/gitweb_home.html";
+our \$projects_list_group_categories = 1;
 EOF
 
-apache-site - $domain <<EOF
+web-conf $email_arg -p $port - apache2 $domain <<EOF
 # to run python script on my site:
 <Directory /var/www/$domain/html/on2vote>
   # to run python scripts with cgi
@@ -146,43 +205,9 @@ Alias /git /usr/share/gitweb
 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