install-freedombone.sh 314KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # This install script is intended for use with Debian Jessie
  12. #
  13. # Please note that the various hashes and download archives
  14. # for systems such as Owncloud and Dokuwiki may need to be updated
  15. #
  16. # License
  17. # =======
  18. #
  19. # Copyright (C) 2014 Bob Mottram <bob@robotics.uk.to>
  20. #
  21. # This program is free software: you can redistribute it and/or modify
  22. # it under the terms of the GNU General Public License as published by
  23. # the Free Software Foundation, either version 3 of the License, or
  24. # (at your option) any later version.
  25. #
  26. # This program is distributed in the hope that it will be useful,
  27. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  28. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  29. # GNU General Public License for more details.
  30. #
  31. # You should have received a copy of the GNU General Public License
  32. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  33. #
  34. # Summary
  35. # =======
  36. #
  37. # This script is intended to be run on the target device, which
  38. # is typically a Beaglebone Black.
  39. #
  40. # To be able to run this script you need to get to a condition
  41. # where you have Debian Jessie installed, with at least one
  42. # unprivileged user account and at least one subdomain created on
  43. # https://freedns.afraid.org/. If you're not installing on a
  44. # Beaglebone Black then set the variable INSTALLING_ON_BBB to "no"
  45. #
  46. # Note on dynamic dns
  47. # ===================
  48. #
  49. # I'm not particularly trying to promote freedns.afraid.org
  50. # as a service, it just happens to be a dynamic DNS system which
  51. # provides free (as in beer) accounts, and I'm trying to make the
  52. # process of setting up a working server as trivial as possible.
  53. # Other dynamic DNS systems are available, and if you're using
  54. # something different then comment out the section within
  55. # argument_checks and the call to dynamic_dns_freedns.
  56. #
  57. # Prerequisites
  58. # =============
  59. #
  60. # You will need to initially prepare a microSD card with a Debian
  61. # image on it. This can be done using the initial_setup.sh script.
  62. #
  63. # If you are not using a Beaglebone Black then just prepare the
  64. # target system with a fresh installation of Debian Jessie.
  65. #
  66. # Configuration file
  67. # ==================
  68. # If you don't want to edit this script directly then you can
  69. # create a configuration file called freedombone.cfg, which should
  70. # be in the same directory as install-freedombone.sh.
  71. # Within the configuration file you can specify the main settings
  72. # such as:
  73. #
  74. # INSTALLING_ON_BBB=yes
  75. # SSH_PORT=2222
  76. # MICROBLOG_DOMAIN_NAME=mydomain
  77. # MICROBLOG_FREEDNS_SUBDOMAIN_CODE=[code]
  78. # ...
  79. #
  80. # Note that there are no spaces around the equals.
  81. DOMAIN_NAME=$1
  82. MY_USERNAME=$2
  83. FREEDNS_SUBDOMAIN_CODE=$3
  84. SYSTEM_TYPE=$4
  85. # Are we installing on a Beaglebone Black (BBB) or some other system?
  86. INSTALLING_ON_BBB="yes"
  87. # Version number of this script
  88. VERSION="1.00"
  89. # Different system variants which may be specified within
  90. # the SYSTEM_TYPE option
  91. VARIANT_WRITER="writer"
  92. VARIANT_CLOUD="cloud"
  93. VARIANT_CHAT="chat"
  94. VARIANT_MAILBOX="mailbox"
  95. VARIANT_NONMAILBOX="nonmailbox"
  96. VARIANT_SOCIAL="social"
  97. VARIANT_MEDIA="media"
  98. VARIANT_TOR_DONGLE="tordongle"
  99. # An optional configuration file which overrides some of these variables
  100. CONFIGURATION_FILE="freedombone.cfg"
  101. SSH_PORT=2222
  102. # number of CPU cores
  103. CPU_CORES=1
  104. # The static IP address of the system within the local network
  105. LOCAL_NETWORK_STATIC_IP_ADDRESS="192.168.1.60"
  106. # IP address of the router (gateway)
  107. ROUTER_IP_ADDRESS="192.168.1.254"
  108. # whether to route outgoing traffic through Tor
  109. ROUTE_THROUGH_TOR="no"
  110. # Why use Google as a time source?
  111. # The thinking here is that it's likely to be reliable and fast.
  112. # The ping doesn't reveal any information other than that the server
  113. # is running, and if anyone maliciously alters the time on Google's
  114. # servers then that would certainly be newsworthy and they'd be
  115. # likely to do something about it quickly.
  116. # If you have better time sources then change them here.
  117. TLS_TIME_SOURCE1="google.com"
  118. TLS_TIME_SOURCE2="www.ptb.de"
  119. # kernel specifically tweaked for the Beaglebone Black
  120. # See http://rcn-ee.net/deb/jessie-armhf/
  121. KERNEL_VERSION="v3.15.10-bone8"
  122. # Whether or not to use the beaglebone's hardware random number generator
  123. USE_HWRNG="yes"
  124. # Whether this system is being installed within a docker container
  125. INSTALLED_WITHIN_DOCKER="no"
  126. # If you want to run a public mailing list specify its name here.
  127. # There should be no spaces in the name
  128. PUBLIC_MAILING_LIST=
  129. # Optional different domain name for the public mailing list
  130. PUBLIC_MAILING_LIST_DOMAIN_NAME=
  131. # Directory where the public mailing list data is stored
  132. PUBLIC_MAILING_LIST_DIRECTORY="/var/spool/mlmmj"
  133. # If you want to run an encrypted mailing list specify its name here.
  134. # There should be no spaces in the name
  135. PRIVATE_MAILING_LIST=
  136. # Domain name or freedns subdomain for mediagoblin installation
  137. MEDIAGOBLIN_DOMAIN_NAME=
  138. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=
  139. MEDIAGOBLIN_REPO=""
  140. MEDIAGOBLIN_ADMIN_PASSWORD=
  141. # Domain name or freedns subdomain for microblog installation
  142. MICROBLOG_DOMAIN_NAME=
  143. MICROBLOG_FREEDNS_SUBDOMAIN_CODE=
  144. MICROBLOG_REPO="git://gitorious.org/social/mainline.git"
  145. MICROBLOG_ADMIN_PASSWORD=
  146. # Domain name or redmatrix installation
  147. REDMATRIX_DOMAIN_NAME=
  148. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=
  149. REDMATRIX_REPO="https://github.com/friendica/red.git"
  150. REDMATRIX_ADDONS_REPO="https://github.com/friendica/red-addons.git"
  151. REDMATRIX_ADMIN_PASSWORD=
  152. # Domain name and freedns subdomain for Owncloud installation
  153. OWNCLOUD_DOMAIN_NAME=
  154. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=
  155. OWNCLOUD_ADMIN_PASSWORD=
  156. # Domain name and freedns subdomain for your wiki
  157. WIKI_DOMAIN_NAME=
  158. WIKI_FREEDNS_SUBDOMAIN_CODE=
  159. WIKI_ADMIN_PASSWORD=
  160. WIKI_TITLE="Freedombone Wiki"
  161. # Domain name and freedns subdomain for your blog
  162. FULLBLOG_DOMAIN_NAME=
  163. FULLBLOG_FREEDNS_SUBDOMAIN_CODE=
  164. MY_BLOG_TITLE="My Blog"
  165. MY_BLOG_SUBTITLE="Another Freedombone Blog"
  166. GPG_KEYSERVER="hkp://keys.gnupg.net"
  167. # whether to encrypt all incoming email with your public key
  168. GPG_ENCRYPT_STORED_EMAIL="yes"
  169. # gets set to yes if gpg keys are imported from usb
  170. GPG_KEYS_IMPORTED="no"
  171. # optionally you can provide your exported GPG key pair here
  172. # Note that the private key file will be deleted after use
  173. # If these are unspecified then a new GPG key will be created
  174. MY_GPG_PUBLIC_KEY=
  175. MY_GPG_PRIVATE_KEY=
  176. # optionally specify your public key ID
  177. MY_GPG_PUBLIC_KEY_ID=
  178. # If you have existing mail within a Maildir
  179. # you can specify the directory here and the files
  180. # will be imported
  181. IMPORT_MAILDIR=
  182. # The Debian package repository to use.
  183. DEBIAN_REPO="ftp.us.debian.org"
  184. DEBIAN_VERSION="jessie"
  185. # Directory where source code is downloaded and compiled
  186. INSTALL_DIR=$HOME/build
  187. # device name for an attached usb drive
  188. USB_DRIVE=/dev/sda1
  189. # Location where the USB drive is mounted to
  190. USB_MOUNT=/mnt/usb
  191. # name of a script used to upgrade the system
  192. UPGRADE_SCRIPT_NAME="freedombone-upgrade"
  193. # name of a script which keeps running processes going even if they crash
  194. WATCHDOG_SCRIPT_NAME="keepon"
  195. # Name of a script used to create a backup of the system on usb drive
  196. BACKUP_SCRIPT_NAME="backup"
  197. # Name of a script used to restore the system from usb drive
  198. RESTORE_SCRIPT_NAME="restore"
  199. # name of a script used to backup to friends servers
  200. BACKUP_TO_FRIENDS_SCRIPT_NAME="backup2friends"
  201. # name of a script used to restore backed up data from a friend
  202. RESTORE_FROM_FRIEND_SCRIPT_NAME="restorefromfriend"
  203. # Location of the certificate used to encrypt backups
  204. BACKUP_CERTIFICATE=/etc/ssl/private/backup.key
  205. # memory limit for php in MB
  206. MAX_PHP_MEMORY=64
  207. # default MariaDB password
  208. MARIADB_PASSWORD=
  209. # Directory where XMPP settings are stored
  210. XMPP_DIRECTORY="/var/lib/prosody"
  211. # file containing a list of remote locations to backup to
  212. # Format: [username@friendsdomain//home/username] [ssh_password]
  213. # With the only space character being between the server and the password
  214. FRIENDS_SERVERS_LIST=/home/$MY_USERNAME/backup.list
  215. # list of encryption protocols
  216. SSL_PROTOCOLS="TLSv1 TLSv1.1 TLSv1.2"
  217. # list of ciphers to use. See bettercrypto.org recommendations
  218. 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"
  219. # the default email address
  220. MY_EMAIL_ADDRESS=$MY_USERNAME@$DOMAIN_NAME
  221. # optionally specify your name to appear on the blog
  222. MY_NAME=$DOMAIN_NAME
  223. export DEBIAN_FRONTEND=noninteractive
  224. # logging level for Nginx
  225. WEBSERVER_LOG_LEVEL='crit'
  226. # used to limit CPU usage
  227. CPULIMIT='/usr/bin/cpulimit -l 20 -e'
  228. # command to create a git repository
  229. CREATE_GIT_PROJECT_COMMAND='create-project'
  230. # File which keeps track of what has already been installed
  231. COMPLETION_FILE=$HOME/freedombone-completed.txt
  232. if [ ! -f $COMPLETION_FILE ]; then
  233. touch $COMPLETION_FILE
  234. fi
  235. # Your github username
  236. GITHUB_USERNAME=
  237. # Directory where github projects will be backed up
  238. GITHUB_BACKUP_DIRECTORY=/var/backups/github
  239. # Used to indicate whether the backup contains MariaDB databases or not
  240. BACKUP_INCLUDES_DATABASES="no"
  241. # message if something fails to install
  242. CHECK_MESSAGE="Check your internet connection, /etc/network/interfaces and /etc/resolv.conf, then delete $COMPLETION_FILE, run 'rm -fR /var/lib/apt/lists/* && apt-get update --fix-missing' and run this script again. If hash sum mismatches persist then try setting $DEBIAN_REPO to a different mirror and also change /etc/apt/sources.list."
  243. function show_help {
  244. echo ''
  245. echo './install-freedombone.sh [domain] [username] [subdomain code] [system type]'
  246. echo ''
  247. echo 'domain'
  248. echo '------'
  249. echo 'This is your domain name or freedns subdomain.'
  250. echo ''
  251. echo 'username'
  252. echo '--------'
  253. echo ''
  254. echo 'This will be your username on the system. It should be all'
  255. echo 'lower case and contain no spaces'
  256. echo ''
  257. echo 'subdomain code'
  258. echo '--------------'
  259. echo 'This is the freedns dynamic DNS code for your subdomain.'
  260. echo "To find it from https://freedns.afraid.org select 'Dynamic DNS',"
  261. echo "then 'quick cron example' and copy the code located between "
  262. echo "'?' and '=='."
  263. echo ''
  264. echo 'system type'
  265. echo '-----------'
  266. echo 'This can either be blank if you wish to install the full system,'
  267. echo "or for more specialised variants you can specify '$VARIANT_MAILBOX', '$VARIANT_CLOUD',"
  268. echo "'$VARIANT_CHAT', '$VARIANT_SOCIAL', '$VARIANT_MEDIA', '$VARIANT_TOR_DONGLE' or '$VARIANT_WRITER'."
  269. echo "If you wish to install everything except email then use the '$VARIANT_NONMAILBOX' variaint."
  270. }
  271. function argument_checks {
  272. if [ ! -d /home/$MY_USERNAME ]; then
  273. echo "There is no user '$MY_USERNAME' on the system. Use 'adduser $MY_USERNAME' to create the user."
  274. exit 1
  275. fi
  276. if [ ! $DOMAIN_NAME ]; then
  277. show_help
  278. exit 2
  279. fi
  280. if [ ! $MY_USERNAME ]; then
  281. show_help
  282. exit 3
  283. fi
  284. if [ ! $FREEDNS_SUBDOMAIN_CODE ]; then
  285. show_help
  286. exit 4
  287. fi
  288. if [ $SYSTEM_TYPE ]; then
  289. if [[ $SYSTEM_TYPE != $VARIANT_WRITER && $SYSTEM_TYPE != $VARIANT_CLOUD && $SYSTEM_TYPE != $VARIANT_CHAT && $SYSTEM_TYPE != $VARIANT_MAILBOX && $SYSTEM_TYPE != $VARIANT_NONMAILBOX && $SYSTEM_TYPE != $VARIANT_SOCIAL && $SYSTEM_TYPE != $VARIANT_MEDIA && $SYSTEM_TYPE != $VARIANT_TOR_DONGLE ]]; then
  290. echo "'$SYSTEM_TYPE' is an unrecognised Freedombone variant."
  291. exit 30
  292. fi
  293. fi
  294. }
  295. function read_configuration {
  296. # if not installing on a Beaglebone then use sdb as the USB drive by default
  297. if [ ! $INSTALLING_ON_BBB ]; then
  298. if [[ $USB_DRIVE == /dev/sda1 ]]; then
  299. USB_DRIVE=/dev/sdb1
  300. fi
  301. fi
  302. if [ -f $CONFIGURATION_FILE ]; then
  303. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  304. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  305. fi
  306. if grep -q "BACKUP_CERTIFICATE" $CONFIGURATION_FILE; then
  307. BACKUP_CERTIFICATE=$(grep "BACKUP_CERTIFICATE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  308. fi
  309. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  310. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  311. fi
  312. if grep -q "GITHUB_USERNAME" $CONFIGURATION_FILE; then
  313. GITHUB_USERNAME=$(grep "GITHUB_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  314. fi
  315. if grep -q "GITHUB_BACKUP_DIRECTORY" $CONFIGURATION_FILE; then
  316. GITHUB_BACKUP_DIRECTORY=$(grep "GITHUB_BACKUP_DIRECTORY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  317. fi
  318. if grep -q "CPU_CORES" $CONFIGURATION_FILE; then
  319. CPU_CORES=$(grep "CPU_CORES" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  320. fi
  321. if grep -q "WEBSERVER_LOG_LEVEL" $CONFIGURATION_FILE; then
  322. WEBSERVER_LOG_LEVEL=$(grep "WEBSERVER_LOG_LEVEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  323. fi
  324. if grep -q "ROUTE_THROUGH_TOR" $CONFIGURATION_FILE; then
  325. ROUTE_THROUGH_TOR=$(grep "ROUTE_THROUGH_TOR" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  326. fi
  327. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  328. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  329. fi
  330. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  331. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  332. fi
  333. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  334. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  335. fi
  336. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  337. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  338. fi
  339. if grep -q "SSH_PORT" $CONFIGURATION_FILE; then
  340. SSH_PORT=$(grep "SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  341. fi
  342. if grep -q "INSTALLED_WITHIN_DOCKER" $CONFIGURATION_FILE; then
  343. INSTALLED_WITHIN_DOCKER=$(grep "INSTALLED_WITHIN_DOCKER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  344. fi
  345. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  346. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  347. fi
  348. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  349. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  350. fi
  351. if grep -q "MICROBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  352. MICROBLOG_FREEDNS_SUBDOMAIN_CODE=$(grep "MICROBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  353. fi
  354. if grep -q "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE; then
  355. REDMATRIX_DOMAIN_NAME=$(grep "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  356. fi
  357. if grep -q "REDMATRIX_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  358. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=$(grep "REDMATRIX_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  359. fi
  360. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  361. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  362. fi
  363. if grep -q "OWNCLOUD_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  364. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=$(grep "OWNCLOUD_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  365. fi
  366. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  367. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  368. fi
  369. if grep -q "WIKI_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  370. WIKI_FREEDNS_SUBDOMAIN_CODE=$(grep "WIKI_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  371. fi
  372. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  373. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  374. fi
  375. if grep -q "FULLBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE; then
  376. FULLBLOG_FREEDNS_SUBDOMAIN_CODE=$(grep "FULLBLOG_FREEDNS_SUBDOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  377. fi
  378. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  379. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  380. fi
  381. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  382. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  383. fi
  384. if grep -q "GPG_ENCRYPT_STORED_EMAIL" $CONFIGURATION_FILE; then
  385. GPG_ENCRYPT_STORED_EMAIL=$(grep "GPG_ENCRYPT_STORED_EMAIL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  386. fi
  387. if grep -q "MY_GPG_PUBLIC_KEY" $CONFIGURATION_FILE; then
  388. MY_GPG_PUBLIC_KEY=$(grep "MY_GPG_PUBLIC_KEY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  389. fi
  390. if grep -q "MY_GPG_PRIVATE_KEY" $CONFIGURATION_FILE; then
  391. MY_GPG_PRIVATE_KEY=$(grep "MY_GPG_PRIVATE_KEY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  392. fi
  393. if grep -q "MY_GPG_PUBLIC_KEY_ID" $CONFIGURATION_FILE; then
  394. MY_GPG_PUBLIC_KEY_ID=$(grep "MY_GPG_PUBLIC_KEY_ID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  395. fi
  396. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  397. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  398. fi
  399. if grep -q "MAX_PHP_MEMORY" $CONFIGURATION_FILE; then
  400. MAX_PHP_MEMORY=$(grep "MAX_PHP_MEMORY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  401. fi
  402. if grep -q "TLS_TIME_SOURCE1" $CONFIGURATION_FILE; then
  403. TLS_TIME_SOURCE1=$(grep "TLS_TIME_SOURCE1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  404. fi
  405. if grep -q "TLS_TIME_SOURCE2" $CONFIGURATION_FILE; then
  406. TLS_TIME_SOURCE2=$(grep "TLS_TIME_SOURCE2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  407. fi
  408. fi
  409. }
  410. function install_not_on_BBB {
  411. if grep -Fxq "install_not_on_BBB" $COMPLETION_FILE; then
  412. return
  413. fi
  414. if [[ INSTALLING_ON_BBB == "yes" ]]; then
  415. return
  416. fi
  417. echo '# This file describes the network interfaces available on your system' > /etc/network/interfaces
  418. echo '# and how to activate them. For more information, see interfaces(5).' >> /etc/network/interfaces
  419. echo '' >> /etc/network/interfaces
  420. echo '# The loopback network interface' >> /etc/network/interfaces
  421. echo 'auto lo' >> /etc/network/interfaces
  422. echo 'iface lo inet loopback' >> /etc/network/interfaces
  423. echo '' >> /etc/network/interfaces
  424. echo '# The primary network interface' >> /etc/network/interfaces
  425. echo 'auto eth0' >> /etc/network/interfaces
  426. echo 'iface eth0 inet static' >> /etc/network/interfaces
  427. echo " address $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/network/interfaces
  428. echo ' netmask 255.255.255.0' >> /etc/network/interfaces
  429. echo " gateway $ROUTER_IP_ADDRESS" >> /etc/network/interfaces
  430. echo ' dns-nameservers 213.73.91.35 85.214.20.141' >> /etc/network/interfaces
  431. echo '# Example to keep MAC address between reboots' >> /etc/network/interfaces
  432. echo '#hwaddress ether DE:AD:BE:EF:CA:FE' >> /etc/network/interfaces
  433. echo '' >> /etc/network/interfaces
  434. echo '# The secondary network interface' >> /etc/network/interfaces
  435. echo '#auto eth1' >> /etc/network/interfaces
  436. echo '#iface eth1 inet dhcp' >> /etc/network/interfaces
  437. echo '' >> /etc/network/interfaces
  438. echo '# WiFi Example' >> /etc/network/interfaces
  439. echo '#auto wlan0' >> /etc/network/interfaces
  440. echo '#iface wlan0 inet dhcp' >> /etc/network/interfaces
  441. echo '# wpa-ssid "essid"' >> /etc/network/interfaces
  442. echo '# wpa-psk "password"' >> /etc/network/interfaces
  443. echo '' >> /etc/network/interfaces
  444. echo '# Ethernet/RNDIS gadget (g_ether)' >> /etc/network/interfaces
  445. echo '# ... or on host side, usbnet and random hwaddr' >> /etc/network/interfaces
  446. echo '# Note on some boards, usb0 is automaticly setup with an init script' >> /etc/network/interfaces
  447. echo '#iface usb0 inet static' >> /etc/network/interfaces
  448. echo '# address 192.168.7.2' >> /etc/network/interfaces
  449. echo '# netmask 255.255.255.0' >> /etc/network/interfaces
  450. echo '# network 192.168.7.0' >> /etc/network/interfaces
  451. echo '# gateway 192.168.7.1' >> /etc/network/interfaces
  452. echo 'install_not_on_BBB' >> $COMPLETION_FILE
  453. }
  454. function check_hwrng {
  455. # If hardware random number generation was enabled then make sure that the device exists.
  456. # if /dev/hwrng is not found then any subsequent cryptographic key generation would
  457. # suffer from low entropy and might be insecure
  458. if [ ! -f /etc/default/rng-tools ]; then
  459. return
  460. fi
  461. if [ ! -e /dev/hwrng ]; then
  462. ls /dev/hw*
  463. echo 'The hardware random number generator is enabled but could not be detected on'
  464. echo '/dev/hwrng. There may be a problem with the installation or the Beaglebone hardware.'
  465. exit 75
  466. fi
  467. }
  468. function get_mariadb_password {
  469. if [ -f /home/$MY_USERNAME/README ]; then
  470. if grep -q "MariaDB password" /home/$MY_USERNAME/README; then
  471. MARIADB_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  472. fi
  473. fi
  474. }
  475. function get_mariadb_gnusocial_admin_password {
  476. if [ -f /home/$MY_USERNAME/README ]; then
  477. if grep -q "MariaDB gnusocial admin password" /home/$MY_USERNAME/README; then
  478. MICROBLOG_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB gnusocial admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  479. fi
  480. fi
  481. }
  482. function get_mariadb_redmatrix_admin_password {
  483. if [ -f /home/$MY_USERNAME/README ]; then
  484. if grep -q "MariaDB Red Matrix admin password" /home/$MY_USERNAME/README; then
  485. REDMATRIX_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB Red Matrix admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  486. fi
  487. fi
  488. }
  489. function get_mariadb_owncloud_admin_password {
  490. if [ -f /home/$MY_USERNAME/README ]; then
  491. if grep -q "Owncloud database password" /home/$MY_USERNAME/README; then
  492. OWNCLOUD_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Owncloud database password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  493. fi
  494. fi
  495. }
  496. # For rsyncrypto usage see http://archive09.linux.com/feature/125322
  497. function create_backup_script {
  498. if grep -Fxq "create_backup_script" $COMPLETION_FILE; then
  499. return
  500. fi
  501. apt-get -y --force-yes install rsyncrypto
  502. get_mariadb_password
  503. get_mariadb_gnusocial_admin_password
  504. get_mariadb_redmatrix_admin_password
  505. get_mariadb_owncloud_admin_password
  506. echo '#!/bin/bash' > /usr/bin/$BACKUP_SCRIPT_NAME
  507. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  508. echo "if [ ! -b $USB_DRIVE ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  509. echo ' echo "Please attach a USB drive"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  510. echo ' exit 1' >> /usr/bin/$BACKUP_SCRIPT_NAME
  511. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  512. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  513. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  514. echo " mkdir $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  515. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  516. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  517. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  518. echo " mkdir $USB_MOUNT/backup" >> /usr/bin/$BACKUP_SCRIPT_NAME
  519. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  520. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  521. echo " echo 'There was a problem making the directory $USB_MOUNT/backup.'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  522. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  523. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  524. echo ' exit 27' >> /usr/bin/$BACKUP_SCRIPT_NAME
  525. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  526. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  527. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  528. echo ' echo "Creating backup key"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  529. echo ' makecert backup' >> /usr/bin/$BACKUP_SCRIPT_NAME
  530. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  531. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  532. echo "if [ ! -f $BACKUP_CERTIFICATE.gpg ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  533. echo ' echo "GPG encrypt the backup key"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  534. echo " gpg -c $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  535. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  536. echo "cp $BACKUP_CERTIFICATE.gpg $USB_MOUNT/backup/key.gpg" >> /usr/bin/$BACKUP_SCRIPT_NAME
  537. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  538. echo '# MariaDB password' >> /usr/bin/$BACKUP_SCRIPT_NAME
  539. echo "DATABASE_PASSWORD='$MARIADB_PASSWORD'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  540. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  541. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  542. BACKUP_INCLUDES_DATABASES="yes"
  543. echo "if [ ! -d $USB_MOUNT/backup/gnusocial ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  544. echo " mkdir -p $USB_MOUNT/backup/gnusocial" >> /usr/bin/$BACKUP_SCRIPT_NAME
  545. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  546. echo "if [ ! -d $USB_MOUNT/backup/gnusocialdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  547. echo " mkdir -p $USB_MOUNT/backup/gnusocialdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  548. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  549. echo "if [ ! -d /root/tempgnusocialdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  550. echo " mkdir -p /root/tempgnusocialdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  551. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  552. echo 'echo "Obtaining GNU Social database backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  553. echo 'mysqldump --password=$DATABASE_PASSWORD gnusocial > /root/tempgnusocialdata/gnusocial.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  554. echo "if [ ! -s /root/tempgnusocialdata/gnusocial.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  555. echo ' echo "GNU social database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  556. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  557. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  558. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  559. echo ' shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  560. echo ' rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  561. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  562. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  563. echo ' exit 379' >> /usr/bin/$BACKUP_SCRIPT_NAME
  564. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  565. echo "rsyncrypto -v -r /root/tempgnusocialdata $USB_MOUNT/backup/gnusocialdata $USB_MOUNT/backup/gnusocialdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  566. echo 'shred -zu /root/tempgnusocialdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  567. echo 'rm -rf /root/tempgnusocialdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  568. echo 'echo "Backing up GNU social installation"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  569. echo "rsyncrypto -v -r /var/www/$MICROBLOG_DOMAIN_NAME/htdocs $USB_MOUNT/backup/gnusocial $USB_MOUNT/backup/gnusocial.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  570. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  571. fi
  572. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  573. BACKUP_INCLUDES_DATABASES="yes"
  574. echo "if [ ! -d $USB_MOUNT/backup/redmatrix ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  575. echo " mkdir -p $USB_MOUNT/backup/redmatrix" >> /usr/bin/$BACKUP_SCRIPT_NAME
  576. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  577. echo "if [ ! -d $USB_MOUNT/backup/redmatrixdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  578. echo " mkdir -p $USB_MOUNT/backup/redmatrixdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  579. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  580. echo "if [ ! -d /root/tempredmatrixdata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  581. echo " mkdir -p /root/tempredmatrixdata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  582. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  583. echo 'echo "Obtaining Red Matrix database backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  584. echo 'mysqldump --password=$DATABASE_PASSWORD redmatrix > /root/tempredmatrixdata/redmatrix.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  585. echo "if [ ! -s /root/tempredmatrixdata/redmatrix.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  586. echo ' echo "Red Matrix database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  587. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  588. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  589. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  590. echo ' shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  591. echo ' rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  592. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  593. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  594. echo ' exit 378' >> /usr/bin/$BACKUP_SCRIPT_NAME
  595. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  596. echo "rsyncrypto -v -r /root/tempredmatrixdata $USB_MOUNT/backup/redmatrixdata $USB_MOUNT/backup/redmatrixdata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  597. echo 'shred -zu /root/tempredmatrixdata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  598. echo 'rm -rf /root/tempredmatrixdata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  599. echo 'echo "Backing up Red Matrix installation"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  600. echo "rsyncrypto -v -r /var/www/$REDMATRIX_DOMAIN_NAME/htdocs $USB_MOUNT/backup/redmatrix $USB_MOUNT/backup/redmatrix.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  601. fi
  602. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  603. BACKUP_INCLUDES_DATABASES="yes"
  604. echo "if [ ! -d $USB_MOUNT/backup/owncloud ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  605. echo " mkdir -p $USB_MOUNT/backup/owncloud" >> /usr/bin/$BACKUP_SCRIPT_NAME
  606. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  607. echo "if [ ! -d $USB_MOUNT/backup/ownclouddata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  608. echo " mkdir -p $USB_MOUNT/backup/ownclouddata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  609. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  610. echo "if [ ! -d /root/tempownclouddata ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  611. echo " mkdir -p /root/tempownclouddata" >> /usr/bin/$BACKUP_SCRIPT_NAME
  612. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  613. echo 'mysqldump --password=$DATABASE_PASSWORD owncloud > /root/tempownclouddata/owncloud.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  614. echo "if [ ! -s /root/tempownclouddata/owncloud.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  615. echo ' echo "Owncloud database could not be saved"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  616. echo ' if [ ! $DATABASE_PASSWORD ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  617. echo " echo 'No MariaDB password was given'" >> /usr/bin/$BACKUP_SCRIPT_NAME
  618. echo " fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  619. echo ' shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  620. echo ' rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  621. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  622. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  623. echo ' exit 377' >> /usr/bin/$BACKUP_SCRIPT_NAME
  624. echo "fi" >> /usr/bin/$BACKUP_SCRIPT_NAME
  625. echo "rsyncrypto -v -r /root/tempownclouddata $USB_MOUNT/backup/ownclouddata $USB_MOUNT/backup/ownclouddata.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  626. echo 'shred -zu /root/tempownclouddata/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  627. echo 'rm -rf /root/tempownclouddata' >> /usr/bin/$BACKUP_SCRIPT_NAME
  628. echo 'echo "Obtaining Owncloud data backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  629. echo "rsyncrypto -v -r /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs $USB_MOUNT/backup/owncloud $USB_MOUNT/backup/owncloud.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  630. fi
  631. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  632. echo "if [ ! -d $USB_MOUNT/backup/wiki ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  633. echo " mkdir -p $USB_MOUNT/backup/wiki" >> /usr/bin/$BACKUP_SCRIPT_NAME
  634. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  635. echo 'echo "Obtaining wiki data backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  636. echo "rsyncrypto -v -r /var/www/$WIKI_DOMAIN_NAME/htdocs $USB_MOUNT/backup/wiki $USB_MOUNT/backup/wiki.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  637. fi
  638. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  639. echo "if [ ! -d $USB_MOUNT/backup/blog ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  640. echo " mkdir -p $USB_MOUNT/backup/blog" >> /usr/bin/$BACKUP_SCRIPT_NAME
  641. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  642. echo 'echo "Obtaining blog backup"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  643. echo "rsyncrypto -v -r /var/www/$FULLBLOG_DOMAIN_NAME/htdocs $USB_MOUNT/backup/blog $USB_MOUNT/backup/blog.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  644. fi
  645. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  646. echo '# Backup certificates' >> /usr/bin/$BACKUP_SCRIPT_NAME
  647. echo "if [ -d /etc/ssl ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  648. echo ' echo "Backing up certificates"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  649. echo " if [ ! -d $USB_MOUNT/backup/ssl ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  650. echo " mkdir -p $USB_MOUNT/backup/ssl" >> /usr/bin/$BACKUP_SCRIPT_NAME
  651. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  652. echo " rsyncrypto -v -r /etc/ssl $USB_MOUNT/backup/ssl $USB_MOUNT/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  653. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  654. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  655. echo '# Backup projects' >> /usr/bin/$BACKUP_SCRIPT_NAME
  656. echo "if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  657. echo ' echo "Backing up projects"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  658. echo " if [ ! -d $USB_MOUNT/backup/projects ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  659. echo " mkdir -p $USB_MOUNT/backup/projects" >> /usr/bin/$BACKUP_SCRIPT_NAME
  660. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  661. echo " rsyncrypto -v -r /home/$MY_USERNAME/projects $USB_MOUNT/backup/projects $USB_MOUNT/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  662. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  663. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  664. echo '# Backup personal settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  665. echo "if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  666. echo ' echo "Backing up personal settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  667. echo " if [ ! -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  668. echo " mkdir -p $USB_MOUNT/backup/personal" >> /usr/bin/$BACKUP_SCRIPT_NAME
  669. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  670. echo " rsyncrypto -v -r /home/$MY_USERNAME/personal $USB_MOUNT/backup/personal $USB_MOUNT/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  671. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  672. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  673. echo '# Backup the public mailing list' >> /usr/bin/$BACKUP_SCRIPT_NAME
  674. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  675. echo ' echo "Backing up the public mailing list"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  676. echo " if [ ! -d $USB_MOUNT/backup/mailinglist ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  677. echo " mkdir -p $USB_MOUNT/backup/mailinglist" >> /usr/bin/$BACKUP_SCRIPT_NAME
  678. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  679. echo " rsyncrypto -v -r $PUBLIC_MAILING_LIST_DIRECTORY $USB_MOUNT/backup/mailinglist $USB_MOUNT/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  680. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  681. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  682. echo '# Backup xmpp settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  683. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  684. echo ' echo "Backing up the XMPP settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  685. echo " if [ ! -d $USB_MOUNT/backup/xmpp ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  686. echo " mkdir -p $USB_MOUNT/backup/xmpp" >> /usr/bin/$BACKUP_SCRIPT_NAME
  687. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  688. echo " rsyncrypto -v -r $XMPP_DIRECTORY $USB_MOUNT/backup/xmpp $USB_MOUNT/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  689. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  690. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  691. #echo '# Backup web content' >> /usr/bin/$BACKUP_SCRIPT_NAME
  692. #echo 'echo "Backing up web content"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  693. #echo "if [ ! -d $USB_MOUNT/backup/www ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  694. #echo " mkdir -p $USB_MOUNT/backup/www" >> /usr/bin/$BACKUP_SCRIPT_NAME
  695. #echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  696. #echo "rsyncrypto -v -r /var/www $USB_MOUNT/backup/www $USB_MOUNT/backup/www.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  697. #echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  698. echo '# Backup other stuff' >> /usr/bin/$BACKUP_SCRIPT_NAME
  699. echo '# Put some files into a temporary directory so that they can be easily backed up' >> /usr/bin/$BACKUP_SCRIPT_NAME
  700. echo "if [ ! -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  701. echo " mkdir /home/$MY_USERNAME/tempfiles" >> /usr/bin/$BACKUP_SCRIPT_NAME
  702. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  703. echo 'echo "Backing up miscellaneous files"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  704. echo "if [ ! -d $USB_MOUNT/backup/misc ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  705. echo " mkdir -p $USB_MOUNT/backup/misc" >> /usr/bin/$BACKUP_SCRIPT_NAME
  706. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  707. echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /etc/nginx/sites-available /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_SCRIPT_NAME
  708. echo "rsyncrypto -v -r /home/$MY_USERNAME/tempfiles $USB_MOUNT/backup/misc $USB_MOUNT/backup/misc.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  709. echo '# Remove temporary files' >> /usr/bin/$BACKUP_SCRIPT_NAME
  710. echo "if [ -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  711. echo ' echo "Removing temporary files"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  712. echo " shred -zu /home/$MY_USERNAME/tempfiles/*" >> /usr/bin/$BACKUP_SCRIPT_NAME
  713. echo " rm -rf /home/$MY_USERNAME/tempfiles" >> /usr/bin/$BACKUP_SCRIPT_NAME
  714. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  715. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  716. echo '# Backup email' >> /usr/bin/$BACKUP_SCRIPT_NAME
  717. echo "if [ -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  718. echo ' echo "Backing up emails"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  719. echo " if [ ! -d $USB_MOUNT/backup/mail ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  720. echo " mkdir -p $USB_MOUNT/backup/mail" >> /usr/bin/$BACKUP_SCRIPT_NAME
  721. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  722. echo " rsyncrypto -v -r /home/$MY_USERNAME/Maildir $USB_MOUNT/backup/mail $USB_MOUNT/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  723. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  724. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  725. echo '# Backup DLNA cache' >> /usr/bin/$BACKUP_SCRIPT_NAME
  726. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  727. echo ' echo "Backing up DLNA cache"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  728. echo " if [ ! -d $USB_MOUNT/backup/dlna ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  729. echo " mkdir -p $USB_MOUNT/backup/dlna" >> /usr/bin/$BACKUP_SCRIPT_NAME
  730. echo ' fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  731. echo " rsyncrypto -v -r /var/cache/minidlna $USB_MOUNT/backup/dlna $USB_MOUNT/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  732. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  733. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  734. if [[ $BACKUP_INCLUDES_DATABASES == "yes" ]]; then
  735. echo '# Mysql settings' >> /usr/bin/$BACKUP_SCRIPT_NAME
  736. echo "if [ ! -d $USB_MOUNT/backup/mariadb ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  737. echo " mkdir -p $USB_MOUNT/backup/mariadb" >> /usr/bin/$BACKUP_SCRIPT_NAME
  738. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  739. echo 'if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$BACKUP_SCRIPT_NAME
  740. echo ' mkdir /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  741. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  742. echo 'mysqldump --password=$DATABASE_PASSWORD mysql user > /root/tempmariadb/mysql.sql' >> /usr/bin/$BACKUP_SCRIPT_NAME
  743. echo "if [ ! -s /root/tempmariadb/mysql.sql ]; then" >> /usr/bin/$BACKUP_SCRIPT_NAME
  744. echo ' echo "Unable to backup mysql settings"' >> /usr/bin/$BACKUP_SCRIPT_NAME
  745. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  746. echo " umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  747. echo " rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  748. echo ' exit 653' >> /usr/bin/$BACKUP_SCRIPT_NAME
  749. echo 'fi' >> /usr/bin/$BACKUP_SCRIPT_NAME
  750. echo 'echo "$DATABASE_PASSWORD" > /root/tempmariadb/db' >> /usr/bin/$BACKUP_SCRIPT_NAME
  751. echo 'chmod 400 /root/tempmariadb/db' >> /usr/bin/$BACKUP_SCRIPT_NAME
  752. echo "rsyncrypto -v -r /root/tempmariadb $USB_MOUNT/backup/mariadb $USB_MOUNT/backup/mariadb.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_SCRIPT_NAME
  753. echo 'shred -zu /root/tempmariadb/*' >> /usr/bin/$BACKUP_SCRIPT_NAME
  754. echo 'rm -rf /root/tempmariadb' >> /usr/bin/$BACKUP_SCRIPT_NAME
  755. echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
  756. fi
  757. echo 'sync' >> /usr/bin/$BACKUP_SCRIPT_NAME
  758. echo "umount $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  759. echo "rm -rf $USB_MOUNT" >> /usr/bin/$BACKUP_SCRIPT_NAME
  760. echo 'echo "Backup to USB drive is complete. You can now unplug it."' >> /usr/bin/$BACKUP_SCRIPT_NAME
  761. echo 'exit 0' >> /usr/bin/$BACKUP_SCRIPT_NAME
  762. chmod 400 /usr/bin/$BACKUP_SCRIPT_NAME
  763. chmod +x /usr/bin/$BACKUP_SCRIPT_NAME
  764. echo 'create_backup_script' >> $COMPLETION_FILE
  765. }
  766. function create_restore_script {
  767. if grep -Fxq "create_restore_script" $COMPLETION_FILE; then
  768. return
  769. fi
  770. apt-get -y --force-yes install rsyncrypto
  771. get_mariadb_password
  772. get_mariadb_gnusocial_admin_password
  773. get_mariadb_redmatrix_admin_password
  774. get_mariadb_owncloud_admin_password
  775. echo '#!/bin/bash' > /usr/bin/$RESTORE_SCRIPT_NAME
  776. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  777. echo "if [ ! -b $USB_DRIVE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  778. echo ' echo "Please attach a USB drive"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  779. echo ' exit 1' >> /usr/bin/$RESTORE_SCRIPT_NAME
  780. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  781. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  782. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  783. echo " mkdir $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  784. echo " mount $USB_DRIVE $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  785. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  786. echo "if [ ! -d $USB_MOUNT/backup ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  787. echo ' echo "No backup directory found on the USB drive."' >> /usr/bin/$RESTORE_SCRIPT_NAME
  788. echo ' exit 2' >> /usr/bin/$RESTORE_SCRIPT_NAME
  789. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  790. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  791. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  792. echo " if [ -f $USB_MOUNT/backup/key.gpg ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  793. echo " if [ -f $BACKUP_CERTIFICATE.new ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  794. echo " rm $BACKUP_CERTIFICATE.new" >> /usr/bin/$RESTORE_SCRIPT_NAME
  795. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  796. echo " cp $USB_MOUNT/backup/key.gpg /root/tempbackupkey.gpg" >> /usr/bin/$RESTORE_SCRIPT_NAME
  797. echo " gpg /root/tempbackupkey.gpg" >> /usr/bin/$RESTORE_SCRIPT_NAME
  798. echo " if [ -f /root/tempbackupkey ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  799. echo ' echo "Backup key decrypted"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  800. echo " cp /root/tempbackupkey $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  801. echo " shred -zu /root/tempbackupkey" >> /usr/bin/$RESTORE_SCRIPT_NAME
  802. echo " chmod 400 $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  803. echo ' else' >> /usr/bin/$RESTORE_SCRIPT_NAME
  804. echo ' echo "Unable to decrypt the backup key"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  805. echo ' exit 735' >> /usr/bin/$RESTORE_SCRIPT_NAME
  806. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  807. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  808. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  809. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  810. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  811. echo " echo 'No backup key was found. Copy your backup key to $BACKUP_CERTIFICATE'" >> /usr/bin/$RESTORE_SCRIPT_NAME
  812. echo ' exit 563' >> /usr/bin/$RESTORE_SCRIPT_NAME
  813. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  814. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  815. echo '# MariaDB password' >> /usr/bin/$RESTORE_SCRIPT_NAME
  816. echo "DATABASE_PASSWORD='$MARIADB_PASSWORD'" >> /usr/bin/$RESTORE_SCRIPT_NAME
  817. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  818. if [[ $BACKUP_INCLUDES_DATABASES == "yes" ]]; then
  819. echo 'echo "Restoring mysql settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  820. echo "if [ ! -d $USB_MOUNT/backup/mariadb ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  821. echo ' if [ ! -d /root/tempmariadb ]; then' >> /usr/bin/$RESTORE_SCRIPT_NAME
  822. echo ' mkdir /root/tempmariadb' >> /usr/bin/$RESTORE_SCRIPT_NAME
  823. echo ' fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  824. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mariadb /root/tempmariadb $USB_MOUNT/backup/mariadb.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  825. echo ' echo "Get the MariaDB password from the backup"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  826. echo ' BACKUP_MARIADB_PASSWORD=$(</root/tempmariadb/db)' >> /usr/bin/$RESTORE_SCRIPT_NAME
  827. echo ' echo "Restore the MariaDB user table"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  828. echo ' mysql -u root --password=$DATABASE_PASSWORD mysql -o < /root/tempmariadb/mysql.sql' >> /usr/bin/$RESTORE_SCRIPT_NAME
  829. echo ' shred -zu /root/tempmariadb/*' >> /usr/bin/$RESTORE_SCRIPT_NAME
  830. echo ' rm -rf /root/tempmariadb' >> /usr/bin/$RESTORE_SCRIPT_NAME
  831. echo ' echo "Apply the new MariaDB user table"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  832. echo ' mysql -u root --password=$DATABASE_PASSWORD "flush privileges;"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  833. echo ' echo "Change the MariaDB password to the backup version"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  834. echo ' DATABASE_PASSWORD=$BACKUP_MARIADB_PASSWORD' >> /usr/bin/$RESTORE_SCRIPT_NAME
  835. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  836. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  837. fi
  838. echo "if [ -d $USB_MOUNT/backup/ssl ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  839. echo ' echo "Restoring certificates"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  840. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/ssl /etc/ssl $USB_MOUNT/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  841. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  842. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  843. echo "if [ -d $USB_MOUNT/backup/projects ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  844. echo ' echo "Restoring projects"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  845. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/projects /home/$MY_USERNAME/projects $USB_MOUNT/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  846. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  847. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  848. echo "if [ -d $USB_MOUNT/backup/personal ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  849. echo ' echo "Restoring personal settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  850. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/personal /home/$MY_USERNAME/personal $USB_MOUNT/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  851. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  852. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  853. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  854. echo ' echo "Restoring public mailing list"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  855. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mailinglist $PUBLIC_MAILING_LIST_DIRECTORY $USB_MOUNT/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  856. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  857. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  858. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  859. echo ' echo "Restoring XMPP settings"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  860. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/xmpp $XMPP_DIRECTORY $USB_MOUNT/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  861. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  862. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  863. #echo 'echo "Restoring web content"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  864. #echo "rsyncrypto -v -d -r $USB_MOUNT/backup/www /var/www $USB_MOUNT/www.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  865. #echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  866. echo 'echo "Restoring miscellaneous files"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  867. echo "if [ -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  868. echo " shred -zu /home/$MY_USERNAME/tempfiles/*" >> /usr/bin/$RESTORE_SCRIPT_NAME
  869. echo 'else' >> /usr/bin/$RESTORE_SCRIPT_NAME
  870. echo " mkdir -p /home/$MY_USERNAME/tempfiles" >> /usr/bin/$RESTORE_SCRIPT_NAME
  871. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  872. echo "rsyncrypto -v -d -r $USB_MOUNT/backup/misc /home/$MY_USERNAME/tempfiles $USB_MOUNT/backup/misc.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  873. echo "tar -xzvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz -C /" >> /usr/bin/$RESTORE_SCRIPT_NAME
  874. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  875. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  876. echo "if [ -f $USB_MOUNT/backup/gnusocial.sql ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  877. echo ' echo "Restoring microblog database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  878. echo -n ' mysql -u root --password=$DATABASE_PASSWORD gnusocial -o < ' >> /usr/bin/$RESTORE_SCRIPT_NAME
  879. echo "$USB_MOUNT/backup/gnusocial.sql" >> /usr/bin/$RESTORE_SCRIPT_NAME
  880. echo ' echo "Restoring microblog installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  881. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/gnusocial /var/www/$MICROBLOG_DOMAIN_NAME/htdocs $USB_MOUNT/backup/gnusocial.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  882. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  883. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  884. fi
  885. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  886. echo "if [ -f $USB_MOUNT/backup/redmatrix.sql ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  887. echo ' echo "Restoring Red Matrix database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  888. echo -n ' mysql -u root --password=$DATABASE_PASSWORD redmatrix -o < ' >> /usr/bin/$RESTORE_SCRIPT_NAME
  889. echo "$USB_MOUNT/backup/redmatrix.sql" >> /usr/bin/$RESTORE_SCRIPT_NAME
  890. echo ' echo "Restoring Red Matrix installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  891. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/redmatrix /var/www/$REDMATRIX_DOMAIN_NAME/htdocs $USB_MOUNT/backup/redmatrix.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  892. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  893. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  894. fi
  895. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  896. echo "if [ -f $USB_MOUNT/backup/owncloud.sql ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  897. echo ' echo "Restoring owncloud database"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  898. echo -n ' mysql -u root --password=$DATABASE_PASSWORD owncloud -o < ' >> /usr/bin/$RESTORE_SCRIPT_NAME
  899. echo "$USB_MOUNT/backup/owncloud.sql" >> /usr/bin/$RESTORE_SCRIPT_NAME
  900. echo ' echo "Restoring Owncloud installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  901. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/owncloud /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs $USB_MOUNT/backup/owncloud.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  902. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  903. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  904. fi
  905. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  906. echo "if [ -f /home/$MY_USERNAME/tempfiles/wiki.tar.gz ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  907. echo ' echo "Restoring Wiki installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  908. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/wiki /var/www/$WIKI_DOMAIN_NAME/htdocs $USB_MOUNT/backup/wiki.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  909. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  910. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  911. fi
  912. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  913. echo "if [ -f /home/$MY_USERNAME/tempfiles/blog.tar.gz ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  914. echo ' echo "Restoring blog installation"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  915. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/blog /var/www/$FULLBLOG_DOMAIN_NAME/htdocs $USB_MOUNT/backup/blog.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  916. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  917. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  918. fi
  919. echo 'echo "Removing temporary files"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  920. echo "rm -rf /home/$MY_USERNAME/tempfiles" >> /usr/bin/$RESTORE_SCRIPT_NAME
  921. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  922. echo "if [ -d $USB_MOUNT/backup/mail ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  923. echo ' echo "Restoring emails"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  924. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/mail /home/$MY_USERNAME/Maildir $USB_MOUNT/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  925. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  926. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  927. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$RESTORE_SCRIPT_NAME
  928. echo ' echo "Restoring DLNA cache"' >> /usr/bin/$RESTORE_SCRIPT_NAME
  929. echo " rsyncrypto -v -d -r $USB_MOUNT/backup/dlna /var/cache/minidlna $USB_MOUNT/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_SCRIPT_NAME
  930. echo 'fi' >> /usr/bin/$RESTORE_SCRIPT_NAME
  931. echo '' >> /usr/bin/$RESTORE_SCRIPT_NAME
  932. echo 'sync' >> /usr/bin/$RESTORE_SCRIPT_NAME
  933. echo "umount $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  934. echo "rm -rf $USB_MOUNT" >> /usr/bin/$RESTORE_SCRIPT_NAME
  935. echo 'echo "Restore from USB drive is complete. You can now remove it."' >> /usr/bin/$RESTORE_SCRIPT_NAME
  936. echo 'exit 0' >> /usr/bin/$RESTORE_SCRIPT_NAME
  937. chmod 400 /usr/bin/$RESTORE_SCRIPT_NAME
  938. chmod +x /usr/bin/$RESTORE_SCRIPT_NAME
  939. echo 'create_restore_script' >> $COMPLETION_FILE
  940. }
  941. function backup_to_friends_servers {
  942. if grep -Fxq "backup_to_friends_servers" $COMPLETION_FILE; then
  943. return
  944. fi
  945. if [ ! $FRIENDS_SERVERS_LIST ]; then
  946. return
  947. fi
  948. apt-get -y --force-yes install rsyncrypto
  949. get_mariadb_password
  950. get_mariadb_gnusocial_admin_password
  951. get_mariadb_redmatrix_admin_password
  952. get_mariadb_owncloud_admin_password
  953. if ! grep -q "backups on friends servers" /home/$MY_USERNAME/README; then
  954. echo '' >> /home/$MY_USERNAME/README
  955. echo '' >> /home/$MY_USERNAME/README
  956. echo 'Backups' >> /home/$MY_USERNAME/README
  957. echo '=======' >> /home/$MY_USERNAME/README
  958. echo 'Key file: /root/backupkey' >> /home/$MY_USERNAME/README
  959. echo "To add friends servers create a file called $FRIENDS_SERVERS_LIST"
  960. echo 'and add entries like this:' >> /home/$MY_USERNAME/README
  961. echo '' >> /home/$MY_USERNAME/README
  962. echo 'username1@domain1:2222//home/username1 ssh_password1' >> /home/$MY_USERNAME/README
  963. echo 'username2@domain2:2222//home/username2 ssh_password2' >> /home/$MY_USERNAME/README
  964. echo '...' >> /home/$MY_USERNAME/README
  965. echo '' >> /home/$MY_USERNAME/README
  966. echo 'The system will try to backup to these remote locations once per day.' >> /home/$MY_USERNAME/README
  967. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  968. fi
  969. echo '#!/bin/bash' > /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  970. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  971. echo "if [ ! -f $BACKUP_CERTIFICATE ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  972. echo ' echo "Creating backup key"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  973. echo ' makecert backup' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  974. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  975. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  976. echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  977. echo ' exit 1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  978. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  979. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  980. echo '# Put some files into a temporary directory so that they can be easily backed up' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  981. echo "if [ ! -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  982. echo " mkdir /home/$MY_USERNAME/tempfiles" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  983. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  984. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  985. echo 'if [ -f /var/backups/gnusocial_daily.sql ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  986. echo " cp /var/backups/gnusocial_daily.sql /home/$MY_USERNAME/tempfiles/gnusocial.sql" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  987. echo 'else' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  988. echo " mysqldump --password=$MARIADB_PASSWORD gnusocial > /home/$MY_USERNAME/tempfiles/gnusocial.sql" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  989. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  990. echo "tar -czvf /home/$MY_USERNAME/tempfiles/gnusocial.tar.gz /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/config.php" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  991. fi
  992. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  993. echo 'if [ -f /var/backups/redmatrix_daily.sql ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  994. echo " cp /var/backups/redmatrix_daily.sql /home/$MY_USERNAME/tempfiles/redmatrix.sql" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  995. echo 'else' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  996. echo " mysqldump --password=$MARIADB_PASSWORD redmatrix > /home/$MY_USERNAME/tempfiles/redmatrix.sql" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  997. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  998. echo "tar -czvf /home/$MY_USERNAME/tempfiles/redmatrix.tar.gz /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/.htconfig.php /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  999. fi
  1000. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1001. echo "tar -czvf /home/$MY_USERNAME/tempfiles/owncloud.tar.gz /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs/data/$MY_USERNAME" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1002. fi
  1003. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  1004. echo "tar -czvf /home/$MY_USERNAME/tempfiles/wiki.tar.gz /var/lib/dokuwiki/data" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1005. fi
  1006. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  1007. echo "tar -czvf /home/$MY_USERNAME/tempfiles/blog.tar.gz /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/data" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1008. fi
  1009. echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /var/lib/mysql/mysql /var/www /etc/nginx/sites-available /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1010. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1011. echo 'while read remote_server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1012. echo 'do' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1013. echo ' # Get the server and its password' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1014. echo ' SERVER="scp://${* %%remote_server}"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1015. echo ' FTP_PASSWORD="${remote_server%% *}"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1016. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1017. echo ' # Backup certificates' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1018. echo " if [ -d /etc/ssl ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1019. echo ' echo "Backing up certificates"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1020. echo " if [ ! -d $SEVER/backup/ssl ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1021. echo " mkdir -p $SERVER/backup/certs" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1022. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1023. echo " rsyncrypto -r /etc/ssl $SERVER/backup/ssl $SERVER/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1024. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1025. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1026. echo ' # Backup projects' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1027. echo "if [ -d /home/$MY_USERNAME/projects ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1028. echo ' echo "Backing up projects"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1029. echo " if [ ! -d $SERVER/backup/projects ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1030. echo " mkdir -p $SERVER/backup/projects" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1031. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1032. echo " rsyncrypto -r /home/$MY_USERNAME/projects $SERVER/backup/projects $SERVER/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1033. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1034. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1035. echo ' # Backup personal settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1036. echo " if [ -d /home/$MY_USERNAME/personal ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1037. echo ' echo "Backing up personal settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1038. echo " if [ ! -d $SERVER/backup/personal ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1039. echo " mkdir -p $SERVER/backup/personal" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1040. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1041. echo " rsyncrypto -r /home/$MY_USERNAME/personal $SERVER/backup/personal $SERVER/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1042. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1043. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1044. echo ' # Backup the public mailing list' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1045. echo " if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1046. echo ' echo "Backing up the public mailing list"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1047. echo " if [ ! -d $SERVER/backup/mailinglist ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1048. echo " mkdir -p $SERVER/backup/mailinglist" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1049. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1050. echo " rsyncrypto -r $PUBLIC_MAILING_LIST_DIRECTORY $SERVER/backup/mailinglist $SERVER/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1051. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1052. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1053. echo ' # Backup xmpp settings' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1054. echo " if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1055. echo ' echo "Backing up the XMPP settings"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1056. echo " if [ ! -d $SERVER/backup/xmpp ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1057. echo " mkdir -p $SERVER/backup/xmpp" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1058. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1059. echo " rsyncrypto -r $XMPP_DIRECTORY $SERVER/backup/xmpp $SERVER/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1060. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1061. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1062. #echo '# Backup web content' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1063. #echo ' echo "Backing up web content"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1064. #echo " if [ ! -d $SERVER/backup/www ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1065. #echo " mkdir -p $SERVER/backup/www" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1066. #echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1067. #echo " rsyncrypto -r /var/www $SERVER/backup/www $SERVER/backup/www.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1068. #echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1069. echo ' # Backup miscellaneous stuff' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1070. echo " if [ -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1071. echo ' echo "Backing up miscellaneous files"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1072. echo " if [ ! -d $SERVER/backup/misc ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1073. echo " mkdir -p $SERVER/backup/misc" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1074. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1075. echo " rsyncrypto -r /home/$MY_USERNAME/tempfiles $SERVER/backup/misc $SERVER/backup/misc.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1076. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1077. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1078. echo ' # Backup email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1079. echo " if [ -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1080. echo ' echo "Backing up emails"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1081. echo " if [ ! -d $SERVER/backup/mail ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1082. echo " mkdir -p $SERVER/backup/mail" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1083. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1084. echo " rsyncrypto -r /home/$MY_USERNAME/Maildir $SERVER/backup/mail $SERVER/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1085. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1086. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1087. echo ' # Backup DLNA cache' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1088. echo " if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1089. echo ' echo "Backing up DLNA cache"' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1090. echo " if [ ! -d $SERVER/backup/dlna ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1091. echo " mkdir -p $SERVER/backup/dlna" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1092. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1093. echo " rsyncrypto -r /var/cache/minidlna $SERVER/backup/dlna $SERVER/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1094. echo ' fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1095. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1096. echo "done < $FRIENDS_SERVERS_LIST" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1097. echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1098. echo '# Remove temporary files' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1099. echo "if [ -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1100. echo " rm -rf /home/$MY_USERNAME/tempfiles" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1101. echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1102. echo 'exit 0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1103. chown root:root /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1104. chmod 400 /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1105. chmod +x /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
  1106. # update crontab
  1107. echo '#!/bin/bash' > /etc/cron.daily/backuptofriends
  1108. echo "/usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME" >> /etc/cron.daily/backuptofriends
  1109. chmod +x /etc/cron.daily/backuptofriends
  1110. echo 'backup_to_friends_servers' >> $COMPLETION_FILE
  1111. }
  1112. function restore_from_friend {
  1113. if grep -Fxq "restore_from_friend" $COMPLETION_FILE; then
  1114. return
  1115. fi
  1116. apt-get -y --force-yes install rsyncrypto
  1117. get_mariadb_password
  1118. get_mariadb_gnusocial_admin_password
  1119. get_mariadb_redmatrix_admin_password
  1120. get_mariadb_owncloud_admin_password
  1121. if ! grep -q "restore from a friend's server" /home/$MY_USERNAME/README; then
  1122. echo '' >> /home/$MY_USERNAME/README
  1123. echo '' >> /home/$MY_USERNAME/README
  1124. echo 'Restoring from backups to friends servers' >> /home/$MY_USERNAME/README
  1125. echo '=========================================' >> /home/$MY_USERNAME/README
  1126. echo "To restore from a friend's server use the command:" >> /home/$MY_USERNAME/README
  1127. echo '' >> /home/$MY_USERNAME/README
  1128. echo " $RESTORE_FROM_FRIEND_SCRIPT_NAME [server]" >> /home/$MY_USERNAME/README
  1129. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  1130. fi
  1131. echo '#!/bin/bash' > /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1132. echo 'SERVER_NAME=$1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1133. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1134. echo 'if [ ! $SERVER_NAME ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1135. echo " echo '$RESTORE_FROM_FRIEND_SCRIPT_NAME [server]'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1136. echo ' exit 1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1137. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1138. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1139. echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1140. echo " echo 'No friends list found at $FRIENDS_SERVERS_LIST'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1141. echo ' exit 2' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1142. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1143. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1144. echo -n 'if ! grep -q "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1145. echo "$FRIENDS_SERVERS_LIST; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1146. echo ' echo "Server not found within the friends list"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1147. echo ' exit 3' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1148. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1149. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1150. echo -n 'SERVER=$(grep -i "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1151. echo "$FRIENDS_SERVERS_LIST | awk -F ' ' '{print $1}')" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1152. echo -n 'FTP_PASSWORD=$(grep -i "$SERVER_NAME" ' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1153. echo "$FRIENDS_SERVERS_LIST | awk -F ' ' '{print $2}')" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1154. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1155. echo '# Check that a backup key exists' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1156. echo 'if [ ! -f $BACKUP_CERTIFICATE ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1157. echo " echo 'No backup key was found in $BACKUP_CERTIFICATE'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1158. echo ' exit 84' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1159. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1160. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1161. echo 'echo "Restoring certificates"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1162. echo "rsyncrypto -d -r scp://$SERVER/backup/ssl /etc/ssl scp://$SERVER/backup/ssl.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1163. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1164. echo 'echo "Restoring projects"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1165. echo "rsyncrypto -d -r scp://$SERVER/backup/projects /home/$MY_USERNAME/projects scp://$SERVER/backup/projects.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1166. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1167. echo 'echo "Restoring personal settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1168. echo "rsyncrypto -d -r scp://$SERVER/backup/personal /home/$MY_USERNAME/personal scp://$SERVER/backup/personal.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1169. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1170. echo "if [ -d $PUBLIC_MAILING_LIST_DIRECTORY ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1171. echo ' echo "Restoring public mailing list"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1172. echo " rsyncrypto -d -r scp://$SERVER/backup/mailinglist $PUBLIC_MAILING_LIST_DIRECTORY scp://$SERVER/backup/mailinglist.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1173. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1174. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1175. echo "if [ -d $XMPP_DIRECTORY ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1176. echo ' echo "Restoring XMPP settings"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1177. echo " rsyncrypto -d -r scp://$SERVER/backup/xmpp $XMPP_DIRECTORY scp://$SERVER/backup/xmpp.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1178. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1179. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1180. echo "if [ -d /home/$MY_USERNAME/tempfiles ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1181. echo " rm -rf /home/$MY_USERNAME/tempfiles/*" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1182. echo 'else' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1183. echo " mkdir -p /home/$MY_USERNAME/tempfiles" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1184. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1185. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1186. #echo 'echo "Restoring web content"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1187. #echo "rsyncrypto -d -r scp://$SERVER/backup/www /var/www scp://$SERVER/keys/www $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1188. #echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1189. echo 'echo "Restoring miscellaneous files"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1190. echo "rsyncrypto -d -r scp://$SERVER/backup/misc /home/$MY_USERNAME/tempfiles scp://$SERVER/backup/misc.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1191. echo "tar -xzvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1192. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1193. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  1194. echo "if [ -f /home/$MY_USERNAME/tempfiles/gnusocial.sql ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1195. echo ' echo "Restoring microblog database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1196. echo " mysql -u root --password=$MARIADB_PASSWORD gnusocial -o < /home/$MY_USERNAME/tempfiles/gnusocial.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1197. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/gnusocial.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1198. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1199. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1200. fi
  1201. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  1202. echo "if [ -f /home/$MY_USERNAME/tempfiles/redmatrix.sql ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1203. echo ' echo "Restoring Red Matrix database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1204. echo " mysql -u root --password=$MARIADB_PASSWORD redmatrix -o < /home/$MY_USERNAME/tempfiles/redmatrix.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1205. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/redmatrix.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1206. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1207. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1208. fi
  1209. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1210. echo "if [ -f /home/$MY_USERNAME/tempfiles/owncloud.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1211. echo ' echo "Restoring Owncloud"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1212. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/owncloud.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1213. echo ' echo "Restoring owncloud database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1214. echo " mysql -u root --password=$MARIADB_PASSWORD owncloud -o < /home/$MY_USERNAME/tempfiles/owncloud.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1215. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1216. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1217. fi
  1218. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  1219. echo "if [ -f /home/$MY_USERNAME/tempfiles/wiki.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1220. echo ' echo "Restoring Wiki"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1221. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/wiki.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1222. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1223. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1224. fi
  1225. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  1226. echo "if [ -f /home/$MY_USERNAME/tempfiles/blog.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1227. echo ' echo "Restoring blog"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1228. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/blog.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1229. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1230. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1231. fi
  1232. echo "rm -rf /home/$MY_USERNAME/tempfiles" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1233. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1234. echo "if [ -d /home/$MY_USERNAME/Maildir ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1235. echo ' echo "Restoring emails"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1236. echo " rsyncrypto -d -r scp://$SERVER/backup/mail /home/$MY_USERNAME/Maildir scp://$SERVER/backup/mail.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1237. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1238. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1239. echo "if [ -d /var/cache/minidlna ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1240. echo ' echo "Restoring DLNA cache"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1241. echo " rsyncrypto -d -r scp://$SERVER/backup/dlna /var/cache/minidlna scp://$SERVER/backup/dlna.keys $BACKUP_CERTIFICATE" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1242. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1243. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1244. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  1245. echo "if [ -f /home/$MY_USERNAME/tempfiles/gnusocial.sql ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1246. echo ' echo "Restoring microblog database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1247. echo " mysql -u root --password=$MARIADB_PASSWORD gnusocial -o < /home/$MY_USERNAME/tempfiles/gnusocial.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1248. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/gnusocial.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1249. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1250. fi
  1251. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  1252. echo "if [ -f /home/$MY_USERNAME/tempfiles/redmatrix.sql ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1253. echo ' echo "Restoring Red Matrix database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1254. echo " mysql -u root --password=$MARIADB_PASSWORD redmatrix -o < /home/$MY_USERNAME/tempfiles/redmatrix.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1255. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/redmatrix.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1256. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1257. fi
  1258. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  1259. echo "if [ -f /home/$MY_USERNAME/tempfiles/owncloud.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1260. echo ' echo "Restoring Owncloud"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1261. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/owncloud.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1262. echo ' echo "Restoring owncloud database"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1263. echo " mysql -u root --password=$MARIADB_PASSWORD owncloud -o < /home/$MY_USERNAME/tempfiles/owncloud.sql" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1264. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1265. fi
  1266. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  1267. echo "if [ -f /home/$MY_USERNAME/tempfiles/wiki.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1268. echo ' echo "Restoring Wiki"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1269. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/wiki.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1270. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1271. fi
  1272. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  1273. echo "if [ -f /home/$MY_USERNAME/tempfiles/blog.tar.gz ]; then" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1274. echo ' echo "Restoring Blog"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1275. echo " tar -xzvf /home/$MY_USERNAME/tempfiles/blog.tar.gz -C /" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1276. echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1277. fi
  1278. echo "rm -rf /home/$MY_USERNAME/tempfiles" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1279. echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1280. echo 'exit 0' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
  1281. echo 'restore_from_friend' >> $COMPLETION_FILE
  1282. }
  1283. function remove_default_user {
  1284. # make sure you don't use the default user account
  1285. if [[ $MY_USERNAME == "debian" ]]; then
  1286. echo 'Do not use the default debian user account. Create a different user with: adduser [username]'
  1287. exit 68
  1288. fi
  1289. # remove the default debian user to prevent it from becoming an attack vector
  1290. if [ -d /home/debian ]; then
  1291. userdel -r debian
  1292. echo 'Default debian user account removed'
  1293. fi
  1294. }
  1295. function enforce_good_passwords {
  1296. # because humans are generally bad at choosing passwords
  1297. if grep -Fxq "enforce_good_passwords" $COMPLETION_FILE; then
  1298. return
  1299. fi
  1300. apt-get -y --force-yes install libpam-cracklib
  1301. sed -i 's/password.*requisite.*pam_cracklib.so.*/password required pam_cracklib.so retry=2 dcredit=-4 ucredit=-1 ocredit=-1 lcredit=0 minlen=10 reject_username/g' /etc/pam.d/common-password
  1302. echo 'enforce_good_passwords' >> $COMPLETION_FILE
  1303. }
  1304. function change_login_message {
  1305. if grep -Fxq "change_login_message" $COMPLETION_FILE; then
  1306. return
  1307. fi
  1308. echo '' > /etc/motd
  1309. echo ".---. . . " >> /etc/motd
  1310. echo "| | | " >> /etc/motd
  1311. echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. " >> /etc/motd
  1312. echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' " >> /etc/motd
  1313. echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" >> /etc/motd
  1314. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  1315. echo ' . . . ' >> /etc/motd
  1316. echo ' |\ /| | o ' >> /etc/motd
  1317. echo " | \/ | .-. .-.| . .-. " >> /etc/motd
  1318. echo " | |(.-'( | | ( ) " >> /etc/motd
  1319. echo " ' ' --' -' --' - -' - " >> /etc/motd
  1320. fi
  1321. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  1322. echo ' . . . . . ' >> /etc/motd
  1323. echo ' \ \ / / o _|_ ' >> /etc/motd
  1324. echo ' \ \ /.--.. | .-. .--.' >> /etc/motd
  1325. echo " \/ \/ | | | (.-' | " >> /etc/motd
  1326. echo " ' ' ' -' - -' --'' " >> /etc/motd
  1327. fi
  1328. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  1329. echo ' .--.. . ' >> /etc/motd
  1330. echo ' : | | ' >> /etc/motd
  1331. echo ' | | .-. . . .-.| ' >> /etc/motd
  1332. echo ' : |( )| |( | ' >> /etc/motd
  1333. echo " --' - -' -- - -' -" >> /etc/motd
  1334. fi
  1335. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" ]]; then
  1336. echo ' .--.. . ' >> /etc/motd
  1337. echo ' : | _|_ ' >> /etc/motd
  1338. echo ' | |--. .-. | ' >> /etc/motd
  1339. echo ' : | |( ) | ' >> /etc/motd
  1340. echo " --'' - -' - -' " >> /etc/motd
  1341. fi
  1342. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  1343. echo ' .-. . ' >> /etc/motd
  1344. echo ' ( ) o | ' >> /etc/motd
  1345. echo ' -. .-. .-. . .-. | ' >> /etc/motd
  1346. echo ' ( )( )( | ( ) | ' >> /etc/motd
  1347. echo " -' -' -'-' - -' - - " >> /etc/motd
  1348. fi
  1349. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  1350. echo ' . . . . ' >> /etc/motd
  1351. echo ' |\ /| o | | ' >> /etc/motd
  1352. echo ' | \/ | .-. . | |.-. .-.-. ,- ' >> /etc/motd
  1353. echo ' | |( ) | | | )( ) : ' >> /etc/motd
  1354. echo " ' ' -' --' - -' -' -'-' - " >> /etc/motd
  1355. fi
  1356. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  1357. echo ' .---. .--. . ' >> /etc/motd
  1358. echo ' | | : | ' >> /etc/motd
  1359. echo ' | .-. .--. | | .-. .--. .-..| .-. ' >> /etc/motd
  1360. echo " |( )| | ;( )| |( ||(.-' " >> /etc/motd
  1361. echo " ' -' ' '--' -' ' - - | - --'" >> /etc/motd
  1362. echo " ._.' " >> /etc/motd
  1363. fi
  1364. echo '' >> /etc/motd
  1365. echo ' Freedom in the Cloud' >> /etc/motd
  1366. echo '' >> /etc/motd
  1367. echo 'change_login_message' >> $COMPLETION_FILE
  1368. }
  1369. function search_for_attached_usb_drive {
  1370. # If a USB drive is attached then search for email,
  1371. # gpg, ssh keys and emacs configuration
  1372. if grep -Fxq "search_for_attached_usb_drive" $COMPLETION_FILE; then
  1373. return
  1374. fi
  1375. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  1376. return
  1377. fi
  1378. if [ -b $USB_DRIVE ]; then
  1379. if [ ! -d $USB_MOUNT ]; then
  1380. echo 'Mounting USB drive'
  1381. mkdir $USB_MOUNT
  1382. mount $USB_DRIVE $USB_MOUNT
  1383. fi
  1384. if ! [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
  1385. if [ -d $USB_MOUNT/Maildir ]; then
  1386. echo 'Maildir found on USB drive'
  1387. IMPORT_MAILDIR=$USB_MOUNT/Maildir
  1388. fi
  1389. if [ -d $USB_MOUNT/.gnupg ]; then
  1390. echo 'Importing GPG keyring'
  1391. cp -r $USB_MOUNT/.gnupg /home/$MY_USERNAME
  1392. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  1393. GPG_KEYS_IMPORTED="yes"
  1394. if [ -f /home/$MY_USERNAME/.gnupg/secring.gpg ]; then
  1395. shred -zu $USB_MOUNT/.gnupg/secring.gpg
  1396. shred -zu $USB_MOUNT/.gnupg/random_seed
  1397. shred -zu $USB_MOUNT/.gnupg/trustdb.gpg
  1398. rm -rf $USB_MOUNT/.gnupg
  1399. else
  1400. echo 'GPG files did not copy'
  1401. exit 7
  1402. fi
  1403. fi
  1404. if [ -f $USB_MOUNT/.procmailrc ]; then
  1405. echo 'Importing procmail settings'
  1406. cp $USB_MOUNT/.procmailrc /home/$MY_USERNAME
  1407. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  1408. fi
  1409. if [ -f $USB_MOUNT/private_key.gpg ]; then
  1410. echo 'GPG private key found on USB drive'
  1411. MY_GPG_PRIVATE_KEY=$USB_MOUNT/private_key.gpg
  1412. fi
  1413. if [ -f $USB_MOUNT/public_key.gpg ]; then
  1414. echo 'GPG public key found on USB drive'
  1415. MY_GPG_PUBLIC_KEY=$USB_MOUNT/public_key.gpg
  1416. fi
  1417. fi
  1418. if [ -d $USB_MOUNT/prosody ]; then
  1419. if [ ! -d $XMPP_DIRECTORY ]; then
  1420. mkdir $XMPP_DIRECTORY
  1421. fi
  1422. cp -r $USB_MOUNT/prosody/* $XMPP_DIRECTORY
  1423. chown -R prosody:prosody $XMPP_DIRECTORY
  1424. fi
  1425. if [ -d $USB_MOUNT/.ssh ]; then
  1426. echo 'Importing ssh keys'
  1427. cp -r $USB_MOUNT/.ssh /home/$MY_USERNAME
  1428. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
  1429. # for security delete the ssh keys from the usb drive
  1430. if [ -f /home/$MY_USERNAME/.ssh/id_rsa ]; then
  1431. shred -zu $USB_MOUNT/.ssh/id_rsa
  1432. shred -zu $USB_MOUNT/.ssh/id_rsa.pub
  1433. shred -zu $USB_MOUNT/.ssh/known_hosts
  1434. rm -rf $USB_MOUNT/.ssh
  1435. else
  1436. echo 'ssh files did not copy'
  1437. exit 8
  1438. fi
  1439. fi
  1440. if [ -f $USB_MOUNT/.emacs ]; then
  1441. echo 'Importing .emacs file'
  1442. cp -f $USB_MOUNT/.emacs /home/$MY_USERNAME/.emacs
  1443. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs
  1444. fi
  1445. if [ -d $USB_MOUNT/.emacs.d ]; then
  1446. echo 'Importing .emacs.d directory'
  1447. cp -r $USB_MOUNT/.emacs.d /home/$MY_USERNAME
  1448. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs.d
  1449. fi
  1450. if [ -d $USB_MOUNT/ssl ]; then
  1451. echo 'Importing SSL certificates'
  1452. cp -r $USB_MOUNT/ssl/* /etc/ssl
  1453. chmod 640 /etc/ssl/certs/*
  1454. chmod 400 /etc/ssl/private/*
  1455. # change ownership of some certificates
  1456. if [ -d /etc/prosody ]; then
  1457. chown prosody:prosody /etc/ssl/private/xmpp.*
  1458. chown prosody:prosody /etc/ssl/certs/xmpp.*
  1459. fi
  1460. if [ -d /etc/dovecot ]; then
  1461. chown root:dovecot /etc/ssl/certs/dovecot.*
  1462. chown root:dovecot /etc/ssl/private/dovecot.*
  1463. fi
  1464. if [ -f /etc/ssl/private/exim.key ]; then
  1465. chown root:Debian-exim /etc/ssl/private/exim.key /etc/ssl/certs/exim.crt /etc/ssl/certs/exim.dhparam
  1466. fi
  1467. fi
  1468. if [ -d $USB_MOUNT/personal ]; then
  1469. echo 'Importing personal directory'
  1470. cp -r $USB_MOUNT/personal /home/$MY_USERNAME
  1471. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/personal
  1472. fi
  1473. else
  1474. if [ -d $USB_MOUNT ]; then
  1475. umount $USB_MOUNT
  1476. rm -rf $USB_MOUNT
  1477. fi
  1478. echo 'No USB drive attached'
  1479. fi
  1480. echo 'search_for_attached_usb_drive' >> $COMPLETION_FILE
  1481. }
  1482. function remove_proprietary_repos {
  1483. if grep -Fxq "remove_proprietary_repos" $COMPLETION_FILE; then
  1484. return
  1485. fi
  1486. sed -i 's/ non-free//g' /etc/apt/sources.list
  1487. echo 'remove_proprietary_repos' >> $COMPLETION_FILE
  1488. }
  1489. function change_debian_repos {
  1490. if grep -Fxq "change_debian_repos" $COMPLETION_FILE; then
  1491. return
  1492. fi
  1493. rm -rf /var/lib/apt/lists/*
  1494. apt-get clean
  1495. sed -i "s/ftp.us.debian.org/$DEBIAN_REPO/g" /etc/apt/sources.list
  1496. # ensure that there is a security repo
  1497. if ! grep -q "security" /etc/apt/sources.list; then
  1498. echo "deb http://security.debian.org/ $DEBIAN_VERSION/updates main contrib" >> /etc/apt/sources.list
  1499. echo "#deb-src http://security.debian.org/ $DEBIAN_VERSION/updates main contrib" >> /etc/apt/sources.list
  1500. fi
  1501. apt-get update
  1502. apt-get -y --force-yes install apt-transport-https
  1503. echo 'change_debian_repos' >> $COMPLETION_FILE
  1504. }
  1505. function initial_setup {
  1506. if grep -Fxq "initial_setup" $COMPLETION_FILE; then
  1507. return
  1508. fi
  1509. apt-get -y remove --purge apache*
  1510. apt-get -y dist-upgrade
  1511. apt-get -y install ca-certificates emacs24 cpulimit
  1512. echo 'initial_setup' >> $COMPLETION_FILE
  1513. }
  1514. function install_editor {
  1515. if grep -Fxq "install_editor" $COMPLETION_FILE; then
  1516. return
  1517. fi
  1518. update-alternatives --set editor /usr/bin/emacs24
  1519. # A minimal emacs configuration
  1520. echo -n "(add-to-list 'load-path " > /home/$MY_USERNAME/.emacs
  1521. echo '"~/.emacs.d/")' >> /home/$MY_USERNAME/.emacs
  1522. echo '' >> /home/$MY_USERNAME/.emacs
  1523. echo ';; ===== Remove trailing whitepace ======================================' >> /home/$MY_USERNAME/.emacs
  1524. echo '' >> /home/$MY_USERNAME/.emacs
  1525. echo ";;(add-hook 'before-save-hook 'delete-trailing-whitespace)" >> /home/$MY_USERNAME/.emacs
  1526. echo '' >> /home/$MY_USERNAME/.emacs
  1527. echo ';; Goto a line number with CTRL-l' >> /home/$MY_USERNAME/.emacs
  1528. echo -n '(global-set-key "\C-l" ' >> /home/$MY_USERNAME/.emacs
  1529. echo "'goto-line)" >> /home/$MY_USERNAME/.emacs
  1530. echo '' >> /home/$MY_USERNAME/.emacs
  1531. echo ';; ===== Show line numbers ==============================================' >> /home/$MY_USERNAME/.emacs
  1532. echo '' >> /home/$MY_USERNAME/.emacs
  1533. echo "(add-hook 'find-file-hook (lambda () (linum-mode 1)))" >> /home/$MY_USERNAME/.emacs
  1534. echo '' >> /home/$MY_USERNAME/.emacs
  1535. echo ';; ===== Enable line wrapping in org-mode ===============================' >> /home/$MY_USERNAME/.emacs
  1536. echo '' >> /home/$MY_USERNAME/.emacs
  1537. echo " (add-hook 'org-mode-hook" >> /home/$MY_USERNAME/.emacs
  1538. echo " '(lambda ()" >> /home/$MY_USERNAME/.emacs
  1539. echo " (visual-line-mode 1)))" >> /home/$MY_USERNAME/.emacs
  1540. echo '' >> /home/$MY_USERNAME/.emacs
  1541. echo ';; ===== Enable shift select in org mode ================================' >> /home/$MY_USERNAME/.emacs
  1542. echo '' >> /home/$MY_USERNAME/.emacs
  1543. echo '(setq org-support-shift-select t)' >> /home/$MY_USERNAME/.emacs
  1544. echo '' >> /home/$MY_USERNAME/.emacs
  1545. echo ';; ===== Set standard indent to 4 rather that 4 =========================' >> /home/$MY_USERNAME/.emacs
  1546. echo '' >> /home/$MY_USERNAME/.emacs
  1547. echo '(setq standard-indent 4)' >> /home/$MY_USERNAME/.emacs
  1548. echo '(setq-default tab-width 4)' >> /home/$MY_USERNAME/.emacs
  1549. echo '(setq c-basic-offset 4)' >> /home/$MY_USERNAME/.emacs
  1550. echo '' >> /home/$MY_USERNAME/.emacs
  1551. echo ';; ===== Support Wheel Mouse Scrolling ==================================' >> /home/$MY_USERNAME/.emacs
  1552. echo '' >> /home/$MY_USERNAME/.emacs
  1553. echo '(mouse-wheel-mode t)' >> /home/$MY_USERNAME/.emacs
  1554. echo '' >> /home/$MY_USERNAME/.emacs
  1555. echo ';; ===== Place Backup Files in Specific Directory =======================' >> /home/$MY_USERNAME/.emacs
  1556. echo '' >> /home/$MY_USERNAME/.emacs
  1557. echo '(setq make-backup-files t)' >> /home/$MY_USERNAME/.emacs
  1558. echo '(setq version-control t)' >> /home/$MY_USERNAME/.emacs
  1559. echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))' >> /home/$MY_USERNAME/.emacs
  1560. echo '' >> /home/$MY_USERNAME/.emacs
  1561. echo ';; ===== Make Text mode the default mode for new buffers ================' >> /home/$MY_USERNAME/.emacs
  1562. echo '' >> /home/$MY_USERNAME/.emacs
  1563. echo "(setq default-major-mode 'text-mode)" >> /home/$MY_USERNAME/.emacs
  1564. echo '' >> /home/$MY_USERNAME/.emacs
  1565. echo ';; ===== Line length ====================================================' >> /home/$MY_USERNAME/.emacs
  1566. echo '' >> /home/$MY_USERNAME/.emacs
  1567. echo '(setq-default fill-column 72)' >> /home/$MY_USERNAME/.emacs
  1568. echo '' >> /home/$MY_USERNAME/.emacs
  1569. echo ';; ===== Enable Line and Column Numbering ===============================' >> /home/$MY_USERNAME/.emacs
  1570. echo '' >> /home/$MY_USERNAME/.emacs
  1571. echo '(line-number-mode 1)' >> /home/$MY_USERNAME/.emacs
  1572. echo '(column-number-mode 1)' >> /home/$MY_USERNAME/.emacs
  1573. echo '' >> /home/$MY_USERNAME/.emacs
  1574. echo ';; ===== Turn on Auto Fill mode automatically in all modes ==============' >> /home/$MY_USERNAME/.emacs
  1575. echo '' >> /home/$MY_USERNAME/.emacs
  1576. echo ';; Auto-fill-mode the the automatic wrapping of lines and insertion of' >> /home/$MY_USERNAME/.emacs
  1577. echo ';; newlines when the cursor goes over the column limit.' >> /home/$MY_USERNAME/.emacs
  1578. echo '' >> /home/$MY_USERNAME/.emacs
  1579. echo ';; This should actually turn on auto-fill-mode by default in all major' >> /home/$MY_USERNAME/.emacs
  1580. echo ';; modes. The other way to do this is to turn on the fill for specific modes' >> /home/$MY_USERNAME/.emacs
  1581. echo ';; via hooks.' >> /home/$MY_USERNAME/.emacs
  1582. echo '' >> /home/$MY_USERNAME/.emacs
  1583. echo '(setq auto-fill-mode 1)' >> /home/$MY_USERNAME/.emacs
  1584. echo '' >> /home/$MY_USERNAME/.emacs
  1585. echo ';; ===== Enable GPG encryption =========================================' >> /home/$MY_USERNAME/.emacs
  1586. echo '' >> /home/$MY_USERNAME/.emacs
  1587. echo "(require 'epa)" >> /home/$MY_USERNAME/.emacs
  1588. echo '(epa-file-enable)' >> /home/$MY_USERNAME/.emacs
  1589. cp /home/$MY_USERNAME/.emacs /root/.emacs
  1590. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs
  1591. echo 'install_editor' >> $COMPLETION_FILE
  1592. }
  1593. function enable_backports {
  1594. if grep -Fxq "enable_backports" $COMPLETION_FILE; then
  1595. return
  1596. fi
  1597. if ! grep -Fxq "deb http://$DEBIAN_REPO/debian $DEBIAN_VERSION-backports main" /etc/apt/sources.list; then
  1598. echo "deb http://$DEBIAN_REPO/debian $DEBIAN_VERSION-backports main" >> /etc/apt/sources.list
  1599. fi
  1600. echo 'enable_backports' >> $COMPLETION_FILE
  1601. }
  1602. function update_the_kernel {
  1603. if grep -Fxq "update_the_kernel" $COMPLETION_FILE; then
  1604. return
  1605. fi
  1606. # if this is not a beaglebone or is a docker container
  1607. # then just use the standard kernel
  1608. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  1609. return
  1610. fi
  1611. cd /opt/scripts/tools
  1612. ./update_kernel.sh --kernel $KERNEL_VERSION
  1613. echo 'update_the_kernel' >> $COMPLETION_FILE
  1614. }
  1615. function enable_zram {
  1616. if grep -Fxq "enable_zram" $COMPLETION_FILE; then
  1617. return
  1618. fi
  1619. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  1620. return
  1621. fi
  1622. if ! grep -q "options zram num_devices=1" /etc/modprobe.d/zram.conf; then
  1623. echo 'options zram num_devices=1' >> /etc/modprobe.d/zram.conf
  1624. fi
  1625. echo '#!/bin/bash' > /etc/init.d/zram
  1626. echo '### BEGIN INIT INFO' >> /etc/init.d/zram
  1627. echo '# Provides: zram' >> /etc/init.d/zram
  1628. echo '# Required-Start:' >> /etc/init.d/zram
  1629. echo '# Required-Stop:' >> /etc/init.d/zram
  1630. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/zram
  1631. echo '# Default-Stop: 0 1 6' >> /etc/init.d/zram
  1632. echo '# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)' >> /etc/init.d/zram
  1633. echo '# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram' >> /etc/init.d/zram
  1634. echo '### END INIT INFO' >> /etc/init.d/zram
  1635. echo 'start() {' >> /etc/init.d/zram
  1636. echo ' # get the number of CPUs' >> /etc/init.d/zram
  1637. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  1638. echo ' # if something goes wrong, assume we have 1' >> /etc/init.d/zram
  1639. echo ' [ "$num_cpus" != 0 ] || num_cpus=1' >> /etc/init.d/zram
  1640. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  1641. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  1642. echo ' # get the amount of memory in the machine' >> /etc/init.d/zram
  1643. echo ' mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching "[[:digit:]]+")' >> /etc/init.d/zram
  1644. echo ' mem_total=$((mem_total_kb * 1024))' >> /etc/init.d/zram
  1645. echo ' # load dependency modules' >> /etc/init.d/zram
  1646. echo ' modprobe zram num_devices=$num_cpus' >> /etc/init.d/zram
  1647. echo ' # initialize the devices' >> /etc/init.d/zram
  1648. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  1649. echo ' echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize' >> /etc/init.d/zram
  1650. echo ' done' >> /etc/init.d/zram
  1651. echo ' # Creating swap filesystems' >> /etc/init.d/zram
  1652. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  1653. echo ' mkswap /dev/zram$i' >> /etc/init.d/zram
  1654. echo ' done' >> /etc/init.d/zram
  1655. echo ' # Switch the swaps on' >> /etc/init.d/zram
  1656. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  1657. echo ' swapon -p 100 /dev/zram$i' >> /etc/init.d/zram
  1658. echo ' done' >> /etc/init.d/zram
  1659. echo '}' >> /etc/init.d/zram
  1660. echo 'stop() {' >> /etc/init.d/zram
  1661. echo ' # get the number of CPUs' >> /etc/init.d/zram
  1662. echo ' num_cpus=$(grep -c processor /proc/cpuinfo)' >> /etc/init.d/zram
  1663. echo ' # set decremented number of CPUs' >> /etc/init.d/zram
  1664. echo ' decr_num_cpus=$((num_cpus - 1))' >> /etc/init.d/zram
  1665. echo ' # Switching off swap' >> /etc/init.d/zram
  1666. echo ' for i in $(seq 0 $decr_num_cpus); do' >> /etc/init.d/zram
  1667. echo ' if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then' >> /etc/init.d/zram
  1668. echo ' swapoff /dev/zram$i' >> /etc/init.d/zram
  1669. echo ' sleep 1' >> /etc/init.d/zram
  1670. echo ' fi' >> /etc/init.d/zram
  1671. echo ' done' >> /etc/init.d/zram
  1672. echo ' sleep 1' >> /etc/init.d/zram
  1673. echo ' rmmod zram' >> /etc/init.d/zram
  1674. echo '}' >> /etc/init.d/zram
  1675. echo 'case "$1" in' >> /etc/init.d/zram
  1676. echo ' start)' >> /etc/init.d/zram
  1677. echo ' start' >> /etc/init.d/zram
  1678. echo ' ;;' >> /etc/init.d/zram
  1679. echo ' stop)' >> /etc/init.d/zram
  1680. echo ' stop' >> /etc/init.d/zram
  1681. echo ' ;;' >> /etc/init.d/zram
  1682. echo ' restart)' >> /etc/init.d/zram
  1683. echo ' stop' >> /etc/init.d/zram
  1684. echo ' sleep 3' >> /etc/init.d/zram
  1685. echo ' start' >> /etc/init.d/zram
  1686. echo ' ;;' >> /etc/init.d/zram
  1687. echo ' *)' >> /etc/init.d/zram
  1688. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/zram
  1689. echo ' RETVAL=1' >> /etc/init.d/zram
  1690. echo 'esac' >> /etc/init.d/zram
  1691. echo 'exit $RETVAL' >> /etc/init.d/zram
  1692. chmod +x /etc/init.d/zram
  1693. update-rc.d zram defaults
  1694. echo 'enable_zram' >> $COMPLETION_FILE
  1695. }
  1696. function random_number_generator {
  1697. if grep -Fxq "random_number_generator" $COMPLETION_FILE; then
  1698. return
  1699. fi
  1700. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  1701. # On systems which are not beaglebones assume that
  1702. # no hardware random number generator is available
  1703. # and use the second best option
  1704. apt-get -y --force-yes install haveged
  1705. return
  1706. fi
  1707. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  1708. # it is assumed that docker uses the random number
  1709. # generator of the host system
  1710. return
  1711. fi
  1712. if [[ $USE_HWRNG == "yes" ]]; then
  1713. apt-get -y --force-yes install rng-tools
  1714. sed -i 's|#HRNGDEVICE=/dev/hwrng|HRNGDEVICE=/dev/hwrng|g' /etc/default/rng-tools
  1715. else
  1716. apt-get -y --force-yes install haveged
  1717. fi
  1718. echo 'random_number_generator' >> $COMPLETION_FILE
  1719. }
  1720. function configure_ssh {
  1721. if grep -Fxq "configure_ssh" $COMPLETION_FILE; then
  1722. return
  1723. fi
  1724. sed -i "s/Port 22/Port $SSH_PORT/g" /etc/ssh/sshd_config
  1725. sed -i 's/PermitRootLogin without-password/PermitRootLogin no/g' /etc/ssh/sshd_config
  1726. sed -i 's/X11Forwarding yes/X11Forwarding no/g' /etc/ssh/sshd_config
  1727. sed -i 's/ServerKeyBits 1024/ServerKeyBits 4096/g' /etc/ssh/sshd_config
  1728. sed -i 's/TCPKeepAlive yes/TCPKeepAlive no/g' /etc/ssh/sshd_config
  1729. sed -i 's|HostKey /etc/ssh/ssh_host_dsa_key|#HostKey /etc/ssh/ssh_host_dsa_key|g' /etc/ssh/sshd_config
  1730. sed -i 's|HostKey /etc/ssh/ssh_host_ecdsa_key|#HostKey /etc/ssh/ssh_host_ecdsa_key|g' /etc/ssh/sshd_config
  1731. echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config
  1732. echo 'ClientAliveCountMax 3' >> /etc/ssh/sshd_config
  1733. echo 'Ciphers aes256-ctr,aes128-ctr' >> /etc/ssh/sshd_config
  1734. echo 'MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
  1735. KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1' >> /etc/ssh/sshd_config
  1736. apt-get -y --force-yes install fail2ban
  1737. echo 'configure_ssh' >> $COMPLETION_FILE
  1738. # Don't reboot if installing within docker
  1739. # random numbers will come from the host system
  1740. if [[ $INSTALLED_WITHIN_DOCKER == "yes" || $INSTALLING_ON_BBB != "yes" ]]; then
  1741. return
  1742. fi
  1743. echo ''
  1744. echo ''
  1745. echo ' *** Rebooting to initialise ssh settings and random number generator ***'
  1746. echo ''
  1747. echo " *** Reconnect via ssh on port $SSH_PORT, then run this script again ***"
  1748. echo ''
  1749. reboot
  1750. }
  1751. function regenerate_ssh_keys {
  1752. if grep -Fxq "regenerate_ssh_keys" $COMPLETION_FILE; then
  1753. return
  1754. fi
  1755. rm -f /etc/ssh/ssh_host_*
  1756. dpkg-reconfigure openssh-server
  1757. service ssh restart
  1758. echo 'regenerate_ssh_keys' >> $COMPLETION_FILE
  1759. }
  1760. function configure_dns {
  1761. if grep -Fxq "configure_dns" $COMPLETION_FILE; then
  1762. return
  1763. fi
  1764. echo 'domain localdomain' > /etc/resolv.conf
  1765. echo 'search localdomain' >> /etc/resolv.conf
  1766. echo 'nameserver 213.73.91.35' >> /etc/resolv.conf
  1767. echo 'nameserver 85.214.20.141' >> /etc/resolv.conf
  1768. echo 'configure_dns' >> $COMPLETION_FILE
  1769. }
  1770. function set_your_domain_name {
  1771. if grep -Fxq "set_your_domain_name" $COMPLETION_FILE; then
  1772. return
  1773. fi
  1774. echo "$DOMAIN_NAME" > /etc/hostname
  1775. hostname $DOMAIN_NAME
  1776. sed -i "s/127.0.1.1 arm/127.0.1.1 $DOMAIN_NAME/g" /etc/hosts
  1777. echo "127.0.1.1 $DOMAIN_NAME" >> /etc/hosts
  1778. echo 'set_your_domain_name' >> $COMPLETION_FILE
  1779. }
  1780. function time_synchronisation {
  1781. if grep -Fxq "time_synchronisation" $COMPLETION_FILE; then
  1782. return
  1783. fi
  1784. #apt-get -y --force-yes install tlsdate
  1785. # building tlsdate from source is a workaround because of
  1786. # this bug https://github.com/ioerror/tlsdate/issues/130
  1787. apt-get -y --force-yes install build-essential automake git pkg-config autoconf libtool libssl-dev libevent-dev
  1788. if [ ! -d $INSTALL_DIR ]; then
  1789. mkdir $INSTALL_DIR
  1790. fi
  1791. cd $INSTALL_DIR
  1792. git clone https://github.com/ioerror/tlsdate.git
  1793. cd $INSTALL_DIR/tlsdate
  1794. ./autogen.sh
  1795. ./configure
  1796. make
  1797. make install
  1798. cp /usr/local/bin/tlsdate* /usr/bin
  1799. cp /usr/local/sbin/tlsdate* /usr/bin
  1800. apt-get -y remove ntpdate
  1801. echo '#!/bin/bash' > /usr/bin/updatedate
  1802. echo "TIMESOURCE='TLS_TIME_SOURCE1'" >> /usr/bin/updatedate
  1803. echo "TIMESOURCE2='TLS_TIME_SOURCE2'" >> /usr/bin/updatedate
  1804. echo 'LOGFILE=/var/log/tlsdate.log' >> /usr/bin/updatedate
  1805. echo 'TIMEOUT=5' >> /usr/bin/updatedate
  1806. echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/updatedate
  1807. echo '# File which contains the previous date as a number' >> /usr/bin/updatedate
  1808. echo 'BEFORE_DATE_FILE=/var/log/tlsdateprevious.txt' >> /usr/bin/updatedate
  1809. echo '# File which contains the previous date as a string' >> /usr/bin/updatedate
  1810. echo 'BEFORE_FULLDATE_FILE=/var/log/tlsdate.txt' >> /usr/bin/updatedate
  1811. echo 'DATE_BEFORE=$(date)' >> /usr/bin/updatedate
  1812. echo 'BEFORE=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  1813. echo 'BACKWARDS_BETWEEN=0' >> /usr/bin/updatedate
  1814. echo '# If the date was previously set' >> /usr/bin/updatedate
  1815. echo 'if [ -f "$BEFORE_DATE_FILE" ]; then' >> /usr/bin/updatedate
  1816. echo ' BEFORE_FILE=$(cat $BEFORE_DATE_FILE)' >> /usr/bin/updatedate
  1817. echo ' BEFORE_FULLDATE=$(cat $BEFORE_FULLDATE_FILE)' >> /usr/bin/updatedate
  1818. echo ' # is the date going backwards?' >> /usr/bin/updatedate
  1819. echo ' if (( $BEFORE_FILE > $BEFORE )); then' >> /usr/bin/updatedate
  1820. echo ' echo -n "Date went backwards between tlsdate updates. " >> $LOGFILE' >> /usr/bin/updatedate
  1821. echo ' echo -n "$BEFORE_FILE > $BEFORE, " >> $LOGFILE' >> /usr/bin/updatedate
  1822. echo ' echo "$BEFORE_FULLDATE > $DATE_BEFORE" >> $LOGFILE' >> /usr/bin/updatedate
  1823. echo ' # Send a warning email' >> /usr/bin/updatedate
  1824. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  1825. echo ' # Try another time source' >> /usr/bin/updatedate
  1826. echo ' TIMESOURCE=$TIMESOURCE2' >> /usr/bin/updatedate
  1827. echo ' # try running without any parameters' >> /usr/bin/updatedate
  1828. echo ' tlsdate >> $LOGFILE' >> /usr/bin/updatedate
  1829. echo ' BACKWARDS_BETWEEN=1' >> /usr/bin/updatedate
  1830. echo ' fi' >> /usr/bin/updatedate
  1831. echo 'fi' >> /usr/bin/updatedate
  1832. echo '# Set the date' >> /usr/bin/updatedate
  1833. echo '/usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  1834. echo 'DATE_AFTER=$(date)' >> /usr/bin/updatedate
  1835. echo 'AFTER=$(date -d "$Y-$M-$D" '+%s')' >> /usr/bin/updatedate
  1836. echo '# After setting the date did it go backwards?' >> /usr/bin/updatedate
  1837. echo 'if (( $AFTER < $BEFORE )); then' >> /usr/bin/updatedate
  1838. echo ' echo "Incorrect date: $DATE_BEFORE -> $DATE_AFTER" >> $LOGFILE' >> /usr/bin/updatedate
  1839. echo ' # Send a warning email' >> /usr/bin/updatedate
  1840. echo ' echo $(tail $LOGFILE -n 2) | mail -s "tlsdate anomaly" $EMAIL' >> /usr/bin/updatedate
  1841. echo ' # Try resetting the date from another time source' >> /usr/bin/updatedate
  1842. echo ' /usr/bin/timeout $TIMEOUT tlsdate -l -t -H $TIMESOURCE2 -p 443 >> $LOGFILE' >> /usr/bin/updatedate
  1843. echo ' DATE_AFTER=$(date)' >> /usr/bin/updatedate
  1844. echo ' AFTER=$(date -d "$Y-$M-$D" "+%s")' >> /usr/bin/updatedate
  1845. echo 'else' >> /usr/bin/updatedate
  1846. echo ' echo -n $TIMESOURCE >> $LOGFILE' >> /usr/bin/updatedate
  1847. echo ' if [ -f "$BEFORE_DATE_FILE" ]; then' >> /usr/bin/updatedate
  1848. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  1849. echo ' echo -n $BEFORE_FILE >> $LOGFILE' >> /usr/bin/updatedate
  1850. echo ' fi' >> /usr/bin/updatedate
  1851. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  1852. echo ' echo -n $BEFORE >> $LOGFILE' >> /usr/bin/updatedate
  1853. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  1854. echo ' echo -n $AFTER >> $LOGFILE' >> /usr/bin/updatedate
  1855. echo ' echo -n " " >> $LOGFILE' >> /usr/bin/updatedate
  1856. echo ' echo $DATE_AFTER >> $LOGFILE' >> /usr/bin/updatedate
  1857. echo 'fi' >> /usr/bin/updatedate
  1858. echo '# Log the last date' >> /usr/bin/updatedate
  1859. echo 'if [[ $BACKWARDS_BETWEEN == 0 ]]; then' >> /usr/bin/updatedate
  1860. echo ' echo "$AFTER" > $BEFORE_DATE_FILE' >> /usr/bin/updatedate
  1861. echo ' echo "$DATE_AFTER" > $BEFORE_FULLDATE_FILE' >> /usr/bin/updatedate
  1862. echo ' exit 0' >> /usr/bin/updatedate
  1863. echo 'else' >> /usr/bin/updatedate
  1864. echo ' exit 1' >> /usr/bin/updatedate
  1865. echo 'fi' >> /usr/bin/updatedate
  1866. chmod +x /usr/bin/updatedate
  1867. echo '*/15 * * * * root /usr/bin/updatedate' >> /etc/crontab
  1868. service cron restart
  1869. echo '#!/bin/bash' > /etc/init.d/tlsdate
  1870. echo '# /etc/init.d/tlsdate' >> /etc/init.d/tlsdate
  1871. echo '### BEGIN INIT INFO' >> /etc/init.d/tlsdate
  1872. echo '# Provides: tlsdate' >> /etc/init.d/tlsdate
  1873. echo '# Required-Start: $remote_fs $syslog' >> /etc/init.d/tlsdate
  1874. echo '# Required-Stop: $remote_fs $syslog' >> /etc/init.d/tlsdate
  1875. echo '# Default-Start: 2 3 4 5' >> /etc/init.d/tlsdate
  1876. echo '# Default-Stop: 0 1 6' >> /etc/init.d/tlsdate
  1877. echo '# Short-Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  1878. echo '# Description: Initially calls tlsdate with the timewarp option' >> /etc/init.d/tlsdate
  1879. echo '### END INIT INFO' >> /etc/init.d/tlsdate
  1880. echo '# Author: Bob Mottram <bob@robotics.uk.to>' >> /etc/init.d/tlsdate
  1881. echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin"' >> /etc/init.d/tlsdate
  1882. echo 'LOGFILE="/var/log/tlsdate.log"' >> /etc/init.d/tlsdate
  1883. echo 'TLSDATECOMMAND="tlsdate --timewarp -l -H www.ptb.de -p 443 >> $LOGFILE"' >> /etc/init.d/tlsdate
  1884. echo '#Start-Stop here' >> /etc/init.d/tlsdate
  1885. echo 'case "$1" in' >> /etc/init.d/tlsdate
  1886. echo ' start)' >> /etc/init.d/tlsdate
  1887. echo ' echo "tlsdate started"' >> /etc/init.d/tlsdate
  1888. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  1889. echo ' ;;' >> /etc/init.d/tlsdate
  1890. echo ' stop)' >> /etc/init.d/tlsdate
  1891. echo ' echo "tlsdate stopped"' >> /etc/init.d/tlsdate
  1892. echo ' ;;' >> /etc/init.d/tlsdate
  1893. echo ' restart)' >> /etc/init.d/tlsdate
  1894. echo ' echo "tlsdate restarted"' >> /etc/init.d/tlsdate
  1895. echo ' $TLSDATECOMMAND' >> /etc/init.d/tlsdate
  1896. echo ' ;;' >> /etc/init.d/tlsdate
  1897. echo ' *)' >> /etc/init.d/tlsdate
  1898. echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/tlsdate
  1899. echo ' exit 1' >> /etc/init.d/tlsdate
  1900. echo ' ;;' >> /etc/init.d/tlsdate
  1901. echo 'esac' >> /etc/init.d/tlsdate
  1902. echo 'exit 0' >> /etc/init.d/tlsdate
  1903. chmod +x /etc/init.d/tlsdate
  1904. update-rc.d tlsdate defaults
  1905. echo 'time_synchronisation' >> $COMPLETION_FILE
  1906. }
  1907. function configure_firewall {
  1908. if grep -Fxq "configure_firewall" $COMPLETION_FILE; then
  1909. return
  1910. fi
  1911. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  1912. # docker does its own firewalling
  1913. return
  1914. fi
  1915. iptables -P INPUT ACCEPT
  1916. ip6tables -P INPUT ACCEPT
  1917. iptables -F
  1918. ip6tables -F
  1919. iptables -t nat -F
  1920. ip6tables -t nat -F
  1921. iptables -X
  1922. ip6tables -X
  1923. iptables -P INPUT DROP
  1924. ip6tables -P INPUT DROP
  1925. iptables -A INPUT -i lo -j ACCEPT
  1926. iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  1927. # Make sure incoming tcp connections are SYN packets
  1928. iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
  1929. # Drop packets with incoming fragments
  1930. iptables -A INPUT -f -j DROP
  1931. # Drop bogons
  1932. iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  1933. iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
  1934. iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  1935. # Incoming malformed NULL packets:
  1936. iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  1937. echo 'configure_firewall' >> $COMPLETION_FILE
  1938. }
  1939. function save_firewall_settings {
  1940. iptables-save > /etc/firewall.conf
  1941. ip6tables-save > /etc/firewall6.conf
  1942. printf '#!/bin/sh\n' > /etc/network/if-up.d/iptables
  1943. printf 'iptables-restore < /etc/firewall.conf\n' >> /etc/network/if-up.d/iptables
  1944. printf 'ip6tables-restore < /etc/firewall6.conf\n' >> /etc/network/if-up.d/iptables
  1945. chmod +x /etc/network/if-up.d/iptables
  1946. }
  1947. function configure_firewall_for_dlna {
  1948. if grep -Fxq "configure_firewall_for_dlna" $COMPLETION_FILE; then
  1949. return
  1950. fi
  1951. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  1952. # docker does its own firewalling
  1953. return
  1954. fi
  1955. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  1956. return
  1957. fi
  1958. iptables -A INPUT -i eth0 -p udp --dport 1900 -j ACCEPT
  1959. iptables -A INPUT -i eth0 -p tcp --dport 8200 -j ACCEPT
  1960. save_firewall_settings
  1961. echo 'configure_firewall_for_dlna' >> $COMPLETION_FILE
  1962. }
  1963. function configure_firewall_for_dns {
  1964. if grep -Fxq "configure_firewall_for_dns" $COMPLETION_FILE; then
  1965. return
  1966. fi
  1967. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  1968. # docker does its own firewalling
  1969. return
  1970. fi
  1971. iptables -A INPUT -i eth0 -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
  1972. save_firewall_settings
  1973. echo 'configure_firewall_for_dns' >> $COMPLETION_FILE
  1974. }
  1975. function configure_firewall_for_xmpp {
  1976. if [ ! -d /etc/prosody ]; then
  1977. return
  1978. fi
  1979. if grep -Fxq "configure_firewall_for_xmpp" $COMPLETION_FILE; then
  1980. return
  1981. fi
  1982. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  1983. # docker does its own firewalling
  1984. return
  1985. fi
  1986. iptables -A INPUT -i eth0 -p tcp --dport 5222:5223 -j ACCEPT
  1987. iptables -A INPUT -i eth0 -p tcp --dport 5269 -j ACCEPT
  1988. iptables -A INPUT -i eth0 -p tcp --dport 5280:5281 -j ACCEPT
  1989. save_firewall_settings
  1990. echo 'configure_firewall_for_xmpp' >> $COMPLETION_FILE
  1991. }
  1992. function configure_firewall_for_irc {
  1993. if [ ! -d /etc/ngircd ]; then
  1994. return
  1995. fi
  1996. if grep -Fxq "configure_firewall_for_irc" $COMPLETION_FILE; then
  1997. return
  1998. fi
  1999. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2000. # docker does its own firewalling
  2001. return
  2002. fi
  2003. iptables -A INPUT -i eth0 -p tcp --dport 6697 -j ACCEPT
  2004. iptables -I INPUT -i eth0 -p tcp --dport 1024:65535 --sport 6697 -j ACCEPT
  2005. iptables -A INPUT -i eth0 -p tcp --dport 9999 -j ACCEPT
  2006. save_firewall_settings
  2007. echo 'configure_firewall_for_irc' >> $COMPLETION_FILE
  2008. }
  2009. function configure_firewall_for_ftp {
  2010. if grep -Fxq "configure_firewall_for_ftp" $COMPLETION_FILE; then
  2011. return
  2012. fi
  2013. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2014. # docker does its own firewalling
  2015. return
  2016. fi
  2017. iptables -I INPUT -i eth0 -p tcp --dport 1024:65535 --sport 20:21 -j ACCEPT
  2018. save_firewall_settings
  2019. echo 'configure_firewall_for_ftp' >> $COMPLETION_FILE
  2020. }
  2021. function configure_firewall_for_web_access {
  2022. if grep -Fxq "configure_firewall_for_web_access" $COMPLETION_FILE; then
  2023. return
  2024. fi
  2025. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2026. # docker does its own firewalling
  2027. return
  2028. fi
  2029. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 80 -j ACCEPT
  2030. iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 --sport 443 -j ACCEPT
  2031. save_firewall_settings
  2032. echo 'configure_firewall_for_web_access' >> $COMPLETION_FILE
  2033. }
  2034. function configure_firewall_for_web_server {
  2035. if grep -Fxq "configure_firewall_for_web_server" $COMPLETION_FILE; then
  2036. return
  2037. fi
  2038. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2039. # docker does its own firewalling
  2040. return
  2041. fi
  2042. iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
  2043. iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
  2044. save_firewall_settings
  2045. echo 'configure_firewall_for_web_server' >> $COMPLETION_FILE
  2046. }
  2047. function configure_firewall_for_ssh {
  2048. if grep -Fxq "configure_firewall_for_ssh" $COMPLETION_FILE; then
  2049. return
  2050. fi
  2051. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2052. # docker does its own firewalling
  2053. return
  2054. fi
  2055. iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
  2056. iptables -A INPUT -i eth0 -p tcp --dport $SSH_PORT -j ACCEPT
  2057. save_firewall_settings
  2058. echo 'configure_firewall_for_ssh' >> $COMPLETION_FILE
  2059. }
  2060. function configure_firewall_for_git {
  2061. if grep -Fxq "configure_firewall_for_git" $COMPLETION_FILE; then
  2062. return
  2063. fi
  2064. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2065. # docker does its own firewalling
  2066. return
  2067. fi
  2068. iptables -A INPUT -i eth0 -p tcp --dport 9418 -j ACCEPT
  2069. save_firewall_settings
  2070. echo 'configure_firewall_for_git' >> $COMPLETION_FILE
  2071. }
  2072. function configure_firewall_for_email {
  2073. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2074. return
  2075. fi
  2076. if grep -Fxq "configure_firewall_for_email" $COMPLETION_FILE; then
  2077. return
  2078. fi
  2079. if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
  2080. # docker does its own firewalling
  2081. return
  2082. fi
  2083. iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
  2084. iptables -A INPUT -i eth0 -p tcp --dport 587 -j ACCEPT
  2085. iptables -A INPUT -i eth0 -p tcp --dport 465 -j ACCEPT
  2086. iptables -A INPUT -i eth0 -p tcp --dport 993 -j ACCEPT
  2087. save_firewall_settings
  2088. echo 'configure_firewall_for_email' >> $COMPLETION_FILE
  2089. }
  2090. function configure_internet_protocol {
  2091. if grep -Fxq "configure_internet_protocol" $COMPLETION_FILE; then
  2092. return
  2093. fi
  2094. sed -i "s/#net.ipv4.tcp_syncookies=1/net.ipv4.tcp_syncookies=1/g" /etc/sysctl.conf
  2095. sed -i "s/#net.ipv4.conf.all.accept_redirects = 0/net.ipv4.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  2096. sed -i "s/#net.ipv6.conf.all.accept_redirects = 0/net.ipv6.conf.all.accept_redirects = 0/g" /etc/sysctl.conf
  2097. sed -i "s/#net.ipv4.conf.all.send_redirects = 0/net.ipv4.conf.all.send_redirects = 0/g" /etc/sysctl.conf
  2098. sed -i "s/#net.ipv4.conf.all.accept_source_route = 0/net.ipv4.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  2099. sed -i "s/#net.ipv6.conf.all.accept_source_route = 0/net.ipv6.conf.all.accept_source_route = 0/g" /etc/sysctl.conf
  2100. sed -i "s/#net.ipv4.conf.default.rp_filter=1/net.ipv4.conf.default.rp_filter=1/g" /etc/sysctl.conf
  2101. sed -i "s/#net.ipv4.conf.all.rp_filter=1/net.ipv4.conf.all.rp_filter=1/g" /etc/sysctl.conf
  2102. sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=0/g" /etc/sysctl.conf
  2103. sed -i "s/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=0/g" /etc/sysctl.conf
  2104. echo '# ignore pings' >> /etc/sysctl.conf
  2105. echo 'net.ipv4.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  2106. echo 'net.ipv6.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
  2107. echo '# disable ipv6' >> /etc/sysctl.conf
  2108. echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
  2109. echo 'net.ipv4.tcp_synack_retries = 2' >> /etc/sysctl.conf
  2110. echo 'net.ipv4.tcp_syn_retries = 1' >> /etc/sysctl.conf
  2111. echo '# keepalive' >> /etc/sysctl.conf
  2112. echo 'net.ipv4.tcp_keepalive_probes = 9' >> /etc/sysctl.conf
  2113. echo 'net.ipv4.tcp_keepalive_intvl = 75' >> /etc/sysctl.conf
  2114. echo 'net.ipv4.tcp_keepalive_time = 7200' >> /etc/sysctl.conf
  2115. echo 'configure_internet_protocol' >> $COMPLETION_FILE
  2116. }
  2117. function script_to_make_self_signed_certificates {
  2118. if grep -Fxq "script_to_make_self_signed_certificates" $COMPLETION_FILE; then
  2119. return
  2120. fi
  2121. echo '#!/bin/bash' > /usr/bin/makecert
  2122. echo 'HOSTNAME=$1' >> /usr/bin/makecert
  2123. echo 'COUNTRY_CODE="US"' >> /usr/bin/makecert
  2124. echo 'AREA="Free Speech Zone"' >> /usr/bin/makecert
  2125. echo 'LOCATION="Freedomville"' >> /usr/bin/makecert
  2126. echo 'ORGANISATION="Freedombone"' >> /usr/bin/makecert
  2127. echo 'UNIT="Freedombone Unit"' >> /usr/bin/makecert
  2128. echo 'if ! which openssl > /dev/null ;then' >> /usr/bin/makecert
  2129. echo ' echo "$0: openssl is not installed, exiting" 1>&2' >> /usr/bin/makecert
  2130. echo ' exit 1' >> /usr/bin/makecert
  2131. echo 'fi' >> /usr/bin/makecert
  2132. 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
  2133. echo 'openssl dhparam -check -text -5 1024 -out /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  2134. echo 'chmod 400 /etc/ssl/private/$HOSTNAME.key' >> /usr/bin/makecert
  2135. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.crt' >> /usr/bin/makecert
  2136. echo 'chmod 640 /etc/ssl/certs/$HOSTNAME.dhparam' >> /usr/bin/makecert
  2137. echo 'if [ -f /etc/init.d/nginx ]; then' >> /usr/bin/makecert
  2138. echo ' /etc/init.d/nginx reload' >> /usr/bin/makecert
  2139. echo 'fi' >> /usr/bin/makecert
  2140. echo '# add the public certificate to a separate directory' >> /usr/bin/makecert
  2141. echo '# so that we can redistribute it easily' >> /usr/bin/makecert
  2142. echo 'if [ ! -d /etc/ssl/mycerts ]; then' >> /usr/bin/makecert
  2143. echo ' mkdir /etc/ssl/mycerts' >> /usr/bin/makecert
  2144. echo 'fi' >> /usr/bin/makecert
  2145. echo 'cp /etc/ssl/certs/$HOSTNAME.crt /etc/ssl/mycerts' >> /usr/bin/makecert
  2146. echo '# Create a bundle of your certificates' >> /usr/bin/makecert
  2147. echo 'cat /etc/ssl/mycerts/*.crt > /etc/ssl/freedombone-bundle.crt' >> /usr/bin/makecert
  2148. echo 'tar -czvf /etc/ssl/freedombone-certs.tar.gz /etc/ssl/mycerts/*.crt' >> /usr/bin/makecert
  2149. chmod +x /usr/bin/makecert
  2150. echo 'script_to_make_self_signed_certificates' >> $COMPLETION_FILE
  2151. }
  2152. function configure_email {
  2153. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2154. return
  2155. fi
  2156. if grep -Fxq "configure_email" $COMPLETION_FILE; then
  2157. return
  2158. fi
  2159. apt-get -y remove postfix
  2160. apt-get -y --force-yes install exim4 sasl2-bin swaks libnet-ssleay-perl procmail
  2161. if [ ! -d /etc/exim4 ]; then
  2162. echo "ERROR: Exim does not appear to have installed. $CHECK_MESSAGE"
  2163. exit 48
  2164. fi
  2165. # configure for Maildir format
  2166. sed -i 's/MAIL_DIR/#MAIL_DIR/g' /etc/login.defs
  2167. sed -i 's|#MAIL_FILE.*|MAIL_FILE Maildir/|g' /etc/login.defs
  2168. if ! grep -q "export MAIL" /etc/profile; then
  2169. echo 'export MAIL=~/Maildir' >> /etc/profile
  2170. fi
  2171. sed -i 's|pam_mail.so standard|pam_mail.so dir=~/Maildir standard|g' /etc/pam.d/login
  2172. sed -i 's|pam_mail.so standard noenv|pam_mail.so dir=~/Maildir standard|g' /etc/pam.d/sshd
  2173. sed -i 's|pam_mail.so nopen|pam_mail.so dir=~/Maildir nopen|g' /etc/pam.d/su
  2174. echo 'dc_eximconfig_configtype="internet"' > /etc/exim4/update-exim4.conf.conf
  2175. echo "dc_other_hostnames='$DOMAIN_NAME'" >> /etc/exim4/update-exim4.conf.conf
  2176. echo "dc_local_interfaces=''" >> /etc/exim4/update-exim4.conf.conf
  2177. echo "dc_readhost=''" >> /etc/exim4/update-exim4.conf.conf
  2178. echo "dc_relay_domains=''" >> /etc/exim4/update-exim4.conf.conf
  2179. echo "dc_minimaldns='false'" >> /etc/exim4/update-exim4.conf.conf
  2180. echo "dc_relay_nets='192.168.1.0/24'" >> /etc/exim4/update-exim4.conf.conf
  2181. echo "dc_smarthost=''" >> /etc/exim4/update-exim4.conf.conf
  2182. echo "CFILEMODE='644'" >> /etc/exim4/update-exim4.conf.conf
  2183. echo "dc_use_split_config='false'" >> /etc/exim4/update-exim4.conf.conf
  2184. echo "dc_hide_mailname=''" >> /etc/exim4/update-exim4.conf.conf
  2185. echo "dc_mailname_in_oh='true'" >> /etc/exim4/update-exim4.conf.conf
  2186. echo "dc_localdelivery='maildir_home'" >> /etc/exim4/update-exim4.conf.conf
  2187. update-exim4.conf
  2188. sed -i "s/START=no/START=yes/g" /etc/default/saslauthd
  2189. /etc/init.d/saslauthd start
  2190. # make a tls certificate for email
  2191. if [ ! -f /etc/ssl/private/exim.key ]; then
  2192. makecert exim
  2193. fi
  2194. cp /etc/ssl/private/exim.key /etc/exim4
  2195. cp /etc/ssl/certs/exim.crt /etc/exim4
  2196. cp /etc/ssl/certs/exim.dhparam /etc/exim4
  2197. chown root:Debian-exim /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  2198. chmod 640 /etc/exim4/exim.key /etc/exim4/exim.crt /etc/exim4/exim.dhparam
  2199. sed -i '/login_saslauthd_server/,/.endif/ s/# *//' /etc/exim4/exim4.conf.template
  2200. sed -i "/.ifdef MAIN_HARDCODE_PRIMARY_HOSTNAME/i\MAIN_HARDCODE_PRIMARY_HOSTNAME = $DOMAIN_NAME\nMAIN_TLS_ENABLE = true" /etc/exim4/exim4.conf.template
  2201. sed -i "s|SMTPLISTENEROPTIONS=''|SMTPLISTENEROPTIONS='-oX 465:25:587 -oP /var/run/exim4/exim.pid'|g" /etc/default/exim4
  2202. if ! grep -q "tls_on_connect_ports=465" /etc/exim4/exim4.conf.template; then
  2203. sed -i '/SSL configuration for exim/i\tls_on_connect_ports=465' /etc/exim4/exim4.conf.template
  2204. fi
  2205. adduser $MY_USERNAME sasl
  2206. addgroup Debian-exim sasl
  2207. /etc/init.d/exim4 restart
  2208. if [ ! -d /etc/skel/Maildir ]; then
  2209. mkdir -m 700 /etc/skel/Maildir
  2210. mkdir -m 700 /etc/skel/Maildir/Sent
  2211. mkdir -m 700 /etc/skel/Maildir/Sent/tmp
  2212. mkdir -m 700 /etc/skel/Maildir/Sent/cur
  2213. mkdir -m 700 /etc/skel/Maildir/Sent/new
  2214. mkdir -m 700 /etc/skel/Maildir/.learn-spam
  2215. mkdir -m 700 /etc/skel/Maildir/.learn-spam/cur
  2216. mkdir -m 700 /etc/skel/Maildir/.learn-spam/new
  2217. mkdir -m 700 /etc/skel/Maildir/.learn-spam/tmp
  2218. mkdir -m 700 /etc/skel/Maildir/.learn-ham
  2219. mkdir -m 700 /etc/skel/Maildir/.learn-ham/cur
  2220. mkdir -m 700 /etc/skel/Maildir/.learn-ham/new
  2221. mkdir -m 700 /etc/skel/Maildir/.learn-ham/tmp
  2222. ln -s /etc/skel/Maildir/.learn-spam /etc/skel/Maildir/spam
  2223. ln -s /etc/skel/Maildir/.learn-ham /etc/skel/Maildir/ham
  2224. fi
  2225. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  2226. mkdir -m 700 /home/$MY_USERNAME/Maildir
  2227. mkdir -m 700 /home/$MY_USERNAME/Maildir/cur
  2228. mkdir -m 700 /home/$MY_USERNAME/Maildir/tmp
  2229. mkdir -m 700 /home/$MY_USERNAME/Maildir/new
  2230. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent
  2231. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/cur
  2232. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/tmp
  2233. mkdir -m 700 /home/$MY_USERNAME/Maildir/Sent/new
  2234. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam
  2235. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/cur
  2236. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/new
  2237. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-spam/tmp
  2238. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham
  2239. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/cur
  2240. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/new
  2241. mkdir -m 700 /home/$MY_USERNAME/Maildir/.learn-ham/tmp
  2242. ln -s /home/$MY_USERNAME/Maildir/.learn-spam /home/$MY_USERNAME/Maildir/spam
  2243. ln -s /home/$MY_USERNAME/Maildir/.learn-ham /home/$MY_USERNAME/Maildir/ham
  2244. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  2245. fi
  2246. echo 'configure_email' >> $COMPLETION_FILE
  2247. }
  2248. function create_procmail {
  2249. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2250. return
  2251. fi
  2252. if grep -Fxq "create_procmail" $COMPLETION_FILE; then
  2253. return
  2254. fi
  2255. if [ ! -f /home/$MY_USERNAME/.procmailrc ]; then
  2256. echo 'MAILDIR=$HOME/Maildir' > /home/$MY_USERNAME/.procmailrc
  2257. echo 'DEFAULT=$MAILDIR/' >> /home/$MY_USERNAME/.procmailrc
  2258. echo 'LOGFILE=$HOME/log/procmail.log' >> /home/$MY_USERNAME/.procmailrc
  2259. echo 'LOGABSTRACT=all' >> /home/$MY_USERNAME/.procmailrc
  2260. fi
  2261. echo 'create_procmail' >> $COMPLETION_FILE
  2262. }
  2263. function spam_filtering {
  2264. # NOTE: spamassassin installation currently doesn't work, sa-compile fails with a make error 23/09/2014
  2265. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2266. return
  2267. fi
  2268. if grep -Fxq "spam_filtering" $COMPLETION_FILE; then
  2269. return
  2270. fi
  2271. apt-get -y --force-yes install exim4-daemon-heavy
  2272. apt-get -y --force-yes install spamassassin
  2273. sa-update -v
  2274. sed -i 's/ENABLED=0/ENABLED=1/g' /etc/default/spamassassin
  2275. sed -i 's/# spamd_address = 127.0.0.1 783/spamd_address = 127.0.0.1 783/g' /etc/exim4/exim4.conf.template
  2276. # This configuration is based on https://wiki.debian.org/DebianSpamAssassin
  2277. sed -i 's/local_parts = postmaster/local_parts = postmaster:abuse/g' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  2278. sed -i '/domains = +local_domains : +relay_to_domains/a\ set acl_m0 = rfcnames' /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
  2279. sed -i 's/accept/accept condition = ${if eq{$acl_m0}{rfcnames} {1}{0}}/g' /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2280. echo 'warn message = X-Spam-Score: $spam_score ($spam_bar)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2281. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2282. echo 'warn message = X-Spam-Flag: YES' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2283. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2284. echo 'warn message = X-Spam-Report: $spam_report' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2285. echo ' spam = nobody' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2286. echo '# reject spam at high scores (> 12)' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2287. echo 'deny message = This message scored $spam_score spam points.' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2288. echo ' spam = nobody:true' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2289. echo ' condition = ${if >{$spam_score_int}{120}{1}{0}}' >> /etc/exim4/conf.d/acl/40_exim4-config_check_data
  2290. # procmail configuration
  2291. echo '# get spamassassin to check emails' >> /home/$MY_USERNAME/.procmailrc
  2292. echo ':0fw: .spamassassin.lock' >> /home/$MY_USERNAME/.procmailrc
  2293. echo ' * < 256000' >> /home/$MY_USERNAME/.procmailrc
  2294. echo '| spamc' >> /home/$MY_USERNAME/.procmailrc
  2295. echo '# strong spam are discarded' >> /home/$MY_USERNAME/.procmailrc
  2296. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  2297. echo ' * ^X-Spam-Level: \*\*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  2298. echo '/dev/null' >> /home/$MY_USERNAME/.procmailrc
  2299. echo '# weak spam are kept just in case - clear this out every now and then' >> /home/$MY_USERNAME/.procmailrc
  2300. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  2301. echo ' * ^X-Spam-Level: \*\*\*\*\*' >> /home/$MY_USERNAME/.procmailrc
  2302. echo '.0-spam/' >> /home/$MY_USERNAME/.procmailrc
  2303. echo '# otherwise, marginal spam goes here for revision' >> /home/$MY_USERNAME/.procmailrc
  2304. echo ':0' >> /home/$MY_USERNAME/.procmailrc
  2305. echo ' * ^X-Spam-Level: \*\*' >> /home/$MY_USERNAME/.procmailrc
  2306. echo '.spam/' >> /home/$MY_USERNAME/.procmailrc
  2307. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  2308. # filtering scripts
  2309. echo '#!/bin/bash' > /usr/bin/filterspam
  2310. echo 'USERNAME=$1' >> /usr/bin/filterspam
  2311. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-spam' >> /usr/bin/filterspam
  2312. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterspam
  2313. echo ' exit' >> /usr/bin/filterspam
  2314. echo 'fi' >> /usr/bin/filterspam
  2315. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterspam
  2316. echo 'do' >> /usr/bin/filterspam
  2317. echo ' spamc -L spam < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterspam
  2318. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterspam
  2319. echo 'done' >> /usr/bin/filterspam
  2320. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterspam
  2321. echo 'do' >> /usr/bin/filterspam
  2322. echo ' spamc -L spam < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterspam
  2323. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterspam
  2324. echo 'done' >> /usr/bin/filterspam
  2325. echo '#!/bin/bash' > /usr/bin/filterham
  2326. echo 'USERNAME=$1' >> /usr/bin/filterham
  2327. echo 'MAILDIR=/home/$USERNAME/Maildir/.learn-ham' >> /usr/bin/filterham
  2328. echo 'if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterham
  2329. echo ' exit' >> /usr/bin/filterham
  2330. echo 'fi' >> /usr/bin/filterham
  2331. echo 'for f in `ls $MAILDIR/cur`' >> /usr/bin/filterham
  2332. echo 'do' >> /usr/bin/filterham
  2333. echo ' spamc -L ham < "$MAILDIR/cur/$f" > /dev/null' >> /usr/bin/filterham
  2334. echo ' rm "$MAILDIR/cur/$f"' >> /usr/bin/filterham
  2335. echo 'done' >> /usr/bin/filterham
  2336. echo 'for f in `ls $MAILDIR/new`' >> /usr/bin/filterham
  2337. echo 'do' >> /usr/bin/filterham
  2338. echo ' spamc -L ham < "$MAILDIR/new/$f" > /dev/null' >> /usr/bin/filterham
  2339. echo ' rm "$MAILDIR/new/$f"' >> /usr/bin/filterham
  2340. echo 'done' >> /usr/bin/filterham
  2341. if ! grep -q "filterspam" /etc/crontab; then
  2342. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterspam $MY_USERNAME" >> /etc/crontab
  2343. fi
  2344. if ! grep -q "filterham" /etc/crontab; then
  2345. echo "*/3 * * * * root /usr/bin/timeout 120 /usr/bin/filterham $MY_USERNAME" >> /etc/crontab
  2346. fi
  2347. chmod 655 /usr/bin/filterspam /usr/bin/filterham
  2348. sed -i 's/# use_bayes 1/use_bayes 1/g' /etc/mail/spamassassin/local.cf
  2349. sed -i 's/# bayes_auto_learn 1/bayes_auto_learn 1/g' /etc/mail/spamassassin/local.cf
  2350. service spamassassin restart
  2351. service exim4 restart
  2352. service cron restart
  2353. echo 'spam_filtering' >> $COMPLETION_FILE
  2354. }
  2355. function configure_imap {
  2356. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2357. return
  2358. fi
  2359. if grep -Fxq "configure_imap" $COMPLETION_FILE; then
  2360. return
  2361. fi
  2362. apt-get -y --force-yes install dovecot-common dovecot-imapd
  2363. if [ ! -d /etc/dovecot ]; then
  2364. echo "ERROR: Dovecot does not appear to have installed. $CHECK_MESSAGE"
  2365. exit 48
  2366. fi
  2367. if [ ! -f /etc/ssl/private/dovecot.key ]; then
  2368. makecert dovecot
  2369. fi
  2370. chown root:dovecot /etc/ssl/certs/dovecot.*
  2371. chown root:dovecot /etc/ssl/private/dovecot.*
  2372. sed -i 's|#ssl = yes|ssl = required|g' /etc/dovecot/conf.d/10-ssl.conf
  2373. sed -i 's|ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/ssl/certs/dovecot.crt|g' /etc/dovecot/conf.d/10-ssl.conf
  2374. sed -i 's|ssl_key = </etc/dovecot/private/dovecot.pem|ssl_key = </etc/ssl/private/dovecot.key|g' /etc/dovecot/conf.d/10-ssl.conf
  2375. sed -i 's|#ssl_dh_parameters_length = 1024|ssl_dh_parameters_length = 1024|g' /etc/dovecot/conf.d/10-ssl.conf
  2376. sed -i 's/#ssl_prefer_server_ciphers = no/ssl_prefer_server_ciphers = yes/g' /etc/dovecot/conf.d/10-ssl.conf
  2377. echo "ssl_cipher_list = '$SSL_CIPHERS'" >> /etc/dovecot/conf.d/10-ssl.conf
  2378. sed -i 's/#process_limit = 1024/process_limit = 5/g' /etc/dovecot/conf.d/10-master.conf
  2379. sed -i 's/#default_client_limit = 1000/default_client_limit = 5/g' /etc/dovecot/conf.d/10-master.conf
  2380. sed -i 's/#auth_verbose = no/auth_verbose = yes/g' /etc/dovecot/conf.d/10-logging.conf
  2381. sed -i 's/#listen = *, ::/listen = */g' /etc/dovecot/dovecot.conf
  2382. sed -i 's/#disable_plaintext_auth = yes/disable_plaintext_auth = no/g' /etc/dovecot/conf.d/10-auth.conf
  2383. sed -i 's/auth_mechanisms = plain/auth_mechanisms = plain login/g' /etc/dovecot/conf.d/10-auth.conf
  2384. sed -i 's|mail_location = mbox:~/mail:INBOX=/var/mail/%u|mail_location = maildir:~/Maildir:LAYOUT=fs|g' /etc/dovecot/conf.d/10-mail.conf
  2385. service dovecot restart
  2386. echo 'configure_imap' >> $COMPLETION_FILE
  2387. }
  2388. function configure_gpg {
  2389. if grep -Fxq "configure_gpg" $COMPLETION_FILE; then
  2390. return
  2391. fi
  2392. apt-get -y --force-yes install gnupg
  2393. # if gpg keys directory was previously imported from usb
  2394. if [[ $GPG_KEYS_IMPORTED == "yes" && -d /home/$MY_USERNAME/.gnupg ]]; then
  2395. sed -i "s|keyserver hkp://keys.gnupg.net|keyserver $GPG_KEYSERVER|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  2396. MY_GPG_PUBLIC_KEY_ID=$(su -c "gpg --list-keys $MY_EMAIL_ADDRESS | grep 'pub '" - $MY_USERNAME | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}')
  2397. echo 'configure_gpg' >> $COMPLETION_FILE
  2398. return
  2399. fi
  2400. if [ ! -d /home/$MY_USERNAME/.gnupg ]; then
  2401. mkdir /home/$MY_USERNAME/.gnupg
  2402. echo 'keyserver hkp://keys.gnupg.net' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2403. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2404. fi
  2405. sed -i "s|keyserver hkp://keys.gnupg.net|keyserver $GPG_KEYSERVER|g" /home/$MY_USERNAME/.gnupg/gpg.conf
  2406. if ! grep -q "# default preferences" /home/$MY_USERNAME/.gnupg/gpg.conf; then
  2407. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2408. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2409. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2410. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2411. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  2412. fi
  2413. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  2414. if [[ $MY_GPG_PUBLIC_KEY && $MY_GPG_PRIVATE_KEY ]]; then
  2415. # use your existing GPG keys which were exported
  2416. if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
  2417. echo "GPG public key file $MY_GPG_PUBLIC_KEY was not found"
  2418. exit 5
  2419. fi
  2420. if [ ! -f $MY_GPG_PRIVATE_KEY ]; then
  2421. echo "GPG private key file $MY_GPG_PRIVATE_KEY was not found"
  2422. exit 6
  2423. fi
  2424. su -c "gpg --import $MY_GPG_PUBLIC_KEY" - $MY_USERNAME
  2425. su -c "gpg --allow-secret-key-import --import $MY_GPG_PRIVATE_KEY" - $MY_USERNAME
  2426. # for security ensure that the private key file doesn't linger around
  2427. shred -zu $MY_GPG_PRIVATE_KEY
  2428. MY_GPG_PUBLIC_KEY_ID=$(su -c "gpg --list-keys $MY_EMAIL_ADDRESS | grep 'pub '" - $MY_USERNAME | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}')
  2429. else
  2430. # Generate a GPG key
  2431. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  2432. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  2433. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  2434. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  2435. echo "Name-Real: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
  2436. echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
  2437. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  2438. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  2439. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  2440. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  2441. MY_GPG_PUBLIC_KEY_ID=$(su -c "gpg --list-keys $MY_EMAIL_ADDRESS | grep 'pub '" - $MY_USERNAME | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}')
  2442. MY_GPG_PUBLIC_KEY=/tmp/public_key.gpg
  2443. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  2444. if grep -q "configure_email" $COMPLETION_FILE; then
  2445. if ! grep -q "Change your GPG password" /home/$MY_USERNAME/README; then
  2446. echo '' >> /home/$MY_USERNAME/README
  2447. echo '' >> /home/$MY_USERNAME/README
  2448. echo 'Change your GPG password' >> /home/$MY_USERNAME/README
  2449. echo '========================' >> /home/$MY_USERNAME/README
  2450. echo "It's very important to add a password to your GPG key so that" >> /home/$MY_USERNAME/README
  2451. echo "if anyone does get access to your email they still won't be able" >> /home/$MY_USERNAME/README
  2452. echo 'to read them without knowning the GPG password.' >> /home/$MY_USERNAME/README
  2453. echo 'You can change the it with:' >> /home/$MY_USERNAME/README
  2454. echo '' >> /home/$MY_USERNAME/README
  2455. echo " gpg --edit-key $MY_GPG_PUBLIC_KEY" >> /home/$MY_USERNAME/README
  2456. echo ' passwd' >> /home/$MY_USERNAME/README
  2457. echo ' save' >> /home/$MY_USERNAME/README
  2458. echo ' quit' >> /home/$MY_USERNAME/README
  2459. fi
  2460. if ! grep -q "Publish your GPG public key" /home/$MY_USERNAME/README; then
  2461. echo '' >> /home/$MY_USERNAME/README
  2462. echo '' >> /home/$MY_USERNAME/README
  2463. echo 'Publish your GPG public key' >> /home/$MY_USERNAME/README
  2464. echo '===========================' >> /home/$MY_USERNAME/README
  2465. echo 'So that others can send emails to you securely you should' >> /home/$MY_USERNAME/README
  2466. echo 'publish your GPG public key with the command:' >> /home/$MY_USERNAME/README
  2467. echo '' >> /home/$MY_USERNAME/README
  2468. echo " gpg --send-keys $MY_GPG_PUBLIC_KEY" >> /home/$MY_USERNAME/README
  2469. fi
  2470. fi
  2471. fi
  2472. echo 'configure_gpg' >> $COMPLETION_FILE
  2473. }
  2474. function encrypt_incoming_email {
  2475. # encrypts incoming mail using your GPG public key
  2476. # so even if an attacker gains access to the data at rest they still need
  2477. # to know your GPG key password to be able to read anything
  2478. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2479. return
  2480. fi
  2481. if grep -Fxq "encrypt_incoming_email" $COMPLETION_FILE; then
  2482. return
  2483. fi
  2484. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  2485. return
  2486. fi
  2487. if [ ! -f /usr/bin/gpgit.pl ]; then
  2488. apt-get -y --force-yes install git libmail-gnupg-perl
  2489. cd $INSTALL_DIR
  2490. git clone https://github.com/mikecardwell/gpgit
  2491. cd gpgit
  2492. cp gpgit.pl /usr/bin
  2493. fi
  2494. # add a procmail rule
  2495. if ! grep -q "/usr/bin/gpgit.pl" /home/$MY_USERNAME/.procmailrc; then
  2496. echo '' >> /home/$MY_USERNAME/.procmailrc
  2497. echo ':0 f' >> /home/$MY_USERNAME/.procmailrc
  2498. echo "| /usr/bin/gpgit.pl $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/.procmailrc
  2499. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.procmailrc
  2500. fi
  2501. echo 'encrypt_incoming_email' >> $COMPLETION_FILE
  2502. }
  2503. function encrypt_outgoing_email {
  2504. # encrypts outgoing mail using your GPG public key
  2505. # so even if an attacker gains access to the data at rest they still need
  2506. # to know your GPG key password to be able to read sent mail
  2507. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2508. return
  2509. fi
  2510. if grep -Fxq "encrypt_outgoing_email" $COMPLETION_FILE; then
  2511. return
  2512. fi
  2513. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  2514. return
  2515. fi
  2516. echo 'sent_items_router:' > /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2517. echo ' driver = accept' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2518. echo ' transport = sent_items_transport' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2519. echo ' condition = ${if !eq{$authenticated_id}{}}' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2520. echo ' unseen' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2521. echo ' no_verify' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
  2522. # TODO
  2523. echo 'sent_items_transport:'
  2524. echo ' driver = pipe'
  2525. echo ' user = $authenticated_id'
  2526. echo ' group = Debian-exim'
  2527. echo ' temp_errors = *'
  2528. echo ' transport_filter = /usr/bin/gpgit.pl $sender_address'
  2529. echo ' command = /usr/bin/pipe2imap.pl --ssl --user master --authas $authenticated_id --passfile /etc/exim4/master_imap_password.txt --folder "Sent Items" --flags "\\seen"'
  2530. echo ' log_defer_output = true'
  2531. service exim4 restart
  2532. echo 'encrypt_outgoing_email' >> $COMPLETION_FILE
  2533. }
  2534. function encrypt_all_email {
  2535. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2536. return
  2537. fi
  2538. if grep -Fxq "encrypt_all_email" $COMPLETION_FILE; then
  2539. return
  2540. fi
  2541. if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
  2542. return
  2543. fi
  2544. echo '#!/bin/bash' > /usr/bin/encmaildir
  2545. echo '#' >> /usr/bin/encmaildir
  2546. echo '# GPLv2' >> /usr/bin/encmaildir
  2547. echo '# GPG Encrypt a Maildir using gpgit.pl' >> /usr/bin/encmaildir
  2548. echo '# Oct 03, 2014' >> /usr/bin/encmaildir
  2549. echo '#' >> /usr/bin/encmaildir
  2550. echo '# Change log:' >> /usr/bin/encmaildir
  2551. echo '# Sep 03, 2011' >> /usr/bin/encmaildir
  2552. echo '# - Temporary file is based on file_owner to avoid' >> /usr/bin/encmaildir
  2553. echo '# issues with permission differences.' >> /usr/bin/encmaildir
  2554. echo '# - Temporary file is removed after run.' >> /usr/bin/encmaildir
  2555. echo '# - Optional arguments passed to "find".' >> /usr/bin/encmaildir
  2556. echo '# - Full paths to binaries.' >> /usr/bin/encmaildir
  2557. echo '# - Removed unneccessary need of "cat", "grep", etc.' >> /usr/bin/encmaildir
  2558. echo '# Sep 04, 2011' >> /usr/bin/encmaildir
  2559. echo '# - Dont remove Dovecot index/uid unless messages' >> /usr/bin/encmaildir
  2560. echo '# have been GPG encrypted.' >> /usr/bin/encmaildir
  2561. echo '# - Adjust file tests to not just use -e' >> /usr/bin/encmaildir
  2562. echo '# - Quote all file operations' >> /usr/bin/encmaildir
  2563. echo '# Sep 05, 2011' >> /usr/bin/encmaildir
  2564. echo '# - Dont arbitrarily copy files, only overwrite the file' >> /usr/bin/encmaildir
  2565. echo '# in ~/Maildir if it differs after calling gpgencmail.pl' >> /usr/bin/encmaildir
  2566. echo '# - Only rebuild the index if we have modified ~/Maildir' >> /usr/bin/encmaildir
  2567. echo '# Oct 03, 2014' >> /usr/bin/encmaildir
  2568. echo '# - Minor modifications for use with Freedombone' >> /usr/bin/encmaildir
  2569. echo '' >> /usr/bin/encmaildir
  2570. echo 'if [[ -z "$1" || -z "$2" || -z "$3" ]]; then' >> /usr/bin/encmaildir
  2571. echo ' echo "Usage is ./encmaildir.sh {optional arguments passed to find for messages such as -mtime 0}"' >> /usr/bin/encmaildir
  2572. echo ' exit 0' >> /usr/bin/encmaildir
  2573. echo 'fi' >> /usr/bin/encmaildir
  2574. echo '' >> /usr/bin/encmaildir
  2575. echo 'MAIL_DIR=$1' >> /usr/bin/encmaildir
  2576. echo 'EMAIL_ADDRESS=$2' >> /usr/bin/encmaildir
  2577. echo 'USERNAME=$3' >> /usr/bin/encmaildir
  2578. echo 'if [ ! -d "$MAIL_DIR" ]; then' >> /usr/bin/encmaildir
  2579. echo " MAIL_DIR='/home/$MY_USERNAME/Maildir'" >> /usr/bin/encmaildir
  2580. echo 'fi' >> /usr/bin/encmaildir
  2581. echo '' >> /usr/bin/encmaildir
  2582. echo 'if [ ! $EMAIL_ADDRESS ]; then' >> /usr/bin/encmaildir
  2583. echo " EMAIL_ADDRESS='$MY_EMAIL_ADDRESS'" >> /usr/bin/encmaildir
  2584. echo 'fi' >> /usr/bin/encmaildir
  2585. echo '' >> /usr/bin/encmaildir
  2586. echo 'if [ ! $USERNAME ]; then' >> /usr/bin/encmaildir
  2587. echo " USERNAME='$MY_USERNAME'" >> /usr/bin/encmaildir
  2588. echo 'fi' >> /usr/bin/encmaildir
  2589. echo '' >> /usr/bin/encmaildir
  2590. echo '# Does this key exist?' >> /usr/bin/encmaildir
  2591. echo 'gpg --list-keys "$EMAIL_ADDRESS" > /dev/null 2>&1' >> /usr/bin/encmaildir
  2592. echo 'if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
  2593. echo ' echo "A GPG key for $EMAIL_ADDRESS could not be found!"' >> /usr/bin/encmaildir
  2594. echo ' exit 0' >> /usr/bin/encmaildir
  2595. echo 'fi' >> /usr/bin/encmaildir
  2596. echo '' >> /usr/bin/encmaildir
  2597. echo '# Find all files in the Maildir specified.' >> /usr/bin/encmaildir
  2598. echo 'echo "Calling find"' >> /usr/bin/encmaildir
  2599. echo -n 'find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
  2600. echo -n "'.*/\(cur\|new\)/.*' " >> /usr/bin/encmaildir
  2601. echo '$4|while read line; do' >> /usr/bin/encmaildir
  2602. echo ' gpgit.pl --encrypt-mode prefer-inline "$EMAIL_ADDRESS" "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  2603. echo '' >> /usr/bin/encmaildir
  2604. echo ' # Check to see if there are differences between the existing' >> /usr/bin/encmaildir
  2605. echo ' # Maildir file and what was created by gpgit.pl' >> /usr/bin/encmaildir
  2606. echo ' diff -qa "$line" "/tmp/msg_$USERNAME" > /dev/null 2>&1;' >> /usr/bin/encmaildir
  2607. echo ' if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
  2608. echo ' # Preserve timestamps, set ownership.' >> /usr/bin/encmaildir
  2609. echo ' chown $USERNAME:$USERNAME "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  2610. echo ' chmod 600 "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  2611. echo ' touch "/tmp/msg_$USERNAME" --reference="$line"' >> /usr/bin/encmaildir
  2612. echo '' >> /usr/bin/encmaildir
  2613. echo ' # Unlink the original Maildir message' >> /usr/bin/encmaildir
  2614. echo ' unlink "$line"' >> /usr/bin/encmaildir
  2615. echo '' >> /usr/bin/encmaildir
  2616. echo ' # Strip message sizes, retain experimental flags' >> /usr/bin/encmaildir
  2617. echo ' # and status flags, and copy the file over.' >> /usr/bin/encmaildir
  2618. echo ' STRIPSIZES=$(/bin/echo "$line"|/bin/sed -e "s/W=[[:digit:]]*//" -e "s/S=[[:digit:]]*//" -e "s/,,//" -e "s/,:2/:2/")' >> /usr/bin/encmaildir
  2619. echo ' cp -av "/tmp/msg_$USERNAME" "$STRIPSIZES"' >> /usr/bin/encmaildir
  2620. echo '' >> /usr/bin/encmaildir
  2621. echo ' #Indexes must be rebuilt, weve modified Maildir.' >> /usr/bin/encmaildir
  2622. echo ' touch "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
  2623. echo ' else' >> /usr/bin/encmaildir
  2624. echo ' echo "Not copying, no differences between /tmp/msg_$USERNAME and $line"' >> /usr/bin/encmaildir
  2625. echo ' fi' >> /usr/bin/encmaildir
  2626. echo '' >> /usr/bin/encmaildir
  2627. echo ' # Remove the temporary file' >> /usr/bin/encmaildir
  2628. echo ' unlink "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
  2629. echo 'done' >> /usr/bin/encmaildir
  2630. echo '' >> /usr/bin/encmaildir
  2631. echo '# Remove Dovecot index and uids for regeneration.' >> /usr/bin/encmaildir
  2632. echo 'if [ -f "/tmp/rebuild_index_$USERNAME" ]; then' >> /usr/bin/encmaildir
  2633. echo ' echo "Removing Dovecot indexes and uids"' >> /usr/bin/encmaildir
  2634. echo -n ' find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
  2635. echo "'.*\(dovecot-\|dovecot\.\|\.uidvalidity\).*' -delete" >> /usr/bin/encmaildir
  2636. echo '' >> /usr/bin/encmaildir
  2637. echo ' # Remove the temporary file' >> /usr/bin/encmaildir
  2638. echo ' unlink "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
  2639. echo 'else' >> /usr/bin/encmaildir
  2640. echo ' echo "No messages found needing GPG encryption, not' >> /usr/bin/encmaildir
  2641. echo ' echo "removing Dovecot indexes and UIDs."' >> /usr/bin/encmaildir
  2642. echo 'fi' >> /usr/bin/encmaildir
  2643. echo 'exit 0' >> /usr/bin/encmaildir
  2644. chmod +x /usr/bin/encmaildir
  2645. if [ ! /home/$MY_USERNAME/README ]; then
  2646. touch /home/$MY_USERNAME/README
  2647. fi
  2648. if ! grep -q "If you have imported legacy email" /home/$MY_USERNAME/README; then
  2649. echo '' >> /home/$MY_USERNAME/README
  2650. echo '' >> /home/$MY_USERNAME/README
  2651. echo 'Encrypting legacy email' >> /home/$MY_USERNAME/README
  2652. echo '=======================' >> /home/$MY_USERNAME/README
  2653. echo 'If you have imported legacy email which is not encrypted' >> /home/$MY_USERNAME/README
  2654. echo 'then it can be encrypted with the command:' >> /home/$MY_USERNAME/README
  2655. echo '' >> /home/$MY_USERNAME/README
  2656. echo ' encmaildir' >> /home/$MY_USERNAME/README
  2657. echo '' >> /home/$MY_USERNAME/README
  2658. echo 'But be warned that depending upon how much email you have' >> /home/$MY_USERNAME/README
  2659. echo 'this could take a seriously LONG time on the Beaglebone' >> /home/$MY_USERNAME/README
  2660. echo 'and may be better done on a faster machine.' >> /home/$MY_USERNAME/README
  2661. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  2662. fi
  2663. echo 'encrypt_all_email' >> $COMPLETION_FILE
  2664. }
  2665. function email_client {
  2666. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2667. return
  2668. fi
  2669. if grep -Fxq "email_client" $COMPLETION_FILE; then
  2670. return
  2671. fi
  2672. apt-get -y --force-yes install mutt-patched lynx abook
  2673. if [ ! -f /etc/Muttrc ]; then
  2674. echo "ERROR: Mutt does not appear to have installed. $CHECK_MESSAGE"
  2675. exit 49
  2676. fi
  2677. if [ ! -d /home/$MY_USERNAME/.mutt ]; then
  2678. mkdir /home/$MY_USERNAME/.mutt
  2679. fi
  2680. echo "text/html; lynx -dump -width=78 -nolist %s | sed ‘s/^ //’; copiousoutput; needsterminal; nametemplate=%s.html" > /home/$MY_USERNAME/.mutt/mailcap
  2681. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
  2682. echo 'set mbox_type=Maildir' >> /etc/Muttrc
  2683. echo 'set folder="~/Maildir"' >> /etc/Muttrc
  2684. echo 'set mask="!^\\.[^.]"' >> /etc/Muttrc
  2685. echo 'set mbox="~/Maildir"' >> /etc/Muttrc
  2686. echo 'set record="+Sent"' >> /etc/Muttrc
  2687. echo 'set postponed="+Drafts"' >> /etc/Muttrc
  2688. echo 'set trash="+Trash"' >> /etc/Muttrc
  2689. echo 'set spoolfile="~/Maildir"' >> /etc/Muttrc
  2690. echo 'auto_view text/x-vcard text/html text/enriched' >> /etc/Muttrc
  2691. echo 'set editor="emacs"' >> /etc/Muttrc
  2692. echo 'set header_cache="+.cache"' >> /etc/Muttrc
  2693. echo '' >> /etc/Muttrc
  2694. echo 'macro index S "<tag-prefix><save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  2695. echo 'macro pager S "<save-message>=.learn-spam<enter>" "move to learn-spam"' >> /etc/Muttrc
  2696. echo 'macro index H "<tag-prefix><copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  2697. echo 'macro pager H "<copy-message>=.learn-ham<enter>" "copy to learn-ham"' >> /etc/Muttrc
  2698. echo '' >> /etc/Muttrc
  2699. echo '# set up the sidebar' >> /etc/Muttrc
  2700. echo 'set sidebar_width=12' >> /etc/Muttrc
  2701. echo 'set sidebar_visible=yes' >> /etc/Muttrc
  2702. echo "set sidebar_delim='|'" >> /etc/Muttrc
  2703. echo 'set sidebar_sort=yes' >> /etc/Muttrc
  2704. echo '' >> /etc/Muttrc
  2705. echo 'set rfc2047_parameters' >> /etc/Muttrc
  2706. echo '' >> /etc/Muttrc
  2707. echo '# Show inbox and sent items' >> /etc/Muttrc
  2708. echo 'mailboxes = =Sent' >> /etc/Muttrc
  2709. echo '' >> /etc/Muttrc
  2710. echo '# Alter these colours as needed for maximum bling' >> /etc/Muttrc
  2711. echo 'color sidebar_new yellow default' >> /etc/Muttrc
  2712. echo 'color normal white default' >> /etc/Muttrc
  2713. echo 'color hdrdefault brightcyan default' >> /etc/Muttrc
  2714. echo 'color signature green default' >> /etc/Muttrc
  2715. echo 'color attachment brightyellow default' >> /etc/Muttrc
  2716. echo 'color quoted green default' >> /etc/Muttrc
  2717. echo 'color quoted1 white default' >> /etc/Muttrc
  2718. echo 'color tilde blue default' >> /etc/Muttrc
  2719. echo '' >> /etc/Muttrc
  2720. echo '# ctrl-n, ctrl-p to select next, prev folder' >> /etc/Muttrc
  2721. echo '# ctrl-o to open selected folder' >> /etc/Muttrc
  2722. echo 'bind index \Cp sidebar-prev' >> /etc/Muttrc
  2723. echo 'bind index \Cn sidebar-next' >> /etc/Muttrc
  2724. echo 'bind index \Co sidebar-open' >> /etc/Muttrc
  2725. echo 'bind pager \Cp sidebar-prev' >> /etc/Muttrc
  2726. echo 'bind pager \Cn sidebar-next' >> /etc/Muttrc
  2727. echo 'bind pager \Co sidebar-open' >> /etc/Muttrc
  2728. echo '' >> /etc/Muttrc
  2729. echo '# ctrl-b toggles sidebar visibility' >> /etc/Muttrc
  2730. echo "macro index,pager \Cb '<enter-command>toggle sidebar_visible<enter><redraw-screen>' 'toggle sidebar'" >> /etc/Muttrc
  2731. echo '' >> /etc/Muttrc
  2732. echo '# esc-m Mark new messages as read' >> /etc/Muttrc
  2733. echo 'macro index <esc>m "T~N<enter>;WNT~O<enter>;WO\CT~T<enter>" "mark all messages read"' >> /etc/Muttrc
  2734. echo '' >> /etc/Muttrc
  2735. echo '# Collapsing threads' >> /etc/Muttrc
  2736. echo 'macro index [ "<collapse-thread>" "collapse/uncollapse thread"' >> /etc/Muttrc
  2737. echo 'macro index ] "<collapse-all>" "collapse/uncollapse all threads"' >> /etc/Muttrc
  2738. echo '' >> /etc/Muttrc
  2739. echo '# threads containing new messages' >> /etc/Muttrc
  2740. echo 'uncolor index "~(~N)"' >> /etc/Muttrc
  2741. echo 'color index brightblue default "~(~N)"' >> /etc/Muttrc
  2742. echo '' >> /etc/Muttrc
  2743. echo '# new messages themselves' >> /etc/Muttrc
  2744. echo 'uncolor index "~N"' >> /etc/Muttrc
  2745. echo 'color index brightyellow default "~N"' >> /etc/Muttrc
  2746. echo '' >> /etc/Muttrc
  2747. echo '# GPG/PGP integration' >> /etc/Muttrc
  2748. echo '# this set the number of seconds to keep in memory the passphrase used to encrypt/sign' >> /etc/Muttrc
  2749. echo 'set pgp_timeout=1800' >> /etc/Muttrc
  2750. echo '' >> /etc/Muttrc
  2751. echo '# automatically sign and encrypt with PGP/MIME' >> /etc/Muttrc
  2752. echo 'set pgp_autosign # autosign all outgoing mails' >> /etc/Muttrc
  2753. echo 'set pgp_autoencrypt # Try to encrypt automatically' >> /etc/Muttrc
  2754. echo 'set pgp_replyencrypt # autocrypt replies to crypted' >> /etc/Muttrc
  2755. echo 'set pgp_replysign # autosign replies to signed' >> /etc/Muttrc
  2756. echo 'set pgp_auto_decode=yes # decode attachments' >> /etc/Muttrc
  2757. echo 'set fcc_clear # Keep cleartext copy of sent encrypted mail' >> /etc/Muttrc
  2758. echo 'unset smime_is_default' >> /etc/Muttrc
  2759. echo '' >> /etc/Muttrc
  2760. echo 'set alias_file=~/.mutt-alias' >> /etc/Muttrc
  2761. echo 'source ~/.mutt-alias' >> /etc/Muttrc
  2762. echo 'set query_command= "abook --mutt-query \"%s\""' >> /etc/Muttrc
  2763. echo 'macro index,pager A "<pipe-message>abook --add-email-quiet<return>" "add the sender address to abook"' >> /etc/Muttrc
  2764. cp -f /etc/Muttrc /home/$MY_USERNAME/.muttrc
  2765. touch /home/$MY_USERNAME/.mutt-alias
  2766. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.muttrc
  2767. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt-alias
  2768. echo 'email_client' >> $COMPLETION_FILE
  2769. }
  2770. function folders_for_mailing_lists {
  2771. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2772. return
  2773. fi
  2774. if grep -Fxq "folders_for_mailing_lists" $COMPLETION_FILE; then
  2775. return
  2776. fi
  2777. echo '#!/bin/bash' > /usr/bin/addmailinglist
  2778. echo 'MYUSERNAME=$1' >> /usr/bin/addmailinglist
  2779. echo 'MAILINGLIST=$2' >> /usr/bin/addmailinglist
  2780. echo 'SUBJECTTAG=$3' >> /usr/bin/addmailinglist
  2781. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/addmailinglist
  2782. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/addmailinglist
  2783. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/addmailinglist
  2784. echo '' >> /usr/bin/addmailinglist
  2785. echo '# Exit if the list was already added' >> /usr/bin/addmailinglist
  2786. echo 'if grep -q "=$MAILINGLIST" $MUTTRC; then' >> /usr/bin/addmailinglist
  2787. echo ' exit 1' >> /usr/bin/addmailinglist
  2788. echo 'fi' >> /usr/bin/addmailinglist
  2789. echo '' >> /usr/bin/addmailinglist
  2790. echo 'if ! [[ $MYUSERNAME && $MAILINGLIST && $SUBJECTTAG ]]; then' >> /usr/bin/addmailinglist
  2791. echo ' echo "addmailinglist [user name] [mailing list name] [subject tag]"' >> /usr/bin/addmailinglist
  2792. echo ' exit 1' >> /usr/bin/addmailinglist
  2793. echo 'fi' >> /usr/bin/addmailinglist
  2794. echo '' >> /usr/bin/addmailinglist
  2795. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/addmailinglist
  2796. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/addmailinglist
  2797. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/addmailinglist
  2798. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/addmailinglist
  2799. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/addmailinglist
  2800. echo 'fi' >> /usr/bin/addmailinglist
  2801. echo '' >> /usr/bin/addmailinglist
  2802. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/addmailinglist
  2803. echo 'echo "" >> $PM' >> /usr/bin/addmailinglist
  2804. echo 'echo ":0" >> $PM' >> /usr/bin/addmailinglist
  2805. echo 'echo " * ^Subject:.*()\[$SUBJECTTAG\]" >> $PM' >> /usr/bin/addmailinglist
  2806. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/addmailinglist
  2807. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/addmailinglist
  2808. echo '' >> /usr/bin/addmailinglist
  2809. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/addmailinglist
  2810. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/addmailinglist
  2811. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addmailinglist
  2812. echo 'fi' >> /usr/bin/addmailinglist
  2813. echo '' >> /usr/bin/addmailinglist
  2814. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/addmailinglist
  2815. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/addmailinglist
  2816. echo ' mkdir $PROCMAILLOG' >> /usr/bin/addmailinglist
  2817. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/addmailinglist
  2818. echo 'fi' >> /usr/bin/addmailinglist
  2819. echo '' >> /usr/bin/addmailinglist
  2820. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/addmailinglist
  2821. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/addmailinglist
  2822. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/addmailinglist
  2823. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addmailinglist
  2824. echo 'fi' >> /usr/bin/addmailinglist
  2825. echo 'exit 0' >> /usr/bin/addmailinglist
  2826. chmod +x /usr/bin/addmailinglist
  2827. echo 'folders_for_mailing_lists' >> $COMPLETION_FILE
  2828. }
  2829. function folders_for_email_addresses {
  2830. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2831. return
  2832. fi
  2833. if grep -Fxq "folders_for_email_addresses" $COMPLETION_FILE; then
  2834. return
  2835. fi
  2836. echo '#!/bin/bash' > /usr/bin/addemailtofolder
  2837. echo 'MYUSERNAME=$1' >> /usr/bin/addemailtofolder
  2838. echo 'EMAILADDRESS=$2' >> /usr/bin/addemailtofolder
  2839. echo 'MAILINGLIST=$3' >> /usr/bin/addemailtofolder
  2840. echo 'MUTTRC=/home/$MYUSERNAME/.muttrc' >> /usr/bin/addemailtofolder
  2841. echo 'PM=/home/$MYUSERNAME/.procmailrc' >> /usr/bin/addemailtofolder
  2842. echo 'LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST' >> /usr/bin/addemailtofolder
  2843. echo '' >> /usr/bin/addemailtofolder
  2844. echo 'if ! [[ $MYUSERNAME && $EMAILADDRESS && $MAILINGLIST ]]; then' >> /usr/bin/addemailtofolder
  2845. echo ' echo "addemailtofolder [user name] [email address] [mailing list name]"' >> /usr/bin/addemailtofolder
  2846. echo ' exit 1' >> /usr/bin/addemailtofolder
  2847. echo 'fi' >> /usr/bin/addemailtofolder
  2848. echo '' >> /usr/bin/addemailtofolder
  2849. echo 'if [ ! -d "$LISTDIR" ]; then' >> /usr/bin/addemailtofolder
  2850. echo ' mkdir -m 700 $LISTDIR' >> /usr/bin/addemailtofolder
  2851. echo ' mkdir -m 700 $LISTDIR/tmp' >> /usr/bin/addemailtofolder
  2852. echo ' mkdir -m 700 $LISTDIR/new' >> /usr/bin/addemailtofolder
  2853. echo ' mkdir -m 700 $LISTDIR/cur' >> /usr/bin/addemailtofolder
  2854. echo 'fi' >> /usr/bin/addemailtofolder
  2855. echo 'chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR' >> /usr/bin/addemailtofolder
  2856. echo 'echo "" >> $PM' >> /usr/bin/addemailtofolder
  2857. echo 'echo ":0" >> $PM' >> /usr/bin/addemailtofolder
  2858. echo 'echo " * ^From: $EMAILADDRESS" >> $PM' >> /usr/bin/addemailtofolder
  2859. echo 'echo "$LISTDIR/new" >> $PM' >> /usr/bin/addemailtofolder
  2860. echo 'chown $MYUSERNAME:$MYUSERNAME $PM' >> /usr/bin/addemailtofolder
  2861. echo 'if [ ! -f "$MUTTRC" ]; then' >> /usr/bin/addemailtofolder
  2862. echo ' cp /etc/Muttrc $MUTTRC' >> /usr/bin/addemailtofolder
  2863. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addemailtofolder
  2864. echo 'fi' >> /usr/bin/addemailtofolder
  2865. echo 'PROCMAILLOG=/home/$MYUSERNAME/log' >> /usr/bin/addemailtofolder
  2866. echo 'if [ ! -d $PROCMAILLOG ]; then' >> /usr/bin/addemailtofolder
  2867. echo ' mkdir $PROCMAILLOG' >> /usr/bin/addemailtofolder
  2868. echo ' chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG' >> /usr/bin/addemailtofolder
  2869. echo 'fi' >> /usr/bin/addemailtofolder
  2870. echo 'MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC)' >> /usr/bin/addemailtofolder
  2871. echo 'if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then' >> /usr/bin/addemailtofolder
  2872. echo ' if ! grep -q "=$MAILINGLIST" $MUTTRC; then' >> /usr/bin/addemailtofolder
  2873. echo ' sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC' >> /usr/bin/addemailtofolder
  2874. echo ' chown $MYUSERNAME:$MYUSERNAME $MUTTRC' >> /usr/bin/addemailtofolder
  2875. echo ' fi' >> /usr/bin/addemailtofolder
  2876. echo 'fi' >> /usr/bin/addemailtofolder
  2877. echo 'exit 0' >> /usr/bin/addemailtofolder
  2878. chmod +x /usr/bin/addemailtofolder
  2879. echo 'folders_for_email_addresses' >> $COMPLETION_FILE
  2880. }
  2881. function dynamic_dns_freedns {
  2882. if grep -Fxq "dynamic_dns_freedns" $COMPLETION_FILE; then
  2883. return
  2884. fi
  2885. echo '#!/bin/bash' > /usr/bin/dynamicdns
  2886. echo '# subdomain name 1' >> /usr/bin/dynamicdns
  2887. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  2888. echo '# add any other subdomains below' >> /usr/bin/dynamicdns
  2889. chmod 600 /usr/bin/dynamicdns
  2890. chmod +x /usr/bin/dynamicdns
  2891. if ! grep -q "dynamicdns" /etc/crontab; then
  2892. echo '*/5 * * * * root /usr/bin/timeout 240 /usr/bin/dynamicdns' >> /etc/crontab
  2893. fi
  2894. service cron restart
  2895. echo 'dynamic_dns_freedns' >> $COMPLETION_FILE
  2896. }
  2897. function create_public_mailing_list {
  2898. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2899. return
  2900. fi
  2901. if grep -Fxq "create_public_mailing_list" $COMPLETION_FILE; then
  2902. return
  2903. fi
  2904. if [ ! $PUBLIC_MAILING_LIST ]; then
  2905. return
  2906. fi
  2907. # does the mailing list have a separate domain name?
  2908. if [ ! $PUBLIC_MAILING_LIST_DOMAIN_NAME ]; then
  2909. PUBLIC_MAILING_LIST_DOMAIN_NAME=$DOMAIN_NAME
  2910. fi
  2911. PUBLIC_MAILING_LIST_USER="mlmmj"
  2912. apt-get -y --force-yes install mlmmj
  2913. adduser --system $PUBLIC_MAILING_LIST_USER
  2914. addgroup $PUBLIC_MAILING_LIST_USER
  2915. adduser $PUBLIC_MAILING_LIST_USER $PUBLIC_MAILING_LIST_USER
  2916. echo ''
  2917. echo "Creating the $PUBLIC_MAILING_LIST mailing list"
  2918. echo ''
  2919. # create the list
  2920. mlmmj-make-ml -a -L "$PUBLIC_MAILING_LIST" -c $PUBLIC_MAILING_LIST_USER
  2921. echo 'SYSTEM_ALIASES_PIPE_TRANSPORT = address_pipe' > /etc/exim4/conf.d/main/000_localmacros
  2922. echo "SYSTEM_ALIASES_USER = $PUBLIC_MAILING_LIST_USER" >> /etc/exim4/conf.d/main/000_localmacros
  2923. echo "SYSTEM_ALIASES_GROUP = $PUBLIC_MAILING_LIST_USER" >> /etc/exim4/conf.d/main/000_localmacros
  2924. # router
  2925. echo 'mlmmj_router:' > /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2926. echo ' debug_print = "R: mlmmj_router for $local_part@$domain"' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2927. echo ' driver = accept' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2928. echo ' domains = +mlmmj_domains' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2929. echo ' #require_files = MLMMJ_HOME/${lc::$local_part}' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2930. echo ' # Use this instead, if you dont want to give Exim rx rights to mlmmj spool.' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2931. echo ' # Exim will then spawn a new process running under the UID of "mlmmj".' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2932. echo ' require_files = mlmmj:MLMMJ_HOME/${lc::$local_part}' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2933. echo ' local_part_suffix = +*' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2934. echo ' local_part_suffix_optional' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2935. echo ' headers_remove = Delivered-To' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2936. echo ' headers_add = Delivered-To: $local_part$local_part_suffix@$domain' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2937. echo ' transport = mlmmj_transport' >> /etc/exim4/conf.d/router/750_exim4-config_mlmmj
  2938. # transport
  2939. echo 'mlmmj_transport:' > /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2940. echo ' debug_print = "T: mlmmj_transport for $local_part@$domain"' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2941. echo ' driver = pipe' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2942. echo ' return_path_add' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2943. echo ' user = mlmmj' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2944. echo ' group = mlmmj' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2945. echo ' home_directory = MLMMJ_HOME' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2946. echo ' current_directory = MLMMJ_HOME' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2947. echo ' command = /usr/bin/mlmmj-receive -F -L MLMMJ_HOME/${lc:$local_part}' >> /etc/exim4/conf.d/transport/40_exim4-config_mlmmj
  2948. if ! grep -q "MLMMJ_HOME=/var/spool/mlmmj" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  2949. sed -i '/MAIN CONFIGURATION SETTINGS/a\MLMMJ_HOME=/var/spool/mlmmj' /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  2950. fi
  2951. if ! grep -q "domainlist mlmmj_domains =" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  2952. sed -i "/MLMMJ_HOME/a\domainlist mlmmj_domains = $PUBLIC_MAILING_LIST_DOMAIN_NAME" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  2953. fi
  2954. if ! grep -q "delay_warning_condition =" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  2955. sed -i '/domainlist mlmmj_domains =/a\delay_warning_condition = ${if match_domain{$domain}{+mlmmj_domains}{no}{yes}}' /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  2956. fi
  2957. if ! grep -q ": +mlmmj_domains" /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs; then
  2958. sed -i 's/domainlist relay_to_domains = MAIN_RELAY_TO_DOMAINS/domainlist relay_to_domains = MAIN_RELAY_TO_DOMAINS : +mlmmj_domains/g' /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs
  2959. fi
  2960. if ! grep -q "! +mlmmj_domains" /etc/exim4/conf.d/router/200_exim4-config_primary; then
  2961. sed -i 's/domains = ! +local_domains/domains = ! +mlmmj_domains : ! +local_domains/g' /etc/exim4/conf.d/router/200_exim4-config_primary
  2962. fi
  2963. newaliases
  2964. update-exim4.conf.template -r
  2965. update-exim4.conf
  2966. service exim4 restart
  2967. if ! grep -q "$PUBLIC_MAILING_LIST mailing list" /home/$MY_USERNAME/README; then
  2968. echo '' >> /home/$MY_USERNAME/README
  2969. echo '' >> /home/$MY_USERNAME/README
  2970. echo 'Public mailing list' >> /home/$MY_USERNAME/README
  2971. echo '===================' >> /home/$MY_USERNAME/README
  2972. echo "To subscribe to the $PUBLIC_MAILING_LIST mailing list send a" >> /home/$MY_USERNAME/README
  2973. echo "cleartext email to $PUBLIC_MAILING_LIST+subscribe@$DOMAIN_NAME" >> /home/$MY_USERNAME/README
  2974. fi
  2975. addmailinglist $MY_USERNAME "$PUBLIC_MAILING_LIST" "$PUBLIC_MAILING_LIST"
  2976. echo 'create_public_mailing_list' >> $COMPLETION_FILE
  2977. }
  2978. function create_private_mailing_list {
  2979. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  2980. return
  2981. fi
  2982. # This installation doesn't work, results in ruby errors
  2983. # There is currently no schleuder package for Debian jessie
  2984. if grep -Fxq "create_private_mailing_list" $COMPLETION_FILE; then
  2985. return
  2986. fi
  2987. if [ ! $PRIVATE_MAILING_LIST ]; then
  2988. return
  2989. fi
  2990. if [[ $PRIVATE_MAILING_LIST == $MY_USERNAME ]]; then
  2991. echo 'The name of the private mailing list should not be the'
  2992. echo 'same as your username'
  2993. exit 10
  2994. fi
  2995. if [ ! $MY_GPG_PUBLIC_KEY ]; then
  2996. echo 'To create a private mailing list you need to specify a file'
  2997. echo 'containing your exported GPG key within MY_GPG_PUBLIC_KEY at'
  2998. echo 'the top of the script'
  2999. exit 11
  3000. fi
  3001. apt-get -y --force-yes install ruby ruby-dev ruby-gpgme libgpgme11-dev libmagic-dev
  3002. gem install schleuder
  3003. schleuder-fix-gem-dependencies
  3004. schleuder-init-setup --gem
  3005. # NOTE: this is version number sensitive and so might need changing
  3006. ln -s /var/lib/gems/2.1.0/gems/schleuder-2.2.4 /var/lib/schleuder
  3007. sed -i 's/#smtp_port: 25/smtp_port: 465/g' /etc/schleuder/schleuder.conf
  3008. sed -i 's/#superadminaddr: root@localhost/superadminaddr: root@localhost' /etc/schleuder/schleuder.conf
  3009. schleuder-newlist $PRIVATE_MAILING_LIST@$DOMAIN_NAME -realname "$PRIVATE_MAILING_LIST" -adminaddress $MY_EMAIL_ADDRESS -initmember $MY_EMAIL_ADDRESS -initmemberkey $MY_GPG_PUBLIC_KEY -nointeractive
  3010. addemailtofolder $MY_USERNAME $PRIVATE_MAILING_LIST@$DOMAIN_NAME $PRIVATE_MAILING_LIST
  3011. echo 'schleuder:' > /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3012. echo ' debug_print = "R: schleuder for $local_part@$domain"' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3013. echo ' driver = accept' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3014. echo ' local_part_suffix_optional' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3015. echo ' local_part_suffix = +* : -bounce : -sendkey' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3016. echo ' domains = +local_domains' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3017. echo ' user = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3018. echo ' group = schleuder' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3019. echo ' require_files = schleuder:+/var/lib/schleuder/$domain/${local_part}' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3020. echo ' transport = schleuder_transport' >> /etc/exim4/conf.d/router/550_exim4-config_schleuder
  3021. echo 'schleuder_transport:' > /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  3022. echo ' debug_print = "T: schleuder_transport for $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  3023. echo ' driver = pipe' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  3024. echo ' home_directory = "/var/lib/schleuder/$domain/$local_part"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  3025. echo ' command = "/usr/bin/schleuder $local_part@$domain"' >> /etc/exim4/conf.d/transport/30_exim4-config_schleuder
  3026. chown -R schleuder:schleuder /var/lib/schleuder
  3027. update-exim4.conf.template -r
  3028. update-exim4.conf
  3029. service exim4 restart
  3030. useradd -d /var/schleuderlists -s /bin/false schleuder
  3031. adduser Debian-exim schleuder
  3032. usermod -a -G mail schleuder
  3033. #exim -d -bt $PRIVATE_MAILING_LIST@$DOMAIN_NAME
  3034. echo 'create_private_mailing_list' >> $COMPLETION_FILE
  3035. }
  3036. function import_email {
  3037. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3038. return
  3039. fi
  3040. EMAIL_COMPLETE_MSG=' *** Freedombone mailbox installation is complete ***'
  3041. if grep -Fxq "import_email" $COMPLETION_FILE; then
  3042. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  3043. create_backup_script
  3044. create_restore_script
  3045. backup_to_friends_servers
  3046. intrusion_detection
  3047. echo ''
  3048. echo "$EMAIL_COMPLETE_MSG"
  3049. if [ -d $USB_MOUNT ]; then
  3050. umount $USB_MOUNT
  3051. rm -rf $USB_MOUNT
  3052. echo ' You can now remove the USB drive'
  3053. fi
  3054. exit 0
  3055. fi
  3056. return
  3057. fi
  3058. if [ $IMPORT_MAILDIR ]; then
  3059. if [ -d $IMPORT_MAILDIR ]; then
  3060. echo 'Transfering email files'
  3061. cp -r $IMPORT_MAILDIR /home/$MY_USERNAME
  3062. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/Maildir
  3063. else
  3064. echo "Email import directory $IMPORT_MAILDIR not found"
  3065. exit 9
  3066. fi
  3067. fi
  3068. echo 'import_email' >> $COMPLETION_FILE
  3069. if [[ $SYSTEM_TYPE == "$VARIANT_MAILBOX" ]]; then
  3070. create_backup_script
  3071. create_restore_script
  3072. backup_to_friends_servers
  3073. intrusion_detection
  3074. # unmount any attached usb drive
  3075. echo ''
  3076. echo "$EMAIL_COMPLETE_MSG"
  3077. echo ''
  3078. if [ -d $USB_MOUNT ]; then
  3079. umount $USB_MOUNT
  3080. rm -rf $USB_MOUNT
  3081. echo ' You can now remove the USB drive'
  3082. fi
  3083. exit 0
  3084. fi
  3085. }
  3086. function install_web_server {
  3087. if [[ $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3088. return
  3089. fi
  3090. if grep -Fxq "install_web_server" $COMPLETION_FILE; then
  3091. return
  3092. fi
  3093. # remove apache
  3094. apt-get -y remove --purge apache2
  3095. if [ -d /etc/apache2 ]; then
  3096. rm -rf /etc/apache2
  3097. fi
  3098. # install nginx
  3099. apt-get -y --force-yes install nginx php5-fpm git
  3100. # limit the number of php processes
  3101. sed -i 's/; process.max = 128/process.max = 32/g' /etc/php5/fpm/php-fpm.conf
  3102. sed -i 's/;process_control_timeout = 0/process_control_timeout = 300/g' /etc/php5/fpm/php-fpm.conf
  3103. if ! grep -q "pm.max_children" /etc/php5/fpm/php-fpm.conf; then
  3104. echo 'pm.max_children = 10' >> /etc/php5/fpm/php-fpm.conf
  3105. echo 'pm.start_servers = 2' >> /etc/php5/fpm/php-fpm.conf
  3106. echo 'pm.min_spare_servers = 2' >> /etc/php5/fpm/php-fpm.conf
  3107. echo 'pm.max_spare_servers = 5' >> /etc/php5/fpm/php-fpm.conf
  3108. echo 'pm.max_requests = 50' >> /etc/php5/fpm/php-fpm.conf
  3109. fi
  3110. if [ ! -d /etc/nginx ]; then
  3111. echo "ERROR: nginx does not appear to have installed. $CHECK_MESSAGE"
  3112. exit 51
  3113. fi
  3114. # Nginx settings
  3115. echo 'user www-data;' > /etc/nginx/nginx.conf
  3116. #echo "worker_processes; $CPU_CORES" >> /etc/nginx/nginx.conf
  3117. echo 'pid /run/nginx.pid;' >> /etc/nginx/nginx.conf
  3118. echo '' >> /etc/nginx/nginx.conf
  3119. echo 'events {' >> /etc/nginx/nginx.conf
  3120. echo ' worker_connections 50;' >> /etc/nginx/nginx.conf
  3121. echo ' # multi_accept on;' >> /etc/nginx/nginx.conf
  3122. echo '}' >> /etc/nginx/nginx.conf
  3123. echo '' >> /etc/nginx/nginx.conf
  3124. echo 'http {' >> /etc/nginx/nginx.conf
  3125. echo ' # limit the number of connections per single IP' >> /etc/nginx/nginx.conf
  3126. echo ' limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;' >> /etc/nginx/nginx.conf
  3127. echo '' >> /etc/nginx/nginx.conf
  3128. echo ' # limit the number of requests for a given session' >> /etc/nginx/nginx.conf
  3129. echo ' # Note that the Owncloud web interface seems to require a rate of around 140r/s' >> /etc/nginx/nginx.conf
  3130. echo ' limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=140r/s;' >> /etc/nginx/nginx.conf
  3131. echo '' >> /etc/nginx/nginx.conf
  3132. echo ' # if the request body size is more than the buffer size, then the entire (or partial) request body is written into a temporary file' >> /etc/nginx/nginx.conf
  3133. echo ' client_body_buffer_size 128k;' >> /etc/nginx/nginx.conf
  3134. echo '' >> /etc/nginx/nginx.conf
  3135. echo ' # headerbuffer size for the request header from client, its set for testing purpose' >> /etc/nginx/nginx.conf
  3136. echo ' client_header_buffer_size 3m;' >> /etc/nginx/nginx.conf
  3137. echo '' >> /etc/nginx/nginx.conf
  3138. echo ' # maximum number and size of buffers for large headers to read from client request' >> /etc/nginx/nginx.conf
  3139. echo ' large_client_header_buffers 4 256k;' >> /etc/nginx/nginx.conf
  3140. echo '' >> /etc/nginx/nginx.conf
  3141. echo ' # read timeout for the request body from client, its set for testing purpose' >> /etc/nginx/nginx.conf
  3142. echo ' client_body_timeout 3m;' >> /etc/nginx/nginx.conf
  3143. echo '' >> /etc/nginx/nginx.conf
  3144. echo ' # how long to wait for the client to send a request header, its set for testing purpose' >> /etc/nginx/nginx.conf
  3145. echo ' client_header_timeout 3m;' >> /etc/nginx/nginx.conf
  3146. echo '' >> /etc/nginx/nginx.conf
  3147. echo ' ##' >> /etc/nginx/nginx.conf
  3148. echo ' # Basic Settings' >> /etc/nginx/nginx.conf
  3149. echo ' ##' >> /etc/nginx/nginx.conf
  3150. echo '' >> /etc/nginx/nginx.conf
  3151. echo ' sendfile on;' >> /etc/nginx/nginx.conf
  3152. echo ' tcp_nopush on;' >> /etc/nginx/nginx.conf
  3153. echo ' tcp_nodelay on;' >> /etc/nginx/nginx.conf
  3154. echo ' keepalive_timeout 65;' >> /etc/nginx/nginx.conf
  3155. echo ' types_hash_max_size 2048;' >> /etc/nginx/nginx.conf
  3156. echo ' server_tokens off;' >> /etc/nginx/nginx.conf
  3157. echo '' >> /etc/nginx/nginx.conf
  3158. echo ' # server_names_hash_bucket_size 64;' >> /etc/nginx/nginx.conf
  3159. echo ' # server_name_in_redirect off;' >> /etc/nginx/nginx.conf
  3160. echo '' >> /etc/nginx/nginx.conf
  3161. echo ' include /etc/nginx/mime.types;' >> /etc/nginx/nginx.conf
  3162. echo ' default_type application/octet-stream;' >> /etc/nginx/nginx.conf
  3163. echo '' >> /etc/nginx/nginx.conf
  3164. echo ' ##' >> /etc/nginx/nginx.conf
  3165. echo ' # Logging Settings' >> /etc/nginx/nginx.conf
  3166. echo ' ##' >> /etc/nginx/nginx.conf
  3167. echo '' >> /etc/nginx/nginx.conf
  3168. echo ' access_log /var/log/nginx/access.log;' >> /etc/nginx/nginx.conf
  3169. echo ' error_log /var/log/nginx/error.log;' >> /etc/nginx/nginx.conf
  3170. echo '' >> /etc/nginx/nginx.conf
  3171. echo ' ###' >> /etc/nginx/nginx.conf
  3172. echo ' # Gzip Settings' >> /etc/nginx/nginx.conf
  3173. echo ' ##' >> /etc/nginx/nginx.conf
  3174. echo ' gzip on;' >> /etc/nginx/nginx.conf
  3175. echo ' gzip_disable "msie6";' >> /etc/nginx/nginx.conf
  3176. echo '' >> /etc/nginx/nginx.conf
  3177. echo ' # gzip_vary on;' >> /etc/nginx/nginx.conf
  3178. echo ' # gzip_proxied any;' >> /etc/nginx/nginx.conf
  3179. echo ' # gzip_comp_level 6;' >> /etc/nginx/nginx.conf
  3180. echo ' # gzip_buffers 16 8k;' >> /etc/nginx/nginx.conf
  3181. echo ' # gzip_http_version 1.1;' >> /etc/nginx/nginx.conf
  3182. echo ' # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;' >> /etc/nginx/nginx.conf
  3183. echo '' >> /etc/nginx/nginx.conf
  3184. echo ' ##' >> /etc/nginx/nginx.conf
  3185. echo ' # Virtual Host Configs' >> /etc/nginx/nginx.conf
  3186. echo ' ##' >> /etc/nginx/nginx.conf
  3187. echo '' >> /etc/nginx/nginx.conf
  3188. echo ' include /etc/nginx/conf.d/*.conf;' >> /etc/nginx/nginx.conf
  3189. echo ' include /etc/nginx/sites-enabled/*;' >> /etc/nginx/nginx.conf
  3190. echo '}' >> /etc/nginx/nginx.conf
  3191. # install a script to easily enable and disable nginx virtual hosts
  3192. if [ ! -d $INSTALL_DIR ]; then
  3193. mkdir $INSTALL_DIR
  3194. fi
  3195. cd $INSTALL_DIR
  3196. git clone https://github.com/perusio/nginx_ensite
  3197. cd $INSTALL_DIR/nginx_ensite
  3198. cp nginx_* /usr/sbin
  3199. nginx_dissite default
  3200. echo 'install_web_server' >> $COMPLETION_FILE
  3201. }
  3202. function configure_php {
  3203. sed -i "s/memory_limit = 128M/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/fpm/php.ini
  3204. sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php5/fpm/php.ini
  3205. sed -i "s/memory_limit = -1/memory_limit = ${MAX_PHP_MEMORY}M/g" /etc/php5/cli/php.ini
  3206. sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 50M/g" /etc/php5/fpm/php.ini
  3207. sed -i "s/post_max_size = 8M/post_max_size = 50M/g" /etc/php5/fpm/php.ini
  3208. }
  3209. function install_mariadb {
  3210. if grep -Fxq "install_mariadb" $COMPLETION_FILE; then
  3211. return
  3212. fi
  3213. apt-get -y --force-yes install python-software-properties debconf-utils
  3214. apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
  3215. add-apt-repository 'deb http://mariadb.biz.net.id//repo/10.1/debian sid main'
  3216. apt-get -y --force-yes install software-properties-common
  3217. apt-get -y update
  3218. get_mariadb_password
  3219. if [ ! $MARIADB_PASSWORD ]; then
  3220. MARIADB_PASSWORD=$(openssl rand -base64 32)
  3221. echo '' >> /home/$MY_USERNAME/README
  3222. echo '' >> /home/$MY_USERNAME/README
  3223. echo 'MariaDB / MySql' >> /home/$MY_USERNAME/README
  3224. echo '===============' >> /home/$MY_USERNAME/README
  3225. echo "Your MariaDB password is: $MARIADB_PASSWORD" >> /home/$MY_USERNAME/README
  3226. echo '' >> /home/$MY_USERNAME/README
  3227. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  3228. fi
  3229. debconf-set-selections <<< "mariadb-server mariadb-server/root_password password $MARIADB_PASSWORD"
  3230. debconf-set-selections <<< "mariadb-server mariadb-server/root_password_again password $MARIADB_PASSWORD"
  3231. apt-get -y --force-yes install mariadb-server
  3232. if [ ! -d /etc/mysql ]; then
  3233. echo "ERROR: mariadb-server does not appear to have installed. $CHECK_MESSAGE"
  3234. exit 54
  3235. fi
  3236. mysqladmin -u root password "$MARIADB_PASSWORD"
  3237. echo 'install_mariadb' >> $COMPLETION_FILE
  3238. }
  3239. function backup_databases_script_header {
  3240. if [ ! -f /usr/bin/backupdatabases ]; then
  3241. # daily
  3242. echo '#!/bin/sh' > /usr/bin/backupdatabases
  3243. echo '' >> /usr/bin/backupdatabases
  3244. echo "EMAIL='$MY_EMAIL_ADDRESS'" >> /usr/bin/backupdatabases
  3245. echo '' >> /usr/bin/backupdatabases
  3246. echo "MYSQL_PASSWORD='$MARIADB_PASSWORD'" >> /usr/bin/backupdatabases
  3247. echo 'umask 0077' >> /usr/bin/backupdatabases
  3248. echo '' >> /usr/bin/backupdatabases
  3249. echo '# exit if we are backing up to friends servers' >> /usr/bin/backupdatabases
  3250. echo "if [ -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/backupdatabases
  3251. echo ' exit 1' >> /usr/bin/backupdatabases
  3252. echo 'fi' >> /usr/bin/backupdatabases
  3253. chmod 600 /usr/bin/backupdatabases
  3254. chmod +x /usr/bin/backupdatabases
  3255. echo '#!/bin/sh' > /etc/cron.daily/backupdatabasesdaily
  3256. echo '/usr/bin/backupdatabases' >> /etc/cron.daily/backupdatabasesdaily
  3257. chmod 600 /etc/cron.daily/backupdatabasesdaily
  3258. chmod +x /etc/cron.daily/backupdatabasesdaily
  3259. # weekly
  3260. echo '#!/bin/sh' > /etc/cron.weekly/backupdatabasesweekly
  3261. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  3262. echo 'umask 0077' >> /etc/cron.weekly/backupdatabasesweekly
  3263. chmod 600 /etc/cron.weekly/backupdatabasesweekly
  3264. chmod +x /etc/cron.weekly/backupdatabasesweekly
  3265. # monthly
  3266. echo '#!/bin/sh' > /etc/cron.monthly/backupdatabasesmonthly
  3267. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  3268. echo 'umask 0077' >> /etc/cron.monthly/backupdatabasesmonthly
  3269. chmod 600 /etc/cron.monthly/backupdatabasesmonthly
  3270. chmod +x /etc/cron.monthly/backupdatabasesmonthly
  3271. fi
  3272. }
  3273. function repair_databases_script {
  3274. if grep -Fxq "repair_databases_script" $COMPLETION_FILE; then
  3275. return
  3276. fi
  3277. echo '#!/bin/bash' > /usr/bin/repairdatabase
  3278. echo '' >> /usr/bin/repairdatabase
  3279. echo 'DATABASE=$1' >> /usr/bin/repairdatabase
  3280. echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/repairdatabase
  3281. echo '' >> /usr/bin/repairdatabase
  3282. echo "MYSQL_ROOT_PASSWORD='$MARIADB_PASSWORD'" >> /usr/bin/repairdatabase
  3283. echo 'TEMPFILE=/root/repairdatabase_$DATABASE' >> /usr/bin/repairdatabase
  3284. echo '' >> /usr/bin/repairdatabase
  3285. echo 'umask 0077' >> /usr/bin/repairdatabase
  3286. echo '' >> /usr/bin/repairdatabase
  3287. echo '# check the database' >> /usr/bin/repairdatabase
  3288. echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
  3289. echo '' >> /usr/bin/repairdatabase
  3290. echo '# Attempt to repair the database if it contains errors' >> /usr/bin/repairdatabase
  3291. echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
  3292. echo ' mysqlcheck -u root --password=$MYSQL_ROOT_PASSWORD --auto-repair $DATABASE' >> /usr/bin/repairdatabase
  3293. echo 'else' >> /usr/bin/repairdatabase
  3294. echo ' # No errors were found, so exit' >> /usr/bin/repairdatabase
  3295. echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  3296. echo ' exit 0' >> /usr/bin/repairdatabase
  3297. echo 'fi' >> /usr/bin/repairdatabase
  3298. echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  3299. echo '' >> /usr/bin/repairdatabase
  3300. echo '# Check the database again' >> /usr/bin/repairdatabase
  3301. echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
  3302. echo '' >> /usr/bin/repairdatabase
  3303. echo '# If it still contains errors then restore from backup' >> /usr/bin/repairdatabase
  3304. echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
  3305. echo ' mysql -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE -o < /var/backups/${DATABASE}_daily.sql' >> /usr/bin/repairdatabase
  3306. echo '' >> /usr/bin/repairdatabase
  3307. echo ' # Send a warning email' >> /usr/bin/repairdatabase
  3308. echo ' echo "$DATABASE database corruption could not be repaired. Restored from backup." | mail -s "Freedombone database maintenance" $EMAIL' >> /usr/bin/repairdatabase
  3309. echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  3310. echo '' >> /usr/bin/repairdatabase
  3311. echo ' exit 1' >> /usr/bin/repairdatabase
  3312. echo 'fi' >> /usr/bin/repairdatabase
  3313. echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
  3314. echo '' >> /usr/bin/repairdatabase
  3315. echo 'exit 0' >> /usr/bin/repairdatabase
  3316. chmod 600 /usr/bin/repairdatabase
  3317. chmod +x /usr/bin/repairdatabase
  3318. echo '#!/bin/bash' > /etc/cron.hourly/repair
  3319. echo '' >> /etc/cron.hourly/repair
  3320. chmod 600 /etc/cron.hourly/repair
  3321. chmod +x /etc/cron.hourly/repair
  3322. echo 'repair_databases_script' >> $COMPLETION_FILE
  3323. }
  3324. function install_owncloud_music_app {
  3325. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3326. return
  3327. fi
  3328. if grep -Fxq "install_owncloud_music_app" $COMPLETION_FILE; then
  3329. return
  3330. fi
  3331. cd /usr/share/owncloud/apps
  3332. git clone https://github.com/owncloud/music music
  3333. if grep -q "Music player in Owncloud" /home/$MY_USERNAME/README; then
  3334. echo '' >> /home/$MY_USERNAME/README
  3335. echo '' >> /home/$MY_USERNAME/README
  3336. echo 'Music player in Owncloud' >> /home/$MY_USERNAME/README
  3337. echo '========================' >> /home/$MY_USERNAME/README
  3338. echo 'To enable the music app within ouwncloud log in to the Owncloud' >> /home/$MY_USERNAME/README
  3339. echo 'administrator account then go to Apps on the left hand dropdown' >> /home/$MY_USERNAME/README
  3340. echo 'menu and enable the music app. You can then log out and log back' >> /home/$MY_USERNAME/README
  3341. echo 'in as your Owncloud user and select music from the left hand' >> /home/$MY_USERNAME/README
  3342. echo 'dropdown menu.' >> /home/$MY_USERNAME/README
  3343. fi
  3344. echo 'install_owncloud_music_app' >> $COMPLETION_FILE
  3345. }
  3346. function install_owncloud {
  3347. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3348. return
  3349. fi
  3350. OWNCLOUD_COMPLETION_MSG1=" *** Freedombone $SYSTEM_TYPE is now installed ***"
  3351. OWNCLOUD_COMPLETION_MSG2="Open $OWNCLOUD_DOMAIN_NAME in a web browser to complete the setup"
  3352. if grep -Fxq "install_owncloud" $COMPLETION_FILE; then
  3353. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  3354. install_owncloud_music_app
  3355. create_backup_script
  3356. create_restore_script
  3357. backup_to_friends_servers
  3358. intrusion_detection
  3359. # unmount any attached usb drive
  3360. if [ -d $USB_MOUNT ]; then
  3361. umount $USB_MOUNT
  3362. rm -rf $USB_MOUNT
  3363. fi
  3364. echo ''
  3365. echo "$OWNCLOUD_COMPLETION_MSG1"
  3366. echo "$OWNCLOUD_COMPLETION_MSG2"
  3367. exit 0
  3368. fi
  3369. return
  3370. fi
  3371. # if this is exclusively a cloud setup
  3372. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  3373. OWNCLOUD_DOMAIN_NAME=$DOMAIN_NAME
  3374. OWNCLOUD_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  3375. fi
  3376. if [ ! $OWNCLOUD_DOMAIN_NAME ]; then
  3377. return
  3378. fi
  3379. if ! [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  3380. if [ $SYSTEM_TYPE ]; then
  3381. return
  3382. fi
  3383. fi
  3384. apt-get -y --force-yes install owncloud
  3385. install_mariadb
  3386. get_mariadb_password
  3387. get_mariadb_owncloud_admin_password
  3388. if [ ! $OWNCLOUD_ADMIN_PASSWORD ]; then
  3389. OWNCLOUD_ADMIN_PASSWORD=$(openssl rand -base64 32)
  3390. fi
  3391. if ! grep -q "Owncloud database user" /home/$MY_USERNAME/README; then
  3392. echo '' >> /home/$MY_USERNAME/README
  3393. echo '' >> /home/$MY_USERNAME/README
  3394. echo 'Owncloud' >> /home/$MY_USERNAME/README
  3395. echo '========' >> /home/$MY_USERNAME/README
  3396. echo 'Owncloud database user: owncloudadmin' >> /home/$MY_USERNAME/README
  3397. echo "Owncloud database password: $OWNCLOUD_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  3398. echo 'Owncloud database name: owncloud' >> /home/$MY_USERNAME/README
  3399. echo '' >> /home/$MY_USERNAME/README
  3400. echo 'After creating an administrator account then create a user account via' >> /home/$MY_USERNAME/README
  3401. echo "the Users dropdown menu entry. The username should be '$MY_USERNAME'." >> /home/$MY_USERNAME/README
  3402. echo '' >> /home/$MY_USERNAME/README
  3403. echo 'On mobile devices you can download the Owncloud client via F-Droid.' >> /home/$MY_USERNAME/README
  3404. echo '' >> /home/$MY_USERNAME/README
  3405. echo 'To synchronise calendar entries with Android "install CalDAV Sync Adapter"' >> /home/$MY_USERNAME/README
  3406. echo 'using F-Droid then go to settings/accounts and add a CalDav account with' >> /home/$MY_USERNAME/README
  3407. echo "the URL https://$OWNCLOUD_DOMAIN_NAME/remote.php/caldav/principals/$MY_USERNAME" >> /home/$MY_USERNAME/README
  3408. echo 'and the username and password shown above.' >> /home/$MY_USERNAME/README
  3409. fi
  3410. echo "create database owncloud;
  3411. CREATE USER 'owncloudadmin'@'localhost' IDENTIFIED BY '$OWNCLOUD_ADMIN_PASSWORD';
  3412. GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloudadmin'@'localhost';
  3413. quit" > $INSTALL_DIR/batch.sql
  3414. chmod 600 $INSTALL_DIR/batch.sql
  3415. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  3416. shred -zu $INSTALL_DIR/batch.sql
  3417. if [ ! -d /var/www/$OWNCLOUD_DOMAIN_NAME ]; then
  3418. mkdir /var/www/$OWNCLOUD_DOMAIN_NAME
  3419. fi
  3420. if [ -d /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs ]; then
  3421. rm -rf /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  3422. fi
  3423. ln -s /usr/share/owncloud /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs
  3424. echo 'server {' > /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3425. echo ' listen 80;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3426. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3427. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3428. echo " error_log /var/log/nginx/$OWNCLOUD_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3429. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3430. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3431. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3432. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3433. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3434. echo 'server {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3435. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3436. echo " root /var/www/$OWNCLOUD_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3437. echo " server_name $OWNCLOUD_DOMAIN_NAME;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3438. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3439. echo " error_log /var/log/nginx/$OWNCLOUD_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3440. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3441. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3442. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3443. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3444. echo ' ssl on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3445. echo " ssl_certificate /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3446. echo " ssl_certificate_key /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3447. echo " ssl_dhparam /etc/ssl/certs/$OWNCLOUD_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3448. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3449. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3450. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3451. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3452. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3453. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3454. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3455. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3456. echo ' # if you want to be able to access the site via HTTP' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3457. echo ' # then replace the above with the following:' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3458. echo ' # add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3459. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3460. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3461. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3462. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3463. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3464. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3465. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3466. echo ' client_max_body_size 10G; # set max upload size' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3467. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3468. echo ' fastcgi_buffers 64 4K;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3469. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3470. echo ' rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3471. echo ' rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3472. echo ' rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3473. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3474. echo ' index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3475. echo ' error_page 403 /core/templates/403.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3476. echo ' error_page 404 /core/templates/404.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3477. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3478. echo ' location = /robots.txt {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3479. echo ' allow all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3480. echo ' log_not_found off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3481. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3482. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3483. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3484. echo ' location ~ ^/(data|config|\.ht|db_structure\.xml|README) {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3485. echo ' deny all;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3486. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3487. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3488. echo ' location / {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3489. echo ' # The following 2 rules are only needed with webfinger' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3490. echo ' rewrite ^/.well-known/host-meta /public.php?service=host-meta last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3491. echo ' rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3492. echo ' rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3493. echo ' rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3494. echo ' rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3495. echo ' try_files $uri $uri/ index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3496. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3497. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3498. echo ' location ~ ^(.+?\.php)(/.*)?$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3499. echo ' try_files $1 =404;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3500. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3501. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3502. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3503. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3504. echo ' fastcgi_param SCRIPT_FILENAME $document_root$1;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3505. echo ' fastcgi_param PATH_INFO $2;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3506. echo ' fastcgi_param HTTPS on;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3507. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3508. echo '' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3509. echo ' # Optional: set long EXPIRES header on static assets' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3510. echo ' location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3511. echo ' expires 30d;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3512. echo " # Optional: Don't log access to assets" >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3513. echo ' access_log off;' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3514. echo ' }' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3515. echo '}' >> /etc/nginx/sites-available/$OWNCLOUD_DOMAIN_NAME
  3516. configure_php
  3517. if [ ! -f /etc/ssl/private/$OWNCLOUD_DOMAIN_NAME.key ]; then
  3518. makecert $OWNCLOUD_DOMAIN_NAME
  3519. fi
  3520. # Ensure that the database gets backed up locally, if remote
  3521. # backups are not being used
  3522. backup_databases_script_header
  3523. echo '' >> /usr/bin/backupdatabases
  3524. echo '# Backup Owncloud database' >> /usr/bin/backupdatabases
  3525. echo 'TEMPFILE=/root/owncloud.sql' >> /usr/bin/backupdatabases
  3526. echo 'DAILYFILE=/var/backups/owncloud_daily.sql' >> /usr/bin/backupdatabases
  3527. echo 'mysqldump --password="$MYSQL_PASSWORD" owncloud > $TEMPFILE' >> /usr/bin/backupdatabases
  3528. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  3529. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  3530. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  3531. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  3532. echo '' >> /usr/bin/backupdatabases
  3533. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  3534. echo ' mysql -u root --password="$MYSQL_PASSWORD" owncloud -o < $DAILYFILE' >> /usr/bin/backupdatabases
  3535. echo '' >> /usr/bin/backupdatabases
  3536. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  3537. echo ' echo "Unable to create a backup of the Owncloud database. Attempted to restore from yesterdays backup" | mail -s "Owncloud backup" $EMAIL' >> /usr/bin/backupdatabases
  3538. echo ' else' >> /usr/bin/backupdatabases
  3539. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  3540. echo ' echo "Unable to create a backup of the Owncloud database." | mail -s "Owncloud backup" $EMAIL' >> /usr/bin/backupdatabases
  3541. echo ' fi' >> /usr/bin/backupdatabases
  3542. echo 'else' >> /usr/bin/backupdatabases
  3543. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  3544. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  3545. echo '' >> /usr/bin/backupdatabases
  3546. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  3547. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  3548. echo 'fi' >> /usr/bin/backupdatabases
  3549. nginx_ensite $OWNCLOUD_DOMAIN_NAME
  3550. service php5-fpm restart
  3551. service nginx restart
  3552. # update the dynamic DNS
  3553. if [ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE ]; then
  3554. if [[ $OWNCLOUD_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  3555. if ! grep -q "$OWNCLOUD_DOMAIN_NAME" /usr/bin/dynamicdns; then
  3556. echo "# $OWNCLOUD_DOMAIN_NAME" >> /usr/bin/dynamicdns
  3557. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$OWNCLOUD_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  3558. fi
  3559. fi
  3560. else
  3561. echo 'WARNING: No freeDNS subdomain code given for Owncloud. It is assumed that you are using some other dynamic DNS provider.'
  3562. fi
  3563. echo 'install_owncloud' >> $COMPLETION_FILE
  3564. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" ]]; then
  3565. install_owncloud_music_app
  3566. create_backup_script
  3567. create_restore_script
  3568. backup_to_friends_servers
  3569. intrusion_detection
  3570. # unmount any attached usb drive
  3571. if [ -d $USB_MOUNT ]; then
  3572. umount $USB_MOUNT
  3573. rm -rf $USB_MOUNT
  3574. fi
  3575. echo ''
  3576. echo "$OWNCLOUD_COMPLETION_MSG1"
  3577. echo "$OWNCLOUD_COMPLETION_MSG2"
  3578. exit 0
  3579. fi
  3580. }
  3581. function install_xmpp {
  3582. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3583. return
  3584. fi
  3585. if grep -Fxq "install_xmpp" $COMPLETION_FILE; then
  3586. return
  3587. fi
  3588. apt-get -y --force-yes install prosody
  3589. if [ ! -d /etc/prosody ]; then
  3590. echo "ERROR: prosody does not appear to have installed. $CHECK_MESSAGE"
  3591. exit 52
  3592. fi
  3593. if [ ! -f "/etc/ssl/private/xmpp.key" ]; then
  3594. makecert xmpp
  3595. fi
  3596. chown prosody:prosody /etc/ssl/private/xmpp.key
  3597. chown prosody:prosody /etc/ssl/certs/xmpp.*
  3598. cp -a /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.avail/xmpp.cfg.lua
  3599. sed -i 's|/etc/prosody/certs/example.com.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  3600. sed -i 's|/etc/prosody/certs/example.com.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/conf.avail/xmpp.cfg.lua
  3601. if ! grep -q "xmpp.dhparam" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  3602. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/conf.avail/xmpp.cfg.lua
  3603. fi
  3604. sed -i "s/example.com/$DOMAIN_NAME/g" /etc/prosody/conf.avail/xmpp.cfg.lua
  3605. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/conf.avail/xmpp.cfg.lua
  3606. if ! grep -q "modules_enabled" /etc/prosody/conf.avail/xmpp.cfg.lua; then
  3607. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3608. echo 'modules_enabled = {' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3609. echo ' "bosh"; -- Enable mod_bosh' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3610. echo ' "tls"; -- Enable mod_tls' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3611. echo ' "saslauth"; -- Enable mod_saslauth' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3612. echo '}' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3613. echo '' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3614. echo 'c2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3615. echo 's2s_require_encryption = true' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3616. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3617. fi
  3618. ln -sf /etc/prosody/conf.avail/xmpp.cfg.lua /etc/prosody/conf.d/xmpp.cfg.lua
  3619. sed -i 's|/etc/prosody/certs/localhost.key|/etc/ssl/private/xmpp.key|g' /etc/prosody/prosody.cfg.lua
  3620. sed -i 's|/etc/prosody/certs/localhost.crt|/etc/ssl/certs/xmpp.crt|g' /etc/prosody/prosody.cfg.lua
  3621. if ! grep -q "xmpp.dhparam" /etc/prosody/prosody.cfg.lua; then
  3622. sed -i '/certificate =/a\ dhparam = "/etc/ssl/certs/xmpp.dhparam";' /etc/prosody/prosody.cfg.lua
  3623. fi
  3624. sed -i 's/c2s_require_encryption = false/c2s_require_encryption = true/g' /etc/prosody/prosody.cfg.lua
  3625. if ! grep -q "s2s_require_encryption" /etc/prosody/prosody.cfg.lua; then
  3626. sed -i '/c2s_require_encryption/a\s2s_require_encryption = true' /etc/prosody/prosody.cfg.lua
  3627. fi
  3628. if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/prosody.cfg.lua; then
  3629. echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
  3630. fi
  3631. sed -i 's/--"bosh";/"bosh";/g' /etc/prosody/prosody.cfg.lua
  3632. sed -i 's/authentication = "internal_plain"/authentication = "internal_hashed"/g' /etc/prosody/prosody.cfg.lua
  3633. sed -i 's/enabled = false -- Remove this line to enable this host//g' /etc/prosody/prosody.cfg.lua
  3634. sed -i 's|key = "/etc/prosody/certs/example.com.key"|key = "/etc/ssl/private/xmpp.key"|g' /etc/prosody/prosody.cfg.lua
  3635. sed -i 's|certificate = "/etc/prosody/certs/example.com.crt"|certificate = "/etc/ssl/certs/xmpp.crt"|g' /etc/prosody/prosody.cfg.lua
  3636. sed -i "s/example.com/$DOMAIN_NAME/g" /etc/prosody/prosody.cfg.lua
  3637. service prosody restart
  3638. touch /home/$MY_USERNAME/README
  3639. if ! grep -q "Your XMPP password is" /home/$MY_USERNAME/README; then
  3640. XMPP_PASSWORD=$(openssl rand -base64 8)
  3641. prosodyctl register $MY_USERNAME $DOMAIN_NAME $XMPP_PASSWORD
  3642. echo '' >> /home/$MY_USERNAME/README
  3643. echo '' >> /home/$MY_USERNAME/README
  3644. echo 'XMPP' >> /home/$MY_USERNAME/README
  3645. echo '====' >> /home/$MY_USERNAME/README
  3646. echo "Your XMPP password is: $XMPP_PASSWORD" >> /home/$MY_USERNAME/README
  3647. echo 'You can change it with: ' >> /home/$MY_USERNAME/README
  3648. echo '' >> /home/$MY_USERNAME/README
  3649. echo " prosodyctl passwd $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/README
  3650. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  3651. fi
  3652. echo 'install_xmpp' >> $COMPLETION_FILE
  3653. }
  3654. function install_watchdog_script {
  3655. if grep -Fxq "install_watchdog_script" $COMPLETION_FILE; then
  3656. return
  3657. fi
  3658. echo '#!/bin/bash' > /usr/bin/$WATCHDOG_SCRIPT_NAME
  3659. echo 'LOGFILE=/var/log/keepon.log' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3660. echo 'CURRENT_DATE=$(date)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3661. # application specific stuff is added later
  3662. chmod +x /usr/bin/$WATCHDOG_SCRIPT_NAME
  3663. if ! grep -q "/usr/bin/$WATCHDOG_SCRIPT_NAME" /etc/crontab; then
  3664. echo "*/1 * * * * root /usr/bin/$WATCHDOG_SCRIPT_NAME" >> /etc/crontab
  3665. fi
  3666. echo 'install_watchdog_script' >> $COMPLETION_FILE
  3667. }
  3668. function install_irc_server {
  3669. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3670. return
  3671. fi
  3672. if grep -Fxq "install_irc_server" $COMPLETION_FILE; then
  3673. return
  3674. fi
  3675. apt-get -y --force-yes install ngircd
  3676. if [ ! -d /etc/ngircd ]; then
  3677. echo "ERROR: ngircd does not appear to have installed. $CHECK_MESSAGE"
  3678. exit 53
  3679. fi
  3680. if [ ! -f /etc/ssl/private/ngircd.key ]; then
  3681. makecert ngircd
  3682. fi
  3683. echo '**************************************************' > /etc/ngircd/motd
  3684. echo '* F R E E D O M B O N E I R C *' >> /etc/ngircd/motd
  3685. echo '* *' >> /etc/ngircd/motd
  3686. echo '* Freedom in the Cloud *' >> /etc/ngircd/motd
  3687. echo '**************************************************' >> /etc/ngircd/motd
  3688. sed -i 's|MotdFile = /etc/ngircd/ngircd.motd|MotdFile = /etc/ngircd/motd|g' /etc/ngircd/ngircd.conf
  3689. sed -i "s/irc@irc.example.com/$MY_EMAIL_ADDRESS/g" /etc/ngircd/ngircd.conf
  3690. sed -i "s/irc.example.net/$DOMAIN_NAME/g" /etc/ngircd/ngircd.conf
  3691. sed -i "s|Yet another IRC Server running on Debian GNU/Linux|IRC Server of $DOMAIN_NAME|g" /etc/ngircd/ngircd.conf
  3692. sed -i 's/;Password = wealllikedebian/Password =/g' /etc/ngircd/ngircd.conf
  3693. sed -i 's|;CertFile = /etc/ssl/certs/server.crt|CertFile = /etc/ssl/certs/ngircd.crt|g' /etc/ngircd/ngircd.conf
  3694. sed -i 's|;DHFile = /etc/ngircd/dhparams.pem|DHFile = /etc/ssl/certs/ngircd.dhparam|g' /etc/ngircd/ngircd.conf
  3695. sed -i 's|;KeyFile = /etc/ssl/private/server.key|KeyFile = /etc/ssl/private/ngircd.key|g' /etc/ngircd/ngircd.conf
  3696. sed -i 's/;Ports = 6697, 9999/Ports = 6697, 9999/g' /etc/ngircd/ngircd.conf
  3697. sed -i 's/;Name = #ngircd/Name = #freedombone/g' /etc/ngircd/ngircd.conf
  3698. sed -i 's/;Topic = Our ngircd testing channel/Topic = Freedombone chat channel/g' /etc/ngircd/ngircd.conf
  3699. sed -i 's/;MaxUsers = 23/MaxUsers = 23/g' /etc/ngircd/ngircd.conf
  3700. sed -i 's|;KeyFile = /etc/ngircd/#chan.key|KeyFile = /etc/ngircd/#freedombone.key|g' /etc/ngircd/ngircd.conf
  3701. sed -i 's/;CloakHost = cloaked.host/CloakHost = freedombone/g' /etc/ngircd/ngircd.conf
  3702. IRC_SALT=$(openssl rand -base64 32)
  3703. IRC_OPERATOR_PASSWORD=$(openssl rand -base64 8)
  3704. sed -i "s|;CloakHostSalt = abcdefghijklmnopqrstuvwxyz|CloakHostSalt = $IRC_SALT|g" /etc/ngircd/ngircd.conf
  3705. sed -i 's/;ConnectIPv4 = yes/ConnectIPv4 = yes/g' /etc/ngircd/ngircd.conf
  3706. sed -i 's/;MorePrivacy = no/MorePrivacy = yes/g' /etc/ngircd/ngircd.conf
  3707. sed -i 's/;RequireAuthPing = no/RequireAuthPing = no/g' /etc/ngircd/ngircd.conf
  3708. sed -i "s/;Name = TheOper/Name = $MY_USERNAME/g" /etc/ngircd/ngircd.conf
  3709. sed -i "s/;Password = ThePwd/Password = $IRC_OPERATOR_PASSWORD/g" /etc/ngircd/ngircd.conf
  3710. service ngircd start
  3711. # keep the daemon running
  3712. echo '' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3713. echo '# keep irc daemon running' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3714. echo 'IRC_RUNNING=$(pgrep ngircd > /dev/null && echo Running)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3715. echo 'if [ ! $IRC_RUNNING ]; then' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3716. echo ' service ngircd start' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3717. echo ' echo -n $CURRENT_DATE >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3718. echo ' echo " IRC daemon restarted" >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3719. echo 'fi' >> /usr/bin/$WATCHDOG_SCRIPT_NAME
  3720. if ! grep -q "IRC Server" /home/$MY_USERNAME/README; then
  3721. echo '' >> /home/$MY_USERNAME/README
  3722. echo '' >> /home/$MY_USERNAME/README
  3723. echo 'IRC Server' >> /home/$MY_USERNAME/README
  3724. echo '==========' >> /home/$MY_USERNAME/README
  3725. echo 'To connect to your IRC server in irssi:' >> /home/$MY_USERNAME/README
  3726. echo '' >> /home/$MY_USERNAME/README
  3727. echo " /server add -auto -ssl $DOMAIN_NAME 6697" >> /home/$MY_USERNAME/README
  3728. echo " /connect $DOMAIN_NAME" >> /home/$MY_USERNAME/README
  3729. echo ' /join #freedombone' >> /home/$MY_USERNAME/README
  3730. fi
  3731. echo 'install_irc_server' >> $COMPLETION_FILE
  3732. }
  3733. function get_wiki_admin_password {
  3734. if [ -f /home/$MY_USERNAME/README ]; then
  3735. if grep -q "Wiki password" /home/$MY_USERNAME/README; then
  3736. WIKI_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Wiki password:" | awk -F ':' '{print $2}' | sed 's/^ *//')
  3737. fi
  3738. fi
  3739. }
  3740. function install_wiki {
  3741. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  3742. return
  3743. fi
  3744. if grep -Fxq "install_wiki" $COMPLETION_FILE; then
  3745. return
  3746. fi
  3747. # if everything is being installed or if this is exclusively a writer setup
  3748. if [[ ! $SYSTEM_TYPE || $SYSTEM_TYPE == "$VARIANT_WRITER" ]]; then
  3749. WIKI_DOMAIN_NAME=$DOMAIN_NAME
  3750. WIKI_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  3751. fi
  3752. if [ ! $WIKI_DOMAIN_NAME ]; then
  3753. return
  3754. fi
  3755. apt-get -y --force-yes install dokuwiki
  3756. if [ ! -d /var/www/$WIKI_DOMAIN_NAME ]; then
  3757. mkdir /var/www/$WIKI_DOMAIN_NAME
  3758. fi
  3759. if [ -d /var/www/$WIKI_DOMAIN_NAME/htdocs ]; then
  3760. rm -rf /var/www/$WIKI_DOMAIN_NAME/htdocs
  3761. fi
  3762. if [ ! -f /etc/ssl/private/$WIKI_DOMAIN_NAME.key ]; then
  3763. makecert $WIKI_DOMAIN_NAME
  3764. fi
  3765. ln -s /usr/share/dokuwiki /var/www/$WIKI_DOMAIN_NAME/htdocs
  3766. mkdir /var/lib/dokuwiki/custom
  3767. cp /etc/dokuwiki/local.php.dist /var/lib/dokuwiki/custom/local.php
  3768. ln -s /var/lib/dokuwiki/custom/local.php /etc/dokuwiki/local.php
  3769. chown www-data /var/lib/dokuwiki/custom
  3770. chown www-data /var/lib/dokuwiki/custom/local.php
  3771. chmod 600 /var/lib/dokuwiki/custom/local.php
  3772. sed -i 's|//$conf|$conf|g' /var/lib/dokuwiki/custom/local.php
  3773. sed -i "s|joe|$MY_USERNAME|g" /var/lib/dokuwiki/custom/local.php
  3774. sed -i "s|Debian DokuWiki|$WIKI_TITLE|g" /etc/dokuwiki/local.php
  3775. # set the admin user
  3776. sed -i "s/@admin/$MY_USERNAME/g" /etc/dokuwiki/local.php
  3777. # disallow registration of new users
  3778. if ! grep -q "disableactions" /etc/dokuwiki/local.php; then
  3779. echo "$conf['disableactions'] = 'register'" >> /etc/dokuwiki/local.php
  3780. fi
  3781. if ! grep -q "disableactions" /var/lib/dokuwiki/custom/local.php; then
  3782. echo "$conf['disableactions'] = 'register';" >> /var/lib/dokuwiki/custom/local.php
  3783. fi
  3784. if ! grep -q "authtype" /var/lib/dokuwiki/custom/local.php; then
  3785. echo "$conf['authtype'] = 'authplain';" >> /var/lib/dokuwiki/custom/local.php
  3786. fi
  3787. if ! grep -q "authtype" /etc/dokuwiki/local.php; then
  3788. echo "$conf['authtype'] = 'authplain';" >> /etc/dokuwiki/local.php
  3789. fi
  3790. get_wiki_admin_password
  3791. if [ ! $WIKI_ADMIN_PASSWORD ]; then
  3792. WIKI_ADMIN_PASSWORD=$(openssl rand -base64 16)
  3793. fi
  3794. HASHED_WIKI_PASSWORD=$(echo -n "$WIKI_ADMIN_PASSWORD" | md5sum | awk -F ' ' '{print $1}')
  3795. echo -n "$MY_USERNAME:$HASHED_WIKI_PASSWORD:$MY_NAME:$MY_EMAIL:admin,user,upload" > /var/lib/dokuwiki/acl/users.auth.php
  3796. chmod 640 /var/lib/dokuwiki/acl/users.auth.php
  3797. if ! grep -q "video/ogg" /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then
  3798. echo 'ogv video/ogg' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  3799. echo 'mp4 video/mp4' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  3800. echo 'webm video/webm' >> /var/www/$WIKI_DOMAIN_NAME/htdocs/conf/mime.conf
  3801. fi
  3802. echo 'server {' > /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3803. echo ' listen 80;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3804. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3805. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3806. echo ' access_log off;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3807. echo " error_log /var/log/nginx/$WIKI_DOMAIN_NAME_error.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3808. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3809. echo ' charset utf-8;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3810. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3811. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3812. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3813. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3814. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3815. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3816. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3817. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3818. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3819. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3820. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3821. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3822. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3823. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3824. echo ' allow all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3825. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3826. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3827. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3828. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3829. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3830. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3831. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3832. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3833. echo ' expires 30d;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3834. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3835. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3836. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3837. echo ' # block these file types' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3838. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3839. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3840. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3841. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3842. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3843. echo ' # or a unix socket' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3844. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3845. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3846. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3847. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3848. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3849. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3850. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3851. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3852. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3853. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3854. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3855. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3856. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3857. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3858. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3859. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3860. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3861. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3862. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3863. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3864. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3865. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3866. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3867. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3868. echo ' #deny access to store' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3869. echo ' location ~ /store {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3870. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3871. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3872. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3873. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3874. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3875. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3876. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3877. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3878. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3879. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3880. echo 'server {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3881. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3882. echo " root /var/www/$WIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3883. echo " server_name $WIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3884. echo ' access_log off;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3885. echo " error_log /var/log/nginx/$WIKI_DOMAIN_NAME_error_ssl.log;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3886. echo ' index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3887. echo ' charset utf-8;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3888. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3889. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3890. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3891. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3892. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3893. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3894. echo ' ssl on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3895. echo " ssl_certificate /etc/ssl/certs/$WIKI_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3896. echo " ssl_certificate_key /etc/ssl/private/$WIKI_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3897. echo " ssl_dhparam /etc/ssl/certs/$WIKI_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3898. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3899. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3900. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3901. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3902. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3903. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3904. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3905. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3906. echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3907. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3908. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3909. echo ' location / {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3910. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3911. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3912. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3913. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3914. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3915. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3916. echo ' allow all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3917. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3918. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3919. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3920. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3921. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3922. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3923. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3924. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3925. echo ' expires 30d;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3926. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3927. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3928. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3929. echo ' # block these file types' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3930. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3931. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3932. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3933. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3934. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3935. echo ' # or a unix socket' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3936. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3937. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3938. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3939. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3940. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3941. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3942. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3943. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3944. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3945. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3946. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3947. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3948. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3949. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3950. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3951. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3952. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3953. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3954. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3955. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3956. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3957. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3958. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3959. echo '' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3960. echo ' #deny access to store' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3961. echo ' location ~ /store {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3962. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3963. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3964. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3965. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3966. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3967. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3968. echo ' deny all;' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3969. echo ' }' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3970. echo '}' >> /etc/nginx/sites-available/$WIKI_DOMAIN_NAME
  3971. configure_php
  3972. nginx_ensite $WIKI_DOMAIN_NAME
  3973. service php5-fpm restart
  3974. service nginx restart
  3975. # update the dynamic DNS
  3976. if [ $WIKI_FREEDNS_SUBDOMAIN_CODE ]; then
  3977. if [[ $WIKI_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  3978. if ! grep -q "$WIKI_DOMAIN_NAME" /usr/bin/dynamicdns; then
  3979. echo "# $WIKI_DOMAIN_NAME" >> /usr/bin/dynamicdns
  3980. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$WIKI_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  3981. fi
  3982. fi
  3983. else
  3984. echo 'WARNING: No freeDNS subdomain code given for wiki installation. It is assumed that you are using some other dynamic DNS provider.'
  3985. fi
  3986. # add some post-install instructions
  3987. if ! grep -q "Wiki password" /home/$MY_USERNAME/README; then
  3988. echo '' >> /home/$MY_USERNAME/README
  3989. echo '' >> /home/$MY_USERNAME/README
  3990. echo 'Wiki' >> /home/$MY_USERNAME/README
  3991. echo '====' >> /home/$MY_USERNAME/README
  3992. echo "Wiki username: $MY_USERNAME" >> /home/$MY_USERNAME/README
  3993. echo "Wiki password: $WIKI_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  3994. echo '' >> /home/$MY_USERNAME/README
  3995. echo 'Once you have set up the wiki then remove the install file:' >> /home/$MY_USERNAME/README
  3996. echo '' >> /home/$MY_USERNAME/README
  3997. echo " rm /var/www/$WIKI_DOMAIN_NAME/htdocs/install.php" >> /home/$MY_USERNAME/README
  3998. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  3999. fi
  4000. echo 'install_wiki' >> $COMPLETION_FILE
  4001. }
  4002. function get_blog_admin_password {
  4003. if [ -f /home/$MY_USERNAME/README ]; then
  4004. if grep -q "Your blog password is" /home/$MY_USERNAME/README; then
  4005. FULLBLOG_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "Your blog password is" | awk -F ':' '{print $2}' | sed 's/^ *//')
  4006. fi
  4007. fi
  4008. }
  4009. function install_blog {
  4010. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  4011. return
  4012. fi
  4013. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  4014. return
  4015. fi
  4016. if [ ! $FULLBLOG_DOMAIN_NAME ]; then
  4017. return
  4018. fi
  4019. if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME ]; then
  4020. mkdir /var/www/$FULLBLOG_DOMAIN_NAME
  4021. fi
  4022. cd /var/www/$FULLBLOG_DOMAIN_NAME
  4023. git clone https://github.com/danpros/htmly htdocs
  4024. chown -R www-data:www-data /var/www/$FULLBLOG_DOMAIN_NAME/htdocs
  4025. if [ ! -f /etc/ssl/private/$FULLBLOG_DOMAIN_NAME.key ]; then
  4026. makecert $FULLBLOG_DOMAIN_NAME
  4027. fi
  4028. echo 'server {' > /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4029. echo ' listen 80;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4030. echo " root /var/www/$FULLBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4031. echo " server_name $FULLBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4032. echo ' access_log off;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4033. echo " error_log /var/log/nginx/$FULLBLOG_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4034. echo ' index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4035. echo ' charset utf-8;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4036. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4037. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4038. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4039. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4040. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4041. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4042. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4043. echo ' location / {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4044. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4045. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4046. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4047. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4048. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4049. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4050. echo ' allow all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4051. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4052. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4053. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4054. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4055. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4056. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4057. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4058. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4059. echo ' expires 30d;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4060. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4061. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4062. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4063. echo ' # block these file types' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4064. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4065. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4066. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4067. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4068. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4069. echo ' # or a unix socket' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4070. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4071. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4072. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4073. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4074. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4075. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4076. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4077. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4078. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4079. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4080. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4081. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4082. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4083. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4084. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4085. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4086. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4087. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4088. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4089. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4090. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4091. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4092. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4093. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4094. echo ' #deny access to store' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4095. echo ' location ~ /store {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4096. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4097. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4098. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4099. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4100. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4101. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4102. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4103. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4104. echo '}' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4105. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4106. echo 'server {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4107. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4108. echo " root /var/www/$FULLBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4109. echo " server_name $FULLBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4110. echo ' access_log off;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4111. echo " error_log /var/log/nginx/$FULLBLOG_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4112. echo ' index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4113. echo ' charset utf-8;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4114. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4115. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4116. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4117. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4118. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4119. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4120. echo ' ssl on;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4121. echo " ssl_certificate /etc/ssl/certs/$FULLBLOG_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4122. echo " ssl_certificate_key /etc/ssl/private/$FULLBLOG_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4123. echo " ssl_dhparam /etc/ssl/certs/$FULLBLOG_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4124. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4125. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4126. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4127. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4128. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4129. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4130. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4131. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4132. echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4133. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4134. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4135. echo ' location / {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4136. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4137. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4138. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4139. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4140. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4141. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4142. echo ' allow all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4143. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4144. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4145. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4146. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4147. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4148. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4149. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4150. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4151. echo ' expires 30d;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4152. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4153. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4154. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4155. echo ' # block these file types' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4156. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4157. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4158. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4159. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4160. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4161. echo ' # or a unix socket' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4162. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4163. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4164. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4165. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4166. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4167. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4168. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4169. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4170. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4171. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4172. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4173. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4174. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4175. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4176. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4177. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4178. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4179. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4180. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4181. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4182. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4183. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4184. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4185. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4186. echo ' #deny access to store' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4187. echo ' location ~ /store {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4188. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4189. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4190. echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4191. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4192. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4193. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4194. echo ' deny all;' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4195. echo ' }' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4196. echo '}' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4197. configure_php
  4198. # blog settings
  4199. cp /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini.example /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4200. sed -i "s|site.url.*|site.url = 'https://$FULLBLOG_DOMAIN_NAME'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4201. sed -i "s|blog.title.*|blog.title = '$MY_BLOG_TITLE'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4202. sed -i "s|blog.tagline.*|blog.tagline = '$MY_BLOG_SUBTITLE'|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4203. sed -i 's|timezone.*|timezone = "Europe/London"|g' /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4204. sed -i "s|Your name|$MY_NAME|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini
  4205. # create a user password
  4206. get_blog_admin_password
  4207. if [ ! $FULLBLOG_ADMIN_PASSWORD ]; then
  4208. FULLBLOG_ADMIN_PASSWORD=$(openssl rand -base64 16)
  4209. echo '' >> /home/$MY_USERNAME/README
  4210. echo '' >> /home/$MY_USERNAME/README
  4211. echo 'HTMLy Blog' >> /home/$MY_USERNAME/README
  4212. echo '==========' >> /home/$MY_USERNAME/README
  4213. echo "Your blog username: $MY_USERNAME" >> /home/$MY_USERNAME/README
  4214. echo "Your blog password is: $FULLBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  4215. echo "Log into your blog at https://$FULLBLOG_DOMAIN_NAME/login" >> /home/$MY_USERNAME/README
  4216. echo 'Edit your blog title and time zone at:' >> /home/$MY_USERNAME/README
  4217. echo " /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/config.ini" >> /home/$MY_USERNAME/README
  4218. echo '' >> /home/$MY_USERNAME/README
  4219. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4220. fi
  4221. # create a user
  4222. cp /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/username.ini.example /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  4223. HASHED_BLOG_PASSWORD="$(echo -n $FULLBLOG_ADMIN_PASSWORD | sha256sum | awk -F ' ' '{print $1}')"
  4224. sed -i "s|yourpassword|$HASHED_BLOG_PASSWORD|g" /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  4225. sed -i 's/encryption = clear/encryption = "sha256"/g' /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  4226. nginx_ensite $FULLBLOG_DOMAIN_NAME
  4227. service php5-fpm restart
  4228. service nginx restart
  4229. # update the dynamic DNS
  4230. if [ $FULLBLOG_FREEDNS_SUBDOMAIN_CODE ]; then
  4231. if [[ $FULLBLOG_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  4232. if ! grep -q "$FULLBLOG_DOMAIN_NAME" /usr/bin/dynamicdns; then
  4233. echo "# $FULLBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
  4234. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$FULLBLOG_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4235. fi
  4236. fi
  4237. else
  4238. echo 'WARNING: No freeDNS subdomain code given for blog installation. It is assumed that you are using some other dynamic DNS provider.'
  4239. fi
  4240. echo 'install_blog' >> $COMPLETION_FILE
  4241. }
  4242. function install_gnu_social {
  4243. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  4244. return
  4245. fi
  4246. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  4247. return
  4248. fi
  4249. if [ ! $MICROBLOG_DOMAIN_NAME ]; then
  4250. return
  4251. fi
  4252. install_mariadb
  4253. get_mariadb_password
  4254. repair_databases_script
  4255. apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git curl php-xml-parser
  4256. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME ]; then
  4257. mkdir /var/www/$MICROBLOG_DOMAIN_NAME
  4258. fi
  4259. if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME/htdocs ]; then
  4260. mkdir /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  4261. fi
  4262. cd $INSTALL_DIR
  4263. git clone $MICROBLOG_REPO gnusocial
  4264. rm -rf /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  4265. mv gnusocial /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  4266. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  4267. chown www-data:www-data /var/www/$MICROBLOG_DOMAIN_NAME/htdocs
  4268. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/avatar
  4269. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/background
  4270. chmod a+w /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/file
  4271. chmod +x /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php
  4272. get_mariadb_gnusocial_admin_password
  4273. if [ ! $MICROBLOG_ADMIN_PASSWORD ]; then
  4274. MICROBLOG_ADMIN_PASSWORD=$(openssl rand -base64 32)
  4275. echo '' >> /home/$MY_USERNAME/README
  4276. echo '' >> /home/$MY_USERNAME/README
  4277. echo 'GNU Social' >> /home/$MY_USERNAME/README
  4278. echo '==========' >> /home/$MY_USERNAME/README
  4279. echo "Your MariaDB gnusocial admin password is: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  4280. echo '' >> /home/$MY_USERNAME/README
  4281. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4282. fi
  4283. echo "create database gnusocial;
  4284. CREATE USER 'gnusocialadmin'@'localhost' IDENTIFIED BY '$MICROBLOG_ADMIN_PASSWORD';
  4285. GRANT ALL PRIVILEGES ON gnusocial.* TO 'gnusocialadmin'@'localhost';
  4286. quit" > $INSTALL_DIR/batch.sql
  4287. chmod 600 $INSTALL_DIR/batch.sql
  4288. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  4289. shred -zu $INSTALL_DIR/batch.sql
  4290. if [ ! -f "/etc/aliases" ]; then
  4291. touch /etc/aliases
  4292. fi
  4293. if grep -q "www-data: root" /etc/aliases; then
  4294. echo 'www-data: root' >> /etc/aliases
  4295. fi
  4296. if grep -q "/var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" /etc/aliases; then
  4297. echo "*: /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/maildaemon.php" >> /etc/aliases
  4298. fi
  4299. newaliases
  4300. # update the dynamic DNS
  4301. if [ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE ]; then
  4302. if [[ $MICROBLOG_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  4303. if ! grep -q "$MICROBLOG_DOMAIN_NAME" /usr/bin/dynamicdns; then
  4304. echo "# $MICROBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
  4305. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MICROBLOG_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4306. fi
  4307. fi
  4308. else
  4309. echo 'WARNING: No freeDNS subdomain code given for microblog. It is assumed that you are using some other dynamic DNS provider.'
  4310. fi
  4311. echo 'server {' > /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4312. echo ' listen 80;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4313. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4314. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4315. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4316. echo " error_log /var/log/nginx/$MICROBLOG_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4317. echo ' index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4318. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4319. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4320. echo '' >> /etc/nginx/sites-available/$FULLBLOG_DOMAIN_NAME
  4321. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4322. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4323. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4324. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4325. echo 'server {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4326. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4327. echo " server_name $MICROBLOG_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4328. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4329. echo ' index index.php index.html index.htm;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4330. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4331. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4332. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4333. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4334. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4335. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4336. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4337. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4338. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4339. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4340. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4341. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4342. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4343. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4344. echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4345. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4346. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4347. echo ' ssl on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4348. echo " ssl_certificate /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4349. echo " ssl_certificate_key /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4350. echo " ssl_dhparam /etc/ssl/certs/$MICROBLOG_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4351. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4352. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4353. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4354. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4355. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4356. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4357. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4358. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4359. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4360. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4361. echo ' location / {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4362. echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4363. echo ' break;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4364. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4365. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4366. echo ' location ~* ^/(.*)\.(ico|css|js|gif|png|jpg|bmp|JPG|jpeg)$ {' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4367. echo " root /var/www/$MICROBLOG_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4368. echo ' rewrite ^/(.*)$ /$1 break;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4369. echo ' access_log off;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4370. echo ' expires max;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4371. echo ' }' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4372. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4373. echo ' client_max_body_size 15m;' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4374. echo '' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4375. echo " error_log /var/log/nginx/$MICROBLOG_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4376. echo '}' >> /etc/nginx/sites-available/$MICROBLOG_DOMAIN_NAME
  4377. configure_php
  4378. if [ ! -f /etc/ssl/private/$MICROBLOG_DOMAIN_NAME.key ]; then
  4379. makecert $MICROBLOG_DOMAIN_NAME
  4380. fi
  4381. # Ensure that the database gets backed up locally, if remote
  4382. # backups are not being used
  4383. backup_databases_script_header
  4384. echo '' >> /usr/bin/backupdatabases
  4385. echo '# Backup the GNU Social database' >> /usr/bin/backupdatabases
  4386. echo 'TEMPFILE=/root/gnusocial.sql' >> /usr/bin/backupdatabases
  4387. echo 'DAILYFILE=/var/backups/gnusocial_daily.sql' >> /usr/bin/backupdatabases
  4388. echo 'mysqldump --password="$MYSQL_PASSWORD" gnusocial > $TEMPFILE' >> /usr/bin/backupdatabases
  4389. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  4390. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  4391. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  4392. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  4393. echo '' >> /usr/bin/backupdatabases
  4394. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  4395. echo ' mysql -u root --password="$MYSQL_PASSWORD" gnusocial -o < $DAILYFILE' >> /usr/bin/backupdatabases
  4396. echo '' >> /usr/bin/backupdatabases
  4397. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4398. echo ' echo "Unable to create a backup of the GNU Social database. Attempted to restore from yesterdays backup" | mail -s "GNU Social backup" $EMAIL' >> /usr/bin/backupdatabases
  4399. echo ' else' >> /usr/bin/backupdatabases
  4400. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4401. echo ' echo "Unable to create a backup of the GNU Social database." | mail -s "GNU Social backup" $EMAIL' >> /usr/bin/backupdatabases
  4402. echo ' fi' >> /usr/bin/backupdatabases
  4403. echo 'else' >> /usr/bin/backupdatabases
  4404. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  4405. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  4406. echo '' >> /usr/bin/backupdatabases
  4407. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  4408. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  4409. echo 'fi' >> /usr/bin/backupdatabases
  4410. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  4411. echo '# GNU Social' >> /etc/cron.weekly/backupdatabasesweekly
  4412. echo 'if [ -f /var/backups/gnusocial_weekly.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  4413. echo ' cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_2weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  4414. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  4415. echo 'if [ -f /var/backups/gnusocial_daily.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  4416. echo ' cp -f /var/backups/gnusocial_daily.sql /var/backups/gnusocial_weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  4417. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  4418. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  4419. echo '# GNU Social' >> /etc/cron.monthly/backupdatabasesmonthly
  4420. echo 'if [ -f /var/backups/gnusocial_monthly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  4421. echo ' cp -f /var/backups/gnusocial_monthly.sql /var/backups/gnusocial_2monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  4422. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  4423. echo 'if [ -f /var/backups/gnusocial_weekly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  4424. echo ' cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  4425. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  4426. echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
  4427. nginx_ensite $MICROBLOG_DOMAIN_NAME
  4428. service php5-fpm restart
  4429. service nginx restart
  4430. # some post-install instructions for the user
  4431. if ! grep -q "To set up your microblog" /home/$MY_USERNAME/README; then
  4432. echo '' >> /home/$MY_USERNAME/README
  4433. echo '' >> /home/$MY_USERNAME/README
  4434. echo 'Microblog' >> /home/$MY_USERNAME/README
  4435. echo '=========' >> /home/$MY_USERNAME/README
  4436. echo "To set up your microblog go to" >> /home/$MY_USERNAME/README
  4437. echo "https://$MICROBLOG_DOMAIN_NAME/install.php" >> /home/$MY_USERNAME/README
  4438. echo 'and enter the following settings:' >> /home/$MY_USERNAME/README
  4439. echo ' - Set a name for the site' >> /home/$MY_USERNAME/README
  4440. echo ' - Server SSL: enable' >> /home/$MY_USERNAME/README
  4441. echo ' - Hostname: localhost' >> /home/$MY_USERNAME/README
  4442. echo ' - Type: MySql/MariaDB' >> /home/$MY_USERNAME/README
  4443. echo ' - Name: gnusocial' >> /home/$MY_USERNAME/README
  4444. echo ' - DB username: root' >> /home/$MY_USERNAME/README
  4445. echo " - DB Password; $MARIADB_PASSWORD" >> /home/$MY_USERNAME/README
  4446. echo " - Administrator nickname: $MY_USERNAME" >> /home/$MY_USERNAME/README
  4447. echo " - Administrator password: $MICROBLOG_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  4448. echo ' - Subscribe to announcements: ticked' >> /home/$MY_USERNAME/README
  4449. echo ' - Site profile: Community' >> /home/$MY_USERNAME/README
  4450. echo '' >> /home/$MY_USERNAME/README
  4451. echo 'When the install is complete you will see a lot of warnings' >> /home/$MY_USERNAME/README
  4452. echo 'but just ignore those and navigate to ' >> /home/$MY_USERNAME/README
  4453. echo "https://$MICROBLOG_DOMAIN_NAME and you can then " >> /home/$MY_USERNAME/README
  4454. echo 'complete the configuration via the *Admin* section on the header' >> /home/$MY_USERNAME/README
  4455. echo 'bar. Some recommended admin settings are:' >> /home/$MY_USERNAME/README
  4456. echo '' >> /home/$MY_USERNAME/README
  4457. echo 'Under the *Site* settings:' >> /home/$MY_USERNAME/README
  4458. echo ' Text limit: 140' >> /home/$MY_USERNAME/README
  4459. echo ' Dupe Limit: 60000' >> /home/$MY_USERNAME/README
  4460. echo '' >> /home/$MY_USERNAME/README
  4461. echo 'Under the *User* settings:' >> /home/$MY_USERNAME/README
  4462. echo ' Bio limit: 1000' >> /home/$MY_USERNAME/README
  4463. echo '' >> /home/$MY_USERNAME/README
  4464. echo 'Under the *Access* settings:' >> /home/$MY_USERNAME/README
  4465. echo ' /Invite only/ ticked' >> /home/$MY_USERNAME/README
  4466. echo '' >> /home/$MY_USERNAME/README
  4467. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4468. fi
  4469. echo 'install_gnu_social' >> $COMPLETION_FILE
  4470. }
  4471. function install_redmatrix {
  4472. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  4473. return
  4474. fi
  4475. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  4476. return
  4477. fi
  4478. # if this is exclusively a social setup
  4479. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" ]]; then
  4480. REDMATRIX_DOMAIN_NAME=$DOMAIN_NAME
  4481. REDMATRIX_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  4482. fi
  4483. if [ ! $REDMATRIX_DOMAIN_NAME ]; then
  4484. return
  4485. fi
  4486. install_mariadb
  4487. get_mariadb_password
  4488. repair_databases_script
  4489. apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git
  4490. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME ]; then
  4491. mkdir /var/www/$REDMATRIX_DOMAIN_NAME
  4492. fi
  4493. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs ]; then
  4494. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  4495. fi
  4496. if [ ! -f /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/index.php ]; then
  4497. cd $INSTALL_DIR
  4498. git clone $REDMATRIX_REPO redmatrix
  4499. rm -rf /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  4500. mv redmatrix /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  4501. chown -R www-data:www-data /var/www/$REDMATRIX_DOMAIN_NAME/htdocs
  4502. git clone $REDMATRIX_ADDONS_REPO /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/addon
  4503. # some extra themes
  4504. git clone https://github.com/DeadSuperHero/redmatrix-themes /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/redmatrix-themes1
  4505. cp -r /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/redmatrix-themes1/* view/theme/
  4506. fi
  4507. get_mariadb_redmatrix_admin_password
  4508. if [ ! $REDMATRIX_ADMIN_PASSWORD ]; then
  4509. REDMATRIX_ADMIN_PASSWORD=$(openssl rand -base64 32)
  4510. echo '' >> /home/$MY_USERNAME/README
  4511. echo '' >> /home/$MY_USERNAME/README
  4512. echo 'Red Matrix' >> /home/$MY_USERNAME/README
  4513. echo '==========' >> /home/$MY_USERNAME/README
  4514. echo "Your MariaDB Red Matrix admin password is: $REDMATRIX_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  4515. echo '' >> /home/$MY_USERNAME/README
  4516. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4517. fi
  4518. echo "create database redmatrix;
  4519. CREATE USER 'redmatrixadmin'@'localhost' IDENTIFIED BY '$REDMATRIX_ADMIN_PASSWORD';
  4520. GRANT ALL PRIVILEGES ON redmatrix.* TO 'redmatrixadmin'@'localhost';
  4521. quit" > $INSTALL_DIR/batch.sql
  4522. chmod 600 $INSTALL_DIR/batch.sql
  4523. mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql
  4524. shred -zu $INSTALL_DIR/batch.sql
  4525. if ! grep -q "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs" /etc/crontab; then
  4526. echo "12,22,32,42,52 * * * * root cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs; /usr/bin/timeout 240 /usr/bin/php include/poller.php" >> /etc/crontab
  4527. fi
  4528. # update the dynamic DNS
  4529. if [ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE ]; then
  4530. if [[ $REDMATRIX_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  4531. if ! grep -q "$REDMATRIX_DOMAIN_NAME" /usr/bin/dynamicdns; then
  4532. echo "# $REDMATRIX_DOMAIN_NAME" >> /usr/bin/dynamicdns
  4533. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$REDMATRIX_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4534. fi
  4535. fi
  4536. else
  4537. echo 'WARNING: No freeDNS code given for Red Matrix. It is assumed that you are using some other dynamic DNS provider.'
  4538. fi
  4539. echo 'server {' > /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4540. echo ' listen 80;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4541. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4542. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4543. echo ' access_log off;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4544. echo " error_log /var/log/nginx/$REDMATRIX_DOMAIN_NAME_error.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4545. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4546. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4547. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4548. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4549. echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4550. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4551. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4552. echo 'server {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4553. echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4554. echo " root /var/www/$REDMATRIX_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4555. echo " server_name $REDMATRIX_DOMAIN_NAME;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4556. echo " error_log /var/log/nginx/$REDMATRIX_DOMAIN_NAME_error_ssl.log $WEBSERVER_LOG_LEVEL;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4557. echo ' index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4558. echo ' charset utf-8;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4559. echo ' client_max_body_size 20m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4560. echo ' client_body_buffer_size 128k;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4561. echo ' access_log off;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4562. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4563. echo ' limit_conn conn_limit_per_ip 10;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4564. echo ' limit_req zone=req_limit_per_ip burst=10 nodelay;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4565. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4566. echo ' ssl on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4567. echo " ssl_certificate /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4568. echo " ssl_certificate_key /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4569. echo " ssl_dhparam /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.dhparam;" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4570. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4571. echo ' ssl_session_timeout 5m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4572. echo ' ssl_prefer_server_ciphers on;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4573. echo ' ssl_session_cache builtin:1000 shared:SSL:10m;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4574. echo " ssl_protocols $SSL_PROTOCOLS; # not possible to do exclusive" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4575. echo " ssl_ciphers '$SSL_CIPHERS';" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4576. echo ' add_header X-Frame-Options DENY;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4577. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4578. echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4579. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4580. echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4581. echo ' location / {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4582. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4583. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4584. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4585. echo " # make sure webfinger and other well known services aren't blocked" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4586. echo ' # by denying dot files and rewrite request to the front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4587. echo ' location ^~ /.well-known/ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4588. echo ' allow all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4589. echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4590. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4591. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4592. echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4593. echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4594. echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4595. echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4596. echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4597. echo ' expires 30d;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4598. echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4599. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4600. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4601. echo ' # block these file types' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4602. echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4603. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4604. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4605. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4606. echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4607. echo ' # or a unix socket' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4608. echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4609. echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4610. echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4611. echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4612. echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4613. echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4614. echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4615. echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4616. echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4617. echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4618. echo ' # With php5-cgi alone:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4619. echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4620. echo ' # With php5-fpm:' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4621. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4622. echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4623. echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4624. echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4625. echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4626. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4627. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4628. echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4629. echo ' location ~ /\. {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4630. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4631. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4632. echo '' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4633. echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4634. echo ' deny all;' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4635. echo ' }' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4636. echo '}' >> /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME
  4637. configure_php
  4638. if [ ! -f /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key ]; then
  4639. makecert $REDMATRIX_DOMAIN_NAME
  4640. fi
  4641. if [ ! -d /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3 ]; then
  4642. mkdir /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  4643. fi
  4644. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store" ]; then
  4645. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store"
  4646. fi
  4647. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]" ]; then
  4648. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]"
  4649. fi
  4650. if [ ! -d "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3" ]; then
  4651. mkdir "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3"
  4652. chmod 777 "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store/[data]/smarty3"
  4653. fi
  4654. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl
  4655. chown -R www-data:www-data "/var/www/$REDMATRIX_DOMAIN_NAME/htdocs/store"
  4656. chmod 777 /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/view/tpl/smarty3
  4657. # Ensure that the database gets backed up locally, if remote
  4658. # backups are not being used
  4659. backup_databases_script_header
  4660. echo '' >> /usr/bin/backupdatabases
  4661. echo '# Backup the Red Matrix database' >> /usr/bin/backupdatabases
  4662. echo 'TEMPFILE=/root/redmatrix.sql' >> /usr/bin/backupdatabases
  4663. echo 'DAILYFILE=/var/backups/redmatrix_daily.sql' >> /usr/bin/backupdatabases
  4664. echo 'mysqldump --password="$MYSQL_PASSWORD" redmatrix > $TEMPFILE' >> /usr/bin/backupdatabases
  4665. echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> /usr/bin/backupdatabases
  4666. echo 'if [ "$FILESIZE" -eq "0" ]; then' >> /usr/bin/backupdatabases
  4667. echo ' if [ -f $DAILYFILE ]; then' >> /usr/bin/backupdatabases
  4668. echo ' cp $DAILYFILE $TEMPFILE' >> /usr/bin/backupdatabases
  4669. echo '' >> /usr/bin/backupdatabases
  4670. echo ' # try to restore yesterdays database' >> /usr/bin/backupdatabases
  4671. echo ' mysql -u root --password="$MYSQL_PASSWORD" redmatrix -o < $DAILYFILE' >> /usr/bin/backupdatabases
  4672. echo '' >> /usr/bin/backupdatabases
  4673. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4674. echo ' echo "Unable to create a backup of the Red Matrix database. Attempted to restore from yesterdays backup" | mail -s "Red Matrix backup" $EMAIL' >> /usr/bin/backupdatabases
  4675. echo ' else' >> /usr/bin/backupdatabases
  4676. echo ' # Send a warning email' >> /usr/bin/backupdatabases
  4677. echo ' echo "Unable to create a backup of the Red Matrix database." | mail -s "Red Matrix backup" $EMAIL' >> /usr/bin/backupdatabases
  4678. echo ' fi' >> /usr/bin/backupdatabases
  4679. echo 'else' >> /usr/bin/backupdatabases
  4680. echo ' chmod 600 $TEMPFILE' >> /usr/bin/backupdatabases
  4681. echo ' mv $TEMPFILE $DAILYFILE' >> /usr/bin/backupdatabases
  4682. echo '' >> /usr/bin/backupdatabases
  4683. echo ' # Make the backup readable only by root' >> /usr/bin/backupdatabases
  4684. echo ' chmod 600 $DAILYFILE' >> /usr/bin/backupdatabases
  4685. echo 'fi' >> /usr/bin/backupdatabases
  4686. echo '' >> /etc/cron.weekly/backupdatabasesweekly
  4687. echo '# Red Matrix' >> /etc/cron.weekly/backupdatabasesweekly
  4688. echo 'if [ -f /var/backups/redmatrix_weekly.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  4689. echo ' cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_2weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  4690. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  4691. echo 'if [ -f /var/backups/redmatrix_daily.sql ]; then' >> /etc/cron.weekly/backupdatabasesweekly
  4692. echo ' cp -f /var/backups/redmatrix_daily.sql /var/backups/redmatrix_weekly.sql' >> /etc/cron.weekly/backupdatabasesweekly
  4693. echo 'fi' >> /etc/cron.weekly/backupdatabasesweekly
  4694. echo '' >> /etc/cron.monthly/backupdatabasesmonthly
  4695. echo '# Red Matrix' >> /etc/cron.monthly/backupdatabasesmonthly
  4696. echo 'if [ -f /var/backups/redmatrix_monthly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  4697. echo ' cp -f /var/backups/redmatrix_monthly.sql /var/backups/redmatrix_2monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  4698. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  4699. echo 'if [ -f /var/backups/redmatrix_weekly.sql ]; then' >> /etc/cron.monthly/backupdatabasesmonthly
  4700. echo ' cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
  4701. echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
  4702. echo '/usr/bin/repairdatabase redmatrix' >> /etc/cron.hourly/repair
  4703. nginx_ensite $REDMATRIX_DOMAIN_NAME
  4704. service php5-fpm restart
  4705. service nginx restart
  4706. service cron restart
  4707. # some post-install instructions for the user
  4708. if ! grep -q "To set up your Red Matrix" /home/$MY_USERNAME/README; then
  4709. echo '' >> /home/$MY_USERNAME/README
  4710. echo "To set up your Red Matrix site go to" >> /home/$MY_USERNAME/README
  4711. echo "https://$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  4712. echo 'You will need to have a non self-signed SSL certificate in order' >> /home/$MY_USERNAME/README
  4713. echo "to use Red Matrix. Put the public certificate in /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt" >> /home/$MY_USERNAME/README
  4714. echo "and the private certificate in /etc/ssl/private/$REDMATRIX_DOMAIN_NAME.key." >> /home/$MY_USERNAME/README
  4715. echo 'If there is an intermediate certificate needed (such as with StartSSL) then' >> /home/$MY_USERNAME/README
  4716. echo 'this will need to be concatenated onto the end of the crt file, like this:' >> /home/$MY_USERNAME/README
  4717. echo '' >> /home/$MY_USERNAME/README
  4718. echo " cat /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.crt /etc/ssl/chains/startssl-sub.class1.server.ca.pem > /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.bundle.crt" >> /home/$MY_USERNAME/README
  4719. echo '' >> /home/$MY_USERNAME/README
  4720. echo "Then change ssl_certificate to /etc/ssl/certs/$REDMATRIX_DOMAIN_NAME.bundle.crt" >> /home/$MY_USERNAME/README
  4721. echo "within /etc/nginx/sites-available/$REDMATRIX_DOMAIN_NAME" >> /home/$MY_USERNAME/README
  4722. echo '' >> /home/$MY_USERNAME/README
  4723. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  4724. fi
  4725. echo 'install_redmatrix' >> $COMPLETION_FILE
  4726. }
  4727. function script_for_attaching_usb_drive {
  4728. if grep -Fxq "script_for_attaching_usb_drive" $COMPLETION_FILE; then
  4729. return
  4730. fi
  4731. echo '#!/bin/bash' > /usr/bin/attach-music
  4732. echo 'remove-music' >> /usr/bin/attach-music
  4733. echo "if [ ! -d $USB_MOUNT ]; then" >> /usr/bin/attach-music
  4734. echo " mkdir $USB_MOUNT" >> /usr/bin/attach-music
  4735. echo 'fi' >> /usr/bin/attach-music
  4736. echo "mount /dev/sda1 $USB_MOUNT" >> /usr/bin/attach-music
  4737. echo "chown root:root $USB_MOUNT" >> /usr/bin/attach-music
  4738. echo "chown -R minidlna:minidlna $USB_MOUNT/*" >> /usr/bin/attach-music
  4739. echo 'service minidlna restart' >> /usr/bin/attach-music
  4740. echo 'minidlnad -R' >> /usr/bin/attach-music
  4741. chmod +x /usr/bin/attach-music
  4742. ln -s /usr/bin/attach-music /usr/bin/attach-usb
  4743. ln -s /usr/bin/attach-music /usr/bin/attach-videos
  4744. ln -s /usr/bin/attach-music /usr/bin/attach-pictures
  4745. ln -s /usr/bin/attach-music /usr/bin/attach-media
  4746. echo '#!/bin/bash' > /usr/bin/remove-music
  4747. echo "if [ -d $USB_MOUNT ]; then" >> /usr/bin/remove-music
  4748. echo " umount $USB_MOUNT" >> /usr/bin/remove-music
  4749. echo " rm -rf $USB_MOUNT" >> /usr/bin/remove-music
  4750. echo 'fi' >> /usr/bin/remove-music
  4751. chmod +x /usr/bin/remove-music
  4752. ln -s /usr/bin/remove-music /usr/bin/detach-music
  4753. ln -s /usr/bin/remove-music /usr/bin/detach-usb
  4754. ln -s /usr/bin/remove-music /usr/bin/remove-usb
  4755. ln -s /usr/bin/remove-music /usr/bin/detach-media
  4756. ln -s /usr/bin/remove-music /usr/bin/remove-media
  4757. ln -s /usr/bin/remove-music /usr/bin/detach-videos
  4758. ln -s /usr/bin/remove-music /usr/bin/remove-videos
  4759. ln -s /usr/bin/remove-music /usr/bin/detach-pictures
  4760. ln -s /usr/bin/remove-music /usr/bin/remove-pictures
  4761. echo 'script_for_attaching_usb_drive' >> $COMPLETION_FILE
  4762. }
  4763. function install_dlna_server {
  4764. if grep -Fxq "install_dlna_server" $COMPLETION_FILE; then
  4765. return
  4766. fi
  4767. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  4768. return
  4769. fi
  4770. apt-get -y --force-yes install minidlna
  4771. if [ ! -f /etc/minidlna.conf ]; then
  4772. echo "ERROR: minidlna does not appear to have installed. $CHECK_MESSAGE"
  4773. exit 55
  4774. fi
  4775. sed -i "s|media_dir=/var/lib/minidlna|media_dir=A,/home/$MY_USERNAME/Music|g" /etc/minidlna.conf
  4776. if ! grep -q "/home/$MY_USERNAME/Pictures" /etc/minidlna.conf; then
  4777. echo "media_dir=P,/home/$MY_USERNAME/Pictures" >> /etc/minidlna.conf
  4778. fi
  4779. if ! grep -q "/home/$MY_USERNAME/Videos" /etc/minidlna.conf; then
  4780. echo "media_dir=V,/home/$MY_USERNAME/Videos" >> /etc/minidlna.conf
  4781. fi
  4782. if ! grep -q "$USB_MOUNT/Music" /etc/minidlna.conf; then
  4783. echo "media_dir=A,$USB_MOUNT/Music" >> /etc/minidlna.conf
  4784. fi
  4785. if ! grep -q "$USB_MOUNT/Pictures" /etc/minidlna.conf; then
  4786. echo "media_dir=P,$USB_MOUNT/Pictures" >> /etc/minidlna.conf
  4787. fi
  4788. if ! grep -q "$USB_MOUNT/Videos" /etc/minidlna.conf; then
  4789. echo "media_dir=V,$USB_MOUNT/Videos" >> /etc/minidlna.conf
  4790. fi
  4791. sed -i 's/#root_container=./root_container=B/g' /etc/minidlna.conf
  4792. sed -i 's/#network_interface=/network_interface=eth0/g' /etc/minidlna.conf
  4793. sed -i 's/#friendly_name=/friendly_name="Freedombone Media"/g' /etc/minidlna.conf
  4794. sed -i 's|#db_dir=/var/cache/minidlna|db_dir=/var/cache/minidlna|g' /etc/minidlna.conf
  4795. sed -i 's/#inotify=yes/inotify=yes/g' /etc/minidlna.conf
  4796. sed -i 's/#notify_interval=895/notify_interval=300/g' /etc/minidlna.conf
  4797. sed -i "s|#presentation_url=/|presentation_url=http://localhost:8200|g" /etc/minidlna.conf
  4798. service minidlna force-reload
  4799. service minidlna reload
  4800. sed -i 's/fs.inotify.max_user_watches*/fs.inotify.max_user_watches=65536/g' /etc/sysctl.conf
  4801. if ! grep -q "max_user_watches" $COMPLETION_FILE; then
  4802. echo 'fs.inotify.max_user_watches=65536' >> /etc/sysctl.conf
  4803. fi
  4804. /sbin/sysctl -p
  4805. echo 'install_dlna_server' >> $COMPLETION_FILE
  4806. }
  4807. function install_mediagoblin {
  4808. # These instructions don't work and need fixing
  4809. return
  4810. if grep -Fxq "install_mediagoblin" $COMPLETION_FILE; then
  4811. return
  4812. fi
  4813. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  4814. return
  4815. fi
  4816. # if this is exclusively a writer setup
  4817. if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" ]]; then
  4818. MEDIAGOBLIN_DOMAIN_NAME=$DOMAIN_NAME
  4819. MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE=$FREEDNS_SUBDOMAIN_CODE
  4820. fi
  4821. if [ ! $MEDIAGOBLIN_DOMAIN_NAME ]; then
  4822. return
  4823. fi
  4824. apt-get -y --force-yes install git-core python python-dev python-lxml python-imaging python-virtualenv
  4825. apt-get -y --force-yes install python-gst-1.0 libjpeg8-dev sqlite3 libapache2-mod-fcgid gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav python-numpy python-scipy libsndfile1-dev
  4826. apt-get -y --force-yes install postgresql postgresql-client python-psycopg2 python-pip autotools-dev automake
  4827. sudo -u postgres createuser -A -D mediagoblin
  4828. sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin
  4829. adduser --system mediagoblin
  4830. MEDIAGOBLIN_DOMAIN_ROOT="/srv/$MEDIAGOBLIN_DOMAIN_NAME"
  4831. MEDIAGOBLIN_PATH="$MEDIAGOBLIN_DOMAIN_ROOT/mediagoblin"
  4832. MEDIAGOBLIN_PATH_BIN="$MEDIAGOBLIN_PATH/mediagoblin/bin"
  4833. if [ ! -d $MEDIAGOBLIN_DOMAIN_ROOT ]; then
  4834. mkdir -p $MEDIAGOBLIN_DOMAIN_ROOT
  4835. fi
  4836. cd $MEDIAGOBLIN_DOMAIN_ROOT
  4837. chown -hR mediagoblin: $MEDIAGOBLIN_DOMAIN_ROOT
  4838. su -c "cd $MEDIAGOBLIN_DOMAIN_ROOT; git clone git://gitorious.org/mediagoblin/mediagoblin.git" - mediagoblin
  4839. su -c "cd $MEDIAGOBLIN_PATH; git submodule init" - mediagoblin
  4840. su -c "cd $MEDIAGOBLIN_PATH; git submodule update" - mediagoblin
  4841. #su -c 'cd $MEDIAGOBLIN_PATH; ./experimental-bootstrap.sh' - mediagoblin
  4842. #su -c 'cd $MEDIAGOBLIN_PATH; ./configure' - mediagoblin
  4843. #su -c 'cd $MEDIAGOBLIN_PATH; make' - mediagoblin
  4844. su -c "cd $MEDIAGOBLIN_PATH; virtualenv --system-site-packages ." - mediagoblin
  4845. su -c "cd $MEDIAGOBLIN_PATH_BIN; python setup.py develop" - mediagoblin
  4846. su -c "cp $MEDIAGOBLIN_PATH/mediagoblin.ini $MEDIAGOBLIN_PATH/mediagoblin_local.ini" - mediagoblin
  4847. su -c "cp $MEDIAGOBLIN_PATH/paste.ini $MEDIAGOBLIN_PATH/paste_local.ini" - mediagoblin
  4848. # update the dynamic DNS
  4849. if [ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE ]; then
  4850. if [[ $MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE != $FREEDNS_SUBDOMAIN_CODE ]]; then
  4851. if ! grep -q "$MEDIAGOBLIN_DOMAIN_NAME" /usr/bin/dynamicdns; then
  4852. echo "# $MEDIAGOBLIN_DOMAIN_NAME" >> /usr/bin/dynamicdns
  4853. echo "wget -O - https://freedns.afraid.org/dynamic/update.php?$MEDIAGOBLIN_FREEDNS_SUBDOMAIN_CODE== >> /dev/null 2>&1" >> /usr/bin/dynamicdns
  4854. fi
  4855. fi
  4856. else
  4857. echo 'WARNING: No freeDNS subdomain code given for mediagoblin. It is assumed that you are using some other dynamic DNS provider.'
  4858. fi
  4859. # see https://wiki.mediagoblin.org/Deployment / uwsgi with configs
  4860. apt-get -y --force-yes install uwsgi uwsgi-plugin-python nginx-full supervisor
  4861. echo 'server {' > /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4862. echo ' include /etc/nginx/mime.types;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4863. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4864. echo ' autoindex off;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4865. echo ' default_type application/octet-stream;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4866. echo ' sendfile on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4867. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4868. echo ' # Gzip' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4869. echo ' gzip on;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4870. echo ' gzip_min_length 1024;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4871. echo ' gzip_buffers 4 32k;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4872. echo ' gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4873. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4874. echo " server_name $MEDIAGOBLIN_DOMAIN_NAME;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4875. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4876. echo ' error_log /var/log/nginx/mg.error.log error;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4877. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4878. echo ' #include global/common.conf;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4879. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4880. echo ' client_max_body_size 100m;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4881. echo ' add_header X-Content-Type-Options nosniff;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4882. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4883. echo " root $MEDIAGOBLIN_PATH/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4884. echo '' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4885. echo ' location /mgoblin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4886. echo " alias $MEDIAGOBLIN_PATH/static/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4887. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4888. echo ' location /mgoblin_media/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4889. echo " alias $MEDIAGOBL_PATH/media/public/;" >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4890. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4891. echo ' location /theme_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4892. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4893. echo ' location /plugin_static/ {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4894. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4895. echo ' location / {' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4896. echo ' uwsgi_pass unix:///tmp/mg.uwsgi.sock;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4897. echo ' uwsgi_param SCRIPT_NAME "/";' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4898. echo ' include uwsgi_params;' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4899. echo ' }' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4900. echo '}' >> /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME
  4901. echo 'uwsgi:' > /etc/uwsgi/apps-available/mg.yaml
  4902. echo ' uid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  4903. echo ' gid: mediagoblin' >> /etc/uwsgi/apps-available/mg.yaml
  4904. echo ' socket: /tmp/mg.uwsgi.sock' >> /etc/uwsgi/apps-available/mg.yaml
  4905. echo ' chown-socket: www-data:www-data' >> /etc/uwsgi/apps-available/mg.yaml
  4906. echo ' plugins: python' >> /etc/uwsgi/apps-available/mg.yaml
  4907. echo " home: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  4908. echo " chdir: $MEDIAGOBLIN_PATH/" >> /etc/uwsgi/apps-available/mg.yaml
  4909. echo " ini-paste: $MEDIAGOBLIN_PATH/paste_local.ini" >> /etc/uwsgi/apps-available/mg.yaml
  4910. echo '[program:celery]' > /etc/supervisor/conf.d/mediagoblin.conf
  4911. echo "command=$MEDIAGOBLIN_PATH_BIN/celery worker -l debug" >> /etc/supervisor/conf.d/mediagoblin.conf
  4912. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  4913. echo '; Set PYTHONPATH to the directory containing celeryconfig.py' >> /etc/supervisor/conf.d/mediagoblin.conf
  4914. echo "environment=PYTHONPATH='$MEDIAGOBLIN_PATH',MEDIAGOBLIN_CONFIG='$MEDIAGOBLIN_PATH/mediagoblin_local.ini',CELERY_CONFIG_MODULE='mediagoblin.init.celery.from_celery'" >> /etc/supervisor/conf.d/mediagoblin.conf
  4915. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  4916. echo "directory=$MEDIAGOBLIN_PATH/" >> /etc/supervisor/conf.d/mediagoblin.conf
  4917. echo 'user=mediagoblin' >> /etc/supervisor/conf.d/mediagoblin.conf
  4918. echo 'numprocs=1' >> /etc/supervisor/conf.d/mediagoblin.conf
  4919. echo '; uncomment below to enable logs saving' >> /etc/supervisor/conf.d/mediagoblin.conf
  4920. echo ";stdout_logfile=/var/log/nginx/celeryd_stdout.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  4921. echo ";stderr_logfile=/var/log/nginx/celeryd_stderr.log" >> /etc/supervisor/conf.d/mediagoblin.conf
  4922. echo 'autostart=true' >> /etc/supervisor/conf.d/mediagoblin.conf
  4923. echo 'autorestart=false' >> /etc/supervisor/conf.d/mediagoblin.conf
  4924. echo 'startsecs=10' >> /etc/supervisor/conf.d/mediagoblin.conf
  4925. echo '' >> /etc/supervisor/conf.d/mediagoblin.conf
  4926. echo '; Need to wait for currently executing tasks to finish at shutdown.' >> /etc/supervisor/conf.d/mediagoblin.conf
  4927. echo '; Increase this if you have very long running tasks.' >> /etc/supervisor/conf.d/mediagoblin.conf
  4928. echo 'stopwaitsecs = 600' >> /etc/supervisor/conf.d/mediagoblin.conf
  4929. ln -s /etc/nginx/sites-available/$MEDIAGOBLIN_DOMAIN_NAME /etc/nginx/sites-enabled/
  4930. ln -s /etc/uwsgi/apps-available/mg.yaml /etc/uwsgi/apps-enabled/
  4931. # change settings
  4932. sed -i "s/notice@mediagoblin.example.org/$MY_EMAIL_ADDRESS/g" $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4933. sed -i 's/email_debug_mode = true/email_debug_mode = false/g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4934. sed -i 's|# sql_engine = postgresql:///mediagoblin|sql_engine = postgresql:///mediagoblin|g' $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4935. # add extra media types
  4936. if grep -q "media_types.audio" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  4937. echo '[[mediagoblin.media_types.audio]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4938. fi
  4939. if grep -q "media_types.video" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  4940. echo '[[mediagoblin.media_types.video]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4941. fi
  4942. if grep -q "media_types.stl" $MEDIAGOBLIN_PATH/mediagoblin_local.ini; then
  4943. echo '[[mediagoblin.media_types.stl]]' >> $MEDIAGOBLIN_PATH/mediagoblin_local.ini
  4944. fi
  4945. su -c "cd $MEDIAGOBLIN_PATH_BIN; pip install scikits.audiolab" - mediagoblin
  4946. su -c "cd $MEDIAGOBLIN_PATH_BIN; gmg dbupdate" - mediagoblin
  4947. # systemd init scripts
  4948. echo '[Unit]' > /etc/systemd/system/gmg.service
  4949. echo 'Description=Mediagoblin' >> /etc/systemd/system/gmg.service
  4950. echo '' >> /etc/systemd/system/gmg.service
  4951. echo '[Service]' >> /etc/systemd/system/gmg.service
  4952. echo 'Type=forking' >> /etc/systemd/system/gmg.service
  4953. echo 'User=mediagoblin' >> /etc/systemd/system/gmg.service
  4954. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg.service
  4955. echo '#Environment=CELERY_ALWAYS_EAGER=true' >> /etc/systemd/system/gmg.service
  4956. echo 'Environment=CELERY_ALWAYS_EAGER=false' >> /etc/systemd/system/gmg.service
  4957. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg.service
  4958. echo "ExecStart=$MEDIAGOBLIN_PATH_BIN/paster serve $MEDIAGOBLIN_PATH/paste_local.ini --pid-file=/var/run/mediagoblin/paster.pid --log-file=/var/log/nginx/mediagoblin_paster.log --daemon --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543" >> /etc/systemd/system/gmg.service
  4959. echo "ExecStop=$MEDIAGOBLIN_PATH_BIN/paster serve --pid-file=/var/run/mediagoblin/paster.pid $MEDIAGOBLIN_PATH/paste_local.ini stop" >> /etc/systemd/system/gmg.service
  4960. echo 'PIDFile=/var/run/mediagoblin/mediagoblin.pid' >> /etc/systemd/system/gmg.service
  4961. echo '' >> /etc/systemd/system/gmg.service
  4962. echo '[Install]' >> /etc/systemd/system/gmg.service
  4963. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg.service
  4964. echo '[Unit]' > /etc/systemd/system/gmg-celeryd.service
  4965. echo 'Description=Mediagoblin Celeryd' >> /etc/systemd/system/gmg-celeryd.service
  4966. echo '' >> /etc/systemd/system/gmg-celeryd.service
  4967. echo '[Service]' >> /etc/systemd/system/gmg-celeryd.service
  4968. echo 'User=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  4969. echo 'Group=mediagoblin' >> /etc/systemd/system/gmg-celeryd.service
  4970. echo 'Type=simple' >> /etc/systemd/system/gmg-celeryd.service
  4971. echo "WorkingDirectory=$MEDIAGOBLIN_PATH" >> /etc/systemd/system/gmg-celeryd.service
  4972. echo "Environment='MEDIAGOBLIN_CONFIG=$MEDIAGOBLIN_PATH/mediagoblin_local.ini' CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery" >> /etc/systemd/system/gmg-celeryd.service
  4973. echo "ExecStart=$MEDIAGOBLIN_PATH_BIN/celeryd" >> /etc/systemd/system/gmg-celeryd.service
  4974. echo 'PIDFile=/var/run/mediagoblin/mediagoblin-celeryd.pid' >> /etc/systemd/system/gmg-celeryd.service
  4975. echo '' >> /etc/systemd/system/gmg-celeryd.service
  4976. echo '[Install]' >> /etc/systemd/system/gmg-celeryd.service
  4977. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/gmg-celeryd.service
  4978. systemctl start gmg.service
  4979. systemctl start gmg-celeryd.service
  4980. echo 'install_mediagoblin' >> $COMPLETION_FILE
  4981. }
  4982. function create_upgrade_script {
  4983. if grep -Fxq "create_upgrade_script" $COMPLETION_FILE; then
  4984. return
  4985. fi
  4986. echo '#!/bin/bash' > /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4987. echo '' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4988. echo 'apt-get -y update' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4989. echo 'apt-get -y --force-yes upgrade' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4990. if grep -Fxq "install_redmatrix" $COMPLETION_FILE; then
  4991. echo "cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4992. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4993. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4994. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4995. echo "cd /var/www/$REDMATRIX_DOMAIN_NAME/htdocs/addon" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4996. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4997. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4998. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  4999. fi
  5000. if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
  5001. echo "cd /var/www/$MICROBLOG_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5002. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5003. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5004. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5005. fi
  5006. if grep -Fxq "install_blog" $COMPLETION_FILE; then
  5007. echo "cd /var/www/$FULLBLOG_DOMAIN_NAME/htdocs" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5008. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5009. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5010. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5011. fi
  5012. if grep -Fxq "install_owncloud_music_app" $COMPLETION_FILE; then
  5013. echo "cd /usr/share/owncloud/apps/music" >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5014. echo 'git stash' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5015. echo 'git stash drop' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5016. echo 'git pull' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5017. fi
  5018. echo 'exit 0' >> /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5019. chmod +x /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
  5020. echo 'create_upgrade_script' >> $COMPLETION_FILE
  5021. }
  5022. function intrusion_detection {
  5023. if grep -Fxq "intrusion_detection" $COMPLETION_FILE; then
  5024. return
  5025. fi
  5026. apt-get -y --force-yes install tripwire
  5027. apt-get -y --force-yes autoremove
  5028. cd /etc/tripwire
  5029. cp site.key $DOMAIN_NAME-site.key
  5030. echo ''
  5031. echo ''
  5032. echo '*** Installing intrusion detection. Press Enter when asked for the local and site passphrases. ***'
  5033. echo ''
  5034. echo ''
  5035. tripwire --init
  5036. # make a script for easy resetting of the tripwire
  5037. echo '#!/bin/sh' > /usr/bin/reset-tripwire
  5038. echo 'tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt' >> /usr/bin/reset-tripwire
  5039. chmod +x /usr/bin/reset-tripwire
  5040. reset-tripwire
  5041. sed -i 's/SYSLOGREPORTING =true/#SYSLOGREPORTING =false/g' /etc/tripwire/twcfg.txt
  5042. sed -i '/# These files change the behavior of the root account/,/}/ s/.*//g' /etc/tripwire/twpol.txt
  5043. reset-tripwire
  5044. echo 'intrusion_detection' >> $COMPLETION_FILE
  5045. }
  5046. # see http://adammelton.com/tor_dongle.php
  5047. # Attach the BeagleBone to a PC via USB and then have an enthernet
  5048. # connection to the internet router
  5049. function create_tor_dongle {
  5050. if grep -Fxq "create_tor_dongle" $COMPLETION_FILE; then
  5051. return
  5052. fi
  5053. if [[ $SYSTEM_TYPE != "$VARIANT_TOR_DONGLE" ]]; then
  5054. return
  5055. fi
  5056. apt-get -y --force-yes install tor tor-arm
  5057. # firewall
  5058. iptables -A INPUT -i usb0 -p tcp --dport 9050 -j ACCEPT
  5059. iptables -A INPUT -i usb0 -p tcp --dport 9051 -j ACCEPT
  5060. save_firewall_settings
  5061. # tor settings
  5062. sed -i "s/#SocksPort 192.168.0.1:9100/SocksPort 192.168.7.2:9050/g" /etc/tor/torrc
  5063. sed -i 's/#ControlPort 9051/ControlPort 9051/g' /etc/tor/torrc
  5064. sed -i 's/#CookieAuthentication 1/CookieAuthentication 1/g' /etc/tor/torrc
  5065. if ! grep -q "DisableDebuggerAttachment" /etc/tor/torrc; then
  5066. echo 'DisableDebuggerAttachment 0' >> /etc/tor/torrc
  5067. fi
  5068. # ensure that USB networking is enabled
  5069. echo '# The loopback network interface' > /etc/network/interfaces
  5070. echo 'auto lo' >> /etc/network/interfaces
  5071. echo 'iface lo inet loopback' >> /etc/network/interfaces
  5072. echo '' >> /etc/network/interfaces
  5073. echo '# The primary network interface' >> /etc/network/interfaces
  5074. echo 'auto eth0' >> /etc/network/interfaces
  5075. echo 'iface eth0 inet dhcp' >> /etc/network/interfaces
  5076. echo '' >> /etc/network/interfaces
  5077. echo '# USB network interface' >> /etc/network/interfaces
  5078. echo 'iface usb0 inet static' >> /etc/network/interfaces
  5079. echo ' address 192.168.7.2' >> /etc/network/interfaces
  5080. echo ' netmask 255.255.255.0' >> /etc/network/interfaces
  5081. echo ' network 192.168.7.0' >> /etc/network/interfaces
  5082. echo ' gateway 192.168.7.1' >> /etc/network/interfaces
  5083. if ! grep -q "Tor Dongle" /home/$MY_USERNAME/README; then
  5084. echo '' >> /home/$MY_USERNAME/README
  5085. echo '' >> /home/$MY_USERNAME/README
  5086. echo 'Tor Dongle' >> /home/$MY_USERNAME/README
  5087. echo '==========' >> /home/$MY_USERNAME/README
  5088. echo 'Connect your PC to the Beaglebone via the USB cable' >> /home/$MY_USERNAME/README
  5089. echo 'and the Beaglebone ethernet to your internet router.' >> /home/$MY_USERNAME/README
  5090. echo '' >> /home/$MY_USERNAME/README
  5091. echo 'Within your network proxy settings set the SOCKS host' >> /home/$MY_USERNAME/README
  5092. echo 'to 192.168.7.2 and the port to 9050, with remote' >> /home/$MY_USERNAME/README
  5093. echo 'DNS enabled. There should be no proxying for localhost' >> /home/$MY_USERNAME/README
  5094. echo 'and 127.0.0.1' >> /home/$MY_USERNAME/README
  5095. fi
  5096. echo 'Freedombone Tor Dongle installation is complete'
  5097. cat /home/$MY_USERNAME/README
  5098. service networking restart
  5099. service tor restart
  5100. exit 873
  5101. }
  5102. # see https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy
  5103. # Local Redirection and Anonymizing Middlebox
  5104. function route_outgoing_traffic_through_tor {
  5105. if grep -Fxq "route_outgoing_traffic_through_tor" $COMPLETION_FILE; then
  5106. return
  5107. fi
  5108. if [[ $SYSTEM_TYPE == "$VARIANT_TOR_DONGLE" ]]; then
  5109. return
  5110. fi
  5111. if [[ $ROUTE_THROUGH_TOR != "yes" ]]; then
  5112. return
  5113. fi
  5114. apt-get -y --force-yes install tor tor-arm
  5115. ### set variables
  5116. # Destinations you don't want routed through Tor
  5117. _non_tor="192.168.1.0/24 192.168.0.0/24"
  5118. # The user that Tor runs as
  5119. _tor_uid="debian-tor"
  5120. # Tor's TransPort
  5121. _trans_port="9040"
  5122. # Your internal interface
  5123. _int_if="eth0"
  5124. ### Set iptables *nat
  5125. iptables -t nat -A OUTPUT -o lo -j RETURN
  5126. iptables -t nat -A OUTPUT -m owner --uid-owner $_tor_uid -j RETURN
  5127. iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53
  5128. # Allow clearnet access for hosts in $_non_tor
  5129. for _clearnet in $_non_tor; do
  5130. iptables -t nat -A OUTPUT -d $_clearnet -j RETURN
  5131. iptables -t nat -A PREROUTING -i $_int_if -d $_clearnet -j RETURN
  5132. done
  5133. # Redirect all other pre-routing and output to Tor
  5134. iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $_trans_port
  5135. iptables -t nat -A PREROUTING -i $_int_if -p udp --dport 53 -j REDIRECT --to-ports 53
  5136. iptables -t nat -A PREROUTING -i $_int_if -p tcp --syn -j REDIRECT --to-ports $_trans_port
  5137. ### set iptables *filter
  5138. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  5139. # Allow clearnet access for hosts in $_non_tor
  5140. for _clearnet in $_non_tor 127.0.0.0/8; do
  5141. iptables -A OUTPUT -d $_clearnet -j ACCEPT
  5142. done
  5143. # Allow only Tor output
  5144. iptables -A OUTPUT -m owner --uid-owner $_tor_uid -j ACCEPT
  5145. iptables -A OUTPUT -j REJECT
  5146. save_firewall_settings
  5147. if ! grep -q "fs.file-max" /etc/sysctl.conf; then
  5148. echo "fs.file-max=100000" >> /etc/sysctl.conf
  5149. /sbin/sysctl -p
  5150. fi
  5151. echo 'domain localdomain' > /etc/resolv.conf
  5152. echo 'search localdomain' >> /etc/resolv.conf
  5153. echo 'nameserver 127.0.0.1' >> /etc/resolv.conf
  5154. if ! grep -q "VirtualAddrNetworkIPv4" /etc/tor/torrc; then
  5155. echo 'VirtualAddrNetworkIPv4 10.192.0.0/10' >> /etc/tor/torrc
  5156. fi
  5157. if ! grep -q "AutomapHostsOnResolve" /etc/tor/torrc; then
  5158. echo 'AutomapHostsOnResolve 1' >> /etc/tor/torrc
  5159. fi
  5160. if ! grep -q "TransPort" /etc/tor/torrc; then
  5161. echo 'TransPort 9040' >> /etc/tor/torrc
  5162. fi
  5163. if ! grep -q "TransListenAddress 127.0.0.1" /etc/tor/torrc; then
  5164. echo 'TransListenAddress 127.0.0.1' >> /etc/tor/torrc
  5165. fi
  5166. if ! grep -q "TransListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" /etc/tor/torrc; then
  5167. echo "TransListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/tor/torrc
  5168. fi
  5169. if ! grep -q "DNSPort" /etc/tor/torrc; then
  5170. echo 'DNSPort 53' >> /etc/tor/torrc
  5171. fi
  5172. if ! grep -q "DNSListenAddress 127.0.0.1" /etc/tor/torrc; then
  5173. echo 'DNSListenAddress 127.0.0.1' >> /etc/tor/torrc
  5174. fi
  5175. if ! grep -q "DNSListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" /etc/tor/torrc; then
  5176. echo "DNSListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/tor/torrc
  5177. fi
  5178. echo 'route_outgoing_traffic_through_tor' >> $COMPLETION_FILE
  5179. }
  5180. # A command to create a git repository for a project
  5181. function create_git_project {
  5182. if grep -Fxq "create_git_project" $COMPLETION_FILE; then
  5183. return
  5184. fi
  5185. apt-get -y install git
  5186. echo '#!/bin/bash' > /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5187. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5188. echo 'GIT_PROJECT_NAME=$1' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5189. echo 'if [ ! $GIT_PROJECT_NAME ]; then' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5190. echo ' echo "Please specify a project name, without any spaces"' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5191. echo ' exit 1' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5192. echo 'fi' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5193. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5194. echo 'if [ ! -d /home/$USER/projects/$GIT_PROJECT_NAME ]; then' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5195. echo ' mkdir -p /home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5196. echo 'fi' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5197. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5198. echo 'cd /home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5199. echo 'git init --bare' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5200. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5201. echo -n 'echo "Your project has been created, ' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5202. echo 'use the following command to clone the repository"' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5203. echo -n " git clone ssh://$MY_USERNAME@$DOMAIN_NAME:$SSH_PORT" >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5204. echo '/home/$USER/projects/$GIT_PROJECT_NAME' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5205. echo '' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5206. echo 'exit 0' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5207. chmod +x /usr/bin/$CREATE_GIT_PROJECT_COMMAND
  5208. echo 'create_git_project' >> $COMPLETION_FILE
  5209. }
  5210. # Create daily backups of any projects on Github
  5211. # Then if Github goes away, turns evil, is censored or has
  5212. # outages then you still have access to your projects
  5213. function backup_github_projects {
  5214. if grep -Fxq "backup_github_projects" $COMPLETION_FILE; then
  5215. return
  5216. fi
  5217. if [ ! $GITHUB_USERNAME ]; then
  5218. return 731
  5219. fi
  5220. if [ ! $GITHUB_BACKUP_DIRECTORY ]; then
  5221. return 732
  5222. fi
  5223. apt-get -y install git
  5224. # create a github backups directory if needed
  5225. if [ ! -d $GITHUB_BACKUP_DIRECTORY ]; then
  5226. mkdir -p $GITHUB_BACKUP_DIRECTORY
  5227. fi
  5228. # get the backup utility
  5229. cd $INSTALL_DIR
  5230. git clone https://github.com/josegonzalez/python-github-backup
  5231. # install it
  5232. cd $INSTALL_DIR/python-github-backup
  5233. python setup.py install
  5234. # add a daily cron entry
  5235. echo '#!/bin/bash' > /etc/cron.daily/github
  5236. echo "github-backup $GITHUB_USERNAME -o $GITHUB_BACKUP_DIRECTORY --repositories" >> /etc/cron.daily/github
  5237. echo 'exit 0' >> /etc/cron.daily/github
  5238. chmod +x /etc/cron.daily/github
  5239. # do an initial backup
  5240. /etc/cron.daily/github
  5241. echo 'backup_github_projects' >> $COMPLETION_FILE
  5242. }
  5243. function install_final {
  5244. if grep -Fxq "install_final" $COMPLETION_FILE; then
  5245. return
  5246. fi
  5247. # unmount any attached usb drive
  5248. if [ -d $USB_MOUNT ]; then
  5249. umount $USB_MOUNT
  5250. rm -rf $USB_MOUNT
  5251. fi
  5252. echo 'install_final' >> $COMPLETION_FILE
  5253. echo ''
  5254. echo ' *** Freedombone installation is complete. Rebooting... ***'
  5255. echo ''
  5256. if [ -f "/home/$MY_USERNAME/README" ]; then
  5257. echo "See /home/$MY_USERNAME/README for post-installation instructions."
  5258. echo ''
  5259. fi
  5260. reboot
  5261. }
  5262. read_configuration
  5263. argument_checks
  5264. install_not_on_BBB
  5265. remove_default_user
  5266. configure_firewall
  5267. configure_firewall_for_ssh
  5268. configure_firewall_for_dns
  5269. configure_firewall_for_ftp
  5270. configure_firewall_for_web_access
  5271. remove_proprietary_repos
  5272. change_debian_repos
  5273. enable_backports
  5274. configure_dns
  5275. initial_setup
  5276. enforce_good_passwords
  5277. install_editor
  5278. change_login_message
  5279. update_the_kernel
  5280. enable_zram
  5281. random_number_generator
  5282. set_your_domain_name
  5283. time_synchronisation
  5284. configure_internet_protocol
  5285. create_git_project
  5286. backup_github_projects
  5287. configure_ssh
  5288. check_hwrng
  5289. search_for_attached_usb_drive
  5290. regenerate_ssh_keys
  5291. script_to_make_self_signed_certificates
  5292. create_upgrade_script
  5293. route_outgoing_traffic_through_tor
  5294. install_watchdog_script
  5295. configure_email
  5296. create_procmail
  5297. #spam_filtering
  5298. configure_imap
  5299. configure_gpg
  5300. encrypt_incoming_email
  5301. #encrypt_outgoing_email
  5302. email_client
  5303. configure_firewall_for_email
  5304. folders_for_mailing_lists
  5305. folders_for_email_addresses
  5306. dynamic_dns_freedns
  5307. create_public_mailing_list
  5308. #create_private_mailing_list
  5309. encrypt_all_email
  5310. import_email
  5311. script_for_attaching_usb_drive
  5312. install_web_server
  5313. configure_firewall_for_web_server
  5314. install_owncloud
  5315. install_owncloud_music_app
  5316. install_xmpp
  5317. configure_firewall_for_xmpp
  5318. install_irc_server
  5319. configure_firewall_for_irc
  5320. install_wiki
  5321. install_blog
  5322. install_gnu_social
  5323. install_redmatrix
  5324. install_dlna_server
  5325. configure_firewall_for_dlna
  5326. install_mediagoblin
  5327. create_backup_script
  5328. create_restore_script
  5329. backup_to_friends_servers
  5330. restore_from_friend
  5331. create_tor_dongle
  5332. intrusion_detection
  5333. install_final
  5334. echo 'Freedombone installation is complete'
  5335. exit 0