install-freedombone.sh 85KB

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