freedombone-app-pelican 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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@freedombone.net>
  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=''
  31. IN_DEFAULT_INSTALL=0
  32. SHOW_ON_ABOUT=0
  33. STATIC_BLOG_INSTALL_DIR=/etc/staticblog
  34. PELICAN_THEMES_REPO="https://github.com/getpelican/pelican-themes"
  35. PELICAN_PLUGINS_REPO="https://github.com/getpelican/pelican-plugins"
  36. DEFAULT_BLOG_TITLE=$"Freedombone Blog"
  37. pelican_variables=(MY_USERNAME
  38. STATIC_BLOG_DOMAIN)
  39. function configure_interactive_pelican {
  40. echo -n ''
  41. }
  42. function install_interactive_pelican {
  43. echo -n ''
  44. APP_INSTALLED=1
  45. }
  46. function reconfigure_pelican {
  47. echo -n ''
  48. }
  49. function upgrade_pelican {
  50. echo -n ''
  51. }
  52. function backup_local_pelican {
  53. echo -n ''
  54. }
  55. function restore_local_pelican {
  56. echo -n ''
  57. }
  58. function backup_remote_pelican {
  59. echo -n ''
  60. }
  61. function restore_remote_pelican {
  62. echo -n ''
  63. }
  64. function remove_pelican {
  65. if [ -d /var/www/$STATIC_BLOG_DOMAIN/htdocs ]; then
  66. rm -rf /var/www/$STATIC_BLOG_DOMAIN/htdocs
  67. fi
  68. pip uninstall pelican
  69. remove_certs $STATIC_BLOG_DOMAIN
  70. }
  71. function create_pelican_conf {
  72. STATIC_BLOG_FILE=$1
  73. echo '#!/usr/bin/env python' > $STATIC_BLOG_FILE
  74. echo '# -*- coding: utf-8 -*- #' >> $STATIC_BLOG_FILE
  75. echo 'from __future__ import unicode_literals' >> $STATIC_BLOG_FILE
  76. echo '' >> $STATIC_BLOG_FILE
  77. echo "AUTHOR=u\"$MY_USERNAME\"" >> $STATIC_BLOG_FILE
  78. echo "SITENAME=u'$DEFAULT_BLOG_TITLE'" >> $STATIC_BLOG_FILE
  79. echo "SITEURL=''" >> $STATIC_BLOG_FILE
  80. echo "PATH='content'" >> $STATIC_BLOG_FILE
  81. echo 'TIMEZONE=u"Europe/London"' >> $STATIC_BLOG_FILE
  82. echo "DEFAULT_LANG=u'en'" >> $STATIC_BLOG_FILE
  83. echo '' >> $STATIC_BLOG_FILE
  84. echo 'FEED_ALL_ATOM=None' >> $STATIC_BLOG_FILE
  85. echo 'CATEGORY_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  86. echo 'TRANSLATION_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  87. echo 'AUTHOR_FEED_ATOM=None' >> $STATIC_BLOG_FILE
  88. echo 'AUTHOR_FEED_RSS=None' >> $STATIC_BLOG_FILE
  89. echo '' >> $STATIC_BLOG_FILE
  90. echo 'DEFAULT_PAGINATION=False' >> $STATIC_BLOG_FILE
  91. echo 'RELATIVE_URLS=True' >> $STATIC_BLOG_FILE
  92. echo "THEME='themes/nice-blog'" >> $STATIC_BLOG_FILE
  93. }
  94. function create_pelican_makefile {
  95. STATIC_BLOG_FILE=$1
  96. echo 'PY?=python' > $STATIC_BLOG_FILE
  97. echo 'PELICAN?=pelican' >> $STATIC_BLOG_FILE
  98. echo 'PELICANOPTS=' >> $STATIC_BLOG_FILE
  99. echo '' >> $STATIC_BLOG_FILE
  100. echo 'BASEDIR=$(CURDIR)' >> $STATIC_BLOG_FILE
  101. echo 'INPUTDIR=$(BASEDIR)/content' >> $STATIC_BLOG_FILE
  102. echo "OUTPUTDIR=$STATIC_BLOG_PATH" >> $STATIC_BLOG_FILE
  103. echo 'CONFFILE=$(BASEDIR)/pelicanconf.py' >> $STATIC_BLOG_FILE
  104. echo 'PUBLISHCONF=$(BASEDIR)/publishconf.py' >> $STATIC_BLOG_FILE
  105. echo '' >> $STATIC_BLOG_FILE
  106. echo 'DEBUG ?= 0' >> $STATIC_BLOG_FILE
  107. echo 'ifeq ($(DEBUG), 1)' >> $STATIC_BLOG_FILE
  108. echo -e '\tPELICANOPTS += -D' >> $STATIC_BLOG_FILE
  109. echo 'endif' >> $STATIC_BLOG_FILE
  110. echo '' >> $STATIC_BLOG_FILE
  111. echo 'RELATIVE ?= 0' >> $STATIC_BLOG_FILE
  112. echo 'ifeq ($(RELATIVE), 1)' >> $STATIC_BLOG_FILE
  113. echo -e '\tPELICANOPTS += --relative-urls' >> $STATIC_BLOG_FILE
  114. echo 'endif' >> $STATIC_BLOG_FILE
  115. echo '' >> $STATIC_BLOG_FILE
  116. echo 'html:' >> $STATIC_BLOG_FILE
  117. echo -e '\t$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  118. echo '' >> $STATIC_BLOG_FILE
  119. echo 'clean:' >> $STATIC_BLOG_FILE
  120. echo -e '\t[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)' >> $STATIC_BLOG_FILE
  121. echo '' >> $STATIC_BLOG_FILE
  122. echo 'regenerate:' >> $STATIC_BLOG_FILE
  123. echo -e '\t$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  124. echo '' >> $STATIC_BLOG_FILE
  125. echo 'serve:' >> $STATIC_BLOG_FILE
  126. echo 'ifdef PORT' >> $STATIC_BLOG_FILE
  127. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)' >> $STATIC_BLOG_FILE
  128. echo 'else' >> $STATIC_BLOG_FILE
  129. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server' >> $STATIC_BLOG_FILE
  130. echo 'endif' >> $STATIC_BLOG_FILE
  131. echo '' >> $STATIC_BLOG_FILE
  132. echo 'serve-global:' >> $STATIC_BLOG_FILE
  133. echo 'ifdef SERVER' >> $STATIC_BLOG_FILE
  134. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER)' >> $STATIC_BLOG_FILE
  135. echo 'else' >> $STATIC_BLOG_FILE
  136. echo -e '\tcd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0' >> $STATIC_BLOG_FILE
  137. echo 'endif' >> $STATIC_BLOG_FILE
  138. echo '' >> $STATIC_BLOG_FILE
  139. echo 'devserver:' >> $STATIC_BLOG_FILE
  140. echo 'ifdef PORT' >> $STATIC_BLOG_FILE
  141. echo -e '\t$(BASEDIR)/develop_server.sh restart $(PORT)' >> $STATIC_BLOG_FILE
  142. echo 'else' >> $STATIC_BLOG_FILE
  143. echo -e '\t$(BASEDIR)/develop_server.sh restart' >> $STATIC_BLOG_FILE
  144. echo 'endif' >> $STATIC_BLOG_FILE
  145. echo '' >> $STATIC_BLOG_FILE
  146. echo 'stopserver:' >> $STATIC_BLOG_FILE
  147. echo -e '\t$(BASEDIR)/develop_server.sh stop' >> $STATIC_BLOG_FILE
  148. echo -e '\t@echo "Stopped Pelican and SimpleHTTPServer processes running in background."' >> $STATIC_BLOG_FILE
  149. echo '' >> $STATIC_BLOG_FILE
  150. echo 'publish:' >> $STATIC_BLOG_FILE
  151. echo -e '\t$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)' >> $STATIC_BLOG_FILE
  152. echo '' >> $STATIC_BLOG_FILE
  153. echo '.PHONY: html clean regenerate serve serve-global devserver publish' >> $STATIC_BLOG_FILE
  154. }
  155. function create_pelican_publish_conf {
  156. STATIC_BLOG_FILE=$1
  157. echo '#!/usr/bin/env python' > $STATIC_BLOG_FILE
  158. echo '# -*- coding: utf-8 -*- #' >> $STATIC_BLOG_FILE
  159. echo 'from __future__ import unicode_literals' >> $STATIC_BLOG_FILE
  160. echo '' >> $STATIC_BLOG_FILE
  161. echo 'import os' >> $STATIC_BLOG_FILE
  162. echo 'import sys' >> $STATIC_BLOG_FILE
  163. echo 'sys.path.append(os.curdir)' >> $STATIC_BLOG_FILE
  164. echo 'from pelicanconf import *' >> $STATIC_BLOG_FILE
  165. echo '' >> $STATIC_BLOG_FILE
  166. echo "SITEURL = ''" >> $STATIC_BLOG_FILE
  167. echo 'RELATIVE_URLS = True' >> $STATIC_BLOG_FILE
  168. echo '' >> $STATIC_BLOG_FILE
  169. echo "FEED_ALL_ATOM = 'feeds/all.atom.xml'" >> $STATIC_BLOG_FILE
  170. echo "CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'" >> $STATIC_BLOG_FILE
  171. echo '' >> $STATIC_BLOG_FILE
  172. echo 'DELETE_OUTPUT_DIRECTORY = True' >> $STATIC_BLOG_FILE
  173. }
  174. function pelican_themes {
  175. # Clone themes separately because the themes repo sometimes has bad refs
  176. git clone https://github.com/KenMercusLai/BT3-Flat
  177. git clone https://github.com/abr4xas/Casper2Pelican
  178. git clone https://github.com/alexandrevicenzi/Flex
  179. git clone https://github.com/allenskd/Nuja
  180. git clone https://github.com/ir193/Responsive-Pelican
  181. git clone https://github.com/nairobilug/pelican-alchemy
  182. git clone https://github.com/livibetter-backup/apricot
  183. git clone https://github.com/jody-frankowski/blue-penguin
  184. git clone https://github.com/gregseth/pelican-bgh
  185. git clone https://github.com/blueicefield/pelican-blueidea
  186. git clone https://github.com/demianbrecht/pelican-bold
  187. git clone https://github.com/fly/burrito
  188. git clone https://github.com/yuex/pelican-iliork
  189. git clone https://github.com/tbunnyman/pelican-chunk
  190. git clone https://github.com/hdra/Pelican-Cid
  191. git clone https://github.com/gilsondev/pelican-clean-blog
  192. git clone https://github.com/porterjamesj/crowsfoot
  193. git clone https://github.com/22decembre/dev-random3.git
  194. git clone https://github.com/kura/eevee
  195. git clone https://github.com/talha131/pelican-elegant.git
  196. git clone https://github.com/callmefish/pelican-free-agent
  197. git clone https://github.com/jsliang/pelican-fresh
  198. git clone https://github.com/vaiski/genus
  199. git clone https://github.com/PierrePaul/html5-dopetrope
  200. git clone https://github.com/jvanz/pelican-hyde
  201. git clone https://github.com/erfaan/pelican-theme-irfan
  202. git clone https://github.com/slok/iris
  203. git clone https://github.com/badele/pelican-theme-jesuislibre
  204. git clone https://github.com/mothsART/pelican-lab
  205. git clone https://github.com/siovene/lannisport
  206. git clone https://github.com/lazycoder-ru/lazystrap
  207. git clone https://github.com/chdoig/pelican-bootstrap3-lovers
  208. git clone https://github.com/kplaube/maggner-pelican
  209. git clone https://github.com/cpaulik/martin-pelican
  210. git clone https://github.com/greizgh/pelican-material
  211. git clone https://github.com/eswarm/materialistic-pelican
  212. git clone https://github.com/cprieto/pelican-mediumfox
  213. git clone https://github.com/onuraslan/medius
  214. git clone https://github.com/lucachr/pelican-mg
  215. git clone https://github.com/BYK/pelican-neat
  216. git clone https://github.com/molivier/nest
  217. git clone https://github.com/guilherme-toti/nice-blog
  218. git clone https://github.com/gunchu/nikhil-theme
  219. git clone https://github.com/wilbur-ma/niu-x2
  220. git clone https://github.com/duilio/pelican-octopress-theme
  221. git clone https://github.com/Parbhat/pelican-blue
  222. git clone https://github.com/hdra/pelican-cait
  223. git clone https://github.com/laughk/pelican-hss
  224. git clone https://github.com/wrl/pelican-mockingbird
  225. git clone https://github.com/fle/pelican-simplegrey
  226. git clone https://github.com/fle/pelican-sober
  227. git clone https://github.com/ingwinlu/pelican-twitchy
  228. git clone https://github.com/badele/pelicanthemes-generator
  229. git clone https://github.com/jjimenezlopez/pelipress
  230. git clone https://github.com/xm3ron/pjport
  231. git clone https://github.com/kdeldycke/plumage
  232. git clone https://github.com/habibillah/pujangga
  233. git clone https://github.com/danclaudiupop/pure
  234. git clone https://github.com/wamonite/relapse
  235. git clone https://github.com/ellisonleao/pelican-semantic-ui
  236. git clone https://github.com/kdheepak89/pelican-smoothie
  237. git clone https://github.com/if1live/pelican-sora
  238. git clone https://github.com/redVi/storm
  239. git clone https://github.com/keningle/pelican-sundown
  240. git clone https://github.com/giulivo/pelican-svbhack
  241. git clone https://github.com/wting/pelican-svbtle
  242. git clone https://github.com/frankV/twenty-pelican-html5up
  243. git clone https://github.com/robulouski/voidy-bootstrap
  244. git clone https://github.com/samael500/w3-personal-blog
  245. git clone https://github.com/jarv/water-iris
  246. git clone https://github.com/kplaube/yapeme
  247. }
  248. function mesh_install_pelican {
  249. if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" && $VARIANT != "usb" ]]; then
  250. return
  251. fi
  252. chroot "$rootdir" apt-get -yq install python-pip
  253. chroot "$rootdir" pip install ipython
  254. chroot "$rootdir" pip install Markdown
  255. chroot "$rootdir" pip install typogrify
  256. chroot "$rootdir" pip install pelican
  257. STATIC_BLOG_INSTALL_DIR=/home/$MY_USERNAME/CreateBlog
  258. STATIC_BLOG_PATH=/home/$MY_USERNAME/Public/Blog
  259. if [ ! -d $rootdir$STATIC_BLOG_INSTALL_DIR ]; then
  260. mkdir -p $rootdir$STATIC_BLOG_INSTALL_DIR
  261. fi
  262. if [ ! -d $rootdir$STATIC_BLOG_PATH ]; then
  263. mkdir -p $rootdir$STATIC_BLOG_PATH
  264. fi
  265. if [ ! -d $rootdir$STATIC_BLOG_INSTALL_DIR/content/images ]; then
  266. mkdir -p $rootdir$STATIC_BLOG_INSTALL_DIR/content/images
  267. fi
  268. create_pelican_conf $rootdir$STATIC_BLOG_INSTALL_DIR/pelicanconf.py
  269. create_pelican_makefile $rootdir$STATIC_BLOG_INSTALL_DIR/Makefile
  270. create_pelican_publish_conf $rootdir$STATIC_BLOG_INSTALL_DIR/publishconf.py
  271. mkdir -p $rootdir$STATIC_BLOG_INSTALL_DIR/themes
  272. cd $rootdir$STATIC_BLOG_INSTALL_DIR/themes
  273. pelican_themes
  274. #git clone --recursive $PELICAN_PLUGINS_REPO $rootdir$STATIC_BLOG_INSTALL_DIR/plugins
  275. chroot "$rootdir" chown -R $MY_USERNAME:$MY_USERNAME $STATIC_BLOG_INSTALL_DIR
  276. chroot "$rootdir" chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Public
  277. }
  278. function install_pelican {
  279. if [ $INSTALLING_MESH ]; then
  280. mesh_install_pelican
  281. return
  282. fi
  283. apt-get -yq install python-pip
  284. pip install ipython
  285. pip install Markdown
  286. pip install typogrify
  287. pip install pelican
  288. STATIC_BLOG_INSTALL_DIR=/etc/blog
  289. STATIC_BLOG_PATH=/var/www/$STATIC_BLOG_DOMAIN/htdocs
  290. if [ ! -d $STATIC_BLOG_INSTALL_DIR ]; then
  291. mkdir -p $STATIC_BLOG_INSTALL_DIR
  292. fi
  293. if [ ! -d $STATIC_BLOG_PATH ]; then
  294. mkdir -p $STATIC_BLOG_PATH
  295. fi
  296. if [ ! -d $STATIC_BLOG_INSTALL_DIR/content ]; then
  297. mkdir -p $STATIC_BLOG_INSTALL_DIR/content
  298. fi
  299. create_pelican_conf $STATIC_BLOG_INSTALL_DIR/pelicanconf.py
  300. create_pelican_makefile $STATIC_BLOG_INSTALL_DIR/Makefile
  301. create_pelican_publish_conf $STATIC_BLOG_INSTALL_DIR/publishconf.py
  302. mkdir -p $PELICAN_THEMES_REPO $STATIC_BLOG_INSTALL_DIR/themes
  303. cd $PELICAN_THEMES_REPO $STATIC_BLOG_INSTALL_DIR/themes
  304. pelican_themes
  305. #git clone --recursive $PELICAN_PLUGINS_REPO $STATIC_BLOG_INSTALL_DIR/plugins
  306. chown -R $MY_USERNAME:$MY_USERNAME $STATIC_BLOG_INSTALL_DIR
  307. chown -R www-data:www-data $STATIC_BLOG_PATH
  308. APP_INSTALLED=1
  309. }
  310. # NOTE: deliberately no exit 0