freedombone-app-blogstatic 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Static blog
  12. #
  13. # License
  14. # =======
  15. #
  16. # Copyright (C) 2014-2016 Bob Mottram <bob@robotics.uk.to>
  17. #
  18. # This program is free software: you can redistribute it and/or modify
  19. # it under the terms of the GNU Affero General Public License as published by
  20. # the Free Software Foundation, either version 3 of the License, or
  21. # (at your option) any later version.
  22. #
  23. # This program is distributed in the hope that it will be useful,
  24. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. # GNU Affero General Public License for more details.
  27. #
  28. # You should have received a copy of the GNU Affero General Public License
  29. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  30. VARIANTS='mesh'
  31. STATIC_BLOG_INSTALL_DIR=/etc/staticblog
  32. PELICAN_THEMES_REPO="https://github.com/getpelican/pelican-themes"
  33. PELICAN_PLUGINS_REPO="https://github.com/getpelican/pelican-plugins"
  34. function reconfigure_tox {
  35. echo -n ''
  36. }
  37. function upgrade_blogstatic {
  38. echo -n ''
  39. }
  40. function backup_local_blogstatic {
  41. echo -n ''
  42. }
  43. function restore_local_blogstatic {
  44. echo -n ''
  45. }
  46. function backup_remote_blogstatic {
  47. echo -n ''
  48. }
  49. function remove_blogstatic {
  50. echo -n ''
  51. }
  52. function create_pelican_conf {
  53. STATIC_BLOG_FILE=$1
  54. echo '#!/usr/bin/env python' > $STATIC_BLOG_FILE
  55. echo '# -*- coding: utf-8 -*- #' >> $STATIC_BLOG_FILE
  56. echo 'from __future__ import unicode_literals' >> $STATIC_BLOG_FILE
  57. echo '' >> $STATIC_BLOG_FILE
  58. echo "AUTHOR=u\"$MY_USERNAME\"" >> $STATIC_BLOG_FILE
  59. echo "SITENAME=u'Freedombone Blog'" >> $STATIC_BLOG_FILE
  60. echo "SITEURL=''" >> $STATIC_BLOG_FILE
  61. echo "PATH='content'" >> $STATIC_BLOG_FILE
  62. echo 'TIMEZONE=u"Europe/London"' >> $STATIC_BLOG_FILE
  63. echo "DEFAULT_LANG=u'en'" >> $STATIC_BLOG_FILE
  64. echo '' >> $STATIC_BLOG_FILE
  65. echo 'FEED_ALL_ATOM=None' >> $STATIC_BLOG_FILE
  66. echo 'CATEGORY_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  67. echo 'TRANSLATION_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  68. echo 'AUTHOR_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  69. echo 'AUTHOR_FEED_RSS=None' >> $STATIC_BLOG_FILE
  70. echo '' >> $STATIC_BLOG_FILE
  71. echo 'DEFAULT_PAGINATION=False' >> $STATIC_BLOG_FILE
  72. echo 'RELATIVE_URLS=True' >> $STATIC_BLOG_FILE
  73. }
  74. function create_pelican_makefile {
  75. STATIC_BLOG_FILE=$1
  76. echo 'PY?=python' > $STATIC_BLOG_FILE
  77. echo 'PELICAN?=pelican' >> $STATIC_BLOG_FILE
  78. echo 'PELICANOPTS=' >> $STATIC_BLOG_FILE
  79. echo '' >> $STATIC_BLOG_FILE
  80. echo 'BASEDIR=$(CURDIR)' >> $STATIC_BLOG_FILE
  81. echo 'INPUTDIR=$(BASEDIR)/content' >> $STATIC_BLOG_FILE
  82. echo "OUTPUTDIR=$STATIC_BLOG_PATH" >> $STATIC_BLOG_FILE
  83. echo 'CONFFILE=$(BASEDIR)/pelicanconf.py' >> $STATIC_BLOG_FILE
  84. echo 'PUBLISHCONF=$(BASEDIR)/publishconf.py' >> $STATIC_BLOG_FILE
  85. echo '' >> $STATIC_BLOG_FILE
  86. echo 'DEBUG ?= 0' >> $STATIC_BLOG_FILE
  87. echo 'ifeq ($(DEBUG), 1)' >> $STATIC_BLOG_FILE
  88. echo -e '\tPELICANOPTS += -D' >> $STATIC_BLOG_FILE
  89. echo 'endif' >> $STATIC_BLOG_FILE
  90. echo '' >> $STATIC_BLOG_FILE
  91. echo 'RELATIVE ?= 0' >> $STATIC_BLOG_FILE
  92. echo 'ifeq ($(RELATIVE), 1)' >> $STATIC_BLOG_FILE
  93. echo -e '\tPELICANOPTS += --relative-urls' >> $STATIC_BLOG_FILE
  94. echo 'endif' >> $STATIC_BLOG_FILE
  95. echo '' >> $STATIC_BLOG_FILE
  96. echo 'html:' >> $STATIC_BLOG_FILE
  97. echo -e '\t$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  98. echo '' >> $STATIC_BLOG_FILE
  99. echo 'clean:' >> $STATIC_BLOG_FILE
  100. echo -e '\t[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)' >> $STATIC_BLOG_FILE
  101. echo '' >> $STATIC_BLOG_FILE
  102. echo 'regenerate:' >> $STATIC_BLOG_FILE
  103. echo -e '\t$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  104. echo '' >> $STATIC_BLOG_FILE
  105. echo 'serve:' >> $STATIC_BLOG_FILE
  106. echo 'ifdef PORT' >> $STATIC_BLOG_FILE
  107. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)' >> $STATIC_BLOG_FILE
  108. echo 'else' >> $STATIC_BLOG_FILE
  109. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server' >> $STATIC_BLOG_FILE
  110. echo 'endif' >> $STATIC_BLOG_FILE
  111. echo '' >> $STATIC_BLOG_FILE
  112. echo 'serve-global:' >> $STATIC_BLOG_FILE
  113. echo 'ifdef SERVER' >> $STATIC_BLOG_FILE
  114. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER)' >> $STATIC_BLOG_FILE
  115. echo 'else' >> $STATIC_BLOG_FILE
  116. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0' >> $STATIC_BLOG_FILE
  117. echo 'endif' >> $STATIC_BLOG_FILE
  118. echo '' >> $STATIC_BLOG_FILE
  119. echo 'devserver:' >> $STATIC_BLOG_FILE
  120. echo 'ifdef PORT' >> $STATIC_BLOG_FILE
  121. echo -e '\t$(BASEDIR)/develop_server.sh restart $(PORT)' >> $STATIC_BLOG_FILE
  122. echo 'else' >> $STATIC_BLOG_FILE
  123. echo -e '\t$(BASEDIR)/develop_server.sh restart' >> $STATIC_BLOG_FILE
  124. echo 'endif' >> $STATIC_BLOG_FILE
  125. echo '' >> $STATIC_BLOG_FILE
  126. echo 'stopserver:' >> $STATIC_BLOG_FILE
  127. echo -e '\t$(BASEDIR)/develop_server.sh stop' >> $STATIC_BLOG_FILE
  128. echo -e '\t@echo "Stopped Pelican and SimpleHTTPServer processes running in background."' >> $STATIC_BLOG_FILE
  129. echo '' >> $STATIC_BLOG_FILE
  130. echo 'publish:' >> $STATIC_BLOG_FILE
  131. echo -e '\t$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  132. echo '' >> $STATIC_BLOG_FILE
  133. echo '.PHONY: html clean regenerate serve serve-global devserver publish' >> $STATIC_BLOG_FILE
  134. }
  135. function create_pelican_publish_conf {
  136. STATIC_BLOG_FILE=$1
  137. echo '#!/usr/bin/env python' > $STATIC_BLOG_FILE
  138. echo '# -*- coding: utf-8 -*- #' >> $STATIC_BLOG_FILE
  139. echo 'from __future__ import unicode_literals' >> $STATIC_BLOG_FILE
  140. echo '' >> $STATIC_BLOG_FILE
  141. echo 'import os' >> $STATIC_BLOG_FILE
  142. echo 'import sys' >> $STATIC_BLOG_FILE
  143. echo 'sys.path.append(os.curdir)' >> $STATIC_BLOG_FILE
  144. echo 'from pelicanconf import *' >> $STATIC_BLOG_FILE
  145. echo '' >> $STATIC_BLOG_FILE
  146. echo "SITEURL = ''" >> $STATIC_BLOG_FILE
  147. echo 'RELATIVE_URLS = True' >> $STATIC_BLOG_FILE
  148. echo '' >> $STATIC_BLOG_FILE
  149. echo "FEED_ALL_ATOM = 'feeds/all.atom.xml'" >> $STATIC_BLOG_FILE
  150. echo "CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'" >> $STATIC_BLOG_FILE
  151. echo '' >> $STATIC_BLOG_FILE
  152. echo 'DELETE_OUTPUT_DIRECTORY = True' >> $STATIC_BLOG_FILE
  153. }
  154. function mesh_install_blogstatic {
  155. if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "usb" ]]; then
  156. return
  157. fi
  158. chroot "$rootdir" apt-get -y install python-pip
  159. chroot "$rootdir" pip install ipython
  160. chroot "$rootdir" pip install Markdown
  161. chroot "$rootdir" pip install typogrify
  162. chroot "$rootdir" pip install pelican
  163. STATIC_BLOG_INSTALL_DIR=/home/$MY_USERNAME/CreateBlog
  164. STATIC_BLOG_PATH=/home/$MY_USERNAME/Public/Blog
  165. if [ ! -d $rootdir$STATIC_BLOG_INSTALL_DIR ]; then
  166. mkdir -p $rootdir$STATIC_BLOG_INSTALL_DIR
  167. fi
  168. if [ ! -d $rootdir$STATIC_BLOG_PATH ]; then
  169. mkdir -p $rootdir$STATIC_BLOG_PATH
  170. fi
  171. if [ ! -d $rootdir$STATIC_BLOG_INSTALL_DIR/content ]; then
  172. mkdir -p $rootdir$STATIC_BLOG_INSTALL_DIR/content
  173. fi
  174. create_pelican_conf $rootdir$STATIC_BLOG_INSTALL_DIR/pelicanconf.py
  175. create_pelican_makefile $rootdir$STATIC_BLOG_INSTALL_DIR/Makefile
  176. create_pelican_publish_conf $rootdir$STATIC_BLOG_INSTALL_DIR/publishconf.py
  177. git clone --recursive $PELICAN_THEMES_REPO $rootdir$STATIC_BLOG_INSTALL_DIR/themes
  178. git clone --recursive $PELICAN_PLUGINS_REPO $rootdir$STATIC_BLOG_INSTALL_DIR/plugins
  179. chroot "$rootdir" chown -R $MY_USERNAME:$MY_USERNAME $STATIC_BLOG_INSTALL_DIR
  180. chroot "$rootdir" chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Public
  181. }
  182. function install_blogstatic {
  183. if [ $INSTALLING_MESH ]; then
  184. mesh_install_blogstatic
  185. return
  186. fi
  187. if grep -Fxq "install_blogstatic" $COMPLETION_FILE; then
  188. return
  189. fi
  190. apt-get -y install python-pip
  191. pip install ipython
  192. pip install Markdown
  193. pip install typogrify
  194. pip install pelican
  195. STATIC_BLOG_INSTALL_DIR=/etc/blog
  196. STATIC_BLOG_PATH=/var/www/$STATIC_BLOG_DOMAIN/htdocs
  197. if [ ! -d $STATIC_BLOG_INSTALL_DIR ]; then
  198. mkdir -p $STATIC_BLOG_INSTALL_DIR
  199. fi
  200. if [ ! -d $STATIC_BLOG_PATH ]; then
  201. mkdir -p $STATIC_BLOG_PATH
  202. fi
  203. if [ ! -d $STATIC_BLOG_INSTALL_DIR/content ]; then
  204. mkdir -p $STATIC_BLOG_INSTALL_DIR/content
  205. fi
  206. create_pelican_conf $STATIC_BLOG_INSTALL_DIR/pelicanconf.py
  207. create_pelican_makefile $STATIC_BLOG_INSTALL_DIR/Makefile
  208. create_pelican_publish_conf $STATIC_BLOG_INSTALL_DIR/publishconf.py
  209. git clone --recursive $PELICAN_THEMES_REPO $STATIC_BLOG_INSTALL_DIR/themes
  210. git clone --recursive $PELICAN_PLUGINS_REPO $STATIC_BLOG_INSTALL_DIR/plugins
  211. chown -R $MY_USERNAME:$MY_USERNAME $STATIC_BLOG_INSTALL_DIR
  212. chown -R www-data:www-data $STATIC_BLOG_PATH
  213. echo 'install_blogstatic' >> $COMPLETION_FILE
  214. }
  215. # NOTE: deliberately no exit 0