install-freedombone.sh 169KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289
  1. #!/bin/bash
  2. # Freedombone install script intended for use with Debian Jessie
  3. #
  4. # Note on dynamic dns
  5. # ===================
  6. #
  7. # I'm not particularly trying to promote freedns.afraid.org
  8. # as a service, it just happens to be a dynamic DNS system which
  9. # provides free (as in beer) accounts, and I'm trying to make the
  10. # process of setting up a working server as trivial as possible.
  11. # Other dynamic DNS systems are available, and if you're using
  12. # something different then comment out the section within
  13. # argument_checks and the call to dynamic_dns_freedns.
  14. #
  15. # Prerequisites
  16. # =============
  17. #
  18. # cd ~/
  19. # wget http://freedombone.uk.to/debian-jessie-console-armhf-2014-08-13.tar.xz
  20. #
  21. # Verify it.
  22. #
  23. # sha256sum debian-jessie-console-armhf-2014-08-13.tar.xz
  24. # fc225cfb3c2dfad92cccafa97e92c3cd3db9d94f4771af8da364ef59609f43de
  25. #
  26. # Uncompress it.
  27. #
  28. # tar xJf debian-jessie-console-armhf-2014-08-13.tar.xz
  29. # cd debian-jessie-console-armhf-2014-08-13
  30. #
  31. # sudo apt-get install u-boot-tools dosfstools git-core kpartx wget parted
  32. # sudo ./setup_sdcard.sh --mmc /dev/sdX --dtb beaglebone
  33. #
  34. # When finished eject the micrtoSD then reinsert it
  35. #
  36. # sudo cp /media/$USER/BOOT/bbb-uEnv.txt /media/$USER/BOOT/uEnv.txt
  37. # sync
  38. #
  39. # Eject microSD, insert into BBB, attach USB cable between BBB and laptop.
  40. # On Ubuntu wait until you see the "connected" message.
  41. #
  42. # ssh-keygen -f "/home/$USER/.ssh/known_hosts" -R 192.168.7.2
  43. # ssh debian@192.168.7.2 (password "temppwd")
  44. # su (password "root")
  45. # passwd
  46. # adduser $MY_USERNAME
  47. # sed -i '/iface eth0 inet dhcp/a\iface eth0 inet static' /etc/network/interfaces
  48. # sed -i '/iface eth0 inet static/a\ dns-nameservers 213.73.91.35 85.214.20.141' /etc/network/interfaces
  49. # sed -i "/iface eth0 inet static/a\ gateway $MY_ROUTER_IP" /etc/network/interfaces
  50. # sed -i '/iface eth0 inet static/a\ netmask 255.255.255.0' /etc/network/interfaces
  51. # sed -i "/iface eth0 inet static/a\ address $MY_BBB_STATIC_IP" /etc/network/interfaces
  52. # sed -i '/iface usb0 inet static/,/ gateway 192.168.7.1/ s/^/#/' /etc/network/interfaces
  53. # shutdown now
  54. #
  55. # Connect BBB to router
  56. #
  57. # scp install-freedombone.sh $MY_USERNAME@$MY_BBB_STATIC_IP:/home/$MY_USERNAME
  58. # ssh $MY_USERNAME@$MY_BBB_STATIC_IP
  59. # su
  60. # ./install-freedombone.sh [DOMAIN_NAME] [MY_USERNAME]
  61. DOMAIN_NAME=$1
  62. MY_USERNAME=$2
  63. FREEDNS_SUBDOMAIN_CODE=$3
  64. SYSTEM_TYPE=$4
  65. # Different system variants which may be specified within
  66. # the SYSTEM_TYPE option
  67. VARIANT_WRITER="writer"
  68. VARIANT_CLOUD="cloud"
  69. VARIANT_CHAT="chat"
  70. VARIANT_MAILBOX="mailbox"
  71. VARIANT_NONMAILBOX="nonmailbox"
  72. VARIANT_SOCIAL="social"
  73. VARIANT_MEDIA="media"
  74. SSH_PORT=2222
  75. KERNEL_VERSION="v3.15.10-bone7"
  76. USE_HWRNG="yes"
  77. INSTALLED_WITHIN_DOCKER="no"
  78. # If you want to run an encrypted mailing list specify its name here.
  79. # There should be no spaces in the name
  80. PRIVATE_MAILING_LIST=
  81. # Domain name or freedns subdomain for mediagoblin installation
  82. MEDIAGOBLIN_DOMAIN_NAME=
  83. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=
  84. MEDIAGOBLIN_REPO=""
  85. MEDIAGOBLIN_ADMIN_PASSWORD=
  86. # Domain name or freedns subdomain for microblog installation
  87. MICROBLOG_DOMAIN_NAME=
  88. MICROBLOG_FREEDNS_SUBDOMAIN_CODE=
  89. MICROBLOG_REPO="git://gitorious.org/social/mainline.git"
  90. MICROBLOG_ADMIN_PASSWORD=
  91. # Domain name or redmatrix installation
  92. REDMATRIX_DOMAIN_NAME=
  93. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=
  94. REDMATRIX_REPO="https://github.com/friendica/red.git"
  95. REDMATRIX_ADDONS_REPO="https://github.com/friendica/red-addons.git"
  96. REDMATRIX_ADMIN_PASSWORD=
  97. # Domain name or freedns subdomain for Owncloud installation
  98. OWNCLOUD_DOMAIN_NAME=
  99. # Freedns dynamic dns code for owncloud
  100. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=
  101. OWNCLOUD_ARCHIVE="owncloud-7.0.2.tar.bz2"
  102. OWNCLOUD_DOWNLOAD="https://download.owncloud.org/community/$OWNCLOUD_ARCHIVE"
  103. OWNCLOUD_HASH="ea07124a1b9632aa5227240d655e4d84967fb6dd49e4a16d3207d6179d031a3a"
  104. # Domain name or freedns subdomain for your wiki
  105. WIKI_FREEDNS_SUBDOMAIN_CODE=
  106. WIKI_DOMAIN_NAME=
  107. WIKI_ARCHIVE="dokuwiki-stable.tgz"
  108. WIKI_DOWNLOAD="http://download.dokuwiki.org/src/dokuwiki/$WIKI_ARCHIVE"
  109. WIKI_HASH="a0e79986b87b2744421ce3c33b43a21f296deadd81b1789c25fa4bb095e8e470"
  110. # see https://www.dokuwiki.org/template:mnml-blog
  111. # https://andreashaerter.com/tmp/downloads/dokuwiki-template-mnml-blog/CHECKSUMS.asc
  112. WIKI_MNML_BLOG_ADDON_ARCHIVE="mnml-blog.tar.gz"
  113. WIKI_MNML_BLOG_ADDON="https://andreashaerter.com/downloads/dokuwiki-template-mnml-blog/latest"
  114. WIKI_MNML_BLOG_ADDON_HASH="428c280d09ee14326fef5cd6f6772ecfcd532f7b6779cd992ff79a97381cf39f"
  115. # see https://www.dokuwiki.org/plugin:blogtng
  116. WIKI_BLOGTNG_ADDON_NAME="dokufreaks-plugin-blogtng-93a3fec"
  117. WIKI_BLOGTNG_ADDON_ARCHIVE="$WIKI_BLOGTNG_ADDON_NAME.zip"
  118. WIKI_BLOGTNG_ADDON="https://github.com/dokufreaks/plugin-blogtng/zipball/master"
  119. WIKI_BLOGTNG_ADDON_HASH="212b3ad918fdc92b2d49ef5d36bc9e086eab27532931ba6b87e05f35fd402a27"
  120. # see https://www.dokuwiki.org/plugin:sqlite
  121. WIKI_SQLITE_ADDON_NAME="cosmocode-sqlite-7be4003"
  122. WIKI_SQLITE_ADDON_ARCHIVE="$WIKI_SQLITE_ADDON_NAME.tar.gz"
  123. WIKI_SQLITE_ADDON="https://github.com/cosmocode/sqlite/tarball/master"
  124. WIKI_SQLITE_ADDON_HASH="930335e647c7e62f3068689c256ee169fad2426b64f8360685d391ecb5eeda0c"
  125. GPG_KEYSERVER="hkp://keys.gnupg.net"
  126. # optionally you can provide your exported GPG key pair here
  127. # Note that the private key file will be deleted after use
  128. # If these are unspecified then a new GPG key will be created
  129. MY_GPG_PUBLIC_KEY=
  130. MY_GPG_PRIVATE_KEY=
  131. # If you have existing mail within a Maildir
  132. # you can specify the directory here and the files
  133. # will be imported
  134. IMPORT_MAILDIR=
  135. # The Debian package repository to use.
  136. DEBIAN_REPO="ftp.de.debian.org"
  137. DEBIAN_VERSION="jessie"
  138. # Directory where source code is downloaded and compiled
  139. INSTALL_DIR=$HOME/build
  140. # device name for an attached usb drive
  141. USB_DRIVE=/dev/sda1
  142. # Location where the USB drive is mounted to
  143. USB_MOUNT=/media/usb
  144. # Name of a script used to create a backup of the system on usb drive
  145. BACKUP_SCRIPT_NAME="backup"
  146. # Name of a script used to restore the system from usb drive
  147. RESTORE_SCRIPT_NAME="restore"
  148. # memory limit for php in MB
  149. MAX_PHP_MEMORY=32
  150. # default MariaDB password
  151. MARIADB_PASSWORD=
  152. # Whether to encrypt backups to the USB drive
  153. ENCRYPT_BACKUPS="yes"
  154. #list of encryption protocols
  155. SSL_PROTOCOLS="TLSv1 TLSv1.1 TLSv1.2"
  156. # list of ciphers to use
  157. SSL_CIPHERS="EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA"
  158. export DEBIAN_FRONTEND=noninteractive
  159. # File which keeps track of what has already been installed
  160. COMPLETION_FILE=$HOME/freedombone-completed.txt
  161. if [ ! -f $COMPLETION_FILE ]; then
  162. touch $COMPLETION_FILE
  163. fi
  164. function show_help {
  165. echo ''
  166. echo './install-freedombone.sh [domain] [username] [subdomain code] [system type]'
  167. echo ''
  168. echo 'domain'
  169. echo '------'
  170. echo 'This is your domain name or freedns subdomain.'
  171. echo ''
  172. echo 'username'
  173. echo '--------'
  174. echo ''
  175. echo 'This will be your username on the system. It should be all'
  176. echo 'lower case and contain no spaces'
  177. echo ''
  178. echo 'subdomain code'
  179. echo '--------------'
  180. echo 'This is the freedns dynamic DNS code for your subdomain.'
  181. echo "To find it from https://freedns.afraid.org select 'Dynamic DNS',"
  182. echo "then 'quick cron example' and copy the code located between "
  183. echo "'?' and '=='."
  184. echo ''
  185. echo 'system type'
  186. echo '-----------'
  187. echo 'This can either be blank if you wish to install the full system,'
  188. echo "or for more specialised variants you can specify '$VARIANT_MAILBOX', '$VARIANT_CLOUD',"
  189. echo "'$VARIANT_CHAT', '$VARIANT_SOCIAL', '$VARIANT_MEDIA' or '$VARIANT_WRITER'."
  190. echo "If you wish to install everything except email then use the '$VARIANT_NONMAILBOX' variaint."
  191. }
  192. function argument_checks {
  193. if [ ! -d /home/$MY_USERNAME ]; then
  194. echo "There is no user '$MY_USERNAME' on the system. Use 'adduser $MY_USERNAME' to create the user."
  195. exit 1
  196. fi
  197. if [ ! $DOMAIN_NAME ]; then
  198. show_help
  199. exit 2
  200. fi
  201. if [ ! $MY_USERNAME ]; then
  202. show_help
  203. exit 3
  204. fi
  205. if [ ! $FREEDNS_SUBDOMAIN_CODE ]; then
  206. show_help
  207. exit 4
  208. fi
  209. if [ $SYSTEM_TYPE ]; then
  210. if [[ $SYSTEM_TYPE != $VARIANT_WRITER && $SYSTEM_TYPE != $VARIANT_CLOUD && $SYSTEM_TYPE != $VARIANT_CHAT && $SYSTEM_TYPE != $VARIANT_MAILBOX && $SYSTEM_TYPE != $VARIANT_NONMAILBOX && $SYSTEM_TYPE != $VARIANT_SOCIAL && $SYSTEM_TYPE != $VARIANT_MEDIA ]]; then
  211. echo "'$SYSTEM_TYPE' is an unrecognised Freedombone variant."
  212. exit 30
  213. fi
  214. fi
  215. }
  216. function change_login_message {
  217. if grep -Fxq "change_login_message" $COMPLETION_FILE; then
  218. return
  219. fi
  220. echo '' > /etc/motd
  221. echo ".---. . . " >> /etc/motd
  222. echo "| | | " >> /etc/motd
  223. echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. " >> /etc/motd
  224. echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' " >> /etc/motd
  225. echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" >> /etc/motd
  226. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  227. echo ' . . . ' >> /etc/motd
  228. echo ' |\ /| | o ' >> /etc/motd
  229. echo " | \/ | .-. .-.| . .-. " >> /etc/motd
  230. echo " | |(.-'( | | ( ) " >> /etc/motd
  231. echo " ' ' --' -' --' - -' - " >> /etc/motd
  232. fi
  233. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  234. echo ' . . . . . ' >> /etc/motd
  235. echo ' \ \ / / o _|_ ' >> /etc/motd
  236. echo ' \ \ /.--.. | .-. .--.' >> /etc/motd
  237. echo " \/ \/ | | | (.-' | " >> /etc/motd
  238. echo " ' ' ' -' - -' --'' " >> /etc/motd
  239. fi
  240. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  241. echo ' .--.. . ' >> /etc/motd
  242. echo ' : | | ' >> /etc/motd
  243. echo ' | | .-. . . .-.| ' >> /etc/motd
  244. echo ' : |( )| |( | ' >> /etc/motd
  245. echo " --' - -' -- - -' -" >> /etc/motd
  246. fi
  247. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" ]]; then
  248. echo ' .--.. . ' >> /etc/motd
  249. echo ' : | _|_ ' >> /etc/motd
  250. echo ' | |--. .-. | ' >> /etc/motd
  251. echo ' : | |( ) | ' >> /etc/motd
  252. echo " --'' - -' - -' " >> /etc/motd
  253. fi
  254. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  255. echo ' .-. . ' >> /etc/motd
  256. echo ' ( ) o | ' >> /etc/motd
  257. echo ' -. .-. .-. . .-. | ' >> /etc/motd
  258. echo ' ( )( )( | ( ) | ' >> /etc/motd
  259. echo " -' -' -'-' - -' - - " >> /etc/motd
  260. fi
  261. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  262. echo ' . . . . ' >> /etc/motd
  263. echo ' |\ /| o | | ' >> /etc/motd
  264. echo ' | \/ | .-. . | |.-. .-.-. ,- ' >> /etc/motd
  265. echo ' | |( ) | | | )( ) : ' >> /etc/motd
  266. echo ' ' ' -' --' - -' -' -'-' - ' >> /etc/motd
  267. fi
  268. echo '' >> /etc/motd
  269. echo ' Freedom in the Cloud' >> /etc/motd
  270. echo '' >> /etc/motd
  271. echo 'change_login_message' >> $COMPLETION_FILE
  272. }
  273. function search_for_attached_usb_drive {
  274. # If a USB drive is attached then search for email,
  275. # gpg, ssh keys and emacs configuration
  276. if grep -Fxq "search_for_attached_usb_drive" $COMPLETION_FILE; then
  277. return
  278. fi
  279. if [ -b $USB_DRIVE ]; then
  280. if [ ! -d $USB_MOUNT ]; then
  281. echo 'Mounting USB drive'
  282. mkdir $USB_MOUNT
  283. mount $USB_DRIVE $USB_MOUNT
  284. fi
  285. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  286. if [ -d $USB_MOUNT/Maildir ]; then
  287. echo 'Maildir found on USB drive'
  288. IMPORT_MAILDIR=$USB_MOUNT/Maildir
  289. fi
  290. if [ -d $USB_MOUNT/.gnupg ]; then
  291. echo 'Importing GPG keyring'
  292. cp -r $USB_MOUNT/.gnupg /home/$MY_USERNAME
  293. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  294. if [ -f /home/$MY_USERNAME/.gnupg/secring.gpg ]; then
  295. shred -zu $USB_MOUNT/.gnupg/secring.gpg
  296. shred -zu $USB_MOUNT/.gnupg/random_seed
  297. shred -zu $USB_MOUNT/.gnupg/trustdb.gpg
  298. rm -rf $USB_MOUNT/.gnupg
  299. else
  300. echo 'GPG files did not copy'
  301. exit 7
  302. fi
  303. fi
  304. if [ -f $USB_MOUNT/private_key.gpg ]; then
  305. echo 'GPG private key found on USB drive'
  306. MY_GPG_PRIVATE_KEY=$USB_MOUNT/private_key.gpg
  307. fi
  308. if [ -f $USB_MOUNT/public_key.gpg ]; then
  309. echo 'GPG public key found on USB drive'
  310. MY_GPG_PUBLIC_KEY=$USB_MOUNT/public_key.gpg
  311. fi
  312. fi
  313. if [ -d $USB_MOUNT/.ssh ]; then
  314. echo 'Importing ssh keys'
  315. cp -r $USB_MOUNT/.ssh /home/$MY_USERNAME
  316. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
  317. # for security delete the ssh keys from the usb drive
  318. if [ -f /home/$MY_USERNAME/.ssh/id_rsa ]; then
  319. shred -zu $USB_MOUNT/.ssh/id_rsa
  320. shred -zu $USB_MOUNT/.ssh/id_rsa.pub
  321. shred -zu $USB_MOUNT/.ssh/known_hosts
  322. rm -rf $USB_MOUNT/.ssh
  323. else
  324. echo 'ssh files did not copy'
  325. exit 8
  326. fi
  327. fi
  328. if [ -f $USB_MOUNT/.emacs ]; then
  329. echo 'Importing .emacs file'
  330. cp -f $USB_MOUNT/.emacs /home/$MY_USERNAME/.emacs
  331. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs
  332. fi
  333. if [ -d $USB_MOUNT/.emacs.d ]; then
  334. echo 'Importing .emacs.d directory'
  335. cp -r $USB_MOUNT/.emacs.d /home/$MY_USERNAME
  336. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs.d
  337. fi
  338. if [ -d $USB_MOUNT/personal ]; then
  339. echo 'Importing personal directory'
  340. cp -r $USB_MOUNT/personal /home/$MY_USERNAME
  341. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/personal
  342. fi
  343. else
  344. if [ -d $USB_MOUNT ]; then
  345. umount $USB_MOUNT
  346. rm -rf $USB_MOUNT
  347. fi
  348. echo 'No USB drive attached'
  349. fi
  350. echo 'search_for_attached_usb_drive' >> $COMPLETION_FILE
  351. }
  352. function remove_proprietary_repos {
  353. if grep -Fxq "remove_proprietary_repos" $COMPLETION_FILE; then
  354. return
  355. fi
  356. sed -i 's/ non-free//g' /etc/apt/sources.list
  357. echo 'remove_proprietary_repos' >> $COMPLETION_FILE
  358. }
  359. function change_debian_repos {
  360. if grep -Fxq "change_debian_repos" $COMPLETION_FILE; then
  361. return
  362. fi
  363. rm -rf /var/lib/apt/lists/*
  364. apt-get clean
  365. sed -i "s/ftp.us.debian.org/$DEBIAN_REPO/g" /etc/apt/sources.list
  366. # ensure that there is a security repo
  367. if ! grep -q "security" /etc/apt/sources.list; then
  368. if grep -q "jessie" /etc/apt/sources.list; then
  369. echo "deb http://security.debian.org/ jessie/updates main contrib" >> /etc/apt/sources.list
  370. echo "#deb-src http://security.debian.org/ jessie/updates main contrib" >> /etc/apt/sources.list
  371. else
  372. if grep -q "wheezy" /etc/apt/sources.list; then
  373. echo "deb http://security.debian.org/ wheezy/updates main contrib" >> /etc/apt/sources.list
  374. echo "#deb-src http://security.debian.org/ wheezy/updates main contrib" >> /etc/apt/sources.list
  375. fi
  376. fi
  377. fi
  378. apt-get update
  379. apt-get -y --force-yes install apt-transport-https
  380. echo 'change_debian_repos' >> $COMPLETION_FILE
  381. }
  382. function initial_setup {
  383. if grep -Fxq "initial_setup" $COMPLETION_FILE; then
  384. return
  385. fi
  386. apt-get -y remove --purge apache*
  387. apt-get -y dist-upgrade
  388. apt-get -y install ca-certificates emacs24
  389. echo 'initial_setup' >> $COMPLETION_FILE
  390. }
  391. function install_editor {
  392. if grep -Fxq "install_editor" $COMPLETION_FILE; then
  393. return
  394. fi
  395. update-alternatives --set editor /usr/bin/emacs24
  396. echo 'install_editor' >> $COMPLETION_FILE
  397. }
  398. function enable_backports {
  399. if grep -Fxq "enable_backports" $COMPLETION_FILE; then
  400. return
  401. fi
  402. if ! grep -Fxq "deb http://$DEBIAN_REPO/debian jessie-backports main" /etc/apt/sources.list; then
  403. echo "deb http://$DEBIAN_REPO/debian jessie-backports main" >> /etc/apt/sources.list
  404. fi
  405. echo 'enable_backports' >> $COMPLETION_FILE
  406. }
  407. function update_the_kernel {
  408. if grep -Fxq "update_the_kernel" $COMPLETION_FILE; then
  409. return
  410. fi
  411. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  412. return
  413. fi
  414. cd /opt/scripts/tools
  415. ./update_kernel.sh --kernel $KERNEL_VERSION
  416. echo 'update_the_kernel' >> $COMPLETION_FILE
  417. }
  418. function enable_zram {
  419. if grep -Fxq "enable_zram" $COMPLETION_FILE; then
  420. return
  421. fi
  422. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  423. return
  424. fi
  425. if ! grep -q "options zram num_devices=1" /etc/modprobe.d/zram.conf; then
  426. echo 'options zram num_devices=1' >> /etc/modprobe.d/zram.conf
  427. fi
  428. echo '#!/bin/bash' > /etc/init.d/zram
  429. echo '### BEGIN INIT INFO' >> /etc/init.d/zram
  430. echo '# Provides: zram' >> /etc/init.d/zram
  431. echo '# Required-Start:' >> /etc/init.d/zram
  432. echo '# Required-Stop:' >> /etc/init.d/zram
  433. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/zram
  434. echo '# Default-Stop: 0 1 6' >> /etc/init.d/zram
  435. echo '# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)' >> /etc/init.d/zram
  436. echo '# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram' >> /etc/init.d/zram
  437. echo '### END INIT INFO' >> /etc/init.d/zram
  438. echo 'start() {' >> /etc/init.d/zram
  439. echo ' # get the number of CPUs' >> /etc/init.d/zram
  440. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  441. echo ' # if something goes wrong, assume we have 1' >> /etc/init.d/zram
  442. echo ' [ "$num_cpus" != 0 ] || num_cpus=1' >> /etc/init.d/zram
  443. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  444. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  445. echo ' # get the amount of memory in the machine' >> /etc/init.d/zram
  446. echo ' mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching "[[:digit:]]+")' >> /etc/init.d/zram
  447. echo ' mem_total=$((mem_total_kb * 1024))' >> /etc/init.d/zram
  448. echo ' # load dependency modules' >> /etc/init.d/zram
  449. echo ' modprobe zram num_devices=$num_cpus' >> /etc/init.d/zram
  450. echo ' # initialize the devices' >> /etc/init.d/zram
  451. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  452. echo ' echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize' >> /etc/init.d/zram
  453. echo ' done' >> /etc/init.d/zram
  454. echo ' # Creating swap filesystems' >> /etc/init.d/zram
  455. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  456. echo ' mkswap /dev/zram$i' >> /etc/init.d/zram
  457. echo ' done' >> /etc/init.d/zram
  458. echo ' # Switch the swaps on' >> /etc/init.d/zram
  459. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  460. echo ' swapon -p 100 /dev/zram$i' >> /etc/init.d/zram
  461. echo ' done' >> /etc/init.d/zram
  462. echo '}' >> /etc/init.d/zram
  463. echo 'stop() {' >> /etc/init.d/zram
  464. echo ' # get the number of CPUs' >> /etc/init.d/zram
  465. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  466. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  467. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  468. echo ' # Switching off swap' >> /etc/init.d/zram
  469. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  470. echo ' if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then' >> /etc/init.d/zram
  471. echo ' swapoff /dev/zram$i' >> /etc/init.d/zram
  472. echo ' sleep 1' >> /etc/init.d/zram
  473. echo ' fi' >> /etc/init.d/zram
  474. echo ' done' >> /etc/init.d/zram
  475. echo ' sleep 1' >> /etc/init.d/zram
  476. echo ' rmmod zram' >> /etc/init.d/zram
  477. echo '}' >> /etc/init.d/zram
  478. echo 'case "$1" in' >> /etc/init.d/zram
  479. echo ' start)' >> /etc/init.d/zram
  480. echo ' start' >> /etc/init.d/zram
  481. echo ' ;;' >> /etc/init.d/zram
  482. echo ' stop)' >> /etc/init.d/zram
  483. echo ' stop' >> /etc/init.d/zram
  484. echo ' ;;' >> /etc/init.d/zram
  485. echo ' restart)' >> /etc/init.d/zram
  486. echo ' stop' >> /etc/init.d/zram
  487. echo ' sleep 3' >> /etc/init.d/zram
  488. echo ' start' >> /etc/init.d/zram
  489. echo ' ;;' >> /etc/init.d/zram
  490. echo ' *)' >> /etc/init.d/zram
  491. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/zram
  492. echo ' RETVAL=1' >> /etc/init.d/zram
  493. echo 'esac' >> /etc/init.d/zram
  494. echo 'exit $RETVAL' >> /etc/init.d/zram
  495. chmod +x /etc/init.d/zram
  496. update-rc.d zram defaults
  497. echo 'enable_zram' >> $COMPLETION_FILE
  498. }
  499. function random_number_generator {
  500. if grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  501. return
  502. fi
  503. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  504. # it is assumed that docker uses the random number
  505. # generator of the host system
  506. return
  507. fi
  508. if [[ $USE_HWRNG == "yes" ]]; then
  509. apt-get -y --force-yes install rng-tools
  510. sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' /etc/default/rng-tools
  511. else
  512. apt-get -y --force-yes install haveged
  513. fi
  514. echo 'random_number_generator' >> $COMPLETION_FILE
  515. }
  516. function configure_ssh {
  517. if grep -Fxq "configure_ssh" $COMPLETION_FILE; then
  518. return
  519. fi
  520. sed -i "s/Port 22/Port $SSH_PORT/g" /etc/ssh/sshd_config
  521. sed -i 's/PermitRootLogin without-password/PermitRootLogin no/g' /etc/ssh/sshd_config
  522. sed -i 's/X11Forwarding yes/X11Forwarding no/g' /etc/ssh/sshd_config
  523. sed -i 's/ServerKeyBits 1024/ServerKeyBits 4096/g' /etc/ssh/sshd_config
  524. sed -i 's/TCPKeepAlive yes/TCPKeepAlive no/g' /etc/ssh/sshd_config
  525. sed -i 's|HostKey /etc/ssh/ssh_host_dsa_key|#HostKey /etc/ssh/ssh_host_dsa_key|g' /etc/ssh/sshd_config
  526. sed -i 's|HostKey /etc/ssh/ssh_host_ecdsa_key|#HostKey /etc/ssh/ssh_host_ecdsa_key|g' /etc/ssh/sshd_config
  527. echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config
  528. echo 'ClientAliveCountMax 3' >> /etc/ssh/sshd_config
  529. echo 'Ciphers aes256-ctr,aes128-ctr' >> /etc/ssh/sshd_config
  530. echo 'MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
  531. KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1' >> /etc/ssh/sshd_config
  532. apt-get -y --force-yes install fail2ban
  533. echo 'configure_ssh' >> $COMPLETION_FILE
  534. # Don't reboot if installing within docker
  535. # random numbers will come from the host system
  536. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  537. return
  538. fi
  539. echo ''
  540. echo ''
  541. echo ' *** Rebooting to initialise ssh settings and random number generator ***'
  542. echo ''
  543. echo " *** Reconnect via ssh on port $SSH_PORT, then run this script again ***"
  544. echo ''
  545. reboot
  546. }
  547. function regenerate_ssh_keys {
  548. if grep -Fxq "regenerate_ssh_keys" $COMPLETION_FILE; then
  549. return
  550. fi
  551. rm -f /etc/ssh/ssh_host_*
  552. dpkg-reconfigure openssh-server
  553. service ssh restart
  554. echo 'regenerate_ssh_keys' >> $COMPLETION_FILE
  555. }
  556. function configure_dns {
  557. if grep -Fxq "configure_dns" $COMPLETION_FILE; then
  558. return
  559. fi
  560. echo 'domain localdomain' > /etc/resolv.conf
  561. echo 'search localdomain' >> /etc/resolv.conf
  562. echo 'nameserver 213.73.91.35' >> /etc/resolv.conf
  563. echo 'nameserver 85.214.20.141' >> /etc/resolv.conf
  564. echo 'configure_dns' >> $COMPLETION_FILE
  565. }
  566. function set_your_domain_name {
  567. if grep -Fxq "set_your_domain_name" $COMPLETION_FILE; then
  568. return
  569. fi
  570. echo "$DOMAIN_NAME" > /etc/hostname
  571. hostname $DOMAIN_NAME
  572. sed -i "s/127.0.1.1 arm/127.0.1.1 $DOMAIN_NAME/g" /etc/hosts
  573. echo "127.0.1.1 $DOMAIN_NAME" >> /etc/hosts
  574. echo 'set_your_domain_name' >> $COMPLETION_FILE
  575. }
  576. function time_synchronisation {
  577. if grep -Fxq "time_synchronisation" $COMPLETION_FILE; then
  578. return
  579. fi
  580. apt-get -y --force-yes install tlsdate
  581. apt-get -y remove ntpdate
  582. echo '#!/bin/bash' > /usr/bin/updatedate
  583. echo 'TIMESOURCE=google.com' >> /usr/bin/updatedate
  584. echo 'TIMESOURCE2=www.ptb.de' >> /usr/bin/updatedate
  585. echo 'LOGFILE=/var/log/tlsdate.log' >> /usr/bin/updatedate
  586. echo 'TIMEOUT=5' >> /usr/bin/updatedate
  587. echo "EMAIL=$MY_USERNAME@$DOMAIN_NAME" >> /usr/bin/updatedate
  588. echo '# File which contains the previous date as a number' >> /usr/bin/updatedate
  589. echo 'BEFORE_DATE_FILE=/var/log/tlsdateprevious.txt' >> /usr/bin/updatedate
  590. echo '# File which contains the previous date as a string' >> /usr/bin/updatedate
  591. echo 'BEFORE_FULLDATE_FILE=/var/log/tlsdate.txt' >> /usr/bin/updatedate
  592. echo 'DATE_BEFORE=$(date)' >> /usr/bin/updatedate
  593. echo 'BEFORE=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  594. echo 'BACKWARDS_BETWEEN=0' >> /usr/bin/updatedate
  595. echo '# If the date was previously set' >> /usr/bin/updatedate
  596. echo 'if [[ -f "$BEFORE_DATE_FILE" ]]; then' >> /usr/bin/updatedate
  597. echo ' BEFORE_FILE=$(cat $BEFORE_DATE_FILE)' >> /usr/bin/updatedate
  598. echo ' BEFORE_FULLDATE=$(cat $BEFORE_FULLDATE_FILE)' >> /usr/bin/updatedate
  599. echo ' # is the date going backwards?' >> /usr/bin/updatedate
  600. echo ' if (( BEFORE_FILE > BEFORE )); then' >> /usr/bin/updatedate
  601. echo ' echo -n "Date went backwards between tlsdate updates. " >> $LOGFILE' >> /usr/bin/updatedate
  602. echo ' echo -n "$BEFORE_FILE > $BEFORE, " >> $LOGFILE' >> /usr/bin/updatedate
  603. echo ' echo "$BEFORE_FULLDATE > $DATE_BEFORE" >> $LOGFILE' >> /usr/bin/updatedate
  604. echo ' # Send a warning email' > /usr/bin/updatedate
  605. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  606. echo ' # Try another time source' >> /usr/bin/updatedate
  607. echo ' TIMESOURCE=$TIMESOURCE2' >> /usr/bin/updatedate
  608. echo ' # try running without any parameters' >> /usr/bin/updatedate
  609. echo ' tlsdate >> $LOGFILE' >> /usr/bin/updatedate
  610. echo ' BACKWARDS_BETWEEN=1' >> /usr/bin/updatedate
  611. echo ' fi' >> /usr/bin/updatedate
  612. echo 'fi' >> /usr/bin/updatedate
  613. echo '# Set the date' >> /usr/bin/updatedate
  614. echo '/usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  615. echo 'DATE_AFTER=$(date)' >> /usr/bin/updatedate
  616. echo 'AFTER=$(date -d "$Y-$M-$D" '+%s')' >> /usr/bin/updatedate
  617. echo '# After setting the date did it go backwards?' >> /usr/bin/updatedate
  618. echo 'if (( AFTER < BEFORE )); then' >> /usr/bin/updatedate
  619. echo ' echo "Incorrect date: $DATE_BEFORE -> $DATE_AFTER" >> $LOGFILE' >> /usr/bin/updatedate
  620. echo ' # Send a warning email' >> /usr/bin/updatedate
  621. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  622. echo ' # Try resetting the date from another time source' >> /usr/bin/updatedate
  623. echo ' /usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE2 -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  624. echo ' DATE_AFTER=$(date)' >> /usr/bin/updatedate
  625. echo ' AFTER=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  626. echo 'else' >> /usr/bin/updatedate
  627. echo ' echo -n $TIMESOURCE >> $LOGFILE' >> /usr/bin/updatedate
  628. echo ' if [[ -f "$BEFORE_DATE_FILE" ]]; then' >> /usr/bin/updatedate
  629. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  630. echo ' echo -n $BEFORE_FILE >> $LOGFILE' >> /usr/bin/updatedate
  631. echo ' fi' >> /usr/bin/updatedate
  632. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  633. echo ' echo -n $BEFORE >> $LOGFILE' >> /usr/bin/updatedate
  634. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  635. echo ' echo -n $AFTER >> $LOGFILE' >> /usr/bin/updatedate
  636. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  637. echo ' echo $DATE_AFTER >> $LOGFILE' >> /usr/bin/updatedate
  638. echo 'fi' >> /usr/bin/updatedate
  639. echo '# Log the last date' >> /usr/bin/updatedate
  640. echo 'if [ BACKWARDS_BETWEEN == 0 ]; then' >> /usr/bin/updatedate
  641. echo ' echo "$AFTER" > $BEFORE_DATE_FILE' >> /usr/bin/updatedate
  642. echo ' echo "$DATE_AFTER" > $BEFORE_FULLDATE_FILE' >> /usr/bin/updatedate
  643. echo ' exit 0' >> /usr/bin/updatedate
  644. echo 'else' >> /usr/bin/updatedate
  645. echo ' exit 1' >> /usr/bin/updatedate
  646. echo 'fi' >> /usr/bin/updatedate
  647. chmod +x /usr/bin/updatedate
  648. echo '*/15 * * * * root /usr/bin/updatedate' >> /etc/crontab
  649. service cron restart
  650. echo '#!/bin/bash' > /etc/init.d/tlsdate
  651. echo '# /etc/init.d/tlsdate' >> /etc/init.d/tlsdate
  652. echo '### BEGIN INIT INFO' >> /etc/init.d/tlsdate
  653. echo '# Provides: tlsdate' >> /etc/init.d/tlsdate
  654. echo '# Required-Start: $remote_fs $syslog' >> /etc/init.d/tlsdate
  655. echo '# Required-Stop: $remote_fs $syslog' >> /etc/init.d/tlsdate
  656. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/tlsdate
  657. echo '# Default-Stop: 0 1 6' >> /etc/init.d/tlsdate
  658. echo '# Short-Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  659. echo '# Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  660. echo '### END INIT INFO' >> /etc/init.d/tlsdate
  661. echo '# Author: Bob Mottram <bob@robotics.uk.to>' >> /etc/init.d/tlsdate
  662. echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin"' >> /etc/init.d/tlsdate
  663. echo 'LOGFILE="/var/log/tlsdate.log"' >> /etc/init.d/tlsdate
  664. echo 'TLSDATECOMMAND="tlsdate --timewarp -l -H www.ptb.de -p 443 >> $LOGFILE"' >> /etc/init.d/tlsdate
  665. echo '#Start-Stop here' >> /etc/init.d/tlsdate
  666. echo 'case "$1" in' >> /etc/init.d/tlsdate
  667. echo ' start)' >> /etc/init.d/tlsdate
  668. echo ' echo "tlsdate started"' >> /etc/init.d/tlsdate
  669. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  670. echo ' ;;' >> /etc/init.d/tlsdate
  671. echo ' stop)' >> /etc/init.d/tlsdate
  672. echo ' echo "tlsdate stopped"' >> /etc/init.d/tlsdate
  673. echo ' ;;' >> /etc/init.d/tlsdate
  674. echo ' restart)' >> /etc/init.d/tlsdate
  675. echo ' echo "tlsdate restarted"' >> /etc/init.d/tlsdate
  676. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  677. echo ' ;;' >> /etc/init.d/tlsdate
  678. echo ' *)' >> /etc/init.d/tlsdate
  679. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/tlsdate
  680. echo ' exit 1' >> /etc/init.d/tlsdate
  681. echo ' ;;' >> /etc/init.d/tlsdate
  682. echo 'esac' >> /etc/init.d/tlsdate
  683. echo 'exit 0' >> /etc/init.d/tlsdate
  684. chmod +x /etc/init.d/tlsdate
  685. update-rc.d tlsdate defaults
  686. echo 'time_synchronisation' >> $COMPLETION_FILE
  687. }
  688. function configure_firewall {
  689. if grep -Fxq "configure_firewall" $COMPLETION_FILE; then
  690. return
  691. fi
  692. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  693. # docker does its own firewalling
  694. return
  695. fi
  696. iptables -P INPUT ACCEPT
  697. ip6tables -P INPUT ACCEPT
  698. iptables -F
  699. ip6tables -F
  700. iptables -X
  701. ip6tables -X
  702. iptables -P INPUT DROP
  703. ip6tables -P INPUT DROP
  704. iptables -A INPUT -i lo -j ACCEPT
  705. iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  706. echo 'configure_firewall' >> $COMPLETION_FILE
  707. }
  708. function save_firewall_settings {
  709. iptables-save > /etc/firewall.conf
  710. ip6tables-save > /etc/firewall6.conf
  711. printf '#!/bin/sh\n' > /etc/network/if-up.d/iptables
  712. printf 'iptables-restore < /etc/firewall.conf\n' >> /etc/network/if-up.d/iptables
  713. printf 'ip6tables-restore < /etc/firewall6.conf\n' >> /etc/network/if-up.d/iptables
  714. chmod +x /etc/network/if-up.d/iptables
  715. }
  716. function configure_firewall_for_dns {
  717. if grep -Fxq "configure_firewall_for_dns" $COMPLETION_FILE; then
  718. return
  719. fi
  720. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  721. # docker does its own firewalling
  722. return
  723. fi
  724. iptables -A INPUT -i eth0 -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
  725. save_firewall_settings
  726. echo 'configure_firewall_for_dns' >> $COMPLETION_FILE
  727. }
  728. function configure_firewall_for_xmpp {
  729. if [ ! -d /etc/prosody ]; then
  730. return
  731. fi
  732. if grep -Fxq "configure_firewall_for_xmpp" $COMPLETION_FILE; then
  733. return
  734. fi
  735. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  736. # docker does its own firewalling
  737. return
  738. fi
  739. iptables -A INPUT -i eth0 -p tcp --dport 5222:5223 -j ACCEPT
  740. iptables -A INPUT -i eth0 -p tcp --dport 5269 -j ACCEPT
  741. iptables -A INPUT -i eth0 -p tcp --dport 5280:5281 -j ACCEPT
  742. save_firewall_settings
  743. echo 'configure_firewall_for_xmpp' >> $COMPLETION_FILE
  744. }
  745. function configure_firewall_for_irc {
  746. if [ ! -d /etc/ngircd ]; then
  747. return
  748. fi
  749. if grep -Fxq "configure_firewall_for_irc" $COMPLETION_FILE; then
  750. return
  751. fi
  752. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  753. # docker does its own firewalling
  754. return
  755. fi
  756. iptables -A INPUT -i eth0 -p tcp --dport 6697 -j ACCEPT
  757. iptables -A INPUT -i eth0 -p tcp --dport 9999 -j ACCEPT
  758. save_firewall_settings
  759. echo 'configure_firewall_for_irc' >> $COMPLETION_FILE
  760. }
  761. function configure_firewall_for_ftp {
  762. if grep -Fxq "configure_firewall_for_ftp" $COMPLETION_FILE; then
  763. return
  764. fi
  765. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  766. # docker does its own firewalling
  767. return
  768. fi
  769. iptables -I INPUT -i eth0 -p tcp --dport 1024:65535 --sport 20:21 -j ACCEPT
  770. save_firewall_settings
  771. echo 'configure_firewall_for_ftp' >> $COMPLETION_FILE
  772. }
  773. function configure_firewall_for_web_access {
  774. if grep -Fxq "configure_firewall_for_web_access" $COMPLETION_FILE; then
  775. return
  776. fi
  777. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  778. # docker does its own firewalling
  779. return
  780. fi
  781. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 80 -j ACCEPT
  782. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 443 -j ACCEPT
  783. save_firewall_settings
  784. echo 'configure_firewall_for_web_access' >> $COMPLETION_FILE
  785. }
  786. function configure_firewall_for_web_server {
  787. if grep -Fxq "configure_firewall_for_web_server" $COMPLETION_FILE; then
  788. return
  789. fi
  790. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  791. # docker does its own firewalling
  792. return
  793. fi
  794. iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
  795. iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
  796. save_firewall_settings
  797. echo 'configure_firewall_for_web_server' >> $COMPLETION_FILE
  798. }
  799. function configure_firewall_for_ssh {
  800. if grep -Fxq "configure_firewall_for_ssh" $COMPLETION_FILE; then
  801. return
  802. fi
  803. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  804. # docker does its own firewalling
  805. return
  806. fi
  807. iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
  808. iptables -A INPUT -i eth0 -p tcp --dport $SSH_PORT -j ACCEPT
  809. save_firewall_settings
  810. echo 'configure_firewall_for_ssh' >> $COMPLETION_FILE
  811. }
  812. function configure_firewall_for_git {
  813. if grep -Fxq "configure_firewall_for_git" $COMPLETION_FILE; then
  814. return
  815. fi
  816. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  817. # docker does its own firewalling
  818. return
  819. fi
  820. iptables -A INPUT -i eth0 -p tcp --dport 9418 -j ACCEPT
  821. save_firewall_settings
  822. echo 'configure_firewall_for_git' >> $COMPLETION_FILE
  823. }
  824. function configure_firewall_for_email {
  825. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  826. return
  827. fi
  828. if grep -Fxq "configure_firewall_for_email" $COMPLETION_FILE; then
  829. return
  830. fi
  831. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  832. # docker does its own firewalling
  833. return
  834. fi
  835. iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
  836. iptables -A INPUT -i eth0 -p tcp --dport 587 -j ACCEPT
  837. iptables -A INPUT -i eth0 -p tcp --dport 465 -j ACCEPT
  838. iptables -A INPUT -i eth0 -p tcp --dport 993 -j ACCEPT
  839. save_firewall_settings
  840. echo 'configure_firewall_for_email' >> $COMPLETION_FILE
  841. }
  842. function configure_internet_protocol {
  843. if grep -Fxq "configure_internet_protocol" $COMPLETION_FILE; then
  844. return
  845. fi
  846. sed -i "s/#net.ipv4.tcp_syncookies=1/net.ipv4.tcp_syncookies=1/g" /etc/sysctl.conf
  847. sed -i "s/#net.ipv4.conf.all.accept_redirects = 0/net.ipv4.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  848. sed -i "s/#net.ipv6.conf.all.accept_redirects = 0/net.ipv6.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  849. sed -i "s/#net.ipv4.conf.all.send_redirects = 0/net.ipv4.conf.all.send_redirects = 0/g" /etc/sysctl.conf
  850. sed -i "s/#net.ipv4.conf.all.accept_source_route = 0/net.ipv4.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  851. sed -i "s/#net.ipv6.conf.all.accept_source_route = 0/net.ipv6.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  852. sed -i "s/#net.ipv4.conf.default.rp_filter=1/net.ipv4.conf.default.rp_filter=1/g" /etc/sysctl.conf
  853. sed -i "s/#net.ipv4.conf.all.rp_filter=1/net.ipv4.conf.all.rp_filter=1/g" /etc/sysctl.conf
  854. sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=0/g" /etc/sysctl.conf
  855. sed -i "s/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=0/g" /etc/sysctl.conf
  856. echo '# ignore pings' >> /etc/sysctl.conf
  857. echo 'net.ipv4.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  858. echo 'net.ipv6.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  859. echo '# disable ipv6' >> /etc/sysctl.conf
  860. echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
  861. echo 'net.ipv4.tcp_synack_retries = 2' >> /etc/sysctl.conf
  862. echo 'net.ipv4.tcp_syn_retries = 1' >> /etc/sysctl.conf
  863. echo '# keepalive' >> /etc/sysctl.conf
  864. echo 'net.ipv4.tcp_keepalive_probes = 9' >> /etc/sysctl.conf
  865. echo 'net.ipv4.tcp_keepalive_intvl = 75' >> /etc/sysctl.conf
  866. echo 'net.ipv4.tcp_keepalive_time = 7200' >> /etc/sysctl.conf
  867. echo 'configure_internet_protocol' >> $COMPLETION_FILE
  868. }
  869. function script_to_make_self_signed_certificates {
  870. if grep -Fxq "script_to_make_self_signed_certificates" $COMPLETION_FILE; then
  871. return
  872. fi
  873. echo '#!/bin/bash' > /usr/bin/makecert
  874. echo 'HOSTNAME=$1' >> /usr/bin/makecert
  875. echo 'COUNTRY_CODE="US"' >> /usr/bin/makecert
  876. echo 'AREA="Free Speech Zone"' >> /usr/bin/makecert
  877. echo 'LOCATION="Freedomville"' >> /usr/bin/makecert
  878. echo 'ORGANISATION="Freedombone"' >> /usr/bin/makecert
  879. echo 'UNIT="Freedombone Unit"' >> /usr/bin/makecert
  880. echo 'if ! which openssl > /dev/null ;then' >> /usr/bin/makecert
  881. echo ' echo "$0: openssl is not installed, exiting" 1>&2' >> /usr/bin/makecert
  882. echo ' exit 1' >> /usr/bin/makecert
  883. echo 'fi' >> /usr/bin/makecert
  884. echo 'openssl req -x509 -nodes -days 3650 -sha256 -subj "/O=$ORGANISATION/OU=$UNIT/C=$COUNTRY_CODE/ST=$AREA/L=$LOCATION/CN=$HOSTNAME" -newkey rsa:4096 -keyout /etc/ssl/private/$HOSTNAME.key -out /etc/ssl/certs/$HOSTNAME.crt' >> /usr/bin/makecert
  885. echo 'openssl dhparam -check -text -5 1024 -out /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  886. echo 'chmod 400 /etc/ssl/private/$HOSTNAME.key' >> /usr/bin/makecert
  887. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.crt' >> /usr/bin/makecert
  888. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  889. echo 'if [ -f /etc/init.d/nginx ]; then' >> /usr/bin/makecert
  890. echo ' /etc/init.d/nginx reload' >> /usr/bin/makecert
  891. echo 'fi' >> /usr/bin/makecert
  892. echo '# add the public certificate to a separate directory' >> /usr/bin/makecert
  893. echo '# so that we can redistribute it easily' >> /usr/bin/makecert
  894. echo 'if [ ! -d /etc/ssl/mycerts ]; then' >> /usr/bin/makecert
  895. echo ' mkdir /etc/ssl/mycerts' >> /usr/bin/makecert
  896. echo 'fi' >> /usr/bin/makecert
  897. echo 'cp /etc/ssl/certs/$HOSTNAME.crt /etc/ssl/mycerts' >> /usr/bin/makecert
  898. echo '# Create a bundle of your certificates' >> /usr/bin/makecert
  899. echo 'cat /etc/ssl/mycerts/*.crt > /etc/ssl/freedombone-bundle.crt' >> /usr/bin/makecert
  900. echo 'tar -czvf /etc/ssl/freedombone-certs.tar.gz /etc/ssl/mycerts/*.crt' >> /usr/bin/makecert
  901. chmod +x /usr/bin/makecert
  902. echo 'script_to_make_self_signed_certificates' >> $COMPLETION_FILE
  903. }
  904. function configure_email {
  905. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  906. return
  907. fi
  908. if grep -Fxq "configure_email" $COMPLETION_FILE; then
  909. return
  910. fi
  911. apt-get -y remove postfix
  912. apt-get -y --force-yes install exim4 sasl2-bin swaks libnet-ssleay-perl procmail
  913. echo 'dc_eximconfig_configtype="internet"' > /etc/exim4/update-exim4.conf.conf
  914. echo "dc_other_hostnames='$DOMAIN_NAME'" >> /etc/exim4/update-exim4.conf.conf
  915. echo "dc_local_interfaces=''" >> /etc/exim4/update-exim4.conf.conf
  916. echo "dc_readhost=''" >> /etc/exim4/update-exim4.conf.conf
  917. echo "dc_relay_domains=''" >> /etc/exim4/update-exim4.conf.conf
  918. echo "dc_minimaldns='false'" >> /etc/exim4/update-exim4.conf.conf
  919. echo "dc_relay_nets='192.168.1.0/24'" >> /etc/exim4/update-exim4.conf.conf
  920. echo "dc_smarthost=''" >> /etc/exim4/update-exim4.conf.conf
  921. echo "CFILEMODE='644'" >> /etc/exim4/update-exim4.conf.conf
  922. echo "dc_use_split_config='false'" >> /etc/exim4/update-exim4.conf.conf
  923. echo "dc_hide_mailname=''" >> /etc/exim4/update-exim4.conf.conf
  924. echo "dc_mailname_in_oh='true'" >> /etc/exim4/update-exim4.conf.conf
  925. echo "dc_localdelivery='maildir_home'" >> /etc/exim4/update-exim4.conf.conf
  926. update-exim4.conf
  927. sed -i "s/START=no/START=yes/g" /etc/default/saslauthd
  928. /etc/init.d/saslauthd start
  929. # make a tls certificate for email
  930. makecert exim
  931. mv /etc/ssl/private/exim.key /etc/exim4
  932. mv /etc/ssl/certs/exim.crt /etc/exim4
  933. mv /etc/ssl/certs/exim.dhparam /etc/exim4
  934. chown root:Debian-exim /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  935. chmod 640 /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  936. sed -i '/login_saslauthd_server/,/.endif/ s/# *//' /etc/exim4/exim4.conf.template
  937. sed -i "/.ifdef MAIN_HARDCODE_PRIMARY_HOSTNAME/i\MAIN_HARDCODE_PRIMARY_HOSTNAME = $DOMAIN_NAME\nMAIN_TLS_ENABLE = true" /etc/exim4/exim4.conf.template
  938. sed -i "s|SMTPLISTENEROPTIONS=''|SMTPLISTENEROPTIONS='-oX 465:25:587 -oP /var/run/exim4/exim.pid'|g" /etc/default/exim4
  939. if ! grep -q "tls_on_connect_ports=465" /etc/exim4/exim4.conf.template; then
  940. sed -i '/SSL configuration for exim/i\tls_on_connect_ports=465' /etc/exim4/exim4.conf.template
  941. fi
  942. adduser $MY_USERNAME sasl
  943. addgroup Debian-exim sasl
  944. /etc/init.d/exim4 restart
  945. if [ ! -d /etc/skel/Maildir ]; then
  946. mkdir -m 700 /etc/skel/Maildir
  947. mkdir -m 700 /etc/skel/Maildir/Sent
  948. mkdir -m 700 /etc/skel/Maildir/Sent/tmp
  949. mkdir -m 700 /etc/skel/Maildir/Sent/cur
  950. mkdir -m 700 /etc/skel/Maildir/Sent/new
  951. mkdir -m 700 /etc/skel/Maildir/.learn-spam
  952. mkdir -m 700 /etc/skel/Maildir/.learn-spam/cur
  953. mkdir -m 700 /etc/skel/Maildir/.learn-spam/new
  954. mkdir -m 700 /etc/skel/Maildir/.learn-spam/tmp
  955. mkdir -m 700 /etc/skel/Maildir/.learn-ham
  956. mkdir -m 700 /etc/skel/Maildir/.learn-ham/cur
  957. mkdir -m 700 /etc/skel/Maildir/.learn-ham/new
  958. mkdir -m 700 /etc/skel/Maildir/.learn-ham/tmp
  959. ln -s /etc/skel/Maildir/.learn-spam /etc/skel/Maildir/spam
  960. ln -s /etc/skel/Maildir/.learn-ham /etc/skel/Maildir/ham
  961. fi
  962. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  963. mkdir -m 700 /home/$MY_USERNAME/Maildir
  964. mkdir -m 700 /home/$MY_USERNAME/Maildir/cur
  965. mkdir -m 700 /home/$MY_USERNAME/Maildir/tmp
  966. mkdir -m 700 /home/$MY_USERNAME/Maildir/new
  967. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent
  968. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/cur
  969. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/tmp
  970. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/new
  971. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam
  972. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/cur
  973. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/new
  974. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/tmp
  975. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham
  976. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/cur
  977. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/new
  978. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/tmp
  979. ln -s /home/$MY_USERNAME/Maildir/.learn-spam /home/$MY_USERNAME/Maildir/spam
  980. ln -s /home/$MY_USERNAME/Maildir/.learn-ham /home/$MY_USERNAME/Maildir/ham
  981. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  982. fi
  983. echo 'configure_email' >> $COMPLETION_FILE
  984. }
  985. function spam_filtering {
  986. # NOTE: spamassassin installation currently doesn't work, sa-compile fails with a make error 23/09/2014
  987. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  988. return
  989. fi
  990. if grep -Fxq "spam_filtering" $COMPLETION_FILE; then
  991. return
  992. fi
  993. apt-get -y --force-yes install exim4-daemon-heavy
  994. apt-get -y --force-yes install spamassassin
  995. sa-update -v
  996. sed -i 's/ENABLED=0/ENABLED=1/g' /etc/default/spamassassin
  997. sed -i 's/# spamd_address = 127.0.0.1 783/spamd_address = 127.0.0.1 783/g' /etc/exim4/exim4.conf.template
  998. # This configuration is based on https://wiki.debian.org/DebianSpamAssassin
  999. sed -i 's/local_parts = postmaster/local_parts = postmaster:abuse/g' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  1000. sed -i '/domains = +local_domains : +relay_to_domains/a\ set acl_m0 = rfcnames' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  1001. sed -i 's/accept/accept condition = ${if eq{$acl_m0}{rfcnames} {1}{0}}/g' /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1002. echo 'warn message = X-Spam-Score: $spam_score ($spam_bar)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1003. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1004. echo 'warn message = X-Spam-Flag: YES' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1005. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1006. echo 'warn message = X-Spam-Report: $spam_report' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1007. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1008. echo '# reject spam at high scores (> 12)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1009. echo 'deny message = This message scored $spam_score spam points.' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1010. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1011. echo ' condition = ${if >{$spam_score_int}{120}{1}{0}}' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  1012. # procmail configuration
  1013. echo 'MAILDIR=$HOME/Maildir' > /home/$MY_USERNAME/.procmailrc
  1014. echo 'DEFAULT=$MAILDIR/' >> /home/$MY_USERNAME/.procmailrc
  1015. echo 'LOGFILE=$HOME/log/procmail.log' >> /home/$MY_USERNAME/.procmailrc
  1016. echo 'LOGABSTRACT=all' >> /home/$MY_USERNAME/.procmailrc
  1017. echo '# get spamassassin to check emails' >> /home/$MY_USERNAME/.procmailrc
  1018. echo ':0fw: .spamassassin.lock' >> /home/$MY_USERNAME/.procmailrc
  1019. echo ' * < 256000' >> /home/$MY_USERNAME/.procmailrc
  1020. echo '| spamc' >> /home/$MY_USERNAME/.procmailrc
  1021. echo '# strong spam are discarded' >> /home/$MY_USERNAME/.procmailrc
  1022. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  1023. echo ' * ^X-Spam-Level: \*\*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  1024. echo '/dev/null' >> /home/$MY_USERNAME/.procmailrc
  1025. echo '# weak spam are kept just in case - clear this out every now and then' >> /home/$MY_USERNAME/.procmailrc
  1026. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  1027. echo ' * ^X-Spam-Level: \*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  1028. echo '.0-spam/' >> /home/$MY_USERNAME/.procmailrc
  1029. echo '# otherwise, marginal spam goes here for revision' >> /home/$MY_USERNAME/.procmailrc
  1030. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  1031. echo ' * ^X-Spam-Level: \*\*' >> /home/$MY_USERNAME/.procmailrc
  1032. echo '.spam/' >> /home/$MY_USERNAME/.procmailrc
  1033. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  1034. # filtering scripts
  1035. echo '#!/bin/bash' > /usr/bin/filterspam
  1036. echo 'USERNAME=$1' >> /usr/bin/filterspam
  1037. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-spam' >> /usr/bin/filterspam
  1038. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterspam
  1039. echo ' exit' >> /usr/bin/filterspam
  1040. echo 'fi' >> /usr/bin/filterspam
  1041. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterspam
  1042. echo 'do' >> /usr/bin/filterspam
  1043. echo ' spamc -L spam < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterspam
  1044. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterspam
  1045. echo 'done' >> /usr/bin/filterspam
  1046. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterspam
  1047. echo 'do' >> /usr/bin/filterspam
  1048. echo ' spamc -L spam < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterspam
  1049. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterspam
  1050. echo 'done' >> /usr/bin/filterspam
  1051. echo '#!/bin/bash' > /usr/bin/filterham
  1052. echo 'USERNAME=$1' >> /usr/bin/filterham
  1053. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-ham' >> /usr/bin/filterham
  1054. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterham
  1055. echo ' exit' >> /usr/bin/filterham
  1056. echo 'fi' >> /usr/bin/filterham
  1057. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterham
  1058. echo 'do' >> /usr/bin/filterham
  1059. echo ' spamc -L ham < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterham
  1060. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterham
  1061. echo 'done' >> /usr/bin/filterham
  1062. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterham
  1063. echo 'do' >> /usr/bin/filterham
  1064. echo ' spamc -L ham < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterham
  1065. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterham
  1066. echo 'done' >> /usr/bin/filterham
  1067. if ! grep -q "filterspam" /etc/crontab; then
  1068. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterspam $MY_USERNAME" >> /etc/crontab
  1069. fi
  1070. if ! grep -q "filterham" /etc/crontab; then
  1071. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterham $MY_USERNAME" >> /etc/crontab
  1072. fi
  1073. chmod 655 /usr/bin/filterspam /usr/bin/filterham
  1074. sed -i 's/# use_bayes 1/use_bayes 1/g' /etc/mail/spamassassin/local.cf
  1075. sed -i 's/# bayes_auto_learn 1/bayes_auto_learn 1/g' /etc/mail/spamassassin/local.cf
  1076. service spamassassin restart
  1077. service exim4 restart
  1078. service cron restart
  1079. echo 'spam_filtering' >> $COMPLETION_FILE
  1080. }
  1081. function configure_imap {
  1082. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1083. return
  1084. fi
  1085. if grep -Fxq "configure_imap" $COMPLETION_FILE; then
  1086. return
  1087. fi
  1088. apt-get -y --force-yes install dovecot-common dovecot-imapd
  1089. makecert dovecot
  1090. chown root:dovecot /etc/ssl/certs/dovecot.crt
  1091. chown root:dovecot /etc/ssl/private/dovecot.key
  1092. chown root:dovecot /etc/ssl/private/dovecot.dhparams
  1093. sed -i 's|#ssl = yes|ssl = yes|g' /etc/dovecot/conf.d/10-ssl.conf
  1094. sed -i 's|ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/ssl/certs/dovecot.crt|g' /etc/dovecot/conf.d/10-ssl.conf
  1095. sed -i 's|ssl_key = </etc/dovecot/private/dovecot.pem|/etc/ssl/private/dovecot.key|g' /etc/dovecot/conf.d/10-ssl.conf
  1096. sed -i 's|#ssl_dh_parameters_length = 1024|ssl_dh_parameters_length = 1024|g' /etc/dovecot/conf.d/10-ssl.conf
  1097. sed -i 's/#ssl_prefer_server_ciphers = no/ssl_prefer_server_ciphers = yes/g' /etc/dovecot/conf.d/10-ssl.conf
  1098. echo "ssl_cipher_list = '$SSL_CIPHERS'" >> /etc/dovecot/conf.d/10-ssl.conf
  1099. sed -i 's/#listen = *, ::/listen = */g' /etc/dovecot/dovecot.conf
  1100. sed -i 's/#disable_plaintext_auth = yes/disable_plaintext_auth = no/g' /etc/dovecot/conf.d/10-auth.conf
  1101. sed -i 's/auth_mechanisms = plain/auth_mechanisms = plain login/g' /etc/dovecot/conf.d/10-auth.conf
  1102. sed -i 's|# mail_location = maildir:~/Maildir| mail_location = maildir:~/Maildir:LAYOUT=fs|g' /etc/dovecot/conf.d/10-mail.conf
  1103. echo 'configure_imap' >> $COMPLETION_FILE
  1104. }
  1105. function configure_gpg {
  1106. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1107. return
  1108. fi
  1109. if grep -Fxq "configure_gpg" $COMPLETION_FILE; then
  1110. return
  1111. fi
  1112. apt-get -y --force-yes install gnupg
  1113. if [ ! -d /home/$MY_USERNAME/.gnupg ]; then
  1114. mkdir /home/$MY_USERNAME/.gnupg
  1115. echo 'keyserver hkp://keys.gnupg.net' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1116. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1117. fi
  1118. sed -i "s|keyserver hkp://keys.gnupg.net|keyserver $GPG_KEYSERVER|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  1119. if ! grep -q "# default preferences" /home/$MY_USERNAME/.gnupg/gpg.conf; then
  1120. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1121. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1122. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1123. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1124. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  1125. fi
  1126. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  1127. if [[ $MY_GPG_PUBLIC_KEY && $MY_GPG_PRIVATE_KEY ]]; then
  1128. # use your existing GPG keys which were exported
  1129. if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
  1130. echo "GPG public key file $MY_GPG_PUBLIC_KEY was not found"
  1131. exit 5
  1132. fi
  1133. if [ ! -f $MY_GPG_PRIVATE_KEY ]; then
  1134. echo "GPG private key file $MY_GPG_PRIVATE_KEY was not found"
  1135. exit 6
  1136. fi
  1137. su -c "gpg --import $MY_GPG_PUBLIC_KEY" - $MY_USERNAME
  1138. su -c "gpg --allow-secret-key-import --import $MY_GPG_PRIVATE_KEY" - $MY_USERNAME
  1139. # for security ensure that the private key file doesn't linger around
  1140. shred -zu $MY_GPG_PRIVATE_KEY
  1141. else
  1142. # Generate a GPG key
  1143. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  1144. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  1145. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  1146. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  1147. echo "Name-Real: $MY_USERNAME@$DOMAIN_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  1148. echo "Name-Email: $MY_USERNAME@$DOMAIN_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  1149. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  1150. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  1151. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  1152. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  1153. MY_GPG_PUBLIC_KEY_ID=$(su -c "gpg --list-keys $DOMAIN_NAME | grep 'pub ' | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}'" - $MY_USERNAME)
  1154. MY_GPG_PUBLIC_KEY=/tmp/public_key.gpg
  1155. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  1156. fi
  1157. echo 'configure_gpg' >> $COMPLETION_FILE
  1158. }
  1159. function email_client {
  1160. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1161. return
  1162. fi
  1163. if grep -Fxq "email_client" $COMPLETION_FILE; then
  1164. return
  1165. fi
  1166. apt-get -y --force-yes install mutt-patched lynx abook
  1167. if [ ! -d /home/$MY_USERNAME/.mutt ]; then
  1168. mkdir /home/$MY_USERNAME/.mutt
  1169. fi
  1170. echo "text/html; lynx -dump -width=78 -nolist %s | sed ‘s/^ //’; copiousoutput; needsterminal; nametemplate=%s.html" > /home/$MY_USERNAME/.mutt/mailcap
  1171. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
  1172. echo 'set mbox_type=Maildir' >> /etc/Muttrc
  1173. echo 'set folder="~/Maildir"' >> /etc/Muttrc
  1174. echo 'set mask="!^\\.[^.]"' >> /etc/Muttrc
  1175. echo 'set mbox="~/Maildir"' >> /etc/Muttrc
  1176. echo 'set record="+Sent"' >> /etc/Muttrc
  1177. echo 'set postponed="+Drafts"' >> /etc/Muttrc
  1178. echo 'set trash="+Trash"' >> /etc/Muttrc
  1179. echo 'set spoolfile="~/Maildir"' >> /etc/Muttrc
  1180. echo 'auto_view text/x-vcard text/html text/enriched' >> /etc/Muttrc
  1181. echo 'set editor="emacs"' >> /etc/Muttrc
  1182. echo 'set header_cache="+.cache"' >> /etc/Muttrc
  1183. echo '' >> /etc/Muttrc
  1184. echo 'macro index S "<tag-prefix><save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  1185. echo 'macro pager S "<save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  1186. echo 'macro index H "<tag-prefix><copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  1187. echo 'macro pager H "<copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  1188. echo '' >> /etc/Muttrc
  1189. echo '# set up the sidebar' >> /etc/Muttrc
  1190. echo 'set sidebar_width=12' >> /etc/Muttrc
  1191. echo 'set sidebar_visible=yes' >> /etc/Muttrc
  1192. echo "set sidebar_delim='|'" >> /etc/Muttrc
  1193. echo 'set sidebar_sort=yes' >> /etc/Muttrc
  1194. echo '' >> /etc/Muttrc
  1195. echo 'set rfc2047_parameters' >> /etc/Muttrc
  1196. echo '' >> /etc/Muttrc
  1197. echo '# Show inbox and sent items' >> /etc/Muttrc
  1198. echo 'mailboxes = =Sent' >> /etc/Muttrc
  1199. echo '' >> /etc/Muttrc
  1200. echo '# Alter these colours as needed for maximum bling' >> /etc/Muttrc
  1201. echo 'color sidebar_new yellow default' >> /etc/Muttrc
  1202. echo 'color normal white default' >> /etc/Muttrc
  1203. echo 'color hdrdefault brightcyan default' >> /etc/Muttrc
  1204. echo 'color signature green default' >> /etc/Muttrc
  1205. echo 'color attachment brightyellow default' >> /etc/Muttrc
  1206. echo 'color quoted green default' >> /etc/Muttrc
  1207. echo 'color quoted1 white default' >> /etc/Muttrc
  1208. echo 'color tilde blue default' >> /etc/Muttrc
  1209. echo '' >> /etc/Muttrc
  1210. echo '# ctrl-n, ctrl-p to select next, prev folder' >> /etc/Muttrc
  1211. echo '# ctrl-o to open selected folder' >> /etc/Muttrc
  1212. echo 'bind index \Cp sidebar-prev' >> /etc/Muttrc
  1213. echo 'bind index \Cn sidebar-next' >> /etc/Muttrc
  1214. echo 'bind index \Co sidebar-open' >> /etc/Muttrc
  1215. echo 'bind pager \Cp sidebar-prev' >> /etc/Muttrc
  1216. echo 'bind pager \Cn sidebar-next' >> /etc/Muttrc
  1217. echo 'bind pager \Co sidebar-open' >> /etc/Muttrc
  1218. echo '' >> /etc/Muttrc
  1219. echo '# ctrl-b toggles sidebar visibility' >> /etc/Muttrc
  1220. echo "macro index,pager \Cb '<enter-command>toggle sidebar_visible<enter><redraw-screen>' 'toggle sidebar'" >> /etc/Muttrc
  1221. echo '' >> /etc/Muttrc
  1222. echo '# esc-m Mark new messages as read' >> /etc/Muttrc
  1223. echo 'macro index <esc>m "T~N<enter>;WNT~O<enter>;WO\CT~T<enter>" "mark all messages read"' >> /etc/Muttrc
  1224. echo '' >> /etc/Muttrc
  1225. echo '# Collapsing threads' >> /etc/Muttrc
  1226. echo 'macro index [ "<collapse-thread>" "collapse/uncollapse thread"' >> /etc/Muttrc
  1227. echo 'macro index ] "<collapse-all>" "collapse/uncollapse all threads"' >> /etc/Muttrc
  1228. echo '' >> /etc/Muttrc
  1229. echo '# threads containing new messages' >> /etc/Muttrc
  1230. echo 'uncolor index "~(~N)"' >> /etc/Muttrc
  1231. echo 'color index brightblue default "~(~N)"' >> /etc/Muttrc
  1232. echo '' >> /etc/Muttrc
  1233. echo '# new messages themselves' >> /etc/Muttrc
  1234. echo 'uncolor index "~N"' >> /etc/Muttrc
  1235. echo 'color index brightyellow default "~N"' >> /etc/Muttrc
  1236. echo '' >> /etc/Muttrc
  1237. echo '# GPG/PGP integration' >> /etc/Muttrc
  1238. echo '# this set the number of seconds to keep in memory the passphrase used to encrypt/sign' >> /etc/Muttrc
  1239. echo 'set pgp_timeout=60' >> /etc/Muttrc
  1240. echo '' >> /etc/Muttrc
  1241. echo '# automatically sign and encrypt with PGP/MIME' >> /etc/Muttrc
  1242. echo 'set pgp_autosign # autosign all outgoing mails' >> /etc/Muttrc
  1243. echo 'set pgp_autoencrypt # Try to encrypt automatically' >> /etc/Muttrc
  1244. echo 'set pgp_replyencrypt # autocrypt replies to crypted' >> /etc/Muttrc
  1245. echo 'set pgp_replysign # autosign replies to signed' >> /etc/Muttrc
  1246. echo 'set pgp_auto_decode=yes # decode attachments' >> /etc/Muttrc
  1247. echo 'set fcc_clear # Keep cleartext copy of sent encrypted mail' >> /etc/Muttrc
  1248. echo 'unset smime_is_default' >> /etc/Muttrc
  1249. echo '' >> /etc/Muttrc
  1250. echo 'set alias_file=~/.mutt-alias' >> /etc/Muttrc
  1251. echo 'source ~/.mutt-alias' >> /etc/Muttrc
  1252. echo 'set query_command= "abook --mutt-query \"%s\""' >> /etc/Muttrc
  1253. echo 'macro index,pager A "<pipe-message>abook --add-email-quiet<return>" "add the sender address to abook"' >> /etc/Muttrc
  1254. cp -f /etc/Muttrc /home/$MY_USERNAME/.muttrc
  1255. touch /home/$MY_USERNAME/.mutt-alias
  1256. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.muttrc
  1257. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt-alias
  1258. echo 'email_client' >> $COMPLETION_FILE
  1259. }
  1260. function folders_for_mailing_lists {
  1261. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1262. return
  1263. fi
  1264. if grep -Fxq "folders_for_mailing_lists" $COMPLETION_FILE; then
  1265. return
  1266. fi
  1267. echo '#!/bin/bash' > /usr/bin/mailinglistrule
  1268. echo 'MYUSERNAME=$1' >> /usr/bin/mailinglistrule
  1269. echo 'MAILINGLIST=$2' >> /usr/bin/mailinglistrule
  1270. echo 'SUBJECTTAG=$3' >> /usr/bin/mailinglistrule
  1271. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/mailinglistrule
  1272. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/mailinglistrule
  1273. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/mailinglistrule
  1274. echo 'if ! [[ $MYUSERNAME && $MAILINGLIST && $SUBJECTTAG ]]; then' >> /usr/bin/mailinglistrule
  1275. echo ' echo "mailinglistsrule [user name] [mailing list name] [subject tag]"' >> /usr/bin/mailinglistrule
  1276. echo ' exit 1' >> /usr/bin/mailinglistrule
  1277. echo 'fi' >> /usr/bin/mailinglistrule
  1278. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/mailinglistrule
  1279. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/mailinglistrule
  1280. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/mailinglistrule
  1281. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/mailinglistrule
  1282. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/mailinglistrule
  1283. echo 'fi' >> /usr/bin/mailinglistrule
  1284. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/mailinglistrule
  1285. echo 'echo "" >> $PM' >> /usr/bin/mailinglistrule
  1286. echo 'echo ":0" >> $PM' >> /usr/bin/mailinglistrule
  1287. echo 'echo " * ^Subject:.*()\[$SUBJECTTAG\]" >> $PM' >> /usr/bin/mailinglistrule
  1288. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/mailinglistrule
  1289. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/mailinglistrule
  1290. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/mailinglistrule
  1291. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/mailinglistrule
  1292. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/mailinglistrule
  1293. echo 'fi' >> /usr/bin/mailinglistrule
  1294. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/mailinglistrule
  1295. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/mailinglistrule
  1296. echo ' mkdir $PROCMAILLOG' >> /usr/bin/mailinglistrule
  1297. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/mailinglistrule
  1298. echo 'fi' >> /usr/bin/mailinglistrule
  1299. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/mailinglistrule
  1300. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/mailinglistrule
  1301. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/mailinglistrule
  1302. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/mailinglistrule
  1303. echo 'fi' >> /usr/bin/mailinglistrule
  1304. chmod +x /usr/bin/mailinglistrule
  1305. echo 'folders_for_mailing_lists' >> $COMPLETION_FILE
  1306. }
  1307. function folders_for_email_addresses {
  1308. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1309. return
  1310. fi
  1311. if grep -Fxq "folders_for_email_addresses" $COMPLETION_FILE; then
  1312. return
  1313. fi
  1314. echo '#!/bin/bash' > /usr/bin/emailrule
  1315. echo 'MYUSERNAME=$1' >> /usr/bin/emailrule
  1316. echo 'EMAILADDRESS=$2' >> /usr/bin/emailrule
  1317. echo 'MAILINGLIST=$3' >> /usr/bin/emailrule
  1318. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/emailrule
  1319. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/emailrule
  1320. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/emailrule
  1321. echo 'if ! [[ $MYUSERNAME && $EMAILADDRESS && $MAILINGLIST ]]; then' >> /usr/bin/emailrule
  1322. echo ' echo "emailrule [user name] [email address] [mailing list name]"' >> /usr/bin/emailrule
  1323. echo ' exit 1' >> /usr/bin/emailrule
  1324. echo 'fi' >> /usr/bin/emailrule
  1325. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/emailrule
  1326. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/emailrule
  1327. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/emailrule
  1328. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/emailrule
  1329. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/emailrule
  1330. echo 'fi' >> /usr/bin/emailrule
  1331. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/emailrule
  1332. echo 'echo "" >> $PM' >> /usr/bin/emailrule
  1333. echo 'echo ":0" >> $PM' >> /usr/bin/emailrule
  1334. echo 'echo " * ^From: $EMAILADDRESS" >> $PM' >> /usr/bin/emailrule
  1335. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/emailrule
  1336. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/emailrule
  1337. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/emailrule
  1338. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/emailrule
  1339. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/emailrule
  1340. echo 'fi' >> /usr/bin/emailrule
  1341. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/emailrule
  1342. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/emailrule
  1343. echo ' mkdir $PROCMAILLOG' >> /usr/bin/emailrule
  1344. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/emailrule
  1345. echo 'fi' >> /usr/bin/emailrule
  1346. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/emailrule
  1347. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/emailrule
  1348. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/emailrule
  1349. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/emailrule
  1350. echo 'fi' >> /usr/bin/emailrule
  1351. chmod +x /usr/bin/emailrule
  1352. echo 'folders_for_email_addresses' >> $COMPLETION_FILE
  1353. }
  1354. function dynamic_dns_freedns {
  1355. if grep -Fxq "dynamic_dns_freedns" $COMPLETION_FILE; then
  1356. return
  1357. fi
  1358. echo '#!/bin/bash' > /usr/bin/dynamicdns
  1359. echo '# subdomain name 1' >> /usr/bin/dynamicdns
  1360. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  1361. echo '# add any other subdomains below' >> /usr/bin/dynamicdns
  1362. chmod 600 /usr/bin/dynamicdns
  1363. chmod +x /usr/bin/dynamicdns
  1364. if ! grep -q "dynamicdns" /etc/crontab; then
  1365. sed -i '/# m h dom mon dow user command/a\*/5 * * * * root /usr/bin/timeout 240 /usr/bin/dynamicdns' /etc/crontab
  1366. fi
  1367. service cron restart
  1368. echo 'dynamic_dns_freedns' >> $COMPLETION_FILE
  1369. }
  1370. function create_private_mailing_list {
  1371. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1372. return
  1373. fi
  1374. # This installation doesn't work, results in ruby errors
  1375. # There is currently no schleuder package for Debian jessie
  1376. if grep -Fxq "create_private_mailing_list" $COMPLETION_FILE; then
  1377. return
  1378. fi
  1379. if [ ! $PRIVATE_MAILING_LIST ]; then
  1380. return
  1381. fi
  1382. if [ $PRIVATE_MAILING_LIST == $MY_USERNAME ]; then
  1383. echo 'The name of the private mailing list should not be the'
  1384. echo 'same as your username'
  1385. exit 10
  1386. fi
  1387. if [ ! $MY_GPG_PUBLIC_KEY ]; then
  1388. echo 'To create a private mailing list you need to specify a file'
  1389. echo 'containing your exported GPG key within MY_GPG_PUBLIC_KEY at'
  1390. echo 'the top of the script'
  1391. exit 11
  1392. fi
  1393. apt-get -y --force-yes install ruby ruby-dev ruby-gpgme libgpgme11-dev libmagic-dev
  1394. gem install schleuder
  1395. schleuder-fix-gem-dependencies
  1396. schleuder-init-setup --gem
  1397. # NOTE: this is version number sensitive and so might need changing
  1398. ln -s /var/lib/gems/2.1.0/gems/schleuder-2.2.4 /var/lib/schleuder
  1399. sed -i 's/#smtp_port: 25/smtp_port: 465/g' /etc/schleuder/schleuder.conf
  1400. sed -i 's/#superadminaddr: root@localhost/superadminaddr: root@localhost' /etc/schleuder/schleuder.conf
  1401. schleuder-newlist $PRIVATE_MAILING_LIST@$DOMAIN_NAME -realname "$PRIVATE_MAILING_LIST" -adminaddress $MY_USERNAME@$DOMAIN_NAME -initmember $MY_USERNAME@$DOMAIN_NAME -initmemberkey $MY_GPG_PUBLIC_KEY -nointeractive
  1402. emailrule $MY_USERNAME $PRIVATE_MAILING_LIST@$DOMAIN_NAME $PRIVATE_MAILING_LIST
  1403. echo 'schleuder:' > /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1404. echo ' debug_print = "R: schleuder for $local_part@$domain"' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1405. echo ' driver = accept' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1406. echo ' local_part_suffix_optional' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1407. echo ' local_part_suffix = +* : -bounce : -sendkey' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1408. echo ' domains = +local_domains' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1409. echo ' user = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1410. echo ' group = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1411. echo ' require_files = schleuder:+/var/lib/schleuder/$domain/${local_part}' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1412. echo ' transport = schleuder_transport' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  1413. echo 'schleuder_transport:' > /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  1414. echo ' debug_print = "T: schleuder_transport for $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  1415. echo ' driver = pipe' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  1416. echo ' home_directory = "/var/lib/schleuder/$domain/$local_part"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  1417. echo ' command = "/usr/bin/schleuder $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  1418. chown -R schleuder:schleuder /var/lib/schleuder
  1419. update-exim4.conf.template -r
  1420. update-exim4.conf
  1421. service exim4 restart
  1422. useradd -d /var/schleuderlists -s /bin/false schleuder
  1423. adduser Debian-exim schleuder
  1424. usermod -a -G mail schleuder
  1425. #exim -d -bt $PRIVATE_MAILING_LIST@$DOMAIN_NAME
  1426. echo 'create_private_mailing_list' >> $COMPLETION_FILE
  1427. }
  1428. function import_email {
  1429. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1430. return
  1431. fi
  1432. EMAIL_COMPLETE_MSG=' *** Freedombone mailbox installation is complete ***'
  1433. if grep -Fxq "import_email" $COMPLETION_FILE; then
  1434. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  1435. echo $EMAIL_COMPLETE_MSG
  1436. if [ -d $USB_MOUNT ]; then
  1437. umount $USB_MOUNT
  1438. rm -rf $USB_MOUNT
  1439. echo ' You can now remove the USB drive'
  1440. fi
  1441. exit 0
  1442. fi
  1443. return
  1444. fi
  1445. if [ $IMPORT_MAILDIR ]; then
  1446. if [ -d $IMPORT_MAILDIR ]; then
  1447. echo 'Transfering email files'
  1448. cp -r $IMPORT_MAILDIR /home/$MY_USERNAME
  1449. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  1450. else
  1451. echo "Email import directory $IMPORT_MAILDIR not found"
  1452. exit 9
  1453. fi
  1454. fi
  1455. echo 'import_email' >> $COMPLETION_FILE
  1456. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  1457. apt-get -y --force-yes autoremove
  1458. # unmount any attached usb drive
  1459. echo ''
  1460. echo $EMAIL_COMPLETE_MSG
  1461. echo ''
  1462. if [ -d $USB_MOUNT ]; then
  1463. umount $USB_MOUNT
  1464. rm -rf $USB_MOUNT
  1465. echo ' You can now remove the USB drive'
  1466. fi
  1467. exit 0
  1468. fi
  1469. }
  1470. function install_web_server {
  1471. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" ]]; then
  1472. return
  1473. fi
  1474. if grep -Fxq "install_web_server" $COMPLETION_FILE; then
  1475. return
  1476. fi
  1477. # remove apache
  1478. apt-get -y remove --purge apache2
  1479. if [ -d /etc/apache2 ]; then
  1480. rm -rf /etc/apache2
  1481. fi
  1482. # install nginx
  1483. apt-get -y --force-yes install nginx php5-fpm git
  1484. # install a script to easily enable and disable nginx virtual hosts
  1485. if [ ! -d $INSTALL_DIR ]; then
  1486. mkdir $INSTALL_DIR
  1487. fi
  1488. cd $INSTALL_DIR
  1489. git clone https://github.com/perusio/nginx_ensite
  1490. cd $INSTALL_DIR/nginx_ensite
  1491. cp nginx_* /usr/sbin
  1492. nginx_dissite default
  1493. echo 'install_web_server' >> $COMPLETION_FILE
  1494. }
  1495. function configure_php {
  1496. sed -i "s/memory_limit = 128M/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/fpm/php.ini
  1497. sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php5/fpm/php.ini
  1498. sed -i "s/memory_limit = -1/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/cli/php.ini
  1499. sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 50M/g" /etc/php5/fpm/php.ini
  1500. sed -i "s/post_max_size = 8M/post_max_size = 50M/g" /etc/php5/fpm/php.ini
  1501. }
  1502. function install_owncloud {
  1503. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1504. return
  1505. fi
  1506. OWNCLOUD_COMPLETION_MSG1=" *** Freedombone $SYSTEM_TYPE is now installed ***"
  1507. OWNCLOUD_COMPLETION_MSG2="Open $OWNCLOUD_DOMAIN_NAME in a web browser to complete the setup"
  1508. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1509. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  1510. # unmount any attached usb drive
  1511. if [ -d $USB_MOUNT ]; then
  1512. umount $USB_MOUNT
  1513. rm -rf $USB_MOUNT
  1514. fi
  1515. echo ''
  1516. echo $OWNCLOUD_COMPLETION_MSG1
  1517. echo $OWNCLOUD_COMPLETION_MSG2
  1518. exit 0
  1519. fi
  1520. return
  1521. fi
  1522. # if this is exclusively a cloud setup
  1523. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  1524. OWNCLOUD_DOMAIN_NAME=$DOMAIN_NAME
  1525. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  1526. fi
  1527. if [ ! $OWNCLOUD_DOMAIN_NAME ]; then
  1528. return
  1529. fi
  1530. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  1531. if [ ! $SYSTEM_TYPE ]; then
  1532. return
  1533. fi
  1534. fi
  1535. apt-get -y --force-yes install php5 php5-gd php-xml-parser php5-intl wget
  1536. apt-get -y --force-yes install php5-sqlite php5-mysql smbclient curl libcurl3 php5-curl bzip2
  1537. if [ ! -d /var/www/$OWNCLOUD_DOMAIN_NAME ]; then
  1538. mkdir /var/www/$OWNCLOUD_DOMAIN_NAME
  1539. mkdir /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  1540. fi
  1541. echo 'server {' > /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1542. echo ' listen 80;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1543. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1544. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1545. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1546. echo 'server {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1547. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1548. echo " root /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1549. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1550. echo ' ssl on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1551. echo " ssl_certificate /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1552. echo " ssl_certificate_key /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1553. echo " ssl_dhparam /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1554. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1555. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1556. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1557. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1558. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1559. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1560. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1561. echo ' # if you want to be able to access the site via HTTP' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1562. echo ' # then replace the above with the following:' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1563. echo ' # add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1564. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1565. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1566. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1567. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1568. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1569. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1570. echo ' client_max_body_size 10G; # set max upload size' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1571. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1572. echo ' fastcgi_buffers 64 4K;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1573. echo ' rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1574. echo ' rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1575. echo ' rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1576. echo ' index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1577. echo ' error_page 403 /core/templates/403.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1578. echo ' error_page 404 /core/templates/404.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1579. echo ' location = /robots.txt {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1580. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1581. echo ' log_not_found off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1582. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1583. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1584. echo ' location ~ ^/(data|config|\.ht|db_structure\.xml|README) {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1585. echo ' deny all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1586. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1587. echo ' location / {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1588. echo ' # The following 2 rules are only needed with webfinger' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1589. echo ' rewrite ^/.well-known/host-meta /public.php?service=host-meta last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1590. echo ' rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1591. echo ' rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1592. echo ' rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1593. echo ' rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1594. echo ' try_files $uri $uri/ index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1595. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1596. echo ' location ~ ^(.+?\.php)(/.*)?$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1597. echo ' try_files $1 =404;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1598. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1599. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1600. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1601. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1602. echo ' fastcgi_param SCRIPT_FILENAME $document_root$1;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1603. echo ' fastcgi_param PATH_INFO $2;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1604. echo ' fastcgi_param HTTPS on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1605. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1606. echo ' # Optional: set long EXPIRES header on static assets' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1607. echo ' location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1608. echo ' expires 30d;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1609. echo " # Optional: Don't log access to assets" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1610. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1611. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1612. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  1613. configure_php
  1614. if [ ! -f /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key ]; then
  1615. makecert $OWNCLOUD_DOMAIN_NAME
  1616. fi
  1617. # download owncloud
  1618. cd $INSTALL_DIR
  1619. if [ ! -f $INSTALL_DIR/$OWNCLOUD_ARCHIVE ]; then
  1620. wget $OWNCLOUD_DOWNLOAD
  1621. fi
  1622. if [ ! -f $INSTALL_DIR/$OWNCLOUD_ARCHIVE ]; then
  1623. echo 'Owncloud could not be downloaded. Check that it exists at '
  1624. echo $OWNCLOUD_DOWNLOAD
  1625. echo 'And if neccessary update the version number and hash within this script'
  1626. exit 18
  1627. fi
  1628. # Check that the hash is correct
  1629. CHECKSUM=$(sha256sum $OWNCLOUD_ARCHIVE | awk -F ' ' '{print $1}')
  1630. if [[ $CHECKSUM != $OWNCLOUD_HASH ]]; then
  1631. echo 'The sha256 hash of the owncloud download is incorrect. Possibly the file may have been tampered with. Check the hash on the Owncloud web site.'
  1632. echo $CHECKSUM
  1633. echo $OWNCLOUD_HASH
  1634. exit 19
  1635. fi
  1636. tar -xjf $OWNCLOUD_ARCHIVE
  1637. echo 'Copying files...'
  1638. cp -r owncloud/* /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  1639. chown -R www-data:www-data /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs/apps
  1640. chown -R www-data:www-data /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs/config
  1641. chown www-data:www-data /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  1642. nginx_ensite $OWNCLOUD_DOMAIN_NAME
  1643. service php5-fpm restart
  1644. service nginx restart
  1645. # update the dynamic DNS
  1646. if [ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE ]; then
  1647. if [[ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  1648. if ! grep -q "$OWNCLOUD_DOMAIN_NAME" /usr/bin/dynamicdns; then
  1649. echo "# $OWNCLOUD_DOMAIN_NAME" >> /usr/bin/dynamicdns
  1650. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$OWNCLOUD_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  1651. fi
  1652. fi
  1653. else
  1654. echo 'WARNING: No freeDNS subdomain code given for Owncloud. It is assumed that you are using some other dynamic DNS provider.'
  1655. fi
  1656. echo 'install_owncloud' >> $COMPLETION_FILE
  1657. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  1658. # unmount any attached usb drive
  1659. if [ -d $USB_MOUNT ]; then
  1660. umount $USB_MOUNT
  1661. rm -rf $USB_MOUNT
  1662. fi
  1663. echo ''
  1664. echo $OWNCLOUD_COMPLETION_MSG1
  1665. echo $OWNCLOUD_COMPLETION_MSG2
  1666. exit 0
  1667. fi
  1668. }
  1669. function install_xmpp {
  1670. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1671. return
  1672. fi
  1673. if grep -Fxq "install_xmpp" $COMPLETION_FILE; then
  1674. return
  1675. fi
  1676. apt-get -y --force-yes install prosody
  1677. if [ ! -f "/etc/ssl/private/xmpp.key" ]; then
  1678. makecert xmpp
  1679. fi
  1680. chown prosody:prosody /etc/ssl/private/xmpp.key
  1681. chown prosody:prosody /etc/ssl/certs/xmpp.*
  1682. cp -a /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.avail/xmpp.cfg.lua
  1683. sed -i 's|/etc/prosody/certs/example.com.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  1684. sed -i 's|/etc/prosody/certs/example.com.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  1685. if ! grep -q "xmpp.dhparam" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  1686. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/conf.avail/xmpp.cfg.lua
  1687. fi
  1688. sed -i "s/example.com/$DOMAIN_NAME/g" /etc/prosody/conf.avail/xmpp.cfg.lua
  1689. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/conf.avail/xmpp.cfg.lua
  1690. if ! grep -q "modules_enabled" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  1691. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1692. echo 'modules_enabled = {' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1693. echo ' "bosh"; -- Enable mod_bosh' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1694. echo ' "tls"; -- Enable mod_tls' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1695. echo ' "saslauth"; -- Enable mod_saslauth' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1696. echo '}' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1697. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1698. echo 'c2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1699. echo 's2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1700. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1701. fi
  1702. ln -sf /etc/prosody/conf.avail/xmpp.cfg.lua /etc/prosody/conf.d/xmpp.cfg.lua
  1703. sed -i 's|/etc/prosody/certs/localhost.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/prosody.cfg.lua
  1704. sed -i 's|/etc/prosody/certs/localhost.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/prosody.cfg.lua
  1705. if ! grep -q "xmpp.dhparam" /etc/prosody/prosody.cfg.lua; then
  1706. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/prosody.cfg.lua
  1707. fi
  1708. sed -i 's/c2s_require_encryption = false/c2s_require_encryption = true/g' /etc/prosody/prosody.cfg.lua
  1709. if ! grep -q "s2s_require_encryption" /etc/prosody/prosody.cfg.lua; then
  1710. sed -i '/c2s_require_encryption/a\s2s_require_encryption = true' /etc/prosody/prosody.cfg.lua
  1711. fi
  1712. if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/prosody.cfg.lua; then
  1713. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  1714. fi
  1715. sed -i 's/--"bosh";/"bosh";/g' /etc/prosody/prosody.cfg.lua
  1716. sed -i 's/authentication = "internal_plain"/authentication = "internal_hashed"/g' /etc/prosody/prosody.cfg.lua
  1717. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/prosody.cfg.lua
  1718. sed -i 's/example.com/$DOMAIN_NAME/g' /etc/prosody/prosody.cfg.lua
  1719. service prosody restart
  1720. touch /home/$MY_USERNAME/README
  1721. if ! grep -q "Your XMPP password is" /home/$MY_USERNAME/README; then
  1722. XMPP_PASSWORD=$(openssl rand -base64 8)
  1723. prosodyctl register $MY_USERNAME $DOMAIN_NAME $XMPP_PASSWORD
  1724. echo "Your XMPP password is: $XMPP_PASSWORD" >> /home/$MY_USERNAME/README
  1725. echo 'You can change it with: ' >> /home/$MY_USERNAME/README
  1726. echo '' >> /home/$MY_USERNAME/README
  1727. echo " prosodyctl passwd $MY_USERNAME@$DOMAIN_NAME" >> /home/$MY_USERNAME/README
  1728. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  1729. fi
  1730. echo 'install_xmpp' >> $COMPLETION_FILE
  1731. }
  1732. function install_irc_server {
  1733. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1734. return
  1735. fi
  1736. if grep -Fxq "install_irc_server" $COMPLETION_FILE; then
  1737. return
  1738. fi
  1739. apt-get -y --force-yes install ngircd
  1740. if [ ! "/etc/ssl/private/ngircd.key" ]; then
  1741. makecert ngircd
  1742. fi
  1743. echo '**************************************************' > /etc/ngircd/motd
  1744. echo '* F R E E D O M B O N E I R C *' >> /etc/ngircd/motd
  1745. echo '* *' >> /etc/ngircd/motd
  1746. echo '* Freedom in the Cloud *' >> /etc/ngircd/motd
  1747. echo '**************************************************' >> /etc/ngircd/motd
  1748. sed -i 's|MotdFile = /etc/ngircd/ngircd.motd|MotdFile = /etc/ngircd/motd|g' /etc/ngircd/ngircd.conf
  1749. sed -i "s/irc@irc.example.com/$MY_USERNAME@$DOMAIN_NAME/g" /etc/ngircd/ngircd.conf
  1750. sed -i "s/irc.example.net/$DOMAIN_NAME/g" /etc/ngircd/ngircd.conf
  1751. sed -i "s|Yet another IRC Server running on Debian GNU/Linux|IRC Server of $DOMAIN_NAME|g" /etc/ngircd/ngircd.conf
  1752. sed -i 's/;Password = wealllikedebian/Password =/g' /etc/ngircd/ngircd.conf
  1753. sed -i 's|;CertFile = /etc/ssl/certs/server.crt|CertFile = /etc/ssl/certs/ngircd.crt|g' /etc/ngircd/ngircd.conf
  1754. sed -i 's|;DHFile = /etc/ngircd/dhparams.pem|DHFile = /etc/ssl/certs/ngircd.dhparam|g' /etc/ngircd/ngircd.conf
  1755. sed -i 's|;KeyFile = /etc/ssl/private/server.key|KeyFile = /etc/ssl/private/ngircd.key|g' /etc/ngircd/ngircd.conf
  1756. sed -i 's/;Ports = 6697, 9999/Ports = 6697, 9999/g' /etc/ngircd/ngircd.conf
  1757. sed -i 's/;Name = #ngircd/Name = #freedombone/g' /etc/ngircd/ngircd.conf
  1758. sed -i 's/;Topic = Our ngircd testing channel/Topic = Freedombone chat channel/g' /etc/ngircd/ngircd.conf
  1759. sed -i 's/;MaxUsers = 23/MaxUsers = 23/g' /etc/ngircd/ngircd.conf
  1760. sed -i 's|;KeyFile = /etc/ngircd/#chan.key|KeyFile = /etc/ngircd/#freedombone.key|g' /etc/ngircd/ngircd.conf
  1761. sed -i 's/;CloakHost = cloaked.host/CloakHost = cloaked.host/g' /etc/ngircd/ngircd.conf
  1762. IRC_SALT=$(openssl rand -base64 32)
  1763. IRC_OPERATOR_PASSWORD=$(openssl rand -base64 8)
  1764. sed -i "s|;CloakHostSalt = abcdefghijklmnopqrstuvwxyz|CloakHostSalt = $IRC_SALT|g" /etc/ngircd/ngircd.conf
  1765. sed -i 's/;ConnectIPv4 = yes/ConnectIPv4 = yes/g' /etc/ngircd/ngircd.conf
  1766. sed -i 's/;MorePrivacy = no/MorePrivacy = yes/g' /etc/ngircd/ngircd.conf
  1767. sed -i 's/;RequireAuthPing = no/RequireAuthPing = no/g' /etc/ngircd/ngircd.conf
  1768. sed -i "s/;Name = TheOper/Name = $MY_USERNAME/g" /etc/ngircd/ngircd.conf
  1769. sed -i "s/;Password = ThePwd/Password = $IRC_OPERATOR_PASSWORD/g" /etc/ngircd/ngircd.conf
  1770. service ngircd restart
  1771. echo 'install_irc_server' >> $COMPLETION_FILE
  1772. }
  1773. function install_wiki {
  1774. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1775. return
  1776. fi
  1777. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  1778. return
  1779. fi
  1780. # if this is exclusively a writer setup
  1781. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  1782. WIKI_DOMAIN_NAME=$DOMAIN_NAME
  1783. WIKI_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  1784. fi
  1785. if [ ! $WIKI_DOMAIN_NAME ]; then
  1786. return
  1787. fi
  1788. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  1789. if [ ! $SYSTEM_TYPE ]; then
  1790. return
  1791. fi
  1792. fi
  1793. apt-get -y --force-yes install php5 php5-gd php-xml-parser php5-intl wget
  1794. apt-get -y --force-yes install php5-sqlite php5-mysql smbclient curl libcurl3 php5-curl bzip2
  1795. if [ ! -d /var/www/$WIKI_DOMAIN_NAME ]; then
  1796. mkdir /var/www/$WIKI_DOMAIN_NAME
  1797. fi
  1798. if [ ! -d /var/www/$WIKI_DOMAIN_NAME/htdocs ]; then
  1799. mkdir /var/www/$WIKI_DOMAIN_NAME/htdocs
  1800. fi
  1801. if [ ! -f /etc/ssl/private/$WIKI_DOMAIN_NAME.key ]; then
  1802. makecert $WIKI_DOMAIN_NAME
  1803. fi
  1804. # download the archive
  1805. cd $INSTALL_DIR
  1806. if [ ! -f $INSTALL_DIR/$WIKI_ARCHIVE ]; then
  1807. wget $WIKI_DOWNLOAD
  1808. fi
  1809. if [ ! -f $INSTALL_DIR/$WIKI_ARCHIVE ]; then
  1810. echo 'Dokuwiki could not be downloaded. Check that it exists at '
  1811. echo $WIKI_DOWNLOAD
  1812. echo 'And if neccessary update the version number and hash within this script'
  1813. exit 18
  1814. fi
  1815. # Check that the hash is correct
  1816. CHECKSUM=$(sha256sum $WIKI_ARCHIVE | awk -F ' ' '{print $1}')
  1817. if [[ $CHECKSUM != $WIKI_HASH ]]; then
  1818. echo 'The sha256 hash of the Dokuwiki download is incorrect. Possibly the file may have been tampered with. Check the hash on the Dokuwiki web site.'
  1819. echo $CHECKSUM
  1820. echo $WIKI_HASH
  1821. exit 21
  1822. fi
  1823. tar -xzvf $WIKI_ARCHIVE
  1824. cd dokuwiki-*
  1825. mv * /var/www/$WIKI_DOMAIN_NAME/htdocs/
  1826. chmod -R 755 /var/www/$WIKI_DOMAIN_NAME/htdocs
  1827. chown -R www-data:www-data /var/www/$WIKI_DOMAIN_NAME/htdocs
  1828. if ! grep -q "video/ogg" /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then
  1829. echo 'ogv video/ogg' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  1830. echo 'mp4 video/mp4' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  1831. echo 'webm video/webm' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  1832. fi
  1833. echo 'server {' > /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1834. echo ' listen 80;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1835. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1836. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1837. echo " error_log /var/www/$WIKI_DOMAIN_NAME/error.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1838. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1839. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1840. echo ' # Uncomment this if you need to redirect HTTP to HTTPS' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1841. echo ' #rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1842. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1843. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1844. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1845. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1846. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1847. echo ' location ~ \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1848. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1849. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1850. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1851. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1852. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1853. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1854. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1855. echo 'server {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1856. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1857. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1858. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1859. echo " error_log /var/www/$WIKI_DOMAIN_NAME/error_ssl.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1860. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1861. echo ' charset utf-8;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1862. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1863. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1864. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1865. echo ' ssl on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1866. echo " ssl_certificate /etc/ssl/certs/$WIKI_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1867. echo " ssl_certificate_key /etc/ssl/private/$WIKI_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1868. echo " ssl_dhparam /etc/ssl/certs/$WIKI_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1869. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1870. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1871. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1872. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1873. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1874. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1875. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1876. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1877. echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1878. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1879. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1880. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1881. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1882. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1883. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1884. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1885. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1886. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1887. echo ' allow all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1888. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1889. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1890. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1891. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1892. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1893. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1894. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1895. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1896. echo ' expires 30d;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1897. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1898. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1899. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1900. echo ' # block these file types' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1901. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1902. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1903. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1904. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1905. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1906. echo ' # or a unix socket' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1907. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1908. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1909. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1910. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1911. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1912. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1913. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1914. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1915. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1916. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1917. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1918. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1919. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1920. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1921. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1922. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1923. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1924. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1925. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1926. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1927. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1928. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1929. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1930. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1931. echo ' #deny access to store' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1932. echo ' location ~ /store {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1933. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1934. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1935. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1936. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1937. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1938. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1939. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1940. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1941. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  1942. configure_php
  1943. nginx_ensite $WIKI_DOMAIN_NAME
  1944. service php5-fpm restart
  1945. service nginx restart
  1946. # update the dynamic DNS
  1947. if [ $WIKI_FREEDNS_SUBDOMAIN_CODE ]; then
  1948. if [[ $WIKI_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  1949. if ! grep -q "$WIKI_DOMAIN_NAME" /usr/bin/dynamicdns; then
  1950. echo "# $WIKI_DOMAIN_NAME" >> /usr/bin/dynamicdns
  1951. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$WIKI_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  1952. fi
  1953. fi
  1954. else
  1955. echo 'WARNING: No freeDNS subdomain code given for wiki installation. It is assumed that you are using some other dynamic DNS provider.'
  1956. fi
  1957. # add some post-install instructions
  1958. if ! grep -q "Once you have set up the wiki" /home/$MY_USERNAME/README; then
  1959. echo '' >> /home/$MY_USERNAME/README
  1960. echo 'Once you have set up the wiki then remove the install file:' >> /home/$MY_USERNAME/README
  1961. echo '' >> /home/$MY_USERNAME/README
  1962. echo " rm /var/www/$WIKI_DOMAIN_NAME/htdocs/install.php" >> /home/$MY_USERNAME/README
  1963. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  1964. fi
  1965. echo 'install_wiki' >> $COMPLETION_FILE
  1966. }
  1967. function install_blog {
  1968. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1969. return
  1970. fi
  1971. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  1972. return
  1973. fi
  1974. # if this is exclusively a writer setup
  1975. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  1976. WIKI_DOMAIN_NAME=$DOMAIN_NAME
  1977. WIKI_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  1978. fi
  1979. if [ ! $WIKI_DOMAIN_NAME ]; then
  1980. return
  1981. fi
  1982. apt-get -y --force-yes install unzip
  1983. # download mnml-blog
  1984. cd $INSTALL_DIR
  1985. rm -f latest
  1986. wget $WIKI_MNML_BLOG_ADDON
  1987. if [ ! -f "$INSTALL_DIR/latest" ]; then
  1988. echo 'Dokuwiki mnml-blog addon could not be downloaded. Check the Dokuwiki web site and alter WIKI_MNML_BLOG_ADDON at the top of this script as needed.'
  1989. exit 21
  1990. fi
  1991. mv latest $WIKI_MNML_BLOG_ADDON_ARCHIVE
  1992. # Check that the mnml-blog download hash is correct
  1993. CHECKSUM=$(sha256sum $WIKI_MNML_BLOG_ADDON_ARCHIVE | awk -F ' ' '{print $1}')
  1994. if [[ $CHECKSUM != $WIKI_MNML_BLOG_ADDON_HASH ]]; then
  1995. echo 'The sha256 hash of the mnml-blog download is incorrect. Possibly the file may have been tampered with. Check the hash on the Dokuwiki mnmlblog web site and alter WIKI_MNML_BLOG_ADDON_HASH if needed.'
  1996. echo $CHECKSUM
  1997. echo $WIKI_MNML_BLOG_ADDON_HASH
  1998. exit 22
  1999. fi
  2000. # download blogTNG
  2001. wget $WIKI_BLOGTNG_ADDON
  2002. if [ ! -f "$INSTALL_DIR/master" ]; then
  2003. echo 'Dokuwiki blogTNG addon could not be downloaded. Check the Dokuwiki web site and alter WIKI_BLOGTNG_ADDON at the top of this script as needed.'
  2004. exit 23
  2005. fi
  2006. mv master $WIKI_BLOGTNG_ADDON_ARCHIVE
  2007. # Check that the blogTNG hash is correct
  2008. CHECKSUM=$(sha256sum $WIKI_BLOGTNG_ADDON_ARCHIVE | awk -F ' ' '{print $1}')
  2009. if [[ $CHECKSUM != $WIKI_BLOGTNG_ADDON_HASH ]]; then
  2010. echo 'The sha256 hash of the blogTNG download is incorrect. Possibly the file may have been tampered with. Check the hash on the Dokuwiki blogTNG web site and alter WIKI_BLOGTNG_ADDON_HASH if needed.'
  2011. echo $CHECKSUM
  2012. echo $WIKI_BLOGTNG_ADDON_HASH
  2013. exit 24
  2014. fi
  2015. # download dokuwiki sqlite plugin
  2016. wget $WIKI_SQLITE_ADDON
  2017. if [ ! -f "$INSTALL_DIR/master" ]; then
  2018. echo 'Dokuwiki sqlite addon could not be downloaded. Check the Dokuwiki web site and alter WIKI_SQLITE_ADDON at the top of this script as needed.'
  2019. exit 25
  2020. fi
  2021. mv master $WIKI_SQLITE_ADDON_ARCHIVE
  2022. # Check that the sqlite plugin hash is correct
  2023. CHECKSUM=$(sha256sum $WIKI_SQLITE_ADDON_ARCHIVE | awk -F ' ' '{print $1}')
  2024. if [[ $CHECKSUM != $WIKI_SQLITE_ADDON_HASH ]]; then
  2025. echo 'The sha256 hash of the Dokuwiki sqlite download is incorrect. Possibly the file may have been tampered with. Check the hash on the Dokuwiki sqlite plugin web site and alter WIKI_SQLITE_ADDON_HASH if needed.'
  2026. echo $CHECKSUM
  2027. echo $WIKI_SQLITE_ADDON_HASH
  2028. exit 26
  2029. fi
  2030. # install dokuwiki sqlite plugin
  2031. tar -xzvf $WIKI_SQLITE_ADDON_ARCHIVE
  2032. if [ -d "$INSTALL_DIR/sqlite" ]; then
  2033. rm -rf $INSTALL_DIR/sqlite
  2034. fi
  2035. mv $WIKI_SQLITE_ADDON_NAME sqlite
  2036. cp -r sqlite /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/plugins/
  2037. # install blogTNG
  2038. if [ -d "$INSTALL_DIR/$WIKI_BLOGTNG_ADDON_NAME" ]; then
  2039. rm -rf $INSTALL_DIR/$WIKI_BLOGTNG_ADDON_NAME
  2040. fi
  2041. unzip $WIKI_BLOGTNG_ADDON_ARCHIVE
  2042. if [ -d "$INSTALL_DIR/blogtng" ]; then
  2043. rm -rf $INSTALL_DIR/blogtng
  2044. fi
  2045. mv $WIKI_BLOGTNG_ADDON_NAME blogtng
  2046. cp -r blogtng /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/plugins/
  2047. # install mnml-blog
  2048. tar -xzvf $WIKI_MNML_BLOG_ADDON_ARCHIVE
  2049. cp -r mnml-blog /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/tpl
  2050. cp -r /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/tpl/mnml-blog/blogtng-tpl/* /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/plugins/blogtng/tpl/default/
  2051. # make a "freedombone" template so that if the default template gets
  2052. # changed after an upgrade to blogTNG this doesn't necessarily change the appearance
  2053. cp -r /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/plugins/blogtng/tpl/default /var/www/$WIKI_DOMAIN_NAME/htdocs/lib/plugins/blogtng/tpl/freedombone
  2054. if ! grep -q "To set up your blog" /home/$MY_USERNAME/README; then
  2055. echo '' >> /home/$MY_USERNAME/README
  2056. echo "To set up your blog go to" >> /home/$MY_USERNAME/README
  2057. echo "https://$WIKI_DOMAIN_NAME/doku.php?id=start&do=admin&page=config" >> /home/$MY_USERNAME/README
  2058. echo 'and set the template to mnml-blog' >> /home/$MY_USERNAME/README
  2059. echo '' >> /home/$MY_USERNAME/README
  2060. echo 'To edit things on the right hand sidebar (links, blogroll, etc) go to' >> /home/$MY_USERNAME/README
  2061. echo "https://$WIKI_DOMAIN_NAME/doku.php?id=wiki:navigation_sidebar" >> /home/$MY_USERNAME/README
  2062. echo 'and edit the page' >> /home/$MY_USERNAME/README
  2063. echo '' >> /home/$MY_USERNAME/README
  2064. echo 'To edit things to a header bar (home, contacts, etc) go to' >> /home/$MY_USERNAME/README
  2065. echo "https://$WIKI_DOMAIN_NAME/doku.php?id=wiki:navigation_header" >> /home/$MY_USERNAME/README
  2066. echo 'and select the "create this page" at the bottom.' >> /home/$MY_USERNAME/README
  2067. echo 'You can then add somethething like:' >> /home/$MY_USERNAME/README
  2068. echo ' * [[:start|Home]]' >> /home/$MY_USERNAME/README
  2069. echo ' * [[:wiki|Wiki]]' >> /home/$MY_USERNAME/README
  2070. echo ' * [[:contact|Contact]]' >> /home/$MY_USERNAME/README
  2071. echo "Go to https://$WIKI_DOMAIN_NAME/doku.php?id=start&do=admin&page=config" >> /home/$MY_USERNAME/README
  2072. echo 'and check "Show header navigation" to ensure that the header shows' >> /home/$MY_USERNAME/README
  2073. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2074. fi
  2075. echo 'install_blog' >> $COMPLETION_FILE
  2076. }
  2077. function get_mariadb_password {
  2078. if [ -f /home/$MY_USERNAME/README ]; then
  2079. if grep -q "MariaDB password" /home/$MY_USERNAME/README; then
  2080. MARIADB_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  2081. fi
  2082. fi
  2083. }
  2084. function get_mariadb_gnusocial_admin_password {
  2085. if [ -f /home/$MY_USERNAME/README ]; then
  2086. if grep -q "MariaDB gnusocial admin password" /home/$MY_USERNAME/README; then
  2087. MICROBLOG_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB gnusocial admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  2088. fi
  2089. fi
  2090. }
  2091. function get_mariadb_redmatrix_admin_password {
  2092. if [ -f /home/$MY_USERNAME/README ]; then
  2093. if grep -q "MariaDB Red Matrix admin password" /home/$MY_USERNAME/README; then
  2094. REDMATRIX_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB Red Matrix admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  2095. fi
  2096. fi
  2097. }
  2098. function install_mariadb {
  2099. if grep -Fxq "install_mariadb" $COMPLETION_FILE; then
  2100. return
  2101. fi
  2102. apt-get -y --force-yes install python-software-properties debconf-utils
  2103. apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
  2104. add-apt-repository 'deb http://mariadb.biz.net.id//repo/10.1/debian sid main'
  2105. apt-get -y --force-yes install software-properties-common
  2106. apt-get -y update
  2107. get_mariadb_password
  2108. if [ ! $MARIADB_PASSWORD ]; then
  2109. MARIADB_PASSWORD=$(openssl rand -base64 32)
  2110. echo '' >> /home/$MY_USERNAME/README
  2111. echo "Your MariaDB password is: $MARIADB_PASSWORD" >> /home/$MY_USERNAME/README
  2112. echo '' >> /home/$MY_USERNAME/README
  2113. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2114. fi
  2115. debconf-set-selections <<< "mariadb-server mariadb-server/root_password password $MARIADB_PASSWORD"
  2116. debconf-set-selections <<< "mariadb-server mariadb-server/root_password_again password $MARIADB_PASSWORD"
  2117. apt-get -y --force-yes install mariadb-server
  2118. mysqladmin -u root password "$MARIADB_PASSWORD"
  2119. echo 'install_mariadb' >> $COMPLETION_FILE
  2120. }
  2121. function install_gnu_social {
  2122. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  2123. return
  2124. fi
  2125. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2126. return
  2127. fi
  2128. if [ ! $MICROBLOG_DOMAIN_NAME ]; then
  2129. return
  2130. fi
  2131. install_mariadb
  2132. get_mariadb_password
  2133. apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git
  2134. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME ]; then
  2135. mkdir /var/www/$MICROBLOG_DOMAIN_NAME
  2136. fi
  2137. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME/htdocs ]; then
  2138. mkdir /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  2139. fi
  2140. if [ ! -f /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/index.php ]; then
  2141. cd $INSTALL_DIR
  2142. git clone $MICROBLOG_REPO gnusocial
  2143. rm -rf /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  2144. mv gnusocial /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  2145. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  2146. chown www-data:www-data /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  2147. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/avatar
  2148. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/background
  2149. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/file
  2150. chmod +x /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php
  2151. fi
  2152. get_mariadb_gnusocial_admin_password
  2153. if [ ! $MICROBLOG_ADMIN_PASSWORD ]; then
  2154. MICROBLOG_ADMIN_PASSWORD=$(openssl rand -base64 32)
  2155. echo '' >> /home/$MY_USERNAME/README
  2156. echo "Your MariaDB gnusocial admin password is: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  2157. echo '' >> /home/$MY_USERNAME/README
  2158. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2159. fi
  2160. echo "create database gnusocial;
  2161. CREATE USER 'gnusocialadmin'@'localhost' IDENTIFIED BY '$MICROBLOG_ADMIN_PASSWORD';
  2162. GRANT ALL PRIVILEGES ON gnusocial.* TO 'gnusocialadmin'@'localhost';
  2163. quit" > $INSTALL_DIR/batch.sql
  2164. chmod 600 $INSTALL_DIR/batch.sql
  2165. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  2166. shred -zu $INSTALL_DIR/batch.sql
  2167. if [ ! -f "/etc/aliases" ]; then
  2168. touch /etc/aliases
  2169. fi
  2170. if grep -q "www-data: root" /etc/aliases; then
  2171. echo 'www-data: root' >> /etc/aliases
  2172. fi
  2173. if grep -q "/var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" /etc/aliases; then
  2174. echo "*: /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" >> /etc/aliases
  2175. fi
  2176. newaliases
  2177. # update the dynamic DNS
  2178. if [ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE ]; then
  2179. if [[ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  2180. if ! grep -q "$MICROBLOG_DOMAIN_NAME" /usr/bin/dynamicdns; then
  2181. echo "# $MICROBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
  2182. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MICROBLOG_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  2183. fi
  2184. fi
  2185. else
  2186. echo 'WARNING: No freeDNS subdomain code given for microblog. It is assumed that you are using some other dynamic DNS provider.'
  2187. fi
  2188. echo 'server {' > /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2189. echo ' listen 80;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2190. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2191. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2192. echo " error_log /var/www/$MICROBLOG_DOMAIN_NAME/error.log;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2193. echo ' index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2194. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2195. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2196. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2197. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2198. echo 'server {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2199. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2200. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2201. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2202. echo " error_log /var/www/$MICROBLOG_DOMAIN_NAME/error_ssl.log;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2203. echo ' index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2204. echo ' charset utf-8;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2205. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2206. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2207. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2208. echo ' ssl on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2209. echo " ssl_certificate /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2210. echo " ssl_certificate_key /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2211. echo " ssl_dhparam /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2212. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2213. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2214. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2215. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2216. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2217. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2218. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2219. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2220. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2221. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2222. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2223. echo ' location / {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2224. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2225. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2226. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2227. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2228. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2229. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2230. echo ' allow all;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2231. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2232. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2233. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2234. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2235. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2236. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2237. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2238. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2239. echo ' expires 30d;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2240. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2241. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2242. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2243. echo ' # block these file types' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2244. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2245. echo ' deny all;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2246. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2247. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2248. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2249. echo ' # or a unix socket' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2250. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2251. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2252. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2253. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2254. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2255. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2256. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2257. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2258. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2259. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2260. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2261. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2262. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2263. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2264. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2265. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2266. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2267. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2268. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2269. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2270. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2271. echo ' deny all;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2272. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2273. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2274. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2275. echo ' deny all;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2276. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2277. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  2278. configure_php
  2279. if [ ! -f /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key ]; then
  2280. makecert $MICROBLOG_DOMAIN_NAME
  2281. fi
  2282. nginx_ensite $MICROBLOG_DOMAIN_NAME
  2283. service php5-fpm restart
  2284. service nginx restart
  2285. # some post-install instructions for the user
  2286. if ! grep -q "To set up your microblog" /home/$MY_USERNAME/README; then
  2287. echo '' >> /home/$MY_USERNAME/README
  2288. echo "To set up your microblog go to" >> /home/$MY_USERNAME/README
  2289. echo "https://$MICROBLOG_DOMAIN_NAME/install.php" >> /home/$MY_USERNAME/README
  2290. echo 'and enter the following settings:' >> /home/$MY_USERNAME/README
  2291. echo ' - Set a name for the site' >> /home/$MY_USERNAME/README
  2292. echo ' - Server SSL: enable' >> /home/$MY_USERNAME/README
  2293. echo ' - Hostname: localhost' >> /home/$MY_USERNAME/README
  2294. echo ' - Type: MySql/MariaDB' >> /home/$MY_USERNAME/README
  2295. echo ' - Name: gnusocial' >> /home/$MY_USERNAME/README
  2296. echo ' - DB username: gnusocialadmin' >> /home/$MY_USERNAME/README
  2297. echo " - DB Password; $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  2298. echo " - Administrator nickname: $MY_USERNAME" >> /home/$MY_USERNAME/README
  2299. echo " - Administrator password: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  2300. echo ' - Subscribe to announcements: ticked' >> /home/$MY_USERNAME/README
  2301. echo ' - Site profile: Community' >> /home/$MY_USERNAME/README
  2302. echo '' >> /home/$MY_USERNAME/README
  2303. echo "Navigate to https://$MICROBLOG_DOMAIN_NAME and you can then " >> /home/$MY_USERNAME/README
  2304. echo 'complete the configuration via the *Admin* section on the header' >> /home/$MY_USERNAME/README
  2305. echo 'bar. Some recommended admin settings are:' >> /home/$MY_USERNAME/README
  2306. echo '' >> /home/$MY_USERNAME/README
  2307. echo 'Under the *Site* settings:' >> /home/$MY_USERNAME/README
  2308. echo ' Text limit: 140' >> /home/$MY_USERNAME/README
  2309. echo ' Dupe Limit: 60000' >> /home/$MY_USERNAME/README
  2310. echo '' >> /home/$MY_USERNAME/README
  2311. echo 'Under the *User* settings:' >> /home/$MY_USERNAME/README
  2312. echo ' Bio limit: 1000' >> /home/$MY_USERNAME/README
  2313. echo '' >> /home/$MY_USERNAME/README
  2314. echo 'Under the *Access* settings:' >> /home/$MY_USERNAME/README
  2315. echo ' /Invite only/ ticked' >> /home/$MY_USERNAME/README
  2316. echo '' >> /home/$MY_USERNAME/README
  2317. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2318. fi
  2319. echo 'install_gnu_social' >> $COMPLETION_FILE
  2320. }
  2321. function install_redmatrix {
  2322. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  2323. return
  2324. fi
  2325. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2326. return
  2327. fi
  2328. # if this is exclusively a writer setup
  2329. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2330. REDMATRIX_DOMAIN_NAME=$DOMAIN_NAME
  2331. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  2332. fi
  2333. if [ ! $REDMATRIX_DOMAIN_NAME ]; then
  2334. return
  2335. fi
  2336. install_mariadb
  2337. get_mariadb_password
  2338. apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git git
  2339. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME ]; then
  2340. mkdir /var/www/$REDMATRIX_DOMAIN_NAME
  2341. fi
  2342. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs ]; then
  2343. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  2344. fi
  2345. if [ ! -f /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/index.php ]; then
  2346. cd $INSTALL_DIR
  2347. git clone $REDMATRIX_REPO redmatrix
  2348. rm -rf /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  2349. mv redmatrix /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  2350. chown -R www-data:www-data /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  2351. git clone $REDMATRIX_ADDONS_REPO /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/addon
  2352. fi
  2353. get_mariadb_redmatrix_admin_password
  2354. if [ ! $REDMATRIX_ADMIN_PASSWORD ]; then
  2355. REDMATRIX_ADMIN_PASSWORD=$(openssl rand -base64 32)
  2356. echo '' >> /home/$MY_USERNAME/README
  2357. echo "Your MariaDB Red Matrix admin password is: $REDMATRIX_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  2358. echo '' >> /home/$MY_USERNAME/README
  2359. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2360. fi
  2361. echo "create database redmatrix;
  2362. CREATE USER 'redmatrixadmin'@'localhost' IDENTIFIED BY '$REDMATRIX_ADMIN_PASSWORD';
  2363. GRANT ALL PRIVILEGES ON redmatrix.* TO 'redmatrixadmin'@'localhost';
  2364. quit" > $INSTALL_DIR/batch.sql
  2365. chmod 600 $INSTALL_DIR/batch.sql
  2366. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  2367. shred -zu $INSTALL_DIR/batch.sql
  2368. if ! grep -q "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs" /etc/crontab; then
  2369. echo "12,22,32,42,52 * * * * root cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs; /usr/bin/timeout 240 /usr/bin/php include/poller.php" >> /etc/crontab
  2370. fi
  2371. # update the dynamic DNS
  2372. if [ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE ]; then
  2373. if [[ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  2374. if ! grep -q "$REDMATRIX_DOMAIN_NAME" /usr/bin/dynamicdns; then
  2375. echo "# $REDMATRIX_DOMAIN_NAME" >> /usr/bin/dynamicdns
  2376. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$REDMATRIX_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  2377. fi
  2378. fi
  2379. else
  2380. echo 'WARNING: No freeDNS code given for Red Matrix. It is assumed that you are using some other dynamic DNS provider.'
  2381. fi
  2382. echo 'server {' > /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2383. echo ' listen 80;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2384. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2385. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2386. echo " error_log /var/www/$REDMATRIX_DOMAIN_NAME/error.log;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2387. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2388. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2389. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2390. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2391. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2392. echo 'server {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2393. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2394. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2395. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2396. echo " error_log /var/www/$REDMATRIX_DOMAIN_NAME/error_ssl.log;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2397. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2398. echo ' charset utf-8;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2399. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2400. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2401. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2402. echo ' ssl on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2403. echo " ssl_certificate /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2404. echo " ssl_certificate_key /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2405. echo " ssl_dhparam /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2406. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2407. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2408. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2409. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2410. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2411. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2412. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2413. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2414. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2415. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2416. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2417. echo ' location / {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2418. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2419. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2420. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2421. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2422. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2423. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2424. echo ' allow all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2425. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2426. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2427. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2428. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2429. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2430. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2431. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2432. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2433. echo ' expires 30d;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2434. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2435. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2436. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2437. echo ' # block these file types' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2438. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2439. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2440. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2441. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2442. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2443. echo ' # or a unix socket' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2444. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2445. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2446. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2447. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2448. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2449. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2450. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2451. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2452. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2453. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2454. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2455. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2456. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2457. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2458. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2459. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2460. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2461. echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2462. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2463. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2464. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2465. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2466. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2467. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2468. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2469. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2470. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2471. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2472. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  2473. configure_php
  2474. if [ ! -f /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key ]; then
  2475. makecert $REDMATRIX_DOMAIN_NAME
  2476. fi
  2477. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3 ]; then
  2478. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  2479. fi
  2480. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data] ]; then
  2481. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]
  2482. fi
  2483. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3 ]; then
  2484. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3
  2485. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3
  2486. fi
  2487. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl
  2488. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  2489. nginx_ensite $REDMATRIX_DOMAIN_NAME
  2490. service php5-fpm restart
  2491. service nginx restart
  2492. service cron restart
  2493. # some post-install instructions for the user
  2494. if ! grep -q "To set up your Red Matrix" /home/$MY_USERNAME/README; then
  2495. echo '' >> /home/$MY_USERNAME/README
  2496. echo "To set up your Red Matrix site go to" >> /home/$MY_USERNAME/README
  2497. echo "https://$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  2498. echo 'You will need to have a non self-signed SSL certificate in order' >> /home/$MY_USERNAME/README
  2499. echo "to use Red Matrix. Put the public certificate in /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt" >> /home/$MY_USERNAME/README
  2500. echo "and the private certificate in /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key." >> /home/$MY_USERNAME/README
  2501. echo 'If there is an intermediate certificate needed (such as with StartSSL) then' >> /home/$MY_USERNAME/README
  2502. echo 'this will need to be concatenated onto the end of the crt file, like this:' >> /home/$MY_USERNAME/README
  2503. echo '' >> /home/$MY_USERNAME/README
  2504. echo " cat /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt /etc/ssl/chains/startssl-sub.class1.server.ca.pem > /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.bundle.crt" >> /home/$MY_USERNAME/README
  2505. echo '' >> /home/$MY_USERNAME/README
  2506. echo "Then change ssl_certificate to /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.bundle.crt" >> /home/$MY_USERNAME/README
  2507. echo "within /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  2508. echo '' >> /home/$MY_USERNAME/README
  2509. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2510. fi
  2511. echo 'install_redmatrix' >> $COMPLETION_FILE
  2512. }
  2513. function script_for_attaching_usb_drive {
  2514. if grep -Fxq "script_for_attaching_usb_drive" $COMPLETION_FILE; then
  2515. return
  2516. fi
  2517. echo '#!/bin/bash' > /usr/bin/attach-music
  2518. echo "if [ -d $USB_MOUNT ]; then" >> /usr/bin/attach-music
  2519. echo " umount $USB_MOUNT" >> /usr/bin/attach-music
  2520. echo 'fi' >> /usr/bin/attach-music
  2521. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/attach-music
  2522. echo " mkdir $USB_MOUNT" >> /usr/bin/attach-music
  2523. echo 'fi' >> /usr/bin/attach-music
  2524. echo "mount /dev/sda1 $USB_MOUNT" >> /usr/bin/attach-music
  2525. echo "chown root:root $USB_MOUNT" >> /usr/bin/attach-music
  2526. echo "chown -R minidlna:minidlna $USB_MOUNT/*" >> /usr/bin/attach-music
  2527. echo 'minidlnad -R' >> /usr/bin/attach-music
  2528. chmod +x /usr/bin/attach-music
  2529. ln -s /usr/bin/attach-music /usr/bin/attach-usb
  2530. ln -s /usr/bin/attach-music /usr/bin/attach-videos
  2531. ln -s /usr/bin/attach-music /usr/bin/attach-pictures
  2532. ln -s /usr/bin/attach-music /usr/bin/attach-media
  2533. echo '#!/bin/bash' > /usr/bin/remove-music
  2534. echo "if [ -d $USB_MOUNT ]; then" >> /usr/bin/remove-music
  2535. echo " umount $USB_MOUNT" >> /usr/bin/remove-music
  2536. echo " rm -rf $USB_MOUNT" >> /usr/bin/remove-music
  2537. echo 'fi' >> /usr/bin/remove-music
  2538. chmod +x /usr/bin/remove-music
  2539. ln -s /usr/bin/remove-music /usr/bin/detach-music
  2540. ln -s /usr/bin/remove-music /usr/bin/detach-usb
  2541. ln -s /usr/bin/remove-music /usr/bin/remove-usb
  2542. ln -s /usr/bin/remove-music /usr/bin/detach-media
  2543. ln -s /usr/bin/remove-music /usr/bin/remove-media
  2544. ln -s /usr/bin/remove-music /usr/bin/detach-videos
  2545. ln -s /usr/bin/remove-music /usr/bin/remove-videos
  2546. ln -s /usr/bin/remove-music /usr/bin/detach-pictures
  2547. ln -s /usr/bin/remove-music /usr/bin/remove-pictures
  2548. echo 'script_for_attaching_usb_drive' >> $COMPLETION_FILE
  2549. }
  2550. function install_dlna_server {
  2551. if grep -Fxq "install_dlna_server" $COMPLETION_FILE; then
  2552. return
  2553. fi
  2554. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2555. return
  2556. fi
  2557. apt-get -y --force-yes install minidlna
  2558. sed -i "s|media_dir=/var/lib/minidlna|media_dir=A,/home/$MY_USERNAME/Music|g" /etc/minidlna.conf
  2559. if ! grep -q "/home/$MY_USERNAME/Pictures" /etc/minidlna.conf; then
  2560. echo "media_dir=P,/home/$MY_USERNAME/Pictures" >> /etc/minidlna.conf
  2561. fi
  2562. if ! grep -q "/home/$MY_USERNAME/Videos" /etc/minidlna.conf; then
  2563. echo "media_dir=V,/home/$MY_USERNAME/Videos" >> /etc/minidlna.conf
  2564. fi
  2565. if ! grep -q "$USB_MOUNT/Music" /etc/minidlna.conf; then
  2566. echo "media_dir=A,$USB_MOUNT/Music" >> /etc/minidlna.conf
  2567. fi
  2568. if ! grep -q "$USB_MOUNT/Pictures" /etc/minidlna.conf; then
  2569. echo "media_dir=P,$USB_MOUNT/Pictures" >> /etc/minidlna.conf
  2570. fi
  2571. if ! grep -q "$USB_MOUNT/Videos" /etc/minidlna.conf; then
  2572. echo "media_dir=V,$USB_MOUNT/Videos" >> /etc/minidlna.conf
  2573. fi
  2574. sed -i 's/#root_container=./root_container=B/g' /etc/minidlna.conf
  2575. sed -i 's/#network_interface=/network_interface=eth0/g' /etc/minidlna.conf
  2576. sed -i 's/#friendly_name=/friendly_name="Freedombone Media"/g' /etc/minidlna.conf
  2577. sed -i 's|#db_dir=/var/cache/minidlna|db_dir=/var/cache/minidlna|g' /etc/minidlna.conf
  2578. sed -i 's/#inotify=yes/inotify=yes/g' /etc/minidlna.conf
  2579. sed -i "s|#presentation_url=/|presentation_url=http://localhost:8200|g" /etc/minidlna.conf
  2580. service minidlna force-reload
  2581. service minidlna reload
  2582. echo 'install_dlna_server' >> $COMPLETION_FILE
  2583. }
  2584. function install_mediagoblin {
  2585. # These instructions don't work and need fixing
  2586. return
  2587. if grep -Fxq "install_mediagoblin" $COMPLETION_FILE; then
  2588. return
  2589. fi
  2590. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2591. return
  2592. fi
  2593. # if this is exclusively a writer setup
  2594. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2595. MEDIAGOBLIN_DOMAIN_NAME=$DOMAIN_NAME
  2596. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  2597. fi
  2598. if [ ! $MEDIAGOBLIN_DOMAIN_NAME ]; then
  2599. return
  2600. fi
  2601. apt-get -y --force-yes install git-core python python-dev python-lxml python-imaging python-virtualenv
  2602. apt-get -y --force-yes install python-gst-1.0 libjpeg8-dev sqlite3 libapache2-mod-fcgid gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav python-numpy python-scipy libsndfile1-dev
  2603. apt-get -y --force-yes install postgresql postgresql-client python-psycopg2 python-pip autotools-dev automake
  2604. sudo -u postgres createuser -A -D mediagoblin
  2605. sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin
  2606. adduser --system mediagoblin
  2607. MEDIAGOBLIN_DOMAIN_ROOT="/srv/$MEDIAGOBLIN_DOMAIN_NAME"
  2608. MEDIAGOBLIN_PATH="$MEDIAGOBLIN_DOMAIN_ROOT/mediagoblin"
  2609. MEDIAGOBLIN_PATH_BIN="$MEDIAGOBLIN_PATH/mediagoblin/bin"
  2610. if [ ! -d $MEDIAGOBLIN_DOMAIN_ROOT ]; then
  2611. mkdir -p $MEDIAGOBLIN_DOMAIN_ROOT
  2612. fi
  2613. cd $MEDIAGOBLIN_DOMAIN_ROOT
  2614. chown -hR mediagoblin: $MEDIAGOBLIN_DOMAIN_ROOT
  2615. su -c "cd $MEDIAGOBLIN_DOMAIN_ROOT; git clone git://gitorious.org/mediagoblin/mediagoblin.git" - mediagoblin
  2616. su -c "cd $MEDIAGOBLIN_PATH; git submodule init" - mediagoblin
  2617. su -c "cd $MEDIAGOBLIN_PATH; git submodule update" - mediagoblin
  2618. #su -c 'cd $MEDIAGOBLIN_PATH; ./experimental-bootstrap.sh' - mediagoblin
  2619. #su -c 'cd $MEDIAGOBLIN_PATH; ./configure' - mediagoblin
  2620. #su -c 'cd $MEDIAGOBLIN_PATH; make' - mediagoblin
  2621. su -c "cd $MEDIAGOBLIN_PATH; virtualenv --system-site-packages ." - mediagoblin
  2622. su -c "cd $MEDIAGOBLIN_PATH_BIN; python setup.py develop" - mediagoblin
  2623. su -c "cp $MEDIAGOBLIN_PATH/mediagoblin.ini $MEDIAGOBLIN_PATH/mediagoblin_local.ini" - mediagoblin
  2624. su -c "cp $MEDIAGOBLIN_PATH/paste.ini $MEDIAGOBLIN_PATH/paste_local.ini" - mediagoblin
  2625. # update the dynamic DNS
  2626. if [ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE ]; then
  2627. if [[ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  2628. if ! grep -q "$MEDIAGOBLIN_DOMAIN_NAME" /usr/bin/dynamicdns; then
  2629. echo "# $MEDIAGOBLIN_DOMAIN_NAME" >> /usr/bin/dynamicdns
  2630. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  2631. fi
  2632. fi
  2633. else
  2634. echo 'WARNING: No freeDNS subdomain code given for mediagoblin. It is assumed that you are using some other dynamic DNS provider.'
  2635. fi
  2636. # see https://wiki.mediagoblin.org/Deployment / uwsgi with configs
  2637. apt-get -y --force-yes install uwsgi uwsgi-plugin-python nginx-full supervisor
  2638. echo 'server {' > /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2639. echo ' include /etc/nginx/mime.types;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2640. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2641. echo ' autoindex off;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2642. echo ' default_type application/octet-stream;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2643. echo ' sendfile on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2644. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2645. echo ' # Gzip' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2646. echo ' gzip on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2647. echo ' gzip_min_length 1024;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2648. echo ' gzip_buffers 4 32k;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2649. echo ' gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2650. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2651. echo " server_name $MEDIAGOBLIN_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2652. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2653. echo ' access_log /var/log/nginx/mg.access.log;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2654. echo ' error_log /var/log/nginx/mg.error.log error;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2655. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2656. echo ' #include global/common.conf;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2657. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2658. echo ' client_max_body_size 100m;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2659. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2660. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2661. echo " root $MEDIAGOBLIN_PATH/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2662. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2663. echo ' location /mgoblin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2664. echo " alias $MEDIAGOBLIN_PATH/static/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2665. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2666. echo ' location /mgoblin_media/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2667. echo " alias $MEDIAGOBL_PATH/media/public/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2668. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2669. echo ' location /theme_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2670. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2671. echo ' location /plugin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2672. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2673. echo ' location / {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2674. echo ' uwsgi_pass unix:///tmp/mg.uwsgi.sock;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2675. echo ' uwsgi_param SCRIPT_NAME "/";' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2676. echo ' include uwsgi_params;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2677. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2678. echo '}' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  2679. echo 'uwsgi:' > /etc/uwsgi/apps-available/mg.yaml
  2680. echo ' uid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  2681. echo ' gid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  2682. echo ' socket: /tmp/mg.uwsgi.sock' >> /etc/uwsgi/apps-available/mg.yaml
  2683. echo ' chown-socket: www-data:www-data' >> /etc/uwsgi/apps-available/mg.yaml
  2684. echo ' plugins: python' >> /etc/uwsgi/apps-available/mg.yaml
  2685. echo " home: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  2686. echo " chdir: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  2687. echo " ini-paste: $MEDIAGOBLIN_PATH/paste_local.ini" >> /etc/uwsgi/apps-available/mg.yaml
  2688. echo '[program:celery]' > /etc/supervisor/conf.d/mediagoblin.conf
  2689. echo "command=$MEDIAGOBLIN_PATH_BIN/celery worker -l debug" >> /etc/supervisor/conf.d/mediagoblin.conf
  2690. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  2691. echo '; Set PYTHONPATH to the directory containing celeryconfig.py' >> /etc/supervisor/conf.d/mediagoblin.conf
  2692. echo "environment=PYTHONPATH='$MEDIAGOBLIN_PATH',MEDIAGOBLIN_CONFIG='$MEDIAGOBLIN_PATH/mediagoblin_local.ini',CELERY_CONFIG_MODULE='mediagoblin.init.celery.from_celery'" >> /etc/supervisor/conf.d/mediagoblin.conf
  2693. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  2694. echo "directory=$MEDIAGOBLIN_PATH/" >> /etc/supervisor/conf.d/mediagoblin.conf
  2695. echo 'user=mediagoblin' >> /etc/supervisor/conf.d/mediagoblin.conf
  2696. echo 'numprocs=1' >> /etc/supervisor/conf.d/mediagoblin.conf
  2697. echo '; uncomment below to enable logs saving' >> /etc/supervisor/conf.d/mediagoblin.conf
  2698. echo ";stdout_logfile=/var/log/nginx/celeryd_stdout.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  2699. echo ";stderr_logfile=/var/log/nginx/celeryd_stderr.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  2700. echo 'autostart=true' >> /etc/supervisor/conf.d/mediagoblin.conf
  2701. echo 'autorestart=false' >> /etc/supervisor/conf.d/mediagoblin.conf
  2702. echo 'startsecs=10' >> /etc/supervisor/conf.d/mediagoblin.conf
  2703. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  2704. echo '; Need to wait for currently executing tasks to finish at shutdown.' >> /etc/supervisor/conf.d/mediagoblin.conf
  2705. echo '; Increase this if you have very long running tasks.' >> /etc/supervisor/conf.d/mediagoblin.conf
  2706. echo 'stopwaitsecs = 600' >> /etc/supervisor/conf.d/mediagoblin.conf
  2707. ln -s /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME /etc/nginx/sites-enabled/
  2708. ln -s /etc/uwsgi/apps-available/mg.yaml /etc/uwsgi/apps-enabled/
  2709. # change settings
  2710. sed -i "s/notice@mediagoblin.example.org/$MY_USERNAME@$DOMAIN_NAME/g" $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2711. sed -i 's/email_debug_mode = true/email_debug_mode = false/g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2712. sed -i 's|# sql_engine = postgresql:///mediagoblin|sql_engine = postgresql:///mediagoblin|g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2713. # add extra media types
  2714. if grep -q "media_types.audio" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  2715. echo '[[mediagoblin.media_types.audio]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2716. fi
  2717. if grep -q "media_types.video" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  2718. echo '[[mediagoblin.media_types.video]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2719. fi
  2720. if grep -q "media_types.stl" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  2721. echo '[[mediagoblin.media_types.stl]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  2722. fi
  2723. su -c "cd $MEDIAGOBLIN_PATH_BIN; pip install scikits.audiolab" - mediagoblin
  2724. su -c "cd $MEDIAGOBLIN_PATH_BIN; gmg dbupdate" - mediagoblin
  2725. # systemd init scripts
  2726. echo '[Unit]' > /etc/systemd/system/gmg.service
  2727. echo 'Description=Mediagoblin' >> /etc/systemd/system/gmg.service
  2728. echo '' >> /etc/systemd/system/gmg.service
  2729. echo '[Service]' >> /etc/systemd/system/gmg.service
  2730. echo 'Type=forking' >> /etc/systemd/system/gmg.service
  2731. echo 'User=mediagoblin' >> /etc/systemd/system/gmg.service
  2732. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg.service
  2733. echo '#Environment=CELERY_ALWAYS_EAGER=true' >> /etc/systemd/system/gmg.service
  2734. echo 'Environment=CELERY_ALWAYS_EAGER=false' >> /etc/systemd/system/gmg.service
  2735. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg.service
  2736. echo "ExecStart=$MEDIAGOBLIN_PATH_BIN/paster serve $MEDIAGOBLIN_PATH/paste_local.ini --pid-file=/var/run/mediagoblin/paster.pid --log-file=/var/log/nginx/mediagoblin_paster.log --daemon --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543" >> /etc/systemd/system/gmg.service
  2737. echo "ExecStop=$MEDIAGOBLIN_PATH_BIN/paster serve --pid-file=/var/run/mediagoblin/paster.pid $MEDIAGOBLIN_PATH/paste_local.ini stop" >> /etc/systemd/system/gmg.service
  2738. echo 'PIDFile=/var/run/mediagoblin/mediagoblin.pid' >> /etc/systemd/system/gmg.service
  2739. echo '' >> /etc/systemd/system/gmg.service
  2740. echo '[Install]' >> /etc/systemd/system/gmg.service
  2741. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg.service
  2742. echo '[Unit]' > /etc/systemd/system/gmg-celeryd.service
  2743. echo 'Description=Mediagoblin Celeryd' >> /etc/systemd/system/gmg-celeryd.service
  2744. echo '' >> /etc/systemd/system/gmg-celeryd.service
  2745. echo '[Service]' >> /etc/systemd/system/gmg-celeryd.service
  2746. echo 'User=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  2747. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  2748. echo 'Type=simple' >> /etc/systemd/system/gmg-celeryd.service
  2749. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg-celeryd.service
  2750. echo "Environment='MEDIAGOBLIN_CONFIG=$MEDIAGOBLIN_PATH/mediagoblin_local.ini' CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery" >> /etc/systemd/system/gmg-celeryd.service
  2751. echo "ExecStart=$MEDIAGOBLIN_PATH_BIN/celeryd" >> /etc/systemd/system/gmg-celeryd.service
  2752. echo 'PIDFile=/var/run/mediagoblin/mediagoblin-celeryd.pid' >> /etc/systemd/system/gmg-celeryd.service
  2753. echo '' >> /etc/systemd/system/gmg-celeryd.service
  2754. echo '[Install]' >> /etc/systemd/system/gmg-celeryd.service
  2755. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg-celeryd.service
  2756. systemctl start gmg.service
  2757. systemctl start gmg-celeryd.service
  2758. echo 'install_mediagoblin' >> $COMPLETION_FILE
  2759. }
  2760. function decrypt_file {
  2761. if [ ! $FILE_TO_DECRYPT ]; then
  2762. return
  2763. fi
  2764. if [ ! -d $FILE_TO_DECRYPT ]; then
  2765. return
  2766. fi
  2767. bcrypt $FILE_TO_DECRYPT
  2768. }
  2769. function create_backup_script {
  2770. if grep -Fxq "create_backup_script" $COMPLETION_FILE; then
  2771. return
  2772. fi
  2773. apt-get -y --force-yes install obnam bcrypt
  2774. echo '#!/bin/bash' > /usr/bin/$BACKUP_SCRIPT_NAME
  2775. echo "if [ -b $USB_DRIVE ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2776. echo " if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2777. echo " mkdir $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2778. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2779. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2780. echo " if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2781. echo " mkdir $USB_MOUNT/backup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2782. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2783. # email
  2784. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  2785. echo " if [ ! -d $USB_MOUNT/backup/Maildir ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2786. echo " mkdir $USB_MOUNT/backup/Maildir" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2787. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2788. echo " obnam -r $USB_MOUNT/backup/Maildir /home/$MY_USERNAME/Maildir" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2789. echo " if [ ! -d $USB_MOUNT/backup/gpg ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2790. echo " mkdir $USB_MOUNT/backup/gpg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2791. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2792. echo " obnam -r $USB_MOUNT/backup/gpg /home/$MY_USERNAME/.gnupg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2793. echo " cp -f /home/$MY_USERNAME/.muttrc $USB_MOUNT/backup/gpg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2794. echo " cp -f /home/$MY_USERNAME/.procmailrc $USB_MOUNT/backup/gpg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2795. fi
  2796. # personal directory
  2797. echo " if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2798. echo " if [ ! -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2799. echo " mkdir $USB_MOUNT/backup/personal" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2800. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2801. echo " obnam -r $USB_MOUNT/backup/personal /home/$MY_USERNAME/personal" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2802. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2803. # dynamic dns
  2804. echo " if [ -f /usr/bin/dynamicdns ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2805. echo " cp -f /usr/bin/dynamicdns $USB_MOUNT/backup/dynamicdns" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2806. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2807. # web server
  2808. echo " if [ -d /etc/nginx ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2809. echo " if [ ! -d $USB_MOUNT/backup/webserver ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2810. echo " mkdir $USB_MOUNT/backup/webserver" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2811. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2812. echo " obnam -r $USB_MOUNT/backup/webserver /etc/nginx/sites-available" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2813. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2814. # owncloud
  2815. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2816. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  2817. echo " if [ ! -d $USB_MOUNT/backup/owncloud ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2818. echo " mkdir $USB_MOUNT/backup/owncloud" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2819. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2820. echo " obnam -r $USB_MOUNT/backup/owncloud /var/www/$OWNCLOUD_DOMAIN_NAME" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2821. fi
  2822. fi
  2823. # prosody
  2824. echo 'if [ -d /var/lib/prosody ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2825. echo " if [ ! -d $USB_MOUNT/backup/prosody ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2826. echo " mkdir $USB_MOUNT/backup/prosody" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2827. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2828. echo " obnam -r $USB_MOUNT/backup/prosody /var/lib/prosody" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2829. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2830. # wiki / blog
  2831. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2832. if [ $WIKI_DOMAIN_NAME ]; then
  2833. echo " if [ ! -d $USB_MOUNT/backup/wiki-blog ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2834. echo " mkdir $USB_MOUNT/backup/wiki-blog" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2835. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2836. echo " obnam -r $USB_MOUNT/backup/wiki-blog /var/www/$WIKI_DOMAIN_NAME" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2837. fi
  2838. fi
  2839. # microblog
  2840. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2841. if [ $MICROBLOG_DOMAIN_NAME ]; then
  2842. echo " if [ ! -d $USB_MOUNT/backup/gnusocial ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2843. echo " mkdir $USB_MOUNT/backup/gnusocial" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2844. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2845. echo " mysqldump --password=$MARIADB_PASSWORD gnusocial > $USB_MOUNT/backup/gnusocial/database.sql" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2846. fi
  2847. fi
  2848. # redmatrix
  2849. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2850. if [ $REDMATRIX_DOMAIN_NAME ]; then
  2851. echo " if [ ! -d $USB_MOUNT/backup/redmatrix ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2852. echo " mkdir $USB_MOUNT/backup/redmatrix" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2853. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2854. echo " mysqldump --password=$MARIADB_PASSWORD redmatrix > $USB_MOUNT/backup/redmatrix/database.sql" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2855. fi
  2856. fi
  2857. # dlna
  2858. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2859. echo " if [ ! -d $USB_MOUNT/backup/dlna ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2860. echo " mkdir $USB_MOUNT/backup/dlna" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2861. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2862. echo " obnam -r $USB_MOUNT/backup/dlna /var/cache/minidlna" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2863. fi
  2864. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2865. echo 'echo "Backup completed"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2866. if [[ $ENCRYPT_BACKUPS == "yes" ]]; then
  2867. echo 'echo "Archiving backup data"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2868. echo "cd $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2869. echo "tar -czvf $USB_MOUNT/backup.tar.gz $USB_MOUNT/backup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2870. echo 'Encrypting backup data' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2871. echo "bcrypt -c $USB_MOUNT/backup.tar.gz" >> /usr/bin/$BACKUP_SCRIPT_NAME
  2872. fi
  2873. echo 'exit 0' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2874. chmod 600 /usr/bin/$BACKUP_SCRIPT_NAME
  2875. chmod +x /usr/bin/$BACKUP_SCRIPT_NAME
  2876. echo 'create_backup_script' >> $COMPLETION_FILE
  2877. }
  2878. function create_restore_script {
  2879. if grep -Fxq "create_restore_script" $COMPLETION_FILE; then
  2880. return
  2881. fi
  2882. apt-get -y --force-yes install obnam bcrypt
  2883. echo '#!/bin/bash' > /usr/bin/$RESTORE_SCRIPT_NAME
  2884. echo "if [ -b $USB_DRIVE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2885. echo " if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2886. echo " mkdir $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2887. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2888. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2889. echo " if [ -f $USB_MOUNT/backup.tar.gz.bfe ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2890. echo ' echo "Decrypting encrypted backup"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2891. echo " bcrypt $USB_MOUNT/backup.tar.gz.bfe" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2892. echo " cd $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2893. echo " tar -xzvf $USB_MOUNT/backup.tar.gz" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2894. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2895. echo " if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2896. echo ' echo "No backup directory was found on the USB drive"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2897. echo " exit 1" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2898. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2899. # email
  2900. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  2901. echo " if [ -d $USB_MOUNT/backup/Maildir ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2902. echo " obnam restore --to /home/$MY_USERNAME/Maildir $USB_MOUNT/backup/Maildir" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2903. echo " obnam restore --to /home/$MY_USERNAME/.gnupg $USB_MOUNT/backup/gpg" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2904. echo " cp -f $USB_MOUNT/backup/gpg/.muttrc /home/$MY_USERNAME" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2905. echo " cp -f $USB_MOUNT/backup/gpg/.procmailrc /home/$MY_USERNAME" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2906. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2907. fi
  2908. # personal directory
  2909. echo " if [ -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2910. echo " obnam restore --to /home/$MY_USERNAME/personal $USB_MOUNT/backup/personal" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2911. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  2912. # dynamic dns
  2913. echo " if [ -f $USB_MOUNT/backup/dynamicdns ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2914. echo " cp -f $USB_MOUNT/backup/dynamicdns /usr/bin/dynamicdns" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2915. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2916. # web server
  2917. echo " if [ -d /etc/nginx ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2918. echo " if [ -d $USB_MOUNT/backup/webserver ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2919. echo " obnam restore --to /etc/nginx $USB_MOUNT/backup/webserver" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2920. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2921. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2922. # owncloud
  2923. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2924. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  2925. echo " if [ -d $USB_MOUNT/backup/owncloud ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2926. echo " obnam restore --to /var/www/$OWNCLOUD_DOMAIN_NAME $USB_MOUNT/backup/owncloud" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2927. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2928. fi
  2929. fi
  2930. # prosody
  2931. echo 'if [ -d /var/lib/prosody ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2932. echo " if [ -d $USB_MOUNT/backup/prosody ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2933. echo " obnam restore --to /var/lib/prosody $USB_MOUNT/backup/prosody" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2934. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2935. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2936. # wiki / blog
  2937. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2938. if [ $WIKI_DOMAIN_NAME ]; then
  2939. echo " if [ -d $USB_MOUNT/backup/wiki-blog ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2940. echo " obnam restore --to /var/www/$WIKI_DOMAIN_NAME $USB_MOUNT/backup/wiki-blog" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2941. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2942. fi
  2943. fi
  2944. # microblog
  2945. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2946. if [ $MICROBLOG_DOMAIN_NAME ]; then
  2947. echo " if [ -d $USB_MOUNT/backup/gnusocial ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2948. echo " mysql -u root --password=$MARIADB_PASSWORD gnusocial -o < $USB_MOUNT/backup/gnusocial/database.sql" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2949. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2950. fi
  2951. fi
  2952. # redmatrix
  2953. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  2954. if [ $REDMATRIX_DOMAIN_NAME ]; then
  2955. echo " if [ -d $USB_MOUNT/backup/redmatrix ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2956. echo " mysql -u root --password=$MARIADB_PASSWORD redmatrix -o < $USB_MOUNT/backup/redmatrix/database.sql" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2957. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2958. IPT_NAME
  2959. fi
  2960. fi
  2961. # dlna
  2962. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  2963. echo " if [ -d $USB_MOUNT/backup/dlna ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2964. echo " obnam restore --to /var/cache/minidlna $USB_MOUNT/backup/minidlna" >> /usr/bin/$RESTORE_SCRIPT_NAME
  2965. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2966. fi
  2967. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2968. echo 'Restore completed' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2969. echo 'exit 0' >> /usr/bin/$RESTORE_SCRIPT_NAME
  2970. chmod 600 /usr/bin/$RESTORE_SCRIPT_NAME
  2971. chmod +x /usr/bin/$RESTORE_SCRIPT_NAME
  2972. echo 'create_restore_script' >> $COMPLETION_FILE
  2973. }
  2974. function install_final {
  2975. if grep -Fxq "install_final" $COMPLETION_FILE; then
  2976. return
  2977. fi
  2978. # unmount any attached usb drive
  2979. if [ -d $USB_MOUNT ]; then
  2980. umount $USB_MOUNT
  2981. rm -rf $USB_MOUNT
  2982. fi
  2983. apt-get -y --force-yes autoremove
  2984. echo 'install_final' >> $COMPLETION_FILE
  2985. echo ''
  2986. echo ' *** Freedombone installation is complete. Rebooting... ***'
  2987. echo ''
  2988. if [ -f "/home/$MY_USERNAME/README" ]; then
  2989. echo "See /home/$MY_USERNAME/README for post-installation instructions."
  2990. echo ''
  2991. fi
  2992. reboot
  2993. }
  2994. argument_checks
  2995. configure_firewall
  2996. configure_firewall_for_ssh
  2997. configure_firewall_for_dns
  2998. configure_firewall_for_ftp
  2999. configure_firewall_for_web_access
  3000. remove_proprietary_repos
  3001. change_debian_repos
  3002. enable_backports
  3003. configure_dns
  3004. initial_setup
  3005. install_editor
  3006. change_login_message
  3007. update_the_kernel
  3008. enable_zram
  3009. random_number_generator
  3010. set_your_domain_name
  3011. create_backup_script
  3012. create_restore_script
  3013. time_synchronisation
  3014. configure_internet_protocol
  3015. configure_ssh
  3016. search_for_attached_usb_drive
  3017. regenerate_ssh_keys
  3018. script_to_make_self_signed_certificates
  3019. configure_email
  3020. #spam_filtering
  3021. configure_imap
  3022. configure_gpg
  3023. email_client
  3024. configure_firewall_for_email
  3025. folders_for_mailing_lists
  3026. folders_for_email_addresses
  3027. dynamic_dns_freedns
  3028. #create_private_mailing_list
  3029. import_email
  3030. script_for_attaching_usb_drive
  3031. install_web_server
  3032. configure_firewall_for_web_server
  3033. install_owncloud
  3034. install_xmpp
  3035. configure_firewall_for_xmpp
  3036. install_irc_server
  3037. configure_firewall_for_irc
  3038. install_wiki
  3039. install_blog
  3040. install_gnu_social
  3041. install_redmatrix
  3042. install_dlna_server
  3043. install_mediagoblin
  3044. install_final
  3045. echo 'Freedombone installation is complete'
  3046. exit 0