2 # Copyright (C) 2016 Ian Kelling
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 2 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
23 Usage: ${0##*/} [OPTIONS] [DOMAIN_NAME] [LETSENCRYPT_EMAIL]
24 Setup dependencies, apache, and gitweb. Then call build.rb.
26 Default DOMAIN_NAME is iankelling.org. Domain is expected to resolve
27 so we can get a let's encrypt cert.
29 This script depends on a few other git repos of mine: distro-functions
33 -p PORT Apache port, default is 443.
34 -h|--help Print help and exit.
36 Note: Uses GNU getopt options parsing style
41 ##### begin command line parsing ########
44 temp
=$
(getopt
-l help, p
:h
"$@") || usage
1
48 -p) port
=$2; shift 2 ;;
51 *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
55 ##### end command line parsing ########
57 x
="$(readlink -f "$BASH_SOURCE")"
61 domain
=${1:-iankelling.org} # use argument for testing site
66 gitroot
=/a
/bin
/githtml
68 if [[ $EUID != 0 ]]; then
73 if grep -xFq 'VERSION_ID="8"' /etc
/os-release
; then
79 type -P a2enmod
&>/dev
/null ||
$s apt-get
-y install apache2
80 type -P sqlite3
&>/dev
/null ||
$s apt-get
-y install sqlite3
81 type -P ffmpeg
&>/dev
/null ||
$s apt-get
-y install ffmpeg
85 # build.rb dependencies
86 ruby-pygments.rb ruby-safe-yaml ruby-sass
87 # python pkgs used for o(n^2) voting blog entry
88 python-bcrypt python-passlib
93 pkgs
+=(build-essential ruby-dev
)
95 pkgs
+=(ruby-redcarpet
)
98 $s apt-get
-y install ${pkgs[@]}
100 sudo gem
install redcarpet
102 chmod og
+x _site
/on2vote
/vote.py
105 # debian has the package gitweb, which seems to mainly
106 # have some example apache config, and a minimal gitweb config.
107 # I'll just use the config as example and not use the package.
108 # It's example apache config seems to say we can use cgi or cgid,
109 # and googling cgid it seems a newer faster alternative. I also
110 # depend on this in my o(n^2) python script.
114 # additional settings from browsing https://git-scm.com/docs/gitweb.conf
115 $s dd of
=/etc
/gitweb.conf
<<EOF
116 \$feature{'highlight'}{'default'} = [1];
117 # highlighting doesn't work on files without extension.
118 # I noticed in terminal "highlight file" won't do it (unknown file type)
119 # hightlight < file will do it, and it's online documentation
120 # suggests it reads shebang. Todo: file a bug for gitweb
121 # to make highlight read shebangs.
122 our \$projectroot = "$gitroot";
123 # not documented at https://git-scm.com/docs/gitweb.conf,
124 # but it's in the debian conf, so use it.
125 # directory to use for temp files.
126 our \$git_temp = "/tmp";
127 push @git_base_url_list, "https://$domain/git";
128 our @extra_breadcrumbs = (
129 [ '$domain' => '/' ],
131 our \$home_link_str = 'git';
132 our \$site_footer = '$PWD/_site/gitweb-footer.html';
133 push @stylesheets, "/css/gitweb-site.css";
134 our \$favicon = '/assets/favicon.png';
135 # default is 25, cuts off descriptions.
136 our \$projects_list_description_width = 50;
137 # a bit superflous since they are all me
138 our \$omit_owner = true;
139 # highlight scripts with no extension, uses a patch
140 # that is on it's way upstream.
141 our \$highlight_force = 1;
142 our \$home_text = "$script_dir/_site/gitweb_home.html";
143 our \$projects_list_group_categories = 1;
146 web-conf
$email_arg -p $port - apache2
$domain <<EOF
147 # to run python script on my site:
148 <Directory /var/www/$domain/html/on2vote>
149 # to run python scripts with cgi
151 AddHandler cgi-script .py
154 <Directory "/var/www/$domain/html/cgi">
156 SetHandler cgi-script
159 # redirect some old paths when I was using jekyll.
160 Redirect permanent /10-14-2014/On2-vote-results.html /blog/on2-vote-results.html
161 Redirect permanent /09-29-2014/say-On2.html /blog/say-on2.html
162 Redirect permanent /08-07-2014/uninstalling-setup.html /blog/python-uninstall.html
163 Redirect permanent /08-01-2014/publising-my-technical-notes.html /blog/publishing-my-technical-notes.html
165 # All below is for gitweb + git-http-web.
166 # A simple builtin way to have a read only git website.
167 # I didn't find any significantly better alternatives out there.
168 SetEnv GIT_PROJECT_ROOT $gitroot
169 SetEnv GIT_HTTP_EXPORT_ALL
171 # note: cgi scripts can go anywhere into the filesystem,
172 # so there is no need to do a directory block for $gitroot
175 <Directory /usr/lib/git-core>
180 <Directory /usr/share/gitweb>
181 Options +FollowSymLinks +ExecCGI
182 AddHandler cgi-script .cgi
185 # from man-git-http-backend, so git-http-web ang gitweb can both be used.
186 # it is instead of this:
187 # #ScriptAlias / /usr/lib/git-core/git-http-backend/
189 "(?x)^/git/(.*/(HEAD | \\
191 objects/(info/[^/]+ | \\
192 [0-9a-f]{2}/[0-9a-f]{38} | \\
193 pack/pack-[0-9a-f]{40}\\.(pack|idx)) | \\
194 git-(upload|receive)-pack))\$" \\
195 /usr/lib/git-core/git-http-backend/\$1
199 # man-git-http-backend claims we should do this, but
200 # it causes no css/images to be displayed. Instead,
201 # just stick with the standard gitweb example directive
203 #ScriptAlias /git /usr/share/gitweb/gitweb.cgi/
204 Alias /git /usr/share/gitweb
209 $script_dir/gitweb-descriptions
$gitroot
212 $s rm -rf /var
/www
/$domain/html
213 $s ln -sT $script_dir/_site
/var
/www
/$domain/html