install-freedombone.sh 111KB

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