install-freedombone.sh 127KB

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