install-freedombone.sh 138KB

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